# PMP集成企业工单系统 #### (功能只适用于企业版) ## 概览 PMP可与多种工单系统集成，自动化验证与特权访问相关的服务请求。通过集成，确保用户只能访问有效的工单ID中规定的授权的特权密码。这样也可以扩展PMP的工作流，将授权访问的审批与服务请求的验证有机地结合在一起。 ## 集成是如何工作的? PMP与企业工单系统集成，用户需要输入工单ID来进行密码检索或重置。PMP授权访问之前要验证以下选项： 验证工单系统中是否存在用户输入的工单ID 验证该工单是否没有被关闭 用户是否有权查看该密码，从而访问该资源 尝试密码重置时，验证所需的权限 除了验证以上默认的几个选项外，您还可以自定义验证条件标准来授权密码访问。整个过程是完全被审计的 - 就是说，特权行动可以追溯到工单ID。工单系统中凭借工单ID追踪密码访问。此外，您还可以创建自定义报表，显示通过工单ID进行的特权访问。 ## 如何集成? PMP与工单系统集成的过程很简单，PMP目前支持与ManageEngine ServiceDesk Plus On-Demand, ServiceDesk Plus 及 ServiceNow的集成。您也可以通过指定自定义Java类的方式，与其他的任何工单系统进行集成。 #### 集成工单系统： 打开管理 >> 全局，点击工单系统集成 在打开的界面中,您可以选择您希望集成的工单系统(从支持的工单系统列表中进行选择；如果列表中没有您想要的工单系统，选择"其他") #### 集成支持的工单系统： 集成支持的工单系统是很简单的，您只需提供必要的信息就能与工单系统建立连接。 #### 配置连接 从根本上来说，集成是通过对应的工单系统所提供的REST API来实现的。因此，您需要指定/生成认证令牌（AUTH Token）及工单系统的URL。您可以从相应的网站获得各自的认证令牌（AUTH Token） - ManageEngine ServiceDesk Plus On-Demand或ServiceDesk Plus MSP或ServiceDesk Plus或ServiceNow. 默认情况下，PMP将验证工单系统中是否存在用户输入的工单ID，以及该工单是否没有被关闭。 如果验证之后满足这些条件，则认为工单系统的集成验证工作完成。 #### 可选的高级配置 如果您需要验证更多信息/条件（除了工单ID和工单状态），可点击页面中的更多 --> 高级配置。例如：您可以选择检查PMP中提出密码访问请求的用户是否为工单系统中的请求人（REQUESTER），类似地，可以指定检查的其他条件，如：工单系统的优先级（PRIORITY）是否为HIGH等。PMP为您提供很大的弹性，您可以检查工单系统的任何参数，包括自定义字段。 进行高级配置，点击更多 >> 高级配置链接。在弹出的界面中，您可以进行高级配置。高级配置可以设置一系列可用的条件，也可以指定自定义类。 #### 高级配置的选项 1.指定PMP与工单系统中项目的映射关系 要验证PMP中的特定列是否与工单系统的指定列是否一致，需要选择"指定PMP与工单系统中项目的映射关系"。 字段名称包含 - 资源名称、资源类型、用户账户、PMP用户名、DNS名称等等。还包括PMP中创建的定制字段。 通过选择字段,您可以选择筛选的条件 工单系统列列出了(包括自定义字段)工单系统中可用的字段。您需要选择必须与PMP映射的字段。 例如您可以选择PMP中的RESOURCE NAME与工单系统ASSET映射。一旦你指定这样的映射，在授权访问密码之前，PMP将检查PMP指定的RESOURCE NAME是否与工单系统ASSET匹配。只有在验证成功，才会授予访问权限。 2.要在工单系统中检查的条件 验证工单的具体条件是否匹配，您需要选择'要在工单系统中检查的条件'。默认情况下，该选项处于未选择的状态。 您可以选择任意数量的额外字段并且PMP会验证所有的工单系统。默认情况下PMP列出了工单系统中所有的可用字段，额外字段中还包括自定义字段。您可以选择PMP需要验证的值。 #### 测试工单系统 集成完成后，您可以测试一下确保PMP能够正确地与工单系统建立通讯。点击更多设置"测试设置"链接。作为测试的一部分，您也可以通过获取自定义段 获取PMP高级设置中的自定义段。 #### 自定义实现类 如果高级配置不能满足您的需求,您可以提供您自己的自定义实现并将所实现类的Jar文件更新到PMP中，实现集成。了解更多关于这方面的内容，请点击'集成其他工单系统'，查看相关步骤。 #### 工单系统验证执行和异常 一旦完成了工单系统集成，集成立即生效并且用户需要使用有效的工单ID用以访问密码。通过设置，超级管理员可以免于强制工单ID验证。另外，作为访问控制流的一部分，用户会强制要求产生工单ID并且验证工单ID后访问权限会自动授予。 您也可以有选择的启用/禁用资源组的工单验证。选择"资源组" >>点击"批量配置"标签中的"配置工单系统的信息"。 从'全局设置'中，通过"允许用户不用工单ID而直接取回密码"和"允许用户不用工单ID而直接重置密码"选项您可以选择性地允许或限制用户。 另外，您还可以对用户组进行的设置，点击管理 >>用户组页面的设置图标。 #### 禁用工单系统集成 如果需要，您可以随时禁用工单系统集成，仅需要勾选工单系统页面中的'工单系统目前被禁用 '选项。 #### 集成其他工单系统 如果您需要集成其他工单系统，可以将您的自定义实现类与PMP集成。为了引导用户完成这一操作，我们以集成Zendesk作为例子解释这一过程，如下： #### 步骤 1: 创建你的自定义类 参考为集成Zendesk创建的实现类样本，实现类的重要方面解释如下： #### 生成认证令牌 第一步是生成工单系统的认证令牌以确保能够与PMP建立连接，生成TAUTH TOKEN后，确保管理员提供的凭证能够访问工单系统。您可以通过直接提供实现类的凭证或者生成并使用令牌来完成。 下面的代码片段显示了如何生成工单系统特权用户的Base64 Authstring。当REST API是基于Base64 Authorization文件头的时候，下面的代码就会起作用。一些工单系统提供内在用户界面的AUTH-Token。这种情况下，你可以直接使用验证参数。另外，在实现类中为了不使用硬编码的用户名和密码，您可以跳过这一部分使REST API直接调用java或其他编译器生成的Base64令牌。 参考下面的代码片段: //从Zendesk登录凭证中构建Authstring String username = "username@example.com"; //Zendesk用户名 String password = "zendeskpassword"; //Zendesk密码 Base64 encoder = new Base64(); byte[] encodedPassword = (username + ":" + password).getBytes(); byte[] encodedString = encoder.encodeBase64(encodedPassword); String authStr = new String(encodedString); #### 步骤 2: 检查与工单系统的连接 使用REST API，PMP可以从工单系统中获取工单的信息。每个工单系统都遵循着自己的传播工单明细的过程。参照各自的文档来验证该过程。获取工单信息后，您需要进行验证。 参考下面的代码片段: String sUrl = "https://<zendesk-instance>.zendesk.com/api/v2/tickets/"; //REST API调用Zendesk sUrl = sUrl + ticketId +".json"; //工单ID，用于同PMP用户提供值进行验证 URL url = new URL(sUrl); HttpsURLConnection connection = (HttpsURLConnection) url.openConnection(); connection.setRequestProperty("Authorization","Basic "+authStr); //设置Authstring头文件 #### 步骤 3: 验证PMP指定列是否与选择的工单系统匹配(可选配置) 参考下面的代码片段验证PMP指定列是否与选择的工单系统匹配(例如，您可以选择验证PMP指定的RESOURCE NAME是否与工单系统SUBJECT匹配。一旦设置完成，在授权访问密码之前，PMP将检查PMP指定的RESOURCE NAME是否与工单系统SUBJECT匹配(subject是否包含资源名称)。只有在验证成功，才会授予访问权限： String assetName = (String)pmpColumns.get("Resource Name");//PMP密码完成相关操作的资员名称 String subject = (String)ticket.get("subject");//获取工单subject值 boolean descriptionCheck = subject.toLowerCase().contains(assetName.toLowerCase()); //检查工单的描述是否包含用户账户的资源名 #### 步骤 4: 验证要在工单系统中检查的条件(可选配置) 验证工单的具体条件是否匹配，您需要选择'要在工单系统中检查的条件'。默认情况下，该选项处于未选择的状态。您可以选择任意数量的额外字段并且PMP会验证所有的工单系统。默认情况下PMP列出了工单系统中所有的可用字段，额外字段中还包括自定义字段。您可以选择PMP需要验证的值。请参考下面实现类的代码片段: JSONObject ticket = (JSONObject)ticketingOuput.get("ticket"); String status = (String)ticket.get("status"); boolean statusCheck = "open".equalsIgnoreCase(status); //检查工单状态是否处于open状态 #### 步骤 5: 编译 编译类路径中的jar文件(jar保存在<PMP_HOME>\lib文件夹中) AdventNetPassTrix.jar; json_simple-1.1.jar; commons-codec-1.4.jar 例如， javac -d . -cp AdventNetPassTrix.jar;json_simple-1.1.jar;commons-codec-1.4.jar ZendeskImpl.java - (For Windows) javac -d . -cp AdventNetPassTrix.jar:json_simple-1.1.jar:commons-codec-1.4.jar ZendeskImpl.java - (For Linux) #### 步骤 6: 配置在PMP中安装 实现类文件作为一个单独的jar并保存在PMP_HOME\lib文件夹中 重启PMP服务以使PMP能够使用该实现类 进入管理 >> 全局并点击工单系统集成 在打开的界面中选择其他(集成其他工单系统)或已集成工单系统'高级设置'中的'实现类'选项(如果您想扩展功能) 选择实现类的名称 功能实现必须通过另一个管理员，其他任一位管理员(除了请求的创建者)将会收到关于请求批准的警告 如果一位管理员批准了该实现类，那么它就可以使用了 启用后，工单系统流将强制密码检索和密码重置 了解更多信息，请参考集成Zendesk实现类样本。 #### 实现类提示 对于上面步骤3和步骤4,您可能需要提供实现类的额外信息。详细信息请参考下面的建议: #### PMP中的列 通过PMP列参数表示用户账户列表数据工单请求上升： PMP用户名 - 登录用户名 资源名称 - 资源的名称 DNS名称 - 资源的IP地址 用户账户 - 账户名称 资源类型 - 被访问的资源类型(Windows/WindowsDomain/Linux等) 资源描述 - 资源的有关描述 部门 - 资源所属的部门 位置 - 资源位置 域名 - 资源所属域名 请求类型 - 工单系统调用的请求类型。它可能是： RETRIEVAL - 密码访问 REQUEST - 通过访问控制工作流引发密码访问请求 RESET - 密码重置 AUTOLOGON - "开放连接"请求 用户组织名称 - 请求用户的组织名称 用户账户组织名称 - 请求账户所在的组织名称 除此之外，额外的列如下所示: 资源附加字段 - 资源@<field_name> 账户附加字段 - 账户@<field_name> #### 访问工单系统的凭证 AUTHTOKEN - 集成界面给出的认证令牌值 TICKETINGSYSTEMURL - 集成界面给出的URL #### 高级配置明细 ISPMPTICKETCRITERIA - 查看PMP/工单系统是否已配置 (Boolean - true or false) PMPTICKETCRITERIACOLUMNS - PMP和工单系统之间的映射信息。数组中每个元素代表一个标准。例如，PMP'用户账户'列必须与工单系统'REQUESTER'列相匹配，'C1'中的验证标准为'EQUAL' JSONArray - [ ["C1","User Account","REQUESTER","EQUAL"], ["C2","PMP User Name","TECHNICIAN","EQUAL"] ] PMPTICKETCRITERIA - 指定不同的标准之间的关系。'PMPTICKETCRITERIACOLUMNS'中的每个元素的第一个参数作为标准名称 。它给出了标准之间的关系 (String - Example: C1 or C2) ISTICKETVALUECRITERIA - 检查工单系统的验证值是否已配置 (Boolean - true or false) TICKETVALUECRITERIACOLUMNS - 工单满足的映射明细。数组中每个元素代表一个标准。例如，标准'C1'中，工单'STATUS'列必须为其他值而不是'Closed' JSONArray - [ ["C1","STATUS","Closed","NOT_EQUAL"], ["C2","URGENCY","high","EQUAL"], ["C3","IMPACT","high","EQUAL"] ] TICKETVALUECRITERIA - 指定不同的标准之间的关系。'TICKETVALUECRITERIACOLUMNS''中的每个元素的第一个参数作为标准名称。它给出了标准之间的关系 (String - Example: C1 or (C2 and C3) ISTICKETCHANGEIDSTATUS - 检查验证系统变更状态是否已配置(true或false) TICKETCHANGEIDSTATUS - 关联工单ID值的'变更ID状态' #### 匹配参数 EQUAL - 两个参数的值相同 NOT_EQUAL - 两个参数的值不同 CONTAINS -包含第二个参数的值 NOT_CONTAINS - 第一个参数值不包含第二个参数的值 STARTS_WITH - 第一个参数必须从第二个参数的值开始 ENDS_WITH - 第一个参数必须与第二个参数的值结束 (比较参数的日期) LESS_THAN - 第一个参数日期值应小于第二个 GREATER_THAN - 第一个参数日期值应大于第二个 LESS_THAN_EQUAL - 第一个参数日期值应该小于或等于第二个 GREATER_THAN_EQUAL - 第一个参数日期值应该大于或等于第二个 根据匹配参数,得到验证。 ### ServiceNow定制实现的代码片断 如果高级配置不满足你的要求,你可以有一个定制的实现类。您可以扩展PMP提供的默认实现类和额外功能。下面的例子展示了如何将ServiceNow创建的默认实现类扩展为自定义实现类。
    package com.manageengine.ts;
    import java.util.Properties;
    import org.json.simple.JSONObject;
    import com.adventnet.passtrix.helpdesk.ServiceNowImpl;

    //ServiceNow custom implementation
    public class ServiceNowCustomImpl extends ServiceNowImpl
    {
      public boolean checkViewHelpDeskRequest(String ticketId, Properties pmpColumns, Properties credentialDetails, JSONObject criteriaDetails)
       throws Exception
      {
    	boolean result = super.checkViewHelpDeskRequest(ticketId, pmpColumns, credentialDetails, criteriaDetails);
    	//Your own implementation
    	return result;
      }
    }
