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:
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
formAction
generico:<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
}