如何在通过QuickBooks Online API添加客户之前检查客户是否存在?

时间:2015-09-09 20:27:27

标签: c# asp.net asp.net-mvc quickbooks quickbooks-online

我已成功通过Oauth将我的ASP.NET MVC5 C#项目连接到QuickBooks Online,以及“用于QuickBooks V3的IPP .NET SDK”NuGet包。

我可以添加新客户,一切正常。但是,如果我尝试添加已存在的客户,则会抛出以下错误:“抛出ValidationException”。

我的问题是,在尝试添加客户之前,检查客户是否已经存在于QuickBooks中的最佳方法是什么,以避免异常?

这是我将新客户添加到QuickBooks的代码:

OAuthRequestValidator oauthValidator = new OAuthRequestValidator(accessToken, accessTokenSecret, consumerKey, consumerSecret);
ServiceContext context = new ServiceContext(realmId, intuitServicesType, oauthValidator);
DataService dataService = new DataService(context);

var customer = new Customer();

customer.GivenName = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(submission.FirstName.ToLower());
customer.FamilyName = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(submission.LastName.ToLower());
customer.BillAddr = new PhysicalAddress()
{
    Line1 = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(submission.Address.ToLower()),
    City = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(submission.City.ToLower()),
    CountrySubDivisionCode = submission.State,
    PostalCode = submission.ZipCode
};

customer.PrimaryEmailAddr = new EmailAddress() { Address = submission.EmailAddress.ToLower(), Default = true };
customer.PrimaryPhone = new TelephoneNumber() { FreeFormNumber = submission.Phone };

dataService.Add(customer);

编辑使用@Keith Palmer的答案添加我的解决方案

OAuthRequestValidator oauthValidator = new OAuthRequestValidator(accessToken, accessTokenSecret, consumerKey, consumerSecret);
ServiceContext context = new ServiceContext(realmId, intuitServicesType, oauthValidator);

// Check if the customer already exists in QuickBooks
QueryService<Customer> customerQueryService = new QueryService<Customer>(context);
int customerCount = customerQueryService.Where(c => c.GivenName == submission.FirstName && c.FamilyName == submission.LastName).Count();
if (customerCount == 0)
{
    // If not, then add the new customer.
    DataService dataService = new DataService(context);

    var customer = new Customer();

    customer.GivenName = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(submission.FirstName.ToLower());
    customer.FamilyName = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(submission.LastName.ToLower());
    customer.BillAddr = new PhysicalAddress()
    {
        Line1 = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(submission.Address.ToLower()),
        City = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(submission.City.ToLower()),
        CountrySubDivisionCode = submission.State,
        PostalCode = submission.ZipCode
    };
    customer.PrimaryEmailAddr = new EmailAddress() { Address = submission.EmailAddress.ToLower(), Default = true };
    customer.PrimaryPhone = new TelephoneNumber() { FreeFormNumber = submission.Phone };

    dataService.Add(customer);
}
else
{
    TempData["Warning"] = "The customer already exists in QuickBooks.";
    return RedirectToAction("Estimates", "Admin");
}

1 个答案:

答案 0 :(得分:1)

在添加客户之前查询客户是否存在。

您查询的内容(名称,电子邮件等)取决于您希望如何实施应用程序/客户需要的内容。

根据文档:

您的代码应如下所示:

  

IEnumerable customers = invoiceQueryService.Where(c =&gt; c.Balance&gt; 1000);

您可以参考对象参考以查看可以过滤的字段: