Forguncyでテーブルをコピーする方法として、次の方法があります。
これらの方法を実装したサンプルを本ナレッジに添付していますので、説明と照らし合わせて確認してください。
※添付のサンプルは以下のような構成になっています。
- 「DBCOPY_v6.fgcp」はForguncy 6(6.0.5.0)で作成したForguncyのプロジェクトです。
- 「DBImport_DLLSource.zip」はVisual Studio .NETのプロジェクトです(下記の方法3のサンプルです)。
方法1:コマンドによるコピー
「繰り返し」コマンドで1件づつコピーしていく方法です。実装は簡単ですが、繰り返しコマンドは、指定した条件での繰り返しになり、この場合リストビューの再読み込みを伴うクライアント側の処理となるため、データの件数が多い場合は実行時間は長くなります。
具体的な設定方法は次のとおりです。
・テーブル1とデータ連結したリストビュー1を用意。
・テーブル2(空)を用意。
・「繰り返し」コマンドによって「テーブルデータの更新」を実行してリストビュー1の全レコードを、テーブル2へ追加する。
※「テーブルデータの更新」ではリストビューに表示していないフィールドに対しても更新を行うことも可能です。このため、リストビュー2は必要ありません。
方法2:カスタムJavaScriptのWeb APIによるコピー
JavaScriptでプログラミングコードを記述してデータの更新を行う方法で、リストビューの再読み込みを伴わないため方法1よりは速いと思われますが、JavaScriptの実行速度はブラウザに依存致します。
この方法の場合、予めJavaScript内で使用するリストビューのセルに名前をつけておく必要があります。名前をつけたいリストビューのセルを選択し、右側に表示される「セル型」から「列名」に入力してください。JavaScriptのコードは以下のように記載します。コード内の"MYNO"、 "MYCOUNTRY_CD"等が「列名」に該当します。
//リストビュー1(テーブル1)に表示されたデータを、テーブル2に全件追加する例
var p = Forguncy.Page;
var mylist = p.getListView("リストビュー1");
for (var item=0; item < mylist.getRowCount(); item++) {
Forguncy.addTableData("テーブル2",
{
NO: mylist.getValue(item, "MYNO"),
COUNTRY_CD: mylist.getValue(item, "MYCOUNTRY_CD"),
ROOT: mylist.getValue(item, "MYROOT"),
APP_KIND: mylist.getValue(item, "MYAPP_KIND"),
APP_DATE: mylist.getValue(item, "MYAPP_DATE"),
REG_DATE: mylist.getValue(item, "MYREG_DATE")
});
}
カスタムJavaScriptとWeb APIに関しては下記のオンラインヘルプを参照してください。
カスタムJavaScript
Web API
方法3:Web API DLLによるコピー
Visual Studio .NETを使用してサーバーサイドで動作するカスタムWeb API DLLファイルを作成し、サーバー側で処理を実行するため、高速な処理が可能です。
以下にC#で記載したサンプルコードを抜粋していますが、ForguncyのカスタムWeb APIである「modifyData」クラスの「AddRows」プロパティを使用して、テーブルにデータを追加しています。
/// <summary>
/// テーブル1のデータをコピーします。
/// </summary>
/// <param name="strTableName">データを保存するテーブル</param>
/// <param name="strODataCondition">取り込むデータの抽出用OData文字列(テーブル名だとすべてのデータ)</param>
/// <returns>コピーしたレコード数</returns>
private int CopyTbl(string strTableName, string strODataCondition)
{
int intReturnl = 0;
// GetTableData (string odataPath)メソッドのOData指定を利用して各レコードの情報を取得します。
List<Dictionary<string, object>> dicRecords = new List<Dictionary<string, object>>();
dicRecords = (List<Dictionary<string, object>>)this.DataAccess.GetTableData(strODataCondition);
// コピーするデータを生成します。
var data = new Dictionary<string, ModifyData>();
var modifyData = new ModifyData();
foreach (Dictionary<string, object> dicRecord in dicRecords)
{
// 1レコード分のデータを生成します。内部データベースへ取り込むフィールド情報を記載します。
modifyData.AddRows.Add(new Dictionary<string, object>
{
{"NO", dicRecord["NO"] },
{"COUNTRY_CD", dicRecord["COUNTRY_CD"] },
{"ROOT", dicRecord["ROOT"] },
{"APP_KIND", dicRecord["APP_KIND"] },
{"APP_DATE", dicRecord["APP_DATE"] },
{"REG_DATE", dicRecord["REG_DATE"] }
});
intReturnl += 1;
}
// テーブルの変更を反映します。
data.Add(strTableName, modifyData);
this.DataAccess.ModifyTablesData(data);
return (intReturnl);
}
カスタムWeb API DLLファイルの作成方法、リファレンスにつきましては、下記のオンラインヘルプを参照してください。
カスタムWeb API
リファレンス
方法4:Forguncy 6のプラグインによるコピー
Forguncy 6のプラグインである「リストビューデータの受け渡し」コマンドを使用して、リストビューの任意のデータを別のリストビューに追加する方法です。このコマンドにより追加されたデータは、リストビューの表示上でのみ追加されており、データ連結先のテーブルに反映するには、「リストビューデータの更新」コマンドを使用してリストビューの更新確定を実行する必要があります。
使用方法は、以下の「リストビューデータの受け渡しコマンド」を参照してください。
方法5:サーバーサイドコマンドによるコピー
Forguncy 6ではサーバーサイドコマンドを利用してサーバー側でテーブルの値を直接読み込み、別のテーブルへコピーできます。データの読み込みには「パラメーター設定」コマンドを使用し、データを保存するには「繰り返し(サーバーサイド)」、「テーブルデータの更新(サーバーサイド)」の各コマンドを使用します。
サーバーサイドコマンドの呼び出しは「サーバーサイドコマンドの呼び出し」コマンドで行いますが、更新したデータは自動的に画面上には反映されないため、「連結データを最新の情報に更新する」をオンに設定し処理の完了後にデータを読み込みます。
詳細は、以下の「サーバーサイドコマンド」、「コマンド(サーバーサイド)」、「サーバーサイドコマンドの呼び出し」を参照してください。
サーバーサイドコマンド
コマンド(サーバーサイド)
サーバーサイドコマンドの呼び出し
ご注意
アプリケーションで使用するテーブルをデータの絞り込みや加工のためにコピーすることは、同じデータがあちこちに存在することを意味します。これはデータの同期など一元管理の面で複雑になるデメリットが存在します。テーブルをコピーしなくとも、クエリーによる絞り込みや、ロードオンデマンドをONにして表示件数を絞り込むことで表示速度を改善することができます。それらの方法も含めて、テーブルのコピーは十分に検討した上で必要に応じて使用するようにしてください。
検索キーワード: fgcinfo fgcdevelopment