intra-mart Accel Platform IM-Workflow TERASOLUNA Server Framework プログラミングガイド 第5版 2019-12-01

7.2. サンプルプログラム

サンプルフロー「TERASOLUNA Server Framework開発モデル」に設定されているサンプルプログラムについて説明します。

7.2.1. 共通

プロジェクト全般で利用する設定ファイルです。

  • Bean定義ファイル

    Spring Frameworkのコンポーネントスキャン対象となるルートパッケージを指定しています。
    Mybatis3のリポジトリインタフェースが格納されるパッケージを指定しています。
    • <%サンプルプログラムディレクトリ%/src/main/resources/META-INF/spring/applicationContext-sample_im_workflow_tsfw.xml>

      <?xml version="1.0" encoding="UTF-8"?>
      <beans xmlns="http://www.springframework.org/schema/beans"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns:mybatis="http://mybatis.org/schema/mybatis-spring"
          xmlns:context="http://www.springframework.org/schema/context"
          xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
              http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd
              http://mybatis.org/schema/mybatis-spring
              http://mybatis.org/schema/mybatis-spring.xsd">
      
         <!-- DIコンポーネントの対象とする要素のルートパッケージ -->
         <context:annotation-config />
         <context:component-scan base-package="jp.co.intra_mart.sample.im_workflow.tsfw" />
      
          <!-- Mybatis3のリポジトリ クラスのルートパッケージ -->
          <mybatis:scan base-package="jp.co.intra_mart.sample.im_workflow.tsfw.domain" />
      
      </beans>
      
  • テーマ設定ファイル

    グローバルナビが表示されないモードでテーマが表示されるように、詳細画面のURLに対してHeadOnlyThemeBuilderを適用します。
    • <%サンプルプログラムディレクトリ%/src/main/conf/theme-head-only-path-config/im_workflow_tsfw_sample.xml>

      <?xml version="1.0" encoding="UTF-8"?>
      <theme-head-only-path-config xmlns="http://www.intra-mart.jp/theme/theme-head-only-path-config"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://www.intra-mart.jp/theme/theme-head-only-path-config theme-head-only-path-config.xsd">
        <path>/sample/im_workflow/tsfw/app/purchase/detail</path>
      </theme-head-only-path-config>
      
  • メッセージファイル

    • <%サンプルプログラムディレクトリ%/src/main/conf/message/sample/im_workflow_tgfw_sample/>

      メッセージファイル 一覧
      論理名 物理名 説明
      メッセージファイル(デフォルト) sample-message.properties デフォルトメッセージが記述されています。
      メッセージファイル(日本語) sample-message_ja.properties 日本語メッセージが記述されています。
      メッセージファイル(英語) sample-message_en.properties 英語メッセージが記述されています。
      メッセージファイル(中国語) sample-message_zh_CN.properties 中国語メッセージが記述されています。

7.2.2. 共通(テナント環境セットアップ)

テナント環境セットアップ向けの資材です。

  • テナント環境セットアップ 設定ファイル

    • <%サンプルプログラムディレクトリ%/src/main/conf/products/import/basic/im_workflow_tsfw_sample/>

      テナント環境セットアップ 設定ファイル 一覧
      論理名 物理名 説明
      テナント環境セットアップ 設定ファイル import-im_workflow_tsfw_sample-config-1.xml テナント環境セットアップ時にDDL・拡張インポート処理が実行されるように指定しています。
  • テナント環境セットアップ 拡張インポート処理クラス

    • <%サンプルプログラムディレクトリ%/src/main/java/jp/co/intra_mart/sample/im_workflow/tsfw/initialize/>

      テナント環境セットアップ 拡張インポート処理クラス 一覧
      論理名 物理名 説明
      拡張インポート処理クラス SampleFlowImporter.java サンプルフロー「TERASOLUNA Server Framework開発モデル」をインポートする処理です。
  • テナント環境セットアップ インポート資材

    • <%サンプルプログラムディレクトリ%/src/main/storage/system/products/import/basic/im_workflow_tsfw_sample/import/>

      テナント環境セットアップ インポート資材 一覧
      論理名 物理名 説明
      インポート資材 im_workflow_tsfw.xml サンプルフロー「TERASOLUNA Server Framework開発モデル」の定義ファイル(フロー定義・ルート定義・コンテンツ定義)です。

7.2.3. 共通(データベース)

ユーザアプリケーションデータは、テナントデータベース上のテーブルで管理しています。 テーブルへのアクセスは、TERASOLUNA Server Frameworkが提供するMybatis3を利用しています。

