新機能ガイド
Magic eDeveloper V9 Plus

Magic Software Japan K.K.

本マニュアルに記載の内容は、将来予告なしに変更することがあります。これらの情報について MSE（Magic Software Enterprises Ltd.）および MSJ（Magic Software Japan K.K.）は、いかなる責任も負いません。
本マニュアルの内容につきましては、万全を期して作成していますが、万一誤りや不正確な記述があったとしても、MSE および MSJ はいかなる責任、債務も負いません。
MSE および MSJ は、この製品の商業価値や特定の用途に対する適合性の保証を含め、この製品に関する明示
的、あるいは黙示的な保証は一切していません。
本マニュアルに記載のソフトウェアは、製品の使用許諾契約書に記載の条件に同意をされたライセンス所有者に対してのみ供給されるものです。同ライセンスの許可する条件のもとでのみ、使用または複製することが許されます。当該ライセンスが特に許可している場合を除いては、いかなる媒体へも複製することはできません。
ライセンス所有者自身の個人使用目的で行う場合を除き、MSE または MSJ の書面による事前の許可なしでは、いかなる条件下でも、本マニュアルのいかなる部分も、電子的、機械的、撮影、録音、その他のいかなる手段によっても、コピー、検索システムへの記憶、電送を行うことはできません。
サードパーティ各社商標の引用は、MSE および MSJ の製品に対するコンパチビリティに関しての情報提供のみを目的としてなされるものです。
本マニュアルにおいて、説明のためにサンプルとして引用されている会社名、製品名、住所、人物は、特に断り書きのないかぎり、すべて架空のものであり、実在のものについて言及するものではありません。
Magic は Magic Software Enterprises Ltd. のイスラエルその他の国での商標または登録商標です。
Magic eDeveloper、Magic Client および Magic Application Server は Magic Software Japan K.K. の商標です。
Pervasive.SQL は Pervasive Software, Inc. の商標です。
Microsoft および FrontPage は、Microsoft Corporation の登録商標です。また、Windows, WindowsNT および
ActiveX は Microsoft Corporation の商標です。
Oracle は Oracle Corporation の登録商標です。
一般に、会社名、製品名は各社の商標または登録商標です。
MSE および MSJ は、本製品の使用またはその使用によってもたらされる結果に関する保証や告知は一切していません。この製品のもたらす結果およびパフォーマンスに関する危険性は、すべてユーザが責任を負うものとします。
この製品を使用した結果、または使用不可能な結果生じた間接的、偶発的、副次的な損害（営利損失、業務中断、業務情報の損失などの損害も含む）に関し、事前に損害の可能性が勧告されていた場合であっても、MSE および MSJ、その管理者、役員、従業員、代理人は、いかなる場合にも一切責任を負いません。

第一版

2003 年 6 月 30 日 Version 9.4J SP1a

Copyright 2003 Magic Software Enterprises Ltd.and Magic Software Japan K.K. All rights reserved.

目次

1 新機能の概要
ブラウザ形式アプリケーション .................................................................................... 1
Magic コンポーネント ..................................................................................................... 1
イベント駆動エンジン .................................................................................................... 2
データ管理 ........................................................................................................................ 2
エラー処理 ........................................................................................................................ 2
マルチリクエスト処理 .................................................................................................... 2
生産性の向上 .................................................................................................................... 2
開発モードの機能強化 .................................................................................................... 3
外部アプリケーションとの接続性の向上 .................................................................... 3

2 ブラウザ形式アプリケーション
ブラウザクライアント .................................................................................................... 5
サーバ側の動作 ................................................................................................................ 5
コンテキスト管理................................................................................................. 6ブラウザ形式アプリケーションの開発機能 ................................................................ 6
クラスとスタイルのサポート ........................................................................................ 7ブラウザ形式アプリケーション機能を拡張する関数 ................................................ 7
CallJS ...................................................................................................................... 7
CallOBJ ................................................................................................................... 7
CallURL .................................................................................................................. 7
CallProgURL........................................................................................................... 7
コンテキスト間でのデータ共有 .................................................................................... 7
SharedValGet .......................................................................................................... 7
SharedValSet........................................................................................................... 7
ブラウザクライアントのタスクキャッシュ ................................................................ 8

3 Magic コンポーネント
Magic コンポーネントの統合 ......................................................................................... 9コンポーネントとは ........................................................................................................ 9コンポーネントインタフェースの作成 ........................................................................ 9

4 イベント駆動エンジン
イベント用語 .................................................................................................................... 11
イベントタイプ ................................................................................................................ 11
新機能ガイドMagic eDeveloper V9 Plusi

イベント処理 .................................................................................................................... 12
コントロールレベルのハンドラ......................................................................... 12
ユーザ定義イベント............................................................................................. 12
ハンドラテーブル................................................................................................. 12
イベント実行コマンド......................................................................................... 13
伝播......................................................................................................................... 13
ハンドラ検索機能の仕組み................................................................................. 13
コンポーネントイベント..................................................................................... 13

5 データ管理の改善
遅延トランザクション .................................................................................................... 15
トランザクションモード..................................................................................... 15
トランザクションキャッシュの動作................................................................. 16
遅延モードで発生するエラー処理..................................................................... 16
更新と削除............................................................................................................. 17
数値項目の更新..................................................................................................... 17
DM ステートメントの発行順序..................................................................................... 17
リソースロック ................................................................................................................ 18
Lock......................................................................................................................... 18
Unlock ..................................................................................................................... 18
リソースロックファイル..................................................................................... 18
SQL での範囲指定............................................................................................................ 18

6 エラー処理
エラー処理の仕組み ........................................................................................................ 21
エラー発生時の処理方式 ................................................................................................ 22
アボート................................................................................................................. 22
復旧......................................................................................................................... 22
エラーハンドラの作成 .................................................................................................... 22
エラーハンドラの記述......................................................................................... 22
実行時のエラー処理 ........................................................................................................ 23
レコードポジションに基づくタスクの範囲／位置付 ................................................ 23

7 マルチスレッドエンジン
動作環境の設定 ................................................................................................................ 25
最大並行リクエスト数......................................................................................... 25
現在のアプリケーション..................................................................................... 25
INIPut 関数............................................................................................................. 25
セキュリティ......................................................................................................... 25
TCP/IP ポート........................................................................................................ 25

ii

新機能ガイドMagic eDeveloper V9 Plus

ブローカと汎用メッセージレイヤ..................................................................... 26
メインプログラム................................................................................................. 26
トランザクション................................................................................................. 26
ロック..................................................................................................................... 26
メモリテーブル..................................................................................................... 26
リソースの共有..................................................................................................... 26
実行時の関数 .................................................................................................................... 26

8 GUI の拡張
テーブルコントロール .................................................................................................... 29
テーブル内でのマルチマーキング..................................................................... 29
マルチマーキングイベントハンドラ................................................................. 30
マルチマーキング関数......................................................................................... 30
テーブルコントロールのサイズ変更................................................................. 30
ツリーコントロール ........................................................................................................ 31
ドラッグ & ドロップのサポート ................................................................................... 31

9 生産性の向上
クロスリファレンス ........................................................................................................ 33
クロスリファレンスがサポートされるオブジェクト..................................... 33
クロスリファレンスの表示................................................................................. 33
メインプログラム ............................................................................................................ 34
メインプログラムの実行モード動作................................................................. 34
メインプログラムの開発モード動作................................................................. 34
メインプログラムとコンポーネント................................................................. 34
メインプログラムでの関数................................................................................. 34
データコントロール ........................................................................................................ 35
コンボボックスとリストボックスの特性......................................................... 35
モデル ................................................................................................................................ 36
モデルリポジトリ................................................................................................. 36
モデルを使用した作業......................................................................................... 37
Magic フラットファイルでのアプリケーション実行 ................................................. 38
Magic フラットファイルの指定.......................................................................... 38
Magic アプリケーションを MFF として保存 ................................................... 38
タスク戻り値 .................................................................................................................... 39
ISAM データベースに対する外部結合 ......................................................................... 39

10 開発機能の拡張
パラメータ整合 ................................................................................................................ 41
セレクトコマンドとパラメータ......................................................................... 41
新機能ガイドMagic eDeveloper V9 Plusiii

パラメータテーブル............................................................................................. 42
パラメータ一覧..................................................................................................... 42
パラメータを定義した場合のプログラム呼出................................................. 42
パラメータを定義しない場合のプログラム呼出............................................. 42
ブロック処理コマンド .................................................................................................... 42
If-Else...................................................................................................................... 42
Loop ........................................................................................................................ 42
ベクトルのサポート ........................................................................................................ 43
アプリケーションウイザード ........................................................................................ 43
拡張された構文チェックユーティリティ .................................................................... 43
コメント ............................................................................................................................ 43
ナビゲーションインタフェース .................................................................................... 45
リポジトリ............................................................................................................. 46
タスク..................................................................................................................... 47
クロスリファレンス............................................................................................. 47
ブックマーク......................................................................................................... 48
MVCS ..................................................................................................................... 48
検索と置換 ........................................................................................................................ 48
参照整合性 ........................................................................................................................ 48
テーブルリポジトリ............................................................................................. 49
APG......................................................................................................................... 50
リンク条件 ........................................................................................................................ 50
開発モード............................................................................................................. 50
ユーザインタフェース......................................................................................... 51
ユーザ定義開発メニュー ................................................................................................ 51
開発メニューの構文............................................................................................. 51

11 他の環境との接続性
LDAP サポート................................................................................................................. 53
Java との連携 .................................................................................................................... 53
Java 関数................................................................................................................. 53
Java コンポーネントジェネレータ..................................................................... 53
J2EE との連携 ....................................................................................................... 54
COM との連携 .................................................................................................................. 54
Magic COM クライアント ................................................................................... 54
Magic COM インタフェース ............................................................................... 54
XML サポート ................................................................................................................. 54
XML 関数............................................................................................................... 54
XML コンポーネントジェネレータ................................................................... 55
Web サービスサポート.................................................................................................... 55

iv

新機能ガイドMagic eDeveloper V9 Plus

Web サービスの利用 ............................................................................................ 55
Web サービスプロバイダ機能 ............................................................................ 55
SNMP サポート ................................................................................................................ 55
メッセージキューのサポート ........................................................................................ 55
接続関数 ............................................................................................................................ 56
メール関数............................................................................................................. 56
クリップボード関数............................................................................................. 56
HTTP 関数.............................................................................................................. 56

新機能ガイドMagic eDeveloper V9 Plusv

vi

新機能ガイドMagic eDeveloper V9 Plus

新機能の概要1

新しい Magic eDeveloper の世界へようこそ！ Magic eDeveloper では、拡張されたブラウザ形式の実行パラダイムにより、統合されたエンタープライズレベ
ルのビジネスアプリケーションを効率よく開発するために、多くの機能が新しく追加されています。Magic eDeveloper は、業界をリードするインターネッ
ト Web ブラウザ、Web サーバ、アプリケーションサーバ、言語およびデータ
ベースなどをオープンに、かつ多岐にわたってサポートします。
本書では、Magic eDeveloper に新しく追加された機能について解説します。また、Magic eDeveloper Plus で追加された機能については、左端に「Plus」の表示で示します。

