Dynamics crm 2011 如何在Dynamics CRM Online中更新已部署的插件

Dynamics crm 2011 如何在Dynamics CRM Online中更新已部署的插件,dynamics-crm-2011,Dynamics Crm 2011,我是Dynamics CRM Online编程新手,更新已部署的插件时遇到问题。我正在使用Visual Studio 2012作为我的IDE。我部署了一个需要修改的插件,当我重新部署它时,CRM中的修改日期是正确的,但更改不存在。这是我的密码 if(context.InputParameters.Contains(“目标”) &&context.InputParameters[“Target”]是实体) { 实体=(实体)上下文。输入参数[“目标”]; 如果(entity.LogicalName

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

if(context.InputParameters.Contains(“目标”)
&&context.InputParameters[“Target”]是实体)
{
实体=(实体)上下文。输入参数[“目标”];
如果(entity.LogicalName==“lead”)
{
if(entity.Attributes.Contains(“companyname”)==true)
{
if(实体[“firstname”].ToString()!=“null”)
firstName=实体[“firstName”]。ToString();
其他的
firstName=“”;
if(实体[“lastname”].ToString()!=“null”)
lastName=实体[“lastName”].ToString();
其他的
lastName=“”;
实体[“companyName”]=“这是一个测试”;
//实体[“公司名称”]=firstName+“”+lastName;
}
其他的
抛出新的InvalidPlugineExecutionException(
“公司名称只能由系统设置。”);
}
}
当我创建潜在客户时,公司名称不是“这是一个测试”。我不确定我做错了什么


谢谢你的帮助

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

if(entity.Attributes.Contains(“companyname”)==true)
但你写信给另一个人,即:

entity[“companyName”]=“这是一个测试”;
该值放在实体中,但由于元数据中没有对应项,因此不会存储该值。将字段名设置为它的to schema name,即小写


如果你有额外的错误,还有一些其他的事情要考虑。

  • 设置字段值后,需要对服务调用Update方法
  • 该字段应该有某种前缀(例如new_某物、beep_某物)
  • 驼峰式大小写在这里不适用(模式名为),所以请使用alltolowercase
你得到的公司名称是什么?您是否得到正在抛出的异常


另外,还有一些关于代码质量的指针。我重新构建了逻辑,以消除作用域不必要的复杂性。我删除了多余的else语句,并将其与true进行了比较。我还建议您将流程分为不同的方法,但我相信您已经涵盖了这一点。您可能需要使用辅助方法从字段中获取值。看

if(!context.InputParameters.Contains)(“目标”)||
context.InputParameters[“Target”]是实体)
返回;
实体实体=上下文。输入参数[“目标”]作为实体;
if(entity.LogicalName!=“lead”)
返回;
如果(!entity.Attributes.Contains(“companyname”))
抛出新的InvalidPlugineExecutionException(
“公司名称只能由系统设置。”);
String firstName=String.Empty;
if(实体包含(“名字”))
firstName=实体[“firstName”]作为字符串;
String lastName=String.Empty;
if(entity.Contains(“lastname”))
lastName=实体[“lastName”]作为字符串;
实体[“companyname”]=“这是一个测试”;
//实体[“公司名称”]=firstName+“”+lastName;
编辑:

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

技术技巧

  • 发布所有定制(我经常这样做,以防万一)
  • 按F5重新加载
  • 登录/注销
  • 重新启动IIS(如果在本地)
  • 注销插件,查看行为是否仍然存在然后重新注册
  • 检查是否有忘记的工作流正在运行
  • 可能会有一些延迟和滞后。有一次,根据我是从“设置”还是从“工作场所”创建的记录,我实际上触发了插件的旧版本和新版本。这很奇怪,但几个小时后就自行解决了。真的那太奇怪了

    编程技巧

  • 检查是否有您可能忘记停用的其他插件
  • 移除所有引线,并确保插件在创建新引线时启动
  • 将文本更改为“我是一只巨大的驼鹿”,以确保更改顺利进行
  • 删除所有代码(或将return放在Execute的开头),然后一步一步地向下移动,以检测奇怪的开始
  • 在你展示的内容中,它应该起作用,所以要么你没有提到相关的东西(当然,我们感谢你没有发布100000行代码),要么是CRM让人感到奇怪(这同样令人恼火和困惑)。所以,让我们来解决这个问题。当你尝试上述技巧时会发生什么


    至于代码存根,是的-我对微软在这方面的努力不太自豪。试着把代码贴在程序员的标签C#下进行代码审查。为愤怒的讨论做好准备。:)

    谢谢你的回复。我更改了属性名,因为这是一个输入错误,但没有造成任何区别。如果你看注释掉的语句,如果我更改姓氏,我得到的是“null lastname”。我试图做的更改是消除“null”(名字是空的)。我希望创建潜在客户的人能够更新该实例。@Gary您很快就要成功了。检查我的编辑。我的错-我实际上也重复了你的打字错误。:)您消除的大部分内容都是VisualStudio创建的存根,很高兴看到另一种方法,但它没有改变任何东西。我仍然以“null lastname”而不是“This is a test”结束。在重新部署插件后,您必须发布表单吗?谢谢,现在我们有进展了。我希望您测试以下内容,以缩小问题的根本原因。(见回复中我的编辑…)