快捷搜索:  as  2018  FtCWSyGV  С˵  test  xxx  Ψһ  w3viyKQx

新葡新京论坛:【Microsoft Dynamics CRM 2011教程】35、获得Option Set的Label与Value示例



CRM中有一种Field的类型是Option Set。每一个option都是由一对 label + value组成的。比如我下面图中的Option Set,它的第一个option的Label是Logistic – Incorrect item,而它的value为267060000。

那么CRM SDK为我们供给了哪写措施可以得到一个Option Set 的Label和Value值呢?我在案例(incident)中创建了一个custom field aw_complaintcause,它是Option Set类型,而它所应用的Option Set即为上面图中创造的Case Option Set。

下面我分手演示一下在CRM的前端与后端若何得到Option Set 的Label 与 Value。

(一)前端

假如是应用JScript得到某个Option Set field的Label 或者 Value,比如在Form的OnLoad事故处置惩罚器中,可以用

得到 Label:

Xrm.Page.getAttribute(fieldname).getText();

得到 Value:

Xrm.Page.getAttribute(fieldname).getValue();

假如Option Set为Unassigned Value,上面措施得到Label为空字符””,Value值为null。

我们也可以遍历一个Option Set 的所有options:

var objControl = Xrm.Page.getControl(fieldname);

var objOptions = objControl.getAttribute().getOptions();

for (var i = 0; ialert(objOptions[i].text);

alert(objOptions[i].value);}

(二) 后端

运行在办事器上的代码(C#或者VB)该若何得到某个Option Set的Label或Value呢?

以插件(plugin)中的代码为例,得到Value很简单,可以应用

int optionValu新葡新京论坛e = ((OptionSetValue)entity[fieldname]).Value;

代码的片断如下所示:

if (context.MessageName == "Update")

{Entity entity = (Entity)context.InputParameters["Target"];

if (entity.Contains(fieldname) && entity[fieldname] != null){

int optionValue = ((新葡新京论坛OptionSetValue)entity[fieldname]).Value;}

}

假如Option Set为Unassigned Value,则entity[fieldname] 为 null。

要得到Label就不象用JScript那样简单了,我们首先要知道当前option的value值,然后发送一个RetrieveAttributeRequest,在RetrieveAttributeResponse中得到AttributeMetadata,然后遍历Option Set的每一个option,当某个option的Value值与我们的value相等时,返回该option的Label。可以应用下面的代码来得到Label

private string GetOptionLabel(IOrganizationService service, ITracingService tracingService, string entityname, string attributename, int value)

{

RetrieveAttributeRequest retrieveAttributeRequest =new RetrieveAttributeRequest

{EntityLogicalName = entityname,

LogicalName = attributename};

// Execute the request.

RetrieveAttributeResponse retrieveAttributeResponse = (RetrieveAttributeResponse)service.Execute(retrieveAttributeRequest);tracingService.Trace("Debug: Entity {0} Attribute {1} is retrieved", entityname, attributename);

OptionMetadataCollection options = ((PicklistAttributeMetadata)retrieveAttributeResponse.AttributeMetadata).新葡新京论坛OptionSet.Options;

OptionMetadata option = options.Where(x => x.Value == value).FirstOrDefault();

tracingService.Trace("Debug: Option of value {0} is retrieved", value);

if (option != null){

tracingService.Trace("Debug: option != null");return option.Label.UserLocalizedLabel.Label;

}else

{return "";

}}

上面的代码返回的是option.Label.UserLocalizedLabel.Label,也便是用户当前应用说话的Label(我在前面的文章中先容过 【Microsoft Dynamics CRM 2011教程】34、获适合前用户应用的界面说话示例 ),假如你想得到其他说话的Label,也可以应用下面的措施:

private string GetOptionLabel(IOrganizationService service, ITracingService tracingService, string entityname, string attri新葡新京论坛butename, int value, int languagecode)

{

RetrieveAttributeRequest retrieveAttributeRequest =new RetrieveAttributeRequest

{EntityLogicalName = entityname,

LogicalName = attributename};

// Execute the request.

RetrieveAttributeResponse retrieveAttributeResponse = (RetrieveAttributeResponse)service.Execute(retrieveAttributeRequest);tracingService.Trace("Debug: Entity {0} Attribute {1} is retrieved", entityname, attributename);

OptionMetadataCollection options = ((PicklistAttributeMetadata)retrieveAttributeResponse.AttributeMetadata).OptionSet.Options;

OptionMeta新葡新京论坛data option = options.Where(x => x.Value == value).FirstOrDefault();tracingService.Trace("Debug: Option of value {0} is retrieved", value);

if (option != null)

{tracingService.Trace("Debug: option != null");

var label = option.Label.LocalizedLabels.Where(x => x.LanguageCode == languagecode).FirstOrDefault();

tracingService.Trace("Debug: Label of language {0} is retrieved", languagecode);

if (label != null){

tracingService.Trace("Debug: label != null");return label.Label;

}}

return "";

}

这种措施必要对option.Label.LocalizedLabels进行遍历,得到某种说话的Label。

总结:在前端使用JScript得到某Option Set field的Label或Value很简单,只必要分手应用Xrm.Page.getAttribute(fieldname).getText()和Xrm.Page.getAttribute(fieldname).getValue()。在后端得到Value很轻易,由于value值已经包孕在OptionSetValue中了,但要得到Label,必要先得到该field的AttributeMetadata,然后对每个option遍历,找到value值相同的option,再返回该option的label。

转自:http://www.cnblogs.com/jfzhu/archive/2012/12/11/2813712.html

您可能还会对下面的文章感兴趣: