パーソナルツール
現在の場所: ホーム ブログ MAGIC V10解析(8)
« 2018January »
Su Mo Tu We Th Fr Sa
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      
このBlogについて
 代表の向井田ことMUKAです。当ブログサイトでは、MAGICやDB2に関する技術者向け情報を公開しています。お気軽にお立ち寄り下さい。
最近のエントリ
twitter / 新RT機能を英語モードで・・・ muka 2009年11月19日
twitter / List Widget muka 2009年11月03日
twitter API / Retweet の仕様が・・・ muka 2009年10月30日
twitter API / Lists muka 2009年10月24日
IBM Rational Software Conference 2009 と アジャイル開発 muka 2009年10月08日
twitter API / geoタグ! muka 2009年10月01日
Twitter Developers Meetup in Tokyo muka 2009年09月11日
Club DB2 2009/9/4 muka 2009年09月05日
最近のコメント
Re:Club DB2 2009/8/29 muka 2009年09月01日
Re:Club DB2 2009/8/29 SIM 2009年08月31日
最近のトラックバック
Club DB2 8/29の感想エントリと今後の予定 Unofficial DB2 BLOG 2009年09月01日
カテゴリ
misc (47)
dbMAGIC (47)
DB2 (47)
mail (47)
Web (47)
twitter (47)
 

MAGIC V10解析(8)


ノードIDが危ない?


 いきなり変なタイトルですみません。m(__)m
 実は、XML連携時に自動的に作成されるノードIDの値がちょっと問題になっていまして・・・。(個人的にですが・・・w)
 というのは、いつぞやの回で、「ノードIDはXML上の記述順を保証する」と思い、ついつい、そう書いてしまったんですが、これがそうでもないようなのです。
 これが崩れると非常に困るわけで・・・。
 私が確認したのは、データリポジトリのカラム表示順の取得に関する現象だったのですが、つい最近、前回作成したプログラム一覧のプログラム番号の取得でも同じような現象が起きてしまいました。
 実はデータリポジトリの解析の件は、ここでの新しいネタにしようと思っていたのですが、そういうわけでしばし保留にさせて下さい。
 こうして前回までのプログラムを見直してみると、結構キケンな場所が幾つかあるようです。

その1:プログラム番号の取得

 プログラム番号の取得は、XML連携で生成されるノードIDを信じて作っていましたが、これはちょっとキケンです。やはり、「'%Source%\Progs.xml'」を取り込んで、

Val(XMLGet (1,1,'/Application/ProgramsRepositoryOutLine
/Programs/Program['&Trim(Str(D,'5'))&']','id'),'5')

で、順にIDを取得すべきかと考えます。


その2:タスク構造の取得

 前回作ったプログラムは、タスクIDの1番が必ずあるという想定ですが、これは思いっきり外しています。
 加えて言うなら、タスクIDを中心に親子の関連を形成してしまうと、タスクツリーが表示順にならないんですよねぇ・・・。(^^;
 これらは、改造が必要です。タスク番号もプログラム番号の取得と同じように、順に0(ルートタスク)からの連番で割り当てたほうが良いようです。
 タスクIDはツリー表示を行う上では属性値として扱いましょう。


 ということで、完成しました。(何時の間に・・・!)



プロジェクトフォルダの取得について


 作ったプログラム一覧のプログラムを、現在開発している任意のアプリケーションに組み込んで実行させることを考えて見ます。
 つまり、開発しているアプリケーションには殆ど何のプログラムを追加すること無しに作成したプログラム一覧のプログラムを実行させるわけですが、その場合は、キャビネットとしてアプリケーションを出力し、コール公開で呼び出せばOKです。


任意のホストアプリ  →  キャビネット出力したECF公開プログラム

公開プログラム側の手順


  1. ラッパープログラムの作成
    仮に「開発中のプログラム一覧」という名前のバッチタスクのプログラムを作成します。
    このプログラムで、下記の値から現在起動しているホストアプリケーションのプロジェクトのパスを取得することが可能です。
    Translate('%WorkingDir%')
    取得したプロジェクトのパス名を論理名にセットします。
    当アプリケーションでは、XML形式のデータリポジトリに使用している「%Source%」をセットすることになります。
    更に、プログラム番号の取得用に使用しているメモリテーブル「Progs.ProgNo」を「DbDel」し、「プログラム一覧」のプログラムをコールします。
    公開名に適当な名称(「ListProgs」など)を付けます。

  2. 「プログラム一覧」プログラム
    プログラム一覧は、プログラム番号の取得用に使用しているメモリテーブル「Progs.ProgNo」が空であれば、自動的に再取得するような仕組みになっています。

  3. タスク一覧プログラム
    タスクのツリーを表示するプログラムでは、ビットマップファイルを使用していますが、その「イメージ一覧ファイル名」の式欄に下記のようにセットします。
    ProjectDir()&'TREE.BMP'
  4. キャビネット出力
    ファイルプルダウンメニューからキャビネットファイル(「V10HACKS.ecf」等)を出力します。


任意の開発中のアプリケーション側の手順

  1. メインプログラムの修正
    メインプログラムを開き、ロジックにイベントを追加します。(「Ctrl+H」→「E」→「S」→「Tab」→「Ctrl+F7」→「Enter」等)
    行を追加(「F4」キー)し、コール、「N=公開名」、「公開プログラム名」に式で'ListProgs'、「キャビネットファイル」に、出力したキャビネットファイルのファイル名を入力します。

  2. プログラムの実行
    任意のプログラムを実行している最中などに、登録したホットキー(上の例では、「Ctrl+F7」キー)を押します。
    実行中のアプリケーションのプログラム一覧が表示され、任意のプログラムでF5キー押下によりタスクツリーが表示されればOKです。

project.jpg



プロジェクトフォルダの取得方法には2種類存在する!

 この例で述べたように、ホストアプリケーションで実行した場合は、ProjectDir()関数も、%WorkingDir%論理名もプロジェクトフォルダと同じフォルダのパス名を返しますが、コンポーネント等のアプリケーションで実行した場合は、ProjectDir()関数が、コンポーネントのフォルダを、%WorkingDir%論理名はホストアプリのフォルダをそれぞれ返すような仕様になっているようです。


今回のプログラムソース


 今回もソース公開しておきます。
 いろいろと良いアイデアがありましたら、教えて下さい。



MAGIC V10解析(1) MAGIC V10解析(1)
サイズ 8337 - File type text/html
MAGIC V10解析(2) MAGIC V10解析(2)
サイズ 8904 - File type text/html
MAGIC V10解析(3) MAGIC V10解析(3)
サイズ 9714 - File type text/html
MAGIC V10解析(4) MAGIC V10解析(4)
サイズ 9882 - File type text/html
MAGIC V10解析(5) MAGIC V10解析(5)
サイズ 10443 - File type text/html
MAGIC V10解析(6) MAGIC V10解析(6)
サイズ 9739 - File type text/html
MAGIC V10解析(7) MAGIC V10解析(7)
サイズ 12563 - File type text/html
V10HACKS_20070306.lzh V10HACKS_20070306.lzh
サイズ 60.3 kB - File type application/x-lzh
カテゴリ
dbMAGIC