本文档讨论以下主题:
本文档为开发人员提供过程信息,用于创建插件并在 ServiceDesk Plus 与其他各种第三方application之间建立集成。
一个完整的请求工作流需要支持团队执行不同的任务。某些情况下,支持团队可能需要通过访问相关第三方application来完成特定任务,而这可能会超出application限制。
因此,为了避免引入第三方application来执行任务这一繁琐过程,例如问题跟踪器集成、Active Directory 帐户创建以及新邮件帐户创建,您可以使用 ServiceDesk Plus 中的外部操作插件选项。该选项可帮助支持团队直接在“请求”页面中通过单击“操作”菜单执行各种与第三方相关的操作。
场景: 设想某个组织使用 ServiceDesk Plus 提供客户支持,并使用 JIRA 进行缺陷跟踪。这正是外部操作插件框架发挥作用的地方,借助它,他们可以在 ServiceDesk Plus 与 JIRA 之间构建集成。因此,他们可以通过“请求”页面中的“操作”菜单创建 JIRA 问题。 |
开发外部操作插件所需的技能
开发该插件需要具备以下方面的知识:
该插件设计为具有一个实现类,并且可以通过菜单调用。该菜单可在 ServiceDesk Plus 的“管理”模块下进行配置。
Java 类应扩展“DefaultActionInterface”,并通过“execute”方法提供实现。所需的导入类位于以下位置中的“AdventNetHelpDesk.jar”和“AdventNetServiceDeskCommon.jar”内:
"[SCP_HOME]\applications\extracted\AdventNetSupportCenter.eear\AdventNetHelpDesk.ear\".
package com.manageengine.servicedesk.actionplugin.sample; import com.manageengine.servicedesk.actionplugin.executor.ActionInterface import com.manageengine.servicedesk.actionplugin.executor.ExecutorData public class SampleActionImplementation extends DefaultActionInterface { public JSONObject execute(ExecutorData executorData) throws Exception { ExecutorData data = executorData;
ActionMenuData menuData = data.getActionMenuData(); String menuName = (String) menuData.getMenuName(); JSONObject scpValuesObj = data.getDataJSON();
//您可以在此处编写自己的实现
} } |
Execute 方法:
实现将在带有 ExecutorData 对象参数的 execute 方法中定义:
方法:Execute (ExecutorData)
返回:JSONObject
Executor Data:
ExecutorData 对象是 Execute 方法的一个参数。使用它,我们可以通过 getActionMenuData() 方法获取被调用菜单的详细信息。该方法将返回一个名为 ActionMenuData 的对象:
i) ActionMenuData - 它提供有关调用操作的菜单信息。
以下是可用于提取值的方法及其相应的数据类型:
参数
返回值
getMenuName
返回被调用的操作菜单名称。
String
getDisplayText
返回被调用菜单的显示名称。
String
getExecutorClass
返回为此菜单指定的 Java 执行类名称。
String
getAllowedRoles
返回允许使用此菜单的角色列表。
ArrayList
getAllowedTemplates
返回此菜单可用的模板列表。
ArrayList
ii) JSON 数据- 可通过在 ExecutorData 中调用 getDataJSON 方法来获取触发该菜单的请求详细信息。该方法将以 JSON 对象的形式返回详细信息:
示例数据如下所示:
{
"WORKORDERID": "1","REQUESTER": "Guest","CREATEDBY": "administrator","CREATEDTIME": "1469685688321","DUEBYTIME": "1469692888321","RESPONSEDUEBYTIME": "-1","FR_DUETIME": "-1","RESPONDEDTIME": "0","RESOLVEDTIME": "0","COMPLETEDTIME": "0","SHORTDESCRIPTION": "","TIMESPENTONREQ": "0hrs 0min","SUBJECT": "Bulk SMS 测试","REQUESTTEMPLATE": "默认请求","MODE": "电子邮件","SLA": "中等 SLA","ASSET": "","DEPARTMENT": " 人力资源部门","EDITORID": "null","EDITING_STATUS": "0","IS_CATALOG_TEMPLATE": "false","SITE": "新加坡支持","ISVIPUSER": "否","SERVICE": "","CATEGORY": "软件","SUBCATEGORY": "MS Office","ITEM": "安装","TECHNICIAN": "Heather Graham","TECHNICIAN_LOGINNAME": "Heather","STATUS": "打开","PRIORITY": "中等","LEVEL": "第 2 层","IMPACT": "","URGENCY": "高","IMPACTDETAILS": "-","REQUESTTYPE": "事件","APPROVAL_STATUS": "","CLOSURECODE": "","CLOSURECOMMENTS": "","FCR": "false","YETTOREPLYCOUNT": "","GROUP": "硬件问题","DESCRIPTION": "","Test": ""}
--------------------------------------------------------------------------------------------------------------------
有了这些信息,客户就可以编写自己的实现代码来执行所需操作。现在,有两种方式可以更新工单。第一种方式是使用 SDP 中提供的 REST API 支持来更新请求,或执行诸如添加工作日志、备注、解决方案等操作;第二种方式是使用操作插件框架支持的默认返回功能。
execute 方法返回一个 JSON 对象。默认情况下,如果返回的 JSON 符合支持的格式,则支持添加备注和更新请求。
a. 向请求添加备注
{ "message":"请求添加成功", "result":"success", "operation":[ { "INPUT_DATA": [ { "notes": { "notestext":"工单已在 JIRA 中创建,且信息已填充到 SDP 中" } }], "OPERATIONNAME":"ADD_NOTE" }], }
|
b. 更新请求
{ "message":"请求添加成功", "result":"success", "operation":[ { "INPUT_DATA": [ { "Jira ID":"35", "Jira Key":"SDP-3", "self":"http://jira-server/rest/api/2/issue/35" }], "OPERATIONNAME":"UPDATE_REQUEST" }], }
|
用于配置请求操作菜单
<?xml version="1.0" encoding="UTF-8"?>
<menus>
<menu name=""JiraIntegration"" refresh="true">
<displaytext>SCP 到 Jira 的集成</displaytext>
<roles>
<role>ModifyRequests</role>
</roles>
<template>
<template>系统定义模板</template>
</templates>
<invoke>
<class>com.manageengine.supportcenter.integrations.jira.action.JiraActionImplementation</class>
</invoke>
</menu>
<menu name=""SDP Integration"" refresh="true">
<displaytext>SCP 到 SDP 的集成</displaytext>
<roles>
<role>ModifyRequests</role>
</roles>
<templates>
<template>系统定义模板</template>
<template>测试</template>
</templates>
<invoke>
<class>com.manageengine.supportcenter.integrations.jira.action.SDPActionImplementation</class>
</invoke>
</menu>
</menus>
用于 JIRA 集成
注意:我们将提供一个适用于 JIRA 的默认实现。为此,客户需要定义另一个 xml,其中将包含JIRA 特定的实现。
<?xml version="1.0" encoding="UTF-8"?> <menus> <!-- 菜单名称应与 ActionMenu xml 中指定的名称匹配 --> <menu name="JiraIntegration"> <-- 指定应传递给 JIRA 的输入参数 --> <request> <!-- 登录 JIRA 所需的凭据 --> <username>administrator</username> <password>administrator</password> <!-- 用于执行操作的调用 URL --> <url>http://localhost:8080/rest/api/2/issue/</url> <!-- 传递给 URL 的参数 --> <param> <name>project</name> <type>projectpicker</type> <value>SCP</value> </param> <param> <name>Issuetype</name> <type>select</type> <value>Bug</value> <!-- 可通过 $ 前缀指定动态参数。在这种情况下,变量的值将从 SDP 中获取并传递。 -->
</param> <param> <name>summary</name> <type>textfield</type> <value>$subject</value> <param> <name>priority</name> <type>select</type> <value>$priority</value> </param> <param> <name>description</name> <type>textarea</type> <value>$description</value> </param> <param> <name>labels</name> <type>labels</type> <value>$JIRA_ISSUE_ID</value> </param> <param> <name>environment</name> <type>textarea</type> <value>$description</value> </param> <param> <name>duedate</name> <type>datepicker</type> <value>$dueByTime</value> </param> <param> <name>customfield_10002</name> <type>url</type> <value>$公司网站</value> </param> <param> <name>customfield_10100</name> <type>url</type> <value>$JIRA_选择列表</value> </param> <param> <name>customfield_10200</name> <type>float</type> <value>$Jira 数字字段</value> <param> <name>customfield_10300</name> <type>textfield</type> <value>$Jira_文本字段</value> </param> <param> <name>customfield_10301</name> <type>datetime</type> <value>$Jira_日期时间</value> </param> <param> <name>customfield_10302</name> <type>datepicker</type> <value>$Jira_日期选择器</value> </param> <param> <name>customfield_10303</name> <type>userpicker</type> <value>$Jira_用户选择器</value> </param> <param> <name>customfield_10304</name> <type>grouppicker</type> <value>$Jira_组选择器</value> <param> <name>customfield_10306</name> <type>textarea</type> <value>$Jira_自由文本字段</value> </param> </request> <success>已成功与 Jira 集成,Jira ID 为:$id</success> <failure>集成到 Jira 失败</failure> <!-- 指定在执行操作后需要更新的字段 --> <response> <param> <!-- name 表示从 JIRA API 接收到的返回 JSON 对象中的属性 --> <name>JIRA_ISSUE_ID</name> <!-- value 表示应使用 JIRA 值更新的 SDP 字段 --> <value>$ id</value> </param> <param> <!-- name 表示从 JIRA API 接收到的返回 JSON 对象中的属性 --> <name>JIRA_ISSUE_URL</name> <!-- value 表示应使用 JIRA 值更新的 SDP 字段 --> <value>$ self</value> </param> <!-- 如果操作结束后需要添加备注,则需在此处指定。$message 将采用 JIRA 返回的 json 对象中的值。也可以提供硬编码消息。 --> <notes> <note>工单已在 jira 中创建,键值为:$key,ID 为:$id</note> <note>工单已在 jira 中创建,issueID 为:$id</note> </notes> </response> </menu> <menus>
|