PMCORE-1203 Help on how batch routing feature works and help to debug the code with a client
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use ProcessMaker\Core\MultiProcOpen;
|
||||
use ProcessMaker\Commands\PopulateTableReport;
|
||||
use ProcessMaker\Model\Application;
|
||||
|
||||
/**
|
||||
@@ -207,168 +209,110 @@ class ReportTables
|
||||
//we have to do the propel connection
|
||||
$database = $this->chooseDB($connectionShortName);
|
||||
$connection = Propel::getConnection($database);
|
||||
$statement = $connection->createStatement();
|
||||
if ($type == 'GRID') {
|
||||
$aux = explode('-', $grid);
|
||||
$grid = $aux[0];
|
||||
}
|
||||
$case = new Cases();
|
||||
try {
|
||||
switch (DB_ADAPTER) {
|
||||
case 'mysql':
|
||||
$applications = Application::getByProUid($proUid);
|
||||
foreach ($applications as $application) {
|
||||
$appData = $case->unserializeData($application->APP_DATA);
|
||||
DB::delete("DELETE FROM `{$tableName}` WHERE APP_UID = '{$application->APP_UID}'");
|
||||
if ($type == 'NORMAL') {
|
||||
$query = 'INSERT INTO `' . $tableName . '` (';
|
||||
$query .= '`APP_UID`,`APP_NUMBER`';
|
||||
foreach ($fields as $field) {
|
||||
$query .= ',`' . $field['sFieldName'] . '`';
|
||||
}
|
||||
$query .= ") VALUES ('" . $application->APP_UID . "'," . $application->APP_NUMBER;
|
||||
$applicationTableName = (new Application())->getTable();
|
||||
$deleteQuery = "TRUNCATE TABLE `{$tableName}` ";
|
||||
DB::delete($deleteQuery);
|
||||
|
||||
$applications = Application::getByProUid($proUid);
|
||||
$i = 1;
|
||||
$queryValues = "";
|
||||
$numberRecords = 1000;
|
||||
$n = count($applications);
|
||||
foreach ($applications as $application) {
|
||||
$appData = $case->unserializeData($application->APP_DATA);
|
||||
if ($type == 'NORMAL') {
|
||||
$query = 'INSERT INTO `' . $tableName . '` (';
|
||||
$query .= '`APP_UID`,`APP_NUMBER`';
|
||||
foreach ($fields as $field) {
|
||||
$query .= ',`' . $field['sFieldName'] . '`';
|
||||
}
|
||||
$headQuery = $query . ") VALUES ";
|
||||
$query = "('" . $application->APP_UID . "'," . $application->APP_NUMBER;
|
||||
foreach ($fields as $field) {
|
||||
switch ($field['sType']) {
|
||||
case 'number':
|
||||
$query .= ',' . (isset($appData[$field['sFieldName']]) ? (float) str_replace(',', '', $appData[$field['sFieldName']]) : '0');
|
||||
break;
|
||||
case 'char':
|
||||
case 'text':
|
||||
if (!isset($appData[$field['sFieldName']])) {
|
||||
$appData[$field['sFieldName']] = '';
|
||||
}
|
||||
$string = $appData[$field['sFieldName']];
|
||||
if (is_array($string)) {
|
||||
$string = implode($string, ",");
|
||||
}
|
||||
$query .= ",'" . (isset($appData[$field['sFieldName']]) ? mysqli_real_escape_string($connection->getResource(), $string) : '') . "'";
|
||||
break;
|
||||
case 'date':
|
||||
$value = (isset($appData[$field['sFieldName']]) && trim($appData[$field['sFieldName']])) != '' ? "'" . $appData[$field['sFieldName']] . "'" : 'NULL';
|
||||
$query .= "," . $value;
|
||||
break;
|
||||
}
|
||||
}
|
||||
$query .= ')';
|
||||
$queryValues = $queryValues . $query . ",";
|
||||
if ($i % $numberRecords === 0 || $i === $n) {
|
||||
$queryValues = rtrim($queryValues, ",");
|
||||
$query = $headQuery . $queryValues;
|
||||
$queryValues = "";
|
||||
$workspace = config("system.workspace");
|
||||
$processesManager = new MultiProcOpen();
|
||||
$processesManager->chunk(1, 1, function($size, $start, $limit) use ($query, $workspace) {
|
||||
return new PopulateTableReport($workspace, $query);
|
||||
});
|
||||
}
|
||||
} else {
|
||||
if (isset($appData[$grid])) {
|
||||
$query = 'INSERT INTO `' . $tableName . '` (';
|
||||
$query .= '`APP_UID`,`APP_NUMBER`,`ROW`';
|
||||
foreach ($fields as $field) {
|
||||
$query .= ',`' . $field['sFieldName'] . '`';
|
||||
}
|
||||
$headQuery = $query . ") VALUES ";
|
||||
foreach ($appData[$grid] as $indexRow => $gridRow) {
|
||||
$query = "('" . $application->APP_UID . "'," . (int) $application->APP_NUMBER . ',' . $indexRow;
|
||||
foreach ($fields as $field) {
|
||||
switch ($field['sType']) {
|
||||
case 'number':
|
||||
$query .= ',' . (isset($appData[$field['sFieldName']]) ? (float) str_replace(',', '', $appData[$field['sFieldName']]) : '0');
|
||||
$query .= ',' . (isset($gridRow[$field['sFieldName']]) ? (float) str_replace(',', '', $gridRow[$field['sFieldName']]) : '0');
|
||||
break;
|
||||
case 'char':
|
||||
case 'text':
|
||||
if (!isset($appData[$field['sFieldName']])) {
|
||||
$appData[$field['sFieldName']] = '';
|
||||
if (!isset($gridRow[$field['sFieldName']])) {
|
||||
$gridRow[$field['sFieldName']] = '';
|
||||
}
|
||||
$string = $appData[$field['sFieldName']];
|
||||
if (is_array($string)) {
|
||||
$string = implode($string, ",");
|
||||
}
|
||||
$query .= ",'" . (isset($appData[$field['sFieldName']]) ? mysqli_real_escape_string($connection->getResource(), $string) : '') . "'";
|
||||
$stringEscape = mysqli_real_escape_string($connection->getResource(), $gridRow[$field['sFieldName']]);
|
||||
$query .= ",'" . (isset($gridRow[$field['sFieldName']]) ? $stringEscape : '') . "'";
|
||||
break;
|
||||
case 'date':
|
||||
$value = (isset($appData[$field['sFieldName']]) && trim($appData[$field['sFieldName']])) != '' ? "'" . $appData[$field['sFieldName']] . "'" : 'NULL';
|
||||
$value = (isset($gridRow[$field['sFieldName']]) && trim($gridRow[$field['sFieldName']])) != '' ? "'" . $gridRow[$field['sFieldName']] . "'" : 'NULL';
|
||||
$query .= "," . $value;
|
||||
break;
|
||||
}
|
||||
}
|
||||
$query .= ')';
|
||||
DB::insert($query);
|
||||
} else {
|
||||
if (isset($appData[$grid])) {
|
||||
foreach ($appData[$grid] as $indexRow => $gridRow) {
|
||||
$query = 'INSERT INTO `' . $tableName . '` (';
|
||||
$query .= '`APP_UID`,`APP_NUMBER`,`ROW`';
|
||||
foreach ($fields as $field) {
|
||||
$query .= ',`' . $field['sFieldName'] . '`';
|
||||
}
|
||||
$query .= ") VALUES ('" . $application->APP_UID . "'," . (int) $application->APP_NUMBER . ',' . $indexRow;
|
||||
foreach ($fields as $field) {
|
||||
switch ($field['sType']) {
|
||||
case 'number':
|
||||
$query .= ',' . (isset($gridRow[$field['sFieldName']]) ? (float) str_replace(',', '', $gridRow[$field['sFieldName']]) : '0');
|
||||
break;
|
||||
case 'char':
|
||||
case 'text':
|
||||
if (!isset($gridRow[$field['sFieldName']])) {
|
||||
$gridRow[$field['sFieldName']] = '';
|
||||
}
|
||||
$stringEscape = mysqli_real_escape_string($connection->getResource(), $gridRow[$field['sFieldName']]);
|
||||
$query .= ",'" . (isset($gridRow[$field['sFieldName']]) ? $stringEscape : '') . "'";
|
||||
break;
|
||||
case 'date':
|
||||
$value = (isset($gridRow[$field['sFieldName']]) && trim($gridRow[$field['sFieldName']])) != '' ? "'" . $gridRow[$field['sFieldName']] . "'" : 'NULL';
|
||||
$query .= "," . $value;
|
||||
break;
|
||||
}
|
||||
}
|
||||
$query .= ')';
|
||||
DB::insert($query);
|
||||
}
|
||||
}
|
||||
$queryValues = $queryValues . $query . ",";
|
||||
}
|
||||
if ($i % $numberRecords === 0 || $i === $n) {
|
||||
$queryValues = rtrim($queryValues, ",");
|
||||
$query = $headQuery . $queryValues;
|
||||
$queryValues = "";
|
||||
$workspace = config("system.workspace");
|
||||
$processesManager = new MultiProcOpen();
|
||||
$processesManager->chunk(1, 1, function($size, $start, $limit) use ($query, $workspace) {
|
||||
return new PopulateTableReport($workspace, $query);
|
||||
});
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
/**
|
||||
* For SQLServer code
|
||||
* Note: It is only possible to create Report Tables in MySQL databases. The list will only show connections to those databases even if the project has connections to other DBMS.
|
||||
* This section is not used and has been marked for deletion.
|
||||
* @link https://wiki.processmaker.com/3.0/Report_Tables#Creating_Report_Tables
|
||||
* @deprecated
|
||||
*/
|
||||
case 'mssql':
|
||||
$criteria = new Criteria('workflow');
|
||||
$criteria->add(ApplicationPeer::PRO_UID, $proUid);
|
||||
$criteria->addAscendingOrderByColumn(ApplicationPeer::APP_NUMBER);
|
||||
$dataset = ApplicationPeer::doSelectRS($criteria);
|
||||
$dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
|
||||
$dataset->next();
|
||||
while ($row = $dataset->getRow()) {
|
||||
$appData = unserialize($row['APP_DATA']);
|
||||
//verify use mssql
|
||||
mysqli_query(
|
||||
$connection->getResource(), 'DELETE FROM [' . $tableName . "] WHERE APP_UID = '" . $row['APP_UID'] . "'"
|
||||
);
|
||||
if ($type == 'NORMAL') {
|
||||
$query = 'INSERT INTO [' . $tableName . '] (';
|
||||
$query .= '[APP_UID],[APP_NUMBER]';
|
||||
foreach ($fields as $field) {
|
||||
$query .= ',[' . $field['sFieldName'] . ']';
|
||||
}
|
||||
$query .= ") VALUES ('" . $row['APP_UID'] . "'," . (int) $row['APP_NUMBER'];
|
||||
foreach ($fields as $field) {
|
||||
switch ($field['sType']) {
|
||||
case 'number':
|
||||
$query .= ',' . (isset($appData[$field['sFieldName']]) ? (float) str_replace(',', '', $appData[$field['sFieldName']]) : '0');
|
||||
break;
|
||||
case 'char':
|
||||
case 'text':
|
||||
if (!isset($appData[$field['sFieldName']])) {
|
||||
$appData[$field['sFieldName']] = '';
|
||||
}
|
||||
$stringEscape = mysqli_real_escape_string($connection->getResource(), $appData[$field['sFieldName']]);
|
||||
$query .= ",'" . (isset($appData[$field['sFieldName']]) ? $stringEscape : '') . "'";
|
||||
break;
|
||||
case 'date':
|
||||
$query .= ",'" . (isset($appData[$field['sFieldName']]) ? $appData[$field['sFieldName']] : '') . "'";
|
||||
break;
|
||||
}
|
||||
}
|
||||
$query .= ')';
|
||||
$rs = $statement->executeQuery($query);
|
||||
} else {
|
||||
if (isset($appData[$grid])) {
|
||||
foreach ($appData[$grid] as $indexRow => $gridRow) {
|
||||
$query = 'INSERT INTO [' . $tableName . '] (';
|
||||
$query .= '`APP_UID`,`APP_NUMBER`,`ROW`';
|
||||
foreach ($fields as $field) {
|
||||
$query .= ',[' . $field['sFieldName'] . ']';
|
||||
}
|
||||
$query .= ") VALUES ('" . $row['APP_UID'] . "'," . (int) $row['APP_NUMBER'] . ',' . $indexRow;
|
||||
foreach ($fields as $field) {
|
||||
switch ($field['sType']) {
|
||||
case 'number':
|
||||
$query .= ',' . (isset($gridRow[$field['sFieldName']]) ? (float) str_replace(',', '', $gridRow[$field['sFieldName']]) : '0');
|
||||
break;
|
||||
case 'char':
|
||||
case 'text':
|
||||
if (!isset($gridRow[$field['sFieldName']])) {
|
||||
$gridRow[$field['sFieldName']] = '';
|
||||
}
|
||||
$stringEscape = mysqli_real_escape_string($connection->getResource(), $gridRow[$field['sFieldName']]);
|
||||
$query .= ",'" . (isset($gridRow[$field['sFieldName']]) ? $stringEscape : '') . "'";
|
||||
break;
|
||||
case 'date':
|
||||
$query .= ",'" . (isset($gridRow[$field['sFieldName']]) ? $gridRow[$field['sFieldName']] : '') . "'";
|
||||
break;
|
||||
}
|
||||
}
|
||||
$query .= ')';
|
||||
$rs = $statement->executeQuery($query);
|
||||
}
|
||||
}
|
||||
}
|
||||
$dataset->next();
|
||||
}
|
||||
break;
|
||||
}
|
||||
$i = $i + 1;
|
||||
}
|
||||
} catch (Exception $oError) {
|
||||
throw ($oError);
|
||||
|
||||
Reference in New Issue
Block a user