Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...


********** RDML コマンド開始 **********                   
********** =======================================================
********** Copyright .......: (C) The LANSA Group      , 19
                            98                                     
********** プロセス.........: CR4587SMPL                            
********** ファンクション ..: CR4587S                               
********** タイプ ..........: 組み込み関数                      
********** 作成者 ..........: KEVIN                                 
********** 作成日 ..........: 02/09/98 at 19:46:50                  
********** 説明 ............: サンプル RDML BIF ファンクション              
********** =======================================================
FUNCTION   OPTIONS(*DIRECT *NOMESSAGES *HEAVYUSAGE *MLOPTIMISE *BU
            ILTIN)                                                 
********** =======================================================
********** 組み込み関数名用の特別フィールド             
********** =======================================================
DEFINE     FIELD(#BIF_NAME) TYPE(*CHAR) LENGTH(20) DESC('Return nu
           mbers over or under the average') DEFAULT('UD_GET_HI_LO
           _AVG')                                                 
********** =======================================================
********** 組み込み関数の引数                            
********** =======================================================
********** 引数 01 提供される数値のリスト                       
DEFINE     FIELD(#BIF_ALC01) TYPE(*DEC) LENGTH(7) DECIMALS(0) DESC
          ('Supplied numbers list')                              
DEFINE     FIELD(#NUMBER) TYPE(*DEC) LENGTH(11) DECIMALS(2) DESC('
           Number')                                               
DEF_LIST   NAME(#BIF_ARG01) FIELDS((#NUMBER)) COUNTER(#BIF_ALC01)  
           TYPE(*WORKING) ENTRYS(9999)                             
********** 引数 02 必須の数値の上 (O) または下 (U)     
DEFINE     FIELD(#BIF_ARG02) TYPE(*CHAR) LENGTH(1) DESC('Over or u 
           nder numbers required (O or U)') DEFAULT('O')           
********** ======================================================= 
********** 作業フィールド、リスト、グループ                          
********** ======================================================= 
DEFINE     FIELD(#TOTAL) TYPE(*DEC) LENGTH(30) DECIMALS(2) DESC('T 
           otal')                                                  
********** ======================================================= 
********** 組み込み関数の戻り値                             
********** ======================================================= 
********** 戻り値 01 平均値より上または下の数値のリスト    
DEFINE     FIELD(#BIF_RLC01) TYPE(*DEC) LENGTH(7) DECIMALS(0) DESC
           ('Over or under average numbers list')                 
DEF_LIST   NAME(#BIF_RET01) FIELDS((#NUMBER)) COUNTER(#BIF_RLC01) 
            TYPE(*WORKING) ENTRYS(9998)                            
********** 戻り値 02 提供された数値の平均値            
DEFINE     FIELD(#BIF_RET02) TYPE(*DEC) LENGTH(30) DECIMALS(9) DES
           C('Average  of supplied numbers') DEFAULT(*ZERO)       
********** =======================================================
********** ファンクション メイン行 : CR4587S                            
********** =======================================================
********** 評価用呼び出し                               
**********
**********                                                        
IF         COND('*BIF_SHUTDOWN *NE Y')                            
********** 平均値の計算                                  
CHANGE     FIELD(#TOTAL) TO(0)                                    
SELECTLIST NAMED(#BIF_ARG01)                                      
CHANGE     FIELD(#TOTAL) TO('#TOTAL + #NUMBER')                   
ENDSELECT                                                         
CHANGE     FIELD(#BIF_RET02) TO('#TOTAL / #BIF_ALC01') ROUND_UP(*Y
           ES)                                                    
********** 再度リストを確認し、平均値より上または下の数値を  
********** 戻り値のリストに追加                                      
CLR_LIST   NAMED(#BIF_RET01)                                      
SELECTLIST NAMED(#BIF_ARG01) WHERE('((#BIF_ARG02 *EQ O) *AND (#NUM
           BER *GT #BIF_RET02)) *OR ((#BIF_ARG02 *EQ U) *AND
          (#NUMBER *LT #BIF_RET02))')             
ADD_ENTRY  TO_LIST(#BIF_RET01)                                
ENDSELECT                                                     
********** シャットダウン用呼び出し                            
**********                                                    
ELSE                                                          
********** シャットダウン・ロジックなし                                  
ENDIF                                                         
********** 呼び出し元に制御を戻す                      
RETURN                                                        
********** RDML コマンドおわり **********

以下に注意してください。

  • 戻り値リストは、いずれのエントリーが追加される前に明示的にクリアされます。
  • 任意の引数と戻り値は、USE ステートメント内にコーディングされていなかったとしても、参照することが可能です。*BIF_ARGCOUNT や *BIF_RETCOUNT の値をそれぞれ確認することで、任意の引数や戻り値への参照に条件をつけるのがより一般的です。任意の戻り値を取り出すための別処理はありません。定義された別の作業フィールドに保存されます。
  • このファンクションは *HEAVYUSAGE のため、この評価ロジックでは、シャットダウンの呼び出しではないことを確認することが条件となっています。また、累積フィールドは毎回 0 にリセットされます。この RDML BIF には、特別なシャットダウン・ロジックは存在しません。