• Модуль: webdav
  • Путь к файлу: ~/bitrix/modules/webdav/classes/iblockbizproc.php
  • Класс: CIBlockDocumentWebdav
  • Вызов: CIBlockDocumentWebdav::StartWorkflowsExecuting
static function StartWorkflowsExecuting($documentId, $arDocumentStates, $arBizProcParametersValues, $arUserGroups, &$arErrors, $wfParams = array())
{
	$arErrors = array();
	$arBizProcWorkflowId = array();
	$arDocumentStates = (is_array($arDocumentStates) ? $arDocumentStates : array());
	$arBizProcParametersValues = (is_array($arBizProcParametersValues) ? $arBizProcParametersValues : array());
	$arUserGroups = (is_array($arUserGroups) ? $arUserGroups : array());

	foreach ($arDocumentStates as $arDocumentState)
	{
		if ($arDocumentState["ID"] == '')
		{
			$arErrorsTmp = array();
			$arBizProcWorkflowId[$arDocumentState["TEMPLATE_ID"]] = CBPDocument::StartWorkflow(
				$arDocumentState["TEMPLATE_ID"],
				$documentId,
				$arBizProcParametersValues[$arDocumentState["TEMPLATE_ID"]],
				$arErrorsTmp);

			foreach ($arErrorsTmp as $e)
				$arError[] = array(
					"id" => "bizproc_start_workflow",
					"text" => $e["message"]);
		}
	}

	if (empty($arError) && intval($_REQUEST["bizproc_index"]) > 0)
	{
		if (empty($arUserGroups))
		{
			$arUserGroups = call_user_func_array(
				array($wfParams['DOCUMENT_TYPE'][1], "GetUserGroups"),
				array(null, $documentId, $GLOBALS["USER"]->GetID()));
		}

		$bizprocIndex = intval($_REQUEST["bizproc_index"]);
		for ($i = 1; $i <= $bizprocIndex; $i++)
		{
			$bpId = trim($_REQUEST["bizproc_id_".$i]);
			$bpTemplateId = intval($_REQUEST["bizproc_template_id_".$i]);
			$bpEvent = trim($_REQUEST["bizproc_event_".$i]);
			if ($bpEvent <> '')
			{
				if ($bpId <> '')
				{
					if (!array_key_exists($bpId, $arDocumentStates))
						continue;
				}
				else
				{
					if (!array_key_exists($bpTemplateId, $arDocumentStates))
						continue;
					$bpId = $arBizProcWorkflowId[$bpTemplateId];
				}
				$arErrorTmp = array();
				CBPDocument::SendExternalEvent(
					$bpId,
					$bpEvent,
					array("Groups" => $arUserGroups, "User" => $GLOBALS["USER"]->GetID()),
					$arErrorTmp);
				foreach ($arErrorsTmp as $e)
					$arError[] = array(
						"id" => "bizproc_send_external_event",
						"text" => $e["message"]);
			}
		}
	}
	return empty($arError);
}