2016-02-24 39 views
2

我試圖從SuiteTalk購買訂單中獲取物品和一些相關信息。我可以使用以下與TransactionSearch以獲得所需的採購訂單在斯卡拉:使用SuiteTalk在PurchaseOrder中獲取物品

val transactionSearch = new TransactionSearch 
val search = new TransactionSearchBasic 
... 
search.setLastModifiedDate(searchLastModified) //Gets POs modified in the last 10 minutes 
transactionSearch.setBasic(search) 

val result = port.search(transactionSearch) 

我能每個結果轉換爲記錄作爲PurchaseOrder類的一個實例。

if (result.getStatus().isIsSuccess()) { 
    println("Transactions: " + result.getTotalRecords) 
    for (i <- 0 until result.getTotalRecords) { 
    try { 
     val record = result.getRecordList.getRecord.get(i).asInstanceOf[PurchaseOrder] 
     record.get<...> 
    } 
    catch {...} 
    } 
} 

從這裏我能夠使用getters訪問單個字段,除了ItemList。

我可以在NetSuite Web界面看到有附加到採購訂單的項目。但是在結果記錄上使用getItemList總是返回null響應。

有什麼想法?

回答

2

我認爲您尚未使用搜索偏好設置,因此您無法獲取採購訂單項。你會在你的代碼中使用下面的搜索喜好 -

 SearchPreferences prefrence = new SearchPreferences(); 
     prefrence.bodyFieldsOnly = false; 

     _service.searchPreferences = prefrence; 

以下爲使用上述優先工作的例子 -

private void SearchPurchaseOrderByID(string strPurchaseOrderId) 
    { 
     TransactionSearch tranSearch = new TransactionSearch(); 
     TransactionSearchBasic tranSearchBasic = new TransactionSearchBasic(); 


     RecordRef poRef = new RecordRef(); 
     poRef.internalId = strPurchaseOrderId; 
     poRef.type = RecordType.purchaseOrder; 
     poRef.typeSpecified = true; 

     RecordRef[] poRefs = new RecordRef[1]; 
     poRefs[0] = poRef; 

     SearchMultiSelectField poID = new SearchMultiSelectField(); 
     poID.searchValue = poRefs; 
     [email protected] = SearchMultiSelectFieldOperator.anyOf; 
     poID.operatorSpecified = true; 

     tranSearchBasic.internalId = poID; 
     tranSearch.basic = tranSearchBasic; 

     InitService(); 
     SearchResult results = _service.search(tranSearch); 
     if (results.status.isSuccess && results.status.isSuccessSpecified) 
     { 
      Record[] poRecords = results.recordList; 
      PurchaseOrder purchaseOrder = (PurchaseOrder)poRecords[0]; 
      PurchaseOrderItemList poItemList = purchaseOrder.itemList; 
      PurchaseOrderItem[] poItems = poItemList.item; 
      if (poItems != null && poItems.Length > 0) 
      { 
       for (var i = 0; i < poItems.Length; i++) 
       { 
        Console.WriteLine("Item Line On PO = " + poItems[i].line);       
        Console.WriteLine("Item Quantity = " + poItems[i].quantity); 
        Console.WriteLine("Item Descrition = " + poItems[i].description); 
       } 
      } 
     } 
    } 
+0

謝謝你的建議。我的結果是返回採購訂單,但我無法將searchPreferences應用於我的服務,並且仍在爲itemList獲取'null'。 我有設置服務,也許我做了錯誤的方式: 'VAL服務=新NetSuiteService();'' VAL解析器=新HeaderHandlerResolver;'' service.setHandlerResolver(旋) ;' 'val port = service.getNetSuitePort;' 'val preferences = new SearchPreferences;' 'preferences.setBodyFieldsOnly(false);' 我沒有'port.searchPreferences'選項作爲首選項。 – the3rdNotch

+1

您必須將搜索首選項添加到NetSuite服務對象,如 - NetSuiteService _service = new NetSuiteService(); SearchPreferences prefrence = new SearchPreferences(); prefrence.bodyFieldsOnly = false; _service.searchPreferences = prefrence; –

+1

這取決於您如何將WSDL編譯爲Java。如果您使用Axis 1.4(如在NetSuite的演示中),那麼'port(由'getNetSuitePort'返回)將是NetSuiteBindingStub類型。然後做'port.setHeader(「urn:messages_2015_2.platform.webservices.netsuite.com」,「searchPreferences」,prefrence);'。 –