iTop 定制机制

iTop 定制机制。

本文档介绍 iTop 的定制机制,包括数据模型扩展、模块与扩展的概念、开发工作流以及工具包的使用。更多详细内容请参考 iTop 官方文档

概述

iTop 构建在 ORM(对象关系映射)抽象层之上,该层依赖于"元数据模型"的定义,由 PHP 类组成。从 iTop 2.0 开始,元数据模型可以用 XML 描述,然后在应用程序安装过程中"编译"成 PHP 类。

iTop 架构中可定制的部分(橙色框)包括:

定制类型方式文档目标受众
扩展或修改数据模型并调整控制台行为XML 文件XML 参考iTop 顾问、ITIL 专家
通过插件扩展通用用户界面PHP 文件扩展性 APIPHP 开发人员
通过插件扩展数据模型行为XML 和 PHP 文件Events APIPHP 开发人员
创建新的用户界面页面以实现新的 Web 服务、专用导出或特定任务导向的用户界面PHP 文件ORM APIPHP 开发人员
创建自己的安全方案PHP 文件用户权限 APIPHP 开发人员
更改客户门户或开发新门户XML 文件定制客户门户iTop 顾问、ITIL 专家、Web 设计师、PHP 开发人员

iTop 文件结构

iTop 文件和文件夹的布局如下:

特殊文件夹

文件夹说明
conf包含配置文件,每个环境一个子文件夹
data包含应用程序生成的数据,如对象生命周期图像(如果系统上可用 graphviz)
datamodels包含元数据模型定义,每个 iTop 主要版本一个子文件夹
env-xxxx这些文件夹(每个环境一个)包含"编译后的"数据模型。env-production 文件夹在每次重新安装或升级时完全重新创建
extensions放置不属于 iTop 标准分发的扩展模块
log包含应用程序的日志文件:setup.logerror.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.xmlmodule.xxxx.phpdatamodel.xxxx.xml 等)在同一级别。

当扩展由多个模块组成时,预期的结构是一个根文件夹,只包含 extension.xml 文件,每个模块一个子文件夹(包含 module.xxxx.phpdatamodel.xxxx.xml 等)。

如果多个扩展包含相同的模块(通过其代码标识),安装过程将只安装一个模块副本:版本最高的那个。

PHP 与 XML 数据模型定义

在 iTop 1.x 版本中,数据模型定义被编写为普通 PHP 类。iTop 2.0 支持 PHP 和 XML 两种数据模型定义。

XML 定义相比 PHP 定义有一个主要优势:一个模块中的 XML 定义可以修改另一个模块中定义的数据模型。例如,可以创建一个扩展模块,在安装时向标准类"Server"添加一个属性,而无需替换整个 “itop-config-management” 模块。

模块内容

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

文件名说明
extension.xmliTop 2.4 新增:XML 定义文件,用于 iTop 2.4 及以上版本。如果模块位于已包含 extension.xml 文件的文件夹中,则此文件的内容被忽略
module.my-module.php模块定义文件。必需。包含模块的描述(名称、版本、对其他模块的依赖等)及其组件
datamodel.my-module.xmlXML 数据模型。安装时"编译"将基于 XML 定义生成 model.xxxxx.php 文件。XML 文件可以包含类、菜单和角色的定义
model.my-module.php如果选择直接用 PHP 定义数据模型,则在此文件中放置此类定义
main.my-module.phpPHP 代码和工具。对于包含大量 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

开发工作流

  1. 创建一个空模块
  2. 安装 iTop 开发实例,将您的空模块放在 “extensions” 文件夹中
  3. 在开发实例上安装工具包
  4. 编辑您的扩展模块,并使用工具包验证它
  5. 将扩展模块的更改应用到"生产"环境
  6. 使用一些示例数据测试您的模块。如有问题,回到第 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