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", もしくは、1文字の場合のみ、"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以外の1文字の場合、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}