Добрый день. У меня возникла потребность из таблицы WorkflowStateTable выбрать записи которые завершены, получить идентификатор инфоблока через Шаблон БП, и вынуть данные о инфоблоке. Все это сделать одним запросом к БП.
| Код |
|---|
$state = \Bitrix\Bizproc\Workflow\Entity\WorkflowStateTable::getList([
'filter' => [
'STATE' => CBPWorkflowStatus::Out(CBPWorkflowStatus::Completed),
'>=MODIFIED' => $oldDate
],
'select' => [
'*',
'IBLOCK_ID' => 'TEMPLATE.DOCUMENT_TYPE',
'IBLOCK_INFO'
],
'runtime' => [
'IBLOCK_INFO' => [
'data_type' => '\Bitrix\Iblock\IblockTable',
'reference' => array(
'ref.ID' => new SqlEx * pression('MID(this.IBLOCK_ID, 7)'),
// 'this.IBLOCK_ID' => 'ref.ID'
),
'join_type' => "left"
]
]
]); |
Собственно, почитав документацию я обратился к рантайм полям, через которые в целом можно закрыть мою задачу но для этого нужно применить SQL выражение которое бы отрезало у значения поля TEMPLATE.DOCUMENT_TYPE префикс iblock_ и соответственно вернуло бы только номер инфоблока и выборка прошла бы успешно, но я столкнулся вот с такой ошибкой при запросе:
| Код |
|---|
[Bitrix\Main\DB\SqlQueryException]
Mysql query error: (1054) Unknown column 'this.IBLOCK_ID' in 'on clause' (400)
SEL ECT
`bizproc_workflow_entity_workflow_state`.`ID` AS `ID`,
`bizproc_workflow_entity_workflow_state`.`MODULE_ID` AS `MODULE_ID`,
`bizproc_workflow_entity_workflow_state`.`ENTITY` AS `ENTITY`,
`bizproc_workflow_entity_workflow_state`.`DOCUMENT_ID` AS `DOCUMENT_ID`,
`bizproc_workflow_entity_workflow_state`.`DOCUMENT_ID_INT` AS `DOCUMENT_ID_INT`,
`bizproc_workflow_entity_workflow_state`.`WORKFLOW_TEMPLATE_ID` AS `WORKFLOW_TEMPLATE_ID`,
`bizproc_workflow_entity_workflow_state`.`STATE` AS `STATE`,
`bizproc_workflow_entity_workflow_state`.`STATE_PARAMETERS` AS `STATE_PARAMETERS`,
`bizproc_workflow_entity_workflow_state`.`MODIFIED` AS `MODIFIED`,
`bizproc_workflow_entity_workflow_state`.`STARTED` AS `STARTED`,
`bizproc_workflow_entity_workflow_state`.`STARTED_BY` AS `STARTED_BY`,
`bizproc_workflow_entity_workflow_state_template`.`DOCUMENT_TYPE` AS `BIZPROC_WORKFLOW_ENTITY_WORKFLOW_STATE_TEMPLATE_DOCUMENT_TYPE`,
`bizproc_workflow_entity_workflow_state_iblock_info`.`ID` AS `BIZPROC_WORKFLOW_ENTITY_WORKFLOW_STATE_IBLOCK_INFO_ID`,
`bizproc_workflow_entity_workflow_state_iblock_info`.`TIMESTAMP_X` AS `BIZPROC_WORKFLOW_ENTITY_WORKFLOW_STATE_IBLOCK_INFO_TIMESTAMP_X`,
`bizproc_workflow_entity_workflow_state_iblock_info`.`IBLOCK_TYPE_ID` AS `BIZPROC_WORKFLOW_ENTITY_WORKFLOW_STATE_IBLOCK_INFO_IBLOCK_TYPE_ID`,
`bizproc_workflow_entity_workflow_state_iblock_info`.`LID` AS `BIZPROC_WORKFLOW_ENTITY_WORKFLOW_STATE_IBLOCK_INFO_LID`,
`bizproc_workflow_entity_workflow_state_iblock_info`.`CODE` AS `BIZPROC_WORKFLOW_ENTITY_WORKFLOW_STATE_IBLOCK_INFO_CODE`,
`bizproc_workflow_entity_workflow_state_iblock_info`.`API_CODE` AS `BIZPROC_WORKFLOW_ENTITY_WORKFLOW_STATE_IBLOCK_INFO_API_CODE`,
`bizproc_workflow_entity_workflow_state_iblock_info`.`NAME` AS `BIZPROC_WORKFLOW_ENTITY_WORKFLOW_STATE_IBLOCK_INFO_NAME`,
`bizproc_workflow_entity_workflow_state_iblock_info`.`ACTIVE` AS `BIZPROC_WORKFLOW_ENTITY_WORKFLOW_STATE_IBLOCK_INFO_ACTIVE`,
`bizproc_workflow_entity_workflow_state_iblock_info`.`SORT` AS `BIZPROC_WORKFLOW_ENTITY_WORKFLOW_STATE_IBLOCK_INFO_SORT`,
`bizproc_workflow_entity_workflow_state_iblock_info`.`LIST_PAGE_URL` AS `BIZPROC_WORKFLOW_ENTITY_WORKFLOW_STATE_IBLOCK_INFO_LIST_PAGE_URL`,
`bizproc_workflow_entity_workflow_state_iblock_info`.`DETAIL_PAGE_URL` AS `BIZPROC_WORKFLOW_ENTITY_WORKFLOW_STATE_IBLOCK_INFO_DETAIL_PAGE_URL`,
`bizproc_workflow_entity_workflow_state_iblock_info`.`SECTION_PAGE_URL` AS `BIZPROC_WORKFLOW_ENTITY_WORKFLOW_STATE_IBLOCK_INFO_SECTION_PAGE_URL`,
`bizproc_workflow_entity_workflow_state_iblock_info`.`CANONICAL_PAGE_URL` AS `BIZPROC_WORKFLOW_ENTITY_WORKFLOW_STATE_IBLOCK_INFO_CANONICAL_PAGE_URL`,
`bizproc_workflow_entity_workflow_state_iblock_info`.`PICTURE` AS `BIZPROC_WORKFLOW_ENTITY_WORKFLOW_STATE_IBLOCK_INFO_PICTURE`,
`bizproc_workflow_entity_workflow_state_iblock_info`.`DESCRIPTION` AS `BIZPROC_WORKFLOW_ENTITY_WORKFLOW_STATE_IBLOCK_INFO_DESCRIPTION`,
`bizproc_workflow_entity_workflow_state_iblock_info`.`DESCRIPTION_TYPE` AS `BIZPROC_WORKFLOW_ENTITY_WORKFLOW_STATE_IBLOCK_INFO_DESCRIPTION_TYPE`,
`bizproc_workflow_entity_workflow_state_iblock_info`.`XML_ID` AS `BIZPROC_WORKFLOW_ENTITY_WORKFLOW_STATE_IBLOCK_INFO_XML_ID`,
`bizproc_workflow_entity_workflow_state_iblock_info`.`TMP_ID` AS `BIZPROC_WORKFLOW_ENTITY_WORKFLOW_STATE_IBLOCK_INFO_TMP_ID`,
`bizproc_workflow_entity_workflow_state_iblock_info`.`INDEX_ELEMENT` AS `BIZPROC_WORKFLOW_ENTITY_WORKFLOW_STATE_IBLOCK_INFO_INDEX_ELEMENT`,
`bizproc_workflow_entity_workflow_state_iblock_info`.`INDEX_SECTION` AS `BIZPROC_WORKFLOW_ENTITY_WORKFLOW_STATE_IBLOCK_INFO_INDEX_SECTION`,
`bizproc_workflow_entity_workflow_state_iblock_info`.`WORKFLOW` AS `BIZPROC_WORKFLOW_ENTITY_WORKFLOW_STATE_IBLOCK_INFO_WORKFLOW`,
`bizproc_workflow_entity_workflow_state_iblock_info`.`BIZPROC` AS `BIZPROC_WORKFLOW_ENTITY_WORKFLOW_STATE_IBLOCK_INFO_BIZPROC`,
`bizproc_workflow_entity_workflow_state_iblock_info`.`SECTION_CHOOSER` AS `BIZPROC_WORKFLOW_ENTITY_WORKFLOW_STATE_IBLOCK_INFO_SECTION_CHOOSER`,
`bizproc_workflow_entity_workflow_state_iblock_info`.`LIST_MODE` AS `BIZPROC_WORKFLOW_ENTITY_WORKFLOW_STATE_IBLOCK_INFO_LIST_MODE`,
`bizproc_workflow_entity_workflow_state_iblock_info`.`RIGHTS_MODE` AS `BIZPROC_WORKFLOW_ENTITY_WORKFLOW_STATE_IBLOCK_INFO_RIGHTS_MODE`,
`bizproc_workflow_entity_workflow_state_iblock_info`.`SECTION_PROPERTY` AS `BIZPROC_WORKFLOW_ENTITY_WORKFLOW_STATE_IBLOCK_INFO_SECTION_PROPERTY`,
`bizproc_workflow_entity_workflow_state_iblock_info`.`PROPERTY_INDEX` AS `BIZPROC_WORKFLOW_ENTITY_WORKFLOW_STATE_IBLOCK_INFO_PROPERTY_INDEX`,
`bizproc_workflow_entity_workflow_state_iblock_info`.`VERSION` AS `BIZPROC_WORKFLOW_ENTITY_WORKFLOW_STATE_IBLOCK_INFO_VERSION`,
`bizproc_workflow_entity_workflow_state_iblock_info`.`LAST_CONV_ELEMENT` AS `BIZPROC_WORKFLOW_ENTITY_WORKFLOW_STATE_IBLOCK_INFO_LAST_CONV_ELEMENT`,
`bizproc_workflow_entity_workflow_state_iblock_info`.`SOCNET_GROUP_ID` AS `BIZPROC_WORKFLOW_ENTITY_WORKFLOW_STATE_IBLOCK_INFO_SOCNET_GROUP_ID`,
`bizproc_workflow_entity_workflow_state_iblock_info`.`EDIT_FILE_BEFORE` AS `BIZPROC_WORKFLOW_ENTITY_WORKFLOW_STATE_IBLOCK_INFO_EDIT_FILE_BEFORE`,
`bizproc_workflow_entity_workflow_state_iblock_info`.`EDIT_FILE_AFTER` AS `BIZPROC_WORKFLOW_ENTITY_WORKFLOW_STATE_IBLOCK_INFO_EDIT_FILE_AFTER`,
`bizproc_workflow_entity_workflow_state_template`.`ID` AS `UALIAS_0`
FR OM `b_bp_workflow_state` `bizproc_workflow_entity_workflow_state`
LEFT JOIN `b_iblock` `bizproc_workflow_entity_workflow_state_iblock_info` ON `bizproc_workflow_entity_workflow_state_iblock_info`.`ID` = MID(this.IBLOCK_ID, 7)
LEFT JOIN `b_bp_workflow_template` `bizproc_workflow_entity_workflow_state_template` ON `bizproc_workflow_entity_workflow_state`.`WORKFLOW_TEMPLATE_ID` = `bizproc_workflow_entity_workflow_state_template`.`ID`
WHERE UPPER(`bizproc_workflow_entity_workflow_state`.`STATE`) like upper('Completed')
AND `bizproc_workflow_entity_workflow_state`.`MODIFIED` >= '2021-01-13 17:40:57'
/var/www/app/bitrix/modules/main/lib/db/mysqliconnection.php:137 |
А именно:
| Код |
|---|
Mysql query error: (1054) Unknown column 'this.IBLOCK_ID' in 'on clause' (400). |
Почему то в выражение не подставляются данные из колонки, которая у меня выбирается в селекте. Я пробовал сделать это без Алиаса - такая же ситуация. Полностью подставлял название колонки вот таким образом `bizproc_workflow_entity_workflow_state_template`.`DOCUMENT_TYPE` - тоже безуспешно.
Собственно если поставить классический вариант 'this.IBLOCK_ID' => 'ref.ID' то все работает, но выборки данных инфоблока происходит, потому что это связывает идентификаторы и строку вида iblock_45 как правильнее мне подставить значение и использовать SQL выражение, чтобы оно сработало. В документации как всегда деталей просто 0. Пробовал то что указано в документации подставлять через %s или ?i тоже не работает никак.
По факту в MID нужно поставить имя колонки значение которой нужно обрезать. Но почему не работает даже прямое указание `bizproc_workflow_entity_workflow_state_template`.`DOCUMENT_TYPE` имени колонки - загадка