1.iTop基本架构图
iTop依赖于XML格式定义的元数据类型,其基本架构如下图所示,


其中黄色的部分是我们可以进行二次开发的地方。可以从DataModel开始进行扩展,这只需要编写符合格式的XML文件即可,XML文件中定义在标准Model基础上增加的部分,以单独的文件存放,将来iTop升级的时候可以直接随系统升级。

  1. iTop文件夹结构
    iTop Extension二次开发-概览_第1张图片
    几个特殊文件夹的说明如下,
    • conf:按照不同的环境保存的配置文件,每个环境一个文件(比如production环境、test环境等)。自iTop2.0开始,多个不同的运行环境可以同时存在,操作同一个数据库。环境由配置文件及datamodel组成。如上面的图片,可以看到toolkit创建的新的环境及datamodel,这样所有的model都可以在toolkit环境中编译测试,测试无误后合并到production环境。
    • data: 系统产生的数据,如上传的图片等
    • datamodels: 按照不同的iTop版本保存的数据定义,这也是我们首先可以开始定制系统的地方.
    • env-xxxx: 存放经过编译的DataModel,每次系统升级或者重装时,这个文件夹都会被重新创建。所以修改datamodel不要直接在这个目录下修改,否则可能会丢失。
    • extensions: 非标的扩展存放的地方
    • log: 日志文件夹, 如安装的setup.log或错误信息error.log等。
    • 除以上文件夹外,其余都属于iTop的系统目录,应用系统安装完成后也不会再向这些目录写入内容。可以直接标记为只读即可。

3.模块与扩展

  • 模块是一组XML Model、PHP类、JS、CSS、PHP页面、图片等的集合,至少包含一个名为model.{model name}.php的文件。安装时,iTop会将模块的所有文件作为一个整体来处理。
  • 扩展是模块的集合,安装过程中iTop会扫描extension目录下的所有扩展。每个扩展以一个单独的目录存放,在该目录下至少有一个名为extension.xml的文件。如果扩展由单个模块组成,建议扩展的所有文件都可以放在同一级目录下,包括extension.xml,module.xxxx.php,datamodel.xxxx.xml等。如果扩展由多个模块组成,则建议每个模块单独存放一个目录, 扩展的根目录下只保留extension.xml文件。
    如果同一个模块被不同的扩展使用,则iTop只会安装一份版本最高的副本。

XML Model的定义可以用来覆盖其他模块中相同的数据定义,比如想扩展标准的计算机模型定义,开发者没必要去修改其所在的itop-config-management模块,只需在扩展中定义并重新安装即可。以后升级,itop也会自动平滑升级。当然数据模型(model)也可以在php文件中定义,但会失去覆盖其他模块定的便利。

模块的文件组成如下,

File Name Description
extension.xml iTop 2.4 及以上开始支持, 与模块的php文件的功能类似, 但是的扩展可以支持多个模块. 如果扩展的根目录下已经含有同名文件,则模块中的这个文件将被忽略
module.my-module.php 必须的模块定义文件. 定义模块的描述(名字,版本,对其他模块的依赖,下级部件等)
datamodel.my-module.xml XML数据定义. 在安装编译的时候,系统将会根据定义将其编译model.xxxxx.php. XML中可以包括类、菜单或配置文件的定义。
model.my-module.php 如上段所说,模块的定义也可以使用PHP文件,如果不使用XML,则可以使用这个文件
main.my-module.php PHP代码及工具类.有些模块包含很多php代码,可以将分段的代码存在这里并嵌入到XML定义中去。
images 良好的习惯是使用这个目录存放模块的图片
en.dict.my-module.php 字典文件,需要做本地化时,可以使用语言加上字典文件

需要注意的是,iTop本身使用以iTop开头的模块命名,为了区分,自行定制的模块建议使用自己的公司名字开头。

4.创建模块的步骤

  • 从官网下载空白模板文件https://www.itophub.io/wiki/page?id=2_6_0%3Acustomization%3Adatamodel
  • 安装一个开发环境,将空白模板放在extension目录下
  • 安装toolkit工具包http://www.combodo.com/documentation/iTopDataModelToolkit-2.3.zip
  • 编辑模块文件,并用toolkit校验是否有错误
  • 将校验好的模块应用到生产环境。
  • 使用测试数据进行测试,如果有问题重新进行模块编辑。

除模块中的XML文件需要被编译成PHP文件并重新安装以外,模块中的其他文件每次只是复制到生产环境即可。所以建议可以将其他文件在linux中创建一个连接,放在生产环境的相应目录下,这样对其他文件的修改可以立即生效。
将开发好的模块应用到生产环境很简单,将编译好的扩展文件夹复制到生产环境的extension目录下,设置目录权限(只读或读写),然后重新运行安装即可。

  1. Toolkit工具的使用
    安装完毕后,使用http:///toolkit.访问toolkit。
    使用第一个页签检查是否有错误
    iTop Extension二次开发-概览_第2张图片

**如果模块有依赖项,则依赖的顺序非常重要,如果在此检查中发现XML datamodel loader: could not find node for class/XXXX错误,则需要检查依赖的定义顺序。

第一个页签完成后,可以到第二个页签,用来检查数据库架构,并真正修改数据库的结构。这同样会影响到生产数据库。因为他们用的是同一份数据库。
iTop Extension二次开发-概览_第3张图片

第三个页签用来检查数据同步的数据源,如果外部数据源对数据架构有影响,则此处会直接检查并修正。