2017-11-28 2 views
0

Ich habe erst seit weniger als einem Jahr mit NetSuite und SuiteTalk gearbeitet. Ich habe Beispiele für grundlegende Suchen und erweiterte Suchen gefunden, die gespeicherte Suchanfragen nutzen, aber es fiel mir schwer, Beispiele dafür zu finden, wie man eine erweiterte Suche von Grund auf mit Kriterien und ausgewählten Spalten in der Ergebnismenge durchführt. Ich frage nach Beispielen.SuiteTalk Erweiterte Suche Beispiele

Antwort

1

Ich habe die im NSClientERP-Projekt bereitgestellten Beispiele überprüft, die von NetSuite heruntergeladen werden können. Hier ist ein vereinfachtes Beispiel.

 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())))); 
      } 
     } 

Es ist wichtig, dass Sie Ihre Sucheinstellungen vor der Durchführung der erweiterten Suche festlegen. Ohne returnSearchFields auf true zu setzen, habe ich keine Ergebnisse erhalten. Außerdem müssen Sie sowohl Kriterien als auch Spalten angeben. Im Beispiel NSClientERP wurde jedes mit TransactionSearchAdvanced beginnende Objekt in separaten Codezeilen instanziiert, konfiguriert und mit untergeordneten Objekten verknüpft. Ich fand das sehr schwer zu folgen. Ich verwende eine Codezeile, die das gesamte Suchobjekt instanziiert.

Eine andere Sache, die Sie beachten sollten, ist itemJoin, die die Items-Tabelle mit einer Verkaufsauftragsposition verbindet. Ihnen stehen weitere Joins zur Verfügung, z. B. billingTransactionJoin. Wenn Sie diese Joins verwenden, können Sie in verknüpfte Tabellen greifen, um beispielsweise den Anzeigenamen, die Inventarinformationen oder die Tracking-Nummern eines Artikels zu erhalten, wenn ein Artikel ausgeliefert wird.

Ich konnte keinen anderen Weg finden, die Ergebnisse zu sortieren, als einen Datensatz zu füllen und danach zu sortieren. Wenn jemand einen besseren Weg hat, lass es mich wissen.

0

Hier ist ein Beispiel, das das Paging tatsächlich korrekt durchführt.

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();