java - 使用 Java 的 IBM PCOMM 自动化

标签 java hacl

我正在尝试使用 HACL Java 库类来自动化 IBM PComm 应用程序。 我已成功建立与 pcom session 的连接以及设置/获取光标位置并从应用程序屏幕上的当前光标位置提取文本。但无法将文本放置/发送到屏幕上所需的光标位置。请帮助解决此问题。请找到建立连接并从屏幕中获取文本的代码,如下所示:

import java.util.Properties;
import com.ibm.eNetwork.ECL.ECLConnMgr;
import com.ibm.eNetwork.ECL.ECLConnection;
import com.ibm.eNetwork.ECL.ECLErr;
import com.ibm.eNetwork.ECL.ECLField;
import com.ibm.eNetwork.ECL.ECLFieldList;
import com.ibm.eNetwork.ECL.ECLPS;
import com.ibm.eNetwork.ECL.ECLSession;
import org.ohio.iOhioScreen;
public class Pcom {


      public static void main(String[] args) throws ECLErr {

            try{

            System.loadLibrary("pcseclj");

            Properties prop = new Properties();
           // prop.put("SESSION_VT_LOCAL_ECHO ", "true");

            prop.put("SESSION_HOST", "C:\\Mainframe\\A.ws");  // works OK


            prop.put("SESSION_WIN_STATE", "MAX");
            prop.put("SESSION_VT_KEYPAD ", "SESSION_VT_KEYPAD_APPL");
           prop.put("SESSION_VT_LOCAL_ECHO", "SESSION_VT_LOCAL_ECHO_ON");

            ECLSession session = new ECLSession(prop);


           session.StartCommunication(); //works OK
           Thread.sleep(5000);
           session.connect(); //works OK
           ECLFieldList fieldList = session.GetPS().GetFieldList();
           session.GetPS().SetCursorPos(18, 044); //works OK
          /session.GetPS().SetString("some_text"); // does not work
           for(int i=0;i<fieldList.size();i++){ //works OK
                  //System.out.println("field ======================= "+fieldList.GetFirstField(i).getAttribute());

           ECLPS ps=session.GetPS();
           System.out.println(session.GetName()); //works Ok
           session.GetPS().SetCursorPos(17, 44); //works OK
           session.GetPS().SendKeys("some_text",17,44); // does not work ,17,44 are co ordinate positions pn screen 
           System.out.println(session.GetConnType()); // works ok
           ps.SendKeys("some_text"); //does not work

         /* ------------ does not work-------------
     fieldList.FindField(17, 44).SetText("some_text");
           fieldList.FindField(17, 44).SetString("some_text");
           fieldList.FindField(18, 44).setString("some_text");
         */  

           System.out.println(fieldList.FindField(17, 44).GetLength()); // works ok
           System.out.println(fieldList.FindField(17, 28).getString()); //works ok


            }

            catch(Exception e)

            {

                System.out.println(e);

            }

      }

}

最佳答案

我之前在使用 Cucumber 自动化 PCOMM 来为 BDD 风格的绿屏制作一些自动化回归测试框架“中间件”时遇到过类似的问题。

问题是 SetCursorPos 不会将新的光标位置发送到主机系统(我们使用 IBM i)。 Telnet5250 协议(protocol)相当复杂,但简而言之,您有两个独立的缓冲区 - 一个位于客户端系统(终端仿真器),第二个位于主机系统(telnet 服务器)。通常它们是同步的,但在某些情况下它们不是同步的,这会导致未定义的行为。

小技巧是发送向上和向下箭头键,如下所示:

SendKeys("<Up>");
SendKeys("<Down>");

这将强制 PComm 将新的光标位置发送到服务器并同步屏幕缓冲区。

关于java - 使用 Java 的 IBM PCOMM 自动化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43893312/

相关文章:

java - OSGi 和 native 事件

java - 带有 Java 的 IBM PCOMM

java - 如何在 onCreate/主线程中获取房间列表的大小?

java - 使用 Linux 重新启动 Java 应用程序

java - 二进制兼容性问题 - 一个例子?

Java 网络启动 : howto share certificate with users

java - Spring Boot Rest 服务表格太大