Копировать ссылку на страницу Перейти в предыдущий раздел Перейти в следующий раздел

Сообщение создается в типовом маршруте Контроль исполнения поручения на блоке «Пауза» для отправки и ожидания результатов контроля.

Структура обработчика отправки

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
.navbar > a:hover { background: #FFD73B; }