A partire dalla versione di Livebase 5.6.2, lo schema GraphQL offre dei servizi per invocare FormActionHandler e gestirne il messaggio di ritorno. È possibile invocare un FormActionHandler passando al servizio una form in un contesto di tipo Create, Update o Save (scrittura generica), tra gli scenari descritti nei servizi di scrittura.
I servizi descritti in questa pagina sono tutti di tipo mutation e rispettano il formato <ClassName>___<scenario>___formAction___<HandlerName>; questi vengono generati per ogni FormActionHandler modellato sulla classe.
Modello di riferimento #
Tutti gli esempi in questa pagina fanno riferimento ala classe Employee in figura, e in particolare all’Handler calculateSalary cerchiato in rosso:

La classe Employee, come modellata nel Tutorial, a cui è stato aggiunto l’Handler calculateSalary.
Questo consente di calcolare il salario dell’impiegato secondo diversi criteri, e di aggiornare automaticamente il valore dell’attributo hourly_cost.
Dettaglio: implementazione
Servizio create___formAction #
Il servizio Mutation.<ClassName>___create___formAction___<HandlerName> consente di invocare un FormActionHandler passando il contesto della form di creazione di un nuovo oggetto di una certa classe.
type Mutation {
ClassName___create___formAction___HandlerName(
data: ClassNameDraftCreate
jsonParam: String
forceWarnings: ForceWarnings
): ClassNameFormActionHandlerResult
}
Il servizio accetta in input la struttura <ClassName>DraftCreate e restituisce in output la struttura <ClassName>FormActionResult. È possibile passare informazioni aggiuntive all’Handler (serializzate in JSON) mediante il campo jsonParam: String. Nota che il campo data, a partire dalla versione 5.11.2 di Livebase, è anch’esso opzionale e può non essere valorizzato nella mutation.
È possibile aggirare eventuali warning restituiti dal server causati da Class Warning non bloccanti includendo l’argomento forceWarnings, di tipo ForceWarnings.
Ad esempio, il servizio per invocare l’Handler calculateSalary di Employee in un contesto di Create è il seguente:
type Mutation {
Employee___create___formAction___calculateSalary(
data: EmployeeDraftCreate
jsonParam: String
forceWarnings: ForceWarnings
): EmployeeFormActionHandlerResult
}
Servizio update___formAction #
Il servizio Mutation.<ClassName>___update___formAction___<HandlerName> consente di invocare un FormActionHandler passando il contesto della form di modifica di un oggetto esistente di una certa classe.
type Mutation {
ClassName___update___formAction___HandlerName(
data: ClassNameDraftUpdate
jsonParam: String
forceWarnings: ForceWarnings
): ClassNameFormActionHandlerResult
}
Il servizio accetta in input la struttura <ClassName>DraftUpdate e restituisce in output la struttura <ClassName>FormActionResult. È possibile passare informazioni aggiuntive all’Handler (serializzate in JSON) mediante il campo jsonParam: String. Nota che il campo data, a partire dalla versione 5.11.2 di Livebase, è anch’esso opzionale e può non essere valorizzato nella mutation.
È possibile aggirare eventuali warning restituiti dal server causati da Class Warning non bloccanti includendo l’argomento forceWarnings, di tipo ForceWarnings.
Ad esempio, il servizio per invocare l’Handler calculateSalary di Employee in un contesto di Update è il seguente:
type Mutation {
Employee___update___formAction___calculateSalary(
data: EmployeeDraftUpdate
jsonParam: String
forceWarnings: ForceWarnings
): EmployeeFormActionHandlerResult
}
Servizio formAction #
Il servizio Mutation.<ClassName>___formAction___<HandlerName> consente di invocare un FormActionHandler passando il contesto di una form di scrittura generica su una certa classe.
type Mutation {
ClassName___formAction___HandlerName(
data: ClassNameDraft
jsonParam: String
forceWarnings: ForceWarnings
): ClassNameFormActionHandlerResult
}
Il servizio accetta in input la struttura <ClassName>Draft e restituisce in output la struttura <ClassName>FormActionResult. È possibile passare informazioni aggiuntive all’Handler (serializzate in JSON) mediante il campo jsonParam: String. Nota che il campo data, a partire dalla versione 5.11.2 di Livebase, è anch’esso opzionale e può non essere valorizzato nella mutation.
È possibile aggirare eventuali warning restituiti dal server causati da Class Warning non bloccanti includendo l’argomento forceWarnings, di tipo ForceWarnings.
Ad esempio, il servizio per invocare l’Handler calculateSalary di Employee in un contesto di Create o Update è il seguente:
type Mutation {
Employee___formAction___calculateSalary(
data: EmployeeDraft
jsonParam: String
forceWarnings: ForceWarnings
): EmployeeFormActionHandlerResult
}
FormActionHandler con classi Form in input #
Per i FormActionHandler a cui è assegnata una classe Form (Set form... su menu contestuale del FormActionHandler, come descritto nella reference sulle classi Form e nella guida sviluppo Plugin), viene generato un argomento ulteriore nei servizi GraphQL: formParam, il cui tipo è la struttura di input relativa alla classe Form puntata dall’Handler. Questo argomento, quando presente, è required.
A seconda del contesto del servizio (rispettivamente Create o scrittura generica), il tipo di formParam può essere:
- per
create___formAction:<FormClassName>DraftCreate, analogo a<ClassName>DraftCreate; - per
formActiongenerico:<FormClassName>Draft, analogo a<ClassName>Draft.
Ad esempio, la signature del servizio formAction generico diventa la seguente:
type Mutation {
ClassName___formAction___HandlerName(
data: ClassNameDraft
formParam: FormClassNameDraft!
jsonParam: String
forceWarnings: ForceWarnings
): ClassNameFormActionHandlerResult
}type <ClassName>FormActionHandlerResult #
Tutti i servizi menzionati finora ritornano la seguente struttura <ClassName>FormActionHandlerResult:
type ClassNameFormActionHandlerResult {
data: ClassName # oggetto corrente su cui è stato invocato l'handler, eventualmente alterato dal codice del plugin
result: FormActionHandlerResult!
}
Il campo data contiene la struttura <ClassName>; questa rappresenta l’oggetto corrente sui cui è stato invocato il FormActionHandler, eventualmente alterato dal codice del Plugin.
Il campo result contiene una struttura comune, indipendente dal modello, di tipo FormActionHandlerResult. Espandendo questo campo è possibile ottenere informazioni circa il risultato dell’invocazione dell’Handler, che, come descritto qui, può restituire un messaggio informativo, un messaggio di avvertimento o un messaggio d’errore.
type FormActionHandlerResult {
# analogo alla struttura ritornata dal FormActionHandler dello SPI generato
type: FormActionHandlerResultType!
message: FormActionHandlerMessageResult
}
enum FormActionHandlerResultType {
MESSAGE
NONE
}
type FormActionHandlerMessageResult {
type: MessageType!
message: String!
title: String
}
enum MessageType {
ERROR
INFO
WARNING
}