外部操作插件

 本文档讨论以下主题:

本文档的目的

本文档为开发人员提供过程信息,用于创建插件并在 ServiceDesk Plus 与其他各种第三方application之间建立集成。

关于外部操作插件

一个完整的请求工作流需要支持团队执行不同的任务。某些情况下,支持团队可能需要通过访问相关第三方application来完成特定任务,而这可能会超出application限制。

因此,为了避免引入第三方application来执行任务这一繁琐过程,例如问题跟踪器集成、Active Directory 帐户创建以及新邮件帐户创建,您可以使用 ServiceDesk Plus 中的外部操作插件选项。该选项可帮助支持团队直接在“请求”页面中通过单击“操作”菜单执行各种与第三方相关的操作。

 

场景:

设想某个组织使用 ServiceDesk Plus 提供客户支持,并使用 JIRA 进行缺陷跟踪。这正是外部操作插件框架发挥作用的地方,借助它,他们可以在 ServiceDesk Plus 与 JIRA 之间构建集成。因此,他们可以通过“请求”页面中的“操作”菜单创建 JIRA 问题。

 

外部操作插件

 
开发外部操作插件所需的技能

开发该插件需要具备以下方面的知识:

  • 可扩展标记语言(XML)
  • JavaScript 对象表示法(JSON)
  • Java(尤其是接口和实现概念) 

设置插件

 该插件设计为具有一个实现类,并且可以通过菜单调用。该菜单可在 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();

 

//您可以在此处编写自己的实现

//返回类型应为 JSON

 

}

}

 

Execute 方法:

 实现将在带有 ExecutorData 对象参数的 execute 方法中定义:

  • 方法:Execute (ExecutorData)

  • 返回:JSONObject 

Executor Data:

ExecutorData 对象是 Execute 方法的一个参数。使用它,我们可以通过 getActionMenuData() 方法获取被调用菜单的详细信息。该方法将返回一个名为 ActionMenuData 的对象:

i) ActionMenuData - 它提供有关调用操作的菜单信息。

  • 方法: getActionMenuData()
  • 返回: ActionMenuData

以下是可用于提取值的方法及其相应的数据类型:

参数

返回值

getMenuName

 

返回被调用的操作菜单名称。

String

getDisplayText

 

返回被调用菜单的显示名称。

String

getExecutorClass

 

返回为此菜单指定的 Java 执行类名称。

String

getAllowedRoles

 

返回允许使用此菜单的角色列表。

ArrayList

getAllowedTemplates

 

返回此菜单可用的模板列表。

ArrayList

 

ii) JSON 数据- 可通过在 ExecutorData 中调用 getDataJSON 方法来获取触发该菜单的请求详细信息。该方法将以 JSON 对象的形式返回详细信息:

  • 方法: getDataJSON()
  • 返回: JSONObject

示例数据如下所示:
 

 {

    "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"

}],

}

 

 

默认集成(与 JIRA 集成)

用于配置请求操作菜单
 

 

<?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>