确定CDC响应中的客户是否已被删除

时间:2017-07-18 19:32:15

标签: c# intuit-partner-platform quickbooks-online

我们正在使用.Net SDK for QuickBooks Online的IntuitCDCResponse类来检索在指定时间段内已更改的客户权限列表。

目前,我们能够检索已更改客户的列表并迭代列表。从这一点开始,如何判断客户是否已在QuickBooks Online中删除?

docs表示当实体被删除后,实体的status将设置为Deleted。我们假设此状态已传递到SDK中Customer类的status属性。

以下是我们当前尝试用来确定客户是否已被删除的代码。

if (customer.statusSpecified && customer.status == EntityStatusEnum.Deleted)
{
    // handle deletion event locally
}

实际上,所有Customer对象的statusSpecified值始终为false,status值始终为EntityStatusEnum.Deleted,无论是否实际情况如此。我们已多次测试已更新,创建和/或删除的客户。

我们确实尝试在SDK source code中搜索有关如何初始化Customer类的提示,但是看起来Intuit.IPP.Data命名空间在源代码中不可用。

This SO question类似且有一些兴趣,但没有讨论 如何正确判断客户是否已被删除。

2 个答案:

答案 0 :(得分:0)

EntityStatusEnum Enumeration

EntityStatusEnum不是true或false值,它是枚举值0-6。我建议将customer.status值更改为int,其中0-6分别表示文档值。

编辑:

EntityStatusEnum.Deleted将返回0

customer.status将返回truefalse

答案 1 :(得分:0)

这是我现在能想到的最好的解决方法

if ( (customer.statusSpecified && customer.status == EntityStatusEnum.Deleted)
    || customer.DisplayName.Contains("(deleted)") )
{
    // handle deletion event locally
}

或者,如果你更愿意完全放弃希望能够以正确的方式确定删除状态......

if ( customer.DisplayName.Contains("(deleted)") )
{
    // handle deletion event locally
}

当您将客户标记为非活动时,QuickBooks Online会将“(已删除)”一词附加到“显示名称”的末尾。这个QuickBooks Help article是我能记录下这种行为的最接近的。在“恢复客户”部分下,它声明:

  

非活动客户将被注明为(已删除)