Release Notes

This page lists new features and known issues with App Maker.

Turn off permissions reviews for users

November 27, 2018

We published new instructions for how G Suite admins can turn off permissions reviews for users. When an admin authorizes your app as an API client, users are not prompted to allow the app to access their G Suite data.

Enhanced performance settings and new guidance for app design

November 14, 2018

Today's release gives you more control over the way your app loads pages and widgets. We added a new performance setting, and we renamed the existing settings to better describe how they work.

Previous setting New setting Description
Panel is created Complete initialization App Maker loads apps and widgets with this setting when the user opens the app.
Panel is attached to DOM Partial initialization Similar to complete initialization, except widgets aren't initialized until the user opens their parent page.
Deferred initialization App Maker doesn't load the page or panel structure unless the user opens the parent page. Your app displays an animated progress indicator while App Maker downloads content and builds the page.
createChildren method is called Script-based initialization You can write a script that calls the createChildren method when the user performs the actions you specify. App Maker won't load child widgets unless they're needed.

We've also published new guidelines to help you design high-performing, easy-to-use apps.

Publish your apps in the G Suite Marketplace

October 10, 2018

You can now use the G Suite Marketplace to quickly share apps with other users in your domain. Learn more about how to prepare your app for publishing, and ask a G Suite administrator to publish your app.

Cloud SQL transaction API

September 6, 2018

With today's release, we're adding a new API you can use to control transactions in Cloud SQL models. Previously each data modification operation in server scripts (like app.saveRecords() or app.deleteRecords()) was performed in its own transaction. Now you can group multiple operations in a common transaction, define the level of isolation for the transaction, and set lock mode for records.

To learn more, see the server API documentation. We've also published a brief code sample.

A change in the way you work with foreign keys

June 14, 2018

In effort to reduce complexity and make it easier to work with databases, we're removing foreign keys from certain parts of App Maker. We now recommend that you use the Relation API to modify foreign keys.

With today's release you can no longer:

  • Display or modify foreign key fields in newly created Table and Form widgets.
  • Create data bindings with foreign keys.
  • Create or modify foreign keys in server and client scripts.
  • Export foreign keys when exporting a single model.
  • Import foreign keys when importing a single model.

This change should have no effect on your existing apps. You may see warnings if App Maker detects invalid bindings. However, your apps will continue to function as expected. Should your app generate warnings, we recommend you take the opportunity to update your apps so they're ready when foreign keys are fully deprecated in a future release.

Add custom error messages to scripts

Previously App Maker suppressed some error messages that occurred in server scripts because the errors might expose sensitive information to an app's end users. You can now use app.ManagedError to propagate custom error messages from server scripts to client-side code. Use these error messages to provide helpful information when users encounter a problem with your app.

Introducing Google Cloud SQL default instances

April 4, 2018

Upgrade your apps that use Drive Tables to Google Cloud SQL

We recommend you use Google Cloud SQL to store and organize your app data. Cloud SQL is a reliable, easy-to-use service that delivers fully managed SQL databases in the cloud. App Maker supports two types of Cloud SQL instances:

  • Default—a G Suite administrator can set up a Google Cloud SQL instance that is shared among App Maker apps in an organization. When this is enabled, a new database is automatically created whenever you add a Cloud SQL data model to an app. Choose this option if your app needs a database that requires no set up and is easy to use.

  • Custom—Once your administrator sets up a default Cloud SQL instance, you can also set up your own Cloud SQL instance. Choose this option when:

    • your application serves a large number of users or stores a large amount of data.
    • the database must be shared with other applications.
    • you need to manage the database or retain control of the Cloud SQL instance.

With today's release, new apps can't create Drive Table data models. Existing apps can continue to use Drive Tables, as well as create new Drive Tables. However, we recommend you upgrade your models to Cloud SQL as soon as possible.

If you're not ready to upgrade yet, we'll give you sufficient notice and guidance before we fully deprecate Drive Tables.

External data sources

While Cloud SQL is the preferred model for storing app data, you can also build apps that don't use it. Depending on the needs of your app, you can:

  • use an external MySQL database–your app can use JDBC to connect to a MySQL database that resides outside Google Cloud Platform.
  • call REST services–you can deploy an app that uses HTML requests and REpresentational State Transfer (REST) APIs to retrieve data from third-party services.

We've published two sample apps that show you how to build this functionality into your own apps. Learn more about external data options.

Four new samples

