代码之家  ›  专栏  ›  技术社区  ›  Be Kind To New Users

QuickBooks检索客户失败

  •  0
  • Be Kind To New Users  · 技术社区  · 7 年前

    protected readonly IMsgSetRequest RequestMsgSet = null;
    protected IMsgSetResponse ResponseMsgSet = null;
    
    public string GetAllCustomer(bool IsActiveOnly = true)
    {
    
        RequestMsgSet.ClearRequests();
        ICustomerQuery CustomerQueryRq = RequestMsgSet.AppendCustomerQueryRq();
    
        if (IsActiveOnly)
        {
            if (CustomerQueryRq != null)
                CustomerQueryRq.ORCustomerListQuery.CustomerListFilter.ActiveStatus.SetValue(
                    ENActiveStatus.asActiveOnly);
        }
        else {
            CustomerQueryRq.ORCustomerListQuery.CustomerListFilter.ActiveStatus.SetValue(ENActiveStatus.asAll);
        }
        ResponseMsgSet = SessionManager.DoRequests(RequestMsgSet);
        return(ResponseMsgSet.ToXMLString());
    }
    
    Console.WriteLine(GetAllCustomer());
    

    它返回:

    <?xml version="1.0" ?>
    <QBXML>
    <QBXMLMsgsRs>
    <CustomerQueryRs requestID="0" statusCode="1000" statusSeverity="Error" statusMessage="There has been an internal error when processing the request." />
    </QBXMLMsgsRs>
    </QBXML>
    

    我怀疑DoRequests的内存不足,因为我有11万客户。

    如何重写此代码以使用较少的内存?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Softhmak.    7 年前

    看一看 ICustomerQuery

    您可以使用过滤来获取数据,例如:名称范围(a-i,j-r而不是s-z)过滤器、日期范围过滤器、名称以过滤器开头以及其他一些过滤器。

    此外,这也可以用来只得到你想要的东西,比如: 全名

    这样可以减少内存占用。请看下面的示例代码:

    public IList<CustomerModelQB> GetAllCustomer(string fromName = "a", string toName = "z", bool IsActiveOnly = true)
        {
            RequestMsgSet.ClearRequests();
            ICustomerQuery CustomerQueryRq = RequestMsgSet.AppendCustomerQueryRq();
    
            if (IsActiveOnly)
            {
                if (CustomerQueryRq != null)
                    CustomerQueryRq.ORCustomerListQuery.CustomerListFilter.ActiveStatus.SetValue(
                        ENActiveStatus.asActiveOnly);
            }
            else
                CustomerQueryRq.ORCustomerListQuery.CustomerListFilter.ActiveStatus.SetValue(ENActiveStatus.asAll);
    
            //CustomerQueryRq.ORCustomerListQuery.CustomerListFilter.MaxReturned.SetValue(3);
    
            //Set field value for FromName
            CustomerQueryRq.ORCustomerListQuery.CustomerListFilter.ORNameFilter.NameRangeFilter.FromName.SetValue(fromName);
            //Set field value for ToName
            CustomerQueryRq.ORCustomerListQuery.CustomerListFilter.ORNameFilter.NameRangeFilter.ToName.SetValue(toName);
    
            CustomerQueryRq.IncludeRetElementList.Add("FullName");
            CustomerQueryRq.IncludeRetElementList.Add("AccountNumber");
            ResponseMsgSet = SessionManager.DoRequests(RequestMsgSet);
            return WalkCustomerQuery(ResponseMsgSet);
        }
    

    您可以进一步参考 this