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 を equal に変更しました)。作業する代わりに、この例外が発生します

System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage メッセージ、WebResponse 応答、ストリーム responseStream、Boolean asyncCall) で System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters) at crm.CrmService. c:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\crmcustoms\3e2de0cf\f06ef1a\App_WebReferences.iwjjnsp-.0.cs:116 行目 crmCustoms.MetricFunctions.Retrieve_SC_Total で Execute(Request Request) () in 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 に答える