Jython:在浏览器中打开 URL(不导入 Python 库)

Jython: Open URL in browser (without importing Python libraries)

Maximo 7.6.1.1:

使用 Jython,我想在浏览器中打开一个 URL(在 Windows 10)。

我找到了 Java example:

import java.awt.Desktop;
import java.net.URI;

if (Desktop.isDesktopSupported() && Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)) {
    Desktop.getDesktop().browse(new URI("http://www.example.com"));
}

我尝试将其转换为 Jython:

from java.awt import Desktop
from java.net import URI

desktop = Desktop.getDesktop()
uri = URI("http://google.com/#q=wonum1%2Cwonum2%2Cwonum3")
desktop.browse(uri)

虽然 Jython 编译成功,但它没有打开浏览器。


如何使用 Jython 在浏览器中打开 URL?

简答

"You can't." 或者,更准确地说,"It's probably not worth the effort / risk."

长答案

根据以前的经验,使用 VB 编写 CGI(我不推荐这样做),我猜想将您问题中的代码放入自动化脚本中可能会导致浏览器会话在服务器,您的脚本所在的位置 运行。自从 20 多年前 VB 天以来,情况可能已经发生了变化,但我仍然想检查一下。

@Milton 走在正确的轨道上,我认为,但对于 Maximo,它实际上会稍微复杂一些。这是因为当他说 "You could have [the script] return a response" 时,响应将从服务器端的业务逻辑层 returned 到服务器端的 UI 层,然后必须 return 发送给浏览器,您必须 "big C" 自定义 Maximo 以期待该响应并知道如何处理它。

备选方案

您的脚本可能 return 出错,并让消息包含 URL。或者使用 Autoscript + 条件 UI + 在上下文中启动 + 非持久属性组合来显示 link 供用户单击。

正如某些人指出的那样,Maximo 中的自动化脚本 运行 在服务器端。这些脚本是根据某些类型的启动点设置的,当脚本在服务器端 运行 时激活。一般来说,自动化脚本不能真正用于操作 UI 元素,因为这些元素是在 webclient 层上控制的。

上面的示例 Jython 代码使用了哪种启动点类型?如果它是与 UI 中的按钮关联的动作类型启动点,它可能会起作用。但我不确定您希望此操作发生的方式和时间。但很可能它仍然无法工作,因为 Java 代码仍然是来自服务器端而不是客户端的 运行。通常,您必须为应用程序创建自定义 Java class 文件扩展名以添加到 webclient 层。尽管大多数组织都试图远离这些类型的真正定制,因为它可能会在未来对基本 Maximo 产品进行更新和升级时引起问题。

Maximo 具有内置的开箱即用功能,允许用户在上下文 URL 中启动。这是一个 IBM link,它有一个 pdf 示例,该示例将从 Maximo 中的记录关联的地址启动到 Google 地图中。

https://www.ibm.com/developerworks/community/groups/service/html/communityview?communityUuid=a9ba1efe-b731-4317-9724-a181d6155e3a#fullpageWidgetId=W5f281fe58c09_49c7_9fa4_e094f86b7e98&file=a6af8bfb-8b72-4b57-945c-786ab4d71b14

我也不确定这个要求的确切目的是什么。但我也看到,如果您只是试图从外部源检索信息,那么如果可以通过 Web 服务类型的交互访问外部 Web 应用程序,您实际上可以直接在 Maximo 应用程序中显示信息。