(57)【要約】【課題】業務部品アプリケーション側から業務部品アプリケーション側のデータベースオブジェクトを更新又は使用する機能を、業務部品アプリケーションが業務アプリケーションを気にすることの無い形で実現することができる情報処理装置、情報処理方法及び情報処理プログラムを提供することを課題とする。【解決手段】コンポーネント型業務システムは、複数種の業種向けの複数の販売管理システム（ベースシステム）で管理されている各データベースオブジェクトの参照を行うための“チャネル”と称する中間モジュール部品を備えている。そして、チャネルは、ベースシステム間におけるデータベースオブジェクトの差異を吸収して、参照を行う。これにより、コンポーネント型業務システムは、ベースシステムを気にする事無く、チャネルを介してベースシステムに対して適切な処理を行うことができる。【選択図】図２
2020166904.tif 000002
【特許請求の範囲】
【請求項１】
業種別の複数の業務アプリケーションと、業務アプリケーションが導入されている環境下で動作する、業務アプリケーションに組み合わされるソフトウェア部品という位置付けの業務部品アプリケーションとが導入されている、制御部を備えた情報処理装置であって、
業務部品アプリケーションの管理下には、各々の業務アプリケーションの管理下にある複数のデータベースオブジェクトを基に作成された、当該複数のデータベースオブジェクト間の差異を吸収するためのデータベースオブジェクトであるチャネルが存在し、
前記制御部は、業務部品アプリケーションが有する機能が動作している状態において、前記チャネルを用いて、前記複数のデータベースオブジェクトの内の所定のデータベースオブジェクトを更新又は使用すること、
を特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理方法およびプログラムに関する。
【背景技術】
【０００２】
既存の業務アプリケーション（例えば、業種別の販売管理アプリケーションなど）が存在する状況において、この業務アプリケーション上で動作可能な追加の業務部品アプリケーション（例えば、既存の業種別の販売管理アプリケーションではカバーされていない副業務範囲をカバーする販売管理アプリケーションなど）を新たに開発する際、アプリケーション間での各種データベースオブジェクトの参照規約を、開発工数やメンテナンスのし易さという観点などを踏まえつつどのように定めるかが問題となることがある。
【０００３】
ここで、上記規約を定める際に参考となり得る文献として、例えば特許文献１，２が挙げられる。
【０００４】
特許文献１の段落０００１には、『・・・特に、複数のデータベースへの統合アクセスを実現する・・・』との記載がある。また、同文献の段落０００３には、『アプリケーションから複数のデータベースを隠蔽する目的で仮想的なテーブル（以下、仮想表と呼ぶ）を作成して該仮想表上の項目から実在するデータベース（以下、実データベースと呼ぶ）上の項目へのマッピングを用いることによって、複数の実データベースへの透過アクセスを実現する方式』との記載がある。また、同文献の段落００１４には、『・・・本実施例における仮想表は複数の実データベースを論理的に統合した表であり・・・』との記載がある。また、同文献の図７や段落００２５，００２６には、テーブルＴ１およびテーブルＴ２の結合に基づく仮想表７０２が記載されている。
【０００５】
また、特許文献２の段落０００６には、『・・・ＥＩＩは、物理的に散在しているデータを統合してシングル・ビューで利用する仕組みである。』との記載がある。また、同文献の図５や段落００６３には、表Ａ４２１および表Ｂ４２２の結合によりセットされた表Ｃ５１１が記載されている。また、同文献の段落００７１には、『また、他のクレンジング機能としては、・・・有効桁変換（数値型、有効桁数の増加あるいは減少）・・・などがある。』との記載がある。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００１−１０９７５８号公報
【特許文献２】国際公開第２００７／０８３３７１号
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、従来技術では、業務部品アプリケーション側から業務アプリケーション側のデータベースオブジェクトを更新又は使用する機能を、業務部品アプリケーションが業務アプリケーションを気にすることの無い形で実現することは、困難であった。特に、特許文献１，２には、業務部品アプリケーションが業務アプリケーションを気にすることの無い形でこの機能を実現するための解決手段は記載も示唆もされていない。
【０００８】
本発明は、上記問題点に鑑みてなされたものであって、業務部品アプリケーション側から業務アプリケーション側のデータベースオブジェクトを更新又は使用する機能を、業務部品アプリケーションが業務アプリケーションを気にすることの無い形で実現することができる情報処理装置、情報処理方法およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
上述した課題を解決し、目的を達成するために、本発明にかかる情報処理装置は、業種別の複数の業務アプリケーションと、業務アプリケーションが導入されている環境下で動作する、業務アプリケーションに組み合わされるソフトウェア部品という位置付けの業務部品アプリケーションとが導入されている、制御部を備えた情報処理装置であって、業務部品アプリケーションの管理下には、各々の業務アプリケーションの管理下にある複数のデータベースオブジェクトを基に作成された、当該複数のデータベースオブジェクト間の差異を吸収するためのデータベースオブジェクトであるチャネルが存在し、前記制御部は、業務部品アプリケーションが有する機能（例えば明細入力機能など）が動作している状態において、前記チャネルを用いて、前記複数のデータベースオブジェクトの内の所定のデータベースオブジェクトを更新又は使用すること、を特徴とする。
【００１０】
また、本発明に係る情報処理装置は、前記情報処理装置において、前記チャネルは、各々の業務アプリケーションの管理下にある複数のテーブルに含まれる項目を全て含むワークテーブル、及び、当該ワークテーブルに格納されている値を当該複数のテーブルの内の所定のテーブルに格納することで当該所定のテーブルを更新する第一のストアドプロシージャを含み、前記制御部は、業務部品アプリケーションが有する機能が動作している状態において、前記所定のテーブルに格納するための値が得られると、当該得られた値を前記ワークテーブルに格納し、前記第一のストアドプロシージャを呼び出すこと、を特徴とする。
【００１１】
また、本発明に係る情報処理装置は、前記情報処理装置において、前記チャネルは、各々の業務アプリケーションの管理下にある複数のストアドプロシージャが必要とする引数を全て含み且つ当該複数のストアドプロシージャの内の所定のストアドプロシージャを呼び出す第二のストアドプロシージャを含み、前記制御部は、業務部品アプリケーションが有する機能が動作している状態において、前記所定のストアドプロシージャに引数として渡す値が得られると、当該得られた値を前記第二のストアドプロシージャに引数として渡して当該第二のストアドプロシージャを呼び出すこと、を特徴とする。
【００１２】
また、本発明に係る情報処理装置は、前記情報処理装置において、前記チャネルは、各々の業務アプリケーションの管理下にある複数のストアド関数が必要とする引数を全て含み且つ当該複数のストアド関数の内の所定のストアド関数を呼び出し且つ当該複数のストアド関数の戻り値が返す項目を全て含む形で呼出元に返す第一のストアド関数を含み、前記制御部は、業務部品アプリケーションが有する機能が動作している状態において、前記所定のストアド関数に引数として渡す値が得られると、当該得られた値を前記第一のストアド関数に引数として渡して当該第一のストアド関数を呼び出すこと、を特徴とする。
【００１３】
また、本発明に係る情報処理方法は、業種別の複数の業務アプリケーションと、業務アプリケーションが導入されている環境下で動作する、業務アプリケーションに組み合わされるソフトウェア部品という位置付けの業務部品アプリケーションとが導入されている、制御部を備えた情報処理装置で実行される情報処理方法であって、業務部品アプリケーションの管理下には、各々の業務アプリケーションの管理下にある複数のデータベースオブジェクトを基に作成された、当該複数のデータベースオブジェクト間の差異を吸収するためのデータベースオブジェクトであるチャネルが存在し、前記制御部は、業務部品アプリケーションが有する機能が動作している状態において、前記チャネルを用いて、前記複数のデータベースオブジェクトの内の所定のデータベースオブジェクトを更新又は使用すること、を特徴とする。
【００１４】
また、本発明に係るプログラムは、業種別の複数の業務アプリケーションと、業務アプリケーションが導入されている環境下で動作する、業務アプリケーションに組み合わされるソフトウェア部品という位置付けの業務部品アプリケーションとが導入されている、制御部を備えた情報処理装置に実行させるためのプログラムであって、業務部品アプリケーションの管理下には、各々の業務アプリケーションの管理下にある複数のデータベースオブジェクトを基に作成された、当該複数のデータベースオブジェクト間の差異を吸収するためのデータベースオブジェクトであるチャネルが存在し、前記制御部に、業務部品アプリケーションが有する機能が動作している状態において、前記チャネルを用いて、前記複数のデータベースオブジェクトの内の所定のデータベースオブジェクトを更新又は使用する処理を実行させること、を特徴とする。
【発明の効果】
【００１５】
本発明によれば、業務部品アプリケーション側から業務部品アプリケーション側のデータベースオブジェクトを更新又は使用する機能を、業務部品アプリケーションが業務アプリケーションを気にすることの無い形で実現することができるという効果を奏する。また、本発明によれば、業務アプリケーション側の仕様変更や不具合等の影響を出来るだけ受けないようにすることができるので、メンテナンスがし易いという効果を奏する。
【図面の簡単な説明】
【００１６】
【図１】図１は、システム構成の一例を示す図である。
【図２】図２は、チャネルの一例を示す図である。
【図３】図３は、業務処理装置の構成の一例を示すブロック図である。
【図４】図４は、ユーザ社屋にサーバを設置するパターンのシステム全体構成の一例を示す図である。
【図５】図５は、データセンターにサーバを設置するパターンのシステム全体構成を示す図である。
【図６】図６は、クラウド環境で運用するパターンのシステム全体構成を示す図である。
【図７】図７は、ビューのレイアウト定義の一例を示す図である。
【図８】図８は、コンポーネントのジョブからのテンプレートのテーブルの参照イメージの一例を示す図である。
【図９】図９は、更新用ワークテーブルへの更新イメージの一例を示す図である。
【図１０】図１０は、対象テンプレートのテーブルへの更新イメージの一例を示す図である。
【図１１】図１１は、検索ビューを介したコンポーネントのテーブルの検索イメージの一例を示す図である。
【図１２】図１２は、検索ビューを介したテンプレートのテーブルの検索イメージの一例を示す図である。
【図１３】図１３は、コンポーネントのジョブからのテンプレートのストアドプロシージャの参照イメージの一例を示す図である。
【図１４】図１４は、コンポーネントのジョブからのテンプレートのストアド関数の参照イメージの一例を示す図である。
【図１５】図１５は、実装対応ジョブの一例を示す図である。
【図１６】図１６は、汎用実行モジュールテーブルのテーブルレイアウトの一例を示す図である。
【図１７】図１７は、仕訳データ作成処理画面の一例を示す図である。
【図１８】図１８は、コンポーネント側の機能からテンプレート側の機能を使用する場合における汎用実行処理の一例を示す図である。
【図１９】図１９は、コンポーネント側の機能からテンプレート側の機能を使用する場合における汎用実行処理の一例を示す図である。
【図２０】図２０は、テンプレート側の機能からコンポーネント側の機能を使用する場合における汎用実行処理の一例を示す図である。
【図２１】図２１は、テンプレート側の機能からコンポーネント側の機能を使用する場合における汎用実行処理の一例を示す図である。
【発明を実施するための形態】
【００１７】
本発明の実施形態を図面に基づいて詳細に説明する。なお、本発明は本実施形態により限定されるものではない。
【００１８】
［１．概要］
まず始めに、コンポーネントシステムと称するアプリケーション（本発明の業務部品アプリケーションに相当）及びテンプレートシステムと称するアプリケーション（本発明の業務アプリケーションに相当）を含むアプリケーション群の概要について、図１を参照して説明する。
【００１９】
図１は、情報処理装置に導入される販売管理システムのシステム構成概念を示す図である。図１において、符号１０は、コンポーネントシステムと称するアプリケーション（以下では、単にコンポーネントと記載する場合がある。）であり、符号２０は、テンプレートシステムと称するアプリケーション（以下では、単にテンプレートと記載する場合がある。）である。
【００２０】
テンプレート２０は、例えば、業種別の販売管理システム（複数種の業種向け販売管理システム）である。テンプレート２０の一例として、例えば、小売業・医療機器卸業・商社向けシステムや、食品・鋼材業向けシステムなどが挙げられる。
【００２１】
コンポーネント１０は、テンプレート２０が導入されている環境上で動作する、テンプレート２０に対する拡張型システムである。コンポーネント１０は、例えば、各種のテンプレート２０上で動作可能な追加の業務システムである。コンポーネント１０の一例として、例えば、製造（例えば単一工程単純製造など）という業務向けのシステムや、工事という業務向けのシステム、レンタルという業務向けのシステムなどが挙げられる。
【００２２】
コンポーネント１０は、本実施形態の特長である「チャネル」と称する部品（以下では、単にチャネルと記載する場合がある。）を含む。チャネル１１は、「テンプレート２０間におけるオブジェクトの差異（違い）を吸収し、コンポーネント１０側からテンプレート２０側の各種オブジェクトを参照・更新・使用等する」ためのコンポーネント１０の部品という位置付けのものである。コンポーネント１０から各テンプレート２０のテーブル参照を直接行うとなると、各テーブル間の違い（差）を埋める為の開発が各テンプレート２０単位で必要になるため、開発コストが増大してしまうが、この違い（差）を埋めるためのチャネル１１をコンポーネント１０の部品として組み込むことで、開発コストの増大を抑えることが可能となる。
【００２３】
チャネル１１の一例として、例えば、テンプレート２０のテーブルを参照するためのテンプレートテーブル参照ビューや、テンプレート２０のテーブルを更新するためのテンプレートテーブル更新ストアドプロシージャ、共通関数等の違いを吸収するラッパーストアドプロシージャ、引数や結果の差異を埋める為に既存のストアドストアドプロシージャをラップしたラッパーストアドプロシージャ、引数や戻り値の差異を埋める為に既存のストアド関数をラップしたラッパーストアド関数などが挙げられる。なお、ここに挙げたテーブルやビュー、ストアドプロシージャ、ストアド関数は、オブジェクトの一例である。
【００２４】
ここで、チャネル１１の一例として挙げた前記「テンプレート２０のテーブルを参照するためのテンプレートテーブル参照ビュー」の具体例について、図２を参照して説明する。前記「テンプレート２０のテーブルを参照するためのテンプレートテーブル参照ビュー」の具体例は、小売業・医療機器卸業・商社向け販売管理システムで管理されている商品マスタテーブルに含まれる項目と食品・鋼材業向け販売管理システムで管理されている商品マスタテーブルに含まれる項目を全て網羅する形に定義された（換言すると、両テーブルの全項目から最大公約数的な抽出を行うことにより選ばれた項目を含む形に定義された）、各テーブル間の差異を吸収する（埋める）商品マスタビュー（チャネル１１の実体の一例）である。なお、この商品マスタビューにおける差異項目（図２に示すチャネル１１に含まれる色やサイズ、重量、体積という項目）には、例えば、空白値などの規定値を適宜格納すればよい。そして、本実施形態では、コンポーネント１０側からテンプレート２０側の商品マスタテーブルを参照する際、テンプレート２０の商品マスタテーブルを直接参照するのではなく、この商品マスタビュー（チャネル１１）を利用してテンプレート２０の商品マスタテーブルを参照することが特長である。
【００２５】
［２．構成］
本実施形態に係る情報処理装置１００の構成の一例について、図３から図６を参照して説明する。図３は、情報処理装置１００の構成の一例を示すブロック図である。
【００２６】
情報処理装置１００は、コンポーネント１０及びテンプレート２０が導入されている市販のデスクトップ型パーソナルコンピュータである。なお、情報処理装置１００は、デスクトップ型パーソナルコンピュータのような据置型情報処理装置に限らず、市販されているノート型パーソナルコンピュータ、ＰＤＡ（Ｐｅｒｓｏｎａｌ  Ｄｉｇｉｔａｌ  Ａｓｓｉｓｔａｎｔｓ）、スマートフォン、タブレット型パーソナルコンピュータなどの携帯型情報処理装置であってもよい。また、情報処理装置１００を含む情報処理システムの構成の在り方としては、例えば、図４に示すようにユーザ社屋にサーバを設置する例や、図５に示すようにデータセンターにサーバを設置する例、さらには、図６に示すようにクラウドにサーバを設置する例などが挙げられる。
【００２７】
情報処理装置１００は、制御部１０２と通信インターフェース部１０４と記憶部１０６と入出力インターフェース部１０８と、を備えている。情報処理装置１００が備えている各部は、任意の通信路を介して通信可能に接続されている。
【００２８】
通信インターフェース部１０４は、ルータ等の通信装置及び専用線等の有線又は無線の通信回線を介して、情報処理装置１００をネットワーク３００に通信可能に接続する。通信インターフェース部１０４は、他の装置と通信回線を介してデータを通信する機能を有する。ここで、ネットワーク３００は、情報処理装置１００と他の装置（例えばＤＢサーバやＡＰＰサーバなど）とを相互に通信可能に接続する機能を有し、例えばインターネットやイントラネット、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）等である。
【００２９】
記憶部１０６には、各種のデータベース、テーブル、及びファイルなどが格納される。記憶部１０６には、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）と協働してＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）に命令を与えて各種処理を行うためのコンピュータプログラムが記録される。記憶部１０６として、例えば、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）・ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）等のメモリ装置、ハードディスクのような固定ディスク装置、フレキシブルディスク、及び光ディスク等を用いることができる。
【００３０】
入出力インターフェース部１０８には、入力装置１１２及び出力装置１１４が接続されている。出力装置１１４には、モニタ（家庭用テレビを含む）の他、スピーカやプリンタを用いることができる。入力装置１１２には、キーボード、マウス、及びマイクの他、マウスと協働してポインティングデバイス機能を実現するモニタを用いることができる。なお、以下では、出力装置１１４をモニタ１１４とし、入力装置１１２をキーボード１１２またはマウス１１２として記載する場合がある。
【００３１】
制御部１０２は、業務処理装置１００を統括的に制御するＣＰＵ等である。制御部１０２は、ＯＳ等の制御プログラム・各種の処理手順等を規定したプログラム・所要データなどを格納するための内部メモリを有し、格納されているこれらのプログラムに基づいて種々の情報処理を実行する。
【００３２】
制御部１０２は、例えば、コンポーネント１０が有する機能（例えば明細入力機能など）が動作している状態において、チャネル１１を用いて、テンプレート２０の管理下にある複数のデータベースオブジェクト（例えば、テーブルやストアドプロシージャ、ストアド関数、等々）の内の所定のデータベースオブジェクトを参照／更新／使用等する。
【００３３】
例えば、チャネル１１が、テンプレート２０の管理下にある複数のテーブルに含まれる項目を全て含むワークテーブル、及び、当該ワークテーブルに格納されている値を当該複数のテーブルの内の所定のテーブルに格納することで当該所定のテーブルを更新するストアドプロシージャを含む場合、制御部１０２は、コンポーネント１０が有する機能が動作している状態において、所定のテーブルに格納するための値が得られると、当該得られた値を、チャネル１１としてのワークテーブルに格納し、チャネル１１としてのストアドプロシージャを呼び出してもよい。
【００３４】
また、例えば、チャネル１１が、テンプレート２０の管理下にある複数のストアドプロシージャが必要とする引数を全て含み且つ当該複数のストアドプロシージャの内の所定のストアドプロシージャを呼び出すストアドプロシージャを含む場合、制御部１０２は、コンポーネント１０が有する機能が動作している状態において、所定のストアドプロシージャに引数として渡す値が得られると、当該得られた値を、チャネル１１としてのストアドプロシージャに引数として渡して当該ストアドプロシージャを呼び出してもよい。
【００３５】
また、例えば、チャネル１１が、テンプレート２０の管理下にある複数のストアド関数が必要とする引数を全て含み且つ当該複数のストアド関数の内の所定のストアド関数を呼び出し且つ当該複数のストアド関数の戻り値が返す項目を全て含む形で呼出元に返すストアド関数を含む場合、制御部１０２は、コンポーネント１０が有する機能が動作している状態において、所定のストアド関数に引数として渡す値が得られると、当該得られた値をチャネル１１としてのストアド関数に引数として渡して当該ストアド関数を呼び出してもよい。
【００３６】
［３．具体例］
本実施形態の具体例について、図７から図２１を参照して説明する。
【００３７】
［Ａ．販売管理コンポーネントシステム（コンポーネント１０）における各種リソースオブジェクトの扱い方に関する規約］
本具体例では、コンポーネント１０で扱うリソースオブジェクトを、コードオブジェクト、データベースオブジェクト及びＣ＃オブジェクト（Ｃ＃：マイクロソフト社（会社名）が開発した言語）に分類して扱う。さらに、コードオブジェクトを、システムコードオブジェクトに細分化し、データベースオブジェクトを、テーブルオブジェクト、ビューオブジェクト、トリガーオブジェクト、ストアドプロシージャオブジェクト及びストアド関数オブジェクトに細分化し、Ｃ＃オブジェクトを、モジュール、ソリューション、プロジェクト及びソースに細分化して扱う。以下に、細分化された各オブジェクトの扱い方について、図を適宜参照しながら詳細に説明する。
【００３８】
＜１．システムコードオブジェクトの扱い方＞
ここでは、システムコードを、汎用名称および種別に関するコード、メッセージコード及び取引区分（データ区分）コードに分けて、コンポーネント１０におけるそれぞれの扱い方を説明する。
【００３９】
＜１−１．コンポーネント１０側で、テンプレート２０の汎用名称および種別に関するコード、メッセージコード及び取引区分（データ区分）コードを扱う場合＞
コアテンプレート２０にて採番されたコード（例えば、システムＩＤがＴ０５のテンプレート２０とシステムＩＤがＴ０６のテンプレート２０の両方に存在するコード）は、コンポーネント１０側でも使用してよい。つまり、コアテンプレート２０に対するコード割当分は、コンポーネント１０側でも使用してよい。
【００４０】
ただし、各々の業種別テンプレートにて採番されたコード（例えば、システムＩＤがＴ０５のテンプレート２０とシステムＩＤがＴ０６のテンプレート２０の片方のみに存在するコード）は、コンポーネント１０側で使用せず、その代わりに、このコードと同じ意味合いのコードをコンポーネント１０側で新規採番して（コードのデータを用意して）使用するのが好ましい。
【００４１】
＜１−２．コンポーネント１０側で、コンポーネント１０の汎用名称および種別に関するコード、メッセージコード及び取引区分（データ区分）コードを扱う場合＞
汎用名称および種別に関するコードについては、以下のコード体系に従い、コンポーネント１０に対するコード割当範囲で新規採番する。
＜コード体系＞
コアテンプレート２０に対するコードとして、９万番台、１０万番台（９０，０００〜１０９，９９９）を使用する。
コンポーネント１０に対するコードとして、５０万番台以降を使用し、各コンポーネント１０毎に１万単位でコードを確保する。
【００４２】
メッセージコードについては、以下のコード体系に従い、コンポーネント１０に対するコード割当範囲で新規採番する。
＜コード体系＞
コアテンプレート２０に対するコードとして、通常メッセージに対しＢ００００１からＢ００９９９を使用し、オペレーションメッセージに対しＰ００００１からＰ００９９９を使用する。
コンポーネント１０に対するコードとして、通常メッセージに対しＢＡ＠００１からＢＡ＠９９９を使用し、オペレーションメッセージに対しＰＡ＠００１からＰＡ＠９９９を使用する（＠＝コンポーネントＩＤ）。
【００４３】
取引区分コードについては、以下のコード体系に従い、コンポーネント１０に対するコード割当範囲で新規採番する。
＜コード体系＞
コアテンプレート２０に対するコードとして、０から４００番台を使用する。
コンポーネント１０に対するコードとして、５０００番台から１０刻みの連番を使用し、各コンポーネント１０毎に１００番単位でコードを確保する（多ければ２００番を確保する）。
【００４４】
＜２．テーブルオブジェクトの扱い方＞
ここでは、テーブルオブジェクトを、テーブル、主キー（クラスタ化インデックス）及びインデックスに分けて、コンポーネント１０におけるそれぞれの扱い方を説明する。
【００４５】
＜２−１．コンポーネント１０側でテンプレート２０のテーブルを扱う場合（本具体例の特長部分の一つ）＞
＜２−１−１．テーブルを参照する場合＞
コンポーネント１０のジョブやストアド等から、テンプレート２０のテーブルに直接アクセスしないことが好ましい。具体的には、コンポーネント１０が動作しているテンプレート２０によってテーブルのレイアウトが異なる場合があるため、コンポーネント１０からテンプレート２０のテーブルを直接参照しないことが好ましい。
【００４６】
コンポーネント１０からテンプレート２０のテーブルを参照する場合、ビュー（チャネル１１に相当）を作成し、そのビューを介してテンプレート２０のテーブルにアクセスする（制御部１０２が実行する処理）。ビューのレイアウトは、対象テンプレート２０のテーブルが持つ全ての項目を含む形として定義する。なお、同一の項目について、データ型の桁数が違う場合は、大きい桁数に合わせる。
【００４７】
ここで、システムＩＤがＴ０５のテンプレート２０の商品マスタテーブルとシステムＩＤがＴ０６のテンプレート２０の商品マスタテーブルを対象とした場合におけるビューのレイアウト定義の一例を、図７を参照して説明する。Ｔ０５のテンプレート２０の商品マスタテーブルに含まれる項目が、商品ＣＤ（主キー）、品番ＣＤ（主キー）、商品名、メーカー商品ＣＤおよびシリアル管理フラグであり、且つ、Ｔ０６のテンプレート２０の商品マスタテーブルに含まれる項目が、商品ＣＤ（主キー）、商品名、商品重量単位ＣＤおよびシリアル管理フラグである場合、これらの商品マスタテーブルが持つ全ての項目を含むビュー（具体的には商品ＣＤ（主キー）、品番ＣＤ（主キー）、商品名、メーカー商品ＣＤ、商品重量単位ＣＤおよびシリアル管理フラグを項目として含むビュー）を作成する。
【００４８】
また、システムＩＤがＴ０５のテンプレート２０のテーブルとシステムＩＤがＴ０６のテンプレート２０のテーブルを対象とした場合におけるビューの実装方法の一例を、図８を参照して説明する。ビューは、「Ｔ０５用」や「Ｔ０６用」といった形で、対象テンプレート２０ごとに作成する。なお、作成するビューのビュー名および結果セットは、Ｔ０５用とＴ０６用とで同じにする。また、レスポンスを保障するため、ビューの中身は、テンプレート２０のテーブルをＳＥＬＥＣＴするだけの単純なクエリとする。さらに、テンプレート２０のテーブルに実際に存在しない項目については、コンポーネント１０側でその初期値を定義する。
【００４９】
＜２−１−２．テーブルを更新する場合＞
コンポーネント１０のジョブやストアド等から、テンプレート２０のテーブルに直接アクセスしないことが好ましい。具体的には、コンポーネント１０が動作しているテンプレート２０によってテーブルのレイアウトが異なる場合があるため、コンポーネント１０側から値を指定してテンプレート２０側のテーブルを直接更新しないことが好ましい。
【００５０】
コンポーネント１０側からテンプレート２０側の既存テーブルを更新する更新処理を行う場合は、テンプレート２０側でテーブルの項目追加などがあった場合にコンポーネント１０側での修正箇所をなるべく少なくするために、更新用ワークテーブル（チャネル１１に相当）を介して行う（制御部１０２が実行する処理）。具体的には、システムＩＤがＴ０５のテンプレート２０のテーブルとシステムＩＤがＴ０６のテンプレート２０のテーブルを対象とした場合、Ｔ０５のテーブルの更新処理とＴ０６のテーブルの更新処理で共通で使用する更新用ワークテーブルを予め用意しておき、コンポーネント１０側からの更新処理はこのワークテーブルを介して行う。
【００５１】
ここで、システムＩＤがＴ０５のテンプレート２０のテーブルとシステムＩＤがＴ０６のテンプレート２０のテーブルを対象とした場合における上記更新処理（制御部１０２が実行する処理）の実装方法の一例を、図９及び図１０を参照して説明する。まず、図９に示すように、対象テンプレート２０の対象テーブルの更新に必要な各項目の値を、予め用意した更新用ワークテーブルに更新（格納）する。つぎに、図１０に示すように、更新用ワークテーブルからテンプレート２０側のテーブルへ値を更新する更新ストアドプロシージャ（チャネル１１に相当）を呼び出すことで、更新ストアドプロシージャに処理を実行させる。なお、更新ストアドプロシージャは、「Ｔ０５用」や「Ｔ０６用」といった形で、対象テンプレート２０ごとに予め作成しておく（更新ストアドプロシージャのストアド名および引数は、Ｔ０５用とＴ０６用で同じにする。更新ストアドプロシージャには、更新用の値を引数として持たせない）。
【００５２】
また、コンポーネント１０側から、各々の業務システム（テンプレート２０）側のテーブルのデータを更新する際、テーブルの名称・役割が業務システム間で同じであっても、その項目には業務システム間で差異があるため、業務システムに応じてデータの登録先を変える必要がある。そこで、本具体例では、コンポーネント１０側の機能で提供される入力画面は、全ての業務システムの全ての項目を網羅した中間テーブル（チャネル１１に相当）に対して一旦更新を行い、業務システム明細更新プロシージャ（ＤＢオブジェクト、チャネル１１に相当）が、中間テーブルを基にテンプレート２０側の明細テーブルへの更新を請け負う。要するに、入力プログラムのビジネスロジックは、中間テーブルへの更新処理、および、実更新ストアドプロシージャの呼出処理のみ記述すればよい。中間テーブルからの更新を請け負うデータベース・ストアドプロシージャは、業務システムごとに存在するものの、同名の別オブジェクト（例えば、業務システム明細更新Ｐｒｏｃ）として提供される。これにより、導入状態によって、いずれかのうち１つの実更新処理しか行われない事を担保することができる。また、インストーラーが導入する業務システムによってデータベースへ登録しておくストアドプシージャを変える事で、導入する業務システム１０のデータとして作成される。
【００５３】
なお、上記更新処理の実装プログラムの一例は、以下の通りである。
/*１．中間テーブルへの更新処理*/
INSERT INTO [DSiireWork]
(
SiireNO        /*仕入番号*/
,SiireDate     /*仕入日*/
,SiiresakiCD  /*仕入先CD*/
,SoukoCD       /*倉庫CD*/
,KakousakiCD  /*加工先CD*/
,ShouhinCD    /*商品CD*/
,Suuryou      /*数量*/
,Tanka         /*単価*/
,Kingaku      /*金額*/
)
VALUES
(
/*ここに更新値を列挙*/
)
/*２．実更新ストアドプロシージャの呼出処理*/
EXECUTE DSiireInsert
【００５４】
また、上記実更新ストアドプロシージャの実装プログラムの一例は、以下の通りである。
/*テンプレートＡの明細テーブル更新用のストアドプロシージャ*/
CREATE PROCEDURE DSiireInsert
(
)
AS
BEGIN
/*中間テーブルよりテンプレートＡの明細テーブルへ更新*/
INSERT INTO [DSiire]
(
SiireNO         /*仕入番号*/
,SiireDate     /*仕入日*/
,SiiresakiCD  /*仕入先CD*/
,SoukoCD       /*倉庫CD*/
,ShouhinCD    /*商品CD*/
,Suuryou      /*数量*/
,Tanka         /*単価*/
,Kingaku      /*金額*/
)
SELECT
SiireNO         /*仕入番号*/
,SiireDate     /*仕入日*/
,SiiresakiCD  /*仕入先CD*/
,SoukoCD       /*倉庫CD*/
,ShouhinCD    /*商品CD*/
,Suuryou      /*数量*/
,Tanka         /*単価*/
,Kingaku      /*金額*/
FROM [DSiireWork]
END
【００５５】
また、上記実更新ストアドプロシージャの実装プログラムの別の一例は、以下の通りである。
/*テンプレートＢの明細テーブル更新用のストアドプロシージャ*/
CREATE PROCEDURE DSiireInsert
(
)
AS
BEGIN
/*中間テーブルよりテンプレートＢの明細テーブルへ更新*/
INSERT INTO [DSiire]
(
SiireNO         /*仕入番号*/
,SiireDate     /*仕入日*/
,SiiresakiCD  /*仕入先CD*/
,KakousakiCD  /*加工先CD*/
,ShouhinCD    /*商品CD*/
,Suuryou      /*数量*/
,Tanka         /*単価*/
,Kingaku      /*金額*/
)
SELECT
SiireNO         /*仕入番号*/
,SiireDate     /*仕入日*/
,SiiresakiCD  /*仕入先CD*/
,KakousakiCD  /*加工先CD*/
,ShouhinCD    /*商品CD*/
,Suuryou      /*数量*/
,Tanka         /*単価*/
,Kingaku      /*金額*/
FROM [DSiireWork]
END
【００５６】
ただし、テンプレート２０毎に作成するレコード削除不可フラグ更新用トリガーでのデータ更新、承認トリガーから呼ばれる承認用カラム更新用ストアドでのデータ更新、テンプレート２０の汎用化によって追加されたワークテーブルのデータ更新、及び、不要データ削除処理から呼ばれるストアド内におけるＳＤｅｌｅｔｅＴａｉｈｉＴａｂｌｅ（退避テーブル）とＷＤｅｌｅｔｅＬｏｇ（ログ）への更新の際は、例外的に、テンプレート２０のテーブルを直接更新してもよい。
【００５７】
＜２−２．コンポーネント１０側で、テンプレート２０のテーブルの主キー及びインデックスを扱う場合＞
コンポーネント１０側で主キー及びインデックスの変更は行わないことが好ましい。コンポーネント１０側では、ビューを作成して主キーにアクセスするが、このビューは、全てのテンプレート２０の主キーを全て保持するものとして定義する（図７参照）。コンポーネント１０側で、テンプレート２０のテーブルに対してインデックスが必要になった場合、コンポーネント１０側でインデックスを追加する。
【００５８】
＜２−３．コンポーネント１０側で、コンポーネント１０のテーブル、主キー及びインデックスを扱う場合＞
テーブルについては、コンポーネント１０側で直接アクセスする。主キー及びインデックスについては、レイアウトは、コンポーネント１０側で適切に設定する。なお、テーブル、主キー及びインデックスについて、その命名規約はコンポーネント１０の方法に従い、その扱い方はテンプレート２０準拠の方法に従う。
【００５９】
＜３．ビューオブジェクトの扱い方＞
ここでは、ビューオブジェクトを、汎用検索用ビュー及びテンプレートテーブル参照用ビューに分けて、コンポーネント１０におけるそれぞれの扱い方を説明する。
【００６０】
＜３−１．コンポーネント１０側で、テンプレート２０の汎用検索用ビュー及びテンプレートテーブル参照用ビューを扱う場合＞
コンポーネント１０側からビューを直接扱わないことが好ましい。検索部品（モジュール）を介してビューを利用する。
【００６１】
＜３−２．コンポーネント１０側で、コンポーネント１０の汎用検索用ビュー及びテンプレートテーブル参照用ビューを扱う場合＞
コンポーネントテーブルの検索ビューについては、コンポーネント１０側で必要に応じて作成する（図１１参照）。なお、その命名規約はコンポーネント１０の方法に従い、その扱い方はテンプレート２０準拠の方法に従う。テンプレートテーブルの検索ビューについては、コンポーネント１０側で新しい抽出条件及び表示項目での検索を定義したい場合、設定データの枝番は０固定とし、抽出条件のみを変える場合でも新しい検索用ビューを作成する（図１２参照）。なお、その命名規約はコンポーネント１０の方法に従い、その扱い方はテンプレート２０準拠の方法に従う。テンプレートテーブル参照用ビューについては、上記２−１．を参照されたい。
【００６２】
＜４．トリガーオブジェクトの扱い方＞
ここでは、トリガーオブジェクトを、履歴テーブル更新用トリガー、削除可能フラグ更新用トリガー及び整合性保持のための更新用トリガーに分けて、コンポーネント１０におけるそれぞれの扱い方を説明する。
【００６３】
＜４−１．コンポーネント１０側で、テンプレート２０の履歴テーブル更新用トリガー、削除可能フラグ更新用トリガー及び整合性保持のための更新用トリガーを扱う場合＞
コンポーネント１０側からトリガーを直接扱わないことが好ましい。テンプレート２０のテーブルの更新時に自動的にトリガーが使用される。
【００６４】
＜４−２．コンポーネント１０側で、コンポーネント１０の履歴テーブル更新用トリガー、削除可能フラグ更新用トリガー及び整合性保持のための更新用トリガーを扱う場合＞
履歴テーブル更新用トリガーについて、その命名規約は、コンポーネント１０の方法に従い、その扱い方は、テンプレート２０準拠の方法に従う。
【００６５】
削除可能フラグ更新用トリガー（コンポーネントテーブル上のトリガーからコンポーネントテーブルの更新への更新に関するもの）については、コンポーネント１０側で必要に応じて作成する。なお、その命名規約はコンポーネント１０の方法に従い、その扱い方はテンプレート２０準拠の方法に従う。削除可能フラグ更新用トリガー（コンポーネントテーブル上のトリガーからテンプレートテーブルの更新への更新に関するもの）については、コンポーネント１０側で必要に応じてテンプレート２０ごとに作成する。なお、テンプレートテーブルの更新の際、トリガー内では、ワークテーブルを介さずにそのテーブルに直接アクセスしてよい。削除可能フラグ更新用トリガー（テンプレートテーブル上のトリガーからコンポーネントテーブルの更新への更新に関するもの）については、コンポーネント１０側で必要に応じてテンプレート２０ごとに作成する。
【００６６】
テンプレートテーブルとコンポーネントテーブルの間でデータの整合性を保持するための更新用トリガーについて、データ修正をＤＥＬＥＴＥやＩＮＳＥＲＴで更新をしている場合に意図しない更新結果になる虞があるため、基本的にその作成を禁止することが好ましい。
【００６７】
＜５．ストアドプロシージャオブジェクト及びストアド関数オブジェクトの扱い方（本具体例の特長部分の一つ）＞
ここでは、ストアドプロシージャオブジェクトを、ＨＬｉｎｑテーブルストアド及び手動作成ストアドに分けて、コンポーネント１０におけるそれぞれの扱い方を説明する。また、ストアド関数オブジェクトを、手動作成関数として、コンポーネント１０におけるその扱い方を説明する。
【００６８】
＜５−１．コンポーネント１０側で、テンプレート２０の手動作成ストアド及び手動作成関数を扱う場合＞
コンポーネント１０が動作しているテンプレート２０によって、ストアドの有無、引数および結果セットが異なる場合があるため、コンポーネント１０からテンプレート２０のストアドを直接使用しないことが好ましい。コンポーネント１０からテンプレート２０のストアドを参照する場合、参照用ラッパーストアド（チャネル１１に相当）を作成し、作成した参照用ラッパーストアドを介してテンプレート２０のストアドへアクセスする（制御部１０２が実行する処理）。また、コンポーネント１０で必要なストアドのみを作成する。
【００６９】
同じく、コンポーネント１０が動作しているテンプレート２０によって、関数の有無、引数および戻り値が異なる場合があるため、コンポーネント１０からテンプレート２０の関数を直接使用しないことが好ましい。コンポーネント１０からテンプレート２０の関数を参照する場合、参照用ラッパー関数（チャネル１１に相当）を作成し、作成した参照用ラッパー関数を介してテンプレート２０の関数へアクセスする（制御部１０２が実行する処理）。また、コンポーネントで必要な関数のみを作成する。
【００７０】
ここで、システムＩＤがＴ０５のテンプレート２０のストアドとシステムＩＤがＴ０６のテンプレート２０のストアドを対象とした場合におけるラッパーストアドの実装方法の一例を、図１３を参照して説明する。図１３に示すように、コンポーネント１０側から参照用ラッパーストアドを呼び出すことで、当該ストアドに処理を実行させる（制御部１０２が実行する処理）。なお、参照用ラッパーストアドは、「Ｔ０５用」や「Ｔ０６用」といった形で、対象テンプレート２０ごとに作成しておく。その際、ストアドのストアド名、引数及び結果セットは、Ｔ０５用とＴ０６用とで同じにする。また、引数は、対象テンプレート２０のストアドが必要とする全ての引数を含む形とする。また、レスポンスを保護するため、参照用ラッパーストアドの中身は、対象テンプレート２０のストアドを呼び出すだけの単純な処理とする。また、対象テンプレート２０のストアドが結果セットを返す場合は、参照用ラッパーストアドの中で、対象テンプレート２０のストアドが返す全ての項目を含む形に再定義して、参照用ラッパーストアドの呼出元に返す。さらに、対象テンプレート２０のストアドに実際に存在しない引数および結果セットについては、コンポーネント１０側でその初期値を定義する。
【００７１】
また、システムＩＤがＴ０５のテンプレート２０の関数とシステムＩＤがＴ０６のテンプレート２０の関数を対象とした場合におけるラッパー関数の実装方法の一例を、図１４を参照して説明する。図１４に示すように、コンポーネント１０側から参照用ラッパー関数を呼び出すことで、当該関数に処理を実行させる（制御部１０２が実行する処理）。なお、参照用ラッパー関数は、「Ｔ０５用」や「Ｔ０６用」といった形で、対象テンプレート２０ごとに作成しておく。その際、関数の関数名、引数及び戻り値は、Ｔ０５用とＴ０６用とで同じにする。また、引数は、対象テンプレート２０の関数が必要とする全ての引数を含む形とする。また、レスポンスを保護するため、参照用ラッパー関数の中身は、対象テンプレート２０の関数を呼び出すだけの単純な処理とする。また、参照用ラッパー関数の中で、対象テンプレート２０の関数が返す全ての項目を含む形に再定義して、参照用ラッパー関数の呼出元に返す。さらに、対象テンプレート２０の関数に実際に存在しない引数および戻り値については、コンポーネント１０側でその初期値を定義する。
【００７２】
＜５−２．コンポーネント１０側で、テンプレート２０のＨＬｉｎｑテーブルストアドを扱う場合、並びに、コンポーネント１０側で、コンポーネント１０のＨＬｉｎｑテーブルストアド、手動作成ストアド及び手動作成関数を扱う場合＞
テンプレート２０のＨＬｉｎｑテーブルストアドについて、コンポーネント１０から直接扱わないことが好ましい。また、コンポーネント１０のＨＬｉｎｑテーブルストアドについて、その命名規約はコンポーネント１０の方法に従い、その扱い方はテンプレート２０準拠の方法に従う。
【００７３】
コンポーネント１０の手動作成ストアド及び手動作成関数について、コンポーネント１０側で必要に応じて作成する。なお、テンプレート参照用ラッパーストアド及びテンプレート参照用ラッパー関数については、上記５−１．を参照されたい。また、テンプレート２０に既存のストアド及び関数だがコンポーネント１０独自の要件に基づきその一部のロジックを変更する必要があるものについては、テンプレート２０からそれを流用してコンポーネント１０のものとして作成する。
【００７４】
＜６．モジュール（Ｃ＃クラス）オブジェクトの扱い方＞
ここでは、モジュールオブジェクトを、販売部品のＨＬｉｎｑソース、コントロール系及び業務ロジック部品、販売帳票レポート、並びに販売ジョブに分けて、コンポーネント１０におけるそれぞれの扱い方を説明する。
【００７５】
＜６−１．コンポーネント１０側で、テンプレート２０の販売部品（ＨＬｉｎｑソース（自動生成）、コントロール系及び業務ロジック部品）、販売帳票レポート、及び販売ジョブを扱う場合＞
コンポーネント１０側から、テンプレート２０の販売部品、販売帳票レポート、及び販売ジョブに直接アクセスしない（参照設定しない）ことが好ましい。特に、業務ロジック部品については、コンポーネント１０が動作しているテンプレート２０によってクラス及びメンバクラスが異なる場合があるため、コンポーネント１０側から直接アクセスしない（参照設定しない）ことが好ましい。
【００７６】
＜６−２．コンポーネント１０側で、コンポーネント１０の販売部品（ＨＬｉｎｑソース（自動生成）、コントロール系及び業務ロジック部品）、販売帳票レポート、及び販売ジョブを扱う場合＞
ＨＬｉｎｑソースについて、フォルダ階層はコンポーネント１０の方法に従い、扱い方はテンプレート２０準拠の方法に従う。コントロール系について、テンプレート２０からコピーして名前空間をコンポーネント１０用に変えたものを作成する。なお、モジュールの命名規約はコンポーネント１０の方法に従い、扱い方は、テンプレート２０準拠の方法に従う。業務ロジック部品（コンポーネント１０独自の新規作成クラス）について、コンポーネント１０側で必要に応じて新規作成する。また、業務ロジック部品（コンポーネント１０の独自処理なしのテンプレート流用作成クラス）について、テンプレート２０に既存のものだがコンポーネント１０独自の要件に基づいて一部のロジックを変更する必要がないものは、コンポーネント１０側は、テンプレート２０からコピーして名前空間をコンポーネント１０用に変えたものを作成する。また、業務ロジック部品（コンポーネント１０の独自処理ありのテンプレート流用作成クラス）について、テンプレート２０に既存のものだがコンポーネント１０独自の要件に基づいて一部のロジックを変更する必要があるものは、テンプレート２０から流用してコンポーネント１０のものとして作成する。
【００７７】
＜７．ソリューションオブジェクト、プロジェクトオブジェクト及びソースオブジェクトの扱い方＞
ここでは、ソリューションオブジェクトを、ソリューションファイルとして、コンポーネント１０におけるその扱い方を説明する。また、プロジェクトオブジェクトを、プロジェクトファイルとして、コンポーネント１０におけるその扱い方を説明する。さらに、ソースオブジェクトを、ソースファイルとして、コンポーネント１０におけるその扱い方を説明する。
【００７８】
＜７−１．コンポーネント１０側で、テンプレート２０のソリューションファイル、プロジェクトファイル、及びソースファイルを扱う場合＞
テンプレート２０の既存ファイルに対する変更はコンポーネント１０側では加えないことが好ましい。
【００７９】
＜７−２．コンポーネント１０側で、コンポーネント１０のソリューションファイル、プロジェクトファイル、及びソースファイルを扱う場合＞
ファイルはコンポーネント１０側で必要に応じて作成する。なお、その命名規約はコンポーネント１０の方法に従い、扱い方はテンプレート２０準拠の方法に従う。
【００８０】
［Ｂ．汎用実行処理］
コンポーネント１０とテンプレート２０のアプリケーション相互連携に関する汎用実行処理（制御部１０２が実行する処理）の実装概要について、図１５から図２１を参照して説明する。
【００８１】
本実施形態では、カスタマイズ等でバッチ系ジョブに追加チェック処理や追加更新処理などを組み込むことを容易に実現するための仕組みとして、「「カスタマイズでチェック用／更新用ＤＬＬを個別作成して設定し、テンプレート２０側にこのＤＬＬの呼び出し口を用意する」だけで、カスタマイズ部分が自動的に実行される」という仕組みを採用する。これにより、本体側の変更による影響を最小限に留めることができる。また、この仕組みの中で、「汎用実行モジュールテーブル」なるテーブルを用いる。これにより、テンプレート２０側に準備された機能やジョブをコンポーネント１０側のジョブから呼び出すことが容易に実現できる。なお、以下の説明では、この仕組みを組み込む側を本体とし、追加処理ＤＬＬをアドオンモジュールとする。
【００８２】
この仕組みの実装に対応するジョブは、図１５に示すように、例えば、月次仮締処理、月次確定処理、仕訳連携データ作成処理、受払台帳、取引履歴照会および受払履歴照会等のジョブである。なお、受払台帳、取引履歴照会および受払履歴照会の３つのジョブに更新用アドオンモジュールを実装するケースについては、各コンポーネント１０の明細データをテンプレート２０のデータと合わせて抽出する必要がある為、「コンポーネント１０のデータを動的に共通ワークテーブルへ更新し、テンプレート２０のデータと共通ワークテーブルのデータを合わせて取得する」という仕組みで対応する。
【００８３】
汎用実行モジュールテーブルは、例えば、図１６に示すレイアウトのテーブルである。
【００８４】
月次仮締処理、月次確定処理または仕訳連携データ作成処理（月次仕訳出力または仕訳送信）のジョブに、内部処理の一環として処理を組み込む場合の実装例は、以下の通りである。
（１）本体側処理に、アドオン呼出処理を実装する。
（２）アドオン呼出処理にて、呼出元ジョブＩＤと実行区分と任意キーコード（特定不要な場合は空文字）とをキーとして、汎用実行モジュールテーブルを取得する。
（３）取得件数０の場合、何もせずにスキップする（テンプレート２０単独導入の場合は取得件数が０）。
（４）処理連番順に、実行モジュール（ＤＬＬの場合はさらに実行メソッド名）をコールする。
（５）戻り値エラーの場合、本体側処理を終了する（ロールバック）。
（６）レコードブレークするまで上記（４）へ戻り、レコードブレーク後は本体側処理を続行する。
【００８５】
仕訳連携データ作成処理（随時仕訳出力）のジョブに、画面と連動して処理を組み込む場合の実装例は、以下の通りである。
（１）図１７の画面に示すアドオン仕訳グリッドに、汎用実行モジュールテーブルより「随時仕訳出力」分を転送する（データ無しの場合、グリッド非表示）。
（２）仕訳出力にて、チェック対象分に紐づくＤＬＬの処理を実行する。
【００８６】
コンポーネント１０のジョブにてテンプレート２０のジョブ（例えば、ロット番号検索や商品検索等）をサブモジュールとして使用する場合、テンプレート２０によってサブモジュールの名称等が異なることがある為、汎用実行モジュールテーブルを介してサブモジュール名を設定より取得し、取得した名称のサブモジュールを動的に実行する。なお、ベースとなるテンプレート２０に応じた名称を予めテーブルに設定しておく必要はあるが、コンポーネント１０のインストーラーにて初期提供される為、ユーザーサイドでの設定変更等は不要である。
【００８７】
ここで、コンポーネント１０側の「〇×入力」という機能で提供される入力画面から、テンプレート２０（業務システムＡや業務システムＢなど）側の商品検索機能を使用する場合の実装例について、図１８等を参照して説明する。
【００８８】
図１８に示すように、まず、商品検索を実行する入力画面からバーチャル商品検索が起動するように指定しておく。そして、入力画面から直接呼び出されたバーチャル商品検索は、汎用実行モジュールテーブルに設定されたモジュール情報（モジュール名、名前空間および実行クラス）を取得し、取得したモジュール情報から処理命令を動的に生成して実行する。すなわち、本実施形態では、入力画面からテンプレート２０の商品検索を直接呼び出すのではなく、バーチャル商品検索が汎用実行モジュールテーブルを介して動的にテンプレート２０の商品検索を呼び出す。
【００８９】
このような「汎用実行モジュールテーブルを介した動的呼出」を採用することにより、実行環境には必要なモジュールのみ格納されていればよくなるので、双方のモジュールが実行環境に格納されていることを必須とするこれまでの直接呼出（入力画面からテンプレート２０の商品検索を直接呼び出す仕組み）で起こり得る「コンポーネント１０と単独のテンプレート２０での導入の場合に入力画面が動作不能となる事態」を回避することができる。また、このような動的呼出を採用することにより、導入するテンプレート２０が増えても、汎用実行モジュールの設定内容を変更するだけで（言い換えるとノンプログラミングで）この仕組みを運用することができ（図１９参照）、また、複数のテンプレート２０が導入されている場合においてどのテンプレート２０のモジュールを呼び出すかを汎用実行モジュールテーブル上で簡単に切り替えることができる。なお、実装プログラムの一例は以下の通りである。
/// <summary>
/// 受注入力
/// </summary>
class JuchuuInput
{
/// <summary>
/// 商品検索画面を表示
/// </summary>
public void ExecuteShouhinSearchDialog()
{
//バーチャル商品検索の検索画面表示メソッドを実行
ShouhinSearchDialog.ShowDialog();
}
}
/// <summary>
/// バーチャル商品検索
/// </summary>
class ShouhinSearchDialog
{
/// <summary>
/// 検索画面を表示
/// </summary>
/// <returns></returns>
public void ShowDialog()
{
//データベースにアクセスし、汎用実行モジュールテーブルの情報を取得
DataTable dt = GetHanyouZikkouModuleData(“ShouhinSearchDialog”,“商品検索Wrap”);
//呼出モジュールのアセンブリパスとクラス名の文字列を取得
string modulePath = GetModulePath(dt[0]);
string className = GetClassName(dt[0]);
//アセンブリをロード
System.Reflection.Assembly assembly = System.Reflection.Assembly.LoadFrom(modulePath);
//クラス型を取得
System.Type type = assembly.GetType(className);
//インスタンスを作成
object dialog = Activator.CreateInstance(type);
//メソッドを取得
System.Reflection.MethodInfo meth = type.GetMethod(“ShowDialog”);
//メソッド実行（検索画面を表示）
meth.Invoke(dialog, null);
return;
}
}
【００９０】
つぎに、テンプレート２０（例えば業務システムＡ）側の仕訳連携処理機能において、その処理対象に、各コンポーネント１０側のデータ（例えばコンポーネントＸの製造実績明細データ、ＰＪ原価明細データ及び月次売上明細データなど）を含める場合の実装例について、図２０等を参照して説明する。
【００９１】
まず、仕訳連携処理は、送信Ｉ／Ｆをキーとして、汎用実行モジュールテーブルからモジュール情報（各コンポーネントのＩ／Ｆの情報）を動的に取得する。そして、コンポーネント１０では、それぞれ必要なものをＩ／Ｆとして定型データを返る。そして、仕訳連携処理は、Ｉ／Ｆより受け取ったデータを使用し、仕訳送信を実行する。すなわち、本実施形態では、仕訳連携処理が汎用実行モジュールテーブルを介して順次動的にコンポーネント１０の仕訳送信を呼び出す。
【００９２】
このような呼出を採用することにより、テンプレート２０側の処理で、コンポーネント１０導入状況に合わせて適切な処理を行うことができる。なお、コンポーネント１０がインストールされていない環境では、汎用実行モジュールテーブルに設定される情報はないので、処理自体がスキップされる（図２１参照）。なお、実装プログラムの一例は以下の通りである。
/// <summary>
/// 仕訳連携処理
/// </summary>
class SiwakeRenkei
{
/// <summary>
/// 連携処理を実行
/// </summary>
/// <returns></returns>
public void Execute()
{
//データベースにアクセスし、汎用実行モジュールテーブルの情報を取得
DataTable dt = GetHanyouZikkouModuleData(“SiwakeRenkei”,“送信I/F”);
foreach (var row in dt)
{
//呼出モジュールのアセンブリパスとクラス名の文字列を取得
string modulePath = GetModulePath(row);
string className = GetClassName(row);
//アセンブリをロード
System.Reflection.Assembly assembly = System.Reflection.Assembly.LoadFrom(modulePath);
//クラス型を取得
System.Type type = assembly.GetType(className);
//インスタンスを作成
object dialog = Activator.CreateInstance(type);
//メソッドを取得
System.Reflection.MethodInfo meth = type.GetMethod(“Execute”);
//メソッド実行（連携処理）
meth.Invoke(dialog, null);
}
return;
}
}
【００９３】
［４．本実施形態のまとめ及び他の実施形態］
本実施形態は、コンポーネント型業務システム（業務部品：コンポーネントシステム）に関するものであり、ベースとなる複数種の業種向け販売管理システム（テンプレートシステム）に副業務範囲を同一モジュールでアドオンしたアドオンシステム（コンポーネント）に関するものである。テンプレート毎の差異（共通部品・テーブル等）は、「チャネル」と称する中間モジュールにて吸収する。データ更新・受取等については、コンポーネントシステムは、テンプレートシステムを気にする事無く、定型フォーマットでチャネルへ受け渡す事だけで、チャネルがテンプレートシステムに対して適切な処理を行うことができる。
【００９４】
従来は、業務のカバー範囲を広げるという目的を達成するために、機能をシステム本体に直接追加してシステム本体を大きしていく事で対応していた。これによって、多種多様な補助簿系システムが生まれてきた。しかし、肥大化したシステムでは、ユーザにとっても開発ＳＥにとっても扱いづらく、反面、単一事業を想定しているために複合事業体への対応については副業務をＳＩ（Ｓｙｓｔｅｍ  Ｉｎｔｅｇｒａｔｉｏｎ）で実現せざるを得ない場面があった。
【００９５】
すなわち、従来は、任意の商材をベースにギャップとなる業務範囲をＳＩで提案・構築を行っていたが、本実施形態においては、業種業態に特化した業務範囲をコンポーネントソリューションとして整理提供していくことで、「テンプレートシステム＋複数のコンポーネントシステム」という組み合わせで業務のカバー範囲が広がり、それと共に、開発工数を抑えた提案・構築に繋げることができる。
【００９６】
また、本発明は、上述した実施形態以外にも、特許請求の範囲に記載した技術的思想の範囲内において種々の異なる実施形態にて実施されてよいものである。
【００９７】
例えば、実施形態において説明した各処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともでき、あるいは、手動的に行われるものとして説明した処理の全部または一部を公知の方法で自動的に行うこともできる。
【００９８】
また、本明細書中や図面中で示した処理手順、制御手順、具体的名称、各処理の登録データや検索条件等のパラメータを含む情報、画面例、データベース構成については、特記する場合を除いて任意に変更することができる。
【００９９】
また、情報処理装置１００に関して、図示の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。
【０１００】
例えば、情報処理装置１００が備える処理機能、特に制御部にて行われる各処理機能については、その全部または任意の一部を、ＣＰＵおよび当該ＣＰＵにて解釈実行されるプログラムにて実現してもよく、また、ワイヤードロジックによるハードウェアとして実現してもよい。尚、プログラムは、本実施形態で説明した処理を情報処理装置に実行させるためのプログラム化された命令を含む一時的でないコンピュータ読み取り可能な記録媒体に記録されており、必要に応じて情報処理装置１００に機械的に読み取られる。すなわち、ＲＯＭまたはＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）などの記憶部などには、ＯＳと協働してＣＰＵに命令を与え、各種処理を行うためのコンピュータプログラムが記録されている。このコンピュータプログラムは、ＲＡＭにロードされることによって実行され、ＣＰＵと協働して制御部を構成する。
【０１０１】
また、このコンピュータプログラムは、情報処理装置１００に対して任意のネットワークを介して接続されたアプリケーションプログラムサーバに記憶されていてもよく、必要に応じてその全部または一部をダウンロードすることも可能である。
【０１０２】
また、本実施形態で説明した処理を実行するためのプログラムを、一時的でないコンピュータ読み取り可能な記録媒体に格納してもよく、また、プログラム製品として構成することもできる。ここで、この「記録媒体」とは、メモリーカード、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）メモリ、ＳＤ（Ｓｅｃｕｒｅ  Ｄｉｇｉｔａｌ）カード、フレキシブルディスク、光磁気ディスク、ＲＯＭ、ＥＰＲＯＭ（Ｅｒａｓａｂｌｅ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＥＥＰＲＯＭ（登録商標）（Ｅｌｅｃｔｒｉｃａｌｌｙ  Ｅｒａｓａｂｌｅ  ａｎｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｋ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＭＯ（Ｍａｇｎｅｔｏ−Ｏｐｔｉｃａｌ  ｄｉｓｋ）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）、および、Ｂｌｕ−ｒａｙ（登録商標）  Ｄｉｓｃ等の任意の「可搬用の物理媒体」を含むものとする。
【０１０３】
また、「プログラム」とは、任意の言語または記述方法にて記述されたデータ処理方法であり、ソースコードまたはバイナリコード等の形式を問わない。なお、「プログラム」は必ずしも単一的に構成されるものに限られず、複数のモジュールやライブラリとして分散構成されるものや、ＯＳに代表される別個のプログラムと協働してその機能を達成するものをも含む。なお、実施形態に示した各装置において記録媒体を読み取るための具体的な構成および読み取り手順ならびに読み取り後のインストール手順等については、周知の構成や手順を用いることができる。
【０１０４】
記憶部に格納される各種のデータベース等は、ＲＡＭ、ＲＯＭ等のメモリ装置、ハードディスク等の固定ディスク装置、フレキシブルディスク、及び、光ディスク等のストレージ手段であり、各種処理やウェブサイト提供に用いる各種のプログラム、テーブル、データベース、及び、ウェブページ用ファイル等を格納する。
【０１０５】
また、情報処理装置１００は、既知のパーソナルコンピュータまたはワークステーション等の情報処理装置として構成してもよく、また、任意の周辺装置が接続された当該情報処理装置として構成してもよい。また、情報処理装置１００は、当該装置に本実施形態で説明した処理を実現させるソフトウェア（プログラムまたはデータ等を含む）を実装することにより実現してもよい。
【０１０６】
更に、装置の分散・統合の具体的形態は図示するものに限られず、その全部または一部を、各種の付加等に応じてまたは機能負荷に応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。すなわち、上述した実施形態を任意に組み合わせて実施してもよく、実施形態を選択的に実施してもよい。
【産業上の利用可能性】
【０１０７】
本発明は、特に、ベースとなる業務システム（テンプレートシステム（親システム））が導入されている環境上で動作する副業務システム（コンポーネントシステム（子システム））に導入される部品として有用である。
【符号の説明】
【０１０８】
１００  情報処理装置（コンポーネント１０、チャネル１１及びテンプレート２０を含む）
１０２  制御部
１０４  通信インターフェース部
１０６  記憶部
１０８  入出力インターフェース部
１１２  入力装置
１１４  出力装置
３００  ネットワーク
【図１】
2020166904.tif 000003
【図２】
2020166904.tif 000004
【図３】
2020166904.tif 000005
【図４】
2020166904.tif 000006
【図５】
2020166904.tif 000007
【図６】
2020166904.tif 000008
【図７】
2020166904.tif 000009
【図８】
2020166904.tif 000010
【図９】
2020166904.tif 000011
【図１０】
2020166904.tif 000012
【図１１】
2020166904.tif 000013
【図１２】
2020166904.tif 000014
【図１３】
2020166904.tif 000015
【図１４】
2020166904.tif 000016
【図１５】
2020166904.tif 000017
【図１６】
2020166904.tif 000018
【図１７】
2020166904.tif 000019
【図１８】
2020166904.tif 000020
【図１９】
2020166904.tif 000021
【図２０】
2020166904.tif 000022
【図２１】
2020166904.tif 000023
【手続補正書】
【提出日】令和2年7月28日(2020.7.28)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
業種別の複数の業務アプリケーションと、業務アプリケーションが導入されている環境下で動作する、業務アプリケーションに組み合わされるソフトウェア部品という位置付けの業務部品アプリケーションとが導入されている、制御部を備えた情報処理装置であって、
業務部品アプリケーションの管理下には、各々の業務アプリケーションの管理下にある複数のデータベースオブジェクトを基に作成された、当該複数のデータベースオブジェクト間の差異を吸収するためのデータベースオブジェクトであるチャネルが存在し、
前記チャネルは、各々の業務アプリケーションの管理下にある複数のテーブルに含まれる項目を全て含むワークテーブル、及び、当該ワークテーブルに格納されている値を当該複数のテーブルの内の所定のテーブルに格納することで当該所定のテーブルを更新する第一のオブジェクトを含み、
前記制御部は、業務部品アプリケーションが有する機能が動作している状態において、前記所定のテーブルに格納するための値が得られると、当該得られた値を前記ワークテーブルに格納し、前記第一のオブジェクトを呼び出すこと、
を特徴とする情報処理装置。
【請求項２】
前記チャネルは、各々の業務アプリケーションの管理下にある複数のオブジェクトが必要とする引数を全て含み且つ当該複数のオブジェクトの内の所定のオブジェクトを呼び出す第二のオブジェクトを含み、
前記制御部は、業務部品アプリケーションが有する機能が動作している状態において、前記所定のオブジェクトに引数として渡す値が得られると、当該得られた値を前記第二のオブジェクトに引数として渡して当該第二のオブジェクトを呼び出すこと、
を特徴とする請求項１に記載の情報処理装置。
【請求項３】
業種別の複数の業務アプリケーションと、業務アプリケーションが導入されている環境下で動作する、業務アプリケーションに組み合わされるソフトウェア部品という位置付けの業務部品アプリケーションとが導入されている、制御部を備えた情報処理装置で実行される情報処理方法であって、
業務部品アプリケーションの管理下には、各々の業務アプリケーションの管理下にある複数のデータベースオブジェクトを基に作成された、当該複数のデータベースオブジェクト間の差異を吸収するためのデータベースオブジェクトであるチャネルが存在し、
前記チャネルは、各々の業務アプリケーションの管理下にある複数のテーブルに含まれる項目を全て含むワークテーブル、及び、当該ワークテーブルに格納されている値を当該複数のテーブルの内の所定のテーブルに格納することで当該所定のテーブルを更新する第一のオブジェクトを含み、
前記制御部は、業務部品アプリケーションが有する機能が動作している状態において、前記所定のテーブルに格納するための値が得られると、当該得られた値を前記ワークテーブルに格納し、前記第一のオブジェクトを呼び出すこと、
を特徴とする情報処理方法。
【請求項４】
業種別の複数の業務アプリケーションと、業務アプリケーションが導入されている環境下で動作する、業務アプリケーションに組み合わされるソフトウェア部品という位置付けの業務部品アプリケーションとが導入されている、制御部を備えた情報処理装置に実行させるためのプログラムであって、
業務部品アプリケーションの管理下には、各々の業務アプリケーションの管理下にある複数のデータベースオブジェクトを基に作成された、当該複数のデータベースオブジェクト間の差異を吸収するためのデータベースオブジェクトであるチャネルが存在し、
前記チャネルは、各々の業務アプリケーションの管理下にある複数のテーブルに含まれる項目を全て含むワークテーブル、及び、当該ワークテーブルに格納されている値を当該複数のテーブルの内の所定のテーブルに格納することで当該所定のテーブルを更新する第一のオブジェクトを含み、
前記制御部に、業務部品アプリケーションが有する機能が動作している状態において、前記所定のテーブルに格納するための値が得られると、当該得られた値を前記ワークテーブルに格納し、前記第一のオブジェクトを呼び出す処理を実行させること、
を特徴とするプログラム。