首页 > 解决方案 > Maximo 与外部 JSON API 的集成

问题描述

我找到了从 Maximo 调用 JSON/REST API 调用到网络上的外部系统的各种方法,但没有一个与我正在寻找的完全匹配,而且它们似乎都使用不同的方法,这导致我很多困惑,因为我对 jython 编码非常生疏。所以,希望大家能帮帮我。请尽可能详细:脚本语言、脚本类型(用于集成、对象启动点、发布通道进程/用户出口类等)。我的 Maximo 环境是 7.6.1.1。我创建了以下...

Maximo 对象结构 (MXSRLEAK):具有 3 个对象(SR、TKSERVICEADDRESS 和 WORKLOG)

Maximo Publish Channel (MXSRLEAK-PC):使用 MXSRLEAK 操作系统并包含我的处理规则,以在记录不符合条件时跳过记录 (SITEID = 'TWOO', TEMPLATEID IN ('LEAK','LEAKH','LEAKW' ), 历史标志 = 0)

Maximo 端点 (LEAKTIX):HTTP 处理程序、HEADERS ("Content-Type:application/json")、HTTPMETHOD ("POST")、URL (https:///api/ticket/?ticketid=)、USERNAME ("Maximo ") 和密码 ()。为 HEADERS、HTTPMETHOD 和 URL 检查 Allow Override。

此时,我需要一个自动化脚本来:

  1. 限制我发送的 Maximo 属性。这将根据 Maximo 方面发生的情况而有所不同。如果外部创建的(SOURCE = LEAKREP,EXTERNALRECID IS NOT NULL)服务请求票证被取消,我需要发送最后一个带有 logtype = "CANCOMM" 的工作日志(包括摘要/描述和详细信息/描述_长描述)以及更改的 USERID地位。如果外部创建的 SR 票证关闭,我需要使用 logtype <> "CANCOMM" 发送最后一个工作日志。如果外部创建的 SR 票证是重复的,我还需要包含一个名为“DUPLICATE”的自定义字段(它使用表域来显示 UI 中具有类似 TEMPLATEID 的所有打开的 SR)。如果“LEAK”SR 票证源自 Maximo(没有 SOURCE 或 EXTERNALRECID),
  2. 更新 API 调用的 Maximo End Point 值:HTTPMETHOD 为“POST”或“PATCH”,添加 HEADERS(授权:基本 Base64Userid/Password)等。

下面是我对自动化脚本的最新尝试,该脚本不起作用,因为“未定义 mbo”(我确信它存在更多问题,但它在脚本早期失败)。该脚本是为集成而创建的,其中发布通道 (MXSRLEAK-PC) 使用 Jython 中的 External Exit 选项。我试图从一个场景开始,其中 Maximo SR 票证最初是通过从外部系统到 Maximo 的 API 调用创建的,实际上是另一个 Maximo SR 票证的副本。我的想法是,如果这部分正确,我可以更新脚本以包含其他场景,例如 SR 票证是否源自 Maximo 并需要将新记录发布到外部系统。

我的最后一个问题是,拥有一个对象结构、发布通道、端点和自动化脚本来处理所有场景或为每个场景创建单独的脚本会更好(未来的眼睛更容易理解)吗?

from com.ibm.json.java import JSONObject
from java.io import BufferedReader, IOException, InputStreamReader
from java.lang import System, Class, String, StringBuffer
from java.nio.charset import Charset
from java.util import Date, Properties, List, ArrayList, HashMap
from org.apache.commons.codec.binary import Base64
from org.apache.http import HttpEntity, HttpHeaders, HttpResponse, HttpVersion
from org.apache.http.client import ClientProtocolException, HttpClient
from org.apache.http.client.entity import UrlEncodedFormEntity
from org.apache.http.client.methods import HttpPost
from org.apache.http.entity import StringEntity
from org.apache.http.impl.client import DefaultHttpClient
from org.apache.http.message import BasicNameValuePair
from org.apache.http.params import BasicHttpParams, HttpParams, HttpProtocolParamBean
from psdi.mbo import Mbo, MboRemote, MboSet, MboSetRemote
from psdi.security import UserInfo
from psdi.server import MXServer
from psdi.iface.router import Router
from sys import *

leakid = mbo.getString("EXTERNALRECID")
#Attempting to pull current SR worklog using object relationship and attribute
maxlog = mbo.getString("DUPWORKLOG.description")
maxloglong = mbo.getString("DUPWORKLOG.description_longdescription")

clientEndpoint = Router.getHandler("LEAKTIX")
cEmap = HashMap()
host = cEmap.get("URL")+leakid
method = cEmap.get("HTTPMETHOD")
currhead = cEmap.get("HEADERS")
tixuser = cEmap.get("USERNAME")
tixpass = cEmap.get("PASSWORD")
auth = tixuser + ":" + tixpass
authHeader = String(Base64.encodeBase64(String.getBytes(auth, 'ISO-8859-1')),"UTF-8")

def createJSONstring():
    jsonStr = ""
    obj = JSONObject()
    obj.put("status_code", "1")
    obj.put("solution", "DUPLICATE TICKET")
    obj.put("solution_notes", maxlog+" "+maxloglong)
    jsonStr = obj.serialize(True)
    return jsonStr
def httpPost(path, jsonstring):
    params = BasicHttpParams()
    paramsBean = HttpProtocolParamBean(params)
    paramsBean.setVersion(HttpVersion.HTTP_1_1)
    paramsBean.setContentCharset("UTF-8")
    paramsBean.setUseExpectContinue(True)
    entity = StringEntity(jsonstring, "UTF-8")
    client = DefaultHttpClient()
    request = HttpPost(host)
    request.setParams(params)
    #request.addHeader(currhead)
    request.addHeader(HttpHeaders.CONTENT_TYPE, "application/json")
    request.addHeader(HttpHeaders.AUTHORIZATION, "Basic "+authHeader)
    request.setEntity(entity)
    response = client.execute(request)
    status = response.getStatusLine().getStatusCode()
    obj = JSONObject.parse(response.getEntity().getContent())
    System.out.println(str(status)+": "+str(obj))

标签: jsonrestjythonmaximo

解决方案


推荐阅读