NetSuite SuiteTalk API-获取库存详细信息

NetSuite SuiteTalk API-获取库存详细信息,netsuite,suitetalk,Netsuite,Suitetalk,我正在使用NetSuite的SuiteTalk(API)服务来检索程序集列表。我需要加载结果上的InventoryDetails字段,以查看分配给项目的序列号/批号。这是我正在使用的当前代码,但是结果仍然显示这些字段返回为NULL,尽管我可以看到AssemblyBuild对象的其他字段。如何在事务搜索中获取要返回的库存详细信息(序列/批次) public static List<AssemblyBuildResult> Get() { var listAssemblyBui

我正在使用NetSuite的SuiteTalk(API)服务来检索程序集列表。我需要加载结果上的InventoryDetails字段,以查看分配给项目的序列号/批号。这是我正在使用的当前代码,但是结果仍然显示这些字段返回为NULL,尽管我可以看到AssemblyBuild对象的其他字段。如何在事务搜索中获取要返回的库存详细信息(序列/批次)

public static List<AssemblyBuildResult> Get()
{
     var listAssemblyBuilds = new List<AssemblyBuildResult>();

     var service = Service.Context();

     var ts = new TransactionSearch();
     var tsb = new TransactionSearchBasic();

     var sfType = new SearchEnumMultiSelectField
     {
         @operator = SearchEnumMultiSelectFieldOperator.anyOf,
         operatorSpecified = true,
         searchValue = new string[] { "_assemblyBuild" }
     };

     tsb.type = sfType;
     ts.basic = tsb;
     ts.inventoryDetailJoin = new InventoryDetailSearchBasic();

     // perform the search
     var response = service.search(ts);
     response.pageSizeSpecified = true;

     // Process response
     if (response.status.isSuccess)
     {
         // Process the records returned in the response 
                // Get more records with pagination
                if (response.totalRecords > 0)
                {
                    for (var x = 1; x <= response.totalPages; x++)
                    {
                        var records = response.recordList;

                        foreach (var t in records)
                        {
                            var ab = (AssemblyBuild) t;
                            listAssemblyBuilds.Add(GetAssemblyBuildsResult(ab));
                        }

                        if (response.pageIndex < response.totalPages)
                        {
                            response = service.searchMoreWithId(response.searchId, x + 1);
                        }
                    }
                }
            }

            // Parse and return NetSuite WorkOrder into assembly WorkOrderResult list
            return listAssemblyBuilds;
        }
公共静态列表Get()
{
var listAssemblyBuilds=新列表();
var service=service.Context();
var ts=新事务搜索();
var tsb=新事务搜索基本();
var sfType=新的SearchEnumMultiSelectField
{
@运算符=SearchEnumMultiSelectFieldOperator.anyOf,
运算符指定为true,
searchValue=新字符串[]{“\u assemblyBuild”}
};
tsb.type=sfType;
ts.basic=tsb;
ts.inventoryDetailJoin=新的InventoryDetailSearchBasic();
//执行搜索
var响应=服务搜索(ts);
response.pageSizeSpecified=true;
//过程响应
if(响应.状态.发布成功)
{
//处理响应中返回的记录
//通过分页获取更多记录
如果(response.totalRecords>0)
{

对于(var x=1;x,在经历了许多痛苦之后,我能够用以下代码解决这个问题:

    /// <summary>
    /// Returns List of AssemblyBuilds from NetSuite
    /// </summary>
    /// <returns></returns>
    public static List<AssemblyBuildResult> Get(string id = "", bool getDetails = false)
    {
        // Object to populate and return results
        var listAssemblyBuilds = new List<AssemblyBuildResult>();

        // Initiate Service and SavedSearch (TransactionSearchAdvanced)
        var service = Service.Context();
        var tsa = new TransactionSearchAdvanced
        {
            savedSearchScriptId = "customsearch_web_assemblysearchmainlist"
        };

        // Filter by ID if specified
        if (id != "")
        {
            tsa.criteria = new TransactionSearch()
            {
                basic = new TransactionSearchBasic()
                {
                    internalId = new SearchMultiSelectField
                    {
                        @operator = SearchMultiSelectFieldOperator.anyOf,
                        operatorSpecified = true,
                        searchValue = new[] {
                        new RecordRef() {
                            type = RecordType.assemblyBuild,
                            typeSpecified = true,
                            internalId = id
                        }
                    }
                    }
                }
            };

        }

        // Construct custom columns to return
        var tsr = new TransactionSearchRow();
        var tsrb = new TransactionSearchRowBasic();

        var orderIdCols = new SearchColumnSelectField[1];
        var orderIdCol = new SearchColumnSelectField();
        orderIdCols[0] = orderIdCol;
        tsrb.internalId = orderIdCols;

        var tranDateCols = new SearchColumnDateField[1];
        var tranDateCol = new SearchColumnDateField();
        tranDateCols[0] = tranDateCol;
        tsrb.tranDate = tranDateCols;

        var serialNumberCols = new SearchColumnStringField[1];
        var serialNumberCol = new SearchColumnStringField();
        serialNumberCols[0] = serialNumberCol;
        tsrb.serialNumbers = serialNumberCols;

        // Perform the Search
        tsr.basic = tsrb;
        tsa.columns = tsr;
        var response = service.search(tsa);

        // Process response
        if (response.status.isSuccess)
        {
            var searchRows = response.searchRowList;
            if (searchRows != null && searchRows.Length >= 1)
            {
                foreach (SearchRow t in searchRows)
                {
                    var transactionRow = (TransactionSearchRow)t;
                    listAssemblyBuilds.Add(GetAssemblyBuildsResult(transactionRow, getDetails));
                }
            }
        }

        // Parse and return NetSuite WorkOrder into assembly WorkOrderResult list
         return listAssemblyBuilds;
    }

    private static string GetAssemblyBuildLotNumbers(string id)
    {
        var service = Service.Context();
        var serialNumbers = "";

        var tsa = new TransactionSearchAdvanced
        {
            savedSearchScriptId = "customsearch_web_assemblysearchlineitems"
        };

        service.searchPreferences = new SearchPreferences { bodyFieldsOnly = false };
        tsa.criteria = new TransactionSearch()
        {
            basic = new TransactionSearchBasic()
            {
                internalId = new SearchMultiSelectField
                {
                    @operator = SearchMultiSelectFieldOperator.anyOf,
                    operatorSpecified = true,
                    searchValue = new[] {
                        new RecordRef() {
                            type = RecordType.assemblyBuild,
                            typeSpecified = true,
                            internalId = id
                        }
                    }
                }
            }
        };

        // Construct custom columns to return
        var tsr = new TransactionSearchRow();
        var tsrb = new TransactionSearchRowBasic();

        var orderIdCols = new SearchColumnSelectField[1];
        var orderIdCol = new SearchColumnSelectField();
        orderIdCols[0] = orderIdCol;
        tsrb.internalId = orderIdCols;

        var serialNumberCols = new SearchColumnStringField[1];
        var serialNumberCol = new SearchColumnStringField();
        serialNumberCols[0] = serialNumberCol;
        tsrb.serialNumbers = serialNumberCols;

        tsr.basic = tsrb;
        tsa.columns = tsr;

        var response = service.search(tsa);

        if (response.status.isSuccess)
        {
            var searchRows = response.searchRowList;
            if (searchRows != null && searchRows.Length >= 1)
            {
                foreach (SearchRow t in searchRows)
                {
                    var transactionRow = (TransactionSearchRow)t;
                    if (transactionRow.basic.serialNumbers != null)
                    {
                        return transactionRow.basic.serialNumbers[0].searchValue;
                    }
                }
            }
        }

        return serialNumbers;
    }

    private static AssemblyBuildResult GetAssemblyBuildsResult(TransactionSearchRow tsr, bool getDetails)
    {
        if (tsr != null)
        {
            var assemblyInfo = new AssemblyBuildResult
            {
                NetSuiteId = tsr.basic.internalId[0].searchValue.internalId,
                ManufacturedDate = tsr.basic.tranDate[0].searchValue,
                SerialNumbers = tsr.basic.serialNumbers[0].searchValue

            };

            // If selected, this will do additional NetSuite queries to get detailed data (slower)
            if (getDetails)
            {
                // Look up Lot Number
                assemblyInfo.LotNumber = GetAssemblyBuildLotNumbers(tsr.basic.internalId[0].searchValue.internalId);
            }

            return assemblyInfo;
        }

        return null;

    }
//
///从NetSuite返回AssemblyBuild的列表
/// 
/// 
公共静态列表获取(字符串id=“”,bool getDetails=false)
{
//对象来填充和返回结果
var listAssemblyBuilds=新列表();
//启动服务并保存搜索(TransactionSearchAdvanced)
var service=service.Context();
var tsa=新交易搜索高级
{
savedSearchScriptId=“customsearch\u web\u assemblysearchmainlist”
};
//按ID筛选(如果指定)
如果(id!=“”)
{
tsa.criteria=新交易搜索()
{
basic=新事务搜索basic()
{
internalId=新的SearchMultiSelectField
{
@运算符=SearchMultiSelectFieldOperator.anyOf,
运算符指定为true,
searchValue=new[]{
新RecordRef(){
类型=RecordType.assemblyBuild,
指定的类型=真,
内部id=id
}
}
}
}
};
}
//构造要返回的自定义列
var tsr=new TransactionSearchRow();
var tsrb=newTransactionSearchRowBasic();
var orderIdCols=新的SearchColumnSelectField[1];
var orderIdCol=new SearchColumnSelectField();
orderIdCols[0]=orderIdCols;
tsrb.internalId=orderIdCols;
var transdatecols=新的SearchColumnDateField[1];
var tranDateCol=new SearchColumnDateField();
tranDateCols[0]=tranDateCol;
tsrb.tranDate=tranDateCols;
var serialNumberCols=newsearchColumnStringField[1];
var serialNumberCol=new SearchColumnStringField();
serialNumberCols[0]=serialNumberCol;
tsrb.serialNumbers=serialNumberCols;
//执行搜索
tsr.basic=tsrb;
tsa.columns=tsr;
var响应=服务搜索(tsa);
//过程响应
if(响应.状态.发布成功)
{
var searchRows=response.searchRowList;
if(searchRows!=null&&searchRows.Length>=1)
{
foreach(搜索行中的搜索行t)
{
var transactionRow=(TransactionSearchRow)t;
添加(GetAssemblyBuildsResult(transactionRow,getDetails));
}
}
}
//分析NetSuite工作指令并将其返回到程序集工作指令结果列表中
返回listAssemblyBuilds;
}
私有静态字符串GetAssemblyBuildLotNumber(字符串id)
{
var service=service.Context();
var serialNumbers=“”;
var tsa=新交易搜索高级
{
savedSearchScriptId=“customsearch\u web\u assemblysearchlineitems”
};
service.searchPreferences=newsearchPreferences{bodyFieldsOnly=false};
tsa.criteria=新交易搜索()
{
basic=新事务搜索basic()
{
internalId=新的SearchMultiSelectField
{
@运算符=SearchMultiSelectFieldOperator.anyOf,
运算符指定为true,
searchValue=new[]{
新RecordRef(){
类型=RecordType.assemblyBuild,
指定的类型=真,
内部id=id
}
}
}
}
};
//构造要返回的自定义列
var tsr=new TransactionSearchRow();
var tsrb=newTransactionSearchRowBasic();
var orderIdCols=新的SearchColumnSelectField[1];
var orderIdCol=new SearchColumnSelectField();
orderIdCols[0]=orderIdCols;
tsrb.internalId=orderIdCols;
var serialNumberCols=newsearchColumnStringField[1];
var serialNumberCol=new SearchColumnStringField();
serialNumberCols[0]=serialNumberCol;
tsrb.serialNumbers=serialNumberCols;
tsr.basic=tsrb;
tsa.columns=tsr;
var响应=服务搜索(tsa);
if(响应.状态.发布成功)
{
瓦尔海