0

在 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 中的 System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)。在 c:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\crmcustoms\3e2de0cf\f06ef1a\App_WebReferences.iwjjnsp-.0.cs:crmCustoms.MetricFunctions.Retrieve_SC_Total 的第 116 行中执行(请求请求) () 在 e:\Projects\Kezber\crmCustoms\App_Code\MetricFunctions.cs:line 421

服务器无法处理请求。

4

1 回答 1

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)

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

于 2013-04-03T18:44:36.133 回答