トランザクションを開く

トランザクションを開始します。以降のレコードの変更は [トランザクション確定] または [トランザクション復帰] スクリプトステップが実行されるまでこのトランザクション内で行われます。

メモ  トランザクションは元のウインドウ内で処理されます。元のトランザクションのウインドウとは異なるウインドウで実行された処理は既存のトランザクションの外部で自動的に確定されます。

オプション 

  • [入力値の自動化オプションを無視] を選択すると、入力値を自動化するように設定されたフィールドオプションを無視します。このオプションが選択解除された場合、すべての新しいまたは修正されたレコードのフィールド内で [トランザクション確定] スクリプトステップに達した場合にのみ入力値の自動化オプションが実行されます。入力値の自動化の定義を参照してください。

  • [入力値の制限を無視] を選択すると、フィールドに対して設定されているデータの入力値の制限オプションを無視してレコードが確定されます。このオプションは、[フィールド「フィールド名」のオプション] ダイアログボックスの [入力時の制限] タブで [データの入力時のみ] オプションが設定されているフィールドの入力値の制限のみを無視します。[常時] に設定されているフィールドへの入力は、[入力値の制限を無視] オプションが選択されている場合でも引き続き制限されます。入力値の制限の設定を参照してください。

  • [ESS ロックのコンフリクトを上書き] はオプティミスティックロックが設定されている場合 ODBC データソースのクライアントが変更を強制確定することを許可し、それ以外の場合は確定処理を制限します。ODBC データソースは外部 SQL ソース (ESS) とも呼ばれます。

互換性 

製品 サポート
FileMaker Pro はい
FileMaker Go はい
FileMaker WebDirect はい
FileMaker Server はい
FileMaker Cloud はい
FileMaker Data API はい
カスタム Web 公開 はい

起点バージョン 

19.6.1

説明 

トランザクションは現在のウインドウ内の 1 つまたは複数のレコードに対する変更で構成されています。トランザクションの変更は複数のデータベースファイル内の複数のテーブルに影響する可能性があります。トランザクションのすべての変更はまとめて確定されます。またはエラーが発生した場合もまとめて復帰されます。トランザクションは [トランザクションを開く] スクリプトステップにより開始されます。トランザクションを開始すると、その後のレコードの変更は [トランザクション確定] または [トランザクション復帰] スクリプトステップが実行されるまでトランザクションに保持されます。以降のステップはデータベーススキーマに保存されたレコードを変更し、トランザクションに関連するスクリプトステップとして使用できます。

[トランザクションを開く] スクリプトステップをスクリプトに追加すると、[トランザクション確定] スクリプトステップが自動的にペアになります。

トランザクション:

  • 先に進む前に現在アクティブなレコードを終了し、変更を確定します。アクティブなレコードを終了できない場合、[トランザクションを開く] はエラーを返しトランザクション内のスクリプトステップはスキップされます。

  • 1 つ以上のフィールドまたはテーブルの変更を 1 つの変更のセットとして結合する

  • 変更のセット全体を確定または復帰する

  • [トランザクションを開く] と [トランザクション確定] スクリプトステップの間のフィールドまたはテーブルの変更をグループ化する

  • より信頼性の高い変更のセットを作成できる

  • [トランザクション復帰] スクリプトステップを使用して自動的に復帰できる

  • グループとして成功 (確定) または失敗 (復帰) する

  • スキーマのルールが一致した場合は成功する

  • スキーマのルールが一致しない場合は自動的に復帰する

  • スキーマのルールが一致しない場合はオプションで検証設定をスキップして自動復帰を無効にできる。スキーマのルールを無効にするとトランザクションの整合性が損なわれる可能性があります。

  • [トランザクション確定] スクリプトステップがメインのファイルに変更を保存する前にローカルのテンポラリファイルで変更される

次の場合にトランザクションが自動的に確定され終了します:

  • 次のダイアログボックスが使用された場合: データベースの管理、オブジェクトの管理、データソースの管理

  • 次の処理またはスクリプトステップが実行された場合: 名前を付けて保存、再ログイン

  • ファイルが閉じられた場合

デフォルトでは、次の場合にトランザクションが自動的に復帰します:

  • トランザクションを開始する前に未解決のスキーマエラーが存在する場合。この場合トランザクションは自動的にスキップされます。

  • 常に検証するように設定されているフィールドへの変更が、フィールドの検証オプションと一致しない場合

  • [トランザクション復帰] スクリプトステップが使用された場合

  • スクリプトがキャンセルされた場合

  • [全スクリプト終了] スクリプトステップがトランザクション内で使用された場合

  • スクリプトデバッガを使用してスクリプトがキャンセルされた場合

  • フィールドアクセスなし、レコードアクセスなし、テーブルアクセスなしなどのアクセス権エラーがある場合

