Как запросить список клиентов, детализированный с торговым представителем и уровнем цен в Quickbook SDK

Моя цель очень проста: попытаться получить все детали клиентов, в том числе данные о продажах и уровень цен.

Я создаю новый класс клиентов, как это.

public class Customer
{
    public string Name { get; set; }
    public string FullName { get; set; }
    public bool IsActive { get; set; }
    public string SalesRep { get; set; }
    public string PriceLevel { get; set; }
}

И это основной код

https://gist.github.com/anonymous/3968904d2d0fc492ed176c40465313b6

private void button1_Click(object sender, EventArgs e)
    {

        QBSessionManager sessionManager = null;
        try
        {
            sessionManager = new QBSessionManager();
            IMsgSetRequest requestMsgSet = sessionManager.CreateMsgSetRequest("US", 13, 0);
            requestMsgSet.Attributes.OnError = ENRqOnError.roeContinue;

            sessionManager.OpenConnection("", "Quickbooks SDK Demo Test");
            sessionManager.BeginSession("", ENOpenMode.omDontCare);

            ICustomerQuery customerQueryRq = requestMsgSet.AppendCustomerQueryRq();

            customerQueryRq.ORCustomerListQuery.CustomerListFilter.ActiveStatus.SetValue(ENActiveStatus.asAll);

            IMsgSetResponse responseMsgSet = sessionManager.DoRequests(requestMsgSet);

            sessionManager.EndSession();
            sessionManager.CloseConnection();

            IResponse response = responseMsgSet.ResponseList.GetAt(0);
            ICustomerRetList customerRetList = (ICustomerRetList)response.Detail;


            List<Customer> customers = new List<Customer>();


            if (customerRetList != null)
            {
                for (int i = 0; i < customerRetList.Count; i++)
                {
                    ICustomerRet customerRet = customerRetList.GetAt(i);

                    Customer customer = new Customer();
                    {
                        customer.Name = customerRet.Name.GetValue();
                        customer.FullName = customerRet.FullName.GetValue();
                        customer.IsActive = customerRet.IsActive.GetValue();
                        customer.PriceLevel = customerRet.PriceLevelRef.FullName.GetValue();
                        customer.SalesRep = customerRet.SalesRepRef.FullName.GetValue();
                    }
                    customers.Add(customer);
                }
            }

            dataGridView1.DataSource = customers;

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }

        finally
        {
            sessionManager.EndSession();
            sessionManager.CloseConnection();
        }
    }

Когда я запускаю программу, я получаю сообщение об ошибке: "Ссылка на объект не установлена ​​для экземпляра объекта". Я знаю, что что-то не так с SalesRep и PriceLevel, поскольку это ссылки на объекты, но я не знаю, как это исправить.

Пожалуйста помоги.

Спасибо

1 ответ

Решение

Эти поля:

customer.PriceLevel = customerRet.PriceLevelRef.FullName.GetValue();
customer.SalesRep = customerRet.SalesRepRef.FullName.GetValue();

Не всегда существует. Вы не можете предположить, что SalesRepRef или же PriceLevelRef существует для каждого клиента. У некоторых клиентов не будет торгового представителя или пользовательский уровень цен.

Итак, проверьте, чтобы убедиться, что это не NULL или каким-либо иным образом сбрасывается, прежде чем пытаться получить их значение.

Другие вопросы по тегам