単一レコード・レイアウトから非デフォルト・コンテンツを削除するために、ユーザーが「クリア」をクリックすると、clearAllFields 関数が実行されます。この関数は、ユーザーがデータを入力し「保存」をクリックしたときに、この新しく入力したデータで既存のデータベース行が更新されるように、レイアウトをセットアップします。
- 「ソース」タブをクリックします。
- clearAllFields 関数を見つけ、以下のように変更します。
function clearAllFields(event Event in)
saveID INT = selectedPayment.paymentID; // retain the key
selectedPayment = new PaymentRec{};
selectedPayment.paymentID = saveID;
selectedPayment_form.publish();
end
コードは、今後のデータベース更新で使用するためのレコード・キーを保持します。その後コードはレコードを作成し、このレコードを selectedPayment 変数に割り当て、さらに保存したキー値をこの変数に割り当てて、この変数を単一レコード・レイアウトに公開します。
- ユーザーが「保存」をクリックしたときに呼び出される関数を、以下のようにして完成させます。
- selectedPayment_form_Submit という名前の関数を見つけます。
- この関数を以下のように変更します。
function selectedPayment_form_Submit(event Event in)
selectedPayment_category_comboBox.value
= PaymentLib.getCategoryNum(selectedPayment_category_comboBox.value);
if (selectedPayment_form.isValid())
selectedPayment_form.commit();
selectedPayment_category_comboBox.value =
PaymentLib.getCategoryDesc(selectedPayment_category_comboBox.value);
// update allPayments with new version of selectedPayment
for(i INT from 1 to allPayments.getSize())
if(allPayments[i].paymentID == selectedPayment.paymentID)
allPayments[i] = selectedPayment;
exit for;
end
end
call dbService.editPayment(selectedPayment)
returning to recordRevised
onException serviceLib.serviceExceptionHandler;
end
end
以下の節は、ウィジェット・コンテンツを関連フィールドにコピーすることについての妥当性を検査します。
if (selectedPayment_form.isValid())
「Description」の Dojo コンボ・ボックスで問題が発生します。なぜなら、ウィジェット・コンテンツは STRING 型であるのに対し、関連フィールドである selectedPayment.category の型は INT だからです。
Dojo コンボ・ボックスの検査では、コンボ・ボックスに整数、または整数に変換できるストリング (「1」または「20,」など) が含まれている必要があります。
この問題に対処するために、EGL コンボ・ウィジェットを使用するか、検査の前に Dojo コンボ・ボックスに有効な整数が含まれているようにします。前述のコードでは 2 つ目のオプションを示しており、以下のように開始時に整数を割り当てます。
selectedPayment_category_comboBox.value
= PaymentLib.getCategoryNum(selectedPayment_category_comboBox.value);
関数はその後、単一レコード・レイアウトのデータの妥当性を検査し、データが有効であれば以下の処理を実行します。
- 検証したデータを selectedPayment レコードにコミットします。
「コミット」とは MVC 処理の一部であり、データベースのコミットとは関係ありません。
- 単一レコード・レイアウトの Dojo コンボ・ボックスを更新し、このフィールドの値が再びストリングになるようにします。
- 保存したキー値を含む allPayments 配列要素を変更します。この時点で、配列要素には、ユーザーがデータベースで必要なデータのコピーが含まれています。
- サービスを呼び出して、データベースの単一行を更新します。関連するコールバック関数が allPayments 配列をデータ・グリッドのデータ配列に割り当て、この割り当てにより、更新されたデータでグリッドが再レンダリングされます。グリッドは、データベースから取得されたデータではなく、selectedPayment_form_Submit 関数に割り当てられたデータで再レンダリングされます。
- ファイルを保存しますが、ファイルは閉じないでください。 ソース・ファイルにエラーがある場合は、そのコードと完成した PaymentFileMaintenance.egl のコードのファイル内容を比較してください。