当前位置: 首页 > 知识库问答 >
问题:

Crm到Azure ServiceBus事件接收器,找不到已更新的属性

吴西岭
2023-03-14

这是一个紧凑的版本,请询问您是否需要澄清:

我已经成功注册了一个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-或软件包属性中更改。我在哪里找到它?

共有3个答案

洪德寿
2023-03-14

从另一个论坛得到答案基本上,检查实体。属性数组(参见相关代码)。最后4个总是在更新时存在,第n个是被更改的属性的名称/新值。

步嘉德
2023-03-14

我已设法注册终结点,以便在Dynamics CRM Online中更新属性(例如电话号码)时将消息发送到Azure服务总线(主题和/或队列,此处没有区别)。我也有一个网站可以听这些变化

如果要检索WebJobs中已更新属性的消息实体的属性,可以尝试将其他自定义属性设置为BrokeredMessage对象,以指示当前消息实体的属性是否已更新。

BrokeredMessage message = new BrokeredMessage(mes);
message.Properties["isupdated"] = 1;

然后,您可以为主题订阅创建筛选器,以仅限制带有isupdated的消息

霍伟彦
2023-03-14

我尝试了复制你正在做的事情,因为我从来没有捕捉到更新,只是创建消息。

我捕获了发布的原始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的代码,因此我能够阅读收件箱中的所有电子邮件。请找到以下代码 现在,我希望添加一个侦听器,该侦听器可以在收件箱中收到新邮件时运行此代码。有人可以建议我如何做到这一点。