2017-11-28 26 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で始まる各オブジェクトはインスタンス化され、構成され、別々のコード行で子オブジェクトにリンクされました。私はこれを非常に難しいと感じました。私は、検索オブジェクト全体をインスタンス化する1行のコードを使用しています。

もう1つ注目すべきは、ItemsテーブルをSales Orderラインアイテムに結合する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(); 
関連する問題