编写自定义脚本 - V1 API

 

您需要具备以下方面的基本知识:

  • JavaScript 对象表示法(JSON)
  • Python

 

自定义操作脚本文件通常具有以下结构:

 

  1. 导入所需的软件包
  2. 获取输入参数
  3. 实现逻辑
  4. 返回 JSON

 

导入所需的软件包

 

以下列出了最常用的软件包及其用途:

 

软件包    用途

Sys    获取输入参数

json    处理 JSON 数据

requests    发起 API 调用

datetime    将毫秒时间转换为所需的日期格式

  

获取输入参数

 

脚本文件的参数可使用 sys.argv[index] 获取,其中 index 从 1 开始,到传入参数的数量结束。

 

当传入的参数为 $COMPLETE_JSON_FILE(包含请求 JSON 的文件路径)时,可使用以下代码片段读取该 JSON 文件:

 

file_Path = sys.argv[1]
 
with open(file_Path) as data_file:
data = json.load(data_file)

 

 

实现逻辑

 

以下代码片段用于发起 API 调用:

 

with requests.Session() as s:
url = 'api_url'
r = s.post(url,verify=True, data=post_data,headers=headers)

 

请根据需要构造 api_url、post_data 和 headers。

 

以下代码片段用于将毫秒时间转换为所需的日期格式:

 

date = datetime.datetime.fromtimestamp(int(millisec)/1e3).strftime('%d %b %Y, %H:%M:%S')

 

 

构造返回 JSON

 

可以按如下方式构造示例 JSON,例如 {"key":"value"}:

 

 

json = {}

json["key"] = "value"

print(json)

 

可以按如下方式构造示例 JSON 数组,例如 [{"key":"value"}]:

 

json = {}

json["key"] = "value"

result = []

result.append(json)

print(result)

 

 

 

可以使用脚本返回的 JSON 执行某些操作。了解使用返回 JSON 执行的操作,请点击此处

 

以下示例展示了如何构造一个 JSON,以更新请求的附加字段 JIRA_ISSUE_ID 和 JIRA_ISSUE_URL,并添加相关备注。

 

 

jiraissueid = responseobj['id']

jiraissueurl = responseobj['self']

 

updateReqArray={}

updateReqArray['JIRA_ISSUE_ID']=jiraissueid

updateReqArray['JIRA_ISSUE_URL']=jiraissueurl

 

updateFieldsJson={"INPUT_DATA":[]}

updateFieldsJson['INPUT_DATA'].append(updateReqArray)

updateFieldsJson["OPERATIONNAME"]="EDIT_REQUEST"

 

note={}

note["notestext"] = "已创建 Jira 请求,ID 为:"+jiraissueid+"</br> 问题链接: "+jiraissueurl

 

noteObject={}

noteObject["notes"]=note

 

addNoteJson={}

addNoteJson['INPUT_DATA']=[]

addNoteJson['INPUT_DATA'].append(noteObject)

addNoteJson["OPERATIONNAME"]="ADD_NOTE"

 

resultjson={}

resultjson["result"] = "success"

resultjson["message"] = "已创建 Jira 请求。已添加包含问题 ID 和 URL 的备注。"

resultjson["operation"] = []

resultjson["operation"].append(updateFieldsJson)

resultjson["operation"].append(addNoteJson)

 

#返回 JSON

print(resultjson)

 

 

 

输入参数

 

请求参数和所有 API 参数都可以作为参数传递给脚本文件。请注意,参数不能传递给类文件。

 

下表列出了受支持的参数。

 

参数    返回的请求属性

$WORKORDERID    请求 ID

$REQUESTER    请求人姓名

$CREATEDBY    代表请求人创建工单的技术人员姓名

$CREATEDTIME    请求创建时间(毫秒)

$DUEBYTIME    到期时间(毫秒)

$RESPONSEDUEBYTIME    响应到期时间(毫秒)

$RESPONDEDTIME    请求响应时间(毫秒)

$RESOLVEDTIME    请求解决时间(毫秒)

$COMPLETEDTIME    请求关闭时间(毫秒)

$SHORTDESCRIPTION    简短描述

$TIMESPENTONREQ    请求耗时(小时和分钟)

$SUBJECT    主题

$REQUESTTEMPLATE    用于创建相应请求的请求模板(字符串)

$MODE    模式(字符串)

$SLA    服务级别协议(字符串)

$ASSET    资产(字符串)

$DEPARTMENT    部门(字符串)

$EDITORID    服务请求编辑者的用户 ID(Long)

$EDITING_STATUS    服务请求的编辑状态(Long)

$IS_CATALOG_TEMPLATE    表示该请求是通过服务目录还是事件目录创建的(布尔值)

$SITE    站点(字符串)

$ISVIPUSER    表示该用户是否为 VIP(是或否)

$SERVICE    服务类别(字符串)

$CATEGORY    类别(字符串)

$SUBCATEGORY    子类别(字符串)

$ITEM    项目(字符串)

$TECHNICIAN    已分配技术人员的姓名

$TECHNICIAN_LOGINNAME    当前登录技术人员的登录名

$STATUS    状态(字符串)

$PRIORITY    优先级(字符串)

$LEVEL    级别(字符串)

$IMPACT    影响(字符串)

$URGENCY    紧急程度(字符串)

$IMPACTDETAILS    影响详情

$REQUESTTYPE    请求类型

$APPROVAL_STATUS    请求的审批状态(字符串)

$CLOSURECODE    关闭请求的原因(字符串)

$CLOSURECOMMENTS    关闭请求的说明

$FCR    首次呼叫解决(布尔值)

$YETTOREPLYCOUNT    技术人员尚未回复的回复数量

$GROUP    组(字符串)

$DESCRIPTION    完整描述

$LOGIN_NAME    提出请求时使用的登录名

$LOGGEDIN_USER_NAME    提出请求的用户显示名称

 

 

 

其他受支持的参数 

 

$DIFF_JSON ---> 当请求被更新时,先前数据与更新后数据之间的差异将以 JSON 字符串形式传递。

$COMPLETE_JSON_FILE ---> 完整请求对象和差异对象将保存到一个 JSON 文件中,并将文件路径作为字符串传递。例如: (SDP_Home\integration\custom_scripts\request\12_1426143538036.JSON)。

 

 

$COMPLETE_JSON 结构

 

{

  "request": {

    "WORKORDERID": "17",

    "REQUESTER": "Annie",

    "CREATEDBY": "Heather Graham",

    "CREATEDTIME": "1477984359352",

    "DUEBYTIME": "1477991559352",

    "RESPONSEDUEBYTIME": "1477991559052",

    "RESPONDEDTIME": "0",

    "RESOLVEDTIME": "0",

    "COMPLETEDTIME": "0",

    "SHORTDESCRIPTION": "请为新入职员工创建一个用户账户,并提供所请求的资源。",

    "TIMESPENTONREQ": "0hrs 0min",

    "SUBJECT": "新员工入职请求表",

    "REQUESTTEMPLATE": "新员工入职",

    "MODE": "Web Form",

    "SLA": "中等 SLA",

    "ASSET": "iPhone 6 - PO# Apple_iPhone_43[52], MacBook Pro",

    "IS_CATALOG_TEMPLATE": "false",

    "SITE": "Zoho Corp - Chennai",

    "ISVIPUSER": "否",

    "SERVICE": "用户管理",

    "CATEGORY": "用户管理",

    "TECHNICIAN": "Shawn Adams",

    "TECHNICIAN_LOGINNAME": "shawn.adams",

    "STATUS": "打开",

    "PRIORITY": "中等",

    "LEVEL": "第 1 级",

    "IMPACT": "中等",

    "URGENCY": "正常",

    "REQUESTTYPE": "新员工入职请求",

    "FCR": "false",

    "INTERESTEDPARTY": "hradmin1@org.com,hradmin2@org.com",

    "GROUP": "人力资源组",

    "DESCRIPTION": "请为新入职员工创建一个用户账户,并提供所请求的资源。",

    "Languages Known": [

      "Java",

      "Python",

      "SQL"

    ],

    "Job Type": "软件开发工程师",

    "Qualification": "计算机科学学士",

    "Address": "我的门牌号:xx,\r\n我的街道名称,\r\n我居住的城市。\r\n邮政编码",

    "Expected DOJ": "15 Nov 2016, 08:00:00",

    "New Joinee Name": "John William",

    "Years of Experience": "2.0",

    "LOGIN_NAME": "heather.graham",

    "LOGGEDIN_USER_NAME": "Heather Graham"

  }

}

 

 

$DIFF_JSON 结构

 

{

  "diff": {

    "DUEBYTIME": {

      "OLD": "1476961659524",

      "NEW": "1476940059524"

    },

    "MODE": {

      "OLD": "电子邮件",

      "NEW": "电话"

    },

    "SLA": {

      "OLD": "低 SLA",

      "NEW": "中等 SLA"

    },

    "SERVICE": {

      "OLD": "",

      "NEW": "数据管理"

    },

    "CATEGORY": {

      "OLD": "桌面硬件",

      "NEW": "常规"

    },

    "TECHNICIAN": {

      "OLD": "Howard Stern",

      "NEW": "Jeniffer Doe"

    },

    "PRIORITY": {

      "OLD": "低",

      "NEW": "中等"

    },

    "LEVEL": {

      "OLD": "",

      "NEW": "第 2 级"

    },

    "IMPACT": {

      "OLD": "低",

      "NEW": "中等"

    },

    "URGENCY": {

      "OLD": "低",

      "NEW": "正常"

    },

    "REQUESTTYPE": {

      "OLD": "事件",

      "NEW": "信息请求"

    },

    "GROUP": {

      "OLD": "网络",

      "NEW": "打印机问题"

    }

  }

}

 

每当请求被编辑时,都会生成 DIFF_JSON,可用于根据字段更改来设计工作流。

 

$COMPLETE_JSON_FILE

 

$COMPLETE_JSON_FILE 表示文件路径,该文件中将 $COMPLETE_JSON 和 $DIFF_JSON 一并保存在单个 JSON 中。与其向类/脚本传递过多参数,不如传递文件路径,然后由脚本打开文件并访问所需的值。

 

该文件是临时创建的,并会在脚本执行后删除。

 

临时 JSON 文件创建于 SDP_Home\integration\custom_scripts\request\ 目录下,文件名为 <requestid_timestamp>.json。