我是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.");
}
}
当我创建一个主管时,公司名称不是“这是一个测试”。我不确定我做错了什么。
感谢您的帮助!
答案 0 :(得分:3)
您可以通过以下方式检测公司名称字段是否存在:
if (entity.Attributes.Contains("companyname") == true)
但你写信给另一个人,即:
entity["companyName"] = "This is a test";
该值放在实体中,但由于元数据中没有对应的值,因此不会存储它。将字段名称设置为模式名称,即下限。
如果您遇到其他错误,还需要考虑其他一些事项。
您获得的做作为公司名称?你是否被抛出异常?
另外,关于代码质量的一些指示。我重建了逻辑以消除不必要的范围复杂性。我删除了多余的 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;
编辑:
如果仍未收到请求的行为,请尝试以下操作。 (我不确定你的专业知识水平如此,如果你觉得我曾经侮辱了你已经尝试过很多次的非常基本的东西,请接受我的道歉。)
技术诀窍。
可能存在一些延迟和滞后。有一次,我实际上已经触发了旧版本和新版本的插件,这取决于我是否从设置或 Workplace 创建了一条记录。这很奇怪,但几个小时后就解决了。认真。 那很奇怪!
程序化技巧。
你所展示的内容应该有效,所以要么你没有提到相关的东西(我们做赞赏你当然没有发布100000行代码)或者它是CRM这是关闭(这同样令人讨厌和混乱)。所以,让我们麻烦拍摄这件事。当你尝试上面的技巧时会发生什么?
关于代码存根,是的 - 我对MS的努力并不感到自豪。尝试在 Programmers 上的标记C#下发布该代码以进行代码审查。为愤怒的讨论做好准备。 :)