1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
workflowstate.php
См. документацию.
1<?php
2
3namespace Bitrix\Bizproc\Workflow\Entity;
4
5use Bitrix\Bizproc\Workflow\Task\TaskTable;
6use Bitrix\Bizproc\Workflow\WorkflowState;
7use Bitrix\Main;
8use Bitrix\Main\ORM;
9use Bitrix\Main\Type\DateTime;
10
28{
29 public const ZOMBIE_DOCUMENT_ID = [
30 'bizproc',
31 'zombie',
32 '0',
33 ];
34
38 public static function getTableName()
39 {
40 return 'b_bp_workflow_state';
41 }
42
46 public static function getObjectClass()
47 {
48 return WorkflowState::class;
49 }
50
54 public static function getMap()
55 {
56 return [
57 'ID' => [
58 'data_type' => 'string',
59 'primary' => true,
60 ],
61 'MODULE_ID' => [
62 'data_type' => 'string',
63 ],
64 'ENTITY' => [
65 'data_type' => 'string',
66 ],
67 'DOCUMENT_ID' => [
68 'data_type' => 'string',
69 ],
70 'DOCUMENT_ID_INT' => [
71 'data_type' => 'integer',
72 ],
73 'WORKFLOW_TEMPLATE_ID' => [
74 'data_type' => 'integer',
75 ],
76 'STATE' => [
77 'data_type' => 'string',
78 ],
79 'STATE_TITLE' => [
80 'data_type' => 'string',
81 ],
82 'STATE_PARAMETERS' => [
83 'data_type' => 'string',
84 ],
85 'MODIFIED' => [
86 'data_type' => 'datetime',
87 'default_value' => function()
88 {
89 return new Main\Type\DateTime();
90 },
91 ],
92 'STARTED' => [
93 'data_type' => 'datetime',
94 'default_value' => function()
95 {
96 return new Main\Type\DateTime();
97 },
98 ],
99 'STARTED_BY' => [
100 'data_type' => 'integer',
101 ],
102 'STARTED_USER' => [
103 'data_type' => Main\UserTable::class,
104 'reference' => [
105 '=this.STARTED_BY' => 'ref.ID',
106 ],
107 'join_type' => 'LEFT',
108 ],
109 'INSTANCE' => [
110 'data_type' => WorkflowInstanceTable::class,
111 'reference' => [
112 '=this.ID' => 'ref.ID',
113 ],
114 'join_type' => 'LEFT',
115 ],
116 'TEMPLATE' => [
117 'data_type' => '\Bitrix\Bizproc\WorkflowTemplateTable',
118 'reference' => [
119 '=this.WORKFLOW_TEMPLATE_ID' => 'ref.ID',
120 ],
121 'join_type' => 'LEFT',
122 ],
124 'TASKS',
125 TaskTable::class,
126 'WORKFLOW_STATE'
127 ),
129 'META',
130 WorkflowMetadataTable::class,
131 \Bitrix\Main\ORM\Query\Join::on('this.ID', 'ref.WORKFLOW_ID'),
132 ),
133 ];
134 }
135
136 public static function exists(string $workflowId): bool
137 {
138 return static::getCount(['=ID' => $workflowId]) > 0;
139 }
140
141 public static function getIdsByDocument(array $documentId, ?int $limit = null)
142 {
143 $documentId = \CBPHelper::ParseDocumentId($documentId);
144 $rows = static::getList([
145 'select' => ['ID'],
146 'filter' => [
147 '=MODULE_ID' => $documentId[0],
148 '=ENTITY' => $documentId[1],
149 '=DOCUMENT_ID' => $documentId[2],
150 ],
151 'limit' => $limit,
152 ])->fetchAll();
153
154 return array_column($rows, 'ID');
155 }
156
157 public static function maskAsZombie(array $documentId)
158 {
160 $sqlHelper = $connection->getSqlHelper();
161 $table = $sqlHelper->forSql(static::getTableName());
162
163 $zombieDocId = $sqlHelper->forSql(static::ZOMBIE_DOCUMENT_ID[2]);
164 $zombieEntity = $sqlHelper->forSql(static::ZOMBIE_DOCUMENT_ID[1]);
165 $zombieModule = $sqlHelper->forSql(static::ZOMBIE_DOCUMENT_ID[0]);
166
167 $origDocId = $sqlHelper->forSql($documentId[2]);
168 $origEntity = $sqlHelper->forSql($documentId[1]);
169 $origModule = $sqlHelper->forSql($documentId[0]);
170
171 $connection->queryExecute("UPDATE {$table}
172 SET
173 DOCUMENT_ID = '{$zombieDocId}',
174 ENTITY = '{$zombieEntity}',
175 MODULE_ID = '{$zombieModule}'
176 WHERE
177 DOCUMENT_ID = '{$origDocId}'
178 AND ENTITY = '{$origEntity}'
179 AND MODULE_ID = '{$origModule}'
180 ");
181 }
182
183 public static function onBeforeUpdate(ORM\Event $event): ORM\EventResult
184 {
186 $data = $event->getParameter('fields');
187
188 if (empty($data['MODIFIED']))
189 {
190 $result->modifyFields([
191 'MODIFIED' => new DateTime(),
192 ]);
193 }
194
195 return $result;
196 }
197
198 public static function onBeforeAdd(ORM\Event $event): ORM\EventResult
199 {
201 $fields = $event->getParameter('fields');
202
203 if (empty($fields['MODIFIED']))
204 {
205 $result->modifyFields([
206 'MODIFIED' => new DateTime(),
207 ]);
208 }
209
210 return $result;
211 }
212
213 public static function onAfterAdd(ORM\Event $event)
214 {
215 $fields = $event->getParameter('fields');
216
217 // users sync automatically in WorkflowUserTable::syncOnWorkflowUpdated
218
220 'WORKFLOW_ID' => $fields['ID'] ?? '',
221 'MODULE_ID' => $fields['MODULE_ID'] ?? '',
222 'ENTITY' => $fields['ENTITY'] ?? '',
223 'DOCUMENT_ID' => $fields['DOCUMENT_ID'] ?? '',
224 'TEMPLATE_ID' => $fields['WORKFLOW_TEMPLATE_ID'] ?? 0,
225 'STARTED' => $fields['STARTED'] ?? 0,
226 ]);
227 }
228
229 public static function onAfterDelete(ORM\Event $event)
230 {
231 $id = $event->getParameter('primary')['ID'];
232
236 }
237}
$connection
Определения actionsdefinitions.php:38
static onAfterDelete(ORM\Event $event)
Определения workflowstate.php:229
static onBeforeAdd(ORM\Event $event)
Определения workflowstate.php:198
static maskAsZombie(array $documentId)
Определения workflowstate.php:157
static onAfterAdd(ORM\Event $event)
Определения workflowstate.php:213
static exists(string $workflowId)
Определения workflowstate.php:136
static onBeforeUpdate(ORM\Event $event)
Определения workflowstate.php:183
static getIdsByDocument(array $documentId, ?int $limit=null)
Определения workflowstate.php:141
static deleteByWorkflow(string $workflowId)
Определения workflowusertable.php:315
static getConnection($name="")
Определения application.php:638
Определения event.php:5
static delete($primary)
Определения datamanager.php:1644
static add(array $data)
Определения datamanager.php:877
$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
Определения chain.php:3
$table
Определения mysql_to_pgsql.php:36
$event
Определения prolog_after.php:141
$rows
Определения options.php:264
$fields
Определения yandex_run.php:501