COMインターフェイスを通したAsprovaの機能の拡張

生産スケジューラー

COMインターフェイスを通したAsprovaの機能の拡張 【イベント発生のアクセスポイントで実行させるプラグインキー(Hook)】


市販のERPシステムやAPSシステムでは、ソースコードは公開しない代わりに、COMインターフェイスを公開し、Standard EXEファイルやプラグイン(DLL)で機能を拡張することができるようにしています。
Wordpressと同じようにAsprovaのプラグインも単体では動作せず、本体のソフトウェアに追加しなければ機能しません。

Asprova本体は、イベントの発生タイミングにプラグインを実行させるためのHookを用意しており、このイベントを表すアクセスポイントであるプラグインキーがWordpressのdo_actionフックまたはapply_filtersフックに該当します。

WordPressのプラグイン追加の概要は「Wordpressのプラグイン開発とは」に記載しています。

COMインターフェイスとは

AsprovaはCOM (Component Object Model)で内部のデータや処理内容を公開する仕組みをもっており、プラグイン(ActiveX DLLファイル:Asprovaから関数呼び出し)やオートメーションクライアント(Standard EXEファイル:外部プログラムからAsprovaにアクセス)から機能追加することができます。

DLLファイルはAsprovaのEXEと同じフォルダに配置され、起動時にAsprovaに自動的に読み込まれます。

DLLはAsprovaの内部コマンドとして登録されますので、ユーザー定義メニューにくっつけてAsprovaからDLLを呼び出しますが、EXEの場合はプロジェクトファイルの名前を指定して開くことでアクティブなプロジェクトを取得します(DLLまたはEXEからのAsprovaプロジェクトオブジェクト取得方法)。

 

DLLの配置場所

DLLは起動するEXEから見て以下の場所に配置する必要があります。

  1. EXEとDLLを同じディレクトリに配置する。
  2. EXEを起動する際にDLLのディレクトリをカレントディレクトリとして起動する。
  3. DLLをsystem32ディレクトリに配置する。
  4. DLLをWindowsディレクトリに配置する。
  5. Path環境変数にDLLの配置しているディレクトリを設定する。

開発環境の参照設定(プラグイン内からAsprovaのライブラリを使用)

参照設定はGUIを持たないActiveXオブジェクトのタイプライブラリをプロジェクトで利用するためにプロジェクトファイル(.vbpファイル)内に保存され、プラグイン(プロジェクトファイルをコンパイルしたDLL)からCOMインターフェイスを通してAsprovaのライブラリにアクセスします。

参照設定によりDim変数宣言の際にそのオブジェクトの型を使用することが出来たり、new 演算子でインスタンスを生成することが出来るようになります。

  1. Asprovaプロジェクトクラス
    Dim project As aslib.ASBProject
  2. 拡張プラグインDLLで使うプラグインキーに関連のあるオブジェクトのリスト
    Dim ArgList As ASPArgList
  3. 品目クラス
    Dim item As ASBItem

プラグインからAsprovaのライブラリを参照する場合、下記の2つのAsprovaのクラスライブラリを開発環境の参照設定から登録します。

  1. As 1.1 Type Library
  2. AsPlugInManager 1.0 Type Library

プラグインのプロジェクトファイルの構成

プラグインの場合、Asprovaから呼び出す関数をASDefaultクラスのAutoRegistrationメソッドに登録します。Asprovaの「プラグイン情報」にプラグインとして登録しておけばAsprova起動時にAutoRegistration関数が自動的に呼ばれ、プロジェクトオブジェクト内に実装されます。

COMポート2

Standard EXE(オートメーションクライアント)の場合はASDefaultクラスは必要ありません(「DLLまたはEXEからのAsprovaオブジェクト取得方法」)。

Asprovaのプラグインマネージャー(プラグイン登録関数)のAddASPlugInメソッドに4つの引数を渡すことによりプラグインを登録しますが、その内容は「自分はFactoryというプロジェクトで、OvertimeというクラスにAddOverTimeというメソッド(エントリ関数)を用意しているから、プラグインキーKeyHookGenericのタイミングで呼んでください」というものです。

プラグインキー(アクセスポイント)に対応するフックと関数のマッピング

Asprovaはあるイベントごとにプラグインを実行させるためのフックを設けています。この各イベントを表すアクセスポイントをプラグインキーと呼び、例えばKeyHookGenericは「コマンドの追加」、つまり追加したコマンドが起動するタイミングのアクセスポイントで、コマンドを実行することによりプラグインを実行させます。

