自定义部件将外部服务引入 ServiceDesk Plus 以扩展应用程序的功能。 通过它们,您可以在 ServiceDesk Plus 中访问第三方应用程序和网页。 部件是可嵌入的用户界面组件,您可以使用自定义部件包来创建。
自定义部件仅适用于企业版 ServiceDesk Plus。
目前,您可以为每个部件创建 10 个部件和 4 个部件项。
您可以将自定义部件配置为可从以下位置访问:
- 仪表板
- 网页标签
- 请求明细
- 变更明细
- 资产明细
- 发布明细
- 自定义模块明细
创建自定义部件包
自定义部件包是创建自定义部件所需的配置文件和资源文件(如 html、png、js 或 css 文件)的捆绑包。 这有助于嵌入第三方应用程序和扩展 ServiceDesk Plus 的功能。
要创建自定义部件包,请执行以下操作
- 使用资源文件开发应用程序软件包。
- 创建一个 plugin-manifest.json 文件。
- 将应用程序软件包和 plugin-manifest.json 文件压缩为一个 zip 文件。
- 在自定义部件页面上传压缩文件。
以下文件介绍了创建应用程序软件包和插件-manifest.json 文件的步骤。
开发应用程序软件包
在应用程序文件夹中为部件创建一个资源文件。 生成指向部件项目登陆页面的 URL。 在 plugin-manifest.json 文件中配置路径 URL 时输入该 URL。
您可以使用 Util 函数在 ServiceDesk Plus 和自定义部件之间建立连接。 使用 Util 函数,您可以从自定义部件向应用程序服务器添加数据,或从自定义部件获取部件数据(如 URL 或任何数据)。
创建 Plugin-Manifest.JSON 文件
plugin-manifest.json 文件包含自定义部件的配置细节。 该文件中包含的某些key值是可选的,而其他key值则是必须的。
请使用以下指引为key提供值:
- 部件*: 一个 JSON 数组,其中包含自定义部件项目的详细信息。 您必须在自定义部件包中添加至少一个部件项目。 您最多可以添加四个部件项目。 每个部件项都必须具有以下属性集。
- 名称*: 部件项目的名称(最多 100 个字符)。
- 描述:部件项目的简要说明。
- path url*: 部件项目的 URL 路径。 示例格式:("/app/index.html)
- 属性 JSON:包含自定义部件项目的属性。
- 白名单: 输入要调用 API 的域 URL 路径。示例格式:("api.zoom.us")
- visible_to: 根据角色限制自定义部件对用户的可用性。
- 图标: 为部件项目提供图标的可选键。默认情况下,图标根据部件项目名称生成。通过在插件列表文件中输入图标 URL 作为 30X30 关键字的值,您可以上传最大尺寸为 30x30 像素的图标。图标会根据应用程序主题动态呈现为深色或浅色。
- 主题图标: 您可以为不同的主题提供不同的图标。主题图标的 URL 应包括 “深色 ”或 “浅色 ”版本。格式示例: "icons": {"dark": "/app/[icon-name].png", "light": "/app/[icon-name].png"}.
- 位置*: 定义 ServiceDesk Plus 中可呈现自定义部件的位置。 您必须提供至少一个部件项目的位置。 目前,您可以在以下位置配置自定义部件:
位置 | JSON Key 格式 | 描述 |
Web 标签 | "webtab" | 自定义部件将作为网页标签添加到导航窗格中。 |
主页 | "dashboard" (for Technicians and Requesters) | 自定义部件嵌入仪表板。 仪表板部件只能启用。 要添加部件,请单击仪表板上的新建 > 新部件。 |
如果为请求者启用了自定义部件,则可在请求者门户主页上嵌入仪表板部件。 |
请求详细信息页面 | "request.detail.tab" | 作为选项卡添加到请求详细信息页面。 |
"request.detail.rightpanel" | 已添加到请求详细信息页面的右侧面板。 |
变更详细信息页面 | "change.detail.tab" | 作为选项卡添加到变更详细信息页面。 |
"change.detail.rightpanel" | 已添加到变更详细信息页面的右侧面板。 |
发布详细信息页面 | "release.detail.tab" | 作为选项卡添加到发布详细信息页面。 |
"release.detail.rightpanel" | 已添加到发布详细信息页面的右侧面板。 |
资产详细信息页面 | "asset.detail.tab" | 已添加为资产详细信息页面的一个选项卡。 |
"asset.detail.rightpanel" | 已添加到资产详细信息页面的右侧面板。 |
自定义模块详细信息页面 | "cm_{modulename}.detail.tab" | 作为选项卡添加到自定义模块详细信息页面。 |
"cm_{modulename}.detail.rightpanel" | 已添加到自定义模块详细信息页面的右侧面板中 |
其他配置
附加配置(如连接或模块)可增强自定义部件的功能。附加配置的范围要么仅限于部件项目级别,要么全局适用于所有部件项目。
配置连接:
连接允许您将自定义部件与第三方 API 集成。通过在部件包中配置连接,您可以从自定义部件访问第三方应用程序。一个自定义部件最多可添加四个连接。
要在插件列表文件中配置连接,可以在创建连接后直接将连接详情复制为 JSON 字符串。转到管理 > 开发者空间 > 连接,然后从连接详细信息页面复制 JSON 代码段。
插件管理文件中配置的连接示例:
"connections": [{
"connectionLinkName":"twitter",
"connectionName":"twitter",
"serviceName":"twitter",
"userAccess":false,
"isUserDefinedService":false
}
],
范围: 此配置具有全局范围。 将为所有自定义部件项目配置连接。
删除自定义部件时,相关连接也会被删除。
配置模块
模块允许您收集和存储更多数据。数据可通过 JS API、API 或应用程序在自定义模块部件中填充和管理。自定义模块的详细信息只能通过自定义部件更新/删除。
自定义模块的显示名称、显示复数名称和 API 名称在应用程序中是唯一的。请在插件-管理文件的相应字段中添加唯一值。
插件管理文件中配置的模块示例:
Modules
"modules":[ {
"display_name": "zoom details1", //module name
"display_plural_name": "zoom_c3ustom_1widget",
"api_plural_name": "zoom_custom_3wi2dget",
"name": "zoom1_custo33m_widget",
"permission": { //persions for the module
"all": [
{
"field": "type",
"values": [
"user",
"technician"
],
"condition": "is",
"logical_operator": "and"
}
],
"allowed_users": "All"
},
"fields": [{
"additional_attributes":{"nullable":false}, //denotes its a mandory field
"display_name": "request_id",
"name": "request_id",
"field_type": "Single Line",
"only_numeric": false
},
{
"display_name": "meeting_id",
"name": "meeting_id",
"field_type": "Single Line",
"only_numeric": true
},
{
"display_name": "ticket_name",
"name": "ticket_name",
"field_type": "Single Line",
"only_numeric": false
},
{
"display_name": "start_time",
"name": "start_time",
"field_type": "Single Line",
"only_numeric": false
},
{
"display_name": "duration",
"name": "duration",
"field_type": "Single Line",
"only_numeric": false
},
{
"display_name": "cur_tech_name",
"name": "cur_tech_name",
"field_type": "Single Line",
"only_numeric": false
}],
}]
范围: 此配置针对每个部件项目。 如果自定义部件包有多个部件项目,用户可为每个部件项目配置唯一的自定义模块。
删除自定义部件时,相关的自定义模块也会被删除。
plugin-manifest.json 文件示例
{
"name": "Meeting Apps",
"widgets": [
{
"name": "Zoom Apps",
"description": "A widget that allows technicians to gain remote access to devices across different platforms.",
"locations": [
{
"name": "request.detail.rightpanel",
"is_enabled": true
}
],
"property_json": {
"icons":{
"dark":"/app/img/TV_icon.png"
},
"white_list": [
"api.zoom.us"
],
"visible_to": ["SDAdmin"],
},
"url": "/app/zoom.html"
}
],
"connections": [{
"connectionLinkName": "adminzoom",
"connectionName": "adminzoom",
"serviceName": "zoom",
"userAccess": false,
"isUserDefinedService": true,
"sharedBy": 5
}],
"modules":[ {
"display_name": "zoom details",
"display_plural_name": "zoom_custom_widget",
"description": "zoom custom widget details",
"is_attachment_supported": true,
"api_plural_name": "zoom_custom_widget",
"name": "zoom1_custom_widget",
"permission": {
"all": [
{
"field": "type",
"values": [
"user",
"technician"
],
"condition": "is",
"logical_operator": "and"
}
],
"allowed_users": "All"
},
"fields": [{
"additional_attributes":{"nullable":false},
"display_name": "request_id",
"name": "request_id",
"field_type": "Single Line",
"only_numeric": false
},
{
"display_name": "meeting_id",
"name": "meeting_id",
"field_type": "Single Line",
"only_numeric": true
},
{
"display_name": "ticket_name",
"name": "ticket_name",
"field_type": "Single Line",
},
{
"display_name": "start_time",
"name": "start_time",
"field_type": "Single Line",
},
{
"display_name": "duration",
"name": "duration",
"field_type": "Single Line",
},
{
"display_name": "cur_tech_name",
"name": "cur_tech_name",
"field_type": "Single Line",
}],
}]
}