Сообщение создается в типовом маршруте Контроль исполнения поручения на блоке «Пауза» для отправки и ожидания результатов контроля.
Структура обработчика отправки
1. | Считать из параметров данные для передачи. |
Params = DCIGetParams()
Report = Params.FindItem("ReportWithOutLink")
PerformerName = Params.FindItem("PerformerName")
NeedControl = Params.FindItem("NeedControl")
ReportDocumentsID = CreateStringList()
ReportDocumentsID.DelimitedText = Params.FindItem("ReportDocumentsID")
2. | Подготовить список для передаваемых данных. |
3. | Заполнить список данными. |
4. | Сохранить подготовленные данные в сообщении. |
5. | Подготовить список с реквизитами документа, прикрепить список к сообщению и выгрузить тело документа в сообщение. |
ReportDocuments = DCIGetObjectDictionary()
foreach ReportDocumentID in ReportDocumentsID
Document = EDocuments.GetObjectByID(ReportDocumentID)
DocumentGUID = DCIGetGlobalID(Document)
DocumentInfo = Document.Info
// Подготовить XML с данными согласуемого документа.
DocumentData = DCICreateDocumentMetaData(DocumentInfo)
ReportDocuments.Add("Document" & ReportDocuments.Count; DocumentData)
DCIAttachDocumentToProcessMessage(ProcessMessage; DocumentGUID; DocumentInfo;; TRUE)
DCIWriteHandlerLog("DEBUG";
"Документ с отчетом по исполнению поручения добавлен к сообщению";
ProcessMessage; "GlobalID: " & DocumentGUID)
endforeach
if ReportDocuments.Count > 0
DCIAttachDataToProcessMessage(ProcessMessage; ReportDocuments; "ReportDocuments")
endif
6. | Записать бизнес-событие об отправке результатов исполнения поручения. |
DCIWriteProcessEvent(
ProcessMessage.ProcessGlobalId;
Format("Результаты исполнения поручения исполнителем %s отправлены контролеру поручения";
PerformerFullName);;
Format("Исполнитель: %s%sОтчет: %s"; ArrayOf(PerformerFullName; CR; Report)))
Структура обработчика приема
1. | Считать из сообщения переданные данные. |
2. | Получить ИД записи поручения из параметров процесса. |
3. | Найти по ИД запись в справочнике Поручения. |
4. | Импортировать из сообщения переданный отчет с документом и связать его с поручением. Вычисления аналогичны вычислениям по импорту основного документа в обработчике приема сообщения. Подробнее см. раздел «Отправка поручения на исполнение в дочернюю организацию». |
5. | Найти задачу на исполнение поручений. Если задачи по контролю еще нет, то создать ее. Если задача на контроль уже есть, получить ИД из параметров процесса и снять ее с паузы. |
ProcessMessage = DCIGetProcessMessage()
Process = DCIGetProcess()
ProcessParams = Process.Params
MessageData = DCIGetDataFromProcessMessage(ProcessMessage; "MessageData")
// Возобновить задачу на контроль, если она есть, иначе – создать новую.
ControlTaskIDs = CreateStringList()
ControlTaskID = ''
ControlTaskIDs.Delimiter = '|'
ControlTaskIDs.DelimitedText = ProcessParams.ValueByName("ControlTaskIDs")
foreach ID in ControlTaskIDs
if FindSubString(PerformerName; ID; ';') <<>> 0
ControlTaskID = SubString(ID; ';'; 2)
endIf
endforeach
if Assigned(ControlTaskID)
// Возобновить задачу по контролю исполнения поручения.
ControlTask = Tasks.GetObjectByID(ControlTaskID)
ControlTask.ResumeFromPause()
ControlTask.ActiveText = Format("%s%s%s"; ArrayOf(ControlTask.ActiveText; CR; Report))
ControlTask.Save
else
// Создать задачу на контроль.
ServerEventScript = ServerEvents.GetObjectByName('DCICreateControlTask')
ServerParams = ServerEventScript.Params
ServerParams.ValueByName('PerformerName').Value = PerformerName
ServerParams.ValueByName('TaskID').Value = TaskID
ServerParams.ValueByName("Report").Value = Report
ServerEventScript.Start
endif
6. | Изменить статус поручения у исполнителя, от которого пришел отчет. |
7. | Если все исполнители завершили работы по поручению, то возобновить задачу по исполнению поручений. |
© Компания DIRECTUM, 2018 | Сообщество пользователей DIRECTUM |