App Maker Server API

アプリ

このクラスを使用すると、サーバー スクリプトでデータにアクセスして権限を確認し、App Maker に固有の機能を提供できます。

    var userRoles = app.getActiveUserRoles();
    if (userRoles.indexOf(app.roles.Admins) >= 0) {
      // Create admin-only application settings record.
      var settings = app.models.Settings.newRecord();
      app.saveRecords([settings]);
    }
    

このクラスは App Maker アプリケーションでのみ利用可能です。App Maker アプリケーションで使用可能な他の汎用クラスについては、Apps Script リファレンスをご覧ください。

プロパティ

名前 説明
roles string[string] このアプリケーションで定義されているすべてのユーザー役割。


    if (userRoles.indexOf(app.roles.Admins) < 0) {
      throw 'Access denied';
    }
    
models Model[string] アプリケーションで定義されているすべてのデータモデル。


    var record = app.models.Person.newRecord();
    app.saveRecords([record]);
    
metadata Metadata アプリケーションで定義されているすべてのメタデータ。


    var displayField = app.metadata.models.model1.displayField;
        
ManagedError function(message: String) カスタムエラー メッセージを表示します。


    throw new app.ManagedError("Custom message shown to app users");
      
transaction Transaction Cloud SQL モデルのトランザクションを制御します。


    app.transaction.cloudSql.start(app.transaction.cloudSql.isolation.REPEATABLE_READ);
      

メソッド

名前 戻り値 説明
getActiveUserRoles() string[] 現在のユーザーの役割を返します。Session.getActiveUser() もご覧ください。


    var roles = app.getActiveUserRoles();
    if (roles.indexOf(app.roles.Admins) < 0) {
      throw 'Access denied';
    }
    
saveRecords(
  records:Record[])
undefined ドラフトから新しいレコードを作成するか(レコードの _key フィールドが null の場合)、既存のレコードを更新します(_keynull の場合)。新しく作成されたレコードの _key フィールドを設定します。


    var record = app.models.Person.newRecord();
    app.saveRecords([record]);
    
deleteRecords(
  records:Record[])
undefined レコードを削除します。


    var record = app.models.Person.getRecord(key);
    app.deleteRecords([record]);
    
getRoleMembers(role:string) string[] 特定の役割に属するすべてのメンバーを返します。


    var role = app.roles.Admins;
    var members = app.getRoleMembers(role);
    

役割に追加したグループの個々のメンバーは返しません。

Association

このクラスは、2 つのレコードの関連付けを表します。1 つのレコードは、特定のリレーション エンドにあり、もう 1 つのレコードは反対側のモデルのリレーション エンドにあります(同じモデルの場合もあります)。

それぞれの関連付けは 2 つのキーから構成され、これにより、関連付けられているレコードが識別されます。

このクラスは App Maker アプリケーションでのみ利用可能です。App Maker アプリケーションで使用可能な他の汎用クラスについては、Apps Script リファレンスをご覧ください。

プロパティ

名前 説明
sourceKey string リレーションのソース側のモデルにあるレコードのキー。レコードにアクセスするには Record._sourceKey を使用します。
targetKey string リレーションのターゲット側のモデルにあるレコードのキー。レコードにアクセスするには Record._targetKey を使用します。

ソースまたはターゲット側のリレーション エンドを特定するには、リレーションが設定されているモデルの [Security] タブを調べます。リレーションの権限には、Employee + Department のようなタイトルが付いています。EmployeeDepartment はリレーション エンドの名前です。最初のリレーション エンドに対応するモデルがソースモデルで、2 番目のリレーション エンドに対応するモデルがターゲット モデルです。

Model

このクラスは App Maker のデータモデルを表します。このクラスを使用すると、スクリプトからこのモデルのデータレコードにアクセスできます。

このクラスは App Maker アプリケーションでのみ利用可能です。App Maker アプリケーションで使用可能な他の汎用クラスについては、Apps Script リファレンスをご覧ください。

メソッド

