这是一个紧凑版本,请询问您是否需要澄清:
我已设法注册一个端点,以便在我更新Dynamics CRM Online中的属性(例如电话号码)时,会向Azure Service Bus发送一条消息(主题和/或队列,此处没有区别)。我还有一个webjob,使用下面的签名来监听这些变化:
public static void ProcessTopicMessage([ServiceBusTrigger("my-crm-topic", "topic-subscription1" )] BrokeredMessage pQueueItem, TextWriter log)
{
RemoteExecutionContext package = pQueueItem.GetBody<RemoteExecutionContext>();
if(package.MessageName == "Update")
{
Entity entity = pPackage.InputParameters["Target"] as Entity;
var newPhone = entity.GetAttributeValue<string("telephone1");
}
}
这项工作正常,当我更改电话号码时,我可以阅读新的电话号码,所有其他属性都为空。但是,我无法找到有关已更改的属性/属性的名称/ ID的任何信息(除非它们不为空)。
我可以循环遍历所有属性名称并对此感到满意,但主要问题是无法知道该属性是否从其他内容设置为null。
我找不到任何关于pQueueItem或package-properties中已更改的电话号码的指示。我在哪里找到它?
答案 0 :(得分:1)
我尝试复制你正在做的事情,因为我从未捕获过更新,只是创建消息。
我捕获了原始JSON,并且当我将联系人电话号码添加到以前空白字段中时,我只会看到新值,而且该消息仅包含更新后的字段。没有其他事情发生。
当我删除该值时,我基本上得到相同的JSON。只有具有新值&#34;&#34;的更改字段或空字符串。似乎也有同样的规则。
见下面的Telephone1。根据这个实验,你可以像你说的那样遍历属性......如果它在那里,它已经被改为现场的当前值。
谢谢, 乔。
"InputParameters": [
{
"key": "Target",
"value": {
"__type": "Entity:http:\/\/schemas.microsoft.com\/xrm\/2011\/Contracts",
"Attributes": [
{
"key": "telephone1",
"value": ""
},
{
"key": "contactid",
"value": "c50fe891-a0f0-e611-8120-c4346b"
},
{
"key": "modifiedon",
"value": "\/Date(1487772895000)\/"
},
{
"key": "modifiedby",
"value": {
"__type": "EntityReference:http:\/\/schemas.microsoft.com\/xrm\/2011\/Contracts",
"Id": "6343f538-cde0-48ba-b249-b67ec24e765a",
"KeyAttributes": [
],
"LogicalName": "systemuser",
"Name": null,
"RowVersion": null
}
},
{
"key": "modifiedonbehalfby",
"value": null
}
],
"EntityState": null,
"FormattedValues": [
],
"Id": "c50fe891-a0f0-e611-8120-c4346bb5984c",
"KeyAttributes": [
],
"LogicalName": "contact",
"RelatedEntities": [
],
"RowVersion": null
}
}
答案 1 :(得分:0)
我已设法注册一个端点,以便在我更新Dynamics CRM Online中的属性(例如电话号码)时,会向Azure Service Bus发送一条消息(主题和/或队列,此处没有区别)。我还有一个听取这些变化的webjob
如果您想要检索WebJobs中已更新属性的消息实体的属性,您可以尝试将其他自定义属性设置为BrokeredMessage对象,以指示当前消息实体的属性是否已更新。
BrokeredMessage message = new BrokeredMessage(mes);
message.Properties["isupdated"] = 1;
然后您可以create filter for your topic subscription仅限制带有isupdated > 0
的邮件可以传递到此主题订阅的虚拟队列。通过这种方式,您可以创建一个WebJob来处理传递给此特定主题订阅的消息,以处理更新的消息实体。
答案 2 :(得分:0)
得到答案from another forum 基本上,检查entity.Attributes-array(参见相关代码)。最后4个总是在更新时,n首先是已更改的属性的名称/新值。