ブラウザ形式アプリケーション
クライアントのユーザインタフェースとして Web ブラウザを使用することを前提とした、「ブラウザ形式アプリケーション」を効率よく作成することができるようになります。ブラウザ形式の実行パラダイムでは、イベントの検出とそれに対応する処理などのように、関連するデータを含む HTML コント
ロールを制御するための実行ロジックをクライアント側で提供します。クライアントとサーバとの間の通信処理は、必要最小限に押さえられています。
ブラウザ形式の実行パラダイムにおけるサーバ側には、以下の要素が含まれています。
•

Web プロセスを実行するための新しいプログラムタイプ•

メインプログラムやイベントドリブン等の新しい概念•

複数プログラムの並行動作•

タスク実行中のクライアント情報（コンテキスト）の保持

Magic コンポーネント
アプリケーション内のオブジェクトをコンポーネントとして定義できます。
コンポーネントをエクスポートすることで、Magic アプリケーション間でリソースを共有する事ができるようになります。
コンポーネントビルダを利用することで、アプリケーション開発時のリポジ
トリに表示されているオブジェクトからコンポーネントインタフェースファ
イルを作成することができます。
今までのバージョンでは、アプリケーションオブジェクトを共有することはできませんでした。

イベント駆動エンジン
新機能ガイドMagic eDeveloper V9 Plus1

第 1 章 新機能の概要
いろいろな種類のイベントに対応できるようイベントハンドラを定義する仕組みを追加しました。これを利用することで、アプリケーションのタスクフ
ローから受ける制約がなくなります。

データ管理
データ管理機能により、物理データベースに格納されるデータを、より組織的に取り扱うことができます。具体的には次のようなデータ管理機能が新し
くサポートされました。
•

遅延トランザクション•

RDBMS の参照整合性制約

•

リンク条件

•

Magic SQL Where 句

エラー処理
アプリケーション実行時に、エラーハンドラによってデフォルトのエラー処
理を置き換えることができます。開発者は、実行時に発生するいろいろなエ
ラーに対して、個別に応答ハンドラを定義することができます。このために、
Magic が取得できるエラーの一覧と、使用するそれぞれの DBMS に特有なエラーなど、その他のエラー処理を行うことができる仕組みが提供されます。

マルチリクエスト処理
バックグラウンドのアプリケーションサーバエンジンは、マルチスレッドで動作し、同時に複数のリクエストを処理できるようになりました。各スレッドは異なるコンテキストにより処理を実行するため、相互に影響を及ぼし合うことはありません。
オンラインのアプリケーションサーバエンジンは、開発モード、実行モード
ともに、今までどおりシングルスレッドで動作します。

GUI の拡張ナビゲータや、拡張されたテーブルコントロール、メニュー項目イメージなどにより、動的で使いやすいインタフェースになりました。

生産性の向上Magic eDeveloper では、生産性向上のため、次のような機能を改良、追加して2

新機能ガイドMagic eDeveloper V9 Plus

第 1 章－新機能の概要
います。
•

クロスリファレンス

•メインプログラム•

データコントロール

•

モデル

•

Magic フラットファイル（MFF）

開発モードの機能強化
開発モードでは、新たに次のような機能が利用できるようになりました。
•

パラメータ項目•

タスクの戻り値•

If-Else ブロック

以下は、Magic eDeveloper Plus で追加された機能です。
•

Loop ブロック•ベクトルのサポート•

アプリケーションウイザード•

拡張構文チェッカー

•ユーザ定義開発メニュー•

公開プログラム／イベントの呼出外部アプリケーションとの接続性の向上
以下のような環境との接続性が向上しました。
•

LDAP サポート•

Web サービス サポート•

XML サポート•

メール、クリップボードおよび HTTP 関数

以下は、Magic eDeveloper Plus で追加された機能です。
•

Java 対応•

COM サポート•

SNMP サポート•

メッセージキューサポート

新機能ガイドMagic eDeveloper V9 Plus3

第 1 章 新機能の概要［このページは意図的に空白になっています。］

4

新機能ガイドMagic eDeveloper V9 Plus

ブラウザ形式アプリケーション

2

Magic eDeveloper は、ブラウザ形式のアプリケーションを作成するための、総合的なソリューションを提供します。
この章では、次のトピックについて解説します。
•

ブラウザクライアント•

サーバ側の動作•ブラウザ形式アプリケーションの開発機能•

ブラウザ形式アプリケーション機能を拡張する関数

ブラウザクライアント
ブラウザは非常に軽いクライアントであり、クライアント側での保守作業がほとんど必要ありません。
Magic eDeveloper が提供するブラウザクライアントでは、以下のことを実行します。
•

Web ページ上で発生したイベントを検出し、それに対応する処理を実行します。

•

再計算を行い、データやその表示インタフェースを更新します。

•

ローカルで実行することのできる Magic の関数を処理します。例えば、数
値型、文字列、日付、時刻のデータ操作関数を実行することができます。

•

データビューの表示を更新します。

•

オンラインの Magic クライアントと同様、各項目での入力データの書式チェックをサポートします。

•

ローカルキャッシュにデータを保持するため、データが表示領域より大きい場合でも、スクロールにより、ローカルな処理として新しいデータを表示します。これにより、サーバとクライアントの間のやり取りの回数を少なくできます。

これらの新しいクライアント拡張機能は、Magic の開発者にとって分かりやすいものであり、ブラウザクライアントのプログラミング作業をたいへん容易にしています。

サーバ側の動作
サーバ側は、ブラウザ形式のアプリケーションを構成するコンポーネントのなかで最も重要です。サーバでは以下のことを実行します。
•

リモートクライアントを識別します。サーバは、各クライアントがオープ

新機能ガイドMagic eDeveloper V9 Plus5

第 2 章 ブラウザ形式アプリケーション
ンした論理タスクのタスクコンテキストを個別に保持します。
•

タスクを実行しているクライアントの正確な位置やタスクのトランザク
ション内で操作されるデータについての内部記述として、コンテキストを確定します。

•

クライアントから送られてきたデータ処理要求を解読し、該当するデータベースに反映させます。

•

新たにリンクされたレコードが発生した場合、クライアント上のレコードを再リンクし、反映させます。

•

ブラウザクライアントの性質上、ローカルでは実行できない関数を実行します。

サーバがブラウザクライアントを作成するとき、ローカルで処理を実行する
タイミングや、また関数を使用したロジックを実行するためにサーバをいつ呼べばいいのかといった " 指示 " をクライアントに対して行ないます。

コンテキスト管理
コンテキストマネージャは、全てのリクエストを受け取り、それを振り分ける機能を持っており、有効なコンテキストの維持管理やユーザからのリクエ
スト処理の責任を持っています。
ブラウザ形式の実行パラダイムに対するコンテキスト管理メカニズムによって、ブラウザクライアントとの間でセッションが有効になり、やり取りが行われている間、プログラムが有効な状態に維持されます。コンテキストの中には、実行エンジン、タスクツリー、データベースのカーソル、メモリー
テーブル、入出力ファイルなどの状態情報が含まれています。
各コンテキストは、個別の ID 番号を持っています。この ID 番号により、各クライアントに対応するコンテキストが認識されます。
コンテキストは、プログラムが終了するか、［コンテキスト非稼動タイムアウ
ト］が経過するまで有効です。［コンテキスト非稼動タイムアウト］は、［設定 / 動作環境］ダイアログにて秒単位で指定します。

ブラウザ形式アプリケーションの開発機能
ブラウザ形式アプリケーションに関する開発機能について解説します。
タスクのタイプとして、［O= オンライン］と［B= バッチ］に加え、新たに［R= ブラウザ］が追加されました。このタスクタイプを指定することにより、実行時にオンラインのブラウザクライアントとなるプログラムを作成することができます。
ブラウザのインタフェースは HTML によって記述されますが、開発者の便宜のため、日頃から使用しているサードパーティ製の Web オーサリングツール
を Magic から容易に利用できる機能が提供されます。このとき、Magic は全ての Web ページ内エレメントとスムーズに連携します。
外部のオーサリングツールを利用して HTML を記述する場合、ユーザインタ
フェースは Magic の管理対象ではなくなりますが、Magic eDeveloper からは、Web ページ上の各コントロール特性に式を設定することにより、データ駆動
コントロールとして取り扱うことができるようになります。

6

新機能ガイドMagic eDeveloper V9 Plus

第 2 章－ブラウザ形式アプリケーション

クラスとスタイルのサポート
ブラウザクライアントで実行する場合、HTML ページの外観はスタイルシー
トによって定義できます。Magic のブラウザタスクでは、以下のスタイルとクラスをサポートしています。
•

デフォルトクラス•

マウスオーバークラス•

マウスダウンクラス•

デフォルトスタイル•

マウスオーバースタイル•

マウスダウンスタイル

ブラウザ形式アプリケーション機能を拡張する関数
CallJSWeb ページ内にある Java スクリプト関数を呼び出します。

CallOBJ
Web ページ内にある ActiveX のメソッドや Java アプレットオブジェクトを呼び出します。

CallURL
ブラウザタスクの定義式で URL を呼び出します。

CallProgURL
アプリケーションサーバ上の Magic プログラムを URL 形式で呼び出します。

コンテキスト間でのデータ共有
コンテキスト間で、共有名を媒介としてデータを共有する場合に使用する関数が追加されました。

SharedValGet
名前に従って共有された値を取得します。

SharedValSet
アクティブな全てコンテキストか、アプリケーションサーバで作成された新しいコンテキスト上で共有できる値を作成します。

新機能ガイドMagic eDeveloper V9 Plus7

第 2 章 ブラウザ形式アプリケーション

ブラウザクライアントのタスクキャッシュ
ブラウザクライアントのタスクキャッシュは、サーバとクライアントの間のデータ転送量を最小限にし、クライアント側の XML ページの論理的なセグメ
ントをキャッシュすることでブラウザクライアントアプリケーションのパ
フォーマンスを向上させます。
全てのブラウザクライアントタスクは、エンジンがタスクのロジックを記述
する XML ファイルを作成します。タスクの結果ページはタスクロジック
XML ファイルへのリンクを含んでいます。
アプリケーションが修正されない限り、各タスクの XML ファイルは同じ名前で残ります。このように最初に実行された時の各タスクのロジックが、エンドユーザのブラウザにキャッシュされます。ブラウザクライアントアプリ
ケーションが連続して実行する場合、各タスクの論理セグメントは、ブラウザのローカルキャッシュから取得されます。

8

新機能ガイドMagic eDeveloper V9 Plus

Magic コンポーネント

3

Magic eDeveloper では、アプリケーション内のオブジェクトをコンポーネントとして定義できます。コンポーネントとしてエクスポートすることで、アプ
リケーション間でのリソース共有が出来るようになります。
この章では、次のトピックについて解説します。
•

Magic コンポーネントの統合•

コンポーネントとは•コポーネントインタフェースの作成

Magic コンポーネントの統合
Magic eDeveloper では、作成したアプリケーションを複数のコンポーネントに分割することができます。そしてそれぞれのコンポーネントには、アプリ
ケーションで定義したオブジェクトを内包させることができます。

コンポーネントとはコンポーネントは、開発モードにおいて作業対象となっている開発中のMagic アプリケーションに対して、付加的に使用されるもう一つの Magic ア
プリケーションと考えることができます。
コンポーネントは、MCI（Magic Component Interface）ファイルのインタ
フェース定義内容を読み込むことで追加することができます。このファイル
は拡張子が mci のテキストファイルで、開発者に対して必要な情報、すなわ
ち付加されるアプリケーションにおいて参照し利用できるオブジェクトについて記述されています。
MCI によって公開されるオブジェクトは、モデル、テーブル、プログラム、
ヘルプ、権利、メインプログラムのイベント、環境設定のサブセット、論理
名、データベース定義です。
コンポーネントのインタフェースが読み込まれると、付加されたアプリケー
ション内の公開されているオブジェクトを、開発中のアプリケーション自体
内で定義しているものと同じように参照することができるようになります。

