商品受注を想定したサンプルアプリケーションです。
本サンプルアプリケーションは、ホストアクセスAPIを経由でホストに接続を行い、ホストに対して入力データを通知します。また、在庫照会を行うことによりホストからのデータを取得し、画面に表示します。
ログオン画面
入力されたユーザIDとパスワードを使用し、ホストとの接続を行います。
業務メニュー画面
選択された業務種別をホストに通知します。
商品登録画面
入力された情報をホストに通知します。
登録結果表示画面
登録結果を表示します。
在庫照会画面
ホストから在庫照会結果を取得し、結果を表示します。
アプリケーションのホストアクセス部のソースコード(IhasAPIWrapper.java)について説明します。サンプルアプリケーションのソース全体については添付のソースコードを参照してください。また、本サンプルアプリケーションではホストアクセス部で発生した例外は呼び出し元で取得し、ユーザにエラー情報として通知しています。サンプルアプリケーション作成の際は、各処理に応じて適した例外処理を記載するようにしてください。
ホストアクセスを行うためのクラスです。
本クラスには、ホストアクセスAPI経由でホストにアクセスするためのメソッドが実装されています。
/* * @(#)IhasAPIWrapper.java 1.00 2008/06/06 * * Interstage Host Access Service(IHAS) * COPYRIGHT FUJITSU LIMITED 2008. * */ package order; import java.util.ArrayList; // IHAS関連 import com.fujitsu.interstage.has.api.Field; import com.fujitsu.interstage.has.api.FieldSnapshot; import com.fujitsu.interstage.has.api.IHASErrorCode; import com.fujitsu.interstage.has.api.IHASException; import com.fujitsu.interstage.has.api.Position; import com.fujitsu.interstage.has.api.Screen; import com.fujitsu.interstage.has.api.Session; /** * ホストアクセス用クラス. * IHAS APIを使用し、ホストとの通信を行います。 * * @author FUJITSU LIMITED * @version v10.0.0.1 */ public class IhasAPIWrapper { // メンバ変数 /** セッションクラスオブジェクト. */ private Session session; /** スクリーンクラスオブジェクト. */ private Screen screen; /** * ホストログオン処理. * * ホストへのログオン処理を行います。 * @param userId ユーザIDを指定します。 * @param userPw ユーザIDのパスワードを指定します。 * @throws IHASException IHASエラー */ public final void logon(final String userId, final String userPw) throws IHASException { …詳細は別途説明するため省略… } /** * 切断処理. * * ホストへの切断処理を行います。 * @throws IHASException IHASエラー */ public final void disconnect() throws IHASException { …詳細は別途説明するため省略… } /** * 切断処理. * * ホストへの切断処理を行います。 * 切断処理での発生した例外を通知しません。 * @return 実行結果 */ public final int errorDisconnect() { …詳細は別途説明するため省略… } /** * 業務メニューの選択. * * 実行する業務メニューの指定を行います。 * @param menuNum メニュー番号を指定します。 * @throws IHASException IHASエラー */ public final void menu(final String menuNum) throws IHASException { …詳細は別途説明するため省略… } /** * 商品登録処理. * * ホストに対し商品登録処理を行います. * @param orderdId orderdIdを指定します. * @param customer customerを指定します. * @param person personを指定します. * @param orderdYear orderdYearを指定します. * @param orderdMonth orderdMonthを指定します. * @param orderdDay orderdDayを指定します. * @param remark remarkを指定します. * @throws IHASException IHASエラー */ public final void input(final String orderdId, final String customer, final String person, final String orderdYear, final String orderdMonth, final String orderdDay, final String remark) throws IHASException { …詳細は別途説明するため省略… } /** * 登録結果画面の取得を行います. * * @return resultbean ResultBeanクラスを指定します. * @throws IHASException IHASエラー */ public final ResultBean result() throws IHASException { …詳細は別途説明するため省略… } /** * 在庫照会処理. * * ホストに対し在庫照会処理を行います。 * @return OutputBean OutputBeanクラスを指定します。 * @throws IHASException IHASエラー */ public final OutputBean output() throws IHASException { …詳細は別途説明するため省略… } /** * AID/PIDの送信を行います. * * @param strCode 送信するAID/PIDを指定します. * @throws IHASException IHASエラー */ public final void sendaid(final String strCode) throws IHASException { …詳細は別途説明するため省略… } }
ホストへのログオン処理を行うメソッドです。
本メソッドはホストへの接続後、ホストのログオン画面を待ち合わせます。ログオン画面の待ち合わせ後、ユーザIDとパスワードを設定し、[Enter]キーの実行を行います。[Enter]キーの実行により、業務メニュー画面に画面が遷移します。
/** * ホストログオン処理. * * ホストへのログオン処理を行います。 * @param userId ユーザIDを指定します。 * @param userPw ユーザIDのパスワードを指定します。 * @throws IHASException IHASエラー */ public final void logon(final String userId, final String userPw) throws IHASException { session = new Session(); // 接続 // connectのパラメタには運用管理コンソールで設定した接続情報名、 // または、グループ名を指定してください。 session.connect("PATH000"); // Screenの参照を取得 screen = session.screen(); // ログオン画面の待ち合わせ screen.waitString("INTERSTAGE HOST ACCESS SERVICE"); // フィールドスナップショットの取得 FieldSnapshot fs = screen.getFieldSnapshot(); // ユーザID入力フィールドへユーザIDを設定 fs.setFieldString("ユーザID:", 1, userId); // パスワード入力フィールドへパスワードを設定 fs.setFieldString("パスワード:", 1, userPw); // 実行アテンションの送信 fs.submit(); }
ホストからの切断を行うメソッドです。
本メソッドは、正常時の切断処理に使用します。
/** * 切断処理. * * ホストへの切断処理を行います。 * @throws IHASException IHAS APIの例外 */ public final void disconnect() throws IHASException { session.disconnect(); }
IhasAPIWrapper.errorDisconnect()
ホストからの切断を行うメソッドです。切断処理で発生したホストアクセスAPIの例外は通知しません。
本メソッドは、処理異常時の切断処理に使用します。
/** * 切断処理. * * ホストへの切断処理を行います。 * 切断処理での発生した例外を通知しません。 * @return 実行結果 */ public final int errorDisconnect() { int ret = IHASErrorCode.IHASERROR_NOERROR; try { session.disconnect(); } catch (IHASException ihasException) { ret = ihasException.getErrorCode(); return ret; } return ret; }
実行する業務メニューをホストに送信するメソッドです。
業務メニュー画面を待ち合わせます。業務メニュー画面の待ち合わせ後、ホストに業務番号を通知します。
業務番号の通知により指定した業務画面に遷移します。
/** * 業務メニューの選択. * * 実行する業務メニューの指定を行います。 * @param menuNum メニュー番号を指定します。 * @throws IHASException IHASエラー */ public final void menu(final String menuNum) throws IHASException { // フィールドスナップショットの取得 FieldSnapshot fs = screen.getFieldSnapshot(); // ホスト画面上の1行目以降に画面ID"MENU0000"が存在するか確認 Position chkPos = new Position(1, 1); fs.getField(chkPos, "MENU0000"); // ↑
// ホスト画面の1行目に一意のID「MENU0000」が
// 存在することを前提としています。
// フィールドに文字列を設定 fs.setFieldString("業務番号:", 1, menuNum); // 実行アテンションの送信 fs.submit(); }
商品登録情報をホストに送信するメソッドです。
商品登録画面を待ち合わせます。商品登録画面の待ち合わせ後、商品登録情報を設定し、ホストに通知します。
/** * 商品登録処理. * * ホストに対し商品登録処理を行います. * @param orderdId orderdIdを指定します. * @param customer customerを指定します. * @param person personを指定します. * @param orderdYear orderdYearを指定します. * @param orderdMonth orderdMonthを指定します. * @param orderdDay orderdDayを指定します. * @param remark remarkを指定します. * @throws IHASException IHASエラー */ public final void input(final String orderdId, final String customer, final String person, final String orderdYear, final String orderdMonth, final String orderdDay, final String remark) throws IHASException { // フィールドスナップショットの取得 FieldSnapshot fs = screen.getFieldSnapshot(); // ホスト画面上の1行目以降に画面ID"INPUT100"が存在するか確認 Position chkPos = new Position(1, 1); fs.getField(chkPos, "INPUT100"); // ↑
// ホスト画面の1行目に一意のID「INPUT100」が存在
// することを前提としています。 // 受注番号入力フィールドへ受注番号を設定 fs.setFieldString("受注番号:", 1, orderdId); // 顧客名入力フィールドへ顧客名を設定 fs.setFieldString("顧客名 :", 1, customer); // 担当者名入力フィールドへ担当者名を設定 fs.setFieldString("担当者名:", 1, person); // 受注日入力フィールドへ受注日を設定 // 受注日(年) fs.setFieldString("受注日 :", 1, orderdYear); // 受注日(月) fs.setFieldString("受注日 :", 3, orderdMonth); // 受注日(日) fs.setFieldString("受注日 :", 5, orderdDay); // 備考入力フィールドへ備考を設定 fs.setFieldString("備考 :", 1, remark); // 実行アテンションの送信 fs.submit(); return; }
登録成功時、ホストから返される商品登録結果を取得します。
/** * 登録結果画面の取得を行います. * * @return resultbean ResultBeanクラスを指定します. * @throws IHASException IHASエラー */ public final ResultBean result() throws IHASException { ResultBean resultBean = new ResultBean(); // フィールドスナップショットの取得 FieldSnapshot fs = screen.getFieldSnapshot(); // ホスト画面上の1行目以降に画面ID"INPUT200"が存在するか確認 Position chkPos = new Position(1, 1); if (fs.getFieldString(chkPos).equals("INPUT200")) { // 存在すれば登録成功 // ↑
// ホスト画面の1行目に一意のID「INPUT200」が
// 存在することを前提としています。 // 結果コードをResultBeanに保存 resultBean.setResultCode(0); // 受注番号を取得して、ResultBeanに保存 resultBean.setOrderNo(OrderUtility.replaceEntity( fs.getFieldString("受注番号", 1))); // 顧客名を取得して、ResultBeanに保存 resultBean.setCustomer(OrderUtility.replaceEntity( fs.getFieldString("顧客名", 1))); // 担当者名を取得して、ResultBeanに保存 resultBean.setCharge(OrderUtility.replaceEntity( fs.getFieldString("担当者名", 1))); // 受注日(年)を取得して、ResultBeanに保存 resultBean.setOrderdYear(OrderUtility.replaceEntity( fs.getFieldString("受注日", 1))); // 受注日(月)を取得して、ResultBeanに保存 resultBean.setOrderdMonth(OrderUtility.replaceEntity( fs.getFieldString("受注日", 3))); // 受注日(日)を取得して、ResultBeanに保存 resultBean.setOrderdDay(OrderUtility.replaceEntity( fs.getFieldString("受注日", 5))); // 備考を取得して、ResultBeanに保存 resultBean.setNotes(OrderUtility.replaceEntity( fs.getFieldString("備考", 1))); } else { // 登録失敗 // 結果コードをResultBeanに保存 resultBean.setResultCode(1); } return resultBean; }
在庫照会処理を行うメソッドです。
在庫照会画面を待ち合わせます。ホストから返される在庫照会結果を取得して表示します。また、ホスト画面下部に表示される、[戻る][次へ]の文字列の存在を確認します。
/** * 在庫照会処理. * * ホストに対し在庫照会処理を行います。 * @return OutputBean OutputBeanクラスを指定します。 * @throws IHASException IHASエラー */ public final OutputBean output() throws IHASException { OutputBean outputBean = new OutputBean(); // 在庫照会リスト ArrayList<RecordBean> list = new ArrayList<RecordBean>(); // エラーコード int errorCode = IHASErrorCode.IHASERROR_NOERROR; // フィールドスナップショットの取得 FieldSnapshot fs = screen.getFieldSnapshot(); // ホスト画面上の1行目以降に画面ID文字列"OUTPUT"が存在するか確認 Position chkPos = new Position(1, 1); fs.getField(chkPos, "OUTPUT"); // ↑
// ホスト画面の1行目に一意のID「OUTPUT」が
// 存在することを前提としています。
// 在庫照会リストの取得 // ホスト画面上の7行目以降に文字列"項目"が存在するか確認 chkPos.setPositon(7, 1); Field fieldText = fs.getField(chkPos, "項目"); // "項目"の行、桁位置の取得 int fieldRow = fieldText.getPos().getRow(); int fieldCol = fieldText.getPos().getCol(); // 在庫照会リストを表示するテーブルフォーマットは // 固定であり、12行で表示されます。 for (int i = 0; i < 12; i++) { Position position = new Position(fieldRow + (i + 1), fieldCol); Field fieldNum = fs.getField(position); // 在庫照会データの確認 // (在庫照会データが存在しない場合は項目が" "として表示されます。) if (!fieldNum.getString().equals(" ")) { // 項目ごとのデータを設定 int index = fieldNum.getIndex(); RecordBean orderBean = new RecordBean(); orderBean.setIdNumber(OrderUtility.replaceEntity(fs.getField( index + 0).getString())); orderBean.setOrderNo(OrderUtility.replaceEntity(fs.getField( index + 1).getString())); orderBean.setOrderDate(OrderUtility.replaceEntity(fs.getField( index + 2).getString())); orderBean.setCustomer(OrderUtility.replaceEntity(fs.getField( index + 3).getString())); orderBean.setCharge(OrderUtility.replaceEntity(fs.getField( index + 4).getString())); orderBean.setNotes(OrderUtility.replaceEntity(fs.getField( index + 5).getString())); list.add(orderBean); } else { // 在庫照会データなし break; } } // 在庫照会データをOutputBeanクラスにセット outputBean.setRecordbean(list); // 在庫照会のホスト画面に「戻る」の文字があるかを判定します。
// ↓
// "戻る"の確認 try { // 文字列"戻る"を検索 // (文字列"戻る"の実行キーはホスト画面上の23行に // 固定で表示されることを想定しています) Position pos = new Position(23, 1); fs.getField(pos, "戻る"); } catch (IHASException ihasException) { errorCode = ihasException.getErrorCode(); // 文字列"戻る"が見つからない場合 if (errorCode == IHASErrorCode.IHASERROR_NOT_FOUND) { // "戻る"が表示されていない outputBean.setFlagBack(false); } else { throw ihasException; } } // 在庫照会のホスト画面に「次へ」の文字があるかを判定します。
// ↓
// "次へ"の確認 try { // 文字列"次へ"を検索 // (文字列"次へ"の実行キーはホスト画面上の23行に // 固定で表示されることを想定しています) Position pos = new Position(23, 1); fs.getField(pos, "次へ"); } catch (IHASException ihasException) { errorCode = ihasException.getErrorCode(); // 文字列"次へ"が見つからない場合 if (errorCode == IHASErrorCode.IHASERROR_NOT_FOUND) { // "次へ"が表示されていない outputBean.setFlagNext(false); } else { throw ihasException; } } return outputBean; }
ホストに対しAID/PIDの送信を行うためのメソッドです。
/** * AID/PIDの送信を行います. * * @param strCode 送信するAID/PIDを指定します. * @throws IHASException IHASエラー */ // 引数で指定されたAID/PIDを送信するメソッドです。
// ↓
public final void sendaid(final String strCode) throws IHASException { int aidpid; if (strCode == "PF2") { aidpid = FieldSnapshot.AID_PF2; } else if (strCode == "PF6") { aidpid = FieldSnapshot.AID_PF6; } else if (strCode == "PF7") { aidpid = FieldSnapshot.AID_PF7; } else if (strCode == "PF8") { aidpid = FieldSnapshot.AID_PF8; } else if (strCode == "PF12") { aidpid = FieldSnapshot.AID_PF12; } else { aidpid = FieldSnapshot.AID_ENTER; } // フィールドスナップショットの取得 FieldSnapshot fs = screen.getFieldSnapshot(); // AID/PIDの送信 fs.submit(aidpid); return; }