2017-05-10 11 views
0

Ich versuche, IBM PComm Application mit HACL Java-Bibliothek Klassen zu automatisieren. Es ist mir gelungen, eine Verbindung zur pcom-Sitzung herzustellen sowie die Cursorposition festzulegen/abzurufen und Text von der aktuellen Cursorposition auf dem Anwendungsbildschirm zu extrahieren. Es ist jedoch nicht möglich, Text an einer gewünschten Cursorposition auf dem Bildschirm zu senden. Mit freundlicher helfen, dieses Problem bei der Lösung den Code zum Herstellen einer Verbindung und holt Text auf dem Bildschirm, wie unten .Please zu finden:IBM PCOMM Automatisierung mit Java

vor
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); 

      } 

     } 

} 

Antwort

0

Ich hatte ähnliches Problem, während mit Gurke Automatisierung PCOMM einige automatisierten Regressionstestframework „Middleware“ zu machen für grünen Bildschirm im BDD-Stil.

Das ist, dass SetCursorPos keine neue Cursor-Position an das Host-System sendet (wir verwenden IBM i). Telnet5250-Protokoll ist ziemlich kompliziert, aber in wenigen Worten haben Sie zwei separate Puffer - eine auf dem Client-System (Terminal-Emulator) und eine zweite auf dem Host-System (Telnet-Server). Gewöhnlich sind sie synchronisiert, aber unter Umständen sind sie nicht, was zu undefiniertem Verhalten führt.

Litle ist Hack schicken nach oben und unten Pfeiltasten wie folgt aus:

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

Dies wird PComm zwingen, neue Cursor-Position an den Server und Sync-Bildschirmpuffer zu senden.