1

去赏金!

这个问题为我赢得了一个风滚草徽章(7 天内 7 次浏览!),这在某种程度上有力地证实了Navision的市场份额非常有限,我怀疑这应该证实 Navision 并不是所有伟大的软件...

但是,嘿......这就是我们作为后端得到的,所以我准备好与之抗争了。:-O

如果有一些大胆的 navision 开发人员能够阐明这一点……赏金就在那里!:)


原帖

我最近实现了一个相当复杂的电子商务系统,它与基于 Navision 5 的遗留后端交互。到目前为止,两个平台之间的数据交换是通过 XML 文件发生的,但是这种方法非常笨拙并且非常容易发生意外。

我们的需求是:

  1. 将每个平台的业务逻辑的某些元素暴露给另一个平台(例如:“这个客户曾经购买的总金额是多少?”、“目前提供的产品是什么?”、“有多少新客户注册了?在网站上?”等...)。
  2. 为各种交易提供反馈/验证机制(例如:“这是来自客户 X 的新订单”...“好的,知道了,现在将开始处理订单”...“好的,复制那个,再见!”)。
  3. 如果可能的话,避免玩弄文件,而是让所有这些都发生在调用/端口/服务方面......

我能想到的最自然的方法是通过 web 服务集成这两个系统,但 Navision 5 本身并不支持这一点。所以我做了“尽职调查”,在 MSDN 上发现了一些东西,包括这篇文章这篇文章。

根据这些文章,在 Navision 5 上创建 web 服务应该没有那么难,但是当我向负责遗留系统的团队提出这个解决方案时,他们告诉我们这是“纯理论”,他们不知道任何曾经实施过它的人。

我没有理由怀疑他们的话,但里程可能会有所不同......我认为也许在 SO 社区中有来自其他国家的专业人士实际上实施了类似的事情并可以分享他们的经验。

所以,我的问题有两个方面:

  1. 有没有人在家里尝试过这个并且可以分享一下最大的困难是什么,如果最终结果是可靠的,如果他们认为结果值得努力等等......?
  2. 有没有人遇到过类似的问题,但用不同的方法解决了它,并且可以提出他们的解决方案(“我自己从来没有做过,但如果我必须这样做,我会这样做......”类型的答案也欢迎)?

提前感谢您的宝贵时间!:)

4

5 回答 5

4

我也会附上一个关于 Nav 6 不太有用的答案:)

我刚刚使用 Nav 6 完成了一个项目。令人惊讶的是,Web 服务非常容易公开和使用。在 webservices 接口中找到一个对象并勾选一个框告诉它暴露自己,这真的是一件小事。

不出所料,Web 服务并没有像您期望的那样工作,您必须经常使用一些试验和错误来使对象和属性保持不变,因为您用于保存和对象的事件顺序非常敏感。每个对象的工作方式似乎略有不同。eg:要创建一个客户,我最终发现你必须创建并保存一个空白客户,用代码单元处理这条新记录,然后获取记录,然后写入客户的属性并再次保存。我希望只创建一个新客户(),设置属性并快速保存。

我猜你不太热衷于升级到 Nav6,但我想,这是你可以模拟 Web 服务的方法:

Sharepoint 已经可以使用和公开 Web 服务,因此该层不是问题。Nav 5 并没有“自然”拥有它们,但您可以编写自己的程序来充当 Web 服务“代理”——您已经通过主要是 XML 将信息输入和输出导航。您可以构建此代理以将输入作为 xml 文件并对其进行按摩以在 Web 服务调用中使用。您甚至可以放弃 XML 并直接从 Db 写入和读取,因为所有导航信息都存储在那里。所以这就是我的想法:

NAV <-> SQL SERVER <-> 新的“代理”网络服务 <-> Sharepoint

或者,如果您已经拥有 NAV API 并希望重新使用您的 XML:

NAV <-> XML 文件 <-> 新的“代理”网络服务 <-> Sharepoint

如果您使用 XML 并使用文件观察器,则延迟应该不会太差,通常文件观察器会在几毫秒内检测到下降或变化。

嗯,但我认为您可能应该将 BizTalk 用于以下内容:NAV <-> BizTalk <-> Sharepoint

但我不知道设置 BizTalk 与 Nav 通信有多么容易。我敢打赌,让通信正常工作非常简单,但这是猜测。

无论如何,我不知道这篇文章有多大帮助,但也许它会给你一些想法。

干杯,兰斯

于 2009-12-04T16:38:06.540 回答
1

在我工作的地方,我们能够使用 NAV 6 中的一种 Web 服务与 SharePoint 集成,因此您可以查找客户或记录并将其显示在 SharePoint 的 Web 部件中。我知道你的问题特别是关于 NAV 5,但我只看到这个在 NAV 6 上工作。而且我不是从事这个工作的开发人员,所以恐怕我没有更多细节。

您是否尝试在 mibuso.com 上提问?他们更关注 Navision。

于 2009-12-02T17:44:29.143 回答
1

当您说公开业务逻辑时,这是否包括执行 AL 代码(例如 CodeUnit)?如果您只需要对数据库执行查询,您可以使用 NODBC & System.Data.Odbc 或 CFront .NET API。其中任何一个都可以使用 .NET Web 服务轻松封装,并且都支持本机 NAV 数据库。如您提到的第一篇文章中所述,要传回消息,您仍然需要使用 COM。

以上任何一项都是完全可能的,并且相对容易,具体取决于您对 .NET、COM 和 NAV 的熟练程度。

您链接到的第二篇文章描述了使用 NAS。我不是这方面的专家,但我认为这可能需要一个特殊的许可证颗粒。在花时间实施任何事情之前,有必要检查一下您的许可证是否包括 NAS、CFront 或 NODBC。

于 2009-12-09T18:18:46.933 回答
1

您实际上可以将 NAV 5“技术升级”到 NAV 2009,然后使用本机 Web 服务。意味着替换 exe 文件和整个应用程序(但不是对象,仍然是版本 5),以及其他一些技巧。但它有效,因此您的 NAV 5 上有 2009-webservice-functionality :-)

于 2012-02-07T21:24:24.603 回答
0

为了方便任何人在谷歌上搜索,如果您仍在使用 Navision 6 和本机数据库,连接它的好方法是通过 Windows 消息队列。

您可以编写自己的 Web 服务,将 XML 请求放入队列,然后等待回复弹出。在 Navision 方面,您有一个客户端拉入队列并将答案放入回复队列。有一个特殊的非 GUI 客户端,称为 NAS。

15 年来,我一直在使用这种方法将预订引擎连接到 Navision 后端。它工作得非常好,而且你可以在请求到达 Navision 之前查看它们,这样你就可以保护你的后端免受过多或错误请求的影响。

这种方法的唯一问题是 Navision 中的 COMMIT 命令非常昂贵。很难处理大量请求。一旦后端需要提交,您每秒只需要几个请求。这对于低音量可能没问题。

对于大容量,您需要实现缓存或获取一些业务逻辑。对我来说,它受到价格比较网站的打击,所以这里的解决方案是为那些用 Python 编写的 Web 服务提供服务,并且只有在有人买东西时才传递请求......

于 2017-09-27T14:07:46.340 回答