【问题标题】:Count SalesOrder Items more elegantly in SuiteTalk在 SuiteTalk 中更优雅地计算 SalesOrder 项目
【发布时间】:2019-11-15 22:10:26
【问题描述】:

我正在使用 SuiteTalk 为基于 NetSuite 的应用程序创建后端。我正在尝试计算 SalesOrders 中的项目总数。

我的问题是,在执行搜索操作以获取所有 SalesOrders 时,返回的 Record[] 对象在转换为 SalesOrder[](使用 Array.ConvertAll(...) 并手动)时会丢失精度。就我而言,这意味着在尝试访问 itemList 字段时会出现空引用异常。

我的最终解决方案如下:

for (SearchResult searchResult = _service.search(salesOrderSearch); searchResult.pageIndex <= searchResult.totalPages; searchResult = _service.searchNext()) {

                if (searchResult.status.isSuccess) {

                    // Convert Record[] to SalesOrder[]. Note that direct conversion causes some fields to become Null 
                    SalesOrder[] salesOrdersNull = Array.ConvertAll(searchResult.recordList, item => (SalesOrder)item);

                    // To avoid the null issue, send a get request for each order by its internalId
                    foreach (SalesOrder salesOrderNull in salesOrdersNull) {
                        SalesOrder salesOrder = getSalesOrder(salesOrderNull.internalId);

                        // Increment the count by the total number of items
                        count += salesOrder.itemList.item.Length;
                    }
                } else {
                    string errorCodes = Helpers.generateErrorString(searchResult.status.statusDetail);
                    throw new SuiteTalkServiceException("count Sales Order Lines. Failed with error code(s) " + errorCodes);
                }
            }

但是,这对每个销售订单都调用了一个获取请求,这意味着它需要一个时间并且非常不雅。我缺少更优雅的解决方案吗?有没有其他人有类似的问题,还是我很密集?

Record 的类定义是:

public abstract partial class Record {

        private string[] nullFieldListField;

        /// <remarks/>
        [System.Xml.Serialization.XmlArrayItemAttribute("name", IsNullable=false)]
        public string[] nullFieldList {
            get {
                return this.nullFieldListField;
            }
            set {
                this.nullFieldListField = value;
            }
        }
    }

SalesOrder 的类定义有几千行代码,但SchemaBrowser entry 相当清晰。

【问题讨论】:

  • 你的意思是失去精度?为什么不能映射?您能否发布SalesOrderRecord 的类定义?
  • 我的意思是“在我的情况下,这意味着在尝试访问 itemList 字段时出现空引用异常。”解释我的意思是失去精度。为澄清起见,我的意思是某些字段变为空。我添加了 Record 的类定义和 SalesOrder 的 SchemaBrowser 条目

标签: c# netsuite suitetalk


【解决方案1】:

我找到了问题here的答案。

本质上,为了防止itemList 字段变为null,您必须将searchPreferences.bodyFieldsOnly 字段设置为false。现在运行时间是我的解决方案的 1/10。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-26
    • 1970-01-01
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 2010-11-13
    相关资源
    最近更新 更多