Timestamp RPG时间戳验证,这是最佳实践吗?
对于RPG时间戳验证,这是最佳实践吗?似乎应该有一种使用测试操作码进行测试的方法Timestamp RPG时间戳验证,这是最佳实践吗?,timestamp,rpgle,Timestamp,Rpgle,对于RPG时间戳验证,这是最佳实践吗?似乎应该有一种使用测试操作码进行测试的方法 d DateTimeST S Z d Value S 26A d*---------------------------------------------------
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/EndMonMustapha 您可以使用测试(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
组的问题是,即使您处理了错误,它们也会在作业日志中乱扔错误消息,因此您需要额外的代码来从作业日志中删除该消息