FDQM Smart Merge – Overwriting Data Without Using Replace Mode ч.2

Техническое описание технологии FDQM Smart Merge.

Итак, в данный скоуп работ входит следующее :

    1) Создание вспомогательной технической таблицы, в которую будем вносить все события выгрузки данных из FDQM
    2) Создание механизма сохранения событий выгрузки
    3) Расширение операции выгрузки данных.

Далее, чуть подробнее, по каждому пункту. Конечно, это не готовое решение, а лишь руководство к действию.

Для хранения событий выгрузки нам потребуется следующая техническая информация:
1) PoV – Point of View, который состоит из LOCATION (площадка), PERIOD, TARGET_PERIOD, SRC_CAT, TARGET_CAT
2) Имени файла FILE_NAME
3) Тип файла FILE_TYPE
4) И необязательная информация, которая может быть использована для целей аудита. Это имя пользователя (USER_NAME), дата выгрузки (LOAD_DATE), статус выгрузки (PROCESS_STATE)

Эту таблицу (XXFDM_LOAD_ACT_HISTORY) будем заполнять в момент формирование файла, для этого расширяем базовый функционал с помощью расширения события “BefLoad” .

Часть информации, мы стандартно получаем с помощью переданных параметров
(strLoc (LOCATION) , strCat(SRC_CAT) , strPer(PERIOD) , strTCat(TARGET_CAT) , strTPer(TARGET_PERIOD), strFile(FILE_NAME)). Остальное собираем с помощью API :

strUserName = DW.Connection.PstrUserID
lngStatus = API.MaintenanceMgr.fProcessStatus(CStr(strLoc), CStr(strCat), CStr(strPerName)).lngStatus

Записываем все переданные параметры в нашу таблицу логов (XXFDM_LOAD_ACT_HISTORY)

strSQL = “insert into XXFDM_LOAD_ACT_HISTORY(LOCATION,” & _
“PERIOD,” & _
“TARGET_PERIOD,” & _
“SRC_CAT,” & _
“TARGET_CAT,” & _
“FILE_NAME,” & _
“FILE_TYPE,” & _
“USER_NAME,” & _
“LOAD_DATE,” & _
“PROCESS_STATE,” & _
“PROCESS_STETE_DEC)” & _
“VALUES(‘” & strLoc & “‘,” & _
“‘” & strPerName & “‘,” & _
“‘” & strTPerName & “‘,” & _
“‘” & strCat & “‘,” & _
“‘” & strTCat & “‘,” & _
“‘” & strFile & “‘,” & _
“‘” & strFileType & “‘,” & _
“‘” & strUserName & “‘,” & _
“sysdate,” & _
CStr(lngStatus) & “,” & _
“‘” & strStatusDesc & “‘)”
DW.DataManipulation.fExecuteDML(strSQL)

Подготовка системы к работе выполнена, теперь собственно операция “FDQM Smart Merge”.
Снова расширяем события FDQM, на этот раз нам потребуется “AftExportToDat”.

Тут есть нюансы : В Hyperion Financial Managment загружаются данные следующих типов

    1) Оборотная -сальдовая ведомость деятельности предприятия за указанный период. Данные загружаются как PERiodic. Для этого случая нам нужна история загрузки в разрезе
    LOCATION,PERIOD,CAT
    2) Журнальные корректировки деятельности предприятия за год. Данные загружаются нарастающим итогом с начала года (YTD). Для этого случая нам нужна история загрузки в разрезе LOCATION,CAT

После того, как сформировали SQL , выбрав имена файлов по заданным параметрам, организуем по этому курсору цикл.

Dim rsSQL

Set rsSQL = DW.DataAccess.farsSnap(strSQL)

Do While Not rsSQL.eof
Call ParseFile (rsSQL.Fields(“FILE_NAME”).Value,strFile,strTPer(0),CInt(rsSQL.Fields(“isYtd”)), rsSQL.Fields(“data”))

rsSQL.movenext()
Loop
rsSQL.Close()
WriteLogEvent Err.Number & ” ” & Err.Description
WriteLogEvent ” ” & “Загрузка завершена ”
End Sub

“isYtd” – признак того, что данные идут либо за PERiodic, либо YTD
“data” – чем заменять данные , либо “0”, либо “NODATA”

В процедуре ParseFile, построчно читаем файлы, полученные из курсора и меняем в них значения на NODATA или 0 (в случае YTD). Так же для YTD меняем загружаемый период.

Это все что требуется сделать, для реализации технологии FDQM Smart Merge