iTop 定制机制
本文档介绍 iTop 的定制机制,包括数据模型扩展、模块与扩展的概念、开发工作流以及工具包的使用。更多详细内容请参考 iTop 官方文档。
概述
iTop 构建在 ORM(对象关系映射)抽象层之上,该层依赖于"元数据模型"的定义,由 PHP 类组成。从 iTop 2.0 开始,元数据模型可以用 XML 描述,然后在应用程序安装过程中"编译"成 PHP 类。
iTop 架构中可定制的部分(橙色框)包括:
| 定制类型 | 方式 | 文档 | 目标受众 |
|---|---|---|---|
| 扩展或修改数据模型并调整控制台行为 | XML 文件 | XML 参考 | iTop 顾问、ITIL 专家 |
| 通过插件扩展通用用户界面 | PHP 文件 | 扩展性 API | PHP 开发人员 |
| 通过插件扩展数据模型行为 | XML 和 PHP 文件 | Events API | PHP 开发人员 |
| 创建新的用户界面页面以实现新的 Web 服务、专用导出或特定任务导向的用户界面 | PHP 文件 | ORM API | PHP 开发人员 |
| 创建自己的安全方案 | PHP 文件 | 用户权限 API | PHP 开发人员 |
| 更改客户门户或开发新门户 | XML 文件 | 定制客户门户 | iTop 顾问、ITIL 专家、Web 设计师、PHP 开发人员 |
iTop 文件结构
iTop 文件和文件夹的布局如下:
特殊文件夹
| 文件夹 | 说明 |
|---|---|
conf | 包含配置文件,每个环境一个子文件夹 |
data | 包含应用程序生成的数据,如对象生命周期图像(如果系统上可用 graphviz) |
datamodels | 包含元数据模型定义,每个 iTop 主要版本一个子文件夹 |
env-xxxx | 这些文件夹(每个环境一个)包含"编译后的"数据模型。env-production 文件夹在每次重新安装或升级时完全重新创建 |
extensions | 放置不属于 iTop 标准分发的扩展模块 |
log | 包含应用程序的日志文件:setup.log 和 error.log |
所有其他文件夹应被视为应用程序源代码的一部分,通常不应修改。应用程序永远不会写入这些文件夹,它们可以标记为对 Web 服务器进程只读。
环境
iTop 2.0 引入的新概念是"环境"。环境是运行相同代码库但可能具有自己的数据模型和配置文件的 iTop 实例。一个环境由以下部分组成:
- 存储在
conf/name_of_the_environment/config-itop.php的配置文件 - 存储在
env-name_of_the_environment的数据模型运行时
工具包会自动创建一个单独的环境(名为 toolkit),以便在不影响"生产"环境的情况下编译 XML 数据模型并测试其一致性。当更改确认无误后,可以指示工具包将验证后的更改应用到"生产"环境。
扩展与模块
模块
iTop 中数据模型定义的基本单元称为模块。iTop 的安装过程将每个模块视为一个整体。
模块将交付给定功能所需的所有文件组合在一起:XML 中的数据模型定义、PHP 类、Javascript 和 CSS 文件、PHP 页面、图像等。一个模块至少包含一个文件:模块定义文件,始终命名为 module.name_of_the_module.php。
虽然您始终可以修补源代码,但定制 iTop 的最佳方式是编写自己的模块。这样可以创建整洁的定制包,并便于部署或升级时重新安装。
扩展
扩展的概念随 iTop 2.4 引入。扩展是一个或多个模块的集合。安装期间向最终用户提出的安装选项基于在 iTop 的"extensions"文件夹中找到的扩展;为了向后兼容,如果在扩展之外找到模块,则该模块将直接列为安装选项。
扩展通过每个扩展根文件夹中的 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 定义可以修改另一个模块中定义的数据模型。例如,可以创建一个扩展模块,在安装时向标准类"Server"添加一个属性,而无需替换整个 “itop-config-management” 模块。
模块内容
如果 my-module 是您的模块名称,模块文件夹将包含以下文件:
| 文件名 | 说明 |
|---|---|
extension.xml | iTop 2.4 新增:XML 定义文件,用于 iTop 2.4 及以上版本。如果模块位于已包含 extension.xml 文件的文件夹中,则此文件的内容被忽略 |
module.my-module.php | 模块定义文件。必需。包含模块的描述(名称、版本、对其他模块的依赖等)及其组件 |
datamodel.my-module.xml | XML 数据模型。安装时"编译"将基于 XML 定义生成 model.xxxxx.php 文件。XML 文件可以包含类、菜单和角色的定义 |
model.my-module.php | 如果选择直接用 PHP 定义数据模型,则在此文件中放置此类定义 |
main.my-module.php | PHP 代码和工具。对于包含大量 PHP 代码的模块,将代码提取到此单独文件中比将代码嵌入 XML 更容易 |
images | 将图像(类图标等)存储在各自的子文件夹中是一个好习惯 |
en.dict.my-module.php | 字典文件,如果需要一些本地化字符串 |
处理本地化
所有字符串都应包含在字典文件中。请参阅专门的 wiki 页面:如何翻译。
创建自己的扩展
填写以下表单并点击"生成"以生成一个空扩展,作为定制的起点。
| 字段 | 说明 |
|---|---|
| 公司名称 | 必需,仅使用字母字符,无空格。用于 Composer 和 PHP 命名空间 |
| 扩展名称 | 仅使用小写字母字符和短横线(-),必须唯一。以 “itop-” 和 “combodo-” 开头的名称保留给 Combodo 使用 |
| 扩展标签 | 安装期间显示 |
| 版本 | 格式:x.y.z |
| 依赖项 | 模块名称/版本的逗号分隔列表 |
查找依赖项
当您的模块修改另一个模块定义的类时,该模块必须在安装和工具包 XML 编译中先存在并处理,以执行 PHP 代码生成。
XML 数据模型树是逐步构建的,一个接一个地添加模块,因此带有 _delta="redefine" 指令的 XML 标签如果该标签尚未存在于树中,则会失败。
- 首先在
<my-itop>/datamodels/2.x/下的模块中搜索您要修改或嫁接的标签。您的模块将依赖于这些找到的模块。 - 然后检索您依赖的模块的名称和版本,在
module.xxxx.php文件中查找。对于属于 iTop Community 的模块,模块版本遵循 iTop 主要版本。
安装工具包
- 下载工具包 zip 文件:https://github.com/Combodo/itop-toolkit-community/releases
- 解压 zip 文件内容,在开发 iTop 实例的根目录下创建 “toolkit” 目录
- 在浏览器中访问
http://<your_itop>/toolkit
开发工作流
- 创建一个空模块
- 安装 iTop 开发实例,将您的空模块放在 “extensions” 文件夹中
- 在开发实例上安装工具包
- 编辑您的扩展模块,并使用工具包验证它
- 将扩展模块的更改应用到"生产"环境
- 使用一些示例数据测试您的模块。如有问题,回到第 4 步迭代修复
当扩展完成后,可以通过以下方式部署到生产系统:
- 将包含扩展模块的文件夹复制到生产系统的 “extensions” 文件夹
- 将配置文件标记为读/写
- 再次运行安装程序,在交互式安装末尾的"扩展"列表中选择您的模块
使用工具包
工具包安装后,在浏览器中访问:http://<your_itop>/toolkit。
第一个选项卡执行一些基本的一致性检查并验证数据模型定义。每次数据模型定义更改后,可以使用"刷新"按钮重新执行验证。此选项卡中的检查在特定的"toolkit"环境上工作,因此不会影响使用"生产"环境的实际 iTop 实例。
如果收到如下错误:
XML datamodel loader: could not find node for class/XXXX
这很可能意味着您的模块缺少对定义类 XXXX 的模块的依赖。
当第一个选项卡没有显示任何错误时,可以转到第二个选项卡:
- 检查数据库架构的更改
- 点击"更新 iTop 代码"将数据库架构和数据模型定义的更改应用到"生产"iTop 环境
工具包的第三个选项卡可用于更新数据同步源(如果有任何受数据模型更改影响的),并检查为层次键维护的内部数据是否存在差异。此选项卡直接在"生产"环境上操作。
生命周期图像
iTop 的"数据模型"页面(“生命周期"选项卡)中显示对象生命周期的图形表示。如果修改了对象的生命周期,则需要在 Web 服务器上安装 Graphviz 才能重新计算这些图像。有关安装 Graphviz 的更多信息,请参阅安装 iTop。
原文:https://www.itophub.io/wiki/page?id=3_2_0:customization:datamodel
Last modified: 2024/09/10 10:25 by127.0.0.1
版本:3_2_0/customization/datamodel.txt · Last modified: 2024/09/10 10:25 by 127.0.0.1