Quickbook SDK中如何查询详细的销售代表和价格水平的客户名单
How to query customer list detailed with sales rep and price level in Quickbook SDK
我的目标很基本:尝试获取所有客户的详细信息,包括销售代表和价格水平。
我这样创建了一个新客户class。
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#file-gistfile1-txt
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();
}
}
当我运行这个程序的时候,我得到一个错误:
"Object Reference not set to an instance of an object"
我知道 SalesRep 和 PriceLevel 有问题,因为它们是对象引用,但我不知道如何修复它。
请帮忙。
谢谢
这些字段:
customer.PriceLevel = customerRet.PriceLevelRef.FullName.GetValue();
customer.SalesRep = customerRet.SalesRepRef.FullName.GetValue();
不会一直存在。您不能假设每个客户都存在 SalesRepRef
或 PriceLevelRef
。有些客户没有销售代表,或者没有自定义价格水平。
因此,在尝试获取它们的值之前,请测试以确保它们没有 NULL
或以其他方式未设置。
我的目标很基本:尝试获取所有客户的详细信息,包括销售代表和价格水平。
我这样创建了一个新客户class。
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#file-gistfile1-txt
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();
}
}
当我运行这个程序的时候,我得到一个错误: "Object Reference not set to an instance of an object" 我知道 SalesRep 和 PriceLevel 有问题,因为它们是对象引用,但我不知道如何修复它。
请帮忙。
谢谢
这些字段:
customer.PriceLevel = customerRet.PriceLevelRef.FullName.GetValue();
customer.SalesRep = customerRet.SalesRepRef.FullName.GetValue();
不会一直存在。您不能假设每个客户都存在 SalesRepRef
或 PriceLevelRef
。有些客户没有销售代表,或者没有自定义价格水平。
因此,在尝试获取它们的值之前,请测试以确保它们没有 NULL
或以其他方式未设置。