与外部JSON API的Maximo集成



我发现了从Maximo到web上的外部系统调用JSON/REST API的各种方法,但它们都没有完全匹配我正在寻找的,所有它们似乎都使用不同的方法,这给我带来了很多困惑,因为我在jython编码方面非常生锈。所以,希望你们都能帮我。请尽可能详细:脚本语言,脚本类型(用于集成,对象启动点,发布通道进程/用户退出类等)。我的Maximo环境是7.6.1.1。我已经创建了以下文件…

最大对象结构(MXSRLEAK):包含3个对象(SR, TKSERVICEADDRESS和WORKLOG)

Maximo发布通道(MXSRLEAK- pc):使用MXSRLEAK操作系统,包含我的处理规则,跳过记录,如果他们不符合标准(SITEID = ' two ', TEMPLATEID IN ('LEAK','LEAKH','LEAKW'), HISTORYFLAG = 0)

最大端点(LEAKTIX): HTTP Handler、HEADERS ("Content-Type:application/json")、HTTPMETHOD ("POST")、URL (https:///api/ticket/?ticketid=)、USERNAME ("Maximo")和PASSWORD()。

在这一点上,我需要一个自动化脚本来:
  1. 限制我正在发送的Maximo属性。这取决于Maximo那边发生了什么。如果外部创建的(SOURCE = LEAKREP, EXTERNALRECID IS NOT NULL)服务请求票被取消,我需要发送logtype = "CANCOMM"的最后一个工作日志。(summary/description和details/description_longdescription)以及改变状态的USERID。如果外部创建的SR票据关闭,我需要发送日志类型为<>的最后一个工作日志。"CANCOMM"如果外部创建的SR票据是一个副本,我还需要包含一个名为"DUPLICATE"的自定义字段。(它使用表域来显示UI中具有类似TEMPLATEID的所有打开SR)。如果有"LEAK"SR票证起源于Maximo(没有SOURCE或EXTERNALRECID),然后我需要从SR(例如DESCRIPTION, REPORTDATE, REPORTEDBY等),TKSERVICEADDRESS (FORMATTEDADDRESS等)和WORKLOG (DESCRIPTION, LONGDESCRIPTION,如果它们存在)对象发送数据到外部系统,并解析响应以更新SOURCE和EXTERNALRECID。
  2. 将API调用HTTPMETHOD的最大终点值更新为post;或"补丁",添加标头(授权:Basic Base64Userid/Password)等

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

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

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

很抱歉回复晚了。理想情况下,外部退出脚本不使用mbo作为其实例。相反,它在破坏结构数据后使用irdata。然后另一个操作出现了。

我所理解的是,你需要根据Maximo中的一些条件动态发布有效载荷。为此,我认为您可以编写一个自定义处理程序,该处理程序将在发布期间调用。

相关内容

  • 没有找到相关文章

最新更新