【问题标题】:How to check if a customer exists before adding them through the QuickBooks Online API?如何在通过 QuickBooks Online API 添加客户之前检查客户是否存在?
【发布时间】:2015-09-09 20:27:27
【问题描述】:

我已通过 Oauth 和“IPP .NET SDK for QuickBooks V3”NuGet 包成功地将我的 ASP.NET MVC5 C# 项目连接到 QuickBooks Online。

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

我的问题是,在尝试添加客户之前检查客户是否已存在于 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");
}

【问题讨论】:

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


    【解决方案1】:

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

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

    根据文档:

    您的代码应如下所示:

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

    您可以参考对象引用以查看您可以过滤哪些字段:

    【讨论】:

    • 我所追求的是如何使用 QuickBooks API 进行查询的细节。我知道我需要做什么,但我不知道如何使用 asp.net C# 来做。搜索的名称或电子邮件对我来说没问题,我只是找不到如何做的文档。
    • 我为你添加了一个代码示例和一些额外的链接。
    • 谢谢,这正是我所需要的!我已经通过那些直觉的开发人员文档试图找到解决方案几个小时。不知道你是怎么发现的:)。我会用我实现的代码更新我的问题,以防其他人有同样的问题。
    • @RobertM。幸运的是,有一个叫做 Google 的东西可以让我们搜索并找到新的链接。 :-P 我已经更新了它们!干杯!
    • @KeithPalmerJr。快速提问,您的联系表格在网站上是否可用?几个月来一直在尝试与您联系,了解您拥有的 OpenCart 解决方案...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-05
    • 2011-05-15
    相关资源
    最近更新 更多