@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 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` fa comparire «Nuova versione» al posto di «Salva»,
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
- Per lo stesso motivo un campo di riga non compare fra gli inneschi di una screen action;
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**: lo
595
- stesso elenco degli inneschi, e per la stessa ragione — un campo che esiste in una copia per
596
- elemento non individua un controllo a cui agganciare il messaggio.
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 tre cose che riguardano l'editor, e non il runtime:
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» sulle versioni chiuse,
952
- attivazione bloccata finche' ci sono errori, eliminazione dietro una conferma esplicita che
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