×

微信扫一扫,快捷登录!

二次开发-开发方法-自定义扩展

标签: 暂无标签
本帖最后由 adminlily 于 2020-12-14 15:34 编辑

iTop定制


2.x工具包可在此处获得:[  /documentation/iTopDataModelToolkit-2.3.zip]iTopDataModelToolkit-2.3.zip[/url]
iTop建立在ORM(对象Relational Mapper)抽象层之上,该抽象层依赖于由PHP类组成的“ Meta数据模型”的定义。从iTop 2.0开始,可以用XML描述Meta数据模型,然后在设置应用时将其“编译”为PHP类。

iTop架构可以描述为以下架构:
[ ttps://www.itophub.io/wiki/media?media=2_6_0%3Acustomization%3Aitop-architecture.png][/url]

上面模式中的橙色框是应用的一部分,可以自定义。

定制类型意思文献资料目标听众
扩展或修改数据模型并调整控制台的行为XML文件[ ttps://www.itophub.io/wiki/page?id=2_6_0:customization:xml_reference]XML引用[/url]iTop顾问,ITIL专家
通过插件扩展通用用户接口PHP文件[ ttps://www.itophub.io/wiki/page?id=2_6_0:customization:extensions_api]扩展API[/url]PHP开发人员
创建新的用户界面页面以实施新的Web服务,专门的导出或面向特定任务的用户界面PHP文件ORM APIPHP开发人员
创建自己的安全方案PHP文件用户权利APIPHP开发人员
变更,客户,门户或开发新的门户XML文件[ ttps://www.itophub.io/wiki/page?id=2_6_0:customization:portal]自定义客户门户[/url]iTop顾问,ITIL专家,Web设计师,PHP开发人员

从iTop 2.0开始,可以通过编写简单的XML文件(仅包含与标准数据模型的差异)​​来对meta数据模型进行修改。这样一来,您所做的修改将保存在一个单独的文件中,该文件将继续适用于iTop的下一个数据模型,因此在使用升级时保留您的自定义内容。

了解iTop文件结构

iTop文件和文件夹的布局可以如下所示:

[ ttps://www.itophub.io/wiki/media?media=2_2_0%3Acustomization%3Aitop-files-layout.png][/url]

以下文件夹在iTop中有特殊用途:

conf:包含配置文件,每个环境带有一个子文件夹(请参阅下面的环境)。

data:包含应用生成的数据,如对象生命周期的图像(如果系统上有graphviz)

datamodels:包含元数据模型定义,每个iTop主要版本都有一个子文件夹。

env-xxxx:这些文件夹(每个环境)包含“已编译”数据模型。每次重新安装或升级应用时,都会完全重新创建env-production文件夹。如果您编辑其内容,请注意,重新安装或升级后所做的修改将丢失。

extensions:该文件夹是复制不属于iTop的标准发行版的扩展模块的地方。

log:包含应用的日志文件:setup.log和 error.log

所有其他文件夹应被视为应用的源代码的一部分,通常不应进行修改。应用永远不会写入这些文件夹,对于应用流程,它们可以被标记为只读。

环境环境
iTop 2.0引入了一个新概念,即“环境”的概念。环境是iTop的实例,它运行相同的代码库,但可能具有自己的环境和配置文件。环境由以下材料制成:

存储在conf/name_of_the_environment/config-itop.php中的配置文件。

数据模型运行时,存储在env-name_of_the_环境中

如果两个不同的环境的配置文件表明是这样,则它们可以在同一数据库上运行。

工具包自动创建一个单独的环境(名为工具包),以编译XML数据模型和工具包及其一致性,而不会影响“生产”环境。当更改确定时,您可以指示工具包将经过验证的更改应用于“生产”环境。

扩展与模块模组
iTop中数据模型定义的基本单位称为模块。 iTop的流程安装将每个模块作为一个整体来考虑。

一个模块将交付给定特性所需的所有文件组合在一起:XML,PHP类,Javascript和CSS文件,PHP页面,图像等中的数据模型定义。一个模块至少包含一个文件:模块定义文件,始终命名为module.name_of_the_module.php。

尽管您始终可以补丁源代码,但是自定义iTop的最佳方法是编写自己的模块。这将创建干净的自定义包装,并允许为部署或升级轻松(重新)安装。

扩展
扩展的概念是在iTop 2.4中引入的。扩展是一个或多个模块的组合。在安装过程中建议给终端用户的安装选项是基于iTop的“扩展”文件夹中的扩展进行的。为了向后兼容,如果在扩展之外找到模块,则该模块将直接列为安装选项。

扩展由每个扩展名的根文件夹中的extension.xml文件标识。

当一个扩展由一个模块构成时,预期的结构是一个文件夹,其中所有文件extension.xml,module.xxxx.php,datamodel.xxxx.xml等都处于同一级别。

当扩展由多个模块组成时,预期的结构是一个仅包含extension.xml文件的单个根文件夹,每个模块具有一个子文件夹(具有module.xxxx.php,datamodel.xxxx.xml等)

如果多个扩展包含同一模块(由其代码标识),则安装流程将仅安装该模块的一个副本:最高的版本。

PHP与XML数据模型的定义
在iTop版本1.x中,数据模型定义被编写为纯PHP类。 iTop版本2.0支持数据模型的PHP和XML定义。

XML定义比PHP定义具有一个主要优势:一个模块中的XML定义可以更改另一个模块中定义的数据模型。例如,可以创建扩展模块,该扩展模块将在安装时将属性添加到标准iTop数据模型中定义的类“服务器”。扩展模块不需要替换整个“ itop-config-数据模型”模块(定义了服务器类的模块),它只需更改其他地方定义的类的定义即可。

为了在PHP中获得相同的效果,唯一的解决方案是克隆整个itop-config-mgmt模块,并将其替换为您自己修补的版本。当发布模块的新版本时,您必须重做此差异,并且补丁再次工作以生成您自己的模块的新版本。由于XML定义直接定义为差异,因此版本是自动的。

模块内容
如果my-module是模块的名称,则模块文件夹将包含以下文件:

文档名称描述
extension. xmliTop 2.4中的新增功能:XML定义文件,由iTop 2.4及更高版本使用。该文件包含一些与模块PHP文件类似的信息,但是启用了对包含多个模块的扩展的支持。如果模块位于已经包含extension.xml文件的文件夹中(位于父文件夹中),则该文件的内容将被忽略。
module.my-module.php模块定义文件。必选包含模块(名称版本,对其他模块的依赖关系等)及其组件的说明。
datamodel.my-module.xmlXML中的数据模型。安装后,“编译”将基于XML定义生成模型。xxxxx.php文件。 XML文件可以包含类,菜单和简档(角色)的定义
model.my-module.php如果选择直接在PHP中定义数据模型,则该文件是放置此类定义的地方
main.my-module.phpPHP代码和实用程序。对于某些包含大量PHP代码的模块,提取PHP代码并在此单独的文件中对其进行编辑比将代码嵌入XML中要容易得多。
images将图像(类图标等)存储在自己的子文件夹中是一个很好的实践
en.dict.my-module.php字典文件,如果需要一些本地化的字符串

以itop-开头的模块名称保留给iTop软件包中的官方模块使用。为避免与其他扩展命名冲突,建议使用以公司名称开头的名称来命名自定义模块。例如,由Combodo开发的自定义模块被命名为combodo-xxxx。


处理本地化

所有字符串应包含在词典文件中。

请参阅专用的Wiki页面: [ ttps://www.itophub.io/wiki/page?id=2_6_0:customization:translation]如何翻译[/url]

创建一个模块
填写下面的表单,然后单击“生成”以生成一个空模块作为自定义的起点:

窗体顶端

模块名称:sample-module(必须唯一。以“ itop-”和“ combodo-”开头的名称保留供Combodo使用)
模块标签:Sample Module(在设置过程中显示)
模块版本:1.0.0
类别:business
依存关系: (以逗号分隔的模块名称版本列表)

查找依赖项

当您的模块更改由另一个模块定义的类时,该模块必须首先在安装和工具包 XML 编译中存在并处理,这将执行 PHP 代码生成。
XML 数据模型树是一步一步构建的,一个又一个地添加模块,因此,如果树中尚不存在该标记,则具有 _delta="重新定义"指令的 XML 标记将失败。

  • 首先在"数据模型/2.x/"<my-itop>模块中搜索要更改或嫁接到的标记。您的模块将依赖于找到的模块。
  • 然后检索您依赖的模块:文件模块中的名称和版本.php。对于作为 iTop 社区的一部分的模块,模块版本遵循主要 iTop 版本


安装工具包

  • 下载工具包压缩文件: [  /documentation/iTopDataModelToolkit-2.3.zip]iTopDataModelToolkit-2.3.zip[/url]
  • 展开zip文件的内容,以在开发iTop实例的根目录中创建目录“工具包”。
  • 将浏览器指向http://<your_itop>/toolkit


开发工作流程

  • 创建一个空模块
  • 安装iTop的开发实例,包括“扩展”文件夹中的空模块
  • 在开发实例上安装工具包
  • 编辑扩展模块并使用工具包进行验证
  • 将对扩展模块所做的更改应用于“生产”环境
  • 测试带有一些示例数据的模块。万一遇到麻烦,请在第4点进行迭代来修复它们。

每次修改数据模型XML文件时,都必须将它们“编译”为PHP文件,这是工具包的工作。但是,模块中的所有其他文件都只是从“ extension/your_module”文件夹复制到“ env-production/your_module”文件夹。为了加快在Linux系统上的调试速度,您可以通过指向其实际源文件的符号链接来替换这些文件。因此,对源的任何修改在iTop中都立即生效,您只需单击浏览器的刷新按钮即可。

扩展完成后,可以通过以下方式将其部署在生产系统上:

将包含扩展模块的文件夹复制到生产系统上的“扩展”文件夹

将配置文件标记为read/write

再次运行安装程序,然后在交互式安装程序结尾的“扩展”列表中选择您的模块

使用工具包
安装工具包后,将浏览器指向:http://<your_itop>/toolkit.

第一个选项卡执行一些基本的一致性检查和数据模型定义的验证。每次更改数据模型的定义时,您都可以使用“刷新”按钮再次执行验证。在此选项卡中执行的检查适用于特定的“数据模型”验证,因此对使用“生产”验证的实际iTop实例没有影响。

[ ttps://www.itophub.io/wiki/media?media=2_2_0%3Acustomization%3Atoolkit1.png][/url]

XML文件的加载顺序很重要(特别是如果XML文件更改了另一个文件中给出的定义)。该加载顺序遵循模块描述文件中声明的“依赖关系”。

如果您得到如下的错误:

XML数据模型加载器:找不到类别XXXX的节点

这可能意味着您的模块在定义了类XXXX的模块上缺少依赖。

安装程序运行时,将计算加载顺序,并将生成的顺序写入配置文件。请注意,工具包不会重新计算此加载顺序。因此,如果您错过了依赖,则需要修改模块定义文件以添加此依赖,然后再次运行安装程序以重新计算整个配置文件。

当第一个选项卡不显示任何错误时,可以移至第二个选项卡以:

检查变更到数据库架构

通过单击“ Udpate iTop Code”将数据库架构和数据模型定义的更改应用于“生产” iTop环境。

[ ttps://www.itophub.io/wiki/media?media=2_2_0%3Acustomization%3Atoolkit2.png][/url]

工具包的第三个选项卡可用于更新数据同步源(如果有任何受数据模型更改影响的同步源),并检查内部数据中是否存在用于层次结构键的任何差异。此选项卡直接在“生产”环境上运行。

[ ttps://www.itophub.io/wiki/media?media=2_2_0%3Acustomization%3Atoolkit3.png][/url]


生命周期图像

对象生命周期的图形表示显示在iTop的“数据模型”页面中(选项卡“生命周期”)。如果您修改了对象的生命周期,则需要在Web服务器上安装Graphviz才能重新计算此图像。看到[  :8082/bin/view/5/5.1/5.1.2/#optional_dependencygraphviz]安装iTop[/url]有关安装Graphviz的更多信息。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x




上一篇:iTop系统集成-数据对接-与Nagios对接
下一篇:二次开发-开发方法-自定义扩展-定制化思路
Wendy

写了 336 篇文章,拥有财富 434,被 3 人关注

您需要登录后才可以回帖 登录 | 立即注册
B Color Link Quote Code Smilies

成为第一个吐槽的人

Powered by IT 运维管理
返回顶部