You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Maximo7.5 Python自动化脚本调用带参沟通模板遇类型转换错误

解决Maximo 7.5中Python脚本调用MessageFormat的类型转换异常

我之前在Maximo 7.5里写Jython脚本时也踩过这个坑,你的报错java.lang.ClassCastException: org.python.core.PyList cannot be cast to [Ljava.lang.Object;根源很清晰:Python的列表(PyList)不能直接被Java的MessageFormat.format()方法识别为原生的Object[]数组。Java定制里能正常运行,是因为Java本身用的就是数组类型,而Jython的列表是Python层面的容器,和Java数组不是同一类型。

解决方案:将Python列表转为Java Object数组

你只需要把Python的args列表转换成Java原生的Object[]数组,就能让MessageFormat.format()正确识别参数。具体修改如下:

from psdi.server import MXServer
from psdi.mbo import SqlFormat
from java.text import MessageFormat
""" 获取邮件所需的三个参数及primaryEmail的值 """
whereclause="templateid='WMSPWUSER'";
csr =mbo.getMboSet("$commtemp","COMMTEMPLATE",whereclause);
csr.setQbeExactMatch("true");
if csr.count() > 0 :
    print("Inside commtemplate");
    ctr = csr.getMbo(0);
    sqf =SqlFormat(ctr.getString("message").replace("'", "''"));
    sqf.setIgnoreUnresolved(1);
    message = sqf.resolveContent();
    args = [ pwd, login,url ];
    
    # 关键修改:将Python列表转为Java Object数组
    args_array = java.lang.Object[len(args)]
    for i in range(len(args)):
        args_array[i] = args[i]
    
    fmt = MessageFormat(message);
    message = fmt.format(args_array); # 使用转换后的Java数组
    MXServer.sendEMail( primaryEmail , ctr.getString("sendfrom"), ctr.getString("subject"), message);

额外说明

  • 如果你觉得循环赋值太繁琐,也可以用Jython的内置转换方式:args_array = (java.lang.Object[])(args),效果是一样的,不过循环赋值的方式更直观,便于调试参数。
  • 确保pwd、login、url都是字符串类型(Jython会自动转成Java的String),避免其他类型的转换问题。

内容的提问来源于stack exchange,提问作者stackuser11

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:48:53