名前 戻り値 説明
deleteRecords(
  keys:string[])
undefined キーを使用して複数のレコードを削除します。
getRecord(
  key:string)
Record キーを使用して、レコードを読み込みます。
getRecords(
  keys:string[])
Record[] キーを使用して複数のレコードを読み込みます。見つからないキーがあると、返されるレコードの数が少なくなります。返されたレコードは、キーが渡された順序で配置されます。
newQuery() Query 現在のモデルから特定の基準に一致するレコードを読み込むクエリを作成します。


    var query = app.models.Person.newQuery();
    query.filters.Name._startsWith = 'John';
    query.filters.Age._greaterThan = 20;
    query.sorting.Name._ascending();
    query.sorting.Age._descending();
    var records = query.run();
    
newRecord() Record 未保存の新しいレコード(ドラフト レコード)を作成します。レコードが保存されるまで、新しいレコードの _key フィールドは null になります。


    var record = app.models.Person.newRecord();
    app.saveRecords([record]);
    

Query

このクラスは、App Maker のデータクエリを表します。このクラスを使用すると、スクリプトでデータレコードのフィルタリング、並べ替え、ページングを制御できます。ユーザーがクエリを開始すると、App Maker はクエリに所有権フィルタを適用し、ユーザーに結果を返す前にその権限を確認します。

このクラスは App Maker アプリケーションでのみ利用可能です。App Maker アプリケーションで使用可能な他の汎用クラスについては、Apps Script リファレンスをご覧ください。

プロパティ

名前 説明
filters Dynamic クエリにフィルタを追加します。サポートされているフィルタは equals, notEquals, lessThan, greaterThan, lessThanOrEquals, greaterThanOrEquals, in, notIn, startsWith, notStartsWith, contains, notContains です。


    var query = app.models.Person.newQuery();
    query.filters.Name._startsWith = 'John';
    query.filters.Age._greaterThan = 20;
    var records = query.run();
    

innotIn フィルタは、フィールド内の値が指定の配列内の任意の値と等しい(または等しくない)ことを確認します。

フィルタ startsWith, notStartsWith, contains, notContains は、文字列と文字列のリストに対してのみサポートされます。

フィルター lessThan, greaterThan, lessThanOrEquals, greaterThanOrEquals は、数値、日付、文字列に対してのみサポートされます。また、対応するリストデータ型もサポートされます。

ディレクトリ モデルにクエリを実行する場合は、特定のフィルタのみを使用します。詳細については、ユーザー フィールドとクエリ演算子をご覧ください。

limit number クエリで返されるレコードの最大数を設定します。
offset number スキップしてクエリ結果に含めないレコード数を設定します。
parameters Dynamic クエリ スクリプトのカスタム パラメータにアクセスします。
sorting Dynamic クエリに並べ替えを追加します。


    var query = app.models.Person.newQuery();
    query.sorting.Name._ascending();
    query.sorting.Age._descending();
    var records = query.run();
    
prefetch Dynamic クエリにプリフェッチを追加します。プリフェッチを追加すると、関連レコードがクエリと同じリクエストで読み込まれます。後でアクセスされたときにオンデマンドで読み込まれることはありません。プリフェッチにより、リクエストの合計数を減らすことができます。初期クエリのコストは高くなりますが、パフォーマンスは向上します。


    var query = app.models.Employee.newQuery();
    query.prefetch.Manager._add();
    query.prefetch.Manager.Reports._add();

    var records = query.run();
    for (var i in records) {
      var manager = records[i].Manager; // No extra call to DB
      var reports = manager.Reports; // No extra call to DB
      ...
    }
               

メソッド

名前 戻り値 説明
run() Record[] クエリを実行し、クエリ条件に一致するレコードを返します。


    var query = app.models.Person.newQuery();
    query.filters.Name._startsWith = 'John';
    query.filters.Name._ascending();
    var persons = query.run();
    

Record

