    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 java.util.concurrent.ConcurrentMap;                                                              // 6.4.3.3 (2016/03/04)
    019import java.util.concurrent.ConcurrentHashMap;                                                  // 6.4.3.1 (2016/02/12) refactoring
    020
    021import org.opengion.fukurou.db.DBUtil;
    022import org.opengion.fukurou.db.ApplicationInfo;
    023import org.opengion.fukurou.util.StringUtil;
    024import org.opengion.hayabusa.common.HybsSystem;
    025import org.opengion.hayabusa.db.DBTableModel;
    026import org.opengion.hayabusa.report2.QueueManager_DB.DBTableModelCreator;
    027import org.opengion.hayabusa.resource.ResourceFactory;
    028import org.opengion.hayabusa.resource.ResourceManager;
    029import static org.opengion.fukurou.system.HybsConst.CR ;                                // 6.1.0.0 (2014/12/26)
    030import static org.opengion.fukurou.system.HybsConst.BUFFER_MIDDLE;              // 6.1.0.0 (2014/12/26) refactoring
    031
    032/**
    033 * DBTableModelオブジェクトをレポート形式に返還するタグリブクラスです。
    034 * このオブジェクトに、 データ(DBTableModel)と、コントローラ(DBTableReport クラス)を与えて、
    035 * 外部からコントロールすることで、各種形式で データ(DBTableModel)を表示させることが
    036 * 可能です。
    037 *
    038 * @og.group 帳票システム
    039 *
    040 * @version  4.0
    041 * @author   Hiroki Nakamura
    042 * @since    JDK5.0,
    043 */
    044public class RFIDPrintRequest {
    045        private final StringBuilder errMsg = new StringBuilder( BUFFER_MIDDLE );
    046
    047        // DBTableModel に対して設定する情報
    048        private ResourceManager resource        ;
    049
    050        // 受け渡し変数
    051        private final String    SYSTEM_ID       ;
    052        private final String    YKNO            ;
    053        private final String    LISTID          ;
    054        private final String    LANG            ;
    055        private final String    FGRUN           ;
    056        private final String    PRTID           ;
    057        private final String    PRGDIR          ;               // 4.3.3.0 (2008/10/01) 板金RFID対応で追加
    058        private final String    PRGFILE         ;               // 4.3.3.0 (2008/10/01) 追加
    059        private final String    OUTDIR          ;               // 4.3.3.0 (2008/10/01) 追加
    060        private final boolean   DEBUG           ;
    061        private final String    FILENAME        ;               // 5.4.3.9 (2012/01/25)
    062
    063//      private       String    BASE_SYS_ID = "**" ;    // 7.2.6.0 (2020/06/30) ベースシステムID
    064
    065        // オブジェクト変数
    066        private boolean         fgLOCAL         ;
    067        private String          prtName         ;
    068        private String          hostName        ;
    069        private String          portnm          ;
    070        private String          fgkan           = GE50Access.FG_ERR2;   // 4.3.3.0 (2008/10/01) 初期値エラー
    071        /** 6.4.3.1 (2016/02/12) PMD refactoring. HashMap → ConcurrentHashMap に置き換え。  */
    072        private final ConcurrentMap<String,String[]> rfidLayoutMap = new ConcurrentHashMap<>();         // 6.4.3.3 (2016/03/04)
    073
    074        // GE54 の帳票定義情報を取得するSQL文です。
    075        private static final String GE54_SELECT =
    076                "SELECT BSQL,FGLOCAL,SYSTEM_ID" +
    077                " FROM GE54" +
    078                " WHERE FGJ = '1'" +
    079                " AND  SYSTEM_ID IN (?,'**')" +
    080                " AND  LISTID = ?" ;
    081
    082        // GE54 の帳票定義情報を取得するSQL文です。
    083        // 7.2.6.1 (2020/07/17) "**"以外にベースとなるSYSTEM_ID(RESOURCE_BASE_SYSTEM_ID)設定の対応
    084        // 7.2.8.0 (2020/09/04) RESOURCE_BASE_SYSTEM_ID 対応で、帳票系は難しいので対応しません
    085//      private static final String GE54_SELECT =
    086//              "SELECT BSQL,FGLOCAL,SYSTEM_ID"
    087//              + " from ("
    088//              + "  select 0 as SNO,B.* from GE54 B where SYSTEM_ID='**' and LISTID=? and FGJ='1'"     // ｴﾝｼﾞﾝ共通
    089//              + "  union all"
    090//              + "  select 1 as SNO,B.* from GE54 B where SYSTEM_ID=? and LISTID=? and FGJ='1'"        // RESOURCE_BASE_SYSTEM_ID
    091//              + "  union all"
    092//              + "  select 2 as SNO,B.* from GE54 B where SYSTEM_ID=? and LISTID=? and FGJ='1'"        // 最上位ののSYSTEM_ID
    093//              + " ) A"
    094//              + " order by SNO,SYSTEM_ID" ;
    095
    096        private static final int GE54_FGLOCAL   = 1;
    097//      private static final int GE54_SYSTEM_ID = 2;
    098
    099//      // 5.4.4.0 (2012/02/01) 互換モード対応漏れ
    100//      // 6.9.5.0 (2018/04/23) VER4_COMPATIBLE_MODE 廃止
    101//      private static final String HOST = HybsSystem.sysBool( "VER4_COMPATIBLE_MODE" ) ? "HOST" : "HOST_ID";
    102
    103        // GE55 の出力先マスタ情報を取得するSQL文です。
    104        // 5.1.0.0 (2009/11/04) HOST ⇒ HOST_ID
    105        // 5.4.3.1 (2011/12/27) PORTNM
    106        // 5.4.4.0 (2012/02/01) 互換モード
    107        // 6.9.5.0 (2018/04/23) VER4_COMPATIBLE_MODE 廃止
    108        private static final String GE55_SELECT =
    109                "SELECT PRTNM,HOST_ID,SYSTEM_ID,PORTNM" +
    110                " FROM GE55" +
    111                " WHERE FGJ = '1'" +
    112                " AND  SYSTEM_ID IN (?,'**')" +
    113                " AND  PRTID = ?" ;
    114
    115        // 7.2.6.1 (2020/07/17) "**"以外にベースとなるSYSTEM_ID(RESOURCE_BASE_SYSTEM_ID)設定の対応
    116        // 7.2.8.0 (2020/09/04) RESOURCE_BASE_SYSTEM_ID 対応で、帳票系は難しいので対応しません
    117//      private static final String GE55_SELECT =
    118//              "SELECT PRTNM,HOST_ID,SYSTEM_ID,PORTNM"
    119//              + " from ("
    120//              + "  select 0 as SNO,B.* from GE55 B where SYSTEM_ID='**' and PRTID=? and FGJ='1'"      // ｴﾝｼﾞﾝ共通
    121//              + "  union all"
    122//              + "  select 1 as SNO,B.* from GE55 B where SYSTEM_ID=? and PRTID=? and FGJ='1'" // RESOURCE_BASE_SYSTEM_ID
    123//              + "  union all"
    124//              + "  select 2 as SNO,B.* from GE55 B where SYSTEM_ID=? and PRTID=? and FGJ='1'" // 最上位ののSYSTEM_ID
    125//              + " ) A"
    126//              + " order by SNO,SYSTEM_ID" ;
    127
    128        private static final int GE55_PRTNM             = 0;
    129        private static final int GE55_HOST_ID   = 1;
    130//      private static final int GE55_SYSTEM_ID = 2;
    131        private static final int GE55_PORTNM    = 3;
    132
    133//      // 5.2.0.0 (2010/09/01) Ver4互換モード対応
    134//      // 6.9.5.0 (2018/04/23) VER4_COMPATIBLE_MODE 廃止
    135//      private static final String CLM = HybsSystem.sysBool( "VER4_COMPATIBLE_MODE" ) ? "COLUMN_NAME" : "CLM";
    136
    137        // GE58 の帳票レイアウトテーブルを取得するSQL文です。
    138        // 5.2.0.0 (2010/09/01) Ver4互換モード対応
    139        // 6.9.5.0 (2018/04/23) VER4_COMPATIBLE_MODE 廃止
    140        private static final String GE58_SELECT =
    141                "SELECT KBOUT,DATA1,DATA2,DATA3,DATA4,DATA5,DATA6,DATA7,DATA8" +
    142                " ,DATA9,DATA10,DATA11,DATA12,DATA13,DATA14,DATA15,CLM" +
    143                " FROM GE58 WHERE SYSTEM_ID IN (?,'**')" +
    144                " AND LISTID = ?";
    145
    146        // 7.2.6.1 (2020/07/17) "**"以外にベースとなるSYSTEM_ID(RESOURCE_BASE_SYSTEM_ID)設定の対応
    147        // 7.2.8.0 (2020/09/04) RESOURCE_BASE_SYSTEM_ID 対応で、帳票系は難しいので対応しません
    148//      private static final String GE58_SELECT =
    149//              "SELECT KBOUT,DATA1,DATA2,DATA3,DATA4,DATA5,DATA6,DATA7,DATA8"
    150//              + " ,DATA9,DATA10,DATA11,DATA12,DATA13,DATA14,DATA15,CLM"
    151//              + " from ("
    152//              + "  select 0 as SNO,B.* from GE58 B where SYSTEM_ID='**' and LISTID=? and FGJ='1'"     // ｴﾝｼﾞﾝ共通
    153//              + "  union all"
    154//              + "  select 1 as SNO,B.* from GE58 B where SYSTEM_ID=? and LISTID=? and FGJ='1'"        // RESOURCE_BASE_SYSTEM_ID
    155//              + "  union all"
    156//              + "  select 2 as SNO,B.* from GE58 B where SYSTEM_ID=? and LISTID=? and FGJ='1'"        // 最上位ののSYSTEM_ID
    157//              + " ) A"
    158//              + " order by SNO,SYSTEM_ID" ;
    159
    160        /** GE58カラム番号 {@value}  */ public static final int GE58_KBOUT           = 0;
    161        /** GE58カラム番号 {@value}  */ public static final int GE58_DATA1           = 1;
    162        /** GE58カラム番号 {@value}  */ public static final int GE58_DATA2           = 2;
    163        /** GE58カラム番号 {@value}  */ public static final int GE58_DATA3           = 3;
    164        /** GE58カラム番号 {@value}  */ public static final int GE58_DATA4           = 4;
    165        /** GE58カラム番号 {@value}  */ public static final int GE58_DATA5           = 5;
    166        /** GE58カラム番号 {@value}  */ public static final int GE58_DATA6           = 6;
    167        /** GE58カラム番号 {@value}  */ public static final int GE58_DATA7           = 7;
    168        /** GE58カラム番号 {@value}  */ public static final int GE58_DATA8           = 8;
    169        /** GE58カラム番号 {@value}  */ public static final int GE58_DATA9           = 9;
    170        /** GE58カラム番号 {@value}  */ public static final int GE58_DATA10          = 10;
    171        /** GE58カラム番号 {@value}  */ public static final int GE58_DATA11          = 11;
    172        /** GE58カラム番号 {@value}  */ public static final int GE58_DATA12          = 12;
    173        /** GE58カラム番号 {@value}  */ public static final int GE58_DATA13          = 13;
    174        /** GE58カラム番号 {@value}  */ public static final int GE58_DATA14          = 14;
    175        /** GE58カラム番号 {@value}  */ public static final int GE58_DATA15          = 15;
    176        /** GE58カラム番号 {@value}  */ public static final int GE58_CLM_NAME        = 16;
    177
    178        /** コネクションにアプリケーション情報を追記するかどうか指定 */
    179        public static final boolean USE_DB_APPLICATION_INFO  = HybsSystem.sysBool( "USE_DB_APPLICATION_INFO" ) ;
    180        private final ApplicationInfo appInfo;
    181        private final String DBID = HybsSystem.sys( "RESOURCE_DBID" );          // 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対応
    182
    183        /**
    184         * コンストラクター
    185         * 引数を受けとって、インスタンスを作成します。
    186         * @param systemId システムID
    187         * @param ykno 要求番号
    188         * @param listId 帳票ID
    189         * @param lang 言語
    190         * @param fgrun 実行方法
    191         * @param prtid プリンタID
    192         * @param prgdir プログラムディレクトリ
    193         * @param prgfile プログラムファイル
    194         * @param outdir 出力ディレクトリ
    195         * @param layoutFile レイアウトファイル
    196         * @param isDebug デバッグフラグ
    197         *
    198         * @og.rev 4.3.3.0 (2008/10/01) 板金 RFID対応。引数にprgdir,prgfile,outdir追加
    199         * @og.rev 5.4.3.1 (2011/12/27) portnm追加
    200         * @og.rev 5.4.3.9 (2012/01/25) 雛形ファイル名追加
    201         *
    202         */
    203        public RFIDPrintRequest( final String systemId, final String ykno
    204                        , final String listId, final String lang, final String fgrun, final String prtid
    205                        , final String prgdir, final String prgfile, final String outdir , final String layoutFile, final boolean isDebug ) {
    206                SYSTEM_ID       = systemId;
    207                YKNO            = ykno;
    208                LISTID          = listId;
    209                LANG            = lang;
    210                FGRUN           = fgrun;
    211                PRTID           = prtid;
    212                PRGDIR          = prgdir;                                       // 4.3.3.0 (2008/10/01)
    213                PRGFILE         = prgfile;                                      // 4.3.3.0 (2008/10/01)
    214                OUTDIR          = outdir;                                       // 4.3.3.0 (2008/10/01)
    215                DEBUG           = isDebug;
    216                FILENAME        = layoutFile;                           // 5.4.3.9 (2012/01/25)
    217
    218                // アクセスログ取得の為,ApplicationInfoオブジェクトを設定
    219                if( USE_DB_APPLICATION_INFO ) {
    220                        appInfo = new ApplicationInfo();
    221                        // ユーザーID,IPアドレス,ホスト名
    222                        appInfo.setClientInfo( SYSTEM_ID,HybsSystem.HOST_ADRS,HybsSystem.HOST_NAME );
    223                        // 画面ID,操作,プログラムID
    224                        appInfo.setModuleInfo( "ReportConverter",YKNO,LISTID );
    225                }
    226                else {
    227                        appInfo = null;
    228                }
    229        }
    230
    231        /**
    232         * 初期データセットを行います。
    233         * ここでは、GE54,GE58,GE55 テーブルより必要な情報を取得します。
    234         *
    235         * @og.rev 4.3.3.0 (2008/10/01) 板金 RFID対応(PRGDIR,PRGFILE追加等)
    236         * @og.rev 5.4.3.0 (2011/12/26) GE54のbSQLは取らないようにする
    237         * @og.rev 5.4.3.9 (2012/01/25) GE58はなくてもよい
    238         * @og.rev 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対策
    239         * @og.rev 6.4.3.3 (2016/03/04) ConcurrentHashMap の not null制限のチェック追加
    240         * @og.rev 7.2.6.1 (2020/07/17) "**"以外にベースとなるSYSTEM_ID(RESOURCE_BASE_SYSTEM_ID)設定の対応
    241         * @og.rev 7.2.8.0 (2020/09/04) RESOURCE_BASE_SYSTEM_ID 対応で、帳票系は難しいので対応しません
    242         *
    243         * @return 結果 [true:正常/false:異常]
    244         */
    245        public boolean initialDataSet() {
    246        //      final String baseSystemId = HybsSystem.sys( "RESOURCE_BASE_SYSTEM_ID", false );
    247        //      BASE_SYS_ID = StringUtil.isEmpty( baseSystemId ) ? "**" : baseSystemId ;
    248
    249                // ===== GE54 から帳票定義情報を取得します =========================================
    250                // 7.2.6.1 (2020/07/17) "**"以外にベースとなるSYSTEM_ID(RESOURCE_BASE_SYSTEM_ID)設定の対応
    251                final String[] args = new String[] { SYSTEM_ID,LISTID };
    252        //      7.2.8.0 (2020/09/04) RESOURCE_BASE_SYSTEM_ID 対応で、帳票系は難しいので対応しません
    253        //      final String[] args = new String[] { LISTID,BASE_SYS_ID,LISTID,SYSTEM_ID,LISTID };
    254                final String[][] vals = DBUtil.dbExecute( GE54_SELECT,args,appInfo, DBID );             // 5.5.5.1 (2012/08/07)
    255                if( vals == null || vals.length == 0 ) {
    256                        errMsg.append( "Data does not exist in GE54 table." ).append( CR )
    257                                .append( "==============================" ).append( CR )
    258                                .append( "SYSTEM_ID=["  ).append( SYSTEM_ID )
    259                                .append( "] , LISTID=[" ).append( LISTID    ).append( ']' )             // 6.0.2.5 (2014/10/31) char を append する。
    260                                .append( CR );
    261                        return false;
    262                }
    263
    264                // 検索結果が複数帰ったとき、SYSTEM_ID が 指定されている方のデータ(行)を採用する。
    265                // 7.2.6.1 (2020/07/17) 一番最後のデータを採用する。
    266                final int row = vals.length;
    267//              int row = 0;
    268//              for( int i=0; i<vals.length; i++ ) {
    269//                      if( SYSTEM_ID.equalsIgnoreCase( vals[i][GE54_SYSTEM_ID] ) ) { row = i; break; }
    270//              }
    271
    272                // ローカルリソースフラグ
    273                // 4.3.3.0 (2008/10/01)
    274                // fgLOCAL = ( vals[row][GE54_FGLOCAL]  != null && vals[row][GE54_FGLOCAL].trim().equals( "1" ) ) ? true : false ;
    275                final String localFlag = vals[row][GE54_FGLOCAL];
    276                fgLOCAL = localFlag != null && "1".equals( localFlag.trim() ) ;
    277
    278                // ===== GE58 から帳票定義情報を取得します =========================================
    279                // 7.2.6.1 (2020/07/17) "**"以外にベースとなるSYSTEM_ID(RESOURCE_BASE_SYSTEM_ID)設定の対応
    280                final String[] argsGe58 = new String[] { SYSTEM_ID,LISTID };
    281        //      7.2.8.0 (2020/09/04) RESOURCE_BASE_SYSTEM_ID 対応で、帳票系は難しいので対応しません
    282        //      final String[] argsGe58 = new String[] { LISTID,BASE_SYS_ID,LISTID,SYSTEM_ID,LISTID };
    283                final String[][] valsGe58 = DBUtil.dbExecute( GE58_SELECT,argsGe58,appInfo, DBID );             // 5.5.5.1 (2012/08/07)
    284
    285                // 7.2.6.1 (2020/07/17) 一番最後のデータを採用する。(CLMユニーク)
    286                for( int i=0; i<valsGe58.length; i++ ) {
    287                        // 6.4.3.3 (2016/03/04) ConcurrentHashMap の not null制限
    288                        final String key  = valsGe58[i][GE58_CLM_NAME];                         // 最低限、valsGe58[i] は、null ではない。
    289                        if( key != null ) {
    290                                rfidLayoutMap.put( key, valsGe58[i] );
    291                        }
    292                }
    293
    294                // ===== GE55 から出力先マスタ情報を取得します =========================================
    295                // 7.2.6.1 (2020/07/17) "**"以外にベースとなるSYSTEM_ID(RESOURCE_BASE_SYSTEM_ID)設定の対応
    296                final String[] argsGe55 = new String[] { SYSTEM_ID,PRTID };
    297        //      7.2.8.0 (2020/09/04) RESOURCE_BASE_SYSTEM_ID 対応で、帳票系は難しいので対応しません
    298        //      final String[] argsGe55 = new String[] { PRTID,BASE_SYS_ID,PRTID,SYSTEM_ID,PRTID };
    299                final String[][] valsGe55 = DBUtil.dbExecute( GE55_SELECT,argsGe55,appInfo, DBID );             // 5.5.5.1 (2012/08/07)
    300                if( valsGe55 == null || valsGe55.length == 0 ) {
    301                        errMsg.append( "Data does not exist in GE55 table." ).append( CR )
    302                                .append( "==============================" ).append( CR )
    303                                .append( "SYSTEM_ID=[" ).append( SYSTEM_ID )
    304                                .append( "] , PRTID=[" ).append( PRTID     ).append( ']' )              // 6.0.2.5 (2014/10/31) char を append する。
    305                                .append( CR );
    306                        return false;
    307                }
    308
    309                // 検索結果が複数帰ったとき、SYSTEM_ID が 指定されている方のデータ(行)を採用する。
    310                // 7.2.6.1 (2020/07/17) 一番最後のデータを採用する。
    311                final int rowGe55 = vals.length;
    312//              int rowGe55 = 0;
    313//              for( int i=0; i<vals.length; i++ ) {
    314//                      if( SYSTEM_ID.equalsIgnoreCase( vals[i][GE55_SYSTEM_ID] ) ) { rowGe55 = i; break; }
    315//              }
    316
    317                prtName  = valsGe55[rowGe55][GE55_PRTNM];
    318                hostName = valsGe55[rowGe55][GE55_HOST_ID];
    319                portnm   = valsGe55[rowGe55][GE55_PORTNM];
    320
    321                return true;
    322        }
    323
    324        /**
    325         * RFID発行用データを作成し、発行リクエストの処理を行います。
    326         *
    327         * @og.rev 5.4.3.0 (2011/12/26) _DEFAULT対応
    328         * @og.rev 5.4.3.4 (2012/01/12) listid追加
    329         * @og.rev 5.4.3.9 (2012/01/25) FILENAME追加
    330         * @og.rev 6.4.3.1 (2016/02/12) PMD refactoring. Map → ConcurrentMap に置き換え。
    331         *
    332         * @return 結果 [true:正常/false:異常]
    333         */
    334        public boolean execute() {
    335                System.out.print( "RRID RequestData Creating ... " );
    336
    337                // FGLOCAL 指定時は、SYSTEM_ID を指定してリソース作成
    338                if( fgLOCAL ) {
    339                        // ローカルリソース指定時は、SYSTEM_ID,LANG を使用します。先読みは、使用しません。
    340                        resource = ResourceFactory.newInstance( SYSTEM_ID,LANG,false );
    341                }
    342                else {
    343                        // 従来と互換性のあるモード(ローカルリソースは使用しない。
    344                        resource = ResourceFactory.newInstance( LANG );
    345                }
    346
    347                // ボディー情報の取得
    348                // 5.2.3.0 tableのとり方変更
    349                final DBTableModelCreator tmc = new DBTableModelCreator( SYSTEM_ID, LISTID, YKNO, "B", resource );
    350                final DBTableModel table = tmc.getTable();
    351                if( table.getRowCount() <= 0 ) {
    352                        errMsg.append( "Database Body row count is Zero." ).append( CR );
    353                        errMsg.append( "==============================" ).append( CR );
    354                        // 5.5.2.4 (2012/05/16) 廃止の消し忘れ。
    355                        errMsg.append( "SYSTEM_ID=" ).append( SYSTEM_ID );
    356                        errMsg.append( ",LISTID="   ).append( LISTID );
    357                        errMsg.append( ",YKNO="     ).append( YKNO );
    358                        errMsg.append( CR );
    359                        return false;
    360                }
    361                // 検索時の最大件数での打ち切りをエラーとする。
    362                if( table.isOverflow() ) {
    363                        errMsg.append( "Database is Overflow. [" );
    364                        errMsg.append( table.getRowCount() );
    365                        errMsg.append( ']' ).append( CR ).append( CR );         // 6.0.2.5 (2014/10/31) char を append する。
    366                        errMsg.append( "==============================" ).append( CR );
    367                        errMsg.append( "Check SystemParameter Data in DB_MAX_ROW_COUNT Overflow" );
    368                        errMsg.append( CR );
    369                        return false;
    370                }
    371
    372                // RFID発行用クラスを実行する。
    373                RFIDPrintPointService service = null;
    374                try {
    375                        service = (RFIDPrintPointService)StringUtil.newInstance( HybsSystem.sys( "REPORT_RFID_SERVICE_CLASS" ) );
    376                        service.setYkno( YKNO );
    377                        service.setSystemId( SYSTEM_ID );
    378                        service.setFgrun( FGRUN );
    379                        service.setHostName( hostName );
    380                        service.setPrinterName( prtName );
    381                        service.setTable( table );
    382                        service.setLayout( rfidLayoutMap );     // 6.4.3.1 (2016/02/12) ConcurrentMap 系は、key,val ともに not null 制限です。
    383                        service.setPrgDir( PRGDIR );            // 4.3.3.0 (2008/10/01) 板金 RFID対応
    384                        service.setPrgFile( PRGFILE );          // 4.3.3.0 (2008/10/01)
    385                        service.setOutDir( OUTDIR );            // 4.3.3.0 (2008/10/01)
    386                        service.setPrtId( PRTID );                      // 5.4.3.0 (2011/12/26)
    387                        service.setPortnm( portnm );            // 5.4.3.1 (2011/12/27)
    388                        service.setListId( LISTID );            // 5.4.3.4 (2012/01/12)
    389                        service.setLayoutFile( FILENAME );      // 5.4.3.9 (2012/01/25)
    390
    391                        // service.execute();
    392                        final boolean flag = service.execute(); // 4.3.3.0 (2008/10/01) booleanを返す
    393
    394                        fgkan = service.getFgkan();                     // 4.3.3.0 (2008/10/01) FGKANを受け取るようにする
    395
    396                        if( DEBUG ) {
    397                                System.out.println( service );
    398                        }
    399
    400                        if( ! flag ){ // 4.3.3.0 (2008/10/01)
    401                                errMsg.append( service.getErrMsg() );
    402                                return false;
    403                        }
    404                }
    405                catch( final Throwable ex ) {
    406                        fgkan = GE50Access.FG_ERR2; // 4.3.3.0 (2008/10/01) エラー時はアプリエラーにしておく
    407                        errMsg.append( "RFID Print Request Execution Error. " ).append( CR )
    408                                .append( "==============================" ).append( CR )
    409                                .append( "SYSTEM_ID=[" ).append( SYSTEM_ID )
    410                                .append( "] , YKNO=["  ).append( YKNO ).append( ']' ).append( CR )              // 6.0.2.5 (2014/10/31) char を append する。
    411                                .append( HybsSystem.sys( "REPORT_RFID_SERVICE_CLASS" ) ).append( CR )
    412                                .append( ex.toString() )
    413                                .append( CR );
    414                        if( service != null ) { errMsg.append( service.getErrMsg() ); }                         // 5.5.2.6 (2012/05/25) findbugs対応
    415                        return false;
    416                }
    417
    418                System.out.println( "End." );
    419                return true ;
    420        }
    421
    422        /**
    423         * エラーが存在した場合に、エラーメッセージを返します。
    424         *
    425         * @return エラーメッセージ String
    426         * @og.rtnNotNull
    427         */
    428        public String getErrMsg() {
    429                return errMsg.toString();
    430        }
    431
    432        /**
    433         * 完了フラグを返します。
    434         *
    435         * @og.rev 4.3.3.0 (2008/10/01) 板金RFID メソッド追加
    436         *
    437         * @return 完了フラグ String
    438         */
    439        public String getFgkan() {
    440                return fgkan;
    441        }
    442}