This release includes new samples:

  • External database and REST to demonstrate how to build apps that don't need a Cloud SQL database.
  • URL shortener to show how to receive and shorten URLs submitted by users.
  • Email PDF to show how to build an app that takes a user submission, converts it to a PDF, and emails it to the user.

Support for time zones

Before today's release, all App Maker apps used the Pacific Time Zone. You can now set the time zone for your app in Settings settings chevron_right App Settings

This setting controls the time zone used by the server. Client scripts will continue to use the time zone reported by the user's browser.

Apps you created before today continue to use the Pacific Time Zone until you set a new time zone. New apps will default to UTC.

App Maker adds Google Cloud SQL as its default database

December 19, 2017

Your G Suite administrator can now set up a Google Cloud instance for your entire domain. Once your admin has enabled Google Cloud SQL, you can quickly add new SQL models to your app without the need to create databases. App Maker's new default Google Cloud SQL databases provide all the benefits that come with SQL.

With this change, there are now two types of Google Cloud SQL databases:

  • Default (recommended)—Your domain administrator has pre-configured Google Cloud SQL. Choose this option if:

    • your app needs a database that requires no set up and is easy to use.
  • Custom—Choose this option if:

    • your application serves a large number of users or stores a large amount of data.
    • the database must be shared with other applications.
    • you need to access the Google Cloud Console or to use other management tools.

Learn more about switching between default and custom Google Cloud SQL databases.

New applications use Google Cloud SQL

Once your G Suite administrator enables Google Cloud SQL, all new models are created with databases in the default SQL instance. We continue to support existing apps with Drive Table models, but we encourage you to upgrade those apps to Google Cloud SQL:

  1. Open your app and navigate to Settings settings chevron_right Data model type.
  2. Click Upgrade to Google Cloud SQL.

December 7, 2017

Today's release adds the following features:

Preconfigured popup dialogs

Quickly create different types of modal and non-modal dialog boxes. Previously you had to use pages and page fragments to build custom in-app notifications.

New model events

You can now configure events to occur after the client creates or modifies a record, but before the server saves the change. We also renamed existing events to better distinguish them from new events. This change is backward compatible with your current apps.

Learn more about events.

Server-side model metadata

We've updated the API to enable server scripts to access model metadata.

Import and export relations

November 9, 2017

You can now import and export all app data and relations. Learn more about how App Maker handles relations:

  • Imports—note how App Maker handles keys when you import from a SQL database.
  • Exports—to see how App Maker writes associations to a Google Sheet when an export includes one-to-many and many-to-many relations.

Important changes to App Maker and Google Cloud SQL

October 9, 2017

This week's release brings changes that affect how you use App Maker and Google Cloud SQL.

Improved support for time zones in Google Cloud SQL models

Previously App Maker handled time zones differently depending on whether an app was running as the developer or as a user. Once you preview or deploy a new version of your app, App Maker handles SQL types related to time in a different way:

  • If your app runs as developer, TIMESTAMP values are read and written as they appear in the database. In earlier releases, a bug caused timestamp values to be off by 7 to 8 hours.

  • If your app runs as user, DATE and DATETIME values are read and written in Pacific time.

With this change, time zones are now handled consistently in apps that run as the developer and apps that run as the user.

Update your time-based data types

To ensure proper handling of time zones, you may need to update affected values in Cloud SQL models.

You need to update existing values and parameters if:

  • Your app runs as developer, and the database has TIMESTAMP values.
  • Your app runs as the user, and the database has DATE or DATETIME values.

To make the necessary updates:

  • Fields—Use the SQL console or other SQL client to adjust affected time- and date-based field values accordingly.

  • Calculated model datasource query parameters—You can now set the type in the model's Datasources tab:

Changes to the user interface

We've removed some of the color from the App Maker interface. The new interface is more consistent with the design used in other Google products, and the use of a single color helps to highlight important buttons and controls. It also ensures your app is the center of attention and reduces color clashes if your apps use a different color scheme.

Apply styles to individual pages

You can now customize individual pages with CSS. Page-level CSS settings always override conflicting global styles.

Corporate Store template, Images sample, and other new features

September 22, 2017

We've added the following new features over the past several weeks:

  • The Corporate Store template.
  • An Images sample that shows how to let users choose images from Google Drive and display them in the app.
  • Drive Tables with any-to-one relations are now sortable.
  • Many, many bug fixes.

Document sample and an addition to the Client API

July 31, 2017

This release adds the following to App Maker:

  • A new sample app that demonstrates how to create and add text to a Google Doc.

  • An addition to the client API that you can use to determine whether an app user has a specific role.

App Maker apps are embeddable

