    001/*
    002 * Copyright (c) 2009 The openGion Project.
    003 *
    004 * Licensed under the Apache License, Version 2.0 (the "License");
    005 * you may not use this file except in compliance with the License.
    006 * You may obtain a copy of the License at
    007 *
    008 *     http://www.apache.org/licenses/LICENSE-2.0
    009 *
    010 * Unless required by applicable law or agreed to in writing, software
    011 * distributed under the License is distributed on an "AS IS" BASIS,
    012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
    013 * either express or implied. See the License for the specific language
    014 * governing permissions and limitations under the License.
    015 */
    016package org.opengion.hayabusa.report;
    017
    018import org.opengion.hayabusa.common.HybsSystem;
    019import org.opengion.hayabusa.common.HybsSystemException;                // 7.0.6.4 (2019/11/29)
    020
    021import static org.opengion.fukurou.system.HybsConst.CR ;                // 6.1.0.0 (2014/12/26)
    022import org.opengion.fukurou.system.DateSet;                                             // 6.4.2.0 (2016/01/29)
    023import org.opengion.fukurou.system.LogWriter;
    024import org.opengion.fukurou.util.StringUtil;
    025import org.opengion.fukurou.db.ApplicationInfo;
    026import org.opengion.fukurou.db.DBUtil;
    027import org.opengion.fukurou.mail.MailTX ;
    028import org.opengion.fukurou.db.ConnectionFactory;                               // 5.9.31.2 (2018/04/20)
    029import org.opengion.fukurou.db.DBFunctionName;                                  // 5.9.31.2 (2018/04/20)
    030import org.opengion.fukurou.db.Transaction;                                             // 5.9.31.2 (2018/04/20)
    031import org.opengion.fukurou.db.TransactionReal;                                 // 5.9.31.2 (2018/04/20)
    032
    033import java.util.Arrays;
    034
    035/**
    036 * 帳票要求テーブル(GE50)と、エラーテーブル(GE56)に対して、データ書込みを行います。
    037 *
    038 * このクラスでは、４つの機能を実装しています。
    039 *
    040 * ●要求番号採番機能： makeYkno()
    041 *   新たな要求番号を採番します(シーケンスより取得)
    042 *   採番後、内部の要求番号(ykno)もこの値に再セットされます。
    043 * ●帳票要求テーブルデータセット機能： insertGE50( final String fgkan )
    044 *   内部変数にセットされている値を利用して、データ登録を行います。
    045 *   繰返し登録したい場合は、変更する値のみを、内部変数にセットしてから、
    046 *   このメソッドを呼び出してください。
    047 *   なお、完成フラグ(fgkan)は、内部変数に持っていないため、外部から指定してください。
    048 * ●完成フラグ設定機能： updateGE50( final String fgkan )
    049 *   内部変数にセットされている、systemId と ykno を利用して、データ登録を行います。
    050 *   なお、完成フラグ(fgkan)は、内部変数に持っていないため、外部から指定してください。
    051 * ●エラーメッセージ登録機能： insertErrorGE56( final String inErrMsg )
    052 *   エラー発生時に、エラーメッセージを登録します。
    053 *   内部変数にセットされている、systemId と ykno を利用して、データ登録を行います。
    054 *   なお、このメソッドは、要求テーブルの完成フラグは、なにもしませんので、
    055 *   完成フラグ設定機能と併用してください。
    056 *   また、システムパラメータ の COMMON_MAIL_SERVER(メールサーバー)と
    057 *   ERROR_MAIL_FROM_USER(エラーメール発信元)と、ERROR_MAIL_TO_USERS(エラーメール受信者)
    058 *   がすべて設定されている場合に、エラー情報のメール送信を行います。
    059 *
    060 * @og.rev 3.8.0.0 (2005/06/07) 新規追加
    061 * @og.group 帳票システム
    062 *
    063 * @version  4.0
    064 * @author   Kazuhiko Hasegawa
    065 * @since    JDK5.0,
    066 */
    067public class GE50Access {
    068        /** 完成フラグのフラグ定義(登録) {@value} */
    069        public static final String FG_SET  = "1";       // 登録
    070        /** 完成フラグのフラグ定義(済み) {@value} */
    071        public static final String FG_OK   = "2";       // 済み
    072        /** 完成フラグのフラグ定義(実行中) {@value} */
    073        public static final String FG_RUN  = "3";       // 実行中
    074        /** 完成フラグのフラグ定義(手動) {@value} */
    075        public static final String FG_HAND = "4";       // 手動
    076        /** 完成フラグのフラグ定義(印刷待ち) {@value} */
    077        public static final String FG_WAIT = "5";       // 印刷待ち
    078        /** 完成フラグのフラグ定義(取込済) {@value} */
    079        public static final String FG_DBIN = "6";       // 取込済  Ver 3.8.0.0
    080        /** 完成フラグのフラグ定義(デーモンエラー) {@value} */
    081        public static final String FG_ERR1 = "7";       // デーモンエラー
    082        /** 完成フラグのフラグ定義(アプリエラー) {@value} */
    083        public static final String FG_ERR2 = "8";       // アプリエラー
    084
    085        // GE50 の要求番号のシーケンスを取得します。
    086//      private static final String GE50_SEQ = "SELECT GE50_SEQUENCE.NEXTVAL FROM DUAL" ;
    087//      private static final String GE50_SEQ = "GE50_SEQUENCE";                                                         // 5.9.31.2 (2018/04/20)
    088        private static final String GE50_SEQ = "GE50S01";                                                                       // 7.0.6.4 (2019/11/29) シーケンス名が間違っていた。
    089
    090//      // 5.2.0.0 (2010/09/01) Ver4互換モード対応
    091//      // 6.9.5.0 (2018/04/23) VER4_COMPATIBLE_MODE 廃止
    092//      private static final String OUT_FILE = HybsSystem.sysBool( "VER4_COMPATIBLE_MODE" ) ? "OUTFILE" : "OUT_FILE";
    093//      private static final String OUT_DIR = HybsSystem.sysBool( "VER4_COMPATIBLE_MODE" ) ? "OUTDIR" : "OUT_DIR";
    094
    095        // GE50 に要求データを設定します。
    096        // 5.0.3.0 (2009/11/04) OUTFILE ⇒ OUT_FILE , OUTDIR ⇒ OUT_DIR
    097        // 5.2.0.0 (2010/09/01) Ver4互換モード対応
    098        // 6.9.5.0 (2018/04/23) VER4_COMPATIBLE_MODE 廃止
    099        private static final String GE50_INSERT =
    100                "INSERT INTO GE50" +
    101//              " (SYSTEM_ID,YKNO,LISTID,JOKEN,FGKAN,"+OUT_DIR+","+OUT_FILE+",COMMENTS," +
    102                " (SYSTEM_ID,YKNO,LISTID,JOKEN,FGKAN,OUT_DIR,OUT_FILE,COMMENTS," +
    103                "  FGJ,DYSET,DYUPD,USRSET,USRUPD,PGUPD,DMN_NAME,DMN_HOST )" +
    104                " VALUES" +
    105                "  (?,?,?,?,?,?,?,SUBSTRB(?,1,100)," +
    106                "  '1',?,?,?,?,?,?,? )" ;
    107
    108        // GE50 の完成フラグを設定するSQL文です。
    109        // 3.8.0.4 (2005/08/08) PGUPD も更新するように変更
    110        private static final String GE50_UPDATE =
    111                "UPDATE GE50 SET FGKAN = ? , DYUPD = ? , DMN_NAME = ? , DMN_HOST = ? " +
    112                " WHERE FGJ = '1'" +
    113                " AND   SYSTEM_ID = ?" +
    114                " AND   YKNO  = ?" ;
    115
    116        // GE56 のエラー情報を書き込むためのSQL文です。
    117        private static final String GE56_ERRMSG =
    118                "INSERT INTO GE56" +
    119                "        ( FGJ,SYSTEM_ID,YKNO,ERRMSG,DYSET,DYUPD,USRSET,USRUPD,PGUPD )" +
    120                " VALUES ( '1',?        ,?   ,?     ,?    ,?    ,?     ,?     ,?      )" ;
    121
    122        /** コネクションにアプリケーション情報を追記するかどうか指定 */
    123        public static final boolean USE_DB_APPLICATION_INFO  = HybsSystem.sysBool( "USE_DB_APPLICATION_INFO" ) ;
    124
    125        // 3.8.7.0 (2006/12/15) アクセスログ取得の為,ApplicationInfoオブジェクトを設定
    126        private final ApplicationInfo appInfo;
    127        private final String DBID = HybsSystem.sys( "RESOURCE_DBID" );          // 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対応
    128
    129        private final String USRSET ;
    130        private final String PGUPD ;
    131        private final String DMN_NAME ;         // 3.8.5.0 (2006/03/02)
    132
    133        private String systemId ;
    134        private String ykno             ;
    135        private String listid   ;
    136        private String joken    ;
    137        private String outdir   ;
    138        private String outfile  ;
    139        private String comments ;
    140//      private String fgnoml   ;                       // 5.10.0.0 (2018/06/08) ADD 帳票エラーメールの改修
    141        private boolean fgnoml  ;                       // 6.9.8.1 (2018/06/11) 帳票エラーメールの改修(メール不要フラグ=trueで不要、falseが必要)
    142
    143        /** ファンクション名    */
    144        protected final DBFunctionName dbName = DBFunctionName.getDBName( ConnectionFactory.getDBName( DBID ) ); // 5.9.31.2 (2018/04/20)
    145
    146        /**
    147         * ユーザーとプログラムIDを指定して、オブジェクトを構築します。
    148         * このオブジェクトを構築した時刻を、DYSET、DYUPD にセットします。
    149         * つまり、このオブジェクトで登録する一連のデータは、すべて同一時刻での登録になります。
    150         *
    151         * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得の為,ApplicationInfoオブジェクトを設定
    152         *
    153         * @param       usrset  ユーザー
    154         * @param       prgupd  プログラムID
    155         * @param       dmnName 更新デーモン名
    156         */
    157        public GE50Access( final String usrset, final String prgupd ,final String dmnName) {
    158                USRSET   = substr( usrset, 10, "UNNONE" ) ;
    159                PGUPD    = substr( prgupd, 10, "UNNONE" ) ;
    160                DMN_NAME = substr( dmnName,50, "UNNONE" ) ;
    161
    162                // 3.8.7.0 (2006/12/15) アクセスログ取得の為,ApplicationInfoオブジェクトを設定
    163                if( USE_DB_APPLICATION_INFO ) {
    164                        appInfo = new ApplicationInfo();
    165                        // ユーザーID,IPアドレス,ホスト名
    166                        appInfo.setClientInfo( USRSET,HybsSystem.HOST_ADRS,HybsSystem.HOST_NAME );
    167                        // 画面ID,操作,プログラムID
    168                        appInfo.setModuleInfo( "GE50Access",null,DMN_NAME );
    169                }
    170                else {
    171                        appInfo = null;
    172                }
    173        }
    174
    175        /**
    176         * systemId をセットします。
    177         *
    178         * @param systemId システムID
    179         */
    180        public void setSystemId ( final String systemId ) { this.systemId = systemId; }
    181
    182        /**
    183         * systemId を取得します。
    184         *
    185         * @return      システムID
    186         */
    187        public String getSystemId() { return systemId; }
    188
    189        /**
    190         * listid をセットします。
    191         *
    192         * @param listid 帳票ID
    193         */
    194        public void setListId( final String listid ) { this.listid = listid; }
    195
    196        /**
    197         * joken をセットします。
    198         *
    199         * @param joken 振分条件
    200         */
    201        public void setJoken( final String joken ) { this.joken = joken; }
    202
    203        /**
    204         * outdir をセットします。
    205         *
    206         * @param outdir 出力DIR
    207         */
    208        public void setOutDir( final String outdir ) { this.outdir = outdir; }
    209
    210        /**
    211         * outfile をセットします。
    212         *
    213         * @param outfile 出力ファイル
    214         */
    215        public void setOutFile( final String outfile ) { this.outfile = outfile; }
    216
    217        /**
    218         * comments をセットします。
    219         *
    220         * @param comments コメント
    221         */
    222        public void setComments( final String comments ) { this.comments = comments; }
    223
    224        /**
    225         * ykno をセットします。
    226         *
    227         * @param ykno 要求番号
    228         */
    229        public void setYkno( final String ykno ) { this.ykno = ykno; }
    230
    231        /**
    232         * ykno を取得します。
    233         *
    234         * @return      要求番号
    235         */
    236        public String getYkno() { return ykno; }
    237
    238        /**
    239         * 帳票エラー時のメール不要フラグをセットします(初期値=false:送信する)。
    240         *
    241         * 帳票エラー時のメール送信は帳票IDの正規表現でコントロール可能でしたが、
    242         * ID単位に未送信フラグを持たせてコントロール可能にします。
    243         * GE54にFGNOMLカラムを追加し、これが1の場合はエラーメールを送信しないようにします。
    244         * 帳票の動作にDBのカラム追加が伴うためバージョンを5.10系に上げます。
    245         * エラーメールが不要の場合は、"true", もしくは、１文字の場合のみ、"0" 以外の場合が、
    246         * メール不要として、エラーメールを送信しません。
    247         *
    248         * @og.rev 5.10.0.0 (2018/06/08) ADD
    249         * @og.rev 6.9.8.1 (2018/06/11) 帳票エラーメールの改修(メール不要フラグ=trueで不要、falseが必要)
    250         *
    251//       * @param fgnoml メール不要フラグ
    252         * @param flag メール不要フラグ
    253         */
    254//      public void setFgNoMl( final String fgnoml ) { this.fgnoml = fgnoml; }
    255        public void setFgNoMl( final String flag ) {
    256                fgnoml = StringUtil.nval( flag,fgnoml );                // true,TRUE,0以外の１文字の場合、true、それ以外は、初期値
    257        }
    258
    259        /**
    260         * 新たな要求番号を採番します(シーケンスより取得)
    261         * 採番後、内部の要求番号(ykno)もこの値に再セットされます。
    262         *
    263         * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得の為,ApplicationInfoオブジェクトを設定
    264         * @og.rev 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対策
    265         * @og.rev 5.9.31.2 (2018/04/20) シーケンスの取り方を変更
    266         * @og.rev 7.0.6.4 (2019/11/29) TransactionRealのclose漏れ対応
    267         *
    268         * @return      要求番号
    269         */
    270        public String makeYkno() {
    271//              try {
    272//      //              final String[][] vals = DBUtil.dbExecute( GE50_SEQ,null,appInfo, DBID );        // 5.5.5.1 (2012/08/07)
    273//      //              ykno = vals[0][0].trim();
    274//                      final Transaction tran = new TransactionReal( appInfo );                                        // 5.9.31.2 (2018/04/20)f
    275                try( Transaction tran = new TransactionReal( appInfo ) ) {                              // 7.0.6.4 (2019/11/29) try-with-resources文
    276                        ykno = Integer.toString( dbName.getSequence( GE50_SEQ, tran, DBID ) );
    277                }
    278                catch( final RuntimeException ex ) {
    279                        final String errMsg = "要求番号の採番に失敗しました。" + CR
    280                                                + " SQL=" + GE50_SEQ + CR ;             // 7.0.6.4 (2019/11/29) ex.getMessage は、追記しない。
    281//                                              + ex.getMessage();                              // 5.1.8.0 (2010/07/01) errMsg 修正
    282                        LogWriter.log( errMsg );
    283                        LogWriter.log( ex );
    284
    285                        throw new HybsSystemException( errMsg,ex );             // 7.0.6.4 (2019/11/29)
    286                }
    287                return ykno ;
    288        }
    289
    290        /**
    291         * 帳票要求テーブルにデータをセットします。
    292         * 内部変数にセットされている値を利用して、データ登録を行います。
    293         * 繰返し登録したい場合は、変更する値のみを、内部変数にセットしてから、
    294         * このメソッドを呼び出してください。
    295         * なお、完成フラグ(fgkan)は、内部変数に持っていないため、外部から指定してください。
    296         *
    297         * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得の為,ApplicationInfoオブジェクトを設定
    298         * @og.rev 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対策
    299         * @og.rev 6.4.2.0 (2016/01/29) DateSet.getDate( String ) を利用するように修正します。
    300         *
    301         * @param fgkan 完成フラグ
    302         */
    303        public void insertGE50( final String fgkan ) {
    304                final String DYSET = DateSet.getDate( "yyyyMMddHHmmss" ) ;              // 6.4.2.0 (2016/01/29)
    305
    306                // GE50_INSERT の引数
    307                final String[] args = new String[] {
    308                                                        systemId,                                                               // SYSTEM_ID
    309                                                        ykno ,                                                                  // YKNO
    310                                                        StringUtil.nval( listid,"NO_LIST" ),    // LISTID
    311                                                        StringUtil.nval( joken,"NO_JOKEN" ),    // JOKEN
    312                                                        fgkan,                                                                  // FGKAN
    313                                                        StringUtil.nval( outdir,"" ),                   // OUT_DIR
    314                                                        StringUtil.nval( outfile,"" ),                  // OUT_FILE
    315                                                        StringUtil.nval( comments,"" ),                 // COMMENTS
    316                                                        DYSET,                                  // DYSET
    317                                                        DYSET,                                  // DYUPD
    318                                                        USRSET,                                 // USRSET
    319                                                        USRSET,                                 // USRUPD
    320                                                        PGUPD,                                  // PGUPD
    321                                                        DMN_NAME,                               // DMN_NAME
    322                                                        HybsSystem.HOST_NAME    // DMN_HOST
    323                                                } ;
    324
    325                try {
    326                        DBUtil.dbExecute( GE50_INSERT,args,appInfo, DBID );     // 5.5.5.1 (2012/08/07)
    327                }
    328                catch( final RuntimeException ex ) {
    329                        final String errMsg = "帳票要求テーブルデータセットに失敗しました。" + CR
    330                                                + " SQL=" + GE50_INSERT + CR
    331                                                + ex.getMessage();                                                      // 5.1.8.0 (2010/07/01) errMsg 修正
    332                        LogWriter.log( errMsg );
    333                        LogWriter.log( ex );
    334                }
    335        }
    336
    337        /**
    338         * 処理終了後に完成フラグを設定します。
    339         * 内部変数にセットされている、systemId と ykno を利用して、データ登録を行います。
    340         * なお、完成フラグ(fgkan)は、内部変数に持っていないため、外部から指定してください。
    341         *
    342         * @og.rev 3.8.0.4 (2005/08/08) PGUPDを追加
    343         * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得の為,ApplicationInfoオブジェクトを設定
    344         * @og.rev 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対策
    345         * @og.rev 6.4.2.0 (2016/01/29) DateSet.getDate( String ) を利用するように修正します。
    346         *
    347         * @param fgkan 完成フラグ
    348         */
    349        public void updateGE50( final String fgkan ) {
    350                final String DYSET = DateSet.getDate( "yyyyMMddHHmmss" ) ;              // 6.4.2.0 (2016/01/29)
    351
    352                final String[] args = new String[] {
    353                                                        fgkan,                                          // FGKAN
    354                                                        DYSET,                                          // DYUPD
    355                                                        DMN_NAME,                                       // DMN_NAME
    356                                                        HybsSystem.HOST_NAME,           // DMN_HOST
    357                                                        systemId,                                       // SYSTEM_ID
    358                                                        ykno                                            // YKNO
    359                                                } ;
    360
    361                try {
    362                        DBUtil.dbExecute( GE50_UPDATE,args,appInfo, DBID );     // 5.5.5.1 (2012/08/07)
    363                }
    364                catch( final RuntimeException ex ) {
    365                        final String errMsg = "完成フラグ設定に失敗しました。" + CR
    366                                                + " SQL=" + GE50_UPDATE + CR
    367                                                + ex.getMessage();                                                      // 5.1.8.0 (2010/07/01) errMsg 修正
    368                        LogWriter.log( errMsg );
    369                        LogWriter.log( ex );
    370                }
    371        }
    372
    373        /**
    374         * エラー発生時に、エラーメッセージを登録します。
    375         * 内部変数にセットされている、systemId と ykno を利用して、データ登録を行います。
    376         *
    377         * @og.rev 3.8.5.3 (2006/06/30) エラーメッセージを 4000Byte以下にする。
    378         * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得の為,ApplicationInfoオブジェクトを設定
    379         * @og.rev 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対策
    380         * @og.rev 6.4.2.0 (2016/01/29) DateSet.getDate( String ) を利用するように修正します。
    381         * @og.rev 5.10.0.0 (2018/06/08) メール不要フラグ(fgNoMl)の判定を追加。
    382         * @og.rev 6.9.8.1 (2018/06/11) 帳票エラーメールの改修(メール不要フラグ=trueで不要、falseが必要)
    383         *
    384         * @param       inErrMsg        エラーメッセージ
    385         */
    386        public void insertErrorGE56( final String inErrMsg ) {
    387
    388                String outErrMsg = (inErrMsg == null) ? "" : inErrMsg.trim();
    389                if( outErrMsg.length() > 2000 ) {
    390                        final String code = HybsSystem.sys( "DB_ENCODE" );
    391                        final byte[] byteValue = StringUtil.makeByte( outErrMsg,code );
    392                        if( byteValue.length > 4000 ) {
    393                                outErrMsg = StringUtil.makeString( byteValue,0,4000,code );
    394                        }
    395                }
    396                final String DYSET = DateSet.getDate( "yyyyMMddHHmmss" ) ;              // 6.4.2.0 (2016/01/29)
    397
    398                final String[] args = new String[] {
    399                                                                systemId,
    400                                                                ykno,
    401                                                                outErrMsg ,             // ERRMSG
    402                                                                DYSET,                  // DYSET
    403                                                                DYSET,                  // DYUPD
    404                                                                USRSET,                 // USRSET
    405                                                                USRSET,                 // USRUPD
    406                                                                PGUPD };                // PGUPD
    407
    408                try {
    409                        DBUtil.dbExecute( GE56_ERRMSG,args,appInfo, DBID );     // 5.5.5.1 (2012/08/07)
    410                }
    411                catch( final RuntimeException ex ) {
    412                        final String errMsg = "エラーメッセージテーブルセットに失敗しました。" + CR
    413                                                + " SYSTEM_ID=[" + systemId + "] , YKNO=[" + ykno + "]" + CR
    414                                                + " SQL=" + GE56_ERRMSG + CR
    415                                                + ex.getMessage();                      // 5.1.8.0 (2010/07/01) errMsg 修正
    416                        LogWriter.log( errMsg );
    417                        LogWriter.log( ex );
    418                }
    419
    420//              sendMail( outErrMsg );                  // 3.8.0.4 (2005/08/08)
    421                // 5.10.0.0 (2018/06/08) MOD メール不要フラグが1以外の場合、メールを送信します
    422//              if( !"1".equals(fgnoml) ) {
    423                // 6.9.8.1 (2018/06/11) 帳票エラーメールの改修(メール不要フラグ=trueで不要、falseが必要)
    424                if( ! fgnoml ) {
    425                        sendMail( outErrMsg );          // 3.8.0.4 (2005/08/08)
    426                }
    427        }
    428
    429        /**
    430         * substring を補完する簡易メソッド
    431         *
    432         * substring で、文字をカットする場合、文字列長が、カットする文字数より
    433         * 長い必要があります。ここでは、最大長に制限をかけることが目的なので
    434         * 入力文字長が指定文字数より小さいケースがあります。そのチェックを
    435         * 簡易的に実行できるように、このメソッドで処理します。
    436         *
    437         * @param       inStr   入力文字
    438         * @param       len             最大文字数
    439         * @param       defVal  NULL 時の初期値
    440         *
    441         * @return 指定の文字数でカットされた新しい文字列
    442         */
    443        private String substr( final String inStr, final int len, final String defVal ) {
    444                return inStr == null
    445                                        ? defVal
    446                                        : inStr.length() > len
    447                                                ? inStr.substring( 0,len )
    448                                                : inStr ;
    449        }
    450
    451        /**
    452         * エラー情報のメール送信を行います。
    453         * エラーメールは、システムパラメータ の COMMON_MAIL_SERVER(メールサーバー)と
    454         * ERROR_MAIL_FROM_USER(エラーメール発信元)と、ERROR_MAIL_TO_USERS(エラーメール受信者)
    455         * がすべて設定されている場合に、送信されます。
    456         *
    457         * @og.rev 3.8.0.4 (2005/08/08) 新規追加
    458         * @og.rev 5.7.0.4 (2013/11/29) listIdの絞込み
    459         *
    460         * @param       inErrMsg        エラーメッセージ
    461         */
    462        private void sendMail( final String inErrMsg ) {
    463
    464                final String   host = HybsSystem.sys( "COMMON_MAIL_SERVER" );
    465                final String   from = HybsSystem.sys( "ERROR_MAIL_FROM_USER" );
    466                final String[] to = StringUtil.csv2Array( HybsSystem.sys( "ERROR_MAIL_TO_USERS" ) );
    467                final String   match_txt = HybsSystem.sys( "REPORT_ERRMAIL_REGEX" );    // 5.7.0.4 (2013/11/29)
    468
    469                if( host != null && from != null && to.length > 0 ) {
    470                        if( match_txt == null || match_txt.isEmpty()
    471                                        || listid == null || listid.isEmpty()
    472                                        || listid.matches( match_txt ) ){                                                       // 5.7.0.4 (2013/11/29)
    473                                // 3.8.5.0 (2006/03/02) DMN_NAME、DMN_HOST 追加
    474                                // 5.7.0.4 (2013/11/29) listid追加
    475                                final String subject = "SYSTEM_ID=[" + systemId + "] , YKNO=[" + ykno + "] , "
    476                                                           + "DMN_NAME=[" + DMN_NAME + "] , DMN_HOST=[" + HybsSystem.HOST_NAME + "]"
    477                                                           + "LISTID=[" + listid +"]";
    478                                try {
    479                                        final MailTX tx = new MailTX( host );
    480        //                              tx.setHost( host );
    481                                        tx.setFrom( from );
    482                                        tx.setTo( to );
    483                                        tx.setSubject( "帳票エラー：" + subject );
    484                                        tx.setMessage( inErrMsg );
    485                                        tx.sendmail();
    486                                }
    487                                catch( final Throwable ex ) {
    488                                        final String errMsg = "エラー時メール送信に失敗しました。" + CR
    489                                                                + " SUBJECT:" + subject                                 + CR
    490                                                                + " HOST:" + host                                               + CR
    491                                                                + " FROM:" + from                                               + CR
    492                                                                + " TO:"   + Arrays.toString( to )              + CR
    493                                                                + ex.getMessage();              // 5.1.8.0 (2010/07/01) errMsg 修正
    494                                        LogWriter.log( errMsg );
    495                                        LogWriter.log( ex );
    496                                }
    497                        }
    498                }
    499        }
    500}