2017-11-28 10 views
0

NetSuite 및 SuiteTalk에서만 1 년 미만 근무했습니다. 저장된 검색을 활용하는 기본 검색 및 고급 검색의 예를 찾았지만 결과 집합에서 기준 및 선택된 열을 사용하여 고급 검색을 처음부터 수행하는 방법에 대한 예제를 찾는 것이 어려웠습니다. 그래서 저는 예제를 요구하고 있습니다.SuiteTalk 고급 검색 예

답변

1

NetSuite에서 다운로드 할 수있는 NSClientERP 프로젝트에 제공된 예제를 검토했습니다. 다음은 간단한 예입니다.

 service.searchPreferences = new SearchPreferences(); 
     service.searchPreferences.bodyFieldsOnly = true; 
     service.searchPreferences.returnSearchColumns = true; 

     TransactionSearchAdvanced customSearch = new TransactionSearchAdvanced() 
     { 
      columns = new TransactionSearchRow() 
      { 
       basic = new TransactionSearchRowBasic() 
       { 
        dateCreated = new SearchColumnDateField[] { new SearchColumnDateField() } 
        , tranDate = new SearchColumnDateField[] { new SearchColumnDateField() } 
        , type = new SearchColumnEnumSelectField[] { new SearchColumnEnumSelectField() } 
        , tranId = new SearchColumnStringField[] { new SearchColumnStringField() } 
        , internalId = new SearchColumnSelectField[] { new SearchColumnSelectField() } 
        , entity = new SearchColumnSelectField[] { new SearchColumnSelectField() } 
        , item = new SearchColumnSelectField[] { new SearchColumnSelectField() } 
        , lastModifiedDate = new SearchColumnDateField[] { new SearchColumnDateField() } 
       } 
       , itemJoin = new ItemSearchRowBasic() 
       { 
        itemId = new SearchColumnStringField[] { new SearchColumnStringField() } 
       } 
      } 
      , 
      criteria = new TransactionSearch() 
      { 
       basic = new TransactionSearchBasic() 
       { 
        type = new SearchEnumMultiSelectField() 
        { 
         @operator = SearchEnumMultiSelectFieldOperator.anyOf 
         , operatorSpecified = true 
         , searchValue = new string[] { 
          "_salesOrder" 
         } 
        } 
        , lastModifiedDate = new SearchDateField() 
        { 
         @operator = SearchDateFieldOperator.onOrAfter 
         , operatorSpecified = true 
         , searchValue = DateTime.Now.AddDays(-3) 
         , searchValueSpecified = true 
        } 
       } 
      } 
     }; 

     Console.WriteLine("Querying NetSuite"); 

     SearchResult searchResult = service.search(customSearch); 

     Console.WriteLine("Query Results: " + searchResult.totalRecords.ToString()); 
     int total = searchResult.totalRecords; 
     int updated = 0; 
     bool searchMore = false; 


     Console.WriteLine("\nThe search() operation for transaction was run successfully."); 
     Console.WriteLine("\n Total Records = " + searchResult.totalRecords); 
     Console.WriteLine(" Total Pages = " + searchResult.totalPages); 
     Console.WriteLine(" Page Size = " + searchResult.pageSize); 
     Console.WriteLine(" Current Page Index = " + searchResult.pageIndex); 

     Console.WriteLine("\n\nHit Enter to list results"); 
     Console.ReadLine(); 

     SearchRow[] records = searchResult.searchRowList; 

     if (records != null) 
     { 
      for (int i = 0, j = (searchResult.pageIndex - 1) * searchResult.pageSize; i < records.Length; i++, j++) 
      { 
       TransactionSearchRow transactionRow = (TransactionSearchRow) records[i]; 
       TransactionSearchRowBasic transactionRowBasic = transactionRow.basic; 
       ItemSearchRowBasic itemRowBasic = transactionRow.itemJoin; 
       Console.WriteLine(
        "\n Transaction Return Columns Row[" + j + "]: " + 
        "\n internalId=" + transactionRowBasic.internalId[0].searchValue.internalId + 
        "\n tranId=" + transactionRowBasic.tranId[0].searchValue + 
        "\n type=" + transactionRowBasic.type[0].searchValue + 
        (transactionRowBasic.entity == null ? "" : ("\n customer internalID=" + transactionRowBasic.entity[0].searchValue.internalId)) + 
        (transactionRowBasic.item == null ? "" : ("\n item=" + transactionRowBasic.item[0].searchValue.internalId)) + 
        (itemRowBasic == null ? "" : ("\n item.name=" + itemRowBasic.itemId[0].searchValue)) + 
        (transactionRowBasic.dateCreated == null ? "" : ("\n createdDate=" + transactionRowBasic.dateCreated[0].searchValue.ToString()) + 
        (transactionRowBasic.tranDate == null ? "" : ("\n tranDate=" + transactionRowBasic.tranDate[0].searchValue.ToString())) + 
        (transactionRowBasic.lastModifiedDate == null ? "" : ("\n lastModifiedDate=" + transactionRowBasic.lastModifiedDate[0].searchValue.ToString())))); 
      } 
     } 

