星期一, 11月 06, 2023

2004-06-28 如何判斷 AP 執行時的 CCSID ?(DSPCCSIDR)


如何判斷 AP 執行時的 CCSID ?(DSPCCSIDR)

由於 AP 有時需要執行於多國語言的環境,用於判斷 AP 的執行環境的語系有多種方式,
例如直接存取系統值 QCCSID,QCNTRYID 或 QLANGID,由於每一個 Job 的執行環境會因
上述系統值及 User Profile(使用者設定檔)的相對應參數而有所不同,所以有時需要知道
某些語系(Language)的預設 CCSID 為何?來設定相對應的 AP 語言。所以我們可以使用
系統所提供的國際語系相關的 API 請參考以下範例。相關詳細資訊請參照範例中的網頁連結。 


File  : QRPGLESRC 
Member: DSPCCSIDR
Type  : RPGLE
Usage : CRTBNDRPG DSPCCSIDR
OS Version : V5R2 以上        


     H DEBUG  OPTION(*SRCSTMT:*NODEBUGIO) DFTACTGRP(*NO) ACTGRP(*CALLER)
      *----------------------------------------------------------------
      * http://publib.boulder.ibm.com/iseries/v5r2/ic2924/info/apis/nls2.htm
      *----------------------------------------------------------------
      * Retrieve Language Identifiers (QLGRTVLI) API retrieves a list of
      * language identifiers and their descriptions.
      *----------------------------------------------------------------
     D RtvLanguageID   Pr                  ExtPgm('QLGRTVLI')
     D  RcvVar                    32767a   Options(*VarSize)
     D  RcvVarLen                    10i 0 Const
     D  RcvFmt                        8a   Const
     D  ErrCode                            like(ApiError)

      *----------------------------------------------------------------
      * The Retrieve Default CCSID (QLGRTVDC) API
      * retrieves the default CCSID given a language ID.
      *----------------------------------------------------------------
     D RtvDftCCSID     Pr                  ExtPgm('QLGRTVDC')
     D  RcvCCSID                     10i 0
     D  LngId                         3    Const
     D  ErrCode                            like(ApiError)

     **-- Api error data structure:  ----------------------------------
     D ApiError        Ds
     D  AeBytPro                     10i 0 Inz( %Size( ApiError ))
     D  AeBytAvl                     10i 0 Inz
     D  AeMsgId                       7a
     D                                1a
     D  AeMsgDta                    128a

     **-- RTVL0100  data structure:  ----------------------------------
     D RtvL0100Dta     Ds
     D  RlBytRtn                     10i 0
     D  RlBytAvl                     10i 0
     D  RlNbrLngId                   10i 0
     D  RlCcsidVal                   10i 0
     D  RlStrOffset                  10i 0
     D  RlLngIdRtv                 4096a

      *  ... Language ID Information
     D pLngIdRtv                       *
     D LngIDRtv        DS                  based(pLngIDRtv)
     D  LanguageID                    3
     D  LanguageDsc                  40

     D DspStr          S             52
     D RcvCCSID        S             10i 0
     D Idx             S             10i 0

      * Retrieve Language List
     C                   CallP     RtvLanguageID(RtvL0100Dta
     C                                    : %Size( RTVL0100Dta)
     C                                    : 'RTVL0100'
     C                                    : ApiError
     C                                    )
      * set Rtn Array Address
     C                   Eval      pLngIDRtv = %addr(RtvL0100Dta) +
     C                                           RlStrOffset

     C                   For       Idx = 1 to RlNbrLngId
      * Retrieve Language default CCSID for given Language ID
     C                   CallP     RtvDftCCSID(RcvCCSID
     C                                    : LanguageID
     C                                    : ApiError
     C                                    )
     C                   Eval      dspStr = LanguageID +
     C                                 %subsT(%editc(RcvCCSID:'L'):6:5) +
     C                                      ' ' + LanguageDsc
     C     DspStr        Dsply
     C                   Eval      pLngIDRtv = pLngIDRtv + 43
     C                   Endfor
     C
     C                   Eval      *InLR = *On





沒有留言: