RPG时间戳验证是最佳做法吗?

时间:2017-11-16 16:18:39

标签: timestamp rpgle

对于RPG时间戳验证,这是最佳做法吗?似乎应该有一种方法来测试使用TEST操作码?

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                                                   

3 个答案:

答案 0 :(得分: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组的问题是,即使您处理错误,他们也会使用错误消息丢弃您的作业日志,因此您需要额外的代码才能从作业日志中删除该消息。

答案 1 :(得分:1)

穆斯塔法,

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

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

答案 2 :(得分:0)

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