コンポーネントインタフェースの作成
MCI ファイルは単純なテキストファイルですが、Magic eDeveloper ではこのファイルの作成用ユーティリティとして、Magic インタフェースビルダ（MIB）を提供しています。このユーティリティを利用すれば、他のアプリ
ケーションに利用させるコンポーネントオブジェクトを簡単に定義することができます。
新機能ガイドMagic eDeveloper V9 Plus9

第 3 章 Magic コンポーネント

注意：Ver9.3 以前は、Magic コンポーネントビルダという名称でしたが、機能毎に複数のユーティリティに分けて提供することになったため、名称を「Magic インタフェースビルダ」と変更しました。

10

新機能ガイドMagic eDeveloper V9 Plus

イベント駆動エンジン

4

Magic eDeveloper では、タスク実行時に発生する暗黙的または明示的なイベン
トについて、その対応処理を開発者が定義することができます。
この章では、次のトピックについて解説します。
•

イベント用語•イベントタイプ•オンラインタスクのイベント処理•

バッチタスクのイベント処理•

開発時のイベント駆動•

実行時のイベント駆動

イベント用語
イベント駆動エンジンで用いられる用語は次のとおりです。
•

イベント……意味のある事象の発生に対する論理的な定義です。イベントの発生により、それに対応するイベントハンドラが起動され、一連の処理が実行されます。

•

トリガ……イベントを発生させる実際のアクションを定義したものです。
イベントは他のユーザ定義イベントのトリガとして割り当てることができます。つまりトリガとなるイベントが発生すると、同時にユーザ定義イベントも発生することになります。

•

イベントハンドラ……イベントが発生したときに実行される、一連の処理を定義したものです。

イベントタイプ
Magic のイベントは、「事前定義イベント」と「ユーザ定義イベント」という 2
つのグループに分類されます。
事前定義イベントは、次のカテゴリに分類されます。
•

内部 Magic イベント……これには、次のものがあります。
•

Magic 実行処理が定義するイベント•

Magic エンジンにハードコードされたハンドラを含むイベント。例：前処理、メイン、後処理など。

新機能ガイドMagic eDeveloper V9 Plus11

第 4 章 イベント駆動エンジン••

マウスボタンをトリガにしたイベント。マウスボタンのトリガには、
onclick,ondblclick,onmouseover,onmouseout があります。

システムイベント……ユーザがさまざまなキーを組み合わせてキーボードから入力することにより発生します。

ユーザ定義イベントは、次のカテゴリに分類されます。
•

タイマイベント……事前に定義された間隔で発生するイベント。

•

式評価イベント……式が真と評価された場合に発生するイベント。

イベント処理イベントは通常、実行中のアプリケーションによって処理されます。イベン
トは、Magic エンジンによって定義されたデフォルトハンドラを持っているものもあります。しかし、指定したイベントに対して開発者が独自のハンド
ラを割り当てることもできます。
通常の組み込みハンドラ（タスク前、タスク後、レコード前、レコードメイ
ン、レコード後など）に加えて、開発者がイベントに対して独自のハンドラを追加することができます。

コントロールレベルのハンドラ
コントロールレベルには、コントロール前、コントロール後、コントロール
検証、コントロール変更といった 4 つの事前に定義されたハンドラがあります。
これらのハンドラは、コントロールに入る前、出た後、コントロールの値を変更した時、コントロールの検証中の処理を制御することができます。

ユーザ定義イベント
開発者はタスク内に独自のイベントを定義することができます。［イベント］
テーブルには、現在タスクの親（上位）タスクで定義されたすべてのユーザ
定義イベントが表示され、現在タスク内で定義するユーザイベントについて
のみ、変更を行うことができます。
ユーザ定義イベントは、それを定義したタスクとその子（下位）タスクから参照することができます。メインプログラムで定義されたイベントは、アプ
リケーションのすべてのプログラムから参照されるため、グローバルイベン
トになります。
ユーザ定義イベントは、そのトリガとともに定義することができます。トリガは補助的なイベントであり、それが発生したときに、ユーザ定義イベント
を暗黙的に起動し発生させるものです。

ハンドラテーブル
ハンドラテーブルにはイベントに対応したハンドラを定義することができます。ハンドラテーブルは、タスクの一部でハンドラの処理や変数を定義する
ことができます。

12

新機能ガイドMagic eDeveloper V9 Plus

第 4 章－イベント駆動エンジン

イベント実行コマンド［イベント実行］という新しいコマンドを使用して、Magic エンジンの動作フ
ローの中でイベントを発生させることができます。このコマンドは、システ
ムイベントと同じように処理されます。

伝播
あるイベントをより高いレベルで定義されたイベントハンドラに渡してゆく
ことができます。あるイベントハンドラが実行された後、［伝播］が「Yes」に指定されているときは、ディスパッチャは次のレベルのイベントハンドラを探して処理しようとします。［伝播］が「No」のときは、イベントはそのイ
ベントハンドラの処理後ブロックされ、次のハンドラには伝播されません。

ハンドラ検索機能の仕組み
新しいタスクが読み込まれると、実行エンジンはイベントハンドラを探します。各ハンドラは、トリガとなるイベントやタスクツリー上の位置に従って検索順序がメモリ上に構築されます。タスクが終了すると、そのタスクで定義されているハンドラはメモリ上から削除されます。
イベントが発生すると、検索順序に従ってイベントハンドラを探します。ハ
ンドラの検索は、最後に登録されたものから最初に登録されたものに向かう
順番に行われます。
あるタスクレベルでは処理できないイベントと判断されると、実行エンジン
はタスクツリーでのより上位タスクのイベントハンドラを検索対象としてゆきます。

コンポーネントイベント
イベントをコンポーネント化することで、呼び出し元アプリケーションが処理できるイベントを提供することができます。
また、コンポーネントアプリケーションのメインプログラムにイベントハン
ドラを定義することで、呼び出し元アプリケーションで発生したイベントに対するハンドラを実行することができます。

新機能ガイドMagic eDeveloper V9 Plus13

第 4 章 イベント駆動エンジン［このページは意図的に空白になっています。］

14

新機能ガイドMagic eDeveloper V9 Plus

データ管理の改善

5

Magic eDeveloper では、データの完全性、整合性を維持するための機能を強化する一方、プログラミング作業をよりシンプルにする開発環境を提供します。

この章では、次のトピックについて解説します。
•

遅延トランザクション•

DM ステートメントの発行順序•

リソースロック•

SQL での範囲指定

遅延トランザクション
今までのバージョンでは、レコード後処理の後に DM ステートメント（insert/
update/ delete など）をデータベースシステムに対して発行していました。物
理トランザクションと呼ばれるこの処理方法では、これらの DM ステートメ
ントが発行される毎に、物理データベースの内容を更新します。アプリケー
ション実行時に、データビューのレコード内容の変更を反映するためにこの処理を行っていますが、（レコード毎に行うため）時間のかかるものでした。
遅延トランザクションは、データビューにあるレコードの変更をコミットするまで、DM ステートメントの発行を遅らせます。Magic は、発行する DM
ステートメントの内容をキャッシュに貯めておきます。データベースへの変
更をコミットすることにより、全ての変更処理が整合性を保ちながら実行されます。

トランザクションモード
［トランザクションモード］の設定欄が、［タスク特性］ダイアログに追加されました。トランザクションモードとして、次の４つのうちから選択します。
•

遅延……DM ステートメントがキャッシュに保存されます。タスクの処理
中は、DM ステートメントは発行されません。ステートメントはコミット時にのみ発行されます。キャッシュに保存されていた全ての DM ステート
メントは一度に発行され、その後トランザクションがクローズされます。

•

ネスト遅延……他の遅延トランザクションタスクからコールされたタスクの場合に、親タスクの遅延トランザクション内にネストされた新しい遅延
トランザクションをオープンします。それ以外は、" 遅延 " と同じです。

•

物理……レコード後処理の後で DM ステートメントを発行します。（この方式は、今までのバージョンと同じです。）•

親と同じ……親と同じトランザクションモードでタスクが実行されます。
親が物理トランザクションの場合、物理トランザクション。親が遅延トラ
ンザクションの場合、遅延トランザクションとして処理されます。

新機能ガイドMagic eDeveloper V9 Plus15

第 5 章 データ管理の改善※ブレイクレベルのトランザクションパラメータは、タスク特性のグループレベルで設定するようになりました。

トランザクション処理
トランザクションが " 遅延 " に設定された場合、３つの異なるタスクレベル
で次のような処理が行われます。
•

レコード……レコードレベルでの全ての更新内容が、1 つにまとめられます。レコードの更新時にトランザクションがオープンされ、変更内容が適用されて、トランザクションがコミットされます。

•

タスク……タスクレベルでの全ての更新内容が、１つにまとめられます。
タスク後処理の後にトランザクションがオープンされ、変更内容が適用されて、トランザクションがコミットされます。

•

グループ……更新内容はタスクレベルでまとめられ、特定の基準とする項目の値が変わるときにトランザクションがオープンされてコミットされます。グループレベルのトランザクションを使用するときは、グループ項目を定義しなければなりません。これはバッチタスクでのみ設定できます。

ロック方式
遅延トランザクションでは、次のロック方式を指定できます。
•

N= なし

•

O= 入力時SQL Where 句
SQL Where 句を遅延トランザクションモードのタスクで動作させるため、定義方法が変更されています。

埋め込み SQL
埋め込み SQL のタスクは、物理トランザクションモードのみサポートされています。

トランザクションキャッシュの動作•

トランザクションのキャッシュには、遅延トランザクション中に変更された全てのデータを保存しています。

•

各遅延トランザクションは、個別にトランザクションキャッシュを持っています。

•

遅延トランザクション内にある全てのタスクは、アクセスする全てのファ
イルの全てのデータをキャッシュするようにします。

•

各テーブルは、自身のテーブルキャッシュを持っています。Magic のテー
ブルリポジトリへの登録は、通常一つのテーブルに対応します。二つの異なる登録が同じテーブルに対応する場合でもキャッシュは別々に管理され、共有しません。

遅延モードで発生するエラー処理

16

新機能ガイドMagic eDeveloper V9 Plus

第 5 章－データ管理の改善
遅延トランザクションモードで動作中のときは、DM ステートメントが対象となる物理データベースシステムで実際に実行されるときにのみエラーの検出が行われます。そのエラーやテーブルに対して定義されたエラーハンドラ
は、そのエラーの発生により起動されます。エラーハンドラが起動されると、ハンドラ用に定義されたファイルやテーブルだけが表示されます。
エラーハンドラが動作すると、次のものについて調べることができます。
•

エラー発生時にキャッシュされていたレコードの値•

エラーコード•

エラーメッセージ

更新と削除
発行される update や delete の各コマンドに対する Where 句の作成方法を
Magic に指定することができます。
•

位置のみ……位置項目のみ含む•

位置と更新項目……位置項目と更新される項目の元の値を含む•

位置と選択項目……位置項目と選択された項目の元の値を含む［更新レコードの識別］という新しい設定項目が［テーブル特性］に追加されました。この設定として、上記の値のいずれかを選択することができます。
この設定は、遅延トランザクションタスクでのみ有効です。この設定は、タスクの DB テーブルにも追加されました。

