I have an automation script that I want to call up another script after it has and obtained data from an external system API. I am getting an error TypeError: invokeScript(): 2nd arg can't be coerced to String in <script> at line number 107.
Line 107 is service.invokeScript("NEWSCRIPT",map1,targObj.serialize())
below is the script.
from java.util import Date
from java.util import Calendar
from psdi.server import MXServer
from java.text import SimpleDateFormat
from psdi.iface.router import Router
from java.util import HashMap
from java.lang import String
import sys
from java.lang import Exception
from com.ibm.json.java import JSONObject
from com.ibm.json.java import JSONArray
from com.ibm.json.java import JSON
logger = service.getLogger("maximo.script")
def invokeExtEndpoint(handler,map):
logger.debug("Inside invokeExtEndpoint.")
success = False
errorMessage=""
response = ""
respStatusCode = ""
try:
responseBytes = handler.invoke(map,None)
response = String(responseBytes,"utf-8")
respStatusCode = responseHeader.get("RESPONSE_STATUS")
if int(respStatusCode)<400:
success = True
else:
errorMessage=str(sys.exc_info()[1])
logger.error("Inside Try/Else block, Error Message: "+errorMessage)
except Exception, e:
logger.error(e)
respStatusCode = responseHeader.get("RESPONSE_STATUS")
errorMessage=str(e.getMessage())
logger.error("Inside Exception block, Error Message: "+errorMessage)
return success, errorMessage, response, respStatusCode
# Calculating the date - it will be passed as a changedate parameter value
currentDate = MXServer.getMXServer().getDate()
cal = Calendar.getInstance()
cal.setTime(currentDate)
cal.add(Calendar.DATE, -1)
sdf = SimpleDateFormat("yyyy-MM-dd")
queryDate = sdf.format(cal.getTime())
logger.debug("Query Date is: "+str(queryDate))
# Loops through the set of to fetch and process the applicable
for q in queryDate:
logger.debug("Inside for loop: Last Update Date - "+queryDate)
map = HashMap()
urlmap = HashMap()
urlnew = str()
responseHeader = HashMap()
# String variables
urlnew = str("LastUpdateDate" + ' ' + 'ge' + ' ' + queryDate);
urlmap.put("$filter",urlnew)
map.put("GETURLPROPS",urlmap)
map.put("RESPONSE_HEADERS",responseHeader)
# Fetching the endpoint details and calling invokeExtEndpoint function to invoke API
handler = Router.getHandler("APIEP")
extServResp = invokeExtEndpoint(handler,map)
logger.debug("External Service response is:: ")
logger.debug(extServResp)
emailTo = "Admin@network.com"
emailFrom = "Admin@network.com"
subject = "Sync Failed!"
emailContent = ""
if(extServResp[0] == True):
logger.debug("Success Response!!! Invoking Maximo Enterprise Service.")
logger.debug(extServResp[2])
map1 = HashMap()
jsonobj = JSONObject.parse(extServResp[2])
# Load json string file into a variable
logger.debug("Size of Json Object Is: ")
logger.debug(str(jsonobj.size()))
gmrSvcErrFlag = False
errorMessage1 = ""
try:
for row in jsonobj.get("value"):
targObj = JSONArray()
targObj.add(row)
logger.debug(targObj.serialize())
service.invokeScript("NEWSCRIPT",map1,targObj.serialize())
#Customizations#Integrations------------------------------
Michael Odera
n/a
------------------------------