14-3.非定型操作にてEXCEL(vba)とTcplinkマクロを連携する(空き画面活用編)

By 岡田 - Posted: 2016/12/07 Last updated: 2016/12/10 - Leave a Comment
印刷用ページの表示 印刷用ページの表示
14-2にてvbaとTcplinkマクロをファイルを連携した方法を紹介し、
14-2(改)にてEXCLUDE,FLIP,HIDEコマンドを活用した抽出情報の処理高速化を紹介しました。

しかし、14-2(改)では画面のコピーとペーストの回数が減っただけで、ファイル書きこみ、ダウンロードする基本部分に変更はなく、SWAPによる画面の切り替え(SDSFの画面とダウンロードするファイル画面)もそのままでした

今回は、ファイル連携ではなく、Tcplinkで作業に使われていない空き画面を活用して処理する方法を紹介します

空き画面を使う利点

この手法の最大のメリットは処理が高速化できる点です

14-2(改)では1つの画面をSWAPコマンドで情報を読み込む画面と書き込む画面の切り替えを行い、最終的に書き込んだファイルをダウンロードするという手順でした

今回の手法はTcplinkの未使用画面(空き画面)に情報を書き込み、最終的にクリップボードを用いてEXCEL(vba)に情報を渡します
画面の切り替え、ファイルダウンロードの時間が無くなるため、同じデータの作業時間が14-2(改)と比較して半分になりました(40秒→20秒)

また、同じ処理をした場合のホスト負担が減ります
14-2(改)までは、2つの画面の制御からファイルのダウンロードまでをホストコンピュータに処理してもらう必要がありました
今回の手法はSDSF画面上で必要な情報をEXCLUDE,FLIP,HIDEで抽出し、その画面を空き画面に映します。ファイルへの書き込み、ダウンロード処理にかかるホスト負担が無くなります

本作業はTcplinkマクロ、vba双方の変更の他に、Tcplink(ホストリンク)エクスプローラの設定で使っていない画面をディスプレイセションに設定する作業が必要です

Tcplinkホストリンクエクスプローラによる空き画面の設定

%e3%82%a8%e3%82%af%e3%82%b9%e3%83%97%e3%83%ad%e3%83%bc%e3%83%a9%ef%bc%91

この画面はTcplinkスタンダードのホストリンクエクスプローラです。ディスプレイセションとプリンタセションをあわせて最大10セションの設定が可能です
(但し、ディスプレイセションは最大5セションまで)ディスプレイセションを6個設定しようとすると、ディスプレイセションが多すぎますとエラーになります

既に1番から4番をディスプレイセションとして設定しています。空き画面として今回10番をディスプレイセションとして設定します
設定するには該当する番号を選択後、プロパティを選択します
%e3%83%9b%e3%82%b9%e3%83%88%e3%83%aa%e3%83%b3%e3%82%af%e3%82%a8%e3%82%af%e3%82%b9%e3%83%97%e3%83%ad%e3%83%bc%e3%83%a9%ef%bc%92

画面10をディスプレイ定義にする事で、マクロで利用可能な空き画面になります
%e3%82%a8%e3%83%9f%e3%83%a5%e3%83%ac%e3%83%bc%e3%82%bf%e3%83%97%e3%83%ad%e3%83%91%e3%83%86%e3%82%a3

※Tcplinkでは画面サイズが3種類設定可能です。しかし、標準である24行×80桁以外の設定を使うにはホスト(VTAM、XNF等)とのネゴシエーションが必要なため、通信ができない空き画面では24行×80桁固定となります

空き画面利用時(サンプル)
%e7%94%bb%e9%9d%a2%ef%bc%92

Tcplinkマクロ

14-2(改)でダウンロードする区分メンバに対して操作していた作業を上記で作成した空き画面(セション10)に変更しています

空き画面に対して操作する場合は、「change session TCP3270-Ses10」を記載すれば、以後の操作はセション10に対する操作になります
(今、どこの画面にいるかマクロのコマンドをトレースしながら命令を書いていく必要があります)

change session TCP3270-Ses10
;paste領域消去 ・・・・・・・・・・空き画面10の9行目を1行目と同じ内容でペースト(この場合空白にする)します
edit copy (01,01) (01,70)
edit paste (09,01)
:
change session TCP3270-Ses01 ・・・以後、メイン画面01の操作
wait 1

空き画面で行えるのは、クリップボードに書かれている内容を指定の場所にペーストするだけです
14-2(改)の中でダウンロード前に実施していた整形作業はセション10ではできません。今回はコピー前の画面(セション01)で行います

メイン画面01の操作を空き画面にペーストして作業が終わった段階で画面10の内容をクリップボードにコピー。EXCEL(vba)に渡します

上のサンプル画面をクロップボードに入れた内容です(16行×46桁)

###・・・・+・・・・1・・・・+・・・・2・・・・+・・・・3・・・・+・・・・4・・・・+・・・・5
01:DATASET1
02:DATASET2
03:DATASER3
04:DATASER4
05:*********************************************
06:———————————————
07: ——————————————-
08:———————————————
09:111111 REC1 BLKSIZE = 11111 TYPE = FB
10:222222 REC2 BLKSIZE = 22222 TYPE = FBA
11:333333 REC3 BLKSIZE = 33333 TYPE = VB
12:444444 REC4 BLKSIZE = 44444 TYPE = VBA
13:*** **
14:
15:
16:
###・・・・+・・・・1・・・・+・・・・2・・・・+・・・・3・・・・+・・・・4・・・・+・・・・5

EXCEL(vba)の操作

14-2(改)まではファイルを1行ずつ入力していました。今回はクリップボードのため、上記の内容(16行×46桁)を一つの長いレコードとして扱う必要があります。

1レコードは46文字です。行間に改行コードが2バイト入ります。したがって、2レコード目は先頭から49バイト目になります。
これを繰り返して、以降のレコードを先頭から何バイトなのかを正確に把握します。以下のvbaは把握するためにテストして画面に表示した命令です

‘dataset1-8
‘ MsgBox “1:” & Left(buf, 46)
‘ MsgBox “2:” & Mid(buf, 49, 46)
‘ MsgBox “3:” & Mid(buf, 97, 46)
‘ MsgBox “4:” & Mid(buf, 145, 46)
‘ MsgBox “5:” & Mid(buf, 193, 46)
‘ MsgBox “6:” & Mid(buf, 241, 46)
‘ MsgBox “7:” & Mid(buf, 289, 46)
‘ MsgBox “8:” & Mid(buf, 337, 46)

ここまできたら、あとは該当するレコード番号を変数に入れるとか直接利用するなどの対応をします(replaceは余分は空白を消しています)

d1 = Left(buf, 45)
d1 = Replace(d1, ” “, “”)
d2 = Mid(buf, 49, 45)
d2 = Replace(d2, ” “, “”)
d3 = Mid(buf, 97, 45)
d3 = Replace(d3, ” “, “”)
d4 = Mid(buf, 145, 45)
d4 = Replace(d4, ” “, “”)

d1からd4に”DATASET1″から”DATASET4″が入ります
Posted in Tcplinkマクロ活用(拡張編) • • Top Of Page