【问题标题】:OptionSetValue does not contain constructor which takes one argumentOptionSetValue 不包含采用一个参数的构造函数
【发布时间】:2013-09-27 11:40:18
【问题描述】:

我正在创建一个 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 不包含带有一个参数的构造函数” 顺便说一句,我在 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 结果) {

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

【问题讨论】:

  • 你能把你的optionsetvalue构造函数截图吗?
  • 第一个代码块中 OptionSetValue 的命名空间是什么?如果您不打算使用 OptionSetValue,则需要状态的文本值,而不是 int,所以“活动”,而不是 1 或“1”
  • OptionSetvalue' 的全称是 MayProjectNameSpance.Silverlight.Common.crmSdk.OptionSetvalue

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


【解决方案1】:

您必须知道如何引用其他不是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);
}

【讨论】:

  • 我没有使用 Xrm.Sdk,而是在我的 silverlight 应用程序中使用组织 SOAP 服务端点。我得到的 OptionSetValue 类来自 CRM 的组织服务参考。
  • @ManishPandey 啊,没看到。我相信你也可以只设置状态的文本值,而不是选项集值。你为什么不试试呢?
  • @ManishPandey 这行得通吗? request["State"] = new OptionSetValue{ Value = 4};
  • 我已经编辑了我的问题并在我的问题下面发布了我的代码
  • 我也试过这个 request["State"] = new OptionSetValue{ Value = 4} 但这也行不通
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-16
    • 2015-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2013-02-16
    • 1970-01-01
    相关资源
    最近更新 更多