IBM PCOMM Automation с использованием Java
Я пытаюсь автоматизировать приложение IBM PComm, используя классы библиотеки HACL Java. Мне удалось установить соединение с сеансом pcom, а также установить / получить позицию курсора и извлечь текст из текущей позиции курсора на экране приложения. Но невозможно поместить / отправить текст в нужной позиции курсора на экране. Пожалуйста, помогите в решении этой проблемы. Пожалуйста, найдите код для установления соединения и извлеките текст с экрана, как показано ниже:
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);
}
}
}
1 ответ
У меня раньше была похожая проблема, когда я автоматизировал PCOMM с помощью Cucumber, чтобы сделать некоторую инфраструктуру автоматизированного регрессионного теста "промежуточным ПО" для зеленого экрана в стиле BDD.
Дело в том, что SetCursorPos не отправляет новую позицию курсора в хост-систему (мы используем IBM i). Протокол Telnet5250 довольно сложен, но в двух словах у вас есть два отдельных буфера - один в клиентской системе (эмулятор терминала) и второй в хост-системе (сервер telnet). Обычно они синхронизированы, но в некоторых случаях это не так, что приводит к неопределенному поведению.
Маленький взлом состоит в том, чтобы послать стрелки вверх и вниз, как это:
SendKeys("<Up>");
SendKeys("<Down>");
Это заставит PComm отправлять новую позицию курсора на сервер и синхронизировать экранные буферы.