数値項目の更新
今までのバージョンでは、数値を直接指定して更新していました。例えば、
FLD1 という項目を X という値に更新する場合、（FLD1=X）の形式でコマンドを発行します。
Magic eDeveloper では、差分更新もできるようにしました。例えば、上の例では、更新前の FLD1 と X の差分 x を Magic 内部で求めた上で、（FLD1=FLD1+x）の形式でコマンドを発行します。
この［更新形式］という特性が、［カラム特性］に追加されました。選択できる方法は次の二つです。
•

A= 値更新……旧バージョンと同じ方法で値を更新します：（FLD1=X）•

D= 差分更新……差分の値で更新します：（FLD1=FLD1+x）

この特性は、SQL テーブルで通常の記憶形式を持った数値項目に対してのみ有効です。ISAM ファイルではサポートされません。
この更新方法の設定は、実項目に対するセレクトコマンドにも追加されます。
「A= 値更新」や「D= 差分更新」という値に加えて、「T= テーブル特性に依存」という値が指定できます。この場合は、［カラム特性］の設定内容と同じになります。

DM ステートメントの発行順序
遅延トランザクション中の DM ステートメント発行順序を指定することができます。今までのバージョンでは、DM ステートメントの発行順はレコード
新機能ガイドMagic eDeveloper V9 Plus17

第 5 章 データ管理の改善
後処理の実行順序に依存していました。例えば、親タスクでの更新が子タス
クの起動前に行われていても、起動された子タスクでの更新に対する DM ス
テートメントの方が、親タスクでの更新に対する DM ステートメントよりも先に発行されました。
Magic eDeveloper では、コールコマンドの［コール］特性ダイアログに［同期］という設定が追加されました。
この設定には、次の値を設定します。
•

No……旧バージョンと同じ（コール先の実行コマンドを先に発行）•

Yes……コール元の DM コマンドを先に発行•

式……Yes または No となる論理式の結果にしたがって発行順序が決定

リソースロック
リソースロックとは、ある瞬間にはただ一人のユーザのみによって占有される仮想的な要素（リソース）を作成して、ロックを実現することです。それ
ぞれのリソース名はユニークにしなければなりません。
リソースロックを制御する二つの関数があります。

Lock
LOCK 関数は、通常項目更新の式で設定し、引数として（別のユーザによりロックされた）リソースを待つ時間の長さを設定できます。ロックが成功したときは戻り値として「0」を返します。リソースがすでに自身のタスクでロックされているときは「1」、別のユーザがロックした状態でタイムアウト
を越えた場合は「2」を返してロックは失敗します。

UnlockUNLOCK 関数は、リソースのロックを解放するために式で設定します。アン
ロックが成功したときは戻り値として「0」を返します。リソースがすでにアンロックされているか、他のユーザによってロックされているとき、アンロックは失敗します。

リソースロックファイル［動作環境］ダイアログの［マルチユーザ］タブに、［リソースロックファイ
ル］が追加されました。
Magic.ini では、"ResourceLockFilePath" という名前のリソースファイルのパス
名が新しく追加されました。

SQL での範囲指定
今までの SQL Where 句による範囲指定は、遅延トランザクション内のタスクでは許可されていません。遅延トランザクション内で SQL Where 句による範囲指定と同等のことを実現させるには、開発時に範囲定義の方法を変更しておく必要があります。

18

新機能ガイドMagic eDeveloper V9 Plus

第 5 章－データ管理の改善
今までの範囲指定の方法には次のものがあります。
•

セレクトコマンドの範囲欄…… セレクトコマンドで範囲を定義します。この範囲指定は、タスクがオープンされるとき実行されます。また、ビュー
再表示アクションの実行によってのみ更新されます。

•

SQL Where 句…… SQL タスクのみ有効です。SQL Where 句の範囲は、タ
スク実行時に Magic が作成する SQL コマンドに追加される SQL Where 句に含まれます。

• （タスク）範囲式…… タスク制御の設定で、ここには式を指定します。こ
の式は、レコードを読み込む毎に評価されます。タスク範囲を超えたレ
コードは "False" となり、読み込まれません。
後の２つの範囲指定は、タスク環境メニューの中の新しい［範囲／位置付］
ダイアログのタブセクションとして整理されました。
Magic eDeveloper では "Magic SQL Where 句 " と呼ぶ４番目の範囲指定方法が追加されました。これは、Ver8 での SQL Where 句とほぼ同等の機能ですが、フリーフォーマットのテキストを使用する既存の SQL Where 句 とは異なり、式で設定します。つまり Magic SQL Where 句には、Magic エンジンが SQL
Where 句として変換できる式を記述します。
Magic SQL Where 句は、次のように実行されます。
•

実行時、Magic SQL Where 句は、AND を使用して他の範囲条件に追加されます。

•

遅延トランザクション内では、SQL Where 句は無効です。Magic は、残りの 3 つの範囲指定方法を使用します。

•

整理すると、既存の範囲処理方法は次のようになります。

•

注意：

•

SQL Where 句……［SQL Where 句］の［DB SQL］•

タスクの範囲指定……［範囲／位置付］の［範囲式］•

新しい "Magic SQL Where 句 "……［SQL Where 句］の［Magic SQL］

新しい［範囲／位置付］ダイアログには、実行時に生成される Where 句がまとめて表示されます。セレクトコマンドの［範囲］欄、Magic SQL
Where 句、［範囲／位置付］の［範囲式］、そして物理トランザクションタ
スクの場合には、DB SQL Where 句の内容も表示されます。

DB SQL Where 句 と Magic SQL Where 句 は、タスク前処理の前に一度だけ処理されます。

新機能ガイドMagic eDeveloper V9 Plus19

第 5 章 データ管理の改善［このページは意図的に空白になっています。］

20

新機能ガイドMagic eDeveloper V9 Plus

エラー処理6

Magic eDeveloper のエラー処理機能の特徴は、アプリケーション実行時に発生するいろいろなエラーに対応するデフォルトの動作を、開発者独自のものに変更できるということです。
この章では、次のトピックについて解説します。
•

エラー処理の仕組み•

エラー発生時の処理方式•

エラーハンドラの作成•

実行時のエラー処理•

レコードの位置に基づくタスクの範囲／位置付

エラー処理の仕組み
エラー処理の仕組みによって、アプリケーション実行中に発生したエラーに対応するデフォルトの動作を変更することができます。
エラーが発生したときには、２つのレベルで動作を制御できます。最初のレベルは、今までのバージョンでのエラー発生時の処理内容とほぼ同様ですが、より動作の安定性を高めたものになっています。このレベルでのエラー対応
動作の方式は２つあり、タスク特性ダイアログにてどちらかを指定します。
これの詳細については以下に記述します。
２つ目はより細やかな対応のできるエラー処理レベルで、エラーに対応する処理内容を Magic のプログラムとして記述し、エラーハンドラとして使用するものです。Magic エンジンは検出できる既知のエラーや予想されるエラーの一覧を表示し、使用する DBMS 特有のエラーコードに対応する処理を可能にします。このレベルでは、エラーハンドラ処理の後に実行する、Magic エ
ンジン側の対応動作を指定することができます。
この章では、データベースに関連したエラー処理について説明します。

新機能ガイドMagic eDeveloper V9 Plus21

第 6 章 エラー処理

エラー発生時の処理方式
エラー発生時の処理方式としてアボートと復旧の２つがあり、タスクレベルの設定としてタスク特性にて指定します。この処理方式の設定を注意深く行うことにより、多くの場合にはデフォルトのエラー処理を変更したり、特別なハンドラを書く必要はありません。もちろんデフォルトの方法ではエラーに対応しきれない場合には、エラーハンドラを書くことで、デフォルトの設定を変更できます。

アボート
エラーが発生した場合、Magic は現在のトランザクションをロールバックします。物理トランザクションおよび遅延トランザクションのいずれの場合にも、読み込んだデータをクリアし、エラーが発生したタスクをアボートします。ただしこの方式は、全てのエラーに対して適用されるものではなく、
ロックエラーや不正ログインのような、エンドユーザの操作により回復でき
るエラーは例外となります。

復旧
可能な限りタスクを続行し、読み込んだデータを保持してエンドユーザがそのエラーを復旧できるようにします。つまりこの場合は、エラーが発生した
後でも、エンドユーザがそのアプリケーションの作業を継続できることを意味します。また、ある種のエラー、たとえばロックエラーや最大接続数を越えた場合のエラーなどに対しては、エンドユーザの介入なしに、Magic は自動的に処理を繰り返します。

エラーハンドラの作成
エラーハンドラは［タスク定義］とその［処理テーブル］にて作成します。
これはイベントハンドラの場合と同様です。

エラーハンドラの記述
エラーハンドラとして、次の記述項目があります。
•

レベル

•

イベントタイプ／イベント

•

スコープ

•

有効

•

エンジン対応動作指定

レベル［レベル］カラムで「H= ハンドラ」を選択します。

イベントタイプ／イベント

22

新機能ガイドMagic eDeveloper V9 Plus

第 6 章－エラー処理［イベント］カラムでズームし、イベントタイプとして「R= エラー」を設定
するとともに、実際のエラーとなるイベントを［エラー一覧］から選択します。

スコープ［スコープ］カラムでは、以下のオプションから選択します。このハンドラが特定のタスクのみで実行するものか、タスクのサブツリー全体で実行するかを指定します。
•

サブツリー……デフォルト：タスクのサブツリー全体で実行します。

•

タスク……そのタスクで検出されたもののみ実行され、サブツリーで発生したエラーは無視します。

•

グローバル…… コンポーネントのメインプログラムでのみ有効です。

有効
ハンドラが有効かどうかを指定します。この特性は定義式で指定できます。
「False」と評価された場合は、ハンドラはエラーを受け取りません。

対応動作［詳細］カラムの［対応：］欄で、後処理を指定します。Magic エンジンに用意されている処理のなかから、エラーハンドラ実行後に行う動作を指定します。
また、［メッセージ：］欄で「Yes/No」を設定することにより、Magic がデフォルトのメッセージを表示するか否かを指定します。

実行時のエラー処理
エラー状態になったとき、エラー処理機能は同じタスク内で定義されたエラーハンドラを、エラー名を元に探します。エラーハンドラが見つかったら、そのハンドラによって定義された処理を実行します。そして、ハンドラのエ
ンジン側対応動作で指定された内容にしたがう処理を引き続いて実行します。
エラーハンドラに対する検索は、イベントハンドラと同じように行われます。
ハンドラがタスクに存在しない場合は、より上位のタスクに対して該当する
ハンドラの検索を行います。
検索の結果、対応する特定ハンドラがどこにも見つからなかった場合、「なんでも」に対するエラーハンドラが定義されていれば、それが実行されます。

レコードポジションに基づくタスクの範囲／位置付
エラー処理の重要な仕様として、エラーが発生したポジション情報に基づいて、そのエラーレコードやレコードの範囲を表示できます。そのためには次のような操作を行ないます。
1. CurrPosition 関数によって現在のポジションを取得
2. ErrPosition 関数によってエラー発生ポジションを取得
3. 得られたポジション情報にしたがってタスクを位置付ける

新機能ガイドMagic eDeveloper V9 Plus23

第 6 章 エラー処理［このページは意図的に空白にしています。］

24

新機能ガイドMagic eDeveloper V9 Plus

