OptionSetValue不包含带有一个参数的构造函数

时间:2013-09-27 11:40:18

标签: silverlight dynamics-crm-2011 dynamics-crm silverlight-5.0

我正在创建一个silverlight应用程序作为CRM 2011的Web资源。现在我在DB中创建一个ServiceAppointment记录,在创建它之后我想将其状态更改为“保留”而不是请求。

我在Google上搜索了这个内容并遇到了Close a Service Activity Through CodeMicrosoft.Crm.Sdk.Messages.SetStateRequest

等示例

他们都建议使用“SetStateRequest”并使用这个我必须设置OptionSetValue像

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

但是上面的行给出了错误,说“OptionSetValue不包含带有一个参数的构造函数” BTW我在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);

我的回调函数是     private void ChangeActivityStatusCallback(IAsyncResult result){

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

2 个答案:

答案 0 :(得分:0)

你必须要引用一些不是Microsoft.Xrm.Sdk的其他OptionSetValue类。尝试附加命名空间以查看是否可以解决您的问题:

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);
}

答案 1 :(得分:0)

感谢Daryl为您付出的时间和精力。我用你建议的方式解决了我的问题。

我发布的代码对我有用。

        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;
        }
    }