0

CRM 2011 の Web リソースとして Silverlight アプリケーションを作成しています。現在、DB に ServiceAppointment レコードを作成しています。作成後、ステータスを要求ではなく「予約済み」に変更したいと考えています。

私はこれについてググって、コードMicrosoft.Crm.Sdk.Messages.SetStateRequestを介してサービス アクティビティを閉じるなどの例に出くわしました。

彼らはすべて「SetStateRequest」を使用することを提案しており、これを使用するには、OptionSetValue を次のように設定する必要があります

request["State"] = new OptionSetValue(4);

しかし、上記の行には、「OptionSetValue には引数を 1 つ取るコンストラクターが含まれていません」というエラーが表示されます。ところで、Silverlight アプリケーションで CRM 2011 サービスの SOAP エンドポイントを使用しています。

友達のアイデアはありますか?

編集

以下は私のコードです

   var request = new OrganizationRequest { RequestName = "SetStateRequest" };

    request["State"] = 3; 
    request["Status"] = 4;
    request["EntityMoniker"] = new EntityReference() { Id = createdActivityId, LogicalName = "serviceappointment" };

    crmService.BeginExecute(request,ChangeActivityStatusCallback,crmService);

そして、私のコールバック関数はプライベートです void ChangeActivityStatusCallback(IAsyncResult result) {

        OrganizationResponse response;
        try
        {
            response = ((IOrganizationService)result.AsyncState).EndExecute(result);
        }
        catch (Exception ex)
        {
            _syncContext.Send(ShowError, ex);
            return;
        }
    }
4

2 に答える 2

0

ダリル、あなたの時間と努力に感謝します。私はあなたが提案した方法で私の問題を解決しました。

私のために働いたコードを投稿しています。

        var request = new OrganizationRequest { RequestName = "SetState" };

        request["State"] = new OptionSetValue { Value = 3 };
        request["Status"] = new OptionSetValue { Value = 4 };

        request["EntityMoniker"] = new EntityReference() {  Id = createdActivityId, LogicalName = "serviceappointment" };

        crmService.BeginExecute(request,ChangeActivityStatusCallback,crmService);

private void ChangeActivityStatusCallback(IAsyncResult result) {

        OrganizationResponse response;
        try
        {
            response = ((IOrganizationService)result.AsyncState).EndExecute(result);
        }
        catch (Exception ex)
        {
            _syncContext.Send(ShowError, ex);
            return;
        }
    }
于 2013-09-27T15:16:35.537 に答える
0

他の OptionSetValue クラスではない他のクラスをどのように参照している必要がありますMicrosoft.Xrm.Sdk。名前空間を追加して、問題が解決するかどうかを確認してください。

request["State"] = new Microsoft.Xrm.Sdk.OptionSetValue(4);

また、なぜ SetStateRequest でレイト バウンドを使用しているのですか? SetStateRequest クラスを使用するだけです。

public static Microsoft.Crm.Sdk.Messages.SetStateResponse SetState(this IOrganizationService service,
    Entity entity, int state, int? status)
{
    var setStateReq = new Microsoft.Crm.Sdk.Messages.SetStateRequest();
    setStateReq.EntityMoniker = entity.ToEntityReference();
    setStateReq.State = new OptionSetValue(state);
    setStateReq.Status = new OptionSetValue(status ?? -1);

    return (Microsoft.Crm.Sdk.Messages.SetStateResponse)service.Execute(setStateReq);
}
于 2013-09-27T12:38:54.547 に答える