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

Determine if a Customer in the CDC response has been Deleted

我们正在使用 .Net SDK for QuickBooks Online 的 IntuitCDCResponse class 来检索在指定时间段内发生更改的客户实体列表。

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

SDK中的docs say that when the entity has been deleted, the status of the entity is set to Deleted. We are assuming that this status is passed on to the status property of the Customerclass

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

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

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

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

This SO question 与此类似,也很有趣,但没有讨论如何 正确确定客户是否已被删除。

EntityStatusEnum Enumeration

EntityStatusEnum 不是真假值,它是一个枚举值 0-6。我建议将 customer.status 值更改为 int,其中 0-6 分别代表文档值。

编辑:

EntityStatusEnum.Deleted 将要 return 0

customer.status 将变为 return truefalse

这是我目前能想到的最好的解决方法

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 是我能找到的最接近此行为的文档。在 "To restore a customer" 部分下,它指出:

inactive customer will be noted as (deleted)