Mybatis3の利用方法については、「 TERASOLUNA Server Framework for Java (5.x) プログラミングガイド 」-「 データベース 」を参照してください。

  • ユーザアプリケーションデータ テーブル

    テーブル sample_imw_tsfw_t_purchase
    カラム名 説明
    user_data_id ユーザデータID
    system_matter_id システム案件ID
    item_name 品名
    item_amount 数量
    item_price 金額
    item_total 合計
    item_comment 備考
    end_flag 案件完了フラグ
    archive_flag 案件アーカイブフラグ
  • DDL

    ユーザアプリケーションデータ テーブルを作成するためのDDLファイルです。
    テナント環境セットアップ時に実行されます。
    • <%サンプルプログラムディレクトリ%/src/main/storage/system/products/import/basic/im_workflow_tsfw_sample/import/>
    DDL 一覧
    論理名 物理名 説明
    テナント環境セットアップ向けDDLファイル(デフォルト) im_workflow_tsfw-sample-create_table-ddl.sql テナントデータベースがPostgresqlの場合に利用されます。
    テナント環境セットアップ向けDDLファイル(Oracle) im_workflow_tsfw-sample-create_table-ddl_oracle.sql テナントデータベースがOracleの場合に利用されます。
    テナント環境セットアップ向けDDLファイル(SQLServer) im_workflow_tsfw-sample-create_table-ddl_sqlserver.sql テナントデータベースがSQLServerの場合に利用されます。
  • エンティティクラス

    テーブル sample_imw_tsfw_t_purchaseをモデル化したクラスです。
    データベースから取得したレコードはリポジトリインタフェースを通して、エンティティクラスのインスタンスとして取得されます。
    • <%サンプルプログラムディレクトリ%>/src/main/java/jp/co/intra_mart/sample/im_workflow/tsfw/domain/model/SampleImwTPurchase.java
    public class SampleImwTPurchase implements Serializable {
    
        private static final long serialVersionUID = 5194970093421606223L;
    
        private String userDataId;
    
        private String archiveFlag;
    
        private String endFlag;
    
        private String itemAmount;
    
        private String itemComment;
    
        private String itemName;
    
        private String itemPrice;
    
        private String itemTotal;
    
        private String systemMatterId;
    
        public SampleImwTPurchase() {
        }
    
        public String getUserDataId() {
            return this.userDataId;
        }
    
        public void setUserDataId(final String userDataId) {
            this.userDataId = userDataId;
        }
    
        public String getArchiveFlag() {
            return this.archiveFlag;
        }
    
        public void setArchiveFlag(final String archiveFlag) {
            this.archiveFlag = archiveFlag;
        }
    
        public String getEndFlag() {
            return this.endFlag;
        }
    
        public void setEndFlag(final String endFlag) {
            this.endFlag = endFlag;
        }
    
        public String getItemAmount() {
            return this.itemAmount;
        }
    
        public void setItemAmount(final String itemAmount) {
            this.itemAmount = itemAmount;
        }
    
        public String getItemComment() {
            return this.itemComment;
        }
    
        public void setItemComment(final String itemComment) {
            this.itemComment = itemComment;
        }
    
        public String getItemName() {
            return this.itemName;
        }
    
        public void setItemName(final String itemName) {
            this.itemName = itemName;
        }
    
        public String getItemPrice() {
            return this.itemPrice;
        }
    
        public void setItemPrice(final String itemPrice) {
            this.itemPrice = itemPrice;
        }
    
        public String getItemTotal() {
            return this.itemTotal;
        }
    
        public void setItemTotal(final String itemTotal) {
            this.itemTotal = itemTotal;
        }
    
        public String getSystemMatterId() {
            return this.systemMatterId;
        }
    
        public void setSystemMatterId(final String systemMatterId) {
            this.systemMatterId = systemMatterId;
        }
    
    }
    
  • マッピングファイル

    実行するクエリ・クエリのパラメータ・戻り値のレコードをバインドするためのエンティティクラスを指定します。
    • <%サンプルプログラムディレクトリ%>/src/main/resources/jp/co/intra_mart/sample/im_workflow/tsfw/domain/repository/SampleImwTPurchaseRepository.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    
    <mapper namespace="jp.co.intra_mart.sample.im_workflow.tsfw.domain.repository.SampleImwTPurchaseRepository">
    
        <select id="select" parameterType="java.lang.String" resultType="SampleImwTPurchase">
            SELECT
             user_data_id as userDataId
            , system_matter_id as systemMatterId
            , item_name as itemName
            , item_amount as itemAmount
            , item_price as itemPrice
            , item_total as itemTotal
            , item_comment as itemComment
            , end_flag as endFlag
            , archive_flag as archiveFlag
            FROM sample_imw_tsfw_t_purchase
            WHERE user_data_id = #{userDataId}
        </select>
    
        <insert id="insert" parameterType="SampleImwTPurchase">
            INSERT
             INTO sample_imw_tsfw_t_purchase (user_data_id
                , system_matter_id
                , item_name
                , item_amount
                , item_price
                , item_total
                , item_comment
                , end_flag
                ,archive_flag)
            VALUES (#{userDataId}
                , #{systemMatterId,jdbcType=VARCHAR}
                , #{itemName,jdbcType=VARCHAR}
                , #{itemAmount,jdbcType=VARCHAR}
                , #{itemPrice,jdbcType=VARCHAR}
                , #{itemTotal,jdbcType=VARCHAR}
                , #{itemComment,jdbcType=VARCHAR}
                , #{endFlag,jdbcType=VARCHAR}
                , #{archiveFlag,jdbcType=VARCHAR})
        </insert>
    
        <update id="update" parameterType="SampleImwTPurchase">
            UPDATE
             sample_imw_tsfw_t_purchase
            SET system_matter_id = #{systemMatterId,jdbcType=VARCHAR}
            , item_name = #{itemName,jdbcType=VARCHAR}
            , item_amount = #{itemAmount,jdbcType=VARCHAR}
            , item_price = #{itemPrice,jdbcType=VARCHAR}
            , item_total = #{itemTotal,jdbcType=VARCHAR}
            , item_comment = #{itemComment,jdbcType=VARCHAR}
            , end_flag = #{endFlag,jdbcType=VARCHAR}
            , archive_flag = #{archiveFlag,jdbcType=VARCHAR}
            WHERE user_data_id = #{userDataId}
        </update>
    
        <delete id="delete" parameterType="java.lang.String">
            DELETE
            FROM sample_imw_tsfw_t_purchase
            WHERE user_data_id = #{userDataId}
        </delete>
    
    </mapper>
    
  • TypeAlias 設定ファイル

    マッピングファイルに指定するエンティティクラスのエイリアスを設定します。
    この設定を行うことで、マッピングファイルにエンティティクラスをエイリアスで指定することが可能です。
    • <%サンプルプログラムディレクトリ%/src/main/resources/META-INF/mybatis/mybatis-config.xml>
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration
      PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
      "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
    
        <!-- See http://mybatis.github.io/mybatis-3/configuration.html#settings -->
        <settings>
            <setting name="mapUnderscoreToCamelCase" value="true" />
            <setting name="lazyLoadingEnabled" value="true" />
            <setting name="aggressiveLazyLoading" value="false" />
    <!--
            <setting name="defaultExecutorType" value="REUSE" />
            <setting name="jdbcTypeForNull" value="NULL" />
            <setting name="proxyFactory" value="JAVASSIST" />
            <setting name="localCacheScope" value="STATEMENT" />
    -->
        </settings>
    
        <typeAliases>
            <!-- マッピングファイルで利用するエンティティクラスのエイリアスを指定します。 -->
            <typeAlias alias="SampleImwTPurchase" type="jp.co.intra_mart.sample.im_workflow.tsfw.domain.model.SampleImwTPurchase"/>
    <!--
            <package name="xxxxxx.yyyyyy.zzzzzz.infra.mybatis.typehandler" />
    -->
        </typeAliases>
    
        <typeHandlers>
    <!--
            <package name="xxxxxx.yyyyyy.zzzzzz.infra.mybatis.typehandler" />
    -->
        </typeHandlers>
    
    </configuration>
    

    注意

    TypeAlias 設定ファイルはIM-Jugglingプロジェクトに設定ファイルとして配置します。
  • リポジトリインタフェース

    マッピングファイルに指定したクエリをJavaプログラムから呼び出すためのインタフェースを定義します。
    リポジトリインタフェースのインスタンスは、MyBatis-Springによってインジェクションされます。
    • <%サンプルプログラムディレクトリ%>/src/main/java/jp/co/intra_mart/sample/im_workflow/tsfw/domain/repository/SampleImwTPurchaseRepository.java
    package jp.co.intra_mart.sample.im_workflow.tsfw.domain.repository;
    
    import jp.co.intra_mart.sample.im_workflow.tsfw.domain.model.SampleImwTPurchase;
    
    public interface SampleImwTPurchaseRepository {
    
        public SampleImwTPurchase select(String userDataId);
    
        public void insert(SampleImwTPurchase entity);
    
        public void update(SampleImwTPurchase entity);
    
        public void delete(String userDataId);
    }
    

7.2.4. ユーザコンテンツ画面

ユーザコンテンツ画面を表示するためのプログラムです。

  • 画面

    • <%サンプルプログラムディレクトリ%/src/main/webapp/WEB-INF/views/sample/im_workflow/tsfw/app/purchase/>

      JSPファイル 一覧
      論理名 物理名 説明
      申請画面 apply.jsp クライアントタイプ「PC」の場合に、申請画面・申請(起票)画面・一時保存画面・再申請画面を表示するためのJSPファイルです。
      承認画面 approve.jsp クライアントタイプ「PC」の場合に、承認画面を表示するためのJSPファイルです。
      確認画面 confirm.jsp クライアントタイプ「PC」の場合に、確認画面を表示するためのJSPファイルです。
      詳細画面 detail.jsp クライアントタイプ「PC」「SP」の両方の場合に、詳細画面を表示するためのJSPファイルです。
      申請画面(スマートフォン) apply_sp.jsp クライアントタイプ「SP」の場合に、申請画面・申請(起票)画面・一時保存画面・再申請画面を表示するためのJSPファイルです。
      承認画面(スマートフォン) approve_sp.jsp クライアントタイプ「SP」の場合に、承認画面を表示するためのJSPファイルです。
      確認画面(スマートフォン) confirm_sp.jsp クライアントタイプ「SP」の場合に、確認画面を表示するためのJSPファイルです。
  • Controllerクラス

    • <%サンプルプログラムディレクトリ%/src/main/java/jp/co/intra_mart/sample/im_workflow/tsfw/app/purchase/>

      Controllerクラス 一覧
      論理名 物理名 説明
      クライアントタイプ「PC」向けControllerクラス PurchaseController.java クライアントタイプ「PC」にて IM-Workflow を利用した場合に呼び出されます。
      クライアントタイプ「SP」向けControllerクラス PurchaseSmartphoneController.java クライアントタイプ「SP」にて IM-Workflow を利用した場合に呼び出されます。
  • Formクラス

    • <%サンプルプログラムディレクトリ%/src/main/java/jp/co/intra_mart/sample/im_workflow/tsfw/app/purchase/>

      Formクラス 一覧
      論理名 物理名 説明
      Formクラス(ユーザアプリケーションデータ) PurchaseForm.java JSPにリクエストパラメータ(ユーザコンテンツ画面で入力された情報)をバインドします。
      Formクラス(ワークフローデータ) WorkflowForm.java JSPにリクエストパラメータ(ワークフローのシステムパラメータ情報)をバインドします。

7.2.5. ユーザプログラム

ユーザプログラムを構成するServiceクラス群です。

  • Serviceクラス

    • <%サンプルプログラムディレクトリ%/src/main/java/jp/co/intra_mart/sample/im_workflow/tsfw/domain/service/>

      ユーザプログラム 一覧
      論理名 物理名 説明
      アクション処理プログラム ActionProcess.java アクション処理 サービスを呼び出します。
      アクション処理 サービス ActionProcessService.java ユーザアプリケーションデータに対してバリデーション・データベースへの永続化・案件プロパティへの登録を行います。
      案件終了処理プログラム MatterEndProcess.java 案件終了処理 サービスを呼び出します。
      案件終了処理 サービス MatterEndProcessService.java ユーザアプリケーションデータ テーブル sample_imw_tsfw_t_purchaseの案件終了フラグを更新します。
      未完了案件削除処理リスナー WorkflowActvMatterDeleteListener.java 未完了案件削除処理リスナー サービスを呼び出します。
      未完了案件削除処理リスナー サービス WorkflowActvMatterDeleteListenerService.java 未完了案件が削除された際に、該当するユーザアプリケーションデータを削除します。
      完了案件削除処理リスナー WorkflowCplMatterDeleteListener.java 完了案件削除処理リスナー サービスを呼び出します。
      完了案件削除処理リスナー サービス WorkflowCplMatterDeleteListenerService.java 完了案件が削除された際に、該当するユーザアプリケーションデータを削除します。
      過去案件削除処理リスナー WorkflowArcMatterDeleteListener.java 過去案件削除処理リスナー サービスを呼び出します。
      過去案件削除処理リスナー サービス WorkflowArcMatterDeleteListenerService.java 過去案件が削除された際に、該当するユーザアプリケーションデータを削除します。
      案件退避処理リスナー WorkflowMatterArchiveListener.java 案件退避処理リスナー サービスを呼び出します。
      案件退避処理リスナー サービス WorkflowMatterArchiveListenerService.java ユーザアプリケーションデータ テーブル sample_imw_tsfw_t_purchaseのアーカイブフラグを更新します。