【问题标题】:IndexOutOfRangeException when creating an Extension Codeunit for a Page Web Service为页面 Web 服务创建扩展代码单元时出现 IndexOutOfRangeException
【发布时间】:2015-10-21 10:41:22
【问题描述】:

我正在尝试通过 Dynamics NAV (2009 R2) 中的 Page Web Service 公开 Codeunit 中的 Function。我按照MSDN documentationa blog post 中的步骤操作,但是在连接到Web 服务时出现以下错误:

System.IndexOutOfRangeException:索引超出了数组的范围。

我创建了一个 Page Web Service 和一个 Codeunit Web Service,它们都使用相同的名称,只发布了 Page Web Service:

我的 Codeunit 目前只包含 1 个函数,如下所示:

当我也发布 Codeunit Web Service 时,我可以使用它,但 Page Web Service 仍然显示错误。

当我重命名 Codeunit Web Service 时,Page Web Service 再次像以前一样工作,当然没有 Codeunit 的 Functions。

我是否遗漏了什么或做错了什么?

【问题讨论】:

    标签: c# .net vb.net web-services dynamics-nav


    【解决方案1】:

    您的代码单元中的函数签名错误。此外,在博客中使用的是Run 函数(不是用户函数)。不知道有没有关系。

    下一阶段:过帐所选发票。我的 Web 服务中没有发布发票的方法,因此我们将通过这种可能性扩展 Web 服务。非常简单!我刚刚创建了一个带有函数的代码单元。在这个函数中,签名很重要:第一个参数应该是与您发布的页面相同的记录变量(在我们的例子中,“Sales Header”)。这是我的代码单元的(唯一)功能:

    PostInvoice(precSalesinvoice : Record "Sales Header") CODEUNIT.RUN(CODEUNIT::"Sales-Post", precSalesinvoice);

    【讨论】:

    • 证据一直都在……“第一个参数应该是你发布的页面的同一个记录变量。”但是,没有解释为什么会这样。同时,我发现另一个blog post 正在处理这个问题。
    • 官方文档中没有提及,但有解释。如果你想调用函数,你必须知道调用这个函数的记录。您已尝试将 PK 字段放入参数中,但不同的表会有不同的 PK。如果您更改表的 PK(例如添加字段),您将不想修改与记录相关的每个函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-30
    • 2012-05-15
    相关资源
    最近更新 更多