← К документации

Пользовательские действия

Форма настроек действия БП

Загрузка свойств, сохранение входной строки и экранирование значения в 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.

Источники