マルチスレッドエンジン

7

マルチスレッド化により、バックグラウンドモードで動作するエンジン１つ
で、複数のリクエストを同時に処理できるようになります。マルチスレッド
アーキテクチャによってリソースの節約を図るとともに、高いパフォーマンスを提供します。
この章では、次のトピックについて解説します。
•

動作環境の設定•実行時の関数動作環境の設定
最大並行リクエスト数「最大並行リクエスト数」の設定は、［動作環境］ダイアログの［アプリケー
ションサーバ］タブにあり、アプリケーションサーバが作成するスレッドの上限の数を指定できます。実際に並行動作するスレッド数は、ここに設定した値とサーバの能力により物理的に決まる数や許諾されているライセンスによって制限される数のうち最も小さい値となります。
MAGIC.INI 及び、コマンドラインでのパラメータは MaxConcurrentRequests です。

現在のアプリケーション
１つのプロセスで動作する全てのスレッドは、常に同じアプリケーションが動作します。そのアプリケーションをクローズするためには、全てのスレッ
ドをクローズしなければなりません。

INIPut 関数
MAGIC.INI ファイルは、別々のメモリ領域内にあるそれぞれの実行コンテキ
ストに格納されます。強制書込みを指定した時だけ、INIPut 関数にてその実行時コンテキスト中の MAGIC.INI で更新します。
INIPut （<INI 項目 >,< 強制書込 >） （強制書込デフ ォ ル ト は No）

セキュリティ
実行時に関数を使用して、各スレッドに権利を設定したり解除したりすることができます。

TCP/IP ポート
新機能ガイドMagic eDeveloper V9 Plus25

第 7 章 マルチスレッドエンジン
アプリケーションサーバ各プロセスは１つの TCP/IP ポートを使用します。

ブローカと汎用メッセージレイヤ
Magic eDeveloper と前バージョンとで、相互運用することはできません。

メインプログラム
各コンテキストは、メインプログラムを個別にコピーします。

トランザクション
各スレッドは独立しており、別々のプロセスとして動作します。

ロック各スレッドは別々のプロセスとして動作し、アプリケーションサーバプロセ
スはそれぞれ１つの端末番号を使用します。

メモリテーブル
各コンテキストは、メモリテーブルを個別にオープンします。

リソースの共有
次のリソースは各実行スレッドで共有されます。
•

DBMS 接続•

外部デバイス

次の関数を使用することで、グローバル変数をコンテキスト間で共有することができます。
•

SharedValueSet•

SharedValueGet

次の関数を使用することで、あるコンテキストが定義したグローバル変数を
他のコンテキストに渡すことができます。
•

ParamsPack•

ParamsUnpack

実行時の関数
次に示すような関数があります。

26•

RqExe……実行エンジンのリストに登録された内容をもとにアプリケー
ションの実行をブローカに要求します。

•

RqRtTrm……アプリケーションサーバを終了させます。

•

RqRtInf……実行中のスレッドの数や、ライセンスで許可されたスレッドの最大数、通常使用されているスレッド数、実行可能なスレッド数を返し
新機能ガイドMagic eDeveloper V9 Plus

第 7 章－マルチスレッドエンジン
ます。
•

DiscSrvr……使用しないスレッドを切断します。

•

DbReload……実行時に常駐テーブルを読み込み、読み込みに失敗したか成功したかを戻り値として返します。

新機能ガイドMagic eDeveloper V9 Plus27

第 7 章 マルチスレッドエンジン［このページは意図的に空白になっています。］

28

新機能ガイドMagic eDeveloper V9 Plus

GUI の拡張

8

Magic eDeveloper の外観が新しくなりました。ワークスペースをマルチに切り替えるナビゲータペインやリポジトリテーブルのフォルダ、テーブルのマル
チマーキングなどにより、ダイナミックな使いやすいユーザインタフェースになりました。
この章では、次のトピックについて解説します。
•

テーブルコントロール•

ツリーコントロール•

ドラッグ & ドロップのサポート

テーブルコントロール
Magic eDeveloper は、テーブルコントロールの仕様が強化され、開発時や実行時において、マルチマーキング、フォームサイズ変更にともなう再配置、カラムの取扱い（自動ソートやサイズの変更）などが新たにできるようになりました。

テーブル内でのマルチマーキング
マルチマーキングは、Windows アプリケーションでの複数同時選択と同様の機能です。

マルチマーキングの設定
テーブルコントロールでマルチマーキングを有効にするには、［テーブルコン
トロール特性］の［マルチマーキング］の設定を「Yes」にします。マルチ
マーキングは、オンラインタスクでのみ設定が有効になります。
マークされた行は、異なる色で表示されます。
マークされたレコードに対し、次のことを実行できます。
•

構文チェック……開発モード•

コピー……開発モード•

削除……開発モードと実行モード•

イベント……実行モード（マルチマーキング用ハンドラを作成して独自のロジックを定義）

マーキングカラム
カラムをマーキング出来るようにするには、［カラム特性］の［マーキングカ
ラム］を 「Yes」にします。マーキングカラムが有効の場合、カラムのレコー
ド部分が浮き上がって表示されます。カラムをクリックすると、レコードがマークされます。マークされたレコードをクリックすると、マークが取り消新機能ガイドMagic eDeveloper V9 Plus29

第 8 章 GUI の拡張されます。

マルチマーキングイベントハンドラ
数のレコードがマークされている状態のときにイベントが発生すると、それぞれのレコードに対してバッチ処理的にハンドラが実行されます。
また、各レコードにおいてレコード前処理が実行され、レコード内容が変更されたり、強制レコード後処理の指定がある場合には、レコード後処理が実行されます。
マークされたレコードに対して、ハンドラでの処理フローが同じように実行されるので、いくつか関数が新しく追加され、複数のレコードがマークされていることや、どのレコードが最初にマークされ、どのレコードが最後にマークされたかが分かるようになっています。
レコードの処理は、データビューでの位置に従って行われ、マークされた順
番で行われるわけではありません。

マルチマーキング関数
マルチマーキング関数として次のものがあります。
•

MMCount……マークされたレコード行数を返します。「0」よりも大きな値を返したときは、レコードがマークされていることを意味します。

•

MMClear……レコードのマークを解除します。

•

MMCurr……マークされたレコード行全体のうちで現在行が何番目であるのかを示します。
• MMCurr 関数が「１」を返したときは、マークされた最初のレコードが処理されていることを意味します。
• MMCurr 関数が、MMCount 関数の戻り値と同じ値を返したときは、マークされた最後のレコードが処理されていることを意味します。

•

MMStop……マルチマーキングハンドラを停止させます。

テーブルコントロールのサイズ変更
テーブルコントロールを含むフォームの大きさを変更すると、テーブルコン
トロールもそれに従って大きさが調整されます。
水平方向の場合、テーブルコントロールには［位置とサイズ／位置］パラ
メータがあり、テーブルに対する変更パーセントで指定します。［位置とサイ
ズ／位置］パラメータが 80% と指定された場合、フォームのサイズが 100 ピ
クセル増えた場合、テーブルコントロールのサイズは 80 ピクセル増えることになります。
垂直方向の場合、テーブルコントロールは、どのくらいフォームのサイズが変更されたかにより行数が増えたり減ったりします。データがなくなる場合
は、空の行を表示します。パークできるテーブルコントロールの行は常に表示されます。

開発モードでのカラムサイズ変更
各カラムはテーブルのサイズ変更にともなってサイズが変わります。カラム30

新機能ガイドMagic eDeveloper V9 Plus

第 8 章－ GUI の拡張には、［位置とサイズ／位置］パラメータがあります。この設定が 「Yes」の場合、カラムは、カラムの総数に比例したサイズ変更をします。例えば、4つのカラムがあり、その［位置とサイズ／位置］パラメータに「Yes」が設定された場合、テーブル変更量の 25% ずつがサイズに反映されます。
［位置とサイズ／位置］パラメータに 「No」が設定された場合、カラムのサイズは変更されません。例えば、80 ピクセル幅のテーブルコントロールを想定します。位置とサイズの特性を 100% に設定した場合、4 つのカラムは 20 ピ
クセルの幅になります。このとき 2 つのカラムの［位置とサイズ／位置］パラメータが 「No」で、残りの 2 つのカラムの［位置とサイズ／位置］パラ
メータが「Yes」とします。フォームのグリッドが 8 ピクセル増加した場合、2つのカラムは 20 ピクセル幅で残りの 2 つのカラムは 24 ピクセル幅になります。
すべてのカラムの［位置とサイズ／位置］パラメータに「No」の設定をすると、テーブルコントロールの［位置とサイズ／項目位置］にしかるべき設定がしてあっても、水平方向のテーブルサイズは変更されません。

実行モードでのカラムのサイズ変更
開発者は、カラムのサイズ変更特性を「Yes」にすることで、実行時にテーブ
ルのカラムのサイズを変更するようにできます。右の区切り線によってカラムのサイズを増やしたり残りのカラムを右に押し出したり出来ます。残りのカラムのサイズは変わりません。このため、カラムのサイズを大きくするとテーブルのサイズも大きくなります。しかし、フォーム上に表示されるテー
ブルのサイズが変わらず、表示されるカラムが減らされます。テーブルのサイズが変更され、テーブルのカラムが全部表示されなくなった場合、水平スク
ロールバーがテーブルに表示されます。

ツリーコントロール
Magic eDeveloper Plus には、ツリーコントロールという新しいコントロールが提供されています。これは、タスクのデータビューが親子関係のレベルとして階層構造を持っている場合、これをツリー表示するものです。
表示することができるレベルは以下のようなものです。
•

ルート値……これは、データツリーの開始位置です。この値は、ツリーの先頭ノードとして表示されます。

•

親ノード……タスクのデータビューで親レコード表す項目です。

•

ノード……タスクのデータビューで仔レコード表す項目です。

ツリーコントロールは、タスクのメインテーブルか結合テーブルとして定義された 1 つのデータテーブルのカラムを使用した場合のみ有効です。

ドラッグ & ドロップのサポート
ドラッグ & ドロップ機能は、Magic アプリケーションと、同じ PC 上で動作している Magic アプリケーションや、他のアプリケーションの間でサポートされます。主な目的は、Windows アプリケーションでは標準的なドラッグ &ドロップの操作でアプリケーション間のデータのやりとりを行うことです。
「ドラッグ許可」コントロール特性は、ドラッグ処理の有効化を指定し、「ド新機能ガイドMagic eDeveloper V9 Plus

31

第 8 章 GUI の拡張
ロップ許可」コントロール特性は、ドロップ処理の有効化を指定します。
ドラッグ処理でデータ制御が出来るようにイベントや関数が追加されました。

32

新機能ガイドMagic eDeveloper V9 Plus

生産性の向上9

Magic eDeveloper では、生産性向上のための機能強化が行われました。

この章では、次のトピックについて解説します。
•

クロスリファレンス

•メインプログラム•

データコントロール

•

モデル

•

Magic フラットファイルでのアプリケーション実行•

タスク戻り値

クロスリファレンス
クロスリファレンスがサポートされるオブジェクト
次のオブジェクトに対してクロスリファレンスをサポートします。
•

モデル

•

テーブル

•

カラム

•

インデックス

•

プログラム

•

ヘルプ

•

権利

•

メニュ－

•

タスクのリソース（入出力とフォーム）

•

式

•

変数

