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 桥接功能来执行以下操作:
- 传入空 Java 字符串
- 使用 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反映了我传入的字符串
使用 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 桥接功能来执行以下操作:
- 传入空 Java 字符串
- 使用 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反映了我传入的字符串