Timestamp RPG时间戳验证,这是最佳实践吗?

Timestamp RPG时间戳验证,这是最佳实践吗?,timestamp,rpgle,Timestamp,Rpgle,对于RPG时间戳验证,这是最佳实践吗?似乎应该有一种使用测试操作码进行测试的方法 d DateTimeST S Z d Value S 26A d*---------------------------------------------------

对于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                                                   

您将在运行时收到一个RNX0112错误。使用Monitor/On Error*All/EndMon

Mustapha

您可以使用测试(ZE)操作码测试时间戳。Z扩展器指定您正在测试时间戳,如果测试失败,E扩展器将%错误设置为on

正如Mike提到的,您还可以将其包装在监视器组中,并使用On Error操作码来运行您的子例程

下面是两种方法的示例代码

 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*------------------------------------------------------------------- 

如今的最佳实践更像是这样:

**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
组的问题是,即使您处理了错误,它们也会在作业日志中乱扔错误消息,因此您需要额外的代码来从作业日志中删除该消息