Inter-App Communication Callback Reference¶
This topic describes the callbacks that are available for inter-app communication.
The following categories of callbacks are provided for inter-app communication:
Configuration Callbacks¶
These callbacks are triggered when a configuration changes.
validate_configuration_change¶
This callback is a synchronous callback.
This callback is called as part of ALTER APPLICATION SET CONFIGURATION VALUE command.
This callback lets the app perform additional custom validation on the value provided by the
server app. If the callback fails, such as with a syntax error, or if the callback returns and error, the set command fails and the new value is not set.
Signature¶
validate_configuration_change(configuration_name, configuration_value)
Parameters¶
configuration_name: The name of the configuration object.configuration_value: The value provided by the server app.
Return value¶
The callback must return a string in the following JSON format to indicate a validation success or error.
{
"type": "SUCCESS | ERROR",
"payload":{
"error_message": "Error message indicating the validation failure"
}
}
If the function returns a type of ERROR, the error message is returned as part of the SQL
error message of the SET command. If the function returns a type of SUCCESS, the
error message is ignored.
before_configuration_change¶
This callback is a synchronous callback.
This callback is called as part of ALTER APPLICATION SET CONFIGURATION VALUE
and ALTER APPLICATION UNSET CONFIGURATION commands. This callback lets the app
perform further operations based on the configuration value set. The value passed into
the callback is null for the ALTER APPLICATION UNSET CONFIGURATION command.
Signature¶
before_configuration_change(configuration_name, configuration_value)
Parameters¶
configuration_name: The name of the configuration object.configuration_value: The value provided by the server app.
Return value¶
The return value of the callback is ignored.
after_configuration_change¶
This callback is an asynchronous callback.
This callback is called after the ALTER APPLICATION SET CONFIGURATION VALUE
and ALTER APPLICATION UNSET CONFIGURATION commands complete. This callback lets the
client app be notified when a value is provided by the server app.
Signature¶
after_configuration_change(configuration_name)
Parameters¶
configuration_name: The name of the configuration object.
Retrieving the latest state¶
In the callback, the following code snippet can be used to retrieve the current status and value of the configuration:
session.sql(f"""
SHOW CONFIGURATIONS ->>
SELECT "status", "value"
FROM $1
WHERE "name" = '{configuration_name}';
""");
Connection Callbacks¶
These callbacks are triggered when a connection’s status changes.
after_server_connection_change¶
This callback is an asynchronous callback.
This callback is called after the ALTER APPLICATION APPROVE SPECIFICATION
or ALTER APPLICATION DECLINE SPECIFICATION command completes. This callback
lets the client app be notified when the connection to a server app has been changed,
such as when a new connection is established, or the connection to the server is broken.
Signature¶
after_server_connection_change(server_name)
Parameters¶
server_name: The name of the server app for which the connection has been changed.
Retrieving the latest state¶
In the callback, the following code snippet retrieves the current connection status to the server app:
session.sql(f"""
SHOW SPECIFICATIONS ->>
SELECT "status"
FROM $1
WHERE PARSE_JSON("definition"):"SERVER_APPLICATION"::STRING = '{server_name}';
""");
after_client_connection_change¶
This callback is an asynchronous callback.
This callback is called after the ALTER APPLICATION APPROVE SPECIFICATION
or ALTER APPLICATION DECLINE SPECIFICATION command completes. This callback
lets the server app be notified when one of its clients has changed,
such as when a new connection is established, or the client drops the connection.
Signature¶
after_client_connection_change(client_name)
Parameters¶
client_name: The name of the client app for which the connection has been changed.
Retrieving the latest state¶
In the callback, the following code snippet can be used to retrieve what roles, if any, have been granted to the client app:
session.sql(f"""
SHOW GRANTS TO APPLICATION {client_name} ->>
SELECT "name"
FROM $1
WHERE "granted_on" = 'APPLICATION_ROLE'
AND STARTSWITH("name", CURRENT_DATABASE())
""");
Specification Callbacks¶
These callbacks are triggered when a connection specification or app version changes.
after_server_version_changeafter_specification_change
after_server_version_change¶
This callback is an asynchronous callback. This callback is called after the server app’s version or patch number changes. This lets the client app react to the upgrade or downgrade.
Signature¶
after_server_version_change(server_name)
Parameters¶
server_name: The name of the server app for which the version has changed.
Retrieving the latest state¶
In the callback, the following code snippet can be used to retrieve the current version of the server app:
session.sql(f"""
SHOW APPLICATIONS ->>
SELECT "version", "patch"
FROM $1
WHERE "name" = {server_name}
""");
after_specification_change¶
This callback is an asynchronous callback.
This callback is called after the ALTER APPLICATION APPROVE SPECIFICATION or ALTER APPLICATION DECLINE SPECIFICATION commands complete. This callback
lets the server app be notified when a new specification has been created or updated.
For inter-app communication, this callback replaces the functionality of the specification_action callback.
You can only specify one of after_specification_change or specification_action in the manifest file.
For information about the specification_action callback, see Using callback functions with app specifications.
Signature¶
after_specification_change(spec_name)
Parameters¶
spec_name: The name of the application specification that has been approved or declined.
Retrieving the latest state¶
In the callback, the following code snippet can be used to retrieve the current status of the specification:
session.sql(f"""
SHOW SPECIFICATIONS ->>
SELECT "status"
FROM $1
WHERE "name" = '{spec_name}';
""");