このクラスは、App Maker のデータレコードを表します。このクラスを使用すると、スクリプトからレコードのフィールドと関連レコードにアクセスできます。

このクラスは App Maker アプリケーションでのみ利用可能です。App Maker アプリケーションで使用可能な他の汎用クラスについては、Apps Script リファレンスをご覧ください。

プロパティ

名前 説明
_key string レコードキーは特定のモデル内で一意です。レコードが保存されるときにキーが生成されます。新しい未保存のレコード(ドラフト レコード)の場合は null になります。
<field> Dynamic 各レコード フィールドまたはリレーションにフィールドがあります。Any-to-1 リレーションは単純なフィールドで表され、Any-to-N リレーションは配列で表されます。


    var person = app.models.Person.newRecord();
    person.name = 'John Doe';
    person.age = 35;
    app.saveRecords([person]);

    var manager = app.models.Person.newRecord();
    manager.name = 'Jeff Williams';
    manager.age = 45;
    app.saveRecords([manager]); // You must save new record before using it in relations.

    person.manager = manager;
    app.saveRecords([person]);
    

Metadata

このクラスは、アプリケーション内のすべてのメタデータを表します。このクラスを使用すると、スクリプトからこのアプリケーションのメタデータにアクセスできます。

このクラスは App Maker アプリケーションでのみ利用可能です。App Maker アプリケーションで使用可能な他の汎用クラスについては、Apps Script リファレンスをご覧ください。

プロパティ

名前 説明
models ModelMetadata[string] アプリケーションで定義されているすべてのモデル。

ModelMetadata

このクラスは、App Maker のメタデータ モデルを表します。このクラスを使用すると、スクリプトからこのモデルのメタデータにアクセスできます。

このクラスは App Maker アプリケーションでのみ利用可能です。App Maker アプリケーションで使用可能な他の汎用クラスについては、Apps Script リファレンスをご覧ください。

プロパティ

名前 説明
description string モデルエディタで指定されたモデルの説明。
displayField Field[string] モデルの表示フィールド。null の場合もあります。
fields Field[string] モデルで定義されているすべてのフィールド。
name string モデルエディタで指定されたモデルの名前。
readOnly bool モデルが読み取り専用かどうか。モデルが読み取り専用の場合、このモデルにデータを書き込むことはできません。
relations Relation[string] 指定されたモデルから派生しているすべてのリレーション
type string モデルのデータベース タイプ(計算モデル、Cloud SQL、ディレクトリ)。

Field

このクラスは App Maker のフィールドを表します。このクラスを使用すると、スクリプトからこのモデルのフィールドにアクセスできます。

このクラスは App Maker アプリケーションでのみ利用可能です。App Maker アプリケーションで使用可能な他の汎用クラスについては、Apps Script リファレンスをご覧ください。

プロパティ

名前 説明
autoIncrement bool フィールドがデータベースによって自動増分されるかどうか。
defaultValue Dynamic フィールドのデフォルト値。null の場合もあります。
description string フィールドの説明。null の場合もあります。
displayName string フィールドの表示名。null の場合もあります。
key string このフィールドのキー。
maxLength number 値の最大長(文字数)。null の場合もあります。
maxValue number|date フィールドの最大値。null の場合もあります。
minLength number 値の最小長(文字数)。null の場合もあります。
minValue number|date フィールドの最小値。null の場合もあります。
name string フィールドの名前。
possibleValues Dynamic[] フィールドで使用可能なすべての値を表示します。null の場合もあります。
regexp string すべての有効値が一致しなければならない正規表現。null の場合もあります。
regexpError string 正規表現がユーザー入力と一致しない場合に表示するエラー メッセージ。エラー メッセージ内の '%s' はユーザーの入力で置き換わります。null の場合もあります。
required bool フィールドが必須かどうか。
type string フィールドの種類(文字列、数値、日付、またはブール値)。
wholeNumber bool フィールドの数値が整数かどうか。小数点以下の桁数がない場合は整数になります。

Relation