July 13, 2017

This week's release adds the following new feature:

  • You can now embed App Maker apps in an iFrame. To use this feature, enable it in App Settings.

New template and new shortcut

June 28, 2017

This week's release adds the following:

  • A new template for travel approval apps.

  • A keyboard shortcut (F9) that previews the app you're editing.

Calendar sample and deployment URL improvements

June 23, 2017

This week's release adds the following:

  • We've posted a new sample that demonstrates how to read and write data to a user's Google Calendar.

  • The URL for accessing each deployment is more prominent. We also added a copy to clipboard button to make sharing easier.

  • Fixed bugs.

Spreadsheets sample

June 16, 2017

In addition to bug fixes, this week's release includes a sample that shows you how to use scripts to read and write data in a Google Sheet.

Easier deployment sharing and the ability to select tables and cells

June 7, 2017

Today's release brings the following improvements:

  • We added the URL to each deployment so you can easily navigate to it or share it with others.

  • Scripts can now use the selectedRow property in accordion and list widgets and the selectedCell property in a grid widget. Use these properties to perform operations on the selected item.

  • We fixed approximately 30 bugs.

Google Cloud SQL apps can run as user and other improvements

June 6, 2017

We've released several features and improvements in recent weeks.

Google Cloud SQL

Apps with Google Cloud SQL models can now run as the end user.

App Accessibility
  • Announce API—you can make your app provide important information to users who need a screen reader. Announcements could include events or content changes that aren't apparent to the visually impaired. Add the following where needed to your app's client scripts:

    app.accessibility.announce("Hello world!");

  • ariaLabel property—use it to add text that describes the content of a widget. The text is read aloud to users of your app who rely on screen readers.

Scripts
  • Added app.getRoleMembers() to server scripts. It returns all members that belong to the specified role. It doesn't return individual members of a group that you've added to a role.

  • Added code completion to google.script.run.

  • It's easier to comment out code in the script editor:

    • single line—click anywhere on the line and type Ctrl + /
    • multiple lines—select a block of text and type Ctrl + Alt + /

      The same key combinations remove comment indicators from selected text.

Templates
Sample apps
Miscellaneous
  • You can now use the main menu to make a copy of the current app.

  • We've fixed many bugs!

Improved security for data queries involving relations

May 3, 2017

We're changing the way App Maker handles permissions in data models:

  • App Maker now verifies the permissions of non-Admin users when they query records. For query scripts, App Maker applies ownership filters to the query and checks the permissions of results before returning them to the user.
  • When a non-Admin user requests records that have a relation, App Maker checks the load permission for the records. If the user doesn't have access to all of the models in the relation, the query is denied.
  • You can assign Owner or Roles permission to models. Use this to provide access to the user who created the data, plus a group of users such as HR.
  • App Maker now supports filtering and sorting of all relations. Previously you could filter only one-to-one and many-to-one relations.

To ensure backward compatibility with deployed apps, we recommend the following:

  • Ensure all models that contain confidential data are secure.
  • Verify the Load permissions for models involved in relations and ensure non-Admin users have correct access.

New features for controlling widgets

February 23, 2017

Today's release gives you more control over page layout and how widgets are displayed:

  • It's now easier to resize a table and to add, delete, or move its columns. Your existing tables aren't affected by this change.
  • You can control how invisible widgets affect a page:

    • absent—When a widget is not visible, it doesn't take up any space. This is equivalent to the CSS rule display:none.
    • hidden—When a widget is not visible, it is hidden but still takes up space. This is equivalent to the CSS rule visibility:hidden.

  • The right sidebar now includes additional settings for controlling a widget's margins and padding.

List fields are deprecated in Drive Tables

February 2, 2017

Support for list fields is deprecated in Drive Tables. You can continue to use list fields in Calculated and Directory models.

For Drive Tables, relations are an alternative to list fields.

Results of this deprecation are:

  • When you open an app that has list fields in Drive Tables, the App Maker Editor displays warnings.
  • You can preview and publish apps that have list fields in Drive Tables, and the apps and list fields will work.
  • You can't add list fields in a new app or existing app.
  • If you delete a list field, you can add it back by reverting to a revision of the app that has the list field.
  • Both data import and export continue to support list fields in Drive Tables.

In the future, App Maker will add support for any-to-many relation filtering, which permits equivalent filtering to that possible with list fields.

Convert list fields to relations

