👋 This article is the fourth and final installment in English of the original Spanish post "Descubriendo Google AppSheet en 48 horas", which was previously published on this blog in August 2023.
Part I. Introduction and data
Part II. Tables and the formula language
Part III. Views
Part IV. 🡆 Actions, catch-all section and closing comments 🡄
🙌 Thanks to Christian Schalk for suggesting an English version in the first place and for his help and encouragement along the way.
AppSheet and her good actions
As I reached this point when creating the first Spanish edition of this series on Appsheet during a summer that has since passed and almost faded from memory, I realized it was the right time to expedite my writing and quickly wrap it up.
As I arrived at this stage of producing the initial Spanish version of this series about Appsheet in the midst of a now long-gone and nearly faded summer, it genuinely became apparent to me that it was an appropriate moment to simplify and conclude it swiftly.
Now, some months later and with the temperature just a bit chillier, my sentiments remain largely unchanged at this point in this English version you are reading now.
Therefore, I will touch upon actions in AppSheet only succinctly. This is not due to a belief that the topic is insignificant —quite the opposite. However, it's time to let you embark on your personal exploration of AppSheet and uncover the splendid apps you're destined to create on your own.
As explained in detail in this help article, actions are used to navigate the views in your app, manipulate data, and interact with certain external services available in user's devices.
At the risk of oversimplifying, there are two types of actions:
- We will craft our own user actions, like this one that operates on entries in the Groups table
- Then, there are system actions, which AppSheet auto-generates for each table and view in our application. These include standard navigation tasks like editing, removing, or adding entries, thus saving us the effort of making them manually. For instance, these are the actions I came across immediately after setting up the initial view of my Tutors table.
It is very convenient to have the default navigation actions generated automatically for you. Check out this view in my app displaying the roster of tutors:
In this view, you can see four buttons representing different system actions:
- ✉️ Send an email to the tutor
- 📝 Modify tutor information
- 🗑 Delete tutor
- ➕ Add a new tutor
☝ AppSheet will automatically create a send email action when it detects an email field in the data table the view is based on.
These four actions directly correspond to the four elements (Add, Compose Email, Delete, and Edit) found in the action panel of the Tutors table, as shown in the screenshots two images above.
You're probably starting to put the pieces together now.
But why does the undeniably nerdy guy 🙋♂️ at the end of the list not have this ✉️ button?
Well, that's quite simple. That person —actually me— is the one testing the app at the time of taking the screenshot. Obviously, it doesn't make much sense for a tutor to send an email to himself, no matter how lonely he might feel, don't you think?
You guessed it, in AppSheet it's also possible to make certain actions contextually unavailable. How? Well, you can probably imagine, since we've been doing loads of similar things for a while now.
Let's take a look at the Compose Email action...
...more specifically at its Behavior settings.
AND(NOT(ISBLANK([Email])), USEREMAIL() <> [Email])
Thanks to the behavior settings of this action, we ensure that the icon to activate it will only be displayed when the email address of the user interacting with the app is different from the one stored in the tutor's record. Using the ISBLANK() function, we make sure that this check is meaningful.
I haven't used them this time, but the confirmation options, just below the formula, allow for an additional control that is useful in case of destructive actions or those that may have significant consequences.
The action editor offers additional configuration possibilities, some of which are visual (icon, text)...
...while others are used to specify how the action button should be displayed (as the main button, in the group of highlighted buttons, or in smaller size alongside other elements of the view):
Certainly, there's also the possibility for detailed customization of the selected action. For instance, in sending an email, we can specify the recipient, craft the subject line, and compose the message body, all by utilizing calculated expressions once more.
There's also a text box located at the bottom of the settings panel. Here, we can add notes that give context to the present action, useful for when we revisit it later and might not recall its purpose or other important details.
To conclude this brief overview of AppSheet actions, I must mention that when I tried for the first time to modify the order of the action buttons in a view...
...the sorting panel, akin to the one used for managing views, would open improperly, failing to show the list where action elements are meant to be displayed for dragging them into preferred positions.
The workaround was simple: I switched to the classic editor...
...and clicked the ⚙ Rearrange actions button in the Behavior panel. This seemed to do the trick to persuade the reordering panel of the new editor to behave, which from that moment has been working flawlessly every single time I tried to reorder action items. It was just a random glitch, of course, but I thought it was worth mentioning in case you ever ran into this problem.
The action feature in AppSheet is seriously impressive to say the least, and I'm trying to stay critical throughout this article.
Things yet untold and final comments
If you've made it this far, you're truly a champion. Thank you for spending your valuable time with me on this four-part journey of discovery into AppSheet.
I started writing the original Spanish post on July 10th, but the creative process was cut short a few days later for various reasons. Some months are different than others, you know, and when you encounter one those, it's better to bend like a reed in the wind —as a Bene Gesserit would likely say when confronting a ferocious Harkonnen baron— and let it pass offering no resistance.
When I resumed writing and revising this final section on August 7th, the first day of my summer vacation, and looked over the article again to pick up from where I stopped almost three weeks earlier, I realized even more clearly that this might be one of the most disjointed and fragmented articles I have ever written.
Nevertheless, I felt it was important to release it, as the impression AppSheet made on me nearly a month before remained strong. For me, documenting these experiences in my personal learning environment is crucial, even if the result of my efforts might be quite imperfect to my eyes, as it was the case.
In this concluding part, I'll reveal a compact collection of assorted marvels, considering the many elements of AppSheet that I barely delved into during my intense 48-hour experience with the platform.
For example, I haven't mentioned the numerous intelligent assistants found within the AppSheet editor, which often appear to read your mind.
Or those that enable you to articulate your requirements in natural language:
Nor have I mentioned the powerful features based on machine learning (OCR and predictive models) that you will find in the 💡Intelligence panel of the editor. However, these are only available from the Enterprise Standard plan onwards.
We haven't yet talked about the array of functions available for integrating user information and making decisions using expressions created with AppSheet's formula language in various contexts, some of which we've looked at in this article. Beyond the familiar USEREMAIL() function, there are others like:
And speaking of context-based decision-making, did you know that AppSheet features a range of characteristics that allow defining settings per user?
The system operates on a concealed data table that, nonetheless, functions like a standard one, complete with its own views and similar features. This allows you to create a private personal preferences panel for each user within your app. The values from these preferences can be employed in expressions to determine aspects like behavior, visibility, data access, or to display messages in the user's language, leveraging the remarkable native localization capabilities.
I've also really appreciated how seriously AppSheet takes documenting the apps it helps you create. In addition to the relationship graph and specific spaces for commenting on things like views and actions, it also includes a section where you can record general details about purpose, design, and other reference documents. You can find it at:
⚙Settings → Information → App Documentation
At the end of this section, you'll find this link, which can easily go unnoticed...
...that hides an automatically generated documentation page, where all the implementation details of the app are collected in a surprisingly thorough manner.
But the most notable omissions in this article are undoubtedly those related to automations and Chat apps, two features that I have not yet incorporated into my learning app.
I've just been conducting some preliminary tests with automations. It turns out that as long as the app is in development mode —not yet deployed for normal use in production— it is not possible to send emails to real recipients when executing a workflow.
Instead, simulated emails are sent to the app owner.
That's why I was intrigued by the possibility of invoking an external Apps Script function, which actually performs the email sending, to overcome this limitation.
That sums up my journey with AppSheet automations 😅, yet it's sufficient to recognize their crucial role in this tool. It's akin to having a built-in Zapier or Make within AppSheet, enabling you to execute tasks without coding and without additional costs!
As for developing Chat apps using AppSheet, I don't have any personal experience to share at this time, but I also find it to be an exceptionally appealing value proposition.
In summary, I believe AppSheet is an absolutely fantastic tool that deserves a lot of love and attention. It's evident that it holds significant importance for Google, as demonstrated by the inclusion of the AppSheet Core plan in nine additional editions of Google Workspace since July 17th 🎉 (official announcement).
And if you're not yet ready to subscribe to a paid plan, remember that you can freely use almost all AppSheet's features for personal use and prototype development, with only minor limitations, both in personal as well as corporate accounts.
To conclude, I'd like to reiterate that everything I've shown you throughout these four articles is the result of a quick landing in a complex tool like AppSheet that holds endless nooks and crannies.
Consider this with a grain (or two) of salt, as there might be some inaccuracies in my account, and perhaps some procedures could be executed more accurately or efficiently. As the saying goes in Spain, "nadie nace enseñado" (no one is born taught).
It's your turn now, feel free to share your experiences using AppSheet, the comment box below is all yours 👇💬 .
Infinite kudos to you for staying with me this long, and let me wish you a final and resounding happy appsheeting (for now)! 👋