21 $this->useCompression =
true;
26 $this->useCompression =
false;
31 $documentService = CBPRuntime::GetRuntime(
true)->getDocumentService();
33 $documentFieldsAliasesMap = CBPDocument::getDocumentFieldsAliasesMap($documentFieldsTmp);
36 $len = mb_strlen(
"_PRINTABLE");
37 foreach ($documentFieldsTmp as
$k => $v)
39 if (mb_strtoupper(mb_substr(
$k, -$len)) !=
"_PRINTABLE")
41 $documentFields[
$k] = $v;
45 $tplData = $tpl->collectValues();
47 if ($documentFieldsAliasesMap)
49 self::replaceTemplateDocumentFieldsAliases($tplData[
'TEMPLATE'], $documentFieldsAliasesMap);
50 self::replaceVariablesDocumentFieldsAliases($tplData[
'PARAMETERS'], $documentFieldsAliasesMap);
51 self::replaceVariablesDocumentFieldsAliases($tplData[
'VARIABLES'], $documentFieldsAliasesMap);
52 self::replaceVariablesDocumentFieldsAliases($tplData[
'CONSTANTS'], $documentFieldsAliasesMap);
57 "TEMPLATE" => $tplData[
"TEMPLATE"],
58 "PARAMETERS" => $tplData[
"PARAMETERS"],
59 "VARIABLES" => $tplData[
"VARIABLES"],
60 "CONSTANTS" => $tplData[
"CONSTANTS"],
61 "DOCUMENT_FIELDS" => $documentFields,
68 $datum = serialize($datum);
70 if ($this->useCompression)
75 return (
new Result\Pack())->setPackage($datum);
84 if (!is_array($datumTmp) || is_array($datumTmp) && !array_key_exists(
"TEMPLATE", $datumTmp))
87 $datumTmp =
\CheckSerializedData($datumTmp) ? @unserialize($datumTmp, [
'allowed_classes' =>
false]) : null;
90 if (!is_array($datumTmp) || is_array($datumTmp) && !array_key_exists(
"TEMPLATE", $datumTmp))
92 $result->addError(
new Main\
Error(Loc::getMessage(
"BIZPROC_WF_TEMPLATE_BPT_WRONG_DATA")));
96 if (array_key_exists(
"VERSION", $datumTmp) && $datumTmp[
"VERSION"] == 2)
98 $datumTmp[
"CONSTANTS"] = $datumTmp[
"CONSTANTS"] ?? [];
102 $tpl = WorkflowTemplateTable::createObject();
103 $tpl->set(
'TEMPLATE', $datumTmp[
'TEMPLATE']);
104 $tpl->set(
'PARAMETERS', $datumTmp[
'PARAMETERS']);
105 $tpl->set(
'VARIABLES', $datumTmp[
'VARIABLES']);
106 $tpl->set(
'CONSTANTS', $datumTmp[
'CONSTANTS']);
109 if (is_array($datumTmp[
'DOCUMENT_FIELDS'] ??
null))
111 $result->setDocumentFields($datumTmp[
'DOCUMENT_FIELDS']);
117 private static function replaceTemplateDocumentFieldsAliases(&
$template, $aliases)
121 self::replaceActivityDocumentFieldsAliases(
$activity, $aliases);
122 if (is_array(
$activity[
"Children"] ??
null))
124 self::replaceTemplateDocumentFieldsAliases(
$activity[
'Children'], $aliases);
129 private static function replaceActivityDocumentFieldsAliases(&
$activity, $aliases)
136 $activity[
'Properties'][
$key] = self::replaceValueDocumentFieldsAliases($value, $aliases);
138 if (
$activity[
'Type'] ===
'IfElseBranchActivity' &&
$key ===
'fieldcondition')
140 $activity[
'Properties'][
$key] = self::replaceFieldConditionsDocumentFieldsAliases(
148 private static function replaceVariablesDocumentFieldsAliases(&$variables, $aliases)
150 if (!is_array($variables))
153 foreach ($variables as
$key => &$variable)
155 $variable[
'Default'] = self::replaceValueDocumentFieldsAliases($variable[
'Default'], $aliases);
158 isset($variable[
'Options'])
159 && is_scalar($variable[
'Options'])
160 && array_key_exists($variable[
'Options'], $aliases)
163 $variable[
'Options'] = $aliases[$variable[
'Options']];
168 private static function replaceValueDocumentFieldsAliases($value, $aliases)
170 if (is_array($value))
172 $replacesValue =
array();
175 if (array_key_exists(
$key, $aliases))
178 $replacesValue[
$key] = self::replaceValueDocumentFieldsAliases(
$val, $aliases);
182 sizeof($replacesValue) == 2
183 && isset($replacesValue[0])
184 && $replacesValue[0] ==
'Document'
185 && isset($replacesValue[1])
186 && array_key_exists($replacesValue[1], $aliases)
189 $replacesValue[1] = $aliases[$replacesValue[1]];
195 foreach ($aliases as $search => $replace)
197 $value = preg_replace(
'#(\{=\s*Document\s*\:\s*)'.$search.
'#i',
'\\1'.$replace, $value);
204 private static function replaceFieldConditionsDocumentFieldsAliases($conditions, $aliases)
206 foreach ($conditions as
$key => $condition)
208 if (array_key_exists($condition[0], $aliases))
209 $conditions[
$key][0] = $aliases[$condition[0]];