2010-01-20 9 views
0

AS400 및 RPG에 대한 지식이 매우 제한되어 있습니다 (0). 그러나 우리는 Java 클래스에서 RPG 프로그램을 호출해야하는 긴급한 요구 사항이 있습니다. 그래서 우리는 JTOpen을 통해 그것을 달성 할 수 있음을 발견했습니다. 하지만 ProgramParameter 목록을 선언하는 데 막혔습니다. 나는 RPG 프로그램AS400 RPG 호출 Java에서

프로그램 이름에 대한 다음 정보가 : ZM30000R을 매개 변수 : 지점 7,0 (숫자)
계정 유형 2 (01 검사, 02 절약)
계좌 번호 20 (문자)
오류 코드 7 (문자) DR/CR 인디케이터 1 (문자 D, C)

그러나 int와 output은 무엇인지에 대한 단서가 없습니다. ProgramParameter를 선언하는 방법은 없습니다. 나는 아래와 같이했다. 필자는 이러한 시스템에 연결되어 있지 않기 때문에 테스트 할 수 없습니다.

// Create AS400 Text objects for the different lengths 
      // of parameters you are sending in. 
      AS400Text branchTxt = new AS400Text(7); 
      AS400Text accntTypeTxt = new AS400Text(2); 
      AS400Text accntNumberTxt = new AS400Text(20); 
      AS400Text errorCodeTxt = new AS400Text(7); 
      AS400Text DCIndicatorTxt = new AS400Text(1);    

      // declare and instantiate your parameter list. 
      ProgramParameter[] parmList = new ProgramParameter[5]; 

      // assign values to your parameters using the AS400Text class to convert to bytes 
      // the second parameter is an integer which sets the length of your parameter output 
      parmList[0] = new ProgramParameter(branchTxt.toBytes(branch),7); 
      parmList[1] = new ProgramParameter(accntTypeTxt.toBytes(accntTypeTxt),2);  
      parmList[2] = new ProgramParameter(accntNumberTxt.toBytes(accntNumberTxt),20);  
      parmList[3] = new ProgramParameter(errorCodeTxt.toBytes(""),7);  
      parmList[4] = new ProgramParameter(DCIndicatorTxt.toBytes(indicator),5); 

어떤 도움이 정말 유용 할 것입니다.

감사와 안부,

스 리니 바스

+1

다른 질문에서 rpg 프로그램에 대한 Java 호출을 테스트하는 방법에 대한 팁을 제공했습니다. – robertnl

+1

