2012-11-05 57 views
1

作为我们软件业务的一部分,我们为开发人员提供开发套件,以将我们的软件集成到他们的软件中。我们通常尝试迎合许多不同的语言/环境。如何将数组作为方法结果传递给Microsoft NAV?

最近,我们从一些使用Microsoft Dynamics NAV的潜在客户那里得到了一些咨询。我们的SDK的其中一个口味是COM可调用的dll,可以在NAV中引用。

现在,我们的API中的一个方法返回一个String数组。其中一名开发人员正在运行一个试点项目,并报告了使用该方法的问题,他无法找到解决方法。我们必须给他一个解决方法,它只返回数组的第一个索引(这对于他的特定目的来说足够了),但这显然不是解决方案。

不幸的是,我们手边没有Navision体验,也没有Navision的许可副本(试用版似乎无法让您修补代码),而且我无法在此找到任何信息任何地方在线

有谁知道这是可能的吗?如果是这样,那么执行该操作的正确方法是什么?

回答

2

“维度”固定在数组的NAV中,这使得难以接受和发送来自COM的基于数组的数据。

虽然我没有遇到同样的问题,但我已经有了相反的结果(向COM传递一个字符串数组),最简单的方法之一是使用循环和函数将字符串发送到COM/DLL一次一个,然后用一个标志或类似信号完成信号。无限数组在.NET中会很有用,因为您可以根据需要继续添加字符串。我将假设该DLL是基于.NET的;

所以从.NET到C/AL;

  • 一个标志或功能,让C/AL知道数组循环完成
  • C/AL可以使用一个循环,直到该标志被设置
  • .NET将抓取每个“元素”需要逐个馈送数组项目

所以从C/AL到.NET;

与.NET到C/AL类似,除了.NET有无限数组,这使事情变得更容易一些。

DotNetArray.ClearArray; 

REPEAT   
    DotNetArray.Add(Customer.Name);   
UNTIL 

DotNetArray.EndOfArray; 

注意事项;

  • C/AL中的数组索引是基于1的,.NET基于0。
  • 一种替代的方法是通过对x倍

以下文章也可能是有用的计数和环; http://dynamicsuser.net/blogs/waldo/archive/2011/03/21/nav-2009-r2-net-interop-using-arrays-collections.aspx