電子フォームとCOBOLで作成したアプリケーションを連携させることができます。ここでは、その方法を説明します。
サーブレットクラス、ファクトリクラスは以下のクラスをそのまま使用します。
サーブレットクラス: com.fujitsu.uji.cobol.COBOLServlet
ファクトリクラス: com.fujitsu.uji.cobol.COBOLFactory
コマンドスクリプティングを作成し、電子フォーム名、ボタン名と実行するCOBOLアプリケーション名を対応付けます。対応付けはentryタグとinvokeCobolタグで以下のように記述します。
<entry bean="/[電子フォーム名]" verb="[ボタン名]">
<invokeCobol library="[COBOLアプリケーションのライブラリ名]"
program="[COBOLアプリケーションのプログラム名]"/>
</entry>最初に実行されるアプリケーションでは電子フォーム名とボタン名の両方を省略します。以下は、コマンドスクリプティングの記述例です。
<?xml version = "1.0" encoding = "Shift_JIS"?>
<commandMap
xmlns="http://interstage.fujitsu.com/schemas/uji/commandMap"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://interstage.fujitsu.com/schemas/uji/commandMap
http://interstage.fujitsu.com/schemas/uji/commandmap.xsd">
<config>
<version>5.0</version>
</config>
<entry>
<invokeCobol library="startup.dll" program="STARTUP"/>
</entry>
<entry bean="/SampleData" verb="send">
<invokeCobol library="onsend.dll" program="ONSEND"/>
</entry>
</commandMap>コマンドスクリプティングの詳細は“第10章 コマンドスクリプティング”を参照してください。 また、コマンドスクリプティングの各タグの詳細については、“定義ファイルリファレンス”のコマンドスクリプティングを参照してください。
コマンドマップをcommands.mapというファイル名で作成し、上記で作成したコマンドスクリプティングのファイルが読み込まれるように指定します。以下は、コマンドスクリプティングのファイル名がcommand.xmlの場合のコマンドマップです。
+command.xml
COBOLのアプリケーションでは、入力の電子フォームをREADし、出力の電子フォームをWRITEします。
IDENTIFICATION DIVISION.
PROGRAM-ID. ONSEND.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT FORMFILE ASSIGN TO GS-FORMFILE
FORMAT IS FORM-NAME
GROUP IS PARTITION-NAME
SESSION CONTROL IS SESSTION-INFO
FILE STATUS IS FS-DATA DETAIL-DATA.
...
DATA DIVISION.
FILE SECTION.
FD FORMFILE.
COPY SampleData OF XMDLIB.
COPY NextSampleData OF XMDLIB.
WORKING-STORAGE SECTION.
...
PROCEDURE DIVISION.
OPEN I-O FORMFILE.
* FORMから入力データを読み込む
MOVE "SampleData" TO FORM-NAME.
MOVE "PAGE" TO PARTITION-NAME.
READ FORMFILE.
* 入力データを使用した処理を行う
...
* FORMに出力データを書き込む
MOVE SPACE TO NextSampleData.
...
MOVE "NextSampleData" TO FORM-NAME.
MOVE "PAGE" TO PARTITION-NAME.
WRITE NextSampleData.
...
CLOSE FORMFILE.
EXIT PROGRAM.終了画面(画面内にボタン等がない画面)を表示する場合は、コマンドスクリプティングのinvokeCobolタグでアトリビュートにrelease="true"と記述すると、画面表示後に不要なリソースを解放します。
<commandMap>
...
<entry bean="/SampleData" verb="exit">
<invokeCobol library="endproc.dll" program="ENDPROC" release="true"/>
</entry>
</commandMap>セションタイムアウト発生時にCOBOLプログラムを実行したい場合は次のようにコマンドスクリプティングを作成します。
verbに"uji.timeout"を指定したentryタグを定義します。beanアトリビュートにはなにも記述しません。
entryタグのコンテントとなるinvokeCobolタグのtypeアトリビュートに"TIMEOUT"を指定します。type指定がない場合は、通常呼び出しとしてCOBOLプログラムの呼び出しを実行します。
<commandMap>
...
<entry verb="uji.timeout">
<invokeCobol type="TIMEOUT" library="apcocobol.dll" program="TIMEOUT" release="true"/>
</entry>
</commandMap>エラー発生時にCOBOLプログラムを実行したい場合は次のようにコマンドスクリプティングを作成します。
verbに"uji.error"を指定したentryタグを定義します。beanアトリビュートにはなにも記述しません。
コンテントとなるinvokeCobolタグのtypeアトリビュートに"ERROR"を指定します。type指定がない場合は、通常呼び出しとしてCOBOLプログラムの呼び出しを実行します。
<commandMap>
...
<entry verb="uji.error">
<invokeCobol type="ERROR" library="apcocobol.dll" program="ERROR" release="true"/>
</entry>
</commandMap>Webアプリケーション環境定義ファイル (web.xml) を書き換えると、サーブレット名とサーブレットのURLを変更することができます。また、エラーページのJSPを指定することで、エラー発生時の画面を変更できます。 Webアプリケーション環境定義ファイルの記述については、“29.2 電子フォームの表示”を参照してください。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<!-- ファクトリクラスにはCOBOLFactoryクラスを使用します。-->
<context-param>
<param-name>factory</param-name>
<param-value>com.fujitsu.uji.cobol.COBOLFactory</param-value>
</context-param>
<!-- エラーページを指定します。-->
<context-param>
<param-name>uji.servlet.errorPage</param-name>
<param-value>formError.jsp</param-value>
</context-param>
<context-param>
<param-name>uji.defaultEncoding</param-name>
<param-value>none</param-value>
</context-param>
<!-- サーブレットクラスにはCOBOLServletクラスを使用します。-->
<servlet>
<servlet-name>formservlet</servlet-name>
<servlet-class>com.fujitsu.uji.cobol.COBOLServlet</servlet-class>
</servlet>
<!-- サーブレットのURLを指定します。-->
<servlet-mapping>
<servlet-name>formservlet</servlet-name>
<url-pattern>/formservlet</url-pattern>
</servlet-mapping>
</web-app>