@esfaenza/flow-builder 20.3.56 → 20.3.58
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +35 -10
- package/fesm2022/esfaenza-flow-builder.mjs +491 -61
- package/fesm2022/esfaenza-flow-builder.mjs.map +1 -1
- package/index.d.ts +224 -25
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -173,7 +173,8 @@ sono opzionali e rifiutano con `MissingService` se non sovrascritti.
|
|
|
173
173
|
|
|
174
174
|
**Errori.** Ogni metodo, in caso di rifiuto, deve fallire con un `FlowApiError`
|
|
175
175
|
categorizzato (§10). L'editor si comporta in base alla `category`, mai leggendo il
|
|
176
|
-
messaggio: `NotEditable`
|
|
176
|
+
messaggio: `NotEditable` (la versione e' **diventata** quella attiva) rilegge l'elenco versioni,
|
|
177
|
+
e da lì compare «Nuova versione» al posto di «Salva»,
|
|
177
178
|
`VersionConflict` apre il banner con «ricarica» / «salva come nuova versione»,
|
|
178
179
|
`ValidationFailed` apre il pannello dei problemi con il payload.
|
|
179
180
|
|
|
@@ -532,7 +533,8 @@ cose che un editor ingenuo sbaglia lasciandole comporre per poi accusarle:
|
|
|
532
533
|
`fieldType` dentro una riga non offre la sezione ripetibile (non si annidano: il cursore e' una
|
|
533
534
|
variabile sola per sezione) e la spunta degli output automatici di un `ComponentInstance` sparisce
|
|
534
535
|
— si esporrebbero come `<NomeCampo>.<NomeOutput>`, cioe' **una risorsa sola per tutte le righe**.
|
|
535
|
-
|
|
536
|
+
Un campo di riga **compare** invece fra gli inneschi di una screen action, che allora gira per riga
|
|
537
|
+
(vedi *Screen action*, sotto);
|
|
536
538
|
- **`memberName` e il riferimento sono la stessa domanda posta due volte.** `memberName: "PodId"` e
|
|
537
539
|
`PuntoCorrente.PodId` sono lo stesso membro, e la classe da cui vengono e' l'`objectType` della
|
|
538
540
|
variabile in `collectionReference`: il campo si sceglie da `<fb-structure-member-picker>` con
|
|
@@ -591,9 +593,9 @@ Tre cose che il form mette a posto:
|
|
|
591
593
|
`IsEmpty` su una collection e' un operatore che il runtime valuta, mentre la stessa domanda in una
|
|
592
594
|
formula chiede al motore una funzione che potrebbe non avere. `Formula` resta un `conditionLogic`
|
|
593
595
|
ammesso — qui sì, a differenza di un `filterLogic` — quindi l'editor la offre lo stesso;
|
|
594
|
-
- il `fieldName` facoltativo pesca dai campi della schermata **senza quelli dentro una riga**:
|
|
595
|
-
|
|
596
|
-
|
|
596
|
+
- il `fieldName` facoltativo pesca dai campi della schermata **senza quelli dentro una riga**: un
|
|
597
|
+
campo che esiste in una copia per elemento non individua un controllo a cui agganciare il
|
|
598
|
+
messaggio. Non e' l'elenco degli inneschi, che i campi di riga li comprende.
|
|
597
599
|
|
|
598
600
|
**Screen action (§5.2).** Un campo che l'utente compila puo' **innescare un'action** i cui risultati
|
|
599
601
|
finiscono negli altri campi della stessa schermata: e' il caso «scrivi il codice fiscale e nome e
|
|
@@ -603,7 +605,7 @@ campi), in **due** elenchi che il contratto tiene separati — `actions` e `trig
|
|
|
603
605
|
trigger possono invocare la stessa action. Identificazione e parametri sono quelli di un elemento
|
|
604
606
|
Action, `ACTION_UNKNOWN` e `PARAMETER_UNKNOWN` compresi.
|
|
605
607
|
|
|
606
|
-
Le
|
|
608
|
+
Le cose che riguardano l'editor, e non il runtime:
|
|
607
609
|
|
|
608
610
|
- **il picker della destinazione e' allargato qui e solo qui.** L'`assignToReference` di un output
|
|
609
611
|
accetta anche i **campi di questa schermata**, che ovunque altrove sono di sola lettura:
|
|
@@ -623,7 +625,19 @@ Le tre cose che riguardano l'editor, e non il runtime:
|
|
|
623
625
|
`runOnRevisit` della specifica Salesforce e' `SCREEN_TRIGGER_INIT_BEHAVIOR_UNKNOWN`, e vale la
|
|
624
626
|
pena saperlo perche' chi arriva da quella specifica lo scrive per abitudine. Dove il campo
|
|
625
627
|
osservato ha un `defaultValue` il form dice che `runOnLoad` **non serve**: un campo precompilato
|
|
626
|
-
dal flow conta come un campo che ha preso un valore, e l'action gira comunque all'arrivo
|
|
628
|
+
dal flow conta come un campo che ha preso un valore, e l'action gira comunque all'arrivo;
|
|
629
|
+
- **un trigger puo' osservare un campo di riga**, e allora l'action gira **per ogni riga** in cui
|
|
630
|
+
quel campo e' cambiato (*Una screen action per ogni riga*). `triggerFieldName` e' l'unico posto in
|
|
631
|
+
cui il nome di un campo di riga si scrive, perche' nomina un campo e non un riferimento: condizioni,
|
|
632
|
+
input e output nominano la riga attraverso il **cursore** (`PuntoLuce.ProductId`), e i selettori lo
|
|
633
|
+
propongono per primo. Da quel momento le destinazioni dipendono da **chi** invoca l'action, e le
|
|
634
|
+
sbagliate sono `SCREEN_ACTION_ROW_TARGET_INVALID`: da un trigger di riga il cursore intero, la
|
|
635
|
+
collection delle righe, le righe di un'altra sezione e l'output automatico (che l'editor non
|
|
636
|
+
propone nemmeno); da uno di primo livello il cursore, che fuori dalla riga non porta nessuna riga.
|
|
637
|
+
Il rilievo sta sull'output e nomina il trigger, perche' con due trigger — uno di riga e uno no —
|
|
638
|
+
la stessa destinazione e' giusta per l'uno e sbagliata per l'altro. La regola e'
|
|
639
|
+
`screenActionRowTargetIssues` (`core/screen-field.util.ts`), e la applica anche il validatore
|
|
640
|
+
della demo.
|
|
627
641
|
|
|
628
642
|
Le action si aprono **una alla volta**: i cataloghi delle action e dei loro parametri dipendono da
|
|
629
643
|
`actionType`/`actionName`, e tenerne N in volo sarebbe N volte la corsa fra risposte che l'inspector
|
|
@@ -948,9 +962,20 @@ esegue il flow, e cambiarlo su un documento già scritto lo lascia pieno di rife
|
|
|
948
962
|
da quel momento non esistono — senza che nessuna primitiva del backend rimedi. Un host che crea i
|
|
949
963
|
flow da sé (come la demo) il tipo lo chiede lì, e lo passa a `emptyFlowDefinition`.
|
|
950
964
|
|
|
951
|
-
**Versioni.** Elenco con stato, «Nuova versione» al posto di «Salva»
|
|
952
|
-
attivazione bloccata finche' ci sono errori, eliminazione dietro
|
|
953
|
-
spiega il rischio per le esecuzioni sospese.
|
|
965
|
+
**Versioni.** Elenco con stato, «Nuova versione» al posto di «Salva» sulla versione **attiva** —
|
|
966
|
+
l'unica che non si modifica (§8) — attivazione bloccata finche' ci sono errori, eliminazione dietro
|
|
967
|
+
una conferma esplicita che spiega il rischio per le esecuzioni sospese.
|
|
968
|
+
|
|
969
|
+
Una versione **superata** si modifica come una bozza, ma non e' la stessa cosa, e le differenze
|
|
970
|
+
sono tre. Salvata **torna bozza** (lo dice lo `status` della risposta), quindi per rimetterla in
|
|
971
|
+
produzione va riattivata. Si sovrascrive solo **mandandone il numero**: un salvataggio senza
|
|
972
|
+
`version` non la sceglie mai — ed e' una ragione in piu' per cui l'editor il numero lo manda sempre.
|
|
973
|
+
E il **primo salvataggio si conferma**: un'esecuzione sospesa nata quando quella versione era
|
|
974
|
+
attiva riprende sulla definizione modificata, e se il node su cui era ferma non c'e' piu' fallisce —
|
|
975
|
+
il backend non puo' saperlo al posto di chi salva. La barra della conferma offre anche «Salva come
|
|
976
|
+
nuova versione», che lascia la superata com'era. `isEditable` vale per tutt'e due i casi, e non va
|
|
977
|
+
letto come «e' una bozza»: per quello c'e' `status`, come `hasDraft` nell'elenco dei flow conta le
|
|
978
|
+
sole bozze.
|
|
954
979
|
|
|
955
980
|
**Eliminare il flow intero e' dell'ospite.** Il pannello versioni si ferma alla **versione**: il
|
|
956
981
|
flow lo toglie chi integra, perche' il builder edita un flow già aperto e l'elenco da cui toglierlo
|