Пользовательские действия
Форма настроек действия БП
Загрузка свойств, сохранение входной строки и экранирование значения в HTML.
Метод показа формы
Оба метода ниже добавляются внутрь CBPNormalizeTextActivity из предыдущей страницы. После ошибки сохранения дизайнер передаёт введённые значения обратно: не затирайте их значениями шаблона.
public static function GetPropertiesDialog(
$document_type,
$activity_name,
$workflow_template,
$workflow_parameters,
$workflow_variables,
$current_values = null,
$form_name = ''
) {
if (!is_array($current_values)) {
$activity = &CBPWorkflowTemplateLoader::FindActivityByName(
$workflow_template,
$activity_name
);
$current_values = [
'source_text' => (string) ($activity['Properties']['SourceText'] ?? ''),
];
}
return CBPRuntime::GetRuntime()->ExecuteResourceFile(
__FILE__,
'properties_dialog.php',
['current_values' => $current_values]
);
} Метод сохранения
public static function GetPropertiesDialogValues(
$document_type,
$activity_name,
&$workflow_template,
&$workflow_parameters,
&$workflow_variables,
$current_values,
&$errors
) {
$errors = [];
$value = $current_values['source_text'] ?? '';
if (!is_string($value)) {
$errors[] = ['code' => 'invalidText', 'message' => 'Ожидалась строка'];
return false;
}
$activity = &CBPWorkflowTemplateLoader::FindActivityByName(
$workflow_template,
$activity_name
);
if (!is_array($activity)) {
$errors[] = ['code' => 'missingActivity', 'message' => 'Действие не найдено'];
return false;
}
$activity['Properties']['SourceText'] = $value;
return true;
}Метод сохраняет исходную строку: обрезка происходит при исполнении. Остальные свойства, включая название действия, не заменяются пустым массивом.
properties_dialog.php
<?php
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) {
die();
}
?>
<tr>
<td align="right">Исходная строка:</td>
<td><input type="text" name="source_text"
value="<?= htmlspecialcharsbx((string) ($current_values['source_text'] ?? '')) ?>"></td>
</tr>Шаблон возвращает строку таблицы дизайнера, а не отдельную HTML-страницу. Значение экранируется для атрибута HTML. Этот пример не создаёт самостоятельный AJAX-обработчик и не требует публикации PHP-файла формы как отдельного endpoint.