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

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

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

1.Получить запись справочника поручения. ИД записи хранится в параметрах процесса, добавляется в параметры в момент создания межсистемного процесса.
2.Подготовить список для передаваемых данных справочника.
3.Заполнить список данными. Передать необходимые реквизиты по поручению и список исполнителей, которые относятся к системе-приемнику.
4.Сохранить подготовленные данные справочника в сообщении.
5.Если у поручения есть основной документ, подготовить список с его реквизитами. По умолчанию передаются следующие реквизиты документа: глобальный ИД, наименование, имя вида документа, имя типа карточки документа, расширение приложения-редактора.

При исполнении поручения передается документ с типом карточки «Письма входящие», поэтому требуется дополнительно передать список обязательных реквизитов этого типа карточки.

 

  Document = EDocuments.GetObjectByID(DocumentID)

  DocumentGUID = DCIGetGlobalID(Document)

  DocumentInfo = Document.Info

  // Подготовить для передачи список реквизитов согласуемого документа.

  AdditionalReq = ''

  if DocumentInfo.EDocKind.Name == 'Письмо входящее' 

    AdditionalReq = 'Дополнение|Дата4|Организация|Дополнение3'

  endif  

  DocumentData = DCICreateDocumentMetaDataWithReq(DocumentInfo; AdditionalReq)

6.Сохранить подготовленные данные документа в сообщении.

 

  // Сохранить подготовленные данные документа в сообщении.

  DCIAttachDataToProcessMessage(ProcessMessage; DocumentData; "DocumentData")

7.Выгрузить тело документа в сообщение.

 

  // Прикрепить к сообщению версию документа.

  DCIAttachDocumentToProcessMessage(ProcessMessage; "VersionFile"; Document.Info)

8.Подготовить данные и вложить в сообщение информацию по дополнительным документам, если они есть во вложениях задачи. Вычисления аналогичны вычислениям по основному документу.

Данные о записях справочников и документах рекомендуется добавлять в разные списки и выгружать отдельными файлами.

Структура обработчика приема

1.Считать из сообщения данные переданной записи.
2.Создать новую запись в справочнике Поручения.

Примечание

Всегда создается новая запись, так как нельзя повторно отправить поручение на исполнение.

3.Заполнить реквизиты записи переданными данными.
4.Сохранить запись.
5.Импортировать основной документ, заполнить реквизиты документа.

 

  // Импортировать основной документ, если передали

  Document = ''

  if ProcessMessage.Files.IndexOfName("DocumentData") > -1

    DocumentData = DCIGetDataFromProcessMessage(ProcessMessage; "DocumentData")

    EDocTypeName = DocumentData.ValueByName("EDocType")

    EDocKindName = DocumentData.ValueByName("EDocKind")

    EDocTitle = DocumentData.ValueByName("DocumentTitle")

    DocumentGUID = DocumentData.ValueByName("DocumentGUID")

    // Найти коды вида и типа карточки для основного документа.

    try

      EDocKindCode = DCIFindRecordReference(

        SYSREF_EDOCUMENT_KINDS; SYSREQ_NAME; EDocKindName; 

        LoadStringFmt('E_EDOC_KIND_NOT_FOUND'; 'DCIEXAMPLE'; EDocKindName))

      EDocTypeCode = DCIFindRecordReference(

        SYSREF_EDOCUMENT_CARD_TYPES_REFERENCE; SYSREQ_NAME; EDocTypeName; 

        LoadStringFmt('E_EDOC_CARD_TYPE_NOT_FOUND'; 'DCIEXAMPLE'; EDocTypeName))

      except

        Exception = GetLastException()

        DCIWriteHandlerLog("ERROR"; "Ошибка при поиске вида и типа карточки"; 

          ProcessMessage; Exception.Message)

        Raise(Exception)

      endexcept

 

      Document: IEDocument = DCIImportDocumentFromProcessMessage(

        ProcessMessage; "VersionFile"; "Принят из " & ProcessMessage.Sender; 

        EDocTypeCode; EDocKindCode)

 

      Document.SYSREQ_EDOC_NAME = EDocTitle

      AdditionalReq = DocumentData.ValueByName('Additional')

      if not VarIsNull(AdditionalReq)

        I = 0

        while not AdditionalReq.EOF

          // Для реквизита «Корреспондент» найти организацию по наименованию.

          if AdditionalReq.GetNames(I) == 'Организация'

            OrganisationName = AdditionalReq.GetValues(I)

            Document.Requisites(AdditionalReq.GetNames(I)).Value = 

              DCIFindRecordReference('ОРГ'; SYSREQ_NAME; OrganisationName; 

              LoadStringFmt('DIRDCI_NOT_FOUND_ORGANIZATION_MESSAGE'; 

                'DCIEXAMPLE'; OrganisationName))

          else

            if AdditionalReq.GetNames(I) == 'Дата4'

              Document.Requisites(AdditionalReq.GetNames(I)).Value = 

                DCIUTCStrToLocalTime(AdditionalReq.GetValues(I))

            else

              Document.Requisites(AdditionalReq.GetNames(I)).Value = 

                AdditionalReq.GetValues(I)

            endif

          endif 

          I = I +1

          AdditionalReq.Next

        endwhile

      endif

      Document.Save()

      DCIWriteHandlerLog("DEBUG"; "Изменения в карточке документа cохранены"; 

        ProcessMessage)

      // Указать основной документ в поручении.

      Assignment.ISBIntNumber = Document.ID

    endif

6.Импортировать дополнительные документы. Вычисления аналогичны вычислениям по импорту основного документа.
7.Заблокировать процесс и записать ИД поручения в параметры процесса.

 

  try

    Process.Lock()

    // Обновить параметры процесса

      ProcessParams = Process.Params

      ProcessParams.SetVar("AssignmentID"; ToString(Assignment.ID))

      Process.Save()

  finally

    Process.Unlock()

  endfinally

8.Стартовать задачу на исполнение поручений, записав в параметры ИД межсистемного процесса.
© Компания Directum, 2020 Сообщество пользователей Directum
.navbar > a:hover { background: #FFD73B; }