2017-03-08 1 views
1

성능 테스트를 위해 많은 일반 원장 트랜잭션을 정확한 온라인으로로드하려고합니다. OAuth를 사용하여 인증 한 후 트랜잭션을 게시하여 Transaction 및 REST API에 REST API를 사용하고 있습니다.GL 트랜잭션을 정확한 온라인으로로드

그러나 이것은 매우 느리고 네트워크 왕복 횟수가 많습니다. 180.000 개의 거래 행을로드해야합니다. 정확한 온라인에서 대량로드 데이터를 대체 할 수있는 방법이 있습니까?

답변

1

데이터를 Exact Online에 대량로드하는 가장 좋은 방법은 XML API를 사용하는 것입니다. 인증 후 HTTP POST를 직접 사용하거나 다음과 같은 스크립트를 사용할 수 있습니다.

local remark Specify the division code here: 

local define DIVISION_CODE "868035" 

local remark Originating General Ledger account: 

local define GL_ACT_CODE_FROM "8000" 

local remark Target General Ledger account: 

local define GL_ACT_CODE_TO "8001" 

local remark Journal 

local define JOURNAL_CODE "90" 

local remark Number of GL entries to generate: 

local define CNT_TXN_HEADERS "5" 

local remark Number of lines per GL entry: 

local define CNT_TXN_LINES "50" 

use ${DIVISION_CODE} 

create or replace table [email protected] 
as 
select '<?xml version="1.0" encoding="utf-8"?>' 
     || chr(13) 
     || '<eExact xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="eExact-XML.xsd">' 
     fileprefix 
,  chr(13) 
     || '</eExact>' 
     filepostfix 
from [email protected] 

insert into UploadXMLTopics 
(topic 
, payload 
, division_code 
, orig_system_reference 
) 
select 'GLTransactions' topic 
,  stg.fileprefix 
     || chr(13) 
     || '<GLTransactions>' 
     || xml 
     || chr(13) 
     || '</GLTransactions>' 
     || stg.filepostfix 
     filecontents 
,  '${DIVISION_CODE}' division_code 
,  'GLTransactions\SAMPLE.xml' 
     filename 
from (select listagg 
       (chr(13) 
        || '<GLTransaction>' 
        || chr(13) 
        || '<Journal code="' 
        || txn_journalcode 
        || '" />' 
        || chr(13) 
        || '<Date>' 
        || substr(xmlencode(trunc(sysdate)), 1, 10) 
        || '</Date>' 
        || chr(13) 
        || xmlsource 
        || chr(13) 
        || xmltarget 
        || chr(13) 
        || '</GLTransaction>' 
        , '' 
       ) xml 
      from (select trunc(sysdate) txn_date 
        ,  '${JOURNAL_CODE}' txn_journalcode 
        ,  listagg 
          (chr(13) 
          || '<GLTransactionLine line="' 
          || id 
          || '" >' 
          || chr(13) 
          || '<Date>' 
          || substr(xmlencode(trunc(sysdate)), 1, 10) 
          || '</Date>' 
          || chr(13) 
          || '<GLAccount code="' 
          || xmlencode('${GL_ACT_CODE_FROM}') 
          || '" />' 
          || chr(13) 
          || '<Description>' 
          || xmlencode('Transaction offset #' || id) 
          || '</Description>' 
          || '<Amount>' 
          || '<Currency code="EUR" />' 
          || '<Value>' 
          || -1 
          || '</Value>' 
          || '</Amount>' 
          || chr(13) 
          || '</GLTransactionLine>' 
          , '' 
          ) 
          xmlsource 
        ,  listagg 
          (chr(13) 
          || '<GLTransactionLine line="' 
          || id 
          || '" >' 
          || chr(13) 
          || '<Date>' 
          || substr(xmlencode(trunc(sysdate)), 1, 10) 
          || '</Date>' 
          || chr(13) 
          || '<GLAccount code="' 
          || xmlencode('${GL_ACT_CODE_TO}') 
          || '" />' 
          || '<Description>' 
          || xmlencode('Transaction #' || id) 
          || '</Description>' 
          || chr(13) 
          || '<Amount>' 
          || '<Currency code="EUR" />' 
          || '<Value>' 
          || 1 
          || '</Value>' 
          || '</Amount>' 
          || chr(13) 
          || '</GLTransactionLine>' 
          , '' 
          ) 
          xmltarget 
        from range(${CNT_TXN_LINES})@datadictionary txnlines 
        group 
        by  txn_date 
        ,  txn_journalcode 
        ) 
     join range(${CNT_TXN_HEADERS})@datadictionary txnheaders 
     ) 
join [email protected] stg 
on  1=1 
where xml is not null 

local remark Check outcome: 

select * from UploadXMLTopics 

는 XML API를의 성능은 다양하지만, 업무 시간 동안 일반적으로는 느립니다 : 당신이로드하고자하는 거래 및 거래 당 라인 수의 변수를 변경하십시오. 나는 방금 그것을 시험했다. 그림과 같이 500 개의 트랜잭션 행을 업로드하는 데 15 초가 걸립니다 (스크립트에 지정된대로 debet/credt x 5 x 50). 부서 ID로 재생하면 여러 부서간에로드하여 회사 간 게시물을 생성 할 수 있습니다. 이 스크립트는 Invantive SQL과 함께 Exact Online 결합 또는 XML 드라이버가 필요하지만 수동 HTTP POSTS의 경우 유사합니다.