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

이 클래스는 두 레코드, 즉 특정 관계의 한쪽에 있는 모델의 레코드와 다른 쪽에 있는 모델의 레코드 간 연결을 나타냅니다. 두 개가 동일한 모델일 수도 있습니다.

각 연결은 연결된 레코드를 식별하는 두 개의 키로 구성됩니다.

이 클래스는 App Maker 애플리케이션에서만 사용할 수 있습니다. App Maker 애플리케이션에서 사용할 수 있는 다른 모든 일반 클래스는 Apps Script 참조를 확인하세요.

속성

이름 유형 설명
sourceKey string 관계의 소스 쪽에 있는 모델의 레코드에 대한 키입니다. 레코드에 액세스하려면 Record._sourceKey를 사용합니다.
targetKey string 관계의 대상 쪽에 있는 모델의 레코드에 대한 키입니다. 레코드에 액세스하려면 Record._targetKey를 사용합니다.

소스와 대상이 각각 어느 쪽에 있는지 파악하려면 보안 탭에서 관계에서 모델을 확인하세요. 관계 권한에는 직원 + 부서와 같은 제목이 있습니다. 직원부서가 관계 양쪽의 이름입니다. 첫 번째 관계에 해당하는 모델이 소스 모델이고, 두 번째 관계에 해당하는 모델이 대상 모델입니다.

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 각 레코드 필드 또는 관계용 필드가 있습니다. 다대일 관계는 단순 필드를 통해 표현되고, 다대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 모델의 데이터베이스 유형입니다(Calculated, Cloud SQL 또는 Directory).

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 최종 모델의 '정렬 기준' 필드가 오름차순으로 정렬되는 경우를 나타냅니다.
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 모델에서 데이터베이스 트랜잭션의 상태를 시작하고 커밋, 롤백, 검사할 수 있습니다.

속성

이름 유형 설명
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 현재 트랜잭션을 커밋합니다. 트랜잭션이 시작되기 전에 앱에서 커밋하려고 시도하면 오류가 발생합니다.


    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 기타 트랜잭션은 현재 트랜잭션에서 잠금 설정한 데이터를 읽거나 수정할 수 없습니다.