2017-11-16 12 views
1

RPG 타임 스탬프 유효성 검사는이 모범 사례입니까? 그것은 테스트 opcode를 사용하여 테스트하는 방법이 있어야 할 것 같습니까?RPG 타임 스탬프 유효성 검사가 가장 좋은 방법입니까?

d DateTimeST  S    Z           
d Value   S    26A           
d*--------------------------------------------------------------------------- 
c     Eval  Value = '2017-11-16-09.54.40.840586'   
c     Eval  DateTimeST = %timestamp(Value)     
c     If  %Error           
c     EXSR  DoSometing          
c     ENDIF              
c*-------------------------------------------------------------------   
c  DoSometing BEGSR              
c     ENDSR              
c*-------------------------------------------------------------------   
c     Eval   *inlr = *on         
c     return             

답변

0

런타임시 RNX0112 오류가 발생합니다. 사용 모니터/온 오류 * 모든/EndMon

1

무스타파는

당신은 TEST (ZE) 오피 코드를 사용하여 타임 스탬프를 테스트 할 수 있습니다. Z Extender는 타임 스탬프를 테스트하고 E Extender가 테스트가 실패하면 % Error를 설정하도록 지정합니다.

마이크가 언급했듯이 모니터 그룹에 랩핑하고 On-Error opcode를 사용하여 서브 루틴을 실행할 수도 있습니다.

두 가지 방법에 대한 샘플 코드는 다음과 같습니다.

d DateTimeST  S    Z 
d Value   S    26A 
d*--------------------------------------------------------------------------- 
c     Eval  Value = '2017-11-16-09.54.40.840586' 
c 
c* Method #1 - use monitor group 
c     Monitor 
c     Eval  DateTimeST = %timestamp(Value:*ISO) 
c     On-Error 
c     EXSR  DoSometing 
c     Endmon 
c 
c* Method #2 - use Test(ZE) 
c  *ISO   Test(ZE)    Value 
c     If  %Error 
c     EXSR  DoSometing 
c     Else 
c     Eval  DateTimeST = %timestamp(Value:*ISO) 
c     Endif 
c 
c     Eval   *inlr = *on 
c     return 
c*------------------------------------------------------------------- 
c  DoSometing BEGSR 
c     ENDSR 
c*------------------------------------------------------------------- 
2

모범 사례 요즘은 더 다음과 같습니다

**free 
dcl-s DateTimeSt  Timestamp; 
dcl-s Value   Char(26); 

Value = '2017-11-16-09.54.40.840586'; 
test(ze) Value; 
if %error; 
    DoSomething(); 
else; 
    DateTimeSt = %timestamp(value); 
endif; 
return; 

// Error Proc 
dcl-proc DoSomething; 
end-proc; 

내가 MONITOR 그룹이 가지고있는 문제는 그들이 쓰레기 오류 메시지와 함께 작업 로그, 오류를 처리 할 경우에도 이렇게 작업 로그에서 메시지를 제거하려면 추가 코드가 필요합니다.