Option Explicit
Public Function AutoRegistration(plugInManager As ASPPlugInManager, module As ASPModule) As Boolean
    'このモジュールのコメントを設定します
    module.Comment = "APS Extended Functionality PlugIns (VB)"
    'プラグインオブジェクトを保持する変数を定義します
    Dim plugIn As ASPPlugIn
    ' ---------------------------------------------------------------------------------------------
    'プラグインマネージャを呼び出し、新しいプラグインを登録します。呼び出しメソッド名はAddASPlugIn です
    ' 第1Param:プラグイン表示名
    ' 第2Param:プラグインが実装されているモジュール及びクラスを表すProgID
    ' 第3Param:プラグインのエントリ関数名(呼び出し名)
    ' 第4Param:プラグインが使用されるコンテキストを表すキー名

    '(1)オーバータイムや土日残業を自動的に計算しカレンダーテーブルにセットする
    Set plugIn = plugInManager.AddASPlugIn("オーバータイムを残業と土曜出勤に組み込む", "Factory1.OverTime", "AddOverTime", ASPlugInKeyName.KeyHookGeneric)
    'このプラグインにコメント等などを設定します。

    plugIn.Comment = "オーバータイムを平日残業2時間と土曜2シフト出勤に割り振る。"
    'プラグイン呼び出し順(同一プラグインキーのプラグインが複数あったときのため)
    plugIn.Order = 1
    '自動登録が正常に行われたという事でTrue を返します。
    AutoRegistration = True
End Function

Asprovaは起動時にプラグインを自動的に読み込むと、内部コマンドのプラグインに「エントリ関数の表示名」(プラグインマネージャ呼び出し時の第一引数)を表示させます。

プラグインの中からAsprovaのプラグインマネージャーを呼び出し4つの引数を渡すことによりプラグインを登録します。
COMポート3

COMポート(communication port)のポートと同じ考え方

ついでに言うとCOMポートとCOMインターフェイスのCOMは別物ですが、外部インターフェイスとの標準規格という意味ではCOMポートもCOMインターフェイスも同じもです。

ソフトウェアやハードウェアには、外部とデータを入出力するためにデータの受け渡しの方法を標準化したインターフェース(ポート)を持っています。例えばPOPとSMTPサーバーのポート、DBに接続するときのポートはいずれもTCP/IPのポートです。

標準的なパソコンは、キーボードなどの周辺機器を接続するためのインターフェースとしてPS/2ポートやUSBポート、LANポート(Ethernetポート)などを備えています。

ソフトウェアの場合、外部の装置や通信ネットワークとのデータの送受信を標準的な方法で統一的に扱う方法がOSなどによって提供されており、通信相手などを識別するのにポートが使われます。

Windowsではモデムやプリンタ、イメージスキャナなどにアプリケーションソフトが統一的な方法でアクセスできるよう、入出力方式を統一した「COMポート」という仕組みが提供されており、アプリケーションソフトは自分の対象とする機器がどのCOMポートに接続されているかを知るだけで、当該機器との入出力が取り扱えるようになります。

例えばUSBバーコードを接続する場合にはCOM13が割り当てられますが、物理的にPCには13個もインターフェイスは存在しないのでCOM13というポートはあくまで仮想的なものです。

TCP/IPを利用したネットワーク通信では、通信機器や個々のコンピュータの持つIPアドレスの下に設けられた補助アドレスとして、0から65535までの「ポート番号」が使われます。

これにより、1台のコンピュータで複数のサービスを提供したり、複数のコンピュータと同時に通信できるようになっています。単に「ポート」といった場合には、このTCP/IPのポート番号を指すことも多いです。





おすすめ記事一覧

大統領選挙で考えたギャップにハマるということ 1

ギャップにキュンとするというのは人間の本能みたいなもので、ジョコウィの私利私欲のない素朴なおじさん像と、その実強力なリーダーシップを発揮する実務派という内面が、一見普通の人だが実はスゴイというギャップ好きのインドネシア人に大ウケして、大衆は一種の集団催眠状態にあるようです。

情報の質のレベル 2

見える化された結果を共有化することで問題点が共通認識されますが、共有化が進むことで情報の持つ希少価値が薄れて困る人間がいる場合、有益な情報を独占することでポジションを高めようという政治力が働きます。

3

日本人がインドネシアに来ると、インドネシア人ののんびり加減にイライラするというのは昔からよく聞く話で、インドネシア在住日本人にとってのバイブル的小説である深田祐介著「ガルーダ商人」の中でも、インドネシア宗教省の高官が日本人とインドネシア人を自宅に招待する際に、インドネシア人向けの招待状には、遅刻することを前提にパーティ開始時間を三十分早く書いておくという記述があるほどです。

宗教によって異なる「死んだらどうなる」の考え方 4

キリスト教もイスラム教もともにユダヤ教から派生した宗教であり、それぞれイエス・キリスト(本人が神)またはアッラーという唯一無二の神を信じます。

株価操作なんてインドネシア株では当たり前 5

株価は売り注文と買い注文により変動し、大量の売り注文を買う注文がたくさん入れば、他の投資家達は「俺も俺も」と続くことで株価が上がります。

心臓に毛が生えたインドネシア人のずうずうしい転職活動を応援してみた 6

インドネシア人は秘密の話は誰かに暴露しないと精神の安定を保てない人が多いため、内緒の話に情報の希少性は少なく信憑性も低いことが多いので、「ここだけの話」という枕詞付きで聞かされる話は話半分に聞いておいたほうがいいかもしれません。

日系企業のインドネシアでの存在意義 7

今のまま日本の人口減が続けば、内需は縮小の一途をたどるわけで、そうなると日本国内市場だけで生き残るのは難しいと判断する国内企業が、海外市場に活路を見出そうとするのは必然です。

