【问题标题】:How to update a deployed plugin in Dynamics CRM Online如何更新 Dynamics CRM Online 中已部署的插件
【发布时间】:2013-02-28 04:28:50
【问题描述】:

我是 Dynamics CRM Online 编程的新手,在更新已部署的插件时遇到问题。我使用 Visual Studio 2012 作为我的 IDE。我部署了一个需要修改的插件,当我通过 VS 重新部署它时,CRM 中的修改日期是正确的,但更改不存在。这是我的代码..

if (context.InputParameters.Contains("Target") 
  && context.InputParameters["Target"] is Entity)
{
  Entity entity = (Entity)context.InputParameters["Target"];
  if (entity.LogicalName == "lead")
  {
    if (entity.Attributes.Contains("companyname") == true)
    {
      if (entity["firstname"].ToString() != "null")
        firstName = entity["firstname"].ToString();
      else
        firstName = "";

      if (entity["lastname"].ToString() != "null")
        lastName = entity["lastName"].ToString();
      else
        lastName = "";

      entity["companyName"] = "This is a test";
      //entity["companyname"] = firstName + " " + lastName;
    }
    else
      throw new InvalidPluginExecutionException(
        "The company name can only be set by the system.");
  }
}

当我创建潜在客户时,公司名称不是“这是一个测试”。我不确定我做错了什么。

感谢您的帮助!

【问题讨论】:

    标签: dynamics-crm-2011


    【解决方案1】:

    您通过以下方式检测带有公司名称的字段是否存在:

    if (entity.Attributes.Contains("companyname") == true)
    

    但你写信给另一个人,即:

    entity["companyName"] = "This is a test";
    

    该值已放入实体中,但由于它在元数据中没有对应项,因此没有被存储。将字段名称设置为模式名称,即小写。


    如果您遇到其他错误,还需要考虑其他一些事项。

    • 设置字段值后,您需要在服务上调用 Update 方法。
    • 该字段应具有某种前缀(例如 new_somethingbeep_something)。
    • 这里不适用驼峰式大小写(schema name is),所以改为alltolowercase

    公司名称做什么?你得到了抛出的异常吗?


    此外,还有一些关于代码质量的提示。我已经重建了逻辑以消除不必要的范围复杂性。我删除了多余的 else 语句和与 true 的比较。我还建议您将流程拆分为不同的方法,但我相信您已经掌握了这一点。您可能希望使用辅助方法从字段中获取值。见in this post at my suggestion

    if (!context.InputParameters.Contains("Target") ||
      context.InputParameters["Target"] is Entity)
      return;
    
    Entity entity = context.InputParameters["Target"] as Entity;
    if (entity.LogicalName != "lead")
      return;
    if (!entity.Attributes.Contains("companyname"))
      throw new InvalidPluginExecutionException(
        "The company name can only be set by the system.");
    
    String firstName = String.Empty;
    if (entity.Contains("firstname"))
      firstName = entity["firstname"] as String;
    
    String lastName = String.Empty;
    if (entity.Contains("lastname"))
      lastName = entity["lastname"] as String;
    
    entity["companyname"] = "This is a test";
    //entity["companyname"] = firstName + " " + lastName;
    

    编辑:

    如果您仍然没有得到请求的行为,请尝试以下操作。 (我不确定你的专业水平如何,如果你因为我提到一些你已经尝试过无数次的非常基本的东西而感到侮辱,请接受我的道歉。)

    技术技巧。

    1. 发布所有自定义项(我经常非常这样做,以防万一)。
    2. F5 重新加载。
    3. 登录/注销。
    4. 重启 IIS(如果在本地)。
    5. 取消注册插件,看看行为是否仍然存在。 然后重新注册。
    6. 检查被遗忘的工作流是否正在运行。

    可能会有一些延迟和滞后。有一次,我实际上同时触发了旧版本和新版本的插件,这取决于我是从 Settings 还是 Workplace 创建了一条记录。这很奇怪,但几个小时后就自行解决了。严重地。 很奇怪!

    程序化技巧。

    1. 检查是否还有其他您可能忘记停用的插件。
    2. 删除所有线索并确保插件在创建新线索时触发。
    3. 将文本更改为例如我是一只巨大的驼鹿,只是为了确保改变能够通过。
    4. 删除所有代码(或将 return 放在 Execute 的开头。然后,将其逐步向下移动以检测怪异何时开始。

    在您展示的内容中,它应该可以工作,因此要么您没有提及相关的内容(我们确实感谢您没有发布 100000 行代码,当然)或者它是 CRM这很奇怪(这同样令人讨厌和困惑)。所以,让我们解决这个问题。当您尝试上述技巧时会发生什么?

    至于代码存根,是的——我对微软在那里的努力并不感到太自豪。尝试在 Programmers 上的 C# 标签下发布该代码以进行代码审查。为愤怒的讨论做好准备。 :)

    【讨论】:

    • 感谢您的回复。我更改了属性名称,因为它是一个错字,但它没有任何区别。如果您查看注释掉的语句,如果我更改姓氏,我得到的是“null lastname”。我试图做出的改变是消除“空”(名字是空的)。我希望创建潜在客户的人能够更新实例。
    • @Gary 你很快就会走向成功。检查我的编辑。我的错 - 我实际上也重复了你的错字。 :)
    • 您消除的大部分内容是 Visual Studio 创建的存根,很高兴看到另一种方法,但它并没有改变任何东西。我仍然以“null lastname”而不是“This is a test”结束
    • 重新部署插件后是否需要发布表单?谢谢
    • 好的,现在我们到了某个地方。我希望您测试以下内容以缩小问题的根本原因。 (请参阅我在回复中的编辑...)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-22
    • 2017-07-05
    • 1970-01-01
    • 2021-06-30
    • 1970-01-01
    • 2011-06-19
    • 1970-01-01
    相关资源
    最近更新 更多