2017-12-25 6 views
0

Salesforce fetchSize = 100으로 설정했지만 쿼리에 대해 100 세트의 요소를 가져 오지 않습니다. 따라서 ConsumerIterator의 단일 결과를 목록으로 수집하여 배치 프로세스에 100 개 세트로 전달할 수 있기를 원합니다. 아래 코드가 있습니다. 이것을 올바른 방법일까요? 올바르게 수행하는 방법에 대한 제안은 감사하겠습니다. 50 개의 배치로 모든 ConsumerIterator 요소를 처리하고 싶습니다. 배치가 50보다 작 으면 해당 배치를 처리하고 싶습니다. 내 시도가 아래스레드 안전 모드에서 컬렉션을 반복하면서 목록에서 요소 수집

ConsumerIterator<HashMap<String,Object>> iter= 
        (ConsumerIterator<HashMap<String,Object>>)obj; 
    List<HashMap<String,Object>> l=new CopyOnWriteArrayList<>(); 
    while(iter.hasNext()){ 
    Object payload=iter.next(); 
    if(l.size()<50){ 
     l.add((HashMap<String,Object>)payload); 
    }else{ 
    write(l); 
    } 

    public int [] write(List<HashMap<String,Object> list) 
    { 
    synchronized(list) 
    { 
     ArrayList newList=copy(list); 
     save(newList); 
    } 

+

+0

게시 된 코드에서'l'은 다른 스레드에서 볼 수 없으므로'CopyOnWriteArrayList'를 사용하거나'synchronized (list)'를 사용하는 것이 정말로 필요하지 않습니다. 반대로, 코드 스 니펫에서는 'obj'또는 기본 데이터 소스가 스레드간에 공유되는지 여부를 확인할 수 없으므로 반복 방식이 올바른지 여부를 말할 수 없습니다. 그 외에도, 알려진 유형의 항목을'Object'에 할당하고 피할 수없는 체크되지 않은 캐스트를 지정하여 제네릭 유형, 원시 유형 및 유형 정보의 불필요한 삭제를 혼합합니다. 해당 코드를 정리해야합니다 ... – Holger

답변

0

세일즈 포스 쿼리에서, 당신은 추가 할 수 있습니다 "(100)을 제한;" 쿼리 끝에 100 개의 요소 만 가져옵니다.

+0

한도는 100 개의 요소 만 가져옵니다. 나는 모든 데이터를 반환하지만 100 페이지에있는 fetchSize = 100을 설정했습니다. 문제는 ConsumerIterator가 요소를 하나씩 반환하기 때문에 목록에서 수집해야한다는 것입니다. 내가 바라는 것은 이러한 요소를 효율적이고 정확하게 수집하는 방법입니다. – BreenDeen

0

페치 크기를 100으로 사용하여 문제를 해결 한 후 결과 ConsumerIterator를 사용하여 요소를 집계했습니다.

관련 문제