c# - 单个代码如何在 SAP 或 Dynamics NAV 等 ERP 应用程序中运行
问题描述
我试图弄清楚内部开发环境是如何实现的以及它们是如何工作的。特别是在其时代初期(1980-2000)。让我们尽量保持简单。
例如,在当今的大多数 ERP 系统中,您可以设置自己的功能并描述业务逻辑。在 SAP 中,您编写 ABAP 代码,而 Dynamics NAV 使用 C/AL。
首先,核心应用程序内部的这样一个内部开发环境是如何创建的?您可以直接编译和运行您实现的功能。它是一种通过接口动态加载DLL吗?
其次,代码是如何加载的?我所知道的是Dynamics NAV将CAL转换成C#代码(在以前的版本中可以看到)并加载它(这个主题是如何指定的?)
源代码存储在数据库中,您无法提取它。可能它是加密的,然后直接从数据库中加载出来。
我只是想知道如果您创建了几个新对象,编译并加载它,它们对其他对象是如何可见的?我的意思是,如果您创建一个加载 DLL 的简单应用程序,您将无法从其他 DLL 动态访问它们。此功能虽然在 ERP 应用程序中可用。
您可以在其他软件中看到相同的原理,客户可以使用内部脚本语言来扩展核心应用程序。
谢谢!
解决方案
最新版本的 Dynamics NAV(现在称为 Business Central)的答案与产品的 C/AL 版本非常不同,但由于系统更加透明,所以答案更容易。
创建扩展时,app.json 文件定义了哪些其他扩展是依赖项;然后,开发人员将从安装它的 BC 环境下载与这些依赖项关联的“符号文件”。这使我们能够访问这些其他扩展中的事件和公共功能。
公共函数有效地为我们提供了其他扩展的 API,我们像在任何面向对象的编程语言中一样调用这些函数。
事件通过中央事件管理系统处理,我们的扩展订阅另一个扩展将要触发的事件(由与另一个扩展关联的 GUID 和事件名称标识);当这些事件发生时,事件管理进程调用我们的函数,处理任何参数和/或返回值。
在 Business Central 中,我们也以相同的方式与“基本应用程序”交互,即我们“依赖”并扩展基本应用程序,就像任何其他第 3 方扩展一样。
推荐阅读
- python - 如何在 Python 中比较非 ASCII 字符串不区分大小写?
- sml - 如何在 SML 中仅使用加法函数和迭代函数来制作乘法函数
- wordpress - 向 WordPress 导航项目添加额外的 div
- angular - 多个 Observables 共享单个 Error rxjs angular
- c++ - 展开树实现
- google-bigquery - 如何在 BigQuery 中的区域之间迁移提取时间分区表?
- php - 无法通过 PHP 中的 Plesk 上传大文件,因为错误提示“连接已重置”
- javascript - 为什么在下面的 javascript 代码中的 for 循环中有 6 个不同的变量?
- zsh - 提示中显示了意外的路径
- javascript - 获取禁用按钮索引列表