【问题标题】:Unable to compile code when using OrderClose class使用 OrderClose 类时无法编译代码
【发布时间】:2015-02-25 21:35:32
【问题描述】:

我正在尝试构建一个对销售订单执行某些操作的插件。我还必须将订单设置为已履行。我在 SDK 文档中找到了一个必须用于以正确方式完成订单的摘录

var request = new FulfillSalesOrderRequest
        {
            OrderClose = new OrderClose
            {
                SalesOrderId = new EntityReference 
                    { LogicalName = orderEntityName, Id = orderId }

            },
            Status = new OptionSetValue(newStatus)
        };

问题是无法编译代码,因为 MVS 说“找不到类型或命名空间名称 'OrderClose'(您是否缺少 using 指令或程序集引用?)”。右键单击“new OrderClose”(OrderClose 带有红色下划线)我看不到菜单中的“解决”部分。 我也试过这种方式:

        var request = new FulfillSalesOrderRequest();

        request.OrderClose = new OrderClose();

        request.OrderClose.LogicalName = orderEntityName;
        request.OrderClose.Id = orderId;
        request.Status = new OptionSetValue(newStatus);

我怎样才能使代码编译(并希望工作)?

【问题讨论】:

  • 听起来您缺少程序集引用。您需要包含 SDK 需要的任何程序集才能引用 SDK 对象。
  • 是的,但 FulfillSalesOrderRequest 在 Microsoft.Crm.Sdk.Messages 命名空间下,我已经包含了它。
  • 这并不一定意味着OrderClose 在同一个程序集中。你确认了吗?
  • 查看文档中的 FulfillSalesOrderRequest 似乎 OrderClose 是 FulfillSalesOrderRequest 类型的实体类型的属性(即标准 CRM 类型)
  • 再一次,仅仅因为FulfillSalesOrderRequest 可能会使用OrderClose,例如通过属性公开它的一个实例,这并不意味着它在同一个程序集中。您需要准确确认 OrderClose 实际定义的程序集。看看@pittofdirk 的答案;他走在正确的轨道上。

标签: c# dynamics-crm crm


【解决方案1】:

由于OrderClose 不是一个类,而是一个属性的名称,所以您不能使用new 创建它。

由于属性是Entity 类型,您需要像这样创建Entity 的实例:

request.OrderClose = new Entity();

【讨论】:

    【解决方案2】:

    OrderClose 在程序集“Microsoft.Crm.Sdk.Proxy”中(在 Microsoft.Crm.Sdk.Proxy.dll 中)

    您是否添加了 Microsoft.Crm.Sdk.Proxy.dll 作为参考?不只是

    using Microsoft.Crm.Sdk.Messages;
    

    但实际上是转到解决方案资源管理器窗格并右键单击“引用”>“添加引用”并选择 Microsoft.Crm.Sdk.Proxy.dll。

    编辑:除非引用正确的程序集,否则右键单击红色波浪线并选择“解决”将不起作用。

    【讨论】:

    • 我已经在项目中添加了Microsoft.Crm.Sdk.Proxy,并在代码中使用了Microsoft.Crm.Sdk.Messages
    【解决方案3】:

    听起来示例代码假设您已经为您的组织生成了早期绑定代码。如果您在项目中包含了早期绑定代码,则此引用将解决。请参阅此链接:

    https://msdn.microsoft.com/en-us/library/gg327844.aspx

    CrmSvcUtil.exe 是 CRM SDK 的一部分。这是一个如何使用它的模板:

    CrmSvcUtil.exe /url:http://<serverName>/<organizationName>/XRMServices/2011/Organization.svc    /out:<outputFilename>.cs /username:<username> /password:<password> /domain:<domainName>    /namespace:<outputNamespace> /serviceContextName:<serviceContextName>
    

    【讨论】:

      【解决方案4】:

      这是一个早期绑定请求,这就是为什么如果您不使用 CrmScvUtil 则无法编译的原因。

      这是一个后期绑定请求的示例:

      需要这个命名空间。

      using Microsoft.Xrm.Sdk.Messages;
      

      这是代码。

      var request = new FulfillSalesOrderRequest();
      request.OrderClose = new Entity("orderclose");
      request.OrderClose["salesorderid"] = new EntityReference("salesorder", new Guid("YOURGUID"));
      request.Status = new OptionSetValue(100001);
      service.Execute(request);
      

      100001 是 Complete 的状态码。

      如果要处理响应,请使用变量来接收答案。

      【讨论】:

        猜你喜欢
        • 2011-02-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多