対象製品とバージョン:Forguncy3、4
Forguncyでテーブルをコピーする方法として、次の方法があります。
これらの方法を実装したサンプルを本ナレッジに添付していますので、説明と照らし合わせて確認してください。
※添付のサンプルは以下のような構成になっています。
- 「DBCOPY_v3.fgcp」はForguncy 3(3.0.113.0)で作成したForguncyのプロジェクトです。
- 「DBCOPY_v4.fgcp」はForguncy 4(4.0.105.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]
https://docs.forguncy.com/v4/#!Documents/232.htm
[Web API]
https://docs.forguncy.com/v4/#!Documents/23/234.htm
方法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]
https://docs.forguncy.com/v4/#!Documents/24/241.htm
[リファレンス]
https://docs.forguncy.com/v4/#!XMLDocuments/リファレンス/html/N_GrapeCity_Forguncy_ServerApi.htm
方法4 Forguncy 4のプラグインを使う場合
Forguncy 4のプラグインである「リストビューデータの受け渡し」コマンドを使用します。Forguncy 3ではこのプラグインは使用できません。
ご注意
アプリケーションで使用するテーブルをデータの絞り込みや加工のためにコピーすることは、同じデータがあちこちに存在することを意味します。これはデータの同期など一元管理の面で複雑になるデメリットが存在します。テーブルをコピーしなくとも、クエリーによる絞り込みや、ロードオンデマンドをONにして表示件数を絞り込むことで表示速度を改善することができます。それらの方法も含めて、テーブルのコピーは十分に検討した上で必要に応じて使用するようにしてください。
検索キーワード: fgcinfo fgcdevelopment