Java 使用SuiteTalk获取PurchaseOrder中的项目

Java 使用SuiteTalk获取PurchaseOrder中的项目,java,scala,netsuite,suitetalk,Java,Scala,Netsuite,Suitetalk,我正在尝试使用SuiteTalk从采购订单中获取项目和一些相关信息。我能够使用Scala中的以下工具通过TransactionSearch获得所需的采购订单: val transactionSearch = new TransactionSearch val search = new TransactionSearchBasic ... search.setLastModifiedDate(searchLastModified) //Gets POs modified in the la

我正在尝试使用SuiteTalk从采购订单中获取项目和一些相关信息。我能够使用Scala中的以下工具通过
TransactionSearch
获得所需的采购订单:

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 {...}  
  }
}
if(result.getStatus().isissucess()){
println(“事务:+result.getTotalRecords)

对于(i我认为您没有使用搜索首选项,这就是您无法获取采购订单行项目的原因。您必须在代码中使用以下搜索首选项-

        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;
        poID.@operator = 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);
                }
            }
        }
    }
private void SearchPurchaseOrderByID(字符串strPurchaseOrderId)
{
TransactionSearch tranSearch=新TransactionSearch();
TransactionSearchBasic tranSearchBasic=新建TransactionSearchBasic();
RecordRef poRef=新的RecordRef();
poRef.internalId=strPurchaseOrderId;
poRef.type=RecordType.purchaseOrder;
poRef.typeSpecified=true;
RecordRef[]poRefs=新的RecordRef[1];
poRefs[0]=poRef;
SearchMultiSelectField poID=新的SearchMultiSelectField();
poID.searchValue=poRefs;
poID@operator=SearchMultiSelectFieldOperator.anyOf;
poID.operatorSpecified=真;
tranSearchBasic.internalId=poID;
tranSearch.basic=tranSearchBasic;
InitService();
搜索结果=_service.search(tranSearch);
if(results.status.issucces&&results.status.issuccesspecified)
{
记录[]记录=结果。记录列表;
PurchaseOrder采购订单=(PurchaseOrder)记录[0];
PurchaseOrderItemList poItemList=purchaseOrder.itemList;
PurchaseOrderItem[]poItems=poItemList.item;
if(poItems!=null&&poItems.Length>0)
{
对于(变量i=0;i
谢谢您的建议。我的结果是返回采购订单,但我无法将searchPreferences应用于我的服务,并且项目列表仍然得到
null
。我设置服务的方法可能是错误的:
val service=new NetSuiteService()
val解析器=新的HeaderHandlerResolver;
服务.setHandlerResolver(解析器);
val端口=服务.getNetSuite端口;
首选项.setBodyFieldsOnly(false);
我没有用于首选项的
端口.searchPreferences
选项。您必须将搜索首选项添加到NetSuite服务对象,如-NetSuite服务\u service=new NetSuite服务();searchPreferences=new searchPreferences();prefrence.bodyFieldsOnly=false;_service.searchPreferences=prefrence;这取决于您如何将WSDL编译成Java。如果您使用Axis 1.4(如NetSuite的演示中所示),则
端口(由
GetNetSuite报告返回)将是NetSuite BindingStub类型。然后执行
端口.setHeader(“urn:messages\u 2015\u 2.platform.webservices.netsuite.com”,“searchPreferences”,首选项)
.wsimport用于将WSDL编译为Java。由
GetNetSuite端口返回的
端口
类型为
NetSuite端口类型
。我们使用的是2014_2平台。
port.setHeader
,以及建议的
服务.searchPreferences
选项@NetSuite专家也不可用。
服务e
创建的类型为
NetSuiteService