C# NetSuite WebServices:从保存的搜索中的自定义字段获取值 (ItemSearchAdvanced)
C# NetSuite WebServices: Get value from custom field in saved search (ItemSearchAdvanced)
我正在使用 C# MVC 通过他们的 Web 服务连接到 NetSuite API。我有一些当前代码可以调用已保存的库存项目搜索。这是当前运行良好的代码:
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 的 属性。看起来我可以选择 "customFieldList" 而不是 属性,它是 "SearchColumnCustomField" 的数组。如果我为数组选择一个索引,我可以看到 SearchColumnCustomField 包含:
- 自定义标签
- internalId
- scriptId
我想我应该能够获取 SearchColumnCustomField 的 internalId 并以某种方式使用它来获取该自定义列的搜索值,但我在找到适合的示例时遇到了一些问题。
此自定义字段是添加到所有库存项目的自由格式文本字段。
尝试使用字段的 ID 设置 scriptId ("custitem_xyz")。那应该有效。
2013年之前会用internalId,后来改成了scriptId。
您需要遍历 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;
}
}
}
}
我正在使用 C# MVC 通过他们的 Web 服务连接到 NetSuite API。我有一些当前代码可以调用已保存的库存项目搜索。这是当前运行良好的代码:
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 的 属性。看起来我可以选择 "customFieldList" 而不是 属性,它是 "SearchColumnCustomField" 的数组。如果我为数组选择一个索引,我可以看到 SearchColumnCustomField 包含:
- 自定义标签
- internalId
- scriptId
我想我应该能够获取 SearchColumnCustomField 的 internalId 并以某种方式使用它来获取该自定义列的搜索值,但我在找到适合的示例时遇到了一些问题。
此自定义字段是添加到所有库存项目的自由格式文本字段。
尝试使用字段的 ID 设置 scriptId ("custitem_xyz")。那应该有效。
2013年之前会用internalId,后来改成了scriptId。
您需要遍历 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;
}
}
}
}