2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ILERPGAdvent Calendar 2022

Day 17

制御オプション EXPROPTS(*ALWBLANKNUM)

Last updated at Posted at 2022-12-16

制御オプション EXPROPTS(*ALWBLANKNUM)は、V7R5 V7R3 から使用可能になっているオプション。(※IBM i 7.5 での変更点にありますが、TR等のPTFでV7R3以降使える様です)
外部(Webやインタフェースのアップロード)とのやりとりをする場合、受け取るフィールドが数値タイプでも、相手のDBがOpne系だとNULL値(≒空文字)だったりする事はよくある話。
そこで出番となるのは%DEC関数 で数値変換をするのだが、今まで *BLANK を渡すとエラーになって *ZERO に置き換えてから実行しないとエラーになっていた。しかし、制御オプション EXPROPTS(*ALWBLANKNUM)H仕様書 に記述すれば、無問題!ゼロの結果を返してくれます。

以下、使用例

QII0170R.rpgle
H*-  ブランクを数値変換の引数として許可する
H EXPROPTS(*ALWBLANKNUM)
D*- ---<< 変数定義    >>-----*
D STR1            S             63A
D DEC1            S              9S 0
D MSG             S             40A
C*- ***************************************************************
C*- *  メインロジック                                            **
C*- ***************************************************************
C                   MONITOR
C*-  数値変換
C                   EVAL      STR1        = *BLANK
C                   EVAL      DEC1        = %DEC(STR1 : 63 :15 )
C                   EVAL      MSG         = ' 数値1… '
C                                         + %EDITC(DEC1 : '3')
C     MSG           DSPLY
C                   ON-ERROR  *ALL
C                   EVAL      MSG         = '[ERROR:*ALL]'
C                                         + %CHAR(%STATUS)
C                                         + '*ALL 監視エラー '
C     MSG           DSPLY
C                   ENDMON
C*
C                   SETON                                        LR
C                   RETURN

実行のスクリーンショット。これも便利で良いですな。
2022-11-27_164355.png

2
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?