2017-12-24 3 views
0

연락처 정보를 반환하는 salesforce 쿼리가 있습니다. 데이터를 2 개의 테이블에 저장해야합니다. 첫 번째 테이블에서 연락처에 대한 일부 메타 데이터를 중간 상태로 저장해야합니다. 그런 다음 저장된 메타 데이터에서 자동 생성 된 메타 데이터 테이블 ID를 가져 와서 모든 연락처에 적용합니다. 그런 다음 연락처 데이터를 데이터베이스 테이블에 저장 한 다음 마지막으로 연락처 메타 데이터를 최종 상태로 업데이트해야합니다. 문제는 많은 데이터가 있으므로이 프로세스를 수행 할 때 페치 크기를 포함해야한다는 것입니다. 내가 성취하고자하는 것은 이것과 같은 것이어야합니다. 이것이 제가 성취하고자하는 것임을 유의하십시오. 가져 오기 대화 상대가 완료되어 최종 상태를 저장할 수 있음을 어떻게 알 수 있습니까? 트랜잭션의 흐름을 어떻게 구조화 할 수 있습니까? 이상적으로는 ConsumerIterator를 Java 구성 요소에 전달하여 프로세스를 쉽게 제어 할 수 있습니다. 예를 들어 ConsumerIterator에 대한 참조를 Java 구성 요소에 전달할 수 있습니까? 내가 어떻게 할 수 있니?Salesfore 및 데이터베이스 구성 요소에서 증분 가져 오기를 처리하는 방법

<sfdc:query fetchSize="100" config-ref="sfdc-connector" 

query="dsql:SELECT Id, Account.Id, 

    Account.Name, Account.PersonEmail, Account.LastName From Contact" /> 

dw:transform-message metadata:id="d1f6ab4f-4b40-4e30-ae" doc:name="trnsfm"> 

<enricher target="variable:metaInfo"> 
    <flow-refname="getContactMetadata"/> 
</enricher> 

    <dw:set-payload><![CDATA[%dw 1.0 

.//Rest of transformer 

<db:insert config-ref="MySQL_Configuration" doc:name="Save Metatdata"> 
    ... 

</db:insert> 

<db:insert config-ref="MySQL_Configuration" doc:name="Save contacts"> 
.... 
<db:insert> 

<db:insert config-ref="MySQL_Configuration" doc:name="Update Metadata 
     Final State"> 
.... 
<db:insert> 

</flow> 

답변

0

과제를 해결한다. 필자는 Java Component를 작성하여 Callable을 구현하고 ConsumerIterator를 얻었습니다. 그런 다음 반복기를 사용하여 fetchSize에서 항목을 가져올 수있었습니다. 데이터 모델은 트랜잭션으로 데이터를 저장하기에 충분히 간단하므로 Spring Jdbc를 사용했습니다.

관련 문제