아,보세요! 그것은 급해! 모든 것을 버리고 대답하십시오! 또는 덜 냉담하기 위해서 * 여기에 질문하는 모든 사람 *이 대답을하고 싶습니다. 지역 사회에서 불을 피우면 더 좋은 반응을 얻지 못할 것입니다. 그리고 동일한 주제 (http://stackoverflow.com/questions/2103928/as400-rpg-simulator)에서 이전 질문에 연결하고이 질문과 관련된 내용을 설명해야합니다. – dmckee

+1

실제로 dmckee, 네 말이 맞아. 문제는 훨씬 더 좋을 수 있습니다. as400에 대해 아는 것이 도움이되지 않습니다. 자바와 RPG 간의 인터페이스가 두 질문에 모두 답을내는 것이 얼마나 어렵고 혼란 스럽습니까? Phani가 실제 문제를 해결하는 데 도움이되기를 바랍니다. 이 문제를 해결하려면 다른 단계 (또는 질문 ;-) – robertnl

답변

4

글쎄, 난 그냥 매개 변수의 설명에 의해 실마리가 않습니다. 지점, 계좌 유형 및 계좌 번호는 IN입니다. 재정적 인 예약이나 거래에 필요한 정보가 필요합니다. 오류 코드는 분명히 OUT입니다. 금융 시스템에 대한 경험이있는 경우 API가 금액을 예약하는 방법을 반환하는 것이 합리적입니다. 일반적으로 기호를 사용하지만 금융 시스템에서는 (D) ebit 또는 (C) redit이 더 좋은 방법입니다.

API는 금융 시스템의 API 일 가능성이 큽니다. 그것이 사실이라면, 나는 그 금액을 놓치고 있습니다. 당신은 완전한 설명을 가지고 있습니까?

첫 번째 매개 변수는 숫자입니다. 너 운이 아니야. iSeries와 RPG는 숫자 유형에 대해서는 용인되지 않습니다. Bit, Zoned, Packed, Decimal, Integer, Float 등을 선택할 수 있습니다. RPG가 ILE RPG가 아닌 RPG 인 경우 Zoned, Packed 및 Byte로 가져올 수 있습니다.

iSeries에 대한 액세스 권한이 있다고 가정합니다. 그런 다음 프로그램 호출, 디버그 정보 및 덤프 정보를 볼 수 있습니다. "시행 착오"를해야만한다면 도움이 될 것입니다. 액세스 권한이 없으면 도로가 매우 어려울 것입니다. 프로그램 호출이 성공적이지 않으면 java 클래스에 오류가 발생합니다. 그러나 iSeries의 정보없이 실제 오류를 식별하는 것은 어려울 것입니다. 따라서 액세스가 정말로 필요합니다.

0

연결이없는 경우 실제로 요청한 것을 수행 할 수 없습니다. 어떻게 테스트합니까? 숫자 매개 변수가 있습니까? 아니면 모두 문자입니까?

3

귀하의 샘플은 대부분 올바른 방향으로 가고 있습니다. 그러나 분기 매개 변수는 숫자입니다. 그래서 당신은 AS400Text 대신 AS400ZonedDecimal를 사용해야합니다

AS400ZonedDecimal branchNbr = new AS400ZonedDecimal(7,0) 

롤 플레잉 게임 프로그램은 포장 대신 존 예상 할 수있다. 별로 중요하지 않으며 AS400PackedDecimal을 대신 사용하십시오.

ProgramParameter 객체를 구성 할 때 생성자 요구 사항은 프로그램의 입력 또는 출력 매개 변수에 따라 다릅니다. 입력 매개 변수의 경우 toBytes() 결과 만 전달하면됩니다. 길이를 포함시킬 필요가 없습니다. 출력 전용 매개 변수의 경우 길이를 전달하십시오.

일부 누락 된 정보가 있다는 Robert의 답변에 동의하지만 오류 코드의 출력에 대한 가정은 유효합니다. 그러나 샘플이 값을 전달하기 때문에 DCIndicator 매개 변수가 입력되었다고 추측 할 수 있습니다. 오류 코드 매개 변수의 경우, 프로그램 호출 후에 값을 추출하고 그 값으로 무언가를해야합니다. 이미 가지고있는 것을 감안할 때 프로그램 호출이 작동하는 방법은 다음과 같습니다. 라이브러리 이름을 "MyLibrary"로 지정했는지 확인하십시오. 그것은 예시 목적을위한 것입니다. 프로그램 개체가있는 라이브러리를 결정해야합니다.

ProgramCall pgm = new ProgramCall(as400, QSYSObjectPathName.toPath("MyLibrary","ZM30000R","PGM"), parmList); 
if (pgm.run() == true) { 
    String sErrorCode = (String) errorCodeTxt.toObject(parmList[3].getOutputData()); 

    //Do something with your output data. 
} 
else { 
    AS400Message[] messageList = pgm.getMessageList(); 
    for (int i=0; i<messageList.length; i++) { 
     String sMessageID = messageList[i].getID(); 
     String sMessageText = messageList[i].getText(); 

     //Do something with the error messages 
    } 
} 

라이브러리 목록을 고려해야 할 다른 사항은 무엇입니까? RPG 프로그램은 특정 라이브러리가 라이브러리리스트에있을 것으로 기대합니까? 그렇다면 CommandCalls을 실행하여 프로그램을 호출하기 전에 라이브러리를 라이브러리리스트에 추가해야합니다.

+1

제안에 감사하는 Tracy, AS400PackedDecimal 선언으로 문제가 해결되었습니다. – Srinivas