下表列出了易于与PMP集成的工单系统的默认功能处理类：
ServiceDesk Plus On-Demand | com.adventnet.passtrix.helpdesk.ServiceDeskPlusOnDemandImpl
ServiceDesk Plus MSP | com.adventnet.passtrix.helpdesk.ServiceDeskPlusMSPImpl
ServiceDesk Plus | com.adventnet.passtrix.helpdesk.ServiceDeskPlusOnPremiseImpl
ServiceNow | com.adventnet.passtrix.helpdesk.ServiceNowImpl
### 接口描述 工单系统集成的接口：
    package com.manageengine.ts;

    import java.util.Properties;
    import org.json.simple.JSONObject;

    // This class provides the methods to implement ticketing system integration. You need to implement this interface
    public interface TicketingSystemInterface
    {
      /**
       * Used to display the error message while doing the ticketing system related operations. The output gets reflected in audit trails.
       * @return Error message, if the ticketing system accessible, return null. Otherwise, return a proper error message.
       */
      public String getErrorMsg();

      /**
       * Used to return the properties related to the ticketing system operation
       * @return Comments and needed message
       */
      public Properties getRequestProperties();

      /**
       * Used for testing configuration setup. While testing, administrator will be able to get ticket details from the ticketing system.
       * @param tsName Ticketing system Name
       * @param tsUrl Ticketing system Web URL
       * @param authToken Authentication Token assigned to a technician of ticketing system (Base64 authorization string constructed
                          using login credentials in the case of ServiceNow ticketing system)
       * @param ticketId Ticket ID given as the input  ((Ticket ID/Sys ID in the case of ServiceNow ticketing system)
       * @param Ticketing System operation type
       * 	{@value 0} Ticketing Operation
       * 	{@value 1} Change Related Operation
       * @return the output from ticketing side
       * @throws Exception
       */
      public JSONObject helpdeskCheck(String tsName, String tsUrl, String authToken, String ticketId, String operation) throws Exception;

      /**
       * Actual function that will be called upon whenever a ticketing system related operation is done from PMP GUI
       * @param ticketId Ticket ID (Ticket ID/Sys ID in the case of ServiceNow ticketing system)
       * @param pmpColumns Details of the PMP account for which ticketing system query is raised
       * @param credentialDetails Key details of ticketing system (Authentication token or Base64 authorization string
                          and web URL of ticketing system)
       * @param criteriaDetails Criteria mapping done as part of advanced configuration
       * @return Final output that will be sent to PMP server
       * 	{@value true} Success case - Allows the operation to proceed
       * 	{@value false} Failure case - Denies the operation to proceed
       * @throws Exception
       */
      public boolean checkViewHelpDeskRequest(String ticketId, Properties pmpColumns, Properties credentialDetails, JSONObject criteriaDetails)
       throws Exception;

    }
版权所有 ©2016, 卓豪（北京）技术有限公司，保留一切权利。

顶部