В блоке php-код бизнес-процессов обращаться к полям документа

Рейтинг: 0.8902  
Внедрено
Предложил Пользователь 969789 25.07.2022 17:07:16

В блоке php-код бизнес-процессов обращаться к полям документа

Нужна возможность в PHP-блоке бизнес-процессов напрямую обращаться к свойствам документа (например, смарт-процесса) без необходимости предварительно создавать в параметрах БП отдельную переменную, которую нужно еще заполнить значением поля документа на одном из предыдущих шагов.

Помимо полей документа, хотелось бы иметь возможность обращаться к "дополнительным результатам". Чтобы можно было без каких-то сложностей, решать простейшие задачи, например, проверить наличие значения в одном из полей связанных сущностей: документа, компании, контакта и сделки с определенным приоритетом.

Сейчас есть возможность сделать что-то типа:
$var = '{{Название}}';

Но если в названии будет одинарная кавычка (McDonald's), то будет ошибка. Также есть проблемы с датами, множественными значениями и т.д. Не говоря уже о безопасности.

По-хорошему, должно быть что-то типа $rootActivity->GetDocumentProperty('UfCrm10Nomer') или $rootActivity->GetDocumentProperty('ContactLeadTotalDiscount'). Причем названия полей должны быть такие же, как шаблонах генерации документов.
Ну, как я уже писал в др.тикете, нужно сделать генератор документов в БР для списков (сейчас он есть только в CRM), чтобы можно было получить список названий полей.

Как вариант решения проблемы, можно было бы сделать отдельный параметр форматирования значения
$var = {{Название > php}};

В этом случае при использовании в коде значения полей очищались бы от подозрительного кода, кавычки и специальные символы бы экранировались, значение бы обрамлялось кавычками (если нужно), а даты и дроби приводились бы к нужному виду, чтобы при вставке в php-код воспринимались как строки, даты и числа. Множественные поля передавались бы как массивы через array().
Рейтинг: 0  
Ответил 28.07.2022 19:03:06
такой апи уже есть
$documentService = $this->workflow->GetService("DocumentService");
$document = $documentService->getDocument($this->getDocumentId());

$var = $document['MY_DOCUMENT_PROPETRY'];
дополнительные результаты можно тоже получить
$activity = $this->workflow->GetActivityByName('MY_ACTIVITY_ID');

$var = $activity->MyProperty;