Java 7.30 rev 2 的 SAP GUI - OS-X - 使用 Javascript 将空格键发送到组合框的任何方式

SAP GUI for Java 7.30 rev 2 - OS-X - Any way to send a spacebar keypress to a combobox using Javascript

使用 Java脚本(Mozilla Rhino Java脚本引擎)编写 SAPGUI 脚本(适用于 OS X 10.10 上的 Java 7.30 rev 2。 5).我坚持的一件事是弄清楚如何在关注组合框元素(使用 .setFocus() )后发送 spacebar 按键。我需要发送 spacebar 按键以清除组合框值。使用 userarea.findById 解析 SAP 对象并将其保存到 var 后。我尝试传递一个空字符串来直接设置密钥:

comboBox.key = "";

我也试过将 space 字符传递给密钥。这些方法似乎根本没有改变元素。不为空的键 (comboBox.key = "CB") 将用于设置框中的其他值,因此我知道我的焦点是正确的元素。

我尝试在 "Scripting..." window 中记录 UI 交互,但按键似乎没有被拾取。此外,当我更改值时,在记录过程中,它只记录上面列出的空字符串。我还尝试使用 JS 引擎的 Java 桥接功能来执行以下操作:

  1. 传入空 Java 字符串
  2. 使用 Packages.java.awt.Robot 的 keyPress 方法自动按键,但我得到 "org.mozilla.javascript.JavaScriptException: java.security.AccessControlException: access denied ("java.awt.AWTPermission" "createRobot")"。

我现在唯一可行的选择是使用 AppleScript 通过 "System Events" 发送 spacebar 击键。如果可以的话,我想远离 AppleScript,因为我在 JS 脚本中投入了很多。

经过数周的挖掘,我能够通过执行以下操作解决问题:

comboBox.mScriptObject.setSelectedItem("");

为了找出解决方案,我在脚本控制台中转储了 "comboBox" 元素的字段和方法:

var methods = "";
var fields = "";
var comboBox;

comboBox = userarea.findById("<relative id here>");

objInfo = comboBox.getClass()

for(var i = 0; i < objInfo.getFields().length; i++){
    fields += objInfo.getFields()[i] + "\r\n";
}

for(var i = 0; i < objInfo.getDeclaredMethods().length; i++){
    methods += objInfo.getMethods()[i] + "\r\n";
}

"Fields:\r\n\r\n" + fields + "\r\n\r\nMethods\r\n\r\n" + methods;

然后我注意到了这一点:

public java.lang.Object com.sap.guiservices.scripting.base.GuiScriptWrapper.mScriptObject

不知道 "mScriptObject" 到底是什么,我为 "comboBox.mScriptObject" 执行了相同的字段和方法转储。一些立即感兴趣的方法是:

public java.lang.String com.sap.platin.r3.control.GuiComboBox.getValue()
public java.lang.String com.sap.platin.r3.control.GuiComboBox.getKey()
public void com.sap.platin.r3.control.GuiComboBox.setSelectedItem(java.lang.Object)

然后我尝试调用每个方法并检查结果。调用"setSelectedItem"后,SAPGUI中的"comboBox"元素window反映了我​​传入的字符串