Magic 新連載スタート
から 494 日経過

Magic 連載購読

Magic 連載購読コーナーはこちらです。

ログインには購読のお申込みと Google へのアカウント登録が必要です。

Google のアカウントは Gmail アドレスである必要はありません。現在、お使いの会社のメールアドレスや Yahoo! メール、Hotmail などのメールアドレスでもご使用になれます。

連載購読コーナーへのログイン手順のヘルプはこちらです。

Google サイト

この Web サイトは、Google 社の Google サイト の機能を使用して構築されています。

Google サイトの日本語版は2008年10月22日にリリースされました。

Google サイトを利用してのサイトの構築は、お気軽にご用命ください。

ドメイン名の取得から DNS の設定、Web サイトのデザインまで、包括してお引き受けいたします。

ホーム‎ > ‎Magic eDeveloper‎ > ‎

Magic V10 新連載概要


記事概要 Magic V10 で作るイベントドリブン型プログラム

2010/02/08 7:45 に Masanobu Tanda が投稿

第23回 汎用ボタンの作り方

 アプリケーションを作り込んでいくと、タスクごとに何度も同じようなボタンの作成を強いられることがあります。このような時に便利なのが、モデルリポジトリにおけるボタンの登録です。

 ただし、モデルリポジトリにボタンの書式を登録するだけで、ユーザイベントの定義や実行イベントとの関連付けをタスクごとに定義しているとしたら、それはそれでまだ活用レベルが低いと言えます。

 今回は、これらの定義をすべて汎用的に事前登録し、個々のタスク内ではイベントハンドラを定義するだけという手法があることを紹介いたします。

 (以降、本編に続きます。本編ご購読のお申込みはこちらです

記事概要 Magic V10 で作るイベントドリブン型プログラム

2010/01/06 6:54 に Masanobu Tanda が投稿   [ 2010/01/06 7:28 に更新しました ]

第22回 数値型カラムの「差分更新」

 前回の、「更新レコード特性の位置と更新項目」では、文字型カラムに対する排他制御の効率的な活用法について解説しました。今回は、数値型カラムに対する排他制御の効率的な活用法について説明します。

 Magic V9 以降、数値型カラムに対しては従来の「値更新」に対して、「差分更新」という機能が追加されました。ただし、この機能は SQL 系の DBMS に対してのみ有効であり、Pervasive.SQL では使用することができません。SQL Server もしくは Oracle 等の使用が必須となります。

 「差分更新」という機能は、ひと言でいうと、在庫引落しや在庫引当てに際して、元の在庫数がいくつであったかに関わらず、無条件に足し算や引き算を行ってくれるという機能です。したがって、マルチユーザ環境において楽観的ロックを引き起こすことなく、値の更新処理に整合性が取れるようになります。

 では具体的にどのようなものなのかを順を追って見て行くことにしましょう。

 (以降、本編に続きます。本編ご購読のお申込みはこちらです

記事概要 Magic V10 で作るイベントドリブン型プログラム

2009/12/01 2:44 に Masanobu Tanda が投稿   [ 2010/01/06 7:29 に更新しました ]

第21回 更新レコード特性の「位置と更新項目」

 前回は、遅延トランザクションにおいても Magic ロックを使用すれば正しくレコードレベルの排他制御が行えることの解説をしました。ただし、リッチクライアントのアプリケーション上では Magic ロックが使用できないことの補足も説明しました。

 今回は、遅延トランザクションを使用した場合の、更新レコードの識別特性について解説します。更新レコードの識別特性を活用すれば、リッチクライアントを含めたすべての遅延トランザクションにおいて、更新の喪失を防ぐことが可能となります。

Pervasive における更新の喪失の問題点

 はじめに、Pervasive の物理トランザクションを用いて、排他制御をまったく行わなかった場合に起こる問題点について見ていきます。

 画面1と画面2はユーザ A さんとユーザ B さんがほぼ同時に商品ファイル更新プログラムを起動してレコードを修正しようとしている場合の例です。排他を解除するために、ロック方式は「N=なし」にしてあります。

 (以降、本編に続きます。本編ご購読のお申込みはこちらです

記事概要 Magic V10 で作るイベントドリブン型プログラム

2009/11/03 5:16 に Masanobu Tanda が投稿   [ 2010/01/06 7:31 に更新しました ]

第20回 遅延トランザクションとレコードロック

 今回は遅延トランザクションとレコードロックについて解説いたします。遅延トランザクションと聞くと、残念ながらレコードロックは掛からないという誤解を抱いている方が多いようですが、実はそうではありません。遅延トランザクションを使用すると RDBMS 側の排他制御がリアルタイムで使用できなくなるだけで(実際には遅延から物理に入るときに制御されるのですが)、本来の Magic が得意とするところのレコードロックは健在なのです。

 ここでは始めに、物理トランザクションを使用した場合の排他制御のデフォルトの動作と、遅延トランザクションを使用した時の排他制御のデフォルトの動作を比較するところから検証を始めてみたいと思います。

物理トランザクション使用時のデフォルト動作

 画面1は Pervasive.SQL で作成した商品ファイル更新プログラムを、クライアント A とクライアント B で同時に起動したときの実行画面です。左上をクライアント A とし、右下をクライアント B とします。

 (以降、本編に続きます。本編ご購読のお申込みはこちらです

記事概要 Magic V10 で作るイベントドリブン型プログラム

2009/10/07 23:36 に Masanobu Tanda が投稿   [ 2010/01/06 7:32 に更新しました ]

第19回 遅延トランザクションを利用した、処理の取消

 今回はトランザクションにまつわる話題を取り上げます。トランザクションと聞くと、障害時の復旧対策がまず思い付きますが、実はトランザクションの機能はプログラムのロジックの一部として利用されることも多いのです。

 例えば、受注伝票入力のプログラムがあったとして、オペレータが受注伝票の入力途中で入力作業をキャンセルしたいと思ったときの場面を想定します。

 通常、受注入力プログラムの構造は親子タスクの構造となっており、ヘッダ・フッタ部分の入力と、明細入力部分が分離しています。このとき、明細入力を終えて親タスクのヘッダ部分に戻ったときに、取消キーである「F2」キーまたは V10 以降では「Ctrl + F2」キーを押すと、親タスクは入力が取り消されてレコードは作成されませんが、子タスクでは明細レコードがゴミデータとしてテーブルに残ってしまいます。

 たいていの場合はこれに対処するために明細行の削除バッチを作成して、親レコードの入力がキャンセルされたら子レコードはバッチで削除するというロジックを組み込むかと思うのですが、実はトランザクションの機能を利用すればバッチタスクを作成しなくても、簡単に子レコードの入力をキャンセルすることができるようになるのです。

 (以降、本編に続きます。本編ご購読のお申込みはこちらです

記事概要 Magic V10 で作るイベントドリブン型プログラム

2009/08/23 9:40 に Masanobu Tanda が投稿

第18回 イベントの伝播機能について(2)

 前回は、1つのロジックエディタ上に複数のイベントロジックユニットを定義して、複数のハンドラを順序だてて実行させる方法について学びました。今回は、これらのイベントロジックユニットを、Magic の内部イベントに対して割り込ませる方法について解説します。

 合わせて、「クローズ」イベントと「終了」イベントと「終了(X)」イベントの違いについても学びます。

クローズイベントへの割り込み

 画面1は APG で作成した顧客ファイル一覧プログラムに多少、手を加えただけのプログラムです。

 (以降、本編に続きます。本編ご購読のお申込みはこちらです

記事概要 Magic V10 で作るイベントドリブン型プログラム

2009/07/28 2:01 に Masanobu Tanda が投稿   [ 2009/07/28 2:25 に更新しました ]

第17回 イベントの伝播機能について

 イベントロジックユニット(イベントハンドラ)は、1つのロジックエディタ上にいくつでも記述することができます。では誤って、1つのイベントに対して重複するハンドラを複数記述してしまった場合には、Magic はどのような動きをするのでしょうか?

 あるいは逆に、1つのイベントに対して複数のハンドラを同時に実行させたいような場合には、どのようなルールでイベントロジックユニットを記述すればよいのでしょうか?これが今回のテーマです。

1対1のイベントとハンドラの対応

 はじめに、最も単純な1対1のイベントとハンドラの対応をみてみましょう。

 (以降、本編に続きます。本編ご購読のお申込みはこちらです

記事概要 Magic V10 で作るイベントドリブン型プログラム

2009/07/01 22:57 に Masanobu Tanda が投稿   [ 2009/07/01 23:02 に更新しました ]

第16回 ユーザイベントの「レコード更新前」と「レコード更新後」(2)

レコード更新前オプションとレコード更新後オプションの意味

 Magic のマニュアルを見ると、これら2つのオプションについては次のような記述があります。

(1) レコード更新前

 イベントを実行する前に現在のレコードレベルを終了します。(中略)イベントレベルが実行された場合、レコードはまだ更新されていないため、イベントレベルからレコードを参照してもレコードがまだ更新されていないものと見なされます。

(2) レコード更新後

 イベントは対応するハンドラを実行する前に現在のレコードを終了し、更新させます。(中略)イベントレベルが実行された場合、レコードはすでに更新されているので、イベントレベルからレコードを参照すると、更新された内容として参照できます。

 つまり、これらの表現を前回のサンプルプログラムの動作に例えると、次のようになります。

 (以降、本編に続きます。本編ご購読のお申込みはこちらです

記事概要 Magic V10 で作るイベントドリブン型プログラム

2009/07/01 5:57 に Masanobu Tanda が投稿   [ 2009/07/01 6:07 に更新しました ]

第15回 ユーザイベントの「レコード更新前」と「レコード更新後」

 前回は、ユーザイベントテーブルの強制終了欄の「E=編集」オプションについて解説しました。今回は、同じく強制終了欄の「R=レコード更新前」と「P=レコード更新後」のオプションについて解説します。 いずれも、地味な存在に見えるオプションパラメータですが、知っておくと非常に便利なオプションなので、ぜひ活用していただきたいと思います。かつてはこれらの動作を実現させるために、裏ワザを駆使してプログラミングしていたことが思い起こされます。

ズームして同じテーブルを開く親子タスク

 まずはじめに、ズームして同じテーブルを開くだけの単純な親子タスクの動きを見ていただきます。画面1は商品ファイルのテーブルを修正モードで一覧表示しているプログラムです。

 (以降、本編に続きます。本編ご購読のお申込みはこちらです

記事概要 Magic V10 で作るイベントドリブン型プログラム

2009/06/06 0:14 に Masanobu Tanda が投稿   [ 2009/06/06 0:41 に更新しました ]

第14回 ユーザイベントと強制終了

 Magic の旧バージョンの頃から比較すると、この10数年の間にズーム処理の仕方にもずいぶんと変遷があったことがうかがいしれます。V10 ではズームイベントをキャッチして、ハンドラに記述された処理を実行させるという方法がもっともオーソドックスなズーム利用法になっていますが、ハンドラを実行させる方法にもさまざまな方式があり、開発者によって作り方もまちまちというのが現状です。

ズームイベントの処理

 ここでは、このズームイベントの処理の仕方を例に挙げ、時と場合によってズーム処理の仕方を使い分ける方法について学習します。

 (以降、本編に続きます。本編ご購読のお申込みはこちらです

‹ 前へ    1 - 10 / 23 件    次へ ›