特定のエラーが発生したときにトランザクションが自動的に復帰するかどうかを制御するには、[エラー時のトランザクション復帰設定] スクリプトステップを使用します。

メモ 

  • ネストされたトランザクション:

    • 同じスクリプト内では許可されません (スクリプトワークスペースではあるトランザクションを別のトランザクション内に置くことはできません)

    • メインのスクリプトでトランザクションを開き、[スクリプト実行] スクリプトステップを使用してサブスクリプトを呼び出すことで近似できます。サブスクリプト内のすべてのステップは現在開いているトランザクションの範囲内で実行されます。サブスクリプトに [トランザクションを開く] と [トランザクション確定] スクリプトステップが含まれている場合、これらのステップはスキップされ、エラー 3 (「コマンドが使用できません」) が返されますが、サブスクリプト内のこれらのステップの前後および間にあるすべてのステップはメインスクリプトのトランザクション内で実行されます。サブスクリプトに [トランザクション復帰] スクリプトステップが含まれている場合、メインのスクリプトのトランザクションを復帰し、トランザクションの一致する [トランザクション確定] スクリプトステップにジャンプできます。例 4 を参照してください。

  • トランザクション内で使用される場合、レコードの削除処理は一度に 1 つのレコードを削除します。

  • [テーブルデータを削除] 処理は復帰できません。

  • [レコードのインポート] 処理がトランザクション内で使用された場合集計は表示されません。

  • [トランザクション復帰] スクリプトステップでは自動入力された増分シリアル値は復帰されません。

  • トランザクション内ではレイアウト設定の [レコードの変更を自動的に保存する] オプションは無視されます。

  • [FileMaker Data API を実行] スクリプトステップによって行われた変更はスクリプトのトランザクションには含まれません。このスクリプトステップ内で完了した操作は、トランザクション内に含まれている場合でも元に戻りません。

  • トランザクションが現在開いているかどうかを判断するには、Get (トランザクションオープン状態) 関数を使用します。

例 1 

トランザクションを開いて確定します。

コピー
トランザクションを開く []
    レコード/検索条件を開く 
    フィールド設定 [資産::説明 ; "説明テキスト"]
 トランザクション確定

例 2 

入力値の制限なしでトランザクションを開いて確定します。

コピー
トランザクションを開く [入力値の制限を無視]
    レコード/検索条件を開く
    フィールド設定 [資産::説明 ; "説明テキスト"]   
トランザクション確定

例 3 

ESS ロックの保護なしでトランザクションを開いて確定します。

コピー
トランザクションを開く [ESS ロックのコンフリクトを上書き]
   レコード/検索条件を開く
    フィールド設定 [資産::説明 ; "説明テキスト"]   
トランザクション確定

 

例 4

メインのスクリプトでトランザクションを開き、テキストフィールドを設定してから、サブスクリプトを呼び出します。トランザクションがすでに開いている間にサブスクリプトが呼び出されるため、その [トランザクションを開く] スクリプトステップはスキップされ、テキストフィールドが別の値に設定され、[トランザクション復帰] スクリプトステップの条件が評価されます。

数字フィールドが 1 の場合、(メインのスクリプトで開かれた) 現在のトランザクションは復帰されます。サブスクリプトの [トランザクション確定] スクリプトステップはスキップされ、コントロールはメインのスクリプトの [トランザクション確定] スクリプトステップに戻り、[スクリプト実行] スクリプトステップの後のステップはスキップされます。メインのスクリプトの終了時には、テキストフィールドの値は変更されていません。

数字フィールドが 0 の場合、サブスクリプトはトランザクションを復帰しないため、コントロールは [スクリプト実行] スクリプトステップに戻り、テキストフィールドは abc123 に設定され、トランザクションは確定されます。

メインのスクリプト

コピー
トランザクションを開く [ ]
    フィールド設定 [テーブル::テキストフィールド ; "abc" ]
    スクリプト実行 [指定: 一覧から ; "サブスクリプト" ; 引数: ]
    フィールド設定 [テーブル::テキストフィールド ; "abc123"]
トランザクション確定

サブスクリプト

コピー
トランザクションを開く [ ]
    フィールド設定 [テーブル::テキストフィールド ; "xyz456"]
    トランザクション復帰 [条件: テーブル::数字フィールド= 1]
トランザクション確定