クロスリファレンスの表示
クロスリファレンスユーティリティを実行するには、調べたい登録オブジェ
クトにカーソルを移動して、Ctrl + X を押してください。続いて表示されるダイアログで、検索対象となるリポジトリを選択することができます。
クロスリファレンスの検索結果は、ナビゲータペインに表示されます。

新機能ガイドMagic eDeveloper V9 Plus33

第 9 章 生産性の向上

メインプログラムメインプログラムは、実行モードではアプリケーションが起動される時、また開発モードでは実行モードに切り替わる時に実行されます。メインプログ
ラムには、アプリケーション全体の共通のリソースを定義できます。メイン
プログラムはデフォルトで登録されており、削除できません。

メインプログラムの実行モード動作•

メインプログラムは、実行モードでアプリケーションをオープンした時や、開発モードから実行モードに切り替わった時にバックグラウンドで自動的に動作します。また、メインプログラムは、プログラムリポジトリからプログラムを実行したりテーブルリポジトリから APG でプログラムを実行した場合にも動作します。

•

メインプログラムには、メインテーブルがありません。バッチプログラムとして動作し、１サイクル（タスク前処理、レコードメイン、タスク後処理）で終了します。

•

メインプログラムに変数やフォーム、DB テーブル、イベント、ハンドラが定義されると、アプリケーション内のどこからでも参照することができます。

メインプログラムの開発モード動作•

メインプログラムは常にプログラムリポジトリ一覧の先頭にあります。

•

メインプログラムはアプリケーションを新規に作ると自動的に登録されます。

•

メインプログラムを開発者が登録することはできません。

•

メインプログラムは削除できません。

•

メインプログラムのタスクタイプはバッチに設定されていて変更できません。

メインプログラムとコンポーネント
メインプログラムは、コンポーネントとしては出力できません。
ホストアプリケーションのメインプログラムは、アプリケーションからのコ
ンポーネントアクセスの前に、すでに読み込まれています。
コンポーネントが他のアプリケーションに読み込まれた場合、コンポーネン
トのメインプログラムは、アプリケーションのメインプログラムと他の全てのプログラムの間で実行されます。

メインプログラムでの関数
RunMode今までのバージョンでは、開始／終了プログラムについては開発版／実行版の違いに基づいてプログラムが自動的に実行するかどうかを定義することができました。RunMode 関数を使用してエンジンの値を取得することで同じ機

34

新機能ガイドMagic eDeveloper V9 Plus

第 9 章－生産性の向上
能を実現させることができます。
•

マルチスレッドで最初にメインプログラムが実行された場合、「-1」が返ります。

•

プログラムが実行エンジンで動作している場合は、「0」が返ります。

•

プログラムが開発エンジンで動作していて、実行モードでアプリケーショ
ンをオープンしている場合は、「1」が返ります。

•

プログラムが開発エンジンで動作していて、実行モードに切り替わった場
合（Ctrl + T）は、「2」が返ります。

•

プログラムが開発エンジンで動作していて、F7 キーにより起動したり、APG でオープンした場合は、「3」が返ります。

Prog
現在のタスクのタスクパスを返します。全てのタスクはメインプログラムを含むため、返されるパスにはメインプログラムは含まれていません。

TDepth
実行時のタスクネストの深さを返します。メインプログラムはタスクのレベルとしては含まれていません。

データコントロール
今までのバージョンでは、コンボボックスやリストボックスのコントロール
に対して、文字や式でしか設定ができませんでした。このため、カンマ（,）
で区切られた複数文字列を含む、コントロール選択肢の文字列データを生成するサブタスクを作成しなければならない場合がありました。
Magic eDeveloper では、コンボボックスやリストボックスをデータコントロールとして定義できます。これによって、データベースのフィールドから値の範囲を直接選ぶことができるようになりました。

コンボボックスとリストボックスの特性
コンボボックスとリストボックスのコントロールに、次の特性が追加されました。
•

ソーステーブル……テーブルリポジトリに表示されるテーブルの番号。

•

表示項目……選択されたソーステーブル内の項目番号。この項目の内容が表示されます。

•

リンク項目……選択されたソーステーブル内の項目番号。選択された表示項目に対応して、ここで指定したリンク項目の値が実行時に返されます。

•

インデックス……選択されたソーステーブルのインデックス名。テーブル
インデックスから選択されます。

•

範囲……指定した項目の From/To の範囲を設定します。

新機能ガイドMagic eDeveloper V9 Plus35

第 9 章 生産性の向上

モデル
モデルは、継承できる一組の特性で、特定のオブジェクトに定義できます。
次のオブジェクトがモデルを定義できます。
•

項目

•

コントロール

•

フォーム

•

ヘルプ

モデルで定義している特性が更新されると、そのモデルにリンクされたオブ
ジェクト全てに、その特性が反映されます。ただし、オブジェクト側にて個別に定義しなおしている場合は除きます。

モデルリポジトリ
モデルリポジトリは、登録されているオブジェクトモデルを表示します。オ
ブジェクトモデルは、各オブジェクトタイプのテンプレートとして利用することができます。各オブジェクトには、自動的にデフォルトの特性値が設定されます。オブジェクトモデルにリンクされたオブジェクトは、そのモデルに設定されている値と同じ特性値が設定されます。オブジェクトの特性値を個別に変更することで、変更した特性項目については、この継承関係がなく
なります。

図 9-1

［モデルリポジトリ］テーブル

モデルリポジトリの属性•

名前……ユーザにより定義されるモデルの名前•

クラス……モデルの対象となるオブジェクト、たとえば
•

36

項目
新機能ガイドMagic eDeveloper V9 Plus

第 9 章－生産性の向上

•

•

ヘルプ

•

フォーム／コントロール；ブラウザ形式、GUI 表示、GUI 出力、テキスト形式など

型……各クラスが持っている、それぞれの下位属性•

項目
文字……文字列
数値……Int 型または、10 進型の数値
論理……True または False
日付……数値型の日付の値
時刻……数値型の時刻の値
メモ……可変長の文字列
BLOB……Magic 外部で作成されたバイナリ情報•

ヘルプ
内部……Magic アプリケーションの内部で定義されたヘルプ
Windows……Magic アプリケーションの外部で定義されたヘルプ•

フォーム／コントロール
各インタフェースタイプのフォームとそのフォームで有効なコント
ロールが選択肢となります。

モデルを使用した作業
新しいオブジェクトは、デフォルトではシステムの既定モデルにリンクされます。アプリケーションが新しく作成されるとき、システムの既定モデルによって自動的に定義され、システムの既定モデルは デフォルト として表示されます。

新機能ガイドMagic eDeveloper V9 Plus37

第 9 章 生産性の向上

図 9-2

モデルの特性シート

特性
各クラスタイプに対して、特性のデフォルトが定義されます。デフォルトの値は黒色で表示されます。左側に表示される［継承解消］ボタンをクリックすることで特性の継承関係をなくすことができます。継承関係がなくなった
特性は青色で表示されるようになります。なお、この色やフォントは変更できます。

モデル特性の継承解消
オブジェクトの特性値を個別に定義できます。特性値が個別に定義されたら、その特性項目については、リンクしているモデルの現在の値や更新された値を継承しなくなります。継承関係が解消された特性項目について、再度継承
関係を復活させることもできます。

オブジェクトに対する異なったモデルの選択
モデルを他のものに置き換えた場合、リンクされたオブジェクトは新しいモデルの特性を継承します。個別に定義した特性は、システム既定のデフォルト特性への継承関係がなくなります。個別に定義した特性は、システム既定のデフォルト特性が更新されても影響されません。

Magic フラットファイルでのアプリケーション実行
Magic フラットファイル（MFF）によって、データベースから独立した形でアプリケーションファイルを実行することができます。バイナリファイルとして作成されたアプリケーションファイルは、ユーザコンピュータシステム
上の任意の場所に配置できますが、実行版での利用に限定されます。
MFF はマルチプラットフォーム環境で使用することを想定しています。例えば、WindowsNT から UNIX へアプリケーションを移行する場合、リポジトリの入出力作業は必要ありません。

Magic フラットファイルの指定
MFF を指定する設定欄は、［アプリケーション特性］ダイアログで表示されます。開発者が 「Yes」と設定すると、MAGIC.INI ファイルが更新され、MFFをロードするようになります。
アプリケーションの開発結果を MFF として出力することで、実行時には CTL
ファイル用のデータベースは不要です。
Magic のアプリケーションは、MFF と圧縮を同時に指定できません。一方のパラメータを指定すると、他方が無効になります。

Magic アプリケーションを MFF として保存
既存のアプリケーションは、［ファイル］メニューの ［MFF 形式で保存］をクリックすることで保存することができます。MFF で保存された Magic アプ
リケーションは、開発版ではオープンできません。MFF 形式ファイルは実行

38

新機能ガイドMagic eDeveloper V9 Plus

第 9 章－生産性の向上
版でのみ利用できるように設計されています。

タスク戻り値
Magic eDeveloper の［タスク特性］には、［戻り値］という新しい特性が追加されました。これは、値か式で指定されます。プログラムの処理が終了すると、この値が返ります。
CALLProg（）という新しい関数が追加され、プログラムはこの関数のパラメータに式などにより記述することで起動されるようになります。この関数の戻り値としては、起動されたプログラムの戻り値の値が返されます。

ISAM データベースに対する外部結合
データベースに関係なくリンクコマンドで外部結合オプションを指定できるようになりました。ISAM テーブルを使用した場合、照会リンクと同じような動作をします。

新機能ガイドMagic eDeveloper V9 Plus39

第 9 章 生産性の向上［このページは意図的に空白になっています。］

40

新機能ガイドMagic eDeveloper V9 Plus

開発機能の拡張

10

Magic eDeveloper には、開発時に便利な多くの新機能が追加されています。
この章では、次のトピックについて解説します。
•

パラメータ整合•ブロック処理コマンド•

ベクトルのサポート•

アプリケーションウイザード•

拡張された構文チェックユーティリティ

•

コメント

•

ナビゲーションインタフェース

•

検索と置換

•

参照整合性

•

リンク条件

•

ユーザ定義開発メニュー

パラメータ整合
今までのバージョンでは、変数とパラメータを区別することができませんでした。Magic eDeveloper では、特定の変数をパラメータとして宣言できるようになります。この変数は、コールコマンドにおいて使用すべき引数として認識されるようになります。

セレクトコマンドとパラメータ
セレクトコマンドの選択肢の１つとしてパラメータが追加されました。これ
により、セレクトコマンドは次の３つのオプションから選択するようになり
ます。
•

実データ

•

変数

•

パラメータ

パラメータは、他のタスクから渡される引数を受け取ります。
タスクにパラメータが定義されていない場合、変数に引数の内容が渡されます。

新機能ガイドMagic eDeveloper V9 Plus

41

第 10 章 開発機能の拡張

パラメータテーブル
パラメータは、［タスク環境／変数項目］の［パラメータ］テーブルで定義します。

パラメータ一覧
コールコマンドで使用するパラメータが、［パラメータ一覧］として表示されます。
パラメータのタイプは、コールプログラムコマンドで表示される［パラメー
タ一覧］に反映されています。［パラメータ一覧］には、呼ばれるプログラムに定義されているパラメータの数と詳細が表示されます。

パラメータを定義した場合のプログラム呼出
コールコマンドによってパラメータが定義されているプログラムやタスクを呼び出す場合、ズームによって［パラメータ一覧］を表示し、呼ばれるプロ
グラムやタスクのパラメータ内容を表示させることができます。この内容に合わせて引数の追加や削除を行い、定義されたパラメータに合わせることができます。