Converting list fields to relations is a manual process, and it's different for each deployment. The general steps are:

  1. Add a new table that contains the list values.
  2. Add a one-to-many relation from the table that contains the list values to the new table.
  3. On each page that uses a list value, add widgets to display all of the list values and values for the newly added relations.
  4. Ensure each row that has a list value also has a relation value added.
  5. Remove the list fields from the tables and pages of your app.

Eager deletion of records

February 2, 2017

Records deleted through datasource.deleteItem() are now eagerly deleted on the client. When datasource.deleteItem() is called, the current item is immediately removed from the client, instead of being removed when the call returns from the server. The callback is still invoked, and can be used to do any processing needed in case of a failure or success. In the event of a server failure, the deleted record and its associations are restored.

Here is an example of the deleteItem method with the optional callback:

datasource.deleteItem({
  success: function () {
    console.info("Deleted current datasource record.");
  },
  failure: function (error) {
    console.info("Failed to delete current datasource record: " + error);
  }
});

Support for Second Generation instances of Google Cloud SQL and additional fields in the Directory Model

January 20, 2017

You can now connect App Maker to Second Generation instances of Google Cloud SQL.

Additionally, the Directory model supports new fields:

  • WorkPhones
  • HomePhones
  • MobilePhones
  • HomeAddresses
  • WorkAddresses
  • CustomEmail
  • PrimaryOrganizationDescription
  • PrmaryOrganizationCostCenter

List fields—Store an array of data in a single field

January 4, 2017

List fields can contain more than one value, stored in records as arrays. App Maker fetches the data in a list field with the record that contains the field, and deletes the data if the record is deleted.

Data types for list fields are List<String>, List<Number>, List<Boolean>, and List<Date>.

With scripts, you have full control over the data that goes into and comes out of list fields. Some widgets also support list fields. There are special syntaxes for user data entry and for import/export.

Examples

  • With a multi select widget on an Interests page, a user might choose one interest or seven. You could store the choices in a list field.
  • A user might enter more than one email address.
  • A monitoring process or experiment might generate variable amounts of data.

Draft record is deprecated, replaced by Create mode

January 4, 2017

In order to improve the form experience in App Maker, we have deprecated the draft record and replaced it with a more flexible solution—a new datasource mode called Create.

This change will affect your existing insert forms and other places you might have used draft records. To convert your widgets, please follow one of the two options below:

Option 1: Delete your insert form and drag out a new one

This is the easiest way to update your forms and is recommend for forms with little customization.

  1. Delete the old form.
  2. Drag out a new form.

The new form's bindings and actions will use a Create datasource.

Option 2: Manually update your forms or other widgets

Use this method if you have customized your forms or have used the draft record in other places.

We've put together a short demo video that shows you to quickly update your widgets.

  1. Update your widget's datasource to use the create mode datasource:
    1. Select your widget.
    2. In the Property Editor, navigate to your widget's datasource.
    3. Click its Edit box.
    4. Select "<Datasource Name> (create)" in the dialog that pops up.
  2. Update your widget's field bindings:
    1. Select each widget that is bound to a field.
    2. In the Property Editor, change the field's value binding from "datasource.draft..." to "datasource.item...".
  3. Update the Clear button's onClick action:
    1. Select the Clear button.
    2. In the Property Editor, change the button's onClick action from widget.datasource.clearDraft(); to widget.datasource.clearChanges();.

How does this change improve App Maker?

  • This change also allows insert forms to be created for datasources in manual save mode.
  • To change new forms from edit to insert, you simply need to change the datasource's binding from datasourceName to datasourceName.modes.create. (Prior to this, you needed to change the field bindings from "draft" to "item" or vice versa.)
  • You can use a page fragment to create cohesive insert and edit forms. Here's a sample app that shows you how it's done.

You can read more about the Create Mode Datasource in the Client API and datasource reference.

App Maker can't authenticate with second generation Cloud SQL instances

December 15, 2016

App Maker is currently unable to authenticate with second generation instances of Google Cloud SQL. You can create a first generation instance now and migrate it to second generation when this issue is resolved.

New widgets, templates, and advanced services

December 1, 2016

App Maker now supports:

  • Drive picker—A new widget that lets users find files in Drive and upload them to your app. This widget requires the app to run as user.

  • User picker—A new widget that lets users find other members of your domain. It requires the directory model, which provides access to your domain's G Suite directory.

  • Document Approval template—A custom app you can use to create workflows for document approval.

  • People Viewer template—A custom app that uses the Directory model and other data sources to view people in your organization.

  • Advanced Google Services—A group of APIs you can call from your app to interact with user data, other Google systems, and external systems. See the list of services supported by App Maker for additional details.