Общий алгоритм
Общий алгоритм создания действия |
Пользовательские действия создаются в папке /bitrix/activities/custom относительно корня сайта. Каждое действие располагается в отдельной папке. Название папки должно совпадать с именем класса действия, но без первых символов "CBP". Кроме того, имя папки должно быть записано строчными буквами (в нижнем регистре).
В папке действия должен располагаться файл класса действия. Название этого файла должно совпадать с названием папки действия и иметь расширение php. Кроме того, в папке действия могут располагаться другие необходимые действию файлы. Например, файл с описанием, файлы с локализацией, изображения, файлы с ресурсами и т.п.
Файл с описанием действия располагается в папке действия и имеет имя .description.php. В этом файле содержится описание, которое необходимо для корректной работы системы. В .description.php должен содержаться код типа:
<?if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
$arActivityDescription = array(
"NAME" => GetMessage("MYACTIVITY_DESCR_NAME"),
"DESCRIPTION" => GetMessage("MYACTIVITY_DESCR_DESCR"),
"TYPE" => "activity",
"CLASS" => "MyActivity",
"JSCLASS" => "BizProcActivity",
"CATEGORY" => array(
"ID" => "other",
),
);
?>
C версии 17.0.3 модуля Бизнес-процессы появилась возможность при создании своего действия передавать результат его работы в другие действия во время выполнения бизнес-процесса. Для этого нужно в файле описания действия .description.php добавить строку Как реализована работа с дополнительными результатами можно посмотреть в файлах активити «Выбор данных CRM» по пути /bitrix/activities/bitrix/crmgetdataentityactivity в файловой структуре. вида :
<?
'ADDITIONAL_RESULT' => array('EntityFields')
?>
Значения вложенного массива – это ключ, по которому можно получить данные из свойств шаблона. Когда созданное действие отрабатывает, оно записывает данные в свойства шаблона, а затем в других действиях эти данные можно вставить с помощью формы Вставки значения , из раздела Дополнительные результаты.
Здесь определен тип действия в элементе TYPE, который имеет два возможных значения: activity для действий и condition для условий. Кроме того, задаются название и описание, Java-скриптовый класс для отрисовки в визуальном редакторе, категория и т.п.
В подпапке /lang папки действия располагаются файлы с локализацией фраз на различные языки.
Файл с классом действия имеет вид типа:
<?if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
class CBPMyActivity
extends CBPActivity
{
public function __construct($name)
{
parent::__construct($name);
// Определим свойство действия MyText
// Оно может быть задано в визуальном редакторе при
// помещении действия в шаблон бизнес-процесса
$this->arProperties = array("Title" => "", "MyText" => "");
}
// Исполняющийся метод действия
public function Execute()
{
// Суть действия – запись значения свойства в файл
if (strlen($this->MyText) > 0)
{
$f = fopen($_SERVER["DOCUMENT_ROOT"]."/dump.txt", "a");
fwrite($f, $this->MyText);
fclose($f);
}
// Возвратим исполняющей системе указание, что действие завершено
return CBPActivityExecutionStatus::Closed;
}
// Статический метод возвращает HTML-код диалога настройки
// свойств действия в визуальном редакторе. Если действие не имеет
// свойств, то этот метод не нужен
public static function GetPropertiesDialog($documentType, $activityName,
$arWorkflowTemplate,$arWorkflowParameters, $arWorkflowVariables,
$arCurrentValues = null, $formName = "")
{
$runtime = CBPRuntime::GetRuntime();
if (!is_array($arWorkflowParameters))
$arWorkflowParameters = array();
if (!is_array($arWorkflowVariables))
$arWorkflowVariables = array();
// Если диалог открывается первый раз, то подгружаем значение
// свойства, которое было сохранено в шаблоне бизнес-процесса
if (!is_array($arCurrentValues))
{
$arCurrentValues = array("my_text" => "");
$arCurrentActivity= &CBPWorkflowTemplateLoader::FindActivityByName(
$arWorkflowTemplate,
$activityName
);
if (is_array($arCurrentActivity["Properties"]))
$arCurrentValues["my_text "] =
$arCurrentActivity["Properties"]["MyText"];
}
// Код, формирующий диалог, расположен в отдельном файле
// properties_dialog.php в папке действия.
// Возвращаем этот код.
return $runtime->ExecuteResourceFile(
__FILE__,
"properties_dialog.php",
array(
"arCurrentValues" => $arCurrentValues,
"formName" => $formName,
)
);
}
// Статический метод получает введенные в диалоге настройки свойств
// значения и сохраняет их в шаблоне бизнес-процесса. Если действие не
// имеет свойств, то этот метод не нужен.
public static function GetPropertiesDialogValues($documentType, $activityName,
&$arWorkflowTemplate, &$arWorkflowParameters, &$arWorkflowVariables,
$arCurrentValues, &$arErrors)
{
$arErrors = array();
$runtime = CBPRuntime::GetRuntime();
if (strlen($arCurrentValues["my_text "]) <= 0)
{
$arErrors[] = array(
"code" => "emptyCode",
"message" => GetMessage("MYACTIVITY_EMPTY_TEXT"),
);
return false;
}
$arProperties = array("MyText" => $arCurrentValues["my_text "]);
$arCurrentActivity = &CBPWorkflowTemplateLoader::FindActivityByName(
$arWorkflowTemplate,
$activityName
);
$arCurrentActivity["Properties"] = $arProperties;
return true;
}
}
?>
Код в файле properties_dialog.php, формирующий диалог настройки свойств действия в визуальном редакторе, может выглядеть примерно так:
<?if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
?>
<tr>
<td align="right" width="40%"><span style="color:#FF0000;">*</span> = GetMessage("MYACTIVITY_PD_TEXT") ?>:</td>
<td width="60%">
<textarea name="my_text" id="id_my_text " rows="5" cols="40"><?= htmlspecialchars($arCurrentValues["my_text"]) ?></textarea>
<input type="button" value="..." onclick="BPAShowSelector('id_my_text', 'string');">
</td>
</tr>
Пользователь может ввести в поле my_text явное значение или выбрать одно из значений с помощью диалога, открывающегося по кнопке
. Во втором случае пользователь может установить, что значением свойства будет являться значение свойства корневого действия, которое задается как входящий параметр при запуске бизнес-процесса.
и Ваше мнение важно для нас