パラメータを定義しない場合のプログラム呼出
コールコマンドによって、パラメータが定義されていないプログラムやタス
クを呼び出す場合、［パラメータ一覧］には、何も表示されません。パラメー
タとして指定する項目は、最大 255 までの制限があります。パラメータは、呼ばれるタスクの変数に登録されている順に引き当てられます。

ブロック処理コマンド
ブロック処理コマンドが拡張されました。

If-Elseブロックコマンドに Else オプションが追加されました。今までは、個々の条件毎に新しくブロックを作成しなければなりませんでした。Magic eDeveloper
では、If-Else ブロックを指定することで、最初の条件に対する False 条件の処理を含め、１つのブロックコマンドで 定義できるようになりました。
また、If-Else ブロックはネストさせることができます。

Loop
Magic eDeveloper Plus では、Loop オプションが追加されました。Loop オプ
ションは、指定された条件内であればブロック内の処理を繰り返します。
LoopCounter 関数を使用して、ブロック Loop 処理コマンドによって実行される回数を監視できます。
詳細は、『リファレンス』第 9 章「式」の関数の説明を参照してください。

42

新機能ガイドMagic eDeveloper V9 Plus

第 10 章－開発機能の拡張

ベクトルのサポート
Magic eDeveloper Plus では、ベクトル（配列）がサポートされました。項目のデータ型に「ベクトル」が追加されました。Magic でのベクトルは、モデルをベースにしています。このモデルはベクトル内の各セル特性を定義します。
ベクトルにアクセスするための関数が追加されました。
•

VecSet ……ベクトルのセルにデータを追加します。

•

VecGet …… ベクトルのセルからデータを取り出します。

•

VecSize …… ベクトル内のセルの総数を取得します。

•

VecCellAttr ……ベクトルのセル属性を取得します。

アプリケーションウイザード
アプリケーションウイザード は、開発者に Magic 開発環境に容易にアクセス
し、アプリケーションを素早く作成させることができます。
アプリケーションウイザードは、データオブジェクト、対話型プログラム、
印刷、及び、バッチプログラムを作成します。［ツール］メニューの「アプリケーションウイザード」をクリックすることでアプリケーションの作成が開始されます。

拡張された構文チェックユーティリティ
Magic eDeveloper ePlus では、チェックメッセージが別のフローティング可能なウィンドウに表示されるようになりました。
動作環境の指定によって、チェック結果の表示を制御することができます。

コメント
Magic eDeveloper では、アプリケーション内のオブジェクトにコメント文を添付させることができます。

新機能ガイドMagic eDeveloper V9 Plus

43

第 10 章 開発機能の拡張

図 10-1 コメントダイアログ

コメント文を添付できるオブジェクトは次の通りです：
•

モデル

•

テーブル

•

44

•

テーブル

•

カラム

•

インデックス

•

外部キー

プログラム

•

タスク

•

変数項目（変数、パラメータ）•

入出力テーブル•

フォームとコントロール

新機能ガイドMagic eDeveloper V9 Plus

第 10 章－開発機能の拡張

•

ハンドラ

•

ヘルプ

•

使用権利

•

ユーザメニュ

•コンポーネント

ナビゲーションインタフェース
Magic eDeveloper は、開発リポジトリがより使いやすくなり、ユーザーフレン
ドリなナビゲータペインを利用できるようになりました。アプリケーション
をオープンしたときのメインスクリーンは以下のように表示されます。

図 10-2

Magic のメイン画面

ナビゲータペインを利用して、アプリケーションの各リポジトリにアクセスすることができます。またナビゲータペインのサイズを小さくして、ワーク
スペース領域を大きく取ることができます。
ワークスペースには、リポジトリのデータや設定、各特性、アプリケーショ
ンのフォームを表示します。画面のフォーカスを切り替えるためのショート
カットを定義することもできます。
ナビゲータペインは、デフォルトでは画面の左側に表示されます。また、Window 内の任意の辺に寄せることもできます。あるいは、辺に固定させるのではなく、フローティングさせることもできます。

新機能ガイドMagic eDeveloper V9 Plus45

第 10 章 開発機能の拡張
ナビゲータペインの表示内容は、次の４つから選択できます。
•

リポジトリ

•

タスク

•

ブックマーク•

クロスリファレンス

•MVCS（チーム開発時のみ有効）

アプリケーション開発にスペースが必要な場合、ナビゲータペインはいつでも閉じることができます。開発モードから実行モードに切り替わったり、プ
ログラムを起動して実行した場合には、自動的に閉じられます。

リポジトリ
リポジトリを選択したときには、フォルダのツリーが表示されます。メインのフォルダには、モデルやテーブル、プログラムなどの各リポジトリのオブジェクトが表示されます。フォルダツリーは、サブツリーとして１つ下のレベルまで展開され、それぞれのリポジトリでユーザが定義したフォルダを確認することができます。

図 10-3 リポジトリの使用

フォルダツリーには次のような情報が表示されます。
•

フォルダイメージの展開と縮小

•

フォルダ名

•

登録オブジェクトの数

フォルダは、リポジトリへの登録内容を組織化するためのオブジェクトです。
これを利用することにより、ユーザはリポジトリへの登録内容を、範囲によって分類することができます。例えば、あるフォルダにテーブルの 10 番から 19 番、別のフォルダに 20 番から 29 番を入れるといった使い方です。

46

新機能ガイドMagic eDeveloper V9 Plus

第 10 章－開発機能の拡張
各リポジトリには、フォルダを 100 個まで持つことができます。各フォルダ
は、リポジトリ内で登録されている順番に対応しています。ユーザがある
フォルダから別のフォルダへ 1 つの登録内容を移した場合、登録リストの連続性を維持するため、自動的にリポジトリ内の登録項番を付けなおします。
ユーザ定義フォルダではなく、メインのフォルダに入力された項目は、リポ
ジトリ登録リストの先頭に置かれ、リポジトリ全体が表示されるときに見ることができます。
アプリケーションの各リポジトリは、ナビゲータでリポジトリを選択することにより表示されます。ユーザは次の各リポジトリでユーザ定義フォルダを作成することができます。
•

モデル

•

テーブル

•

プログラム

•

ヘルプ

•

権利

•

メニュー

•

コンポーネント

各リポジトリの登録リストにあるフォルダカラムの内容を見ることにより、オブジェクトが登録してあるフォルダを確認できます。

タスク
プログラムを開発するとき、ナビゲータペインのタスク表示が有効に利用できます。
ナビゲータペインのタスク表示により、プログラムのタスクツリー構造を確認することができます。
タスクツリーが表示されているとき、次の操作を行うことができます。
•

メインタスクやサブタスクのナビゲーションによる概要確認•プログラム内ツリー構造の修正操作•

タスクのサブツリー切り取りやコピーと貼り付け

クロスリファレンス
ナビゲータペインにはクロスリファレンス表示があり、クロスリファレンスの検索結果を保持しています。それぞれのクロスリファレンスの検索結果は、
ツリーフォーマットで表示されます。
表示された検索結果オブジェクトをクリックすることで、ワークスペース側
はそのオブジェクトの存在する位置が表示されるよう切り変わり、カーソルが該当位置に移動します。
クロスリファレンスには次の特徴があります。
•

クロスリファレンスの検索結果を削除できます。

•

クロスリファレンスの検索結果をテキストファイルとして保存することが新機能ガイドMagic eDeveloper V9 Plus47

第 10 章 開発機能の拡張できます。
•

クロスリファレンスの検索結果を印刷できます。

• ［動作環境］ダイアログの［動作設定］タブの下の［クロスリファレンスの結果の最大登録数］に検索結果の保持数の上限を指定できます。

ブックマークナビゲータペインのブックマーク表示により、アプリケーション内でブックマークされたオブジェクトを見ることができます。

ブックマーク・オブジェクト
ブックマークオブジェクトの定義により、ナビゲータに登録表示されるオブジェクトにリンクが作成されます。ユーザは、Ctrl + B の入力、あるいは［オプション］メニューの［ブックマーク］を選択することでブックマークを定義できます。
ブックマークの定義時にはデフォルトの名称が表示されますが、適当な名称に変更することができます。
ブックマークには次のような特徴があります。
•

作成順に表示されます。

•

新しく作成したブックマークオブジェクトが先頭行に表示されます。

•

ブックマークから登録内容を削除できます。

• ［動作環境］ダイアログの［動作設定］タブの下の［ブックマークの最大登録数］にブックマークの保持数の上限を指定できます。

MVCS
CTL 特性で［チーム開発を有効にします］のオプションを ON にすると、［ナビゲータ］ペインに、［MVCS］セクションが表示されます。ここには、ログ
インユーザがチェックアウトしたオブジェクトの一覧が表示されます。
チェックアウトされたオブジェクトの一覧は以下のような特徴があります。
•

表示されているオブジェクト名をクリックすることで、そのオブジェクトにジャンプすることができます。

• ［MVCS］セクション上でオブジェクトをチェックインすることができま
す。

検索と置換
アプリケーション内のテキストを検索したり置換したりすることができます。
この結果は、クロスリファレンスと同じようにナビゲータペインに表示されます。置換する場合、アプリケーションを一通り検索した後、開発者に置換方法を確認した上で実行されます。
この機能はオープンしたリポジトリ内でのみ有効です。

参照整合性
48

新機能ガイドMagic eDeveloper V9 Plus

第 10 章－開発機能の拡張
SQL では、外部キーを使用してテーブル間のリンクを定義することができます。外部キーはテーブル内のカラムをもとに定義し、他の SQL テーブル内で定義された参照キー（プライマリキーまたはユニークキー）に対応するようにします。
テーブルのカラムに対して外部キーを設定することで、それに対応している
参照キーのカラムとの参照整合性を保持できます。例えば、メインテーブル
として定義されているテーブルの外部キーまたはテーブルを削除することな
く参照キーを削除することはできません。
Magic eDeveloper では、テーブルリポジトリでプライマリキーと外部キーを定義できます。

テーブルリポジトリ
プライマリキー［プライマリキー］のチェックボックスが、［インデックス特性］に追加されました。プライマリキーは１つのインデックスのみを指定できます。このインデックスは、ユニークかつ Null 値許可「No」でなければなりません。

外部キー［外部キー］のカラムが、テーブルリポジトリに追加されました。［外部キー］
でズームすると、［外部キー］テーブルが表示されます。この［外部キー］
テーブルには、２つのテーブルがあります。外部キー定義テーブルと外部
キーセグメントテーブルです。
外部キー定義テーブルには次の内容が表示されます。
•

外部キー番号……自動的に割り振られた、外部キーの順番を意味する内部番号。

•

外部キー名……Magic で使用する外部キーの名前。データベースに外部キーが作成される場合、この名前になります。

•

参照テーブル……データベースに作成された任意の Magic のテーブルから選択します。テーブルリポジトリに登録されたテーブルのみ参照できます。

•

参照キー……参照されたテーブルから特定のインデックスを選択します。

•

DB に作成……チェックボックスにチェックした場合は、外部キーがデー
タベースに作成されます。

外部キーセグメントテーブルには次の内容が表示されます。
•

現在のテーブルのセグメント番号……自動的に割り振られた、現在のテー
ブルのセグメントの順番を示す内部番号。

•

現在のテーブルのセグメント……カラムでズームすることにより現在のテーブルからこれらのセグメントを選択できます。。現在のテーブルの各
セグメントは、参照するテーブルに合ったセグメントを持っていなければなりません。

