【问题标题】:Query Expression by CRM Drop Down List value按 CRM 下拉列表值查询表达式
【发布时间】:2013-04-03 18:13:00
【问题描述】:

在 MS CRM 4 中,我使用 c# 尝试查询选项列表字段等于“否”的所有帐户。我知道选项列表包含每个项目的 id 和值,但我只想查询值。

这是我目前的代码:

ConditionExpression serviceContractCondition = new ConditionExpression();
        serviceContractCondition.AttributeName = "kez_servicecontracttype"; 
        serviceContractCondition.Operator = ConditionOperator.Equal; 
        serviceContractCondition.Values = new string[] { "Everything" };

在上面的代码中,我通过查看它是否只能找到服务合同类型等于 Everything 的帐户来测试它(我将 conditionOperator 更改为等于)。我没有工作,而是得到了这个异常

System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters) 在 crm .CrmService.Execute(请求请求)在 c:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\crmcustoms\3e2de0cf\f06ef1a\App_WebReferences.iwjjnsp-.0.cs:crmCustoms 的第 116 行。 e:\Projects\Kezber\crmCustoms\App_Code\MetricFunctions.cs:line 421 中的 MetricFunctions.Retrieve_SC_Total()

服务器无法处理请求。

【问题讨论】:

  • 我按照 Markus Palme 的回答,通过编辑选项列表条目获取选项列表项的值,然后像这样对其进行硬编码 serviceContractCondition.Values = new string[] { "2" };现在一切正常。
  • 我的建议是使用常量或枚举来避免代码中出现幻数。

标签: c# drop-down-menu dynamics-crm-4


【解决方案1】:

选项列表项具有显示标签和内部(数字)值。首先,您需要找到与No 对应的值。 MetadataService 允许您这样做。首先,实例化该服务:

var metaservice = new MetadataService();.
metaservice.Url = "http://localhost/mscrmservices/2007/metadataservice.asmx";

metadata.Credentials = "same as you use for the crm webservice";

然后,使用此方法检索选项列表标签的值:

int getPicklistValueByName(string picklistName, string entityLogicalName, string logicalName, MetadataService metaService)
{     
   RetrieveAttributeRequest attributeRequest = new RetrieveAttributeRequest();
   attributeRequest.EntityLogicalName = entityLogicalName;
   attributeRequest.LogicalName = kogicalName;

   var attributeResponse = (RetrieveAttributeResponse)metaService.Execute(attributeRequest);
   var picklist = (PicklistAttributeMetadata)attributeResponse.AttributeMetadata;

   return picklist.Options.Where(op => op.Label.UserLocLabel.Label == picklistName).Single().Value.Value;
}

调用可能如下所示:

var value = getPicklistValueByName("kez_servicecontracttype", "key_entitytype", "No", metaService)

现在,在您的条件表达式中使用这个值。另一种方法是将数值硬编码为程序中的常量 - 这更好取决于您的情况。

【讨论】:

  • 我们没有从 crm 添加元数据 web 参考,有没有办法我可以在没有元服务的情况下获得数值,并且只需对其进行硬编码,因为我相信这是我们之前的做法客户关系管理如果我去编辑选项列表条目“否”,它表示值为 1。
  • 编辑选项列表条目正是找出数值的方法。所以,是的,您可以将该值硬编码到您的程序中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多