Write a row to DB on UI load?

Certified Lead Developer

I would like to have an interface that, when it is accessed/loaded/refreshed by user, will write a row to a table in the database.

Is this possible?

 

Idea: Perhaps by using a!writeToDataStoreEntity, or a!startProcess? But it seems that these do not work outside of a "button click" by the user. Trying to add it outside of a button is giving me errors like this one:

Could not display interface. Please check definition and inputs. Interface Definition: Expression evaluation error : Cannot create context for UI expression. Reason: A value of type "Reaction Tree" was stored in the variable "write", but values of this type cannot be stored in SAIL context variables. Use a with() variable or change the type of this value.

Thank you in advance for any ideas or advice!

  Discussion posts and replies are publicly visible

Parents Reply Children
  • +1
    Certified Lead Developer
    in reply to Shanmukha
    You're not going to be able to call an a!httpWrite() or an integration rule that POSTs data from a load(), those have to be bound to buttons/links with bind() or called from a saveInto(). User action is required to trigger something like this.
  • +1
    Certified Lead Developer
    in reply to Jim Schweitzer

    Dear Jim and Raghavendra,

    Thank you very much for your inputs! Thanks to your input, I was able to accomplish this using a workaround making use of some of the suggestions mentioned. While, as Jim mentioned, it is not possible to use POST requests without user trigger/click, I was able to find a workaround by making a GET request to a custom Google Apps Script (external web service), then using that to add the row to a DB (it acts as a POST request). I ended up writing to an external DB instead (but if I needed to write to an internal DB, I would have called the Web API from Google Apps Script to write back to Appian, as Raghavendra suggested). The code in the UI looks like this:

    load(
    local!temp: a!httpQuery(
    url: urlwithparameters("script.google.com/.../exec",
    {[parameter names here]},
    {[parameter values here]})
    ),
    {}
    )

    For anyone trying to accomplish this, the Google Apps Script code is quite simple; basically is using the doGet method detailed here:

    developers.google.com/.../web


    Thank you again, Jim and Raghavendra!
    Agustin