고급 검색을 수행하기 전에 검색 환경을 설정하는 것이 중요합니다. returnSearchFields를 true로 설정하지 않으면 결과가 없습니다. 또한 조건과 열을 모두 제공해야합니다. NSClientERP 예제에서 TransactionSearchAdvanced로 시작하는 각 객체는 인스턴스화되고, 개별 코드 행에있는 자식 객체에 연결됩니다. 나는 이것을 따라 가기가 매우 어렵다는 것을 알았다. 전체 검색 개체를 인스턴스화하는 한 줄의 코드를 사용하고 있습니다.

주목할만한 또 다른 사항은 Items 테이블을 판매 주문 라인 항목에 조인하는 itemJoin입니다. billingTransactionJoin과 같은 다른 조인이 있습니다. 이러한 조인을 활용하면 항목이 표시 될 때 항목의 표시 이름, 인벤토리 정보 또는 번호 추적과 같은 항목을 가져 오기 위해 연결된 테이블을 사용할 수 있습니다.

데이터 집합을 채우고 사실을 정렬하는 것 외에 결과를 정렬하는 방법을 찾을 수 없었습니다. 누구든지 더 좋은 방법이 있다면 알려주세요.

0

다음은 실제로 페이징을 올바르게 수행하는 예입니다.

service.searchPreferences = new SearchPreferences(); 
service.searchPreferences.bodyFieldsOnly = true; 
service.searchPreferences.returnSearchColumns = true; 

TransactionSearchAdvanced customSearch = new TransactionSearchAdvanced() 
{ 
    columns = new TransactionSearchRow() 
    { 
     basic = new TransactionSearchRowBasic() 
     { 
      dateCreated = new SearchColumnDateField[] { new SearchColumnDateField() } 
      , 
      tranDate = new SearchColumnDateField[] { new SearchColumnDateField() } 
      , 
      type = new SearchColumnEnumSelectField[] { new SearchColumnEnumSelectField() } 
      , 
      tranId = new SearchColumnStringField[] { new SearchColumnStringField() } 
      , 
      internalId = new SearchColumnSelectField[] { new SearchColumnSelectField() } 
      , 
      entity = new SearchColumnSelectField[] { new SearchColumnSelectField() } 
      , 
      item = new SearchColumnSelectField[] { new SearchColumnSelectField() } 
      , 
      lastModifiedDate = new SearchColumnDateField[] { new SearchColumnDateField() } 
     } 
     , 
     itemJoin = new ItemSearchRowBasic() 
     { 
      itemId = new SearchColumnStringField[] { new SearchColumnStringField() } 
     } 
    } 
    , 
    criteria = new TransactionSearch() 
    { 
     basic = new TransactionSearchBasic() 
     { 
      type = new SearchEnumMultiSelectField() 
      { 
       @operator = SearchEnumMultiSelectFieldOperator.anyOf 
       , 
       operatorSpecified = true 
       , 
       searchValue = new string[] { 
        "_salesOrder" 
       } 
      } 
      , 
      lastModifiedDate = new SearchDateField() 
      { 
       @operator = SearchDateFieldOperator.onOrAfter 
       , 
       operatorSpecified = true 
       , 
       searchValue = DateTime.Now.AddDays(-15) 
       , 
       searchValueSpecified = true 
      } 
     } 
    } 
}; 

Console.WriteLine("Querying NetSuite"); 

SearchResult res = service.search(customSearch); 

Console.WriteLine("\nThe advanced search completed."); 
Console.WriteLine("\n Total Records = " + res.totalRecords); 
Console.WriteLine(" Total Pages = " + res.totalPages); 
Console.WriteLine(" Page Size = " + res.pageSize); 
Console.WriteLine(" Current Page Index = " + res.pageIndex); 

Console.WriteLine("\n\nHit Enter to list results"); 
Console.ReadLine(); 

while (res.searchRowList.Length > 0) 
{ 
    Console.WriteLine($"\n\nProcessing page: {res.pageIndex}"); 
    Console.WriteLine($"Result count: {res.searchRowList.Length}"); 

    Console.WriteLine($"\nHit enter to list page {res.pageIndex} results"); 
    Console.ReadLine(); 


    foreach (TransactionSearchRow transactionRow in res.searchRowList) 
    { 
     TransactionSearchRowBasic transactionRowBasic = transactionRow.basic; 
     ItemSearchRowBasic itemRowBasic = transactionRow.itemJoin; 
     Console.WriteLine(
      "\n tranId=" + transactionRowBasic.tranId[0].searchValue + 
      (itemRowBasic == null ? "" : ("\n item.name=" + itemRowBasic.itemId[0].searchValue)) 
     ); 
    } 

    Console.WriteLine("\nQuerying NetSuite again..."); 
    res = service.searchMore(++res.pageIndex); 
} 

service.logout(); 
Console.WriteLine("\n\nHit Enter to close this window."); 
Console.ReadLine();