1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
activitycondition.php
См. документацию.
1<?php
2
3abstract class CBPActivityCondition
4{
5 use \Bitrix\Bizproc\Debugger\Mixins\WriterDebugTrack;
6
7 public const CONDITION_JOINER_AND = 0;
8 public const CONDITION_JOINER_OR = 1;
9
10 public $condition = null;
11
12 abstract public function evaluate(CBPActivity $ownerActivity);
13
14 public static function createInstance($code, $data)
15 {
16 if (preg_match("#[^a-zA-Z0-9_]#", $code))
17 {
18 throw new Exception("Activity '" . $code . "' is not valid");
19 }
20
21 $classname = 'CBP' . $code;
22
23 return new $classname($data);
24 }
25
26 public function collectUsages(CBPActivity $ownerActivity)
27 {
28 return [];
29 }
30
31 public static function validateProperties($value = null, CBPWorkflowTemplateUser $user = null)
32 {
33 return [];
34 }
35
36 public static function callStaticMethod($code, $method, $arParameters = array())
37 {
38 $runtime = CBPRuntime::GetRuntime();
39 $runtime->IncludeActivityFile($code);
40
41 if (preg_match("#[^a-zA-Z0-9_]#", $code))
42 {
43 throw new Exception("Activity '" . $code . "' is not valid");
44 }
45
46 $classname = 'CBP'.$code;
47
48 return call_user_func_array(array($classname, $method), $arParameters);
49 }
50
51 protected static function getConditionFieldInputValue(string $operator, $parameterDocumentType, $property, $fieldName, $request): Bitrix\Main\Result
52 {
53 $documentService = CBPRuntime::getRuntime()->getDocumentService();
54
56 $isBetweenOperator = $operator === \Bitrix\Bizproc\Activity\Operator\BetweenOperator::getCode();
57
58 $errors = [];
59 $value =
60 $isBetweenOperator
61 ? []
62 : $documentService->getFieldInputValue($parameterDocumentType, $property, $fieldName, $request, $errors)
63 ;
64
65 if ($isBetweenOperator)
66 {
67 $property['Multiple'] = false;
68
69 $value1 = $documentService->getFieldInputValue(
70 $parameterDocumentType,
71 $property,
72 $fieldName . '_greater_then',
75 );
76
77 $value2 = $documentService->getFieldInputValue(
78 $parameterDocumentType,
79 $property,
80 $fieldName . '_less_then',
83 );
84
85 $value = [$value1 ?? '', $value2 ?? ''];
86 }
87
88 if (!empty($errors))
89 {
90 foreach ($errors as $error)
91 {
92 $result->addError(new \Bitrix\Main\Error((string)$error['message'], (string)$error['code']));
93 }
94 }
95
96 $result->setData(['value' => $value]);
97
98 return $result;
99 }
100
101 protected function getFieldTypeObject(CBPActivity $rootActivity, $property): \Bitrix\Bizproc\FieldType
102 {
103 $documentService = $rootActivity->workflow->getRuntime()->getDocumentService();
104 $documentType = $rootActivity->getDocumentType();
105
106 if (!is_array($property))
107 {
108 return $documentService->getFieldTypeObject($documentType, ['Type' => 'string']);
109 }
110
111 $fieldType = $documentService->getFieldTypeObject($documentType, $property);
112 if (!$fieldType)
113 {
114 $fieldType = $documentService->getFieldTypeObject($documentType, ['Type' => 'string']);
115 }
116
117 return $fieldType;
118 }
119
120 protected function isConditionGroupExist(): bool
121 {
122 if ($this->condition == null || !is_array($this->condition) || count($this->condition) <= 0)
123 {
124 return false;
125 }
126
127 return true;
128 }
129
130 protected function conditionGroupToArray()
131 {
132 if (!isset($this->condition[0]) || !is_array($this->condition[0]))
133 {
134 $this->condition = [$this->condition];
135 }
136 }
137
138 protected function getJoiner($condition): int
139 {
140 return empty($condition[3]) ? static::CONDITION_JOINER_AND : static::CONDITION_JOINER_OR;
141 }
142
143 protected function writeAutomationConditionLog(array $conditions, array $results, bool $result, CBPActivity $ownerActivity): array
144 {
145 $toLog = [];
146 foreach ($conditions as $index => $condition)
147 {
149 $fieldType = $condition['fieldType'];
150
151 if (in_array($condition['operator'], ['!empty', 'empty']))
152 {
153 $formattedValue = '';
154 }
155 else
156 {
157 $multiple = $fieldType->isMultiple();
158 $fieldType->setMultiple(true);
159 $formattedValue = $fieldType->formatValue($condition['value']);
160 $fieldType->setMultiple($multiple);
161 }
162
163 $toLog[] = [
164 'condition' => [
165 'field' => $condition['fieldName'],
166 'operator' => $condition['operator'],
167 'value' => $formattedValue
168 ],
169 'joiner' => $condition['joiner'] === static::CONDITION_JOINER_OR ? 'OR' : 'AND',
170 'fieldValue' => $condition['valueToCheck'] ? $fieldType->formatValue($condition['valueToCheck']) : null,
171 'result' => $results[$index] ? 'Y' : 'N',
172 ];
173 }
174
175 $toLog = array_merge(['result' => $result ? 'Y' : 'N'], $toLog);
176 $title = $ownerActivity->isPropertyExists('Title') ? $ownerActivity->Title : '';
177
178 $id = $this->writeDebugTrack(
179 $ownerActivity->getWorkflowInstanceId(),
180 $ownerActivity->getName(),
181 $ownerActivity->executionStatus,
182 $ownerActivity->executionResult,
183 $title ?? '',
184 $toLog,
186 );
187
188 return [$toLog, $id];
189 }
190}
if(!Loader::includeModule('catalog')) if(!AccessController::getCurrent() ->check(ActionDictionary::ACTION_PRICE_EDIT)) if(!check_bitrix_sessid()) $request
Определения catalog_reindex.php:36
conditionGroupToArray()
Определения activitycondition.php:130
static createInstance($code, $data)
Определения activitycondition.php:14
evaluate(CBPActivity $ownerActivity)
static getConditionFieldInputValue(string $operator, $parameterDocumentType, $property, $fieldName, $request)
Определения activitycondition.php:51
collectUsages(CBPActivity $ownerActivity)
Определения activitycondition.php:26
const CONDITION_JOINER_OR
Определения activitycondition.php:8
static validateProperties($value=null, CBPWorkflowTemplateUser $user=null)
Определения activitycondition.php:31
static callStaticMethod($code, $method, $arParameters=array())
Определения activitycondition.php:36
const CONDITION_JOINER_AND
Определения activitycondition.php:7
isConditionGroupExist()
Определения activitycondition.php:120
getFieldTypeObject(CBPActivity $rootActivity, $property)
Определения activitycondition.php:101
getJoiner($condition)
Определения activitycondition.php:138
Определения activity.php:8
isPropertyExists($name)
Определения activity.php:1068
getName()
Определения activity.php:384
getWorkflowInstanceId()
Определения activity.php:415
const DebugAutomation
Определения trackingservice.php:708
$data['IS_AVAILABLE']
Определения .description.php:13
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$result
Определения get_property_values.php:14
$errors
Определения iblock_catalog_edit.php:74
if(!is_null($config))($config as $configItem)(! $configItem->isVisible()) $code
Определения options.php:195
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"
Определения waybill.php:936
$title
Определения pdf.php:123
$method
Определения index.php:27
$error
Определения subscription_card_product.php:20