チャンスはあるが勝てる分野を見つけるのが難しい 8

実際にインドネシアに住んでみて、自分で動いて人と話しをして、現地の事情を少しずつ理解していくにつれて、インドネシアで起業することが意外と手強いことに気づき、その難しさの原因は、高い送料と関税であったりローカル企業との競争であったり、就労ビザ(IMTA)や外国人技能開発基金(DPKK)などのランニングコストの高さであったりします。

インドネシアのシステムインテグレーション業界 9

先日JETRO(日本貿易振興機構)さんと、インドネシアの中小企業のIT投資について意見交換させていただく機会をいただいたのですが、そこで「システム投資のコストメリットはどのように説明できるのか」という、システムインテグレーターの存在価値にも関わる重要な問題提起がありました。

肉体と精神と心と魂 10

「Body and Soul」といえば、昨日の内閣改造に伴う人事で内閣府政務官に内定した自民党の今井絵理子参議院員がメンバーだったSPEEDのデビュー曲であり、インドネシアの老舗女性ファッションブランド名でもあります。

ジャカルタのラーメン市場 11

僕がインドネシアに初めて来たのが1997年10月、インドネシア語は分からないし、仕事は辛いし、周囲の人間は理不尽だし、一時期日本に帰りたくて仕方がない時期がありましたが、当時自分をかろうじてインドネシアに繋ぎ止める心の支えとなっていたのが、協栄プリンスビル(今のWisma Keiai)の日本食レストラン「五右衛門」であり、ここでキムチラーメンを食べることが唯一の楽しみと言っても過言ではありませんでした。

ブランド力、技術力、資金力の3要素 12

1998年のジャカルタ暴動後、ルピアが暴落し海外からのドル建て債務を抱えた国内企業が利子の支払いに苦しんでいた頃、僕は外貨が獲得できるインドネシアでの新しいビジネスを探していました。

日本とインドネシアの間でのタイムマシン経営が通じなくなっている件 13

先進国と後進国との間にある流行のタイムラグを利用して、先進国での成功例を後進国で実践するビジネスモデルをタイムマシン経営といいますが、インターネットの普及に伴い情報がフラット化してしまい、モノと情報のタイムラグが限りなく小さくなった今、先駆者である中小零細同業他社が乱立し市場が出来上がったところに、後発の大手が参入し先発零細を駆逐していく、という典型的な負けパターンにはまります。

サリナデパートとマクドナルド 14

本日5月10日を最後にインドネシアのマクドナルド第1号店であるサリナデパート店(Sarinah)が閉店になりますが、ジャカルタのショッピングモールが新しいコンセプトでモダンにリニューアルされ続ける中で、僕がインドネシアに来たばかりの20数年前には、若者の待ち合わせ場所の定番でもあったサリナデパートやブロックMのパサラヤ(Pasaraya)などは完全に時代に取り残されてしまいました。

不景気の歴史 15

僕がインドネシアに来てからこれまで何度か経済不況を見てきましたが、今回の新型コロナウィルスの感染拡大により、間違いなく景気後退しますので、数年後にはこれがコロナショックとかコロナ不況とか呼ばれるようになるのかもしれません。

日本のバブル経済崩壊後とインドネシアの通貨危機後 16

自分が大学に入学したのがバブル経済末期の1991年、土地も株価もMAX爆上げして、三菱地所がアメリカの象徴であるロックフェラーセンタービルを買収し、ジュリアナ東京でワンレンボディコン(登美丘高校ダンス部のバブリーダンスみたいなやつ)のお姉さん達が扇子振って踊っている時期でした。

内需と外需の自国経済に及ぼす影響 17

公共事業投資を行っても、お金が企業内や個人の貯蓄に滞留してしまい国内消費が増えないのが日本の状況であり、国内消費は増えても消費材の輸入品比率が高く、国内資産が海外に流出しているのがインドネシアの状況です。

2019年の総選挙を前にインドネシア政治史のおさらい 18

来年の大統領選挙(Pemilu Pilpres Pileg Indonesia 2019)に向けての選挙運動(Kampanye)を解禁するにあたり、投票用紙に印字される順番はジョコウィ現職大統領・マフル副大統領候補組が1番、プラボウォ大統領候補・サンディアガウノ副大統領候補組が2番と決まりました。

コーヒーをもっと楽しくもっと美味しく 19

インドネシアは北回帰線と南回帰線をはさむコーヒーベルトに位置するコーヒー栽培に適した国で、1602年の東インド会社の進出を契機にオランダの植民地支配が300年以上続き、その間アラビカ種のコーヒーが持ち込まれ、気候のいい高原地帯で栽培が開始されました。

インドネシア人の悪魔祓い 20

人間誰しも自分の中に悪魔が潜んでおり、それが何らかのきっかけで表面に出て来るという考え方自体には、背景に宗教が有るか無いかの違いだけで、基本的に理解できる話であり、それを信じるか信じないかは別として、そういう考えがあることを認めることは大切なことだと思います。

-生産スケジューラー

© 2020 バテラハイシステム Powered by STINGER