•

参照テーブルのセグメント番号……自動的に割り振られた、参照するテー
ブルのセグメントの順番を示す内部番号。

•

参照テーブルのセグメント……参照されるテーブルで定義されているインデックスを選択した場合、これらのセグメントは自動的に表示されます。

新機能ガイドMagic eDeveloper V9 Plus49

第 10 章 開発機能の拡張
参照キーを別のものに変更すると、表示されているセグメントの内容が書き換わります。

APG
外部キーを持つテーブルで APG を実行するとき、生成されるプログラムには
そのテーブル内のフィールドが定義されます。これは今までのバージョンと同様です。
Magic eDeveloper では、［APG］ダイアログに、テーブルに定義された全ての
外部キーの一覧を表示するリンクタブが追加されました。それぞれの外部
キーはその順に番号がつけられていますが、この番号を修正することでキーの順序を変更することができます。番号に０を設定すると、その外部キーは対象外となります。
外部キーを選択することにより、［選択カラム一覧］に、参照テーブルのすべてのカラムが追加されます。［選択カラム一覧］では、フィールドを削除できますが、参照テーブルのプライマリキーセグメントや、参照しているテーブ
ルのプライマリキーセグメントを削除することはできません。
外部キーを選択し、その順序を決定することにより、プログラムにそれぞれの外部キーに対するリンクコマンドが追加されます。
参照テーブルに対するリンクは、レコードメインの処理テーブルの最後に表示されます。またそれぞれのリンクには次のコメントが表示されます。
外部キーによるリンク：< 外部キーの名前 >もしメインテーブルと参照テーブルが同じ SQL データベースであれば、結合リンクが定義されます。それ以外の場合は、参照リンクになります。
APG では、メインテーブルの外部キーのみを検索します。参照テーブルに定義された外部キーをネストすることはできません。

リンク条件
今までのバージョンでは、リンクコマンドの条件では、実際にレコードを読み込むか否かの指定を行うことはできませんでした。Magic eDeveloper では、リンクの実行条件を指定できるようになりました。

開発モード
タスクのフローテーブルにおいて、［条件］欄に 「Yes」か「No」または「式」を定義することで、リンク条件を設定することができます。
［条件］欄に「Yes」を設定した場合、または「式」の結果が 「True」となる場
合、リンクコマンドによって該当するレコードを読み込みます。
［条件］欄に 「No」を設定した場合、または式の結果が「False」となる場合、該当するレコードは読み込みません。レコードはリンクが失敗した場合と同じようになり、次のような結果になります。
•

50

リンクコマンドによってセレクトされたカラムの全ての値は、デフォルト

新機能ガイドMagic eDeveloper V9 Plus

第 10 章－開発機能の拡張
値になります。
•

リンクの戻り値は、「False」となります。

•

条件が 「Trure」と評価されるまで項目更新は行われません。

•

リンク条件がレコード後処理の終了するタイミングで 「False」と評価された場合、レコード前処理以降に読み込まれたリンクレコードに対する修正は無効になります。

ユーザインタフェース［リンク特性］ダイアログに新しい設定項目が追加され、リンク条件の評価時期が指定できます。

リンク特性ダイアログ
条件パラメータが新しいリンク条件の機能になったため、今までの確認モードのリンク指定は、［リンク特性］ダイアログの［確認］欄で設定するようになりました。
この「確認」のリンク指定は、照会リンクと結合リンクで有効です。
照会リンクと「確認」のリンク指定の組合せは、削除された確認モードのリンク指定に取って代わるものになります。
以前のバージョンから移行すると、確認モードのリンクは、「確認」のリンク指定が有効な照会リンクに変換されます。

リンク条件の評価 特性［リンク条件の評価］の設定が「T= タスク」になっている場合、データビュー
全体を読み込む前に１回だけリンク条件の評価が行われます。リンク条件が「False」と評価された場合、リンク部のセレクトコマンド行は評価されません。結合リンクの場合、SQL 文は結合部の記述が含まれません。
結合リンクや外部結合リンクに対して この設定を 「r- レコード」とし、リンク条件が 「False」と評価された場合、リンクデータはあるなしに関わらず読み込まれ、リンクフィールドの値はデフォルト値に置き換えられます。リン
クの再計算においては、結合リンクと外部結合リンクは通常の照会リンクと同じように動作します。

ユーザ定義開発メニュー
開発時に使用する様々な Magic アプリケーションの起動メニューを提供するものです。このメニューに、「アプリケーションウイザード」や開発者が作成したウイザードなどのツールを含めることができます。

開発メニューの構文
開発メニューの指定は、MAGIC.ini ファイルの［Tools_Menu］セクションで行います。
構文に誤りがある場合は、メニューは表示されません。指定したファイルがない場合もメニューは表示されません。

新機能ガイドMagic eDeveloper V9 Plus

51

第 10 章 開発機能の拡張［このページは意図的に空白にしています。］

52

新機能ガイドMagic eDeveloper V9 Plus

他の環境との接続性

11

Magic には、Magic アプリケーションを他の環境に接続したり、他の環境から
Magic アプリケーションに接続したりするための機能が追加されています。
ここには、以下のトピックがあります。
•

LDAP サポート•

Java との連携•

COM との連携•

XML サポート•

Web サービスサポート•

SNMP サポート•

メッセージキューのサポート

•

接続関数

LDAP サポート
Magic は、LDAP(Lightweight Directory Access Protocol) 環境からユーザ認証を行うことができます。これによって、ユーザは 2 回もログオンする必要がなくなります。また、開発者は、Magic の関数を使用してログオンユーザを確認するようにプログラムで組み込むことができます。

Java との連携
Magic は、Java クラスのインスタンスや EJB ファイルを表す仮参照を使用する
ことで、Java のクラスや EJB(Enterprise JavaBeans) とのインタフェースを持つことができます。

Java 関数
Magic には、Java のメソッドを呼び出すための関数があります。これらの関数は、メソッドをアクティブにしたり仮参照を使用してクラス内の変数を参照したり更新したりするために Java クラスのインスタンスを作成することができます。仮参照は、Java クラスのインスタンスを表す Magic の Blob 項目です。
クラスのスタティックなメソッドや変数は同じような方法で簡単にアクセスすることができます。

Java コンポーネントジェネレータ
新機能ガイドMagic eDeveloper V9 Plus

53

第 11 章 他の環境との接続性
Java コンポーネントジェネレータ（JCG）は、JNI の指定をしないコンポーネントを作成することで、Java のクラスや EJB ファイルに自動的にアクセスするようになる Magic のウィザードです。

J2EE との連携
Magic は、J2EE フレームワーク内で EJB コンポーネントとしてサービスを提供することができます。Magic は、既存のプログラムを使用して EJB コン
ポーネントを作成できます。EJB インタフェースビルダ（EIB）は、J2EE 環
境で実行できるメソッドを作成し、パッケージ化し、Jar ファイルの形式で保存します。J2EE アプリケーションサーバで実行される Jar ファイルは、Magic
アプリケーションを J2EE 環境の一部として統合されます。

COM との連携
Magic は、COM オブジェクトを呼び出したり、外部のアプリケーションに対して COM インタフェースを提供したりする機能があります。

Magic COM クライアント
Magi は、OLE オブジェクトや ActiveX コントロールを制御する機能を提供します。簡単なインタフェースでメソッドを呼び出したり、プロパティの設定や取得を行ったり、ActiveX イベントを処理したりすることができます。
2 つの新しい項目のデータ型（OLE 型と ActiveX 型）が COM 項目として定義します。
コール処理コマンドの新しいオプションとして コール COM が追加され、COM オブジェクトとのインタフェースを提供します。
COM オブジェクトを使用して動作させている場合、オブジェクトが要求するデータは常に Variant(COM のデータタイプ ) です。Magic には、Variant を作成したり、Vriant オブジェクトからデータを取得するための関数があります。

Magic COM インタフェース
Magic の COM インタフェースビルダ（CIB）は、アプリケーションに対するCOM インタフェース用 dll ファイルを作成します。これによって、他のアプ
リケーションに対する Magic アプリケーションのインタフェースを提供することができます。

XML サポート
XML は、アプリケーション間でのデータ転送で使用される標準的なフォー
マットです。Magic は、XML をサポートします。XML ファイルの読み書きが可能です。

XML 関数54

新機能ガイドMagic eDeveloper V9 Plus

第 11 章－他の環境との接続性
Magic のプログラムは、内部機能を使用することで XML データを読み込むことができます。内部機能によって、XML ファイルからのデータの検索、参照、更新ができます。
「XML ダイレクトアクセス」という新しい入出力タイプで XML ファイルをオープンします。

XML コンポーネントジェネレータ
XML コンポーネントジェネレータ (XCG) は、Magic アプリケーション内から
XML ドキュメント形式のデータをアクセスさせる Magic コンポーネントを作成することで、XML スキーマを持ったアプリケーションとの連携が簡単になります。XCG は、コンポーネントを作成するために XML スキーマ定義(XSD) ファイル を使用します。

Web サービスサポート
Magic は、Web サービスとの連係機能を持っています。これは、Magic から
Web サービスを呼び出したり、Magic が Web サービスのプロバイダとして機能するものです。

Web サービスの利用
Magic プログラムは、他のアプリケーションによって提供される Web サービ
スを利用することができます。コール Web サービス処理コマンドを使用することで Web サービスを呼び出すことができます。また、必要なパラメータの設定処理を補佐するアシスト機能もあります。

Web サービスプロバイダ機能
Web サービスインタフェースビルダ（WIB）は、Magic アプリケーションを
他のアプリケーションから Web サービスを使用して呼び出せるようなインタ
フェースを作成します。WIB は、Web サービスについての必要な情報を提供する WSDL ファイルを作成します。

SNMP サポート
SNMP(Simple Network Management Protocol) は、ネットワーク管理を制御し、ネットワーク機器や機能をモニターします。アプリケーションや Magic モ
ジュールは、トラップメッセージを事前に設定された SNMP モニターに送信します。これによって、アラームや処理の失敗、または他の予期しないイベントが発生した時に、システム管理者がアプリケーションや Magic モジュー
ルを参照したり制御したりできます。

メッセージキューのサポート
分散アプリケーションは、しばしばメッセージキューによって別のアプリ
新機能ガイドMagic eDeveloper V9 Plus

55

第 11 章 他の環境との接続性
ケーションへメッセージを送信することがあります。Magic は、メッセージ
キューに関するコンポーネントを提供することで、メッセージキューをオープンしたり、キューからメッセージを読み込んだり、メッセージを書き込んだり、メッセージキューをクローズしたりすることができます。パブリッシュとサブスクライブの機能もサポートします。サポートするメッセージン
グシステムは、•

Microsoft ……MSMQ•

Sun ……JMS API•

IBM ……WebSphere MQ

です。

接続関数
Magic には、メールサーバや PC のクリップボード、外部 URL の呼出などを使用して接続する関数があります。

メール関数
Magic には、メールサーバに対してメールの送受信を行う関数があります。
メール受信には、POP3 と IMAP がサポートされてています。

クリップボード関数
Magic には、PC のクリップボードに対してデータの読み書きを行う関数があります。

HTTP 関数HTTPPost や HTTPGet 関数を使用することで、指定した URL にデータを送ったりデータを取り出したりすることができます。

56

新機能ガイドMagic eDeveloper V9 Plus