Forguncy サポート

テーブルに自動採番のフィールドを作成できますか?(Forguncy 3以降)

フォローする

対象製品とバージョン:Forguncy 3以降

Forguncyでは以下の方法でフィールドに自動採番の設定を行うことが可能です。

A. 自動採番機能を利用する

Forguncy 3以降では、テーブル作成時にテキスト型のフィールドに対して自動採番を設定することが可能です。以下のページ内の「●フィールドに自動採番を設定する」を参照してください。

バージョン4:フィールドに設定できるオプション

バージョン3:フィールドに設定できるオプション

※自動採番機能は、「IDが生成されるタイミング」を「レコードの保存時」に指定することでレコードを保存する際に採番が行われるため、複数人で同時利用した際にも番号が重複することはありません。

 

B. 集計フィールドとデータベースの一意設定を利用する

集計フィールドと数式の機能を組み合わせて自動採番を行います。
この方法では、ページを表示する際に採番する値が決定されるため、複数人が同じタイミングでデータを登録すると一意なIDにならないことに注意してください。

 

  1. 以下のページに記載されている手順に従い、自動採番を行いたいフィールドの最大値を求める集計フィールドを作成します。最大値はMAX関数を使い求めることができます。
    テーブルに集計フィールドを作成する

    AutoInc_1.png
  2. 新規にデータを登録するページで、1の手順で作成したフィールドを表示するリストビューを作成します。
    AutoInc_2.png
  3. データを登録するページの「テーブルデータの更新コマンド」の詳細設定にある非データ連結フィールドに作成したリストビューの値+1が設定されるような数式を設定します。
    AutoInc_3.png
  4. 作成したリストビューは列か行を非表示設定とすることで、実行時には表示されないように設定します。
    AutoInc_4.png

※複数人で同時利用する際には以下の設定を追加することで番号の重複が発生した場合でも、もう一度保存することで、一意なデータとして採番が可能です。

  • テーブルの自動採番を行いたいフィールドに「一意」の設定を行います。
    「テーブルデータの更新」コマンドでレコードを保存する際に複数人が同時に保存した場合、採番番号が重複してエラーが発生します。この際、以降のコマンド実行はキャンセルされます。
  • コマンドを実行する際、集計フィールドのリストビューをリロードします。
    「テーブルデータの更新」コマンドを実行する前に、「JavaScriptの実行」コマンドを使い集計フィールドを設定しているリストビューのreloadメソッドを実行します。保存時にエラーが発生した場合でもリストビューのデータをサーバーから読み込み直すことで保存可能な番号を再度取得できます。

 

C. ODataとデータベースの一意設定を利用する

OData関数を利用して自動採番を行います。
自動採番を行いたいフィールドの最大値は、OData関数でフィールドを降順にソートして先頭のレコードの値を取得すると取得できます。

データを登録するページの「テーブルデータの更新コマンド」の詳細設定にある非データ連結フィールドに自動採番を行いたいフィールドの最大値+1が設定されるようなOData関数を指定します。

※OData関数は通常非同期で実行されますが、「テーブルデータの更新コマンド」の非データ連結フィールドにOData関数を記載した場合は、関数値を取得してからデータの保存が行われます。
AutoInc_5.png

OData関数は以下のように設定されています。
AutoInc_6.png

この方法でもOData関数でサーバーからデータを取得しデータベースにレコードのデータを保存するまでのわずかな間に複数人が同じタイミングでデータを登録すると一意なIDにならないことに注意してください。

※複数人で同時利用する際には以下の設定を追加することで番号の重複が発生した場合でも、もう一度保存することで、一意なデータとして採番が可能です。

  • 自動採番を行いたいフィールドに「一意」の設定を行います。
    「テーブルデータの更新コマンド」でレコードを保存する際に複数人が同時に保存した場合、採番番号が重複してエラーが発生します。この際、以降のコマンド実行はキャンセルされます。

 

実際の動作は、添付のサンプルで確認できます。
※サンプルは、Forguncy 3.0.105.0以降のバージョンで開けます。


検索キーワード: fgcinfo fgcdevelopment

この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています
他にご質問がございましたら、リクエストを送信してください

コメント