本ページでは、リストビューで変更されたレコードのみを配列型のパラメーターとしてサーバーサイドコマンドへ受け渡す方法を説明します。
なお、本機能を使用するには、対象のリストビューの[リストビューのデータを即時更新しない]チェックオプションがチェックされた状態である必要があります。
配列型のパラメーターの手順で作成したサンプルに、次のようにページが変更、追加されている状態を前提に、登録済みの注文を更新するサーバーサイドコマンドの作成を通して説明します。
サーバーサイドコマンドを使用せずに実現しようとした場合、注文明細のデータの変更と、それに応じた在庫数の変更を行うといった一連の処理を1つのトランザクションで実行することはできません。処理の途中で、他のユーザーが在庫数を変更してしまう可能性があります。サーバーサイドコマンドを使用することにより、このような問題を解決することができます。
注文明細を表示する「リストビュー1」は既存商品の注文数のみ編集可能であり、商品の変更、新たな商品の追加はできない状態に設定してあるものとします。
[作成]リボンタブ - [サーバーサイドコマンド]ボタンをクリックし、[サーバーサイドコマンドマネージャー]ダイアログを開きます。
[サーバーサイドコマンドマネージャー]ダイアログで[作成]ボタンをクリックし、新しいサーバーサイドコマンドを作成します。
[名前]に「注文更新」と入力します。
[サーバーサイドコマンドの設定]ダイアログで[パラメーター]タブを選択し、[新しいパラメーター]ボタンをクリックし、パラメーターを1つ作成します。
[パラメーターの名前]を「注文ID」、[パラメーターの種類]を「基本型」に設定します。
パラメーターの作成を繰り返し、次の図のように[パラメーターの名前]と[パラメーターの種類]を設定します。
配列型の「注文明細」パラメーターの右側にある[...]ボタンをクリックして[配列項目の編集]ダイアログを開き、[新しい配列の項目]ボタンをクリックして次の図のように配列項目を作成します。
配列項目を作成した後に、[OK]ボタンをクリックしてダイアログを閉じます。
[変更データのみを送信]チェックオプションをチェックし、[主キーフィールド]が「ID」になっていることを確認します。
[主キーフィールド]はカンマ区切りで複合主キーを設定することも可能です。また、フィールド名は英字の大文字と小文字を区別することに注意してください。[OK]ボタンをクリックしてダイアログを閉じます。
[コマンド]タブを選択し、[コマンド...]ハイパーリンクをクリックしてダイアログを開きます。
[コマンドの選択]で「トランザクション」コマンドを選択します。
「トランザクション」コマンド内のコマンドとして「テーブルデータの更新」コマンドを選択します。
[処理の種類]を「更新」に、[対象テーブル]は「注文」を選択ます。
[対象フィールド]の[新しいフィールド]ボタンをクリックし、フィールドを2つ追加します。
フィールドは、自動的にそれぞれ「注文名」と「注文日」が選択されます。
「注文名」フィールドの[値]の右側にある[]ボタンをクリックしてダイアログを開き、[パラメーター一覧]から「注文名」をダブルクリックしてパラメーターを設定し、[OK]ボタンをクリックしてダイアログを閉じます。
同様の手順で「注文日」フィールドの値には「注文日」パラメーターを設定し、[OK]ボタンをクリックしてダイアログを閉じます。
対象条件の[新しい条件]ボタンをクリックして条件を1つ追加し、左辺を「ID」、右辺を[]ボタンをクリックしてダイアログから「注文ID」パラメーターに設定します。
[新しいコマンド]ボタンをクリックしてコマンドを1つ作成し、[コマンドの選択]で「繰り返し」コマンドを選択します。
[繰り返し回数、または繰り返し配列]の入力テキストボックスの右側にある[]ボタンをクリックしてダイアログを開き、「注文明細.EditRows」パラメーターをダブルクリックした後に[OK]ボタンによりダイアログを閉じます。
「繰り返し」コマンド内のコマンドとして「パラメーター設定」コマンドを選択します。
[パラメーター名]を「更新前の注文数」、[パラメーター値]を「データベースのテーブルを参照」、[対象テーブル]を「注文_詳細」、[選択]を「単一フィールド」に設定し、[対象フィールド]は「注文数」選択します。
[クエリー]タブを選択し、[新しい条件]ボタンをクリックして条件を1つ追加します。
左辺に「ID」を選択、右辺に[]ボタンをクリックしてダイアログを開き、「Item.ID」パラメーターを設定します。
[新しいコマンド]ボタンをクリックしてコマンドを1つ作成し、[コマンドの選択]で「サーバーサイドコマンドの呼び出し」コマンドを選択します。
[サーバーサイドコマンド]は「在庫数の更新」を選択します(「在庫数の更新」サーバーサイドコマンドの作成方法は基本型のパラメーターを参照してください)。
「商品名」パラメーター右側の[]ボタンをクリックしてダイアログを開き、[パラメーター一覧]から「Item.商品名」をダブルクリックしてパラメーターを設定します。
「出荷数」パラメーターの値には=Item.注文数-更新前の注文数」を設定します。
[新しいコマンド]ボタンをクリックしてコマンドを1つ作成し、[コマンドの選択]で「テーブルデータの更新」コマンドを選択します。
[処理の種類]を「更新」に、[対象テーブル]は「注文_詳細」を選択します。
[対象フィールド]の[新しいフィールド]ボタンをクリックしてフィールドを1つ追加し、フィールドに「注文数]を選択して右側の[]ボタンをクリックしてダイアログを開き、「Item.注文数」をダブルクリックしてパラメーターを設定します。
[対象条件]の[新し条件]ボタンをクリックして条件を1つ追加し、フィールドに「ID]を選択して右側の[]ボタンをクリックしてダイアログを開き、「Item.ID」をダブルクリックしてパラメーターを設定します。
[OK]ボタンをクリックしてすべてのダイアログを閉じます。
「出荷_更新」ページにある「確定」ボタンを選択し、右ペインから[コマンド...]をクリックしてコマンドウィンドウを開きます。
[コマンドの選択]で「サーバーサイドコマンドの呼び出し」コマンドを選択し、[サーバーサイドコマンド]には作成した「注文更新」を設定します。
パラメーターの設定を「注文名」に入力した注文名が、「注文日」に入力した注文日が受け渡されるようにページ上のセルを設定します。
本例では、「注文名」に「G2」セル、「注文日」に「G4」セルを設定しています。
パラメーター「注文明細」の右側にある[]ボタンをクリックしてダイアログを開き、[対象リストビュー]に注文明細を表示するリストビュー(ここでは「リストビュー1」)を選択します。
もし、対象としたいリストビューがコンテナー型セルやタブコントロール型セル内に表示されるページ上にある場合、ドロップダウンリストの選択肢にはそれらのリストビュー名は表示されません。そのような場合には、対象となるリストビュー名を直接入力します。
注文明細を表示するリストビューの各列には名前を設定しておく必要があります。リストビューの列名の設定方法はリストビューの名前定義を参照してください。「商品名」の配列項目に「商品」を、「注文数」の配列項目に「注文数」を設定し、[OK]ボタンをクリックしてすべてのダイアログを閉じます。
[ホーム]リボンタブにあるデバッグの[開始]ボタンをクリックし、アプリケーションの動作を確認します。
「注文一覧」ページから既存の注文の「編集」ハイパーリンクをクリックして「注文編集」ページに遷移し、注文情報を修正して[登録]ボタンをクリックすると、修正した注文数に応じて在庫テーブルの在庫数が増減することを確認できます。