如何在crm插件中获取隐藏字段值?

时间:2015-11-21 05:19:22

标签: c#-4.0 dynamics-crm-2011 dynamics-crm

我有一个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;
}

3 个答案:

答案 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

伪代码:

  1. 使用.Contains()检查属性名称的Target属性集合。
  2. 如果为true,则从Target属性获取属性值,因为这是客户端刚刚提交的实际更改。
  3. 如果为false,请使用.Contains()检查属性名称的PreImage属性集合。
  4. 如果为true,则从PreImage获取属性值,因为这是数据库中的最新值。
  5. 希望有所帮助!

答案 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();