如何将数组作为方法结果传递给Microsoft NAV?

时间:2012-11-05 03:24:25

标签: c# com navision dynamics-nav

作为我们软件业务的一部分,我们为开发人员提供开发套件,以便将我们的软件集成到他们的软件中。我们通常会尝试迎合许多不同的语言/环境。

最近,我们收到了一些使用微软Dynamics NAV的潜在客户的询问。我们SDK的一种风格是COM可调用dll,可以在NAV中引用。

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

不幸的是,我们手头没有Navision经验,我们也没有Navision的许可副本(试用版似乎不会让你修改代码)而我无法在任何地方找到任何信息线上。

有人知道这是否可行?如果是这样,那么正确的方法是什么?

1 个答案:

答案 0 :(得分:2)

“Dimensions”在NAV中的Array上固定,这使得从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