这是一个紧凑的版本,请询问您是否需要澄清:
我已经成功注册了一个endpoint,这样当我在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)。
我可以循环使用所有属性名称,并对此感到满意,但主要问题是,无法知道该属性是否从其他属性设置回null。
我找不到任何迹象表明其电话号码已在PQUEITEM-或软件包属性中更改。我在哪里找到它?
从另一个论坛得到答案基本上,检查实体。属性数组(参见相关代码)。最后4个总是在更新时存在,第n个是被更改的属性的名称/新值。
我已设法注册终结点,以便在Dynamics CRM Online中更新属性(例如电话号码)时将消息发送到Azure服务总线(主题和/或队列,此处没有区别)。我也有一个网站可以听这些变化
如果要检索WebJobs中已更新属性的消息实体的属性,可以尝试将其他自定义属性设置为BrokeredMessage对象,以指示当前消息实体的属性是否已更新。
BrokeredMessage message = new BrokeredMessage(mes);
message.Properties["isupdated"] = 1;
然后,您可以为主题订阅创建筛选器,以仅限制带有isupdated的消息
我尝试了复制你正在做的事情,因为我从来没有捕捉到更新,只是创建消息。
我捕获了发布的原始JSON,正如您所说,当我将电话号码添加到以前空白的联系人字段时,我只看到新的值,消息只包括更新的字段。没有其他的东西。
当我删除这个值时,我基本上得到了相同的JSON。只有新值为""或空字符串的更改字段。同样的规则似乎也适用。
见下面的电话1。基于这个实验,您可以按照您所说的循环遍历属性...如果它在那里,它已经被更改为字段中的当前值。
谢了Joe
"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
}
}
我在RU11上运行CRM2011。我将其更新为RU14,但当我从部署管理器浏览组织时,我得到以下错误: 发生了一个错误。
问题内容: 我正在编写一个使用Jacob库(桥接COM和Java)与Microsoft Outlook进行交互的Java程序。该程序创建一个新的MailItem,向用户显示其Inspector窗口。我希望订阅检查器的Close事件,以了解用户何时完成其邮件项目的编辑。 要订阅的情况下,我跟着指示雅各的文档(约2 / 3下页): 当前的[event]模型在概念上类似于Visual Basic 构造。
我正在学习GCM(谷歌云消息传递,旧的不建议使用的名称是C2DM)。我使用不同的设备。操作运行良好,即使应用程序关闭。但是在nexus平板电脑上,当应用程序关闭时会发生错误。如果应用程序正在进行,我的GCM代码在我尝试的所有设备上都能工作。现在:我寻找这些问题,我发现有其他的错误清单。如果我的清单是错误的,为什么除了nexus平板电脑以外的其他设备都正确执行我的代码?我可以认为我的清单是错误的吗?
问题内容: 干得好,现在我只想知道为什么如果我将while循环中的System.out.println指令添加到while循环中,则同时在Gui中的cmd和Pgbar上都显示了进度?: 需要一些帮助,我无法获取JProgressBar进行更新,我无法使用SwingWorker,我必须解决这个问题。变量Path.operationProgress是来自“ Path”类实例的静态变量,它是从另一个线程
当被监控目录中的文件的ReadOnly属性更改时,FileSystemMonitor似乎没有触发“更改”事件(没有其他事件)。 这是我的测试代码: 使用该代码,我接收到很多“更改”事件,例如,如果修改时间戳已更改,但如果我更改任何标准属性(如ReadOnly或Hidden),则不会。 我错过了什么,还是我击中了一个“特征”?
我已将邮箱从交换服务器迁移到 Office 365。 我已经编写了使用凭据连接到Office 365的代码,因此我能够阅读收件箱中的所有电子邮件。请找到以下代码 现在,我希望添加一个侦听器,该侦听器可以在收件箱中收到新邮件时运行此代码。有人可以建议我如何做到这一点。