    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.report2;
    017
    018import org.opengion.fukurou.system.OgRuntimeException ;         // 6.4.2.0 (2016/01/29)
    019import java.io.File;
    020
    021import org.opengion.fukurou.util.StringUtil;                            // 6.9.8.1 (2018/06/11)
    022import org.opengion.hayabusa.db.DBTableModel;
    023import static org.opengion.fukurou.system.HybsConst.BUFFER_MIDDLE;      // 6.1.0.0 (2014/12/26) refactoring
    024
    025/**
    026 * 帳票処理要求を管理するキューオブジェクトです。
    027 * このオブジェクトでは、帳票の定義及びデータと、処理中に発生したエラーメッセージを管理します。
    028 * また、このキューを生成したオブジェクトもこのオブジェクトにセットされます。
    029 *
    030 * @og.group 帳票システム
    031 *
    032 * @version  4.0
    033 * @author   Hiroki.Nakamura
    034 * @since    JDK1.6
    035 */
    036public class ExecQueue {
    037
    038        /** 実行方法 {@value} */
    039        protected static final String OUT_ODS_ONLY              = "1";
    040        /** 実行方法 {@value} */
    041        protected static final String OUT_PRINT_ONLY    = "2";
    042        /** 実行方法 {@value} */
    043        protected static final String OUT_ODS_PRINT             = "3";
    044        /** 実行方法 {@value} */
    045        protected static final String OUT_ODS_PDF               = "P";
    046        /** 実行方法 {@value} */
    047        protected static final String OUT_ODS_PRINT_PDF = "Q";
    048        /** 実行方法 {@value} */
    049        protected static final String OUT_ODS_EXCEL             = "E";
    050        /** 実行方法 {@value} */
    051        protected static final String OUT_ODS_ODS               = "S"; // 4.3.3.4 (2008/11/01) 追加
    052        /** 実行方法 {@value} */
    053        protected static final String IN_INPUT_ONLY             = "5";
    054        /** 実行方法 {@value} */
    055        protected static final String IN_EXEC_ONLY              = "6";
    056        /** 実行方法 {@value} */
    057        protected static final String IN_INPUT_EXEC             = "7";
    058        /** 実行方法 {@value} */
    059        protected static final String RFID_PRINT                = "A";
    060        /** 実行方法 {@value} */
    061        protected static final String RFID_ALLPRINT             = "B";
    062        /** 実行方法 {@value} */
    063        protected static final String RFID_ALLERASE             = "C";
    064        /** 実行方法 {@value} */
    065        protected static final String RFID_SEQERASE             = "D";
    066
    067        // 5.9.0.0 (2015/09/04) CSV出力対応
    068        /** 実行方法 {@value} */
    069        protected static final String CSV_PRINT                 = "G";
    070        /** 実行方法 {@value} */
    071        protected static final String CSV_PRINT_EXCEL   = "H";
    072        /** 実行方法 {@value} */
    073        protected static final String CSV_PRINT_PDF             = "I";
    074        /** 実行方法 {@value} */
    075        protected static final String CSV_PRINT_EXCEL2  = "J"; // 5.9.4.2 (2016/01/15) EXCEL2追加
    076
    077        /** 最大シート数 {@value} */
    078        protected static final int MAX_SHEETS_PER_FILE  = 256; // 5.1.2.0 (2010/01/01)
    079
    080        private String          ykno            ;
    081        private String          systemId        ;
    082        private DBTableModel body               ;
    083        private DBTableModel header             ;
    084        private DBTableModel footer             ;
    085        private String          listId          ;
    086        private String          pdfPasswd       ;
    087        private String          lang            ;
    088        private String          threadId        ;
    089        private String          templateName;
    090        private String          outputType      ;
    091        private String          printerName     ;
    092        private String          outputName      ;
    093        private boolean         fglocal         ;
    094        private boolean         fgcut           ;
    095        private QueueManager manager    ;
    096        private String          prgdir          ;               // 4.3.3.0 (2008/10/01) 板金RFID対応。
    097        private String          prgfile         ;               // 4.3.3.0 (2008/10/01)
    098        private String          prtid           ;               // 4.3.3.0 (2008/10/01)
    099
    100        private String          grpid           ;               // 5.9.2.2 (2015/11/20)
    101        private String          dmngrp          ;               // 5.9.2.2 (2015/11/20)
    102        private int                     pageCnt         ;               // 5.1.2.0 (2010/01/01) 処理したページ数
    103        private int                     rowCnt          ;               // 5.1.2.0 (2010/01/01) 処理した行数
    104        private boolean         isDataEnd       ;               // 5.1.2.0 (2010/01/01) 全データが処理されたか (メソッド名と同じ変数名変更)
    105
    106        private boolean         useSheetName;           // 5.7.6.2 (2014/05/16) PAGEBREAKカラムの値を、シート名として使うかどうか。
    107//      private String          fgnoml          = "0";  // 5.10.0.0 (2018/06/08) メール不要フラグ
    108        private boolean         fgnoml          ;               // 6.9.8.1 (2018/06/11) 帳票エラーメールの改修(メール不要フラグ=trueで不要、falseが必要)
    109
    110        private final StringBuilder errMsg = new StringBuilder( BUFFER_MIDDLE );
    111
    112        /**
    113         * デフォルトコンストラクター
    114         *
    115         * @og.rev 6.4.2.0 (2016/01/29) PMD refactoring. Each class should declare at least one constructor.
    116         */
    117        public ExecQueue() { super(); }         // これも、自動的に呼ばれるが、空のメソッドを作成すると警告されるので、明示的にしておきます。
    118
    119        /**
    120         * 要求NOをセットします。
    121         *
    122         * @param ykno 要求NO
    123         */
    124        public void setYkno( final String ykno ) {
    125                this.ykno = ykno;
    126        }
    127
    128        /**
    129         * 要求NOを取得します。
    130         *
    131         * @return      要求NO
    132         */
    133        public String getYkno() {
    134                return ykno;
    135        }
    136
    137        /**
    138         * システムIDをセットします。
    139         *
    140         * @param systemId システムID
    141         */
    142        public void setSystemId( final String systemId ) {
    143                this.systemId = systemId;
    144        }
    145
    146        /**
    147         * システムIDを取得します。
    148         *
    149         * @return  StringシステムID
    150         */
    151        public String getSystemId() {
    152                return systemId;
    153        }
    154
    155        /**
    156         * ボディー部分のDBTableModelをセットします。
    157         *
    158         * @param body DBTableModelオブジェクト
    159         */
    160        public void setBody( final DBTableModel body ) {
    161                this.body = body;
    162        }
    163
    164        /**
    165         * ボディー部分のDBTableModelを取得します。
    166         *
    167         * @return      ボディー部分のDBTableModelオブジェクト
    168         */
    169        public DBTableModel getBody() {
    170                return body;
    171        }
    172
    173        /**
    174         * ヘッダー部分のDBTableModelをセットします。
    175         *
    176         * @param header DBTableModelオブジェクト
    177         */
    178        public void setHeader( final DBTableModel header ) {
    179                this.header = header;
    180        }
    181
    182        /**
    183         * ヘッダー部分のDBTableModelを取得します。
    184         *
    185         * @return      ヘッダー部分のDBTableModelオブジェクト
    186         */
    187        public DBTableModel getHeader() {
    188                return header;
    189        }
    190
    191        /**
    192         * フッター部分のDBTableModelをセットします。
    193         *
    194         * @param footer DBTableModelオブジェクト
    195         */
    196        public void setFooter( final DBTableModel footer ) {
    197                this.footer = footer;
    198        }
    199
    200        /**
    201         * フッター部分のDBTableModelを取得します。
    202         *
    203         * @return      フッター部分のDBTableModelオブジェクト
    204         */
    205        public DBTableModel getFooter() {
    206                return footer;
    207        }
    208
    209        /**
    210         * 帳票IDをセットします。
    211         *
    212         * @param listId 帳票ID
    213         */
    214        public void setListId( final String listId ) {
    215                this.listId = listId;
    216        }
    217
    218        /**
    219         * 帳票IDを取得します。
    220         *
    221         * @return 帳票ID
    222         */
    223        public String getListId() {
    224                return listId;
    225        }
    226
    227        /**
    228         * PDFパスワードをセットします。
    229         *
    230         * @param pdfPasswd PDFパスワード
    231         */
    232        public void setPdfPasswd( final String pdfPasswd ) {
    233                this.pdfPasswd = pdfPasswd;
    234        }
    235
    236        /**
    237         * PDFパスワードを取得します。
    238         *
    239         * @return PDFパスワード
    240         */
    241        public String getPdfPasswd() {
    242                return pdfPasswd;
    243        }
    244
    245        /**
    246         * 言語をセットします。
    247         *
    248         * @param lang 言語
    249         */
    250        public void setLang( final String lang ) {
    251                this.lang = lang;
    252        }
    253
    254        /**
    255         * 言語を取得します。
    256         *
    257         * @return 言語
    258         */
    259        public String getLang() {
    260                return lang;
    261        }
    262
    263        /**
    264         * 雛形ファイル名をセットします。
    265         *
    266         * @param templateName 雛形ファイル名
    267         */
    268        public void setTemplateName( final String templateName ) {
    269                this.templateName = templateName;
    270        }
    271
    272        /**
    273         * 雛形ファイル名を取得します。
    274         *
    275         * @return 帳票雛形ファイル名
    276         */
    277        public String getTemplateName() {
    278                return templateName;
    279        }
    280
    281        /**
    282         * 実行方法をセットします。
    283         *
    284         * @param outputType 実行方法
    285         */
    286        public void setOutputType( final String outputType ) {
    287                this.outputType = outputType;
    288        }
    289
    290        /**
    291         * 出力タイプを取得します。
    292         *
    293         * @return 出力タイプ
    294         */
    295        public String getOutputType() {
    296                return outputType;
    297        }
    298
    299        /**
    300         * プリンター名をセットします。
    301         *
    302         * @param  printerName プリンター名
    303         */
    304        public void setPrinterName( final String printerName ) {
    305                this.printerName = printerName;
    306        }
    307
    308        /**
    309         * プリンター名を取得します。
    310         *
    311         * @return プリンタ名
    312         */
    313        public String getPrinterName() {
    314                return printerName;
    315        }
    316
    317        /**
    318         * 処理要求を処理するスレッドIDをセットします。
    319         *
    320         * @param threadId スレッドID
    321         */
    322        public void setThreadId( final String threadId ) {
    323                this.threadId = threadId;
    324        }
    325
    326        /**
    327         * 処理要求を処理するスレッドIDを取得します。
    328         *
    329         * @return スレッドID
    330         */
    331        public String getThreadId() {
    332                return threadId;
    333        }
    334
    335        /**
    336         * 出力ファイル名をセットします。
    337         *
    338         * @param outputName 出力ファイル名
    339         */
    340        public void setOutputName( final String outputName ) {
    341                this.outputName = outputName;
    342        }
    343
    344        /**
    345         * 出力ファイル名を設定します。
    346         * GE50に設定されていない場合は第四引数(要求番号)を利用する。
    347         * その場合、タイプに応じた拡張子が自動設定される。
    348         *
    349         * ".xls" : OUT_ODS_EXCEL
    350         * ".pdf" : OUT_ODS_PDF , OUT_ODS_PRINT_PDF
    351         * ".ods" : OUT_ODS_ODS
    352         * ".xml" : RFID_PRINT , RFID_ALLPRINT , RFID_ALLERASE , RFID_SEQERASE
    353         * ".csv" : CSV_PINT , CSV_PRINT_EXCEL , CSV_PRINT_PDF
    354         *
    355         * @og.rev 4.3.3.4 (2008/11/01) ODS出力対応
    356         * @og.rev 5.4.3.0 (2011/12/26) RFIDデフォルト対応
    357         * @og.rev 5.4.4.1 (2012/02/03) RFID拡張子変更
    358         * @og.rev 5.9.0.0 (2015/09/04) CSV対応
    359         *
    360         * @param       outputDir       出力ディレクトリ名
    361         * @param       outputFile      出力ファイル名
    362         * @param       type            タイプ
    363         * @param       yokyu           要求番号(ファイル名が指定されていない場合のファイル名)
    364         *
    365         */
    366        public void setOutputName( final String outputDir, final String outputFile, final String type, final String yokyu ){
    367                final StringBuilder filePath = new StringBuilder( BUFFER_MIDDLE );
    368                filePath.append( outputDir ).append( File.separator );          // 6.0.2.5 (2014/10/31) char を append する。
    369
    370                if( outputFile == null || outputFile.isEmpty() ){ // ファイル名が指定されていない場合は要求番号を利用する。
    371                        if( OUT_ODS_EXCEL.equals( type ) ){
    372                                filePath.append( yokyu );
    373                                filePath.append( ".xls" );
    374                        }
    375                        else if( OUT_ODS_PDF.equals( type ) || OUT_ODS_PRINT_PDF.equals( type ) ){
    376                                filePath.append( yokyu );
    377                                filePath.append( ".pdf" );
    378                        }
    379                        // 4.3.3.4 (2008/11/01) 追加
    380                        else if( OUT_ODS_ODS.equals ( type ) ){
    381                                filePath.append( yokyu );
    382                                filePath.append( ".ods" );
    383                        }
    384                        // 5.4.3.0 (2011/12/26) 追加
    385                        // 5.4.4.2 (2012/02/03) .txtではなく.xml
    386                        else if( ExecQueue.RFID_PRINT.equals( type ) || ExecQueue.RFID_ALLPRINT.equals( type )
    387                                        || ExecQueue.RFID_ALLERASE.equals( type ) || ExecQueue.RFID_SEQERASE.equals( type ) ) {
    388                                filePath.append( yokyu );
    389                                filePath.append( ".xml" ); //txt-xml
    390                        }
    391                        // 5.9.0.0 (2015/09/04) 追加
    392                        // 5.9.4.2 (2016/01/13) EXCEL2追加
    393                        else if( ExecQueue.CSV_PRINT.equals( type ) || ExecQueue.CSV_PRINT_EXCEL.equals( type )
    394                                        || ExecQueue.CSV_PRINT_PDF.equals( type ) || ExecQueue.CSV_PRINT_EXCEL2.equals( type ) ) {
    395                                filePath.append( yokyu );
    396                                filePath.append( ".csv" );
    397                        }
    398                }
    399                else {
    400                        filePath.append( outputFile );
    401                }
    402
    403                this.outputName = filePath.toString();
    404        }
    405
    406        /**
    407         * 出力ファイル名を取得します。
    408         *
    409         * @og.rev 5.1.2.0 (2010/01/01) 256シートを超える場合に対応。2ファイル目以降は、_1、_2･･･をファイル名の後ろにつける
    410         * @og.rev 6.3.9.0 (2015/11/06) コンストラクタで初期化されていないフィールドを null チェックなしで利用している(findbugs)
    411         *
    412         * @return 出力先ファイル名
    413         * @og.rtnNotNull
    414         */
    415        public String getOutputName() {
    416                // 6.3.9.0 (2015/11/06) コンストラクタで初期化されていないフィールドを null チェックなしで利用している(findbugs)
    417                if( outputName == null ) {
    418                        final String errMsg = "#setOutputName(String) または、#setOutputName(String,String,String,String)を先に実行しておいてください。" ;
    419                        throw new OgRuntimeException( errMsg );
    420                }
    421
    422                if( pageCnt <= MAX_SHEETS_PER_FILE ) {
    423                        return outputName;
    424                }
    425                else {
    426                        final StringBuilder fileName = new StringBuilder( BUFFER_MIDDLE );
    427
    428                        final int idx = outputName.lastIndexOf( '.' );
    429                        final String name = outputName.substring( 0, idx );
    430                        final String suffix = outputName.substring( idx );
    431                        final int addNo = (int)Math.ceil( (double)pageCnt/(double)MAX_SHEETS_PER_FILE ) - 1;
    432
    433                        fileName.append( name ).append( '_' ).append( addNo ).append( suffix );         // 6.0.2.5 (2014/10/31) char を append する。
    434
    435                        return fileName.toString();
    436                }
    437        }
    438
    439        /**
    440         * 実行ファイルディレクトリを指定します。
    441         *
    442         * @og.rev 4.3.3.0 (2008/10/01) 板金RFID対応
    443         *
    444         * @param dir ディレクトリ
    445         */
    446        public void setPrgDir( final String dir ) {
    447                this.prgdir = dir;
    448        }
    449
    450        /**
    451         * 実行ファイルディレクトリを取得します。
    452         *
    453         * @og.rev 4.3.3.0 (2008/10/01) 板金RFID対応
    454         *
    455         * @return プログラムディレクトリ
    456         */
    457        public String getPrgDir() {
    458                return prgdir;
    459        }
    460
    461        /**
    462         * 実行ファイル名をセットします。
    463         *
    464         * @og.rev 4.3.3.0 (2008/10/01) 板金RFID対応
    465         * @param       file    ファイル名
    466         */
    467        public void setPrgFile( final String file ) {
    468                this.prgfile = file;
    469        }
    470
    471        /**
    472         * 実行ファイル名を取得します。
    473         *
    474         * @og.rev 4.3.3.0 (2008/10/01) 板金RFID対応
    475         *
    476         * @return プログラムファイル名
    477         */
    478        public String getPrgFile() {
    479                return prgfile;
    480        }
    481
    482        /**
    483         * プリンタIDをセットします。
    484         *
    485         * @og.rev 4.3.3.0 (2008/10/01) 板金RFID対応
    486         * @param       id      プリンタID
    487         */
    488        public void setPrtId( final String id ) {
    489                this.prtid = id;
    490        }
    491
    492        /**
    493         * プリンタIDを取得します。
    494         *
    495         * @og.rev 4.3.3.0 (2008/10/01) 板金RFID対応
    496         *
    497         * @return プリンタID
    498         */
    499        public String getPrtId() {
    500                return prtid;
    501        }
    502
    503        /**
    504         * グループIDをセットします。
    505         *
    506         * @og.rev 5.9.2.2 (2015/11/20)
    507         *
    508         * @param       id      グループID
    509         */
    510        public void setGrpId( final String id ) {
    511                this.grpid = id;
    512        }
    513
    514        /**
    515         * グループIDを取得します。
    516         *
    517         * @og.rev 5.9.2.2 (2015/11/20)
    518         *
    519         * @return グループID
    520         */
    521        public String getGrpId() {
    522                return grpid;
    523        }
    524
    525        /**
    526         * デーモングループをセットします。
    527         *
    528         * @og.rev 5.9.2.2 (2015/11/20)
    529         *
    530         * @param       name    デーモングループ
    531         */
    532        public void setDmnGrp( final String name ) {
    533                this.dmngrp = name;
    534        }
    535
    536        /**
    537         * デーモングループを取得します。
    538         *
    539         * @og.rev 5.9.2.2 (2015/11/20)
    540         *
    541         * @return デーモングループ
    542         */
    543        public String getDmnGrp() {
    544                return dmngrp;
    545        }
    546
    547        /**
    548         * ローカルリソース使用フラグをセットします(初期値:false)。
    549         *
    550         * @param       fglocal ローカルリソース使用フラグ[true:使用する/false:使用しない]
    551         */
    552        public void setFglocal( final boolean fglocal ) {
    553                this.fglocal = fglocal;
    554        }
    555
    556        /**
    557         * ローカルリソース使用フラグを取得します。
    558         *
    559         * @return ロールリソース使用フラグ[true:使用する/false:使用しない]
    560         */
    561        public boolean isFglocal() {
    562                return fglocal;
    563        }
    564
    565        /**
    566         * ページエンドカットフラグをセットします(初期値:false)。
    567         *
    568         * @param fgcut ページエンドカットの使用可否[true:使用/false:通常]
    569         */
    570        public void setFgcut( final boolean fgcut ) {
    571                this.fgcut = fgcut;
    572        }
    573
    574        /**
    575         * ページエンドカットフラグを取得します。
    576         *
    577         * @return ページエンドカットフラグ
    578         */
    579        public boolean isFgcut() {
    580                return fgcut;
    581        }
    582
    583        /**
    584         * PAGEBREAKカラムの値を、シート名として使うかどうかをセットします(初期値:false)。
    585         *
    586         * @og.rev 5.7.6.2 (2014/05/16) 新規追加
    587         *
    588         * @param useSheetName PAGEBREAKカラムのシート名使用可否[true:使用/false:使用しない]
    589         */
    590        public void setUseSheetName( final boolean useSheetName ) {
    591                this.useSheetName = useSheetName;
    592        }
    593
    594        /**
    595         * PAGEBREAKカラムの値を、シート名として使うかどうかを取得します。
    596         *
    597         * @og.rev 5.7.6.2 (2014/05/16) 新規追加
    598         *
    599         * @return PAGEBREAKカラムのシート名使用可否[true:使用/false:使用しない]
    600         */
    601        public boolean isUseSheetName() {
    602                return useSheetName;
    603        }
    604
    605        /**
    606         * キューマネージャーをセットします。
    607         *
    608         * @param manager キューマネージャー
    609         */
    610        public void setManager( final QueueManager manager ) {
    611                this.manager = manager;
    612        }
    613
    614        /**
    615         * 帳票処理データをセットします。
    616         * 既にテーブルモデルがセットされている場合は、再セットしません。
    617         *
    618         */
    619        public void setData() {
    620                if( body == null && manager != null ) {
    621                        manager.set( this );
    622                }
    623        }
    624
    625        /**
    626         * キューを実行中の状態に更新します。
    627         *
    628         */
    629        public void setExecute() {
    630                if( manager != null ) {
    631                        manager.execute( this );
    632                }
    633        }
    634
    635        /**
    636         * キューを完了済の状態に更新します。
    637         *
    638         */
    639        public void setComplete() {
    640                if( manager != null ) {
    641                        manager.complete( this );
    642                }
    643        }
    644
    645        /**
    646         * キューをエラーの状態に更新します。
    647         */
    648        public void setError() {
    649                if( manager != null ) {
    650                        manager.error( this );
    651                }
    652        }
    653
    654        /**
    655         * エラーメッセージをセットします。
    656         *
    657         * @param msg エラーメッセージ
    658         */
    659        public void addMsg( final String msg ) {
    660                errMsg.append( msg );
    661        }
    662
    663        /**
    664         * エラーメッセージを取得します。
    665         *
    666         * @return エラーメッセージ
    667         * @og.rtnNotNull
    668         */
    669        public String getMsg() {
    670                return errMsg.toString();
    671        }
    672
    673        /**
    674         * 処理したページ数を引数の分だけカウントアップします。
    675         *
    676         * @og.rev 5.1.2.0 (2010/01/01) 新規追加
    677         *
    678         * @param pgs カウントアップするページ数
    679         */
    680        public void addExecPageCnt( final int pgs ) {
    681                pageCnt += pgs;
    682        }
    683
    684        /**
    685         * 処理したページ数を返します。
    686         *
    687         * @og.rev 5.1.2.0 (2010/01/01) 新規追加
    688         *
    689         * @return 処理したページ数
    690         */
    691        public int getExecPagesCnt() {
    692                return pageCnt;
    693        }
    694
    695        /**
    696         * 処理した行数をセットします。
    697         *
    698         * @og.rev 5.1.2.0 (2010/01/01) 新規追加
    699         *
    700         * @param rws 処理した行数
    701         */
    702        public void setExecRowCnt( final int rws ) {
    703                rowCnt = rws;
    704        }
    705
    706        /**
    707         * 処理した行数を返します。
    708         *
    709         * @og.rev 5.1.2.0 (2010/01/01) 新規追加
    710         *
    711         * @return 処理した行数
    712         */
    713        public int getExecRowCnt() {
    714                return rowCnt;
    715        }
    716
    717        /**
    718         * 全ての行が処理されたかをセットします(初期値:false)。
    719         *
    720         * これは、処理結果が、256シートを超えていた場合、再度残りのデータについて
    721         * 処理を行うかどうかの判定するために、利用します。
    722         *
    723         * @og.rev 5.1.2.0 (2010/01/01) 新規追加
    724         *
    725         * @param flag 全ての行が処理されたか
    726         */
    727        public void setEnd( final boolean flag ) {
    728                isDataEnd = flag;
    729        }
    730
    731        /**
    732         * 全ての行が処理されているかを返します。
    733         *
    734         * これは、処理結果が、256シートを超えていた場合、再度残りのデータについて
    735         * 処理を行うかどうかの判定するために、利用します。
    736         *
    737         * @og.rev 5.1.2.0 (2010/01/01) 新規追加
    738         *
    739         * @return 全ての行が処理されたか
    740         */
    741        public boolean isEnd() {
    742                return isDataEnd;
    743        }
    744
    745        /**
    746         * FGNOMI(メール不要フラグ)を設定します(初期値=false:送信する)。
    747         *
    748         * 帳票エラー時のメール送信は帳票IDの正規表現でコントロール可能でしたが、
    749         * ID単位に未送信フラグを持たせてコントロール可能にします。
    750         * GE54にFGNOMLカラムを追加し、これが1の場合はエラーメールを送信しないようにします。
    751         * 帳票の動作にDBのカラム追加が伴うためバージョンを5.10系に上げます。
    752         * エラーメールが不要の場合は、"true", もしくは、１文字の場合のみ、"0" 以外の場合が、
    753         * メール不要として、エラーメールを送信しません。
    754         *
    755         * @og.rev 5.10.0.0 (2018/06/08) 新規追加
    756         * @og.rev 6.9.8.1 (2018/06/11) 帳票エラーメールの改修(メール不要フラグ=trueで不要、falseが必要)
    757         *
    758//       * @param fgnoml
    759         * @param flag メール不要フラグ
    760         */
    761//      public void setFgnoml( final String fgnoml) {
    762        public void setFgnoml( final String flag ) {
    763//              this.fgnoml = fgnoml;
    764                fgnoml = StringUtil.nval( flag,fgnoml );                // true,TRUE,0以外の１文字の場合、true、それ以外は、初期値
    765        }
    766
    767        /**
    768         * FGNOMI(メール不要フラグ)を取得します。
    769         *
    770         * @og.rev 5.10.0.0 (2018/06/08) 新規追加
    771         * @og.rev 6.9.8.1 (2018/06/11) 帳票エラーメールの改修(メール不要フラグ=trueで不要、falseが必要)
    772         *
    773//       * @return fgnomi
    774         * @return メール不要フラグ [true:メール不要/false:エラーメール送信する]
    775         */
    776//      public String getFgnoml() {
    777        public boolean isFgnoml() {
    778//              return this.fgnoml;
    779                return fgnoml;
    780        }
    781}