QuickBooks извлечение клиентов не удается - PullRequest
0 голосов
/ 27 октября 2018

У меня есть этот код:

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 не хватает памяти, так как у меня 110 000 клиентов.

Как я могу подтвердить, что DoRequests не хватает памяти?

Как мне переписать этот код, чтобы использовать меньше памяти?

1 Ответ

0 голосов
/ 27 октября 2018

Посмотрите на ICustomerQuery

Вы можете получать данные с фильтрацией, например: фильтр диапазона имен (a-i, j-r than s-z), фильтр диапазона дат, имя начинается с фильтра и другие некоторые другие фильтры.

Также это можно использовать, чтобы получить только те вещи, которые вам нравятся: FullName и AccountNumber .

Таким образом, вы можете использовать меньше памяти. Посмотрите на приведенный ниже пример кода:

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);
    }

Далее вы можете обратиться к этому вопросу для алфавитного обозначения вещей.

...