После того, как исполнитель выполнил работы по поручению, он прикладывает отчет об исполнении и выполняет свое задание. Контролеру отправляется подзадача по типовому маршруту Контроль исполнения поручения. Если в дальнейшем поручение отправляется на доработку, то работы ведутся в рамках этого типового маршрута.
1. | Добавьте блок «Условие». В вычислениях блока задайте проверку, что контролер не относится к нашей организации, в которой создано поручение. Если условие верно, значит контролер из другой организации. В этом случае необходимо перейти к отправке сообщения по межсистемному процессу. |
2. | Добавьте блок «Пауза» для отправки и ожидания результатов контроля: |
• | в вычислениях блока получите глобальный ИД межсистемного процесса из параметров типового маршрута; |
• | в список параметров процесса добавьте ИД задачи на контроль и исполнителя. Это требуется, чтобы возобновить задачу, когда из другой системы придут результаты контроля; |
• | в дополнительные параметры запишите информацию, которую нужно будет добавить к сообщению; |
• | отправьте сообщение. |
WorkflowParams = Object.WorkflowParams
// Получить межсистемный процесс.
ProcessGlobalID = WorkflowParams.FindItem("ProcessGlobalID").Value
ProcessFactory = DCIGetFactory()
Process = ProcessFactory.GetProcessByGlobalID(ProcessGlobalID)
// Занести ИД задачи на контроль по исполнителю.
Process.Lock()
ProcessParams = Process.Params
ControlTaskIDs = ProcessParams.ValueByName("ControlTaskIDs")
PerformerUser = WorkflowParams.ValueByName('PerformerUser').Value
PerformerName = PerformerUser.Name
if FindSubString(PerformerName; ControlTaskIDs) == 0
ControlTaskIDs = AddSubString(Format('%s;%s'; ArrayOf(PerformerName; Object.ID)) ; ControlTaskIDs; '|')
endif
ProcessParams.SetVar("ControlTaskIDs"; ControlTaskIDs)
Process.Save()
Process.Unlock()
// Вычислить получателей.
Receivers = CreateStringList()
Receivers.Delimiter = '|'
Receivers.DelimitedText = ProcessParams.FindItem("InitiatorSystemID").Value
AdditionalParams = CreateList()
AdditionalParams.Add("ReportWithOutLink"; WorkflowParams.ValueByName("ReportWithOutLink").Value)
AdditionalParams.Add("ReportDocumentsID"; WorkflowParams.ValueByName("ReportDocumentsID").Value)
AdditionalParams.Add("NeedControl"; TRUE)
AdditionalParams.Add("PerformerName"; PerformerName)
DCISendProcessMessage(ProcessGlobalID; "SendAssignmentReport"; Receivers; FALSE; AdditionalParams)
3. | Добавьте блок «Сценарий» для обработки результатов рассмотрения контролером. Когда из другой системы приходит сообщение и в обработчике на прием текущая задача снимается с паузы, маршрут переход на этот блок. Из параметров типового маршрута получите результат приемки работ контролером и измените статус поручения. |
4. | В событии «После запроса параметров» блока «Контроль исполнения поручения» задайте вычисления. Если исполнитель внешний, то отправьте сообщение в связанную систему о том, что контролер принял работу. Если работа принята, то типовой маршрут завершается, его не требуется ставить на паузу. |
if ResultCode == 'A'
/* Если исполнитель внешний отправить сообщение о том,
что контролер принял работы */
Params = Object.WorkflowParams
AssignmentInfo = Params.ValueByName('Поручение').Value
PerformerUser = Params.ValueByName('PerformerUser').Value
Performer = GetEmployeesByUserID(PerformerUser.ID).Values(0)
// Контролер и исполнитель из разных наших организаций.
if GetRequisiteValueAsString(
'РАБ'; Performer; SYSREQ_OUR_FIRM) <<>> GetRequisiteValueAsString(
'RRCAssignments'; ; SYSREQ_OUR_FIRM;;; AssignmentInfo.ID)
// Получить процесс из параметров маршрута задачи.
ProcessGlobalID = Params.FindItem("ProcessGlobalID").Value
// Вычислить систему-получателя от имени пользователя.
Receivers = CreateStringList()
Receivers.Delimiter = '|'
Receivers.DelimitedText = DCIGetReceiverForUser(PerformerUser.Name)
AdditionalParams = CreateList()
AdditionalParams.Add("ResultControl"; ResultCode)
AdditionalParams.Add("PerformerName"; PerformerUser.Name)
AdditionalParams.Add('ControlText'; Object.ActiveText)
DCISendProcessMessage(Process; "SendResultControl"; Receivers; FALSE; AdditionalParams)
endif
endif
5. | Добавьте блок «Условие». В вычислениях блока проверьте, что исполнитель не относится к нашей организации, в которой создано поручение. Если условие верно, значит исполнитель внешний и необходимо перейти к отправке сообщения по межсистемному процессу с результатами контроля. |
6. | Добавьте блок «Пауза» для отправки и ожидания результатов исполнения. Аналогичен блоку «Пауза» для отправки и ожидания результатов контроля за исключением того, что в сообщение передаются результаты рассмотрения контролером. |
© Компания DIRECTUM, 2018 | Сообщество пользователей DIRECTUM |