このクラスは、App Maker で指定されたモデルから別のモデルへのリレーションの片側を表します。このクラスを使用すると、スクリプトからこのモデルのリレーションにアクセスできます。

このクラスは App Maker アプリケーションでのみ利用可能です。App Maker アプリケーションで使用可能な他の汎用クラスについては、Apps Script リファレンスをご覧ください。

プロパティ

名前 説明
ascending bool エンドモデルの sort-by フィールドが昇順で並べ替えられている場合。
count string モデルの数(One、Many)。
model ModelMetadata リレーション エンドのモデル。
name string リレーション エンドの名前。
owner bool エンドモデルがリレーションを所有しているかどうか。

たとえば、Invoice がその Items を所有している場合、app.metadata.models.Items.relations.Invoice.ownertrue になります。

sortBy Field エンドモデルの並べ替えを行うフィールド。null の場合もあります。

Transaction

App Maker の Transaction API にアクセスします。少なくとも 1 つの Cloud SQL モデルを持つアプリケーションでのみ使用できます。

プロパティ

名前 説明
cloudSql CloudSqlTransaction Cloud SQL モデルのトランザクションを制御します。
TransactionError function(message:String) トランザクション エラーの発生を示す例外。

CloudSqlTransaction

このタイプを使用すると、スクリプトで Cloud SQL モデル内のデータベース トランザクションの開始、commit、ロールバック、ステータス確認を行うことができます。

プロパティ

名前 説明
isolation IsolationLevel 分離レベルを列挙します。
lockOnRead LockMode setLockOnRead() で設定可能なロック読み取りモードを列挙します。

メソッド

名前 戻り値 説明
isStarted() bool トランザクションが現在進行中かどうか。


    app.transaction.cloudSql.isStarted();
                    

start
level:IsolationLevel)
undefined トランザクションを開始します。別のトランザクションがすでに進行中の場合は、エラーが発生します。


    app.transaction.cloudSql.start(
    app.transaction.cloudSql.isolation.REPEATABLE_READ);
            

パラメータは省略可能です。値が渡されない場合、デフォルトとして READ_COMMITTED が使用されます。

commit() undefined 現在のトランザクションを commit します。トランザクションの開始前にアプリが commit を試みると、エラーが発生します。


    app.transaction.cloudSql.commit();
            

rollback() undefined 現在のトランザクションのすべての変更を元に戻し、データベースのロックを解除します。トランザクションの開始前にアプリがロールバックを試みると、エラーが発生します。


    app.transaction.cloudSql.rollback();
            

setLockOnRead(
lockMode:LockMode)
undefined トランザクションが完了するまで、またはメソッドでロックモードが変更されるまで、すべてのデータベース読み取りに指定のロックモードを適用します。


    app.transaction.cloudSql.setLockOnRead(
    app.transaction.cloudSql.lockOnRead.UPDATE);

IsolationLevel

分離レベルを列挙します。

プロパティ

名前 説明
READ_UNCOMMITTED IsolationLevel 現在のトランザクションは、他のトランザクションの未送信の変更を表示できます。詳細
READ_COMMITTED IsolationLevel 現在のトランザクションは、他のトランザクションから送信された変更を表示できます。詳細
REPEATABLE_READ IsolationLevel 現在のトランザクションは、他のトランザクションから送信された変更を表示できます。レコードを繰り返し読み取っても同じ状態が返されます。詳細
SERIALIZABLE IsolationLevel 現在のトランザクションは、他のトランザクションから完全に分離されています。トランザクションは順次実行されます。詳細

LockMode

setLockOnRead() で設定可能なロック型読み書きモードを列挙します。

プロパティ

名前 説明
NO_LOCK LockMode ロックは適用されません。デフォルトのモードです。
SHARE LockMode 他のトランザクションは、現在のトランザクションによってロックされているデータを読み取ることができますが、変更はできません。
UPDATE LockMode 他のトランザクションは、現在のトランザクションによってロックされているデータの読み取りや変更を行うことはできません。