2011-07-01 9 views
3

アクティビティエンティティからOptionSetValue属性のラベルを取得する必要があるSilverlightアプリケーションがあります。属性論理名は、activitytypecodeある、と私は属性のメタデータを取得するには、次の拡張メソッドを持っています。CRM 2011のSOAPサービスを使用してOptionSetValueのラベルを取得する

public static void RetrieveAttribute(this IOrganizationService service, 
     string entityLogicalName, string entityAttributeName, 
     Action<OrganizationResponse> callback) 
    {    
     var retrieveAttributeRequest = new OrganizationRequest() 
     { 
      RequestName = "RetrieveAttribute", 
     }; 

     retrieveAttributeRequest["EntityLogicalName"] = entityLogicalName; 
     retrieveAttributeRequest["RetrieveAsIfPublished "] = false; 
     retrieveAttributeRequest["LogicalName"] = entityAttributeName; 

     service.BeginExecute(retrieveAttributeRequest, 
      result => 
      { 
       if (result.IsCompleted) 
       { 
        var response = service.EndExecute(result); 

        callback(response); 
       } 
      }, null); 
    } 

、すでに初期化されている私のSoapCtxに次のように私はそれを使用します。

SoapCtx.RetrieveAttribute("activitypointer", "activitytypecode", 
    orgResponse => 
    { 
     if (orgResponse != null) 
     { 
      // examine orgResponse 
     } 
    }); 

プロシージャをデバッグすることはできますが、行に失敗しますvar response = service.EndExecute(result);私の拡張メソッドで。私は、次の例外メッセージが表示されます:あなたはそれが役立つかどう

The remote server returned an error: NotFound.

がここにスタックトレースです:

{System.ServiceModel.CommunicationException: The remote server returned an error: NotFound. ---> System.Net.WebException: The remote server returned an error: NotFound. ---> System.Net.WebException: The remote server returned an error: NotFound. 
    at System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult) 
    at System.Net.Browser.BrowserHttpWebRequest.<>c__DisplayClass5.<EndGetResponse>b__4(Object sendState) 
    at System.Net.Browser.AsyncHelper.<>c__DisplayClass4.<BeginOnUI>b__1(Object sendState) 

は、私は任意のヘルプや指導、感謝に感謝します!

答えて

2

匿名の方法以外に、以下のことが私のために働いた。 この方法は、私の作品にそれをやって、MetadataId

private void StartGetAttributeMetadata() 
    { 
     OrganizationRequest request = new OrganizationRequest() { RequestName = "RetrieveAttribute" }; 
     request["EntityLogicalName"] = "activitypointer"; 
     request["LogicalName"] = "activitytypecode"; 
     request["MetadataId"] = Guid.Empty; 
     request["RetrieveAsIfPublished"] = true; 

     IOrganizationService service = SOAPServerUtility.GetSoapService(); 
     service.BeginExecute(request, new AsyncCallback(EndGetAttributeMetadata), service); 
    } 

    private void EndGetAttributeMetadata(IAsyncResult result) 
    { 
     OrganizationResponse response = ((IOrganizationService)result.AsyncState).EndExecute(result); 
    } 
+0

おかげで多くのことを注意してください。私は違う方法を除いて同じことをするので、私はそれが無関係であると思ったので、私はこの方法でそれを試しませんでした。私はこのために匿名のメソッドを使用することはできません、と私はこのように行われたときにSOAPのコンテキストがうまくいかない理由を知らない。私は今、選択肢がありませんが、それはあなたのコードをもっと読みにくくするので、私がやっていることを嫌うすべての要求のための別々のイベントハンドラの束を書くことです。再び、ありがとう、これは私を何時間も夢中にさせていた。 – Jose

関連する問題