Необходимо при поступлении нового письма на соответствующий e-mail, заведенный в корпортале создавать задачу пользователю на обработку данных из письма, а также запускать соответствующий бизнес-процесс.
В продолжение
Итак, задача:
Необходимо при поступлении нового письма на соответствующий e-mail, заведенный в корпортале создавать задачу пользователю на обработку данных из письма, а также запускать соответствующий бизнес-процесс.
Решение.
Создаем для данного письма ручное правило. Прописываем php-код:
if (CModule::IncludeModule("tasks")) { $from = CMailUtil::ExtractMailAddress($arMessageFields['FIELD_FROM']); $USER_GROUP = array(ИД группы пользователей для обработки); $UFilter = array("ACTIVE" => "Y","GROUPS_ID" => $USER_GROUP); $sort_by = "ID"; $sort_ord = "ASC"; $dbUsers = CUser::GetList($sort_by, $sort_ord, $UFilter); while ($arUser = $dbUsers->Fetch()) { $USERS_for_TASK[] = $arUser["ID"]; } if(count($USERS_for_TASK)>0){ $arFields = Array( "TITLE" => $from.': Обработать письмо от '.date('d.m.Y H:i:s') , "DESCRIPTION" => $arMessageFields['TITLE'].$arMessageFields['BODY'], "RESPONSIBLE_ID" => $USERS_for_TASK[0], "STATUS" => 2, "CREATED_BY" => $USERS_for_TASK[0] ); $obTask = new CTasks; $ID = $obTask->Add($arFields); $success = ($ID > 0); if ($success) { if (count($USERS_for_TASK) > 1) { $Accomplices = $USERS_for_TASK; unset($Accomplices[0]); CTasks::AddAccomplices($ID, $Accomplices); } //добавляем к задаче вложения $dbr_attach = CMailAttachment::GetList(Array("NAME" => "ASC", "ID" => "ASC"), Array("MESSAGE_ID" => $arMessageFields['ID'])); while ($dbr_attach_arr = $dbr_attach->GetNext()) { if ($dbr_attach_arr["FILE_NAME"]=='1.tmp' || preg_match_all('/\\.(?:exe|html|phtml|pl|js|htm|py|php|php4|php3|phtml|shtml)$/i', $dbr_attach_arr["FILE_NAME"], $p_matches, PREG_PATTERN_ORDER)) continue; $attach_id = $dbr_attach_arr["ID"]; $dbr = CMailAttachment::GetByID($attach_id); if($dbr_arr = $dbr->Fetch()) { $fname = $_SERVER['DOCUMENT_ROOT']."/upload/from_mail/".$dbr_attach_arr["FILE_NAME"]; $handle = fopen($fname, 'wb'); fwrite($handle, $dbr_arr["FILE_DATA"]); fclose($handle); $arFile = CFile::MakeFileArray($fname); $arFile["old_file"] = ""; $arFile["del"] = "Y"; $arFile["MODULE_ID"] = "tasks"; $fid[] = CFile::SaveFile($arFile, "tasks"); } } CTasks::AddFiles($ID, $fid); if(CModule::IncludeModule("im")){ foreach ($USERS_for_TASK as $taskUser) { $TaskLink = $_SERVER['HTTP_HOST'].'/company/personal/user/' . $taskUser . '/tasks/task/view/' . $ID . '/'; $arMessageFields = array( "TO_USER_ID" => $taskUser, // получатель "FROM_USER_ID" => 0, // отправитель (может быть >0) "NOTIFY_TYPE" => IM_NOTIFY_SYSTEM, // тип уведомления "NOTIFY_MODULE" => "tasks", // модуль запросивший отправку уведомления "NOTIFY_TAG" => "FAX-TASKS", // символьный тэг для группировки (будет выведено только одно сообщение), // если это не требуется - не задаем параметр // текст уведомления на сайте (доступен html и бб-коды) "NOTIFY_MESSAGE" => '[b]Внимание:[/b] получен новый заказ с сайта. Для просмотра перейдите по <a href="' . $TaskLink . '">ссылке</a>', ); CIMNotify::Add($arMessageFields); } } if( CModule::IncludeModule("bizproc") && CModule::IncludeModule("iblock") ){ $arErrorsTmp = array(); $el = new CIBlockElement; $PROP = array(); $arLoadProductArray = Array( "MODIFIED_BY" => $taskUser, "IBLOCK_SECTION_ID" => false, "IBLOCK_ID" => ИД_инфоблока_с_бизнес-процессом, "PROPERTY_VALUES"=> $PROP, "NAME" => $from.': Обработать письмо '.date('d.m.Y H:i:s'), "ACTIVE" => "Y", "PREVIEW_TEXT" => $arMessageFields['TITLE'].$arMessageFields['BODY'], ); if($PRODUCT_ID = $el->Add($arLoadProductArray)){ $arWorkflowParameters = array('TaskID'=>$ID); $wfId = CBPDocument::StartWorkflow( ИД_шаблона_инфоблока, array("bizproc", "CBPVirtualDocument", $PRODUCT_ID), array_merge($arWorkflowParameters, array("TargetUser" => "user_".$taskUser)), $arErrorsTmp ); } else { $arErrorsTmp[] = "Error: ".$el->LAST_ERROR; } if (count($arErrorsTmp) > 0) { foreach ($arErrorsTmp as $e) $errorMessage .= "[".$e["code"]."] ".$e["message"].""; $arMessageFields = array( "TO_USER_ID" => $taskUser, // получатель "FROM_USER_ID" => 0, // отправитель (может быть >0) "NOTIFY_TYPE" => IM_NOTIFY_SYSTEM, // тип уведомления "NOTIFY_MODULE" => "tasks", // модуль запросивший отправку уведомления "NOTIFY_TAG" => "FAX-TASKS", // символьный тэг для группировки (будет выведено только одно сообщение), //если это не требуется - не задаем параметр // текст уведомления на сайте (доступен html и бб-коды) "NOTIFY_MESSAGE" => 'ERROR: '.$errorMessage, ); CIMNotify::Add($arMessageFields); } } } } }
if (CModule::IncludeModule("tasks")) { $from = CMailUtil::ExtractMailAddress($arMessageFields['FIELD_FROM']); $USER_GROUP = array(ИД группы пользователей для обработки); $UFilter = array("ACTIVE" => "Y","GROUPS_ID" => $USER_GROUP); $sort_by = "ID"; $sort_ord = "ASC"; $dbUsers = CUser::GetList($sort_by, $sort_ord, $UFilter); while ($arUser = $dbUsers->Fetch()) { $USERS_for_TASK[] = $arUser["ID"]; } if(count($USERS_for_TASK)>0){ $arFields = Array( "TITLE" => $from.': Обработать письмо от '.date('d.m.Y H:i:s') , "DESCRIPTION" => $arMessageFields['TITLE'].$arMessageFields['BODY'], "RESPONSIBLE_ID" => $USERS_for_TASK[0], "STATUS" => 2, "CREATED_BY" => $USERS_for_TASK[0] ); $obTask = new CTasks; $ID = $obTask->Add($arFields); $success = ($ID > 0); if ($success) { if (count($USERS_for_TASK) > 1) { $Accomplices = $USERS_for_TASK; unset($Accomplices[0]); CTasks::AddAccomplices($ID, $Accomplices); } //добавляем к задаче вложения $dbr_attach = CMailAttachment::GetList(Array("NAME" => "ASC", "ID" => "ASC"), Array("MESSAGE_ID" => $arMessageFields['ID'])); while ($dbr_attach_arr = $dbr_attach->GetNext()) { if ($dbr_attach_arr["FILE_NAME"]=='1.tmp' || preg_match_all('/\\.(?:exe|html|phtml|pl|js|htm|py|php|php4|php3|phtml|shtml)$/i', $dbr_attach_arr["FILE_NAME"], $p_matches, PREG_PATTERN_ORDER)) continue; $attach_id = $dbr_attach_arr["ID"]; $dbr = CMailAttachment::GetByID($attach_id); if($dbr_arr = $dbr->Fetch()) { $fname = $_SERVER['DOCUMENT_ROOT']."/upload/from_mail/".$dbr_attach_arr["FILE_NAME"]; $handle = fopen($fname, 'wb'); fwrite($handle, $dbr_arr["FILE_DATA"]); fclose($handle); $arFile = CFile::MakeFileArray($fname); $arFile["old_file"] = ""; $arFile["del"] = "Y"; $arFile["MODULE_ID"] = "tasks"; $fid[] = CFile::SaveFile($arFile, "tasks"); } } CTasks::AddFiles($ID, $fid); if(CModule::IncludeModule("im")){ foreach ($USERS_for_TASK as $taskUser) { $TaskLink = $_SERVER['HTTP_HOST'].'/company/personal/user/' . $taskUser . '/tasks/task/view/' . $ID . '/'; $arMessageFields = array( "TO_USER_ID" => $taskUser, // получатель "FROM_USER_ID" => 0, // отправитель (может быть >0) "NOTIFY_TYPE" => IM_NOTIFY_SYSTEM, // тип уведомления "NOTIFY_MODULE" => "tasks", // модуль запросивший отправку уведомления "NOTIFY_TAG" => "FAX-TASKS", // символьный тэг для группировки (будет выведено только одно сообщение), если это не требуется - не задаем параметр // текст уведомления на сайте (доступен html и бб-коды) "NOTIFY_MESSAGE" => '[b]Внимание:[/b] получен новый заказ с сайта. Для просмотра перейдите по <a href="' . $TaskLink . '">ссылке</a>', ); CIMNotify::Add($arMessageFields); } } if( CModule::IncludeModule("bizproc") && CModule::IncludeModule("iblock") ){ $arErrorsTmp = array(); $el = new CIBlockElement; $PROP = array(); $arLoadProductArray = Array( "MODIFIED_BY" => $taskUser, "IBLOCK_SECTION_ID" => false, "IBLOCK_ID" => ИД_инфоблока_с_бизнес-процессом, "PROPERTY_VALUES"=> $PROP, "NAME" => $from.': Обработать письмо '.date('d.m.Y H:i:s'), "ACTIVE" => "Y", "PREVIEW_TEXT" => $arMessageFields['TITLE'].$arMessageFields['BODY'], ); if($PRODUCT_ID = $el->Add($arLoadProductArray)){ $arWorkflowParameters = array('TaskID'=>$ID); $wfId = CBPDocument::StartWorkflow( ИД_шаблона_инфоблока, array("bizproc", "CBPVirtualDocument", $PRODUCT_ID), array_merge($arWorkflowParameters, array("TargetUser" => "user_".$taskUser)), $arErrorsTmp ); } else { $arErrorsTmp[] = "Error: ".$el->LAST_ERROR; } if (count($arErrorsTmp) > 0) { foreach ($arErrorsTmp as $e) $errorMessage .= "[".$e["code"]."] ".$e["message"].""; $arMessageFields = array( "TO_USER_ID" => $taskUser, // получатель "FROM_USER_ID" => 0, // отправитель (может быть >0) "NOTIFY_TYPE" => IM_NOTIFY_SYSTEM, // тип уведомления "NOTIFY_MODULE" => "tasks", // модуль запросивший отправку уведомления "NOTIFY_TAG" => "FAX-TASKS", // символьный тэг для группировки (будет выведено только одно сообщение), если это не требуется - не задаем параметр // текст уведомления на сайте (доступен html и бб-коды) "NOTIFY_MESSAGE" => 'ERROR: '.$errorMessage, ); CIMNotify::Add($arMessageFields); } } } } } |
После создания новой задачи (комментарии к алгоритму в предыдущем посте) необходимо запустить новый экземпляр бизнес-процесса.
Сам бизнес-процесс должен быть уже готов вместе с шаблоном к нему.
Создаем элемент инфоблока с бизнес-процессами и запускаем новый экземпляр бизнес-процесса для созданного элемента инфоблока.
Подайте заявку на разработку сайта на базе готового решения от компании 1С-Битрикс или одного из партнеров компании. Максимально подробно опишите, чему будет посвящен сайт, если это интернет-магазин - что он будет продавать, нужна ли мультиязычность, будут ли разные типы цен (розница, опт, крупный опт), будет ли интеграция с 1С, будет ли выгрузка товаров на различные торговые площадки...
Вы можете подать заявку на сопровождение вашего сайта на базе 1С-Битрикс. Сопровождение включает в себя: проверка актуальности обновлений сайта, проверка актуальности резервной копии, консультации по сайту. Опишите в заявке, какие еще объемы планируются на сопровождении и на какой срок вы планируете заключить договор на сопровождение - мы подберем подходящий вам бюджет на сопровождение
Вы можете подать заявку на выполнение определенного объема работ по сайту. Опишите в заявке объем работ. Это может быть разработка какого-то нового функционала, доработки по имеющемуся функционалу, доработки под требования сео-специалистов. На основании заявки вам будет сформирован бюджет работ, а также названы сроки на выполнение тех или иных работ.