我正在做一个简单的查询linq来从optionSet中检索标签。看起来缺少选项集的格式化值。有人知道为什么没有生成?
最好的问候
答案 0 :(得分:2)
对于不清楚的帖子抱歉。我发现了这个问题,以及缺少密钥作为formattedvalue的原因。
问题在于您检索属性的方式。有了这个查询:
var invoiceDetails = from d in xrmService.InvoiceSet
where d.InvoiceId.Value.Equals(invId)
select new
{
name = d.Name,
paymenttermscode = d.PaymentTermsCode
}
我正在检索选项集的正确int值,但我需要的只是文本。我用这种方式更改了查询:
var invoiceDetails = from d in xrmService.InvoiceSet
where d.InvoiceId.Value.Equals(invId)
select new
{
name = d.Name,
paymenttermscode = d.FormattedValues["paymenttermscode"]
}
在这种情况下,我收到一条错误消息,指出密钥不存在。经过多次尝试,我试图传递键值和选项集文本,并且该尝试工作得很好。
var invoiceDetails = from d in xrmService.InvoiceSet
where d.InvoiceId.Value.Equals(invId)
select new
{
name = d.Name,
paymenttermscode = d.PaymentTermsCode,
paymenttermscodeValue = d.FormattedValues["paymenttermscode"]
}
我的猜测是,要检索与该选项集关联的正确文本,在该特定实体中,您还需要检索int值。 我希望这会有所帮助。
最好的问候
答案 1 :(得分:0)
由于一些原因,你的问题相当混乱。当你说你试图从OptionSet
"检索标签时,我会假设你的意思。是因为您试图获取特定OptionSetValue
的文本值,并且您没有直接查询OptionSetMetadata
以检索实际的LocalizedLabels
文本值。我还假设"选项集的格式化值缺失"是指FormattedValues
集合。如果这些假设是正确的,我建议您:CRM 2011 - Retrieving FormattedValues from joined entity
答案 2 :(得分:-1)
必须查询选项集元数据。
这是我写的扩展方法:
public static class OrganizationServiceHelper
{
public static string GetOptionSetLabel(this IOrganizationService service, string optionSetName, int optionSetValue)
{
RetrieveOptionSetRequest retrieve = new RetrieveOptionSetRequest
{
Name = optionSetName
};
try
{
RetrieveOptionSetResponse response = (RetrieveOptionSetResponse)service.Execute(retrieve);
OptionSetMetadata metaData = (OptionSetMetadata)response.OptionSetMetadata;
return metaData.Options
.Where(o => o.Value == optionSetValue)
.Select(o => o.Label.UserLocalizedLabel.Label)
.FirstOrDefault();
}
catch { }
return null;
}
}
RetrieveOptionSetRequest和RetrieveOptionSetResponse位于Microsoft.Xrm.Sdk.Messages上。
这样称呼:
string label = service.GetOptionSetLabel("wim_continent", 102730000);
如果您要多次查询相同的选项集,我建议您编写一个返回OptionSetMetadata而不是标签的方法;然后在本地查询OptionSetMetadata。多次调用上述扩展方法将导致反复执行相同的查询。