我有一个crm形式的隐藏字段,并使用JavaScript点击保存按钮点击隐藏字段的值。
我试图在postcaseCreate事件中的c#插件代码中选择隐藏的字段值,但是在字典错误中找不到Key,任何人都可以告诉我这里缺少的内容。
if (localContext.PluginExecutionContext.InputParameters.Contains("Target")
&& localContext.PluginExecutionContext.InputParameters["Target"] is Entity)
{
// Obtain the target entity from the input parmameters.
caseEntityObj = (Entity)localContext.PluginExecutionContext.InputParameters["Target"];
string productIds = caseEntityObj.FormattedValues["my_hiddenfiedld"].ToString();
if (caseEntityObj == null) return;
}
答案 0 :(得分:1)
尝试替换
string productIds = caseEntityObj.FormattedValues["my_hiddenfiedld"].ToString();
带行
string productIds = caseEntityObj["my_hiddenfiedld"].ToString();
为什么要使用FormattedValues?隐藏字段选项集?如果是,并且您需要获取相应的文本,则必须使用RetrieveAttribute消息检索属性并从响应中获取optionset的文本。
答案 1 :(得分:1)
"目标" input参数只包含提交给框架的属性。系统仅表示提交包含已更改数据(或不等于默认值)的属性作为优化。如果你创建了自己的客户端UpdateRequest或CreateRequest并且只提交了一些属性,那么你的插件的Target集合也只包含那些少数属性。
在您的情况下,我猜测您的隐藏字段在更新时没有变化,因此它不会包含在您的Target属性集合中。
如果您的插件逻辑始终需要知道字段的当前值,而不管它是否包含在提交的属性集合中,则需要注册PreImage。注册PreImage会告诉CRM您在此插件期间始终需要知道某个字段的当前值。这是在当前操作之前的字段的值。
PreImages上的文档:https://msdn.microsoft.com/en-us/library/gg309673.aspx#bkmk_preandpost
伪代码:
希望有所帮助!
答案 2 :(得分:0)
谢谢Josh,Andril,
我在插件代码中创建了两个步骤,如postCaseCreate,PostCaseupdate事件和一个postImage,然后我在postCase创建事件中得到如下值:
string productIds = caseEntityObj["my_hiddenfiedld"].ToString();
用于从图像获取值的更新。它工作正常。非常感谢你们。
Entity postImageEntity = (context.PostEntityImages != null && context.PostEntityImages.Contains(this.postImageAlias)) ? context.PostEntityImages[this.postImageAlias] : null;
productIds = postImageEntity.Attributes["my_hiddenproducts"].ToString();