如何使用 Java 和 JNI 为 SAP-GUI 脚本的那部分创建方法?

How to make a method for that part of SAP-GUI script using Java and JNI?

我已经有一些方法可以使用 Java 和 JACOB 库连接到 SAP GUI 脚本引擎 - 我无法再创建一种我想使用的方法。

我正在使用“PoojaGugu” https://github.com/PoojaGugu/SAP-GuiClient-Automation/blob/master/Java/library/src/main/java/com/library/generic/SAPGeneric.java 用于研究案例。

我已经尝试复制一些方法并在其中编辑一些地方,但它没有用。我无法为您提供示例。

让我来谈谈实际问题。我现在有很多 VBA 代码。我一直在摆弄 Java - 除了在 Excel 中制作宏之外,我只是想了解一些其他的东西。我正在使用 VB 连接到 SAP 脚本引擎,只是为了自动执行我的一些工作。我无法使用 Java&Jacob 制定正确的方法来专门执行此操作:

Set grid = session.FindById("wnd[0]/usr/cntlWC_INSP_CHAR/shellcont/shell")
grid.pressToolbarButton "&SORT_DSC"

这就是我的 Excel 宏中的样子,它有效。简化一下:

session.FindById("wnd[0]/usr/cntlWC_INSP_CHAR/shellcont/shell").pressToolbarButton "&SORT_DSC"

它正在 SapGrid 对象上按下 ID 为 &SORT_DSC 的按钮。但是使用前面提到的示例,我可以为您提供一种在完全相同的“网格”范围内的相同显示(事务)上工作的方法:

 */SAPGuiGridSelectOrDeselectColumn
       * Objective - to  select or deselect the column  in the grid 
       * parameter  : partial id string , column name , SelectOrDeselect - Pass true to select column and false to Deselect the column
       * created by Venkata Siva kumar    
       */
      public void SAPGuiGridSelectOrDeselectColumn(String idstr, String column, boolean SelectOrDeselect) throws Exception
      {
         
          String id = getSAPObjectIDHelperMethod(getSession(), "ID", idstr, "", "");
          session = new ActiveXComponent(getSession().invoke("FindById",id).toDispatch());   
          if (SelectOrDeselect)
              Dispatch.call(session, "selectColumn", column);
         
          else
              Dispatch.call(session, "deselectColumn", column);
         
      }
      
      /*SAPGuiGridSelectOrDeselectColumn

这个正在从同一页面上的 table 中选择列。在 VBA:

中向您展示我是如何做的
grid.selectColumn "VARIANCE"

前面提到的“网格”path/object 地址。它选择一个名为“VARIANCE”的列,该列具有我想要按下 %SORT 按钮的相同 SapGuiGrid 范围。这个方法行得通。

我想根据这个方法制作我的方法来点击我之前提到的按钮但没有成功(老实说,不仅是那个方法)。我该如何继续?

这是我想出的:

ActiveXComponent guiShellObject= new ActiveXComponent(Session.invoke("findById", "wnd[0]/usr/cntlWC_INSP_CHAR/shellcont/shell").toDispatch());
guiShellObject.invoke("pressToolbarButton", "&SORT_DSC");

这将取代:

session.FindById("wnd[0]/usr/cntlWC_INSP_CHAR/shellcont/shell").pressToolbarButton "&SORT_DSC"

上面的例子是不言自明的。我不知道该怎么做,直到我了解到我可以使用 invoke 方法传递额外的参数而不是一个参数。