Если по каким либо причинам элементы, добавленные на контроллере через CiblockElement:add или CiblockElement:update не появляются на подчиненных сайтах, то можно воспользоваться данным классом:
Вызов синхронизации:
P.S. Очередной костыль
class Bprocess {
private $moduleId = "iblock";
private $entity = "CIBlockDocument";
private $workflowTemplateId = 105;
private $documentType = "";
private $documentId = 0;
public function __construct($ib) {
$this->setDocumentType($ib);
}
public function startWorkflow ($documentId) {
$this->setDocumentId($documentId);
$runtime = CBPRuntime::GetRuntime();
$runtime->StartRuntime();
$documentService = $runtime->GetService("DocumentService");
/* Берем все шаблоны процессов и выбираем по ключу нужный нам */
$arWorkflowTemplates = array();
$dbWorkflowTemplate = CBPWorkflowTemplateLoader::GetList( array(),
array("DOCUMENT_TYPE" => $this->documentType, "ACTIVE"=>"Y"),
false,
false,
array("ID", "NAME", "DESCRIPTION", "MODIFIED", "USER_ID", "PARAMETERS")
);
while ($arWorkflowTemplate = $dbWorkflowTemplate->GetNext()) {
$arWorkflowTemplates[$arWorkflowTemplate["ID"]] = $arWorkflowTemplate;
}
$arWorkflowTemplate = $arWorkflowTemplates[$this->workflowTemplateId];
$arWorkflowParameters = array();
$arErrorsTmp = array();
$arWorkflowParameters = CBPWorkflowTemplateLoader::CheckWorkflowParameters(
$arWorkflowTemplate["PARAMETERS"],
array(),
$this->documentType,
$arErrorsTmp
);
$arErrorsTmp = array();
$wfId = CBPDocument::StartWorkflow(
$this->workflowTemplateId,
$this->documentId,
$arWorkflowParameters,
$arErrorsTmp
);
return $wfId;
}
public function setDocumentType($ib) {
$this->documentType = "iblock_".intval($ib);
$this->documentType = array($this->moduleId, $this->entity, $this->documentType);
}
public function setDocumentId($documentId) {
$this->documentId = intval($documentId);
$this->documentId = array($this->moduleId, $this->entity, $this->documentId);
}
public function setWorkflowTemplateId($id) {
$this->workflowTemplateId = intval($id);
}
} |
$lecel = new CIBlockElement;
$process = new Bprocess(LECTURES_IB); // Инфоблок, где будем синхронизировать
if($MS_ID = $lecel->Add($arLoadLecArray)){ // DELETE COMM FOR WORK
$doc = $process->startWorkflow($MS_ID); //Ид элемента для синхронизации
//var_dump($doc);
echo "Updated $MS_ID\r\n";
}
|