0

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

我对此进行了谷歌搜索,并遇到了诸如Close a Service Activity Through CodeMicrosoft.Crm.Sdk.Messages.SetStateRequest之类的示例

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

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

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

2 回答 2

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 回答
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;
        }
    }
于 2013-09-27T15:16:35.537 回答