【问题标题】:updating field in a record in a not primary entity using plugin使用插件更新非主要实体中记录中的字段
【发布时间】:2018-05-25 22:44:01
【问题描述】:

我在为 Dynamics CRM 365 制作插件时遇到问题。 我有 2 个实体,帐户和网站,帐户实体有一个名为网站的文本字段和一个与网站实体相关的子网格。 我的任务是做一个插件,该插件在帐户表单中的子网格创建新网站实体后运行。该插件应将新创建的网站记录中的文本字段复制到帐户表单中的网站文本字段。

我将网站实体的插件注册为主要实体, 该代码读取了帐户的 guid 和新创建的网站中所需的文件,我的问题是我无法更新帐户中的网站字段。

我的代码:

var AccountId = entity.GetAttributeValue<EntityReference>("new_accountid");
var WebsiteDomain = entity.Attributes["new_url"].ToString();
   if (WebsiteDomain != null && WebsiteDomain != "" && AccountId != null && AccountId.Id!=null)
   {                    
      try
       {
          Entity obj = new Entity("account", new 
          Guid(AccountId.Id.ToString()));
          obj["websiteurl"] = WebsiteDomain;
          service.Update(obj);  
       }
       catch (Exception e)
       {                  
          throw;
       }
   }

到达更新语句时的错误: error

【问题讨论】:

  • 可能是 websiteurl 不是正确的架构名称。它应该像 new_ 或任何其他前缀一样开始..验证它..
  • 否,该字段的架构名称是 websiteurl
  • 在此代码中,字典中的键只能是 3. new_url new_accountid 或 websiteurl。可以通过调试来识别..你知道下一步该怎么做吗?

标签: c# plugins dynamics-crm dynamics-crm-365


【解决方案1】:

我忽略了它。

var WebsiteDomain = entity.Attributes["new_url"].ToString();

在上面这行中,您假设new_url 密钥将始终存在并转换.ToString()。这很容易出错,因为键可能是错误的,也可能为空。

如果没有 null 检查或验证 Attributes.Contains,请不要像这样使用属性键。

您至少可以安全地使用GetAttributeValue。阅读Tips

【讨论】:

  • 另一种方法是使用 POST 图像,以便 new_url 将始终存在于属性包中
猜你喜欢
  • 2023-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多