1. Получить синхронизируемый документ.
Глобальный ИД синхронизируемого документа хранится в параметре RecordGUID. Чтобы получить синхронизируемый документ, используйте код:
DocumentGUID = Process.Params.ValueByName("RecordGUID")
Document: IEDocument.DCICustomDocument = DCIGetObjectByGlobalID(DocumentGUID)
DocumentData = DCIGetObjectDictionary()
2. Подготовить список базовых реквизитов для синхронизации.
Структурированные данные рекомендуется передавать через список. В список добавляется элемент с названием «GUID», в который записывается глобальный ИД синхронизируемого документа. При необходимости добавьте в список другие базовые реквизиты документа:
// Добавить к сообщению значения базовых реквизитов документа.
DocumentData.Add("GUID"; DocumentGUID)
DocumentData.Add("Name"; Document.SYSREQ_EDOC_NAME)
DocumentData.Add("KindName";
Document.Requisites(SYSREQ_EDOC_KIND).DisplayField.Value)
DocumentData.Add("TypeCode"; Document.Info.CardType.Code)
// Определить расширение документа.
Extension = Trim(DCIGetReferenceRecordRequisiteValue(SYSREF_EDITORS;
SYSREQ_CODE; Document.SYSREQ_EDOC_EDITOR; ""; "ТипПриложения"; FALSE; TRUE))
DocumentData.Add("Extension"; Extension)
DocumentData.Add("LifeStageName"; Document.SYSREQ_EDOC_LIFE_STAGE_NAME)
DocumentData.Add("Note"; Document.SYSREQ_EDOC_NOTE)
DocumentData.Add("State"; Document.SYSREQ_STATE)
3. Заполнить список синхронизируемыми реквизитами.
В список добавьте реквизиты, которые будут синхронизироваться в другую систему помимо базовых. Это могут быть поля карточки, связанные документы или записи справочников и др. Например, если помимо базовых реквизитов требуется синхронизировать реквизит SpecNum, используйте код:
DocumentData.Add("SpecNum"; Document.DCISpecNum)
4. Сохранить подготовленные данные в сообщении.
Выгрузите сформированный список элементов и добавьте его в сообщение:
// Сохранить подготовленные данные в сообщении.
DCIAttachDataToProcessMessage(ProcessMessage; DocumentData; "DocumentData")
Выгрузите изменившиеся версии документов:
// Выгрузить версии документа.
DCIExportDocumentVersions(ProcessMessage; Document; Params)
Сохраните подписи, если их надо синхронизировать:
// Сохранить подписи.
DCIAttachSignaturesToProcessMessage(ProcessMessage; Params)
// Получить Process и ProcessMessage. Process = DCIGetProcess() ProcessMessage = DCIGetProcessMessage() Params = DCIGetParams()
// Получить синхронизируемый документ. DocumentGUID = Process.Params.ValueByName("RecordGUID") Document: IEDocument.DCICustomDocument = DCIGetObjectByGlobalID(DocumentGUID) DocumentData = DCIGetObjectDictionary()
// Добавить к сообщению значения базовых реквизитов документа. DocumentData.Add("GUID"; DocumentGUID) DocumentData.Add("Name"; Document.SYSREQ_EDOC_NAME) DocumentData.Add("KindName"; Document.Requisites(SYSREQ_EDOC_KIND).DisplayField.Value) DocumentData.Add("TypeCode"; Document.Info.CardType.Code) // Определить расширение документа. Extension = Trim(DCIGetReferenceRecordRequisiteValue(SYSREF_EDITORS; SYSREQ_CODE; Document.SYSREQ_EDOC_EDITOR; ""; "ТипПриложения"; FALSE; TRUE)) DocumentData.Add("Extension"; Extension) DocumentData.Add("LifeStageName"; Document.SYSREQ_EDOC_LIFE_STAGE_NAME) DocumentData.Add("Note"; Document.SYSREQ_EDOC_NOTE) DocumentData.Add("State"; Document.SYSREQ_STATE)
DCIWriteHandlerLog("DEBUG"; "Подготовлен список базовых синхронизируемых данных"; ProcessMessage; "ID документа: " & Document.ID)
// Заполнить синхронизируемые поля: // 1. Заполнить реквизиты карточки. DocumentData.Add("SpecNum"; Document.DCISpecNum)
// 2. Заполнить реквизиты детального раздела 3. DDS3 = Document.DetailDataSet(3) DDS3List = DCIGetObjectDictionary() foreach DDSRow in DDS3 // Заполнить список значений с данными строки детального раздела. RowList = DCIGetObjectDictionary() RowList.Add("НомерСтроки"; DDSRow.SYSREQ_LINE_NUMBER) if Assigned(DDSRow.DCIDateT3) RowList.Add("ДатаСоглашения"; DCILocalTimeToUTCStr(DDSRow.DCIDateT3)) endif RowList.Add("НомерСоглашения"; DDSRow.DCIStringT3) DDS3List.Add("Строка_" & DDSRow.SYSREQ_LINE_NUMBER; RowList) endforeach DocumentData.Add("Соглашения"; DDS3List) DCIWriteHandlerLog("DEBUG"; "Подготовлен список синхронизируемых данных"; ProcessMessage; "ID документа: " & Document.ID)
// Сохранить подготовленные данные в сообщении. DCIAttachDataToProcessMessage(ProcessMessage; DocumentData; "DocumentData")
DCIWriteHandlerLog("DEBUG"; "Карточка выгружена"; ProcessMessage; "ID документа: " & Document.ID)
// Выгрузить версии документа. DCIExportDocumentVersions(ProcessMessage; Document; Params)
// Отправить поставленные подписи. DCIAttachSignaturesToProcessMessage(ProcessMessage; Params) |
© Компания Directum, 2020 | Сообщество пользователей Directum |