C#NetSuite WebServices:从已保存搜索中的自定义字段中获取值(ItemSearchAdvanced)

时间:2015-02-12 01:29:56

标签: c# web-services netsuite

我使用C#MVC使用他们的WebServices API连接到NetSuite。我有一些当前代码调用库存项目的已保存搜索。以下是当前正常运行的代码:

ItemSearchAdvanced searchItems = new ItemSearchAdvanced();
searchItems.savedSearchId = "128";
SearchResult result = netSuiteSvc.search(searchItems);
int totalRecords = 0;
int processedRecords = 0;

UpdateNetsuitePriceListModel returnObj = new UpdateNetsuitePriceListModel();
returnObj.NewPriceList = new List<NetSuitePriceListRecord>();
if (result.status.isSuccess)
{
    SearchRow[] searchRows = result.searchRowList;
    if (searchRows != null && searchRows.Length >= 1)
    {
        for (int i = 0; i < searchRows.Length - 1; i++)
        {
            ItemSearchRow itemRow = (ItemSearchRow)searchRows[i];
            if (itemRow.basic.itemId != null && itemRow.basic.mpn != null && itemRow.basic.basePrice != null && itemRow.basic.salesDescription != null)
            {
                returnObj.NewPriceList.Add(new NetSuitePriceListRecord()
                {
                    ItemId = itemRow.basic.itemId[0].searchValue,
                    ManufacturerPartNumber = itemRow.basic.mpn[0].searchValue,
                    ContractPrice = Convert.ToDecimal(itemRow.basic.basePrice[0].searchValue),
                    Cost = CalculateProductCostForIngram(Convert.ToDecimal(itemRow.basic.basePrice[0].searchValue)),
                    Description = itemRow.basic.salesDescription[0].searchValue
                });
                processedRecords++;
            }
            totalRecords++;
        }
    }
    else
    {
        throw new Exception("NetSuite Part List Blank");
    }
}
else
{
    throw new Exception("NetSuite Part List Search Failure");
}

现在我需要从自定义添加的字段而不是默认的itemId字段中提取itemId。

显然,因为这是一个自定义字段,所以它不是ItemSearchRowBasic的属性。看起来不是我可以选择的属性&#34; customFieldList&#34;这是&#34; SearchColumnCustomField&#34;的数组。如果我为数组选择索引,我可以看到SearchColumnCustomField包含:

  • customLabel
  • internalId
  • scriptId

我想我应该能够获取SearchColumnCustomField的internalId,并以某种方式使用它来获取该自定义列的搜索值,但是我找到了适合目前的任何示例时遇到了一些麻烦。

此自定义字段是添加到所有广告资源项目的自由格式文本字段。

2 个答案:

答案 0 :(得分:2)

尝试使用字段的ID设置scriptId(&#34; custitem_xyz&#34;)。这应该工作。

2013年之前,我们会使用internalId,但从那以后它改为scriptId。

答案 1 :(得分:2)

您需要遍历customFieldList中的CustomRecord项。然后我通常检查一个特定的类型,这样我就可以投射到正确的对象,但是通过一些反射你可以避免这种情况。

foreach (Record r in mySearchResponse.recordList){
  foreach (CustomFieldRef cr in ((CustomRecord)r).customFieldList){
    if (cr.GetType().Name == "SelectCustomFieldRef"){
      if (((SelectCustomFieldRef)cr).scriptId == "my_custom_field"){
        internalID = ((CustomRecord)r).internalId;
      }
    }
  }
}