@esfaenza/flow-builder 20.3.11 → 20.3.12

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
@@ -142,6 +142,7 @@ sono opzionali e rifiutano con `MissingService` se non sovrascritti.
142
142
  | `listForms` / `listFormParameters` | astratti |
143
143
  | `listEnumTypes`, `listEvents`, `listSubflowCandidates` | astratti |
144
144
  | `describeObject`, `listFieldValues` | opzionali |
145
+ | `listEnumValues(enumType)` | opzionale — i **valori** di un tipo di enumerazione, cioe' i nomi scrivibili in `enumValue` (§4.2, §4.6). `listEnumTypes` e' l'altra meta' e non basta: quella dice quali tipi esistono, questa quali valori ha un tipo. `enumType` e' esattamente l'`objectType` della risorsa, del parametro o del **membro** di una classe (§4.7.1): la risposta e' del tipo, non del punto di uso, e la cache e' per nome del tipo. Lista vuota = "non lo so" — il valore si scrive a mano, e un tipo sconosciuto risponde vuoto, non 404 |
145
146
  | `listStructures`, `describeStructure(className)` | opzionali — le classi e i loro membri per le risorse `Structure` (§4.7). `listStructures` e' l'**elenco delle classi** senza membri; `describeStructure` restituisce la **descrizione** di una classe (`className`, `label`, `members`), non un array nudo (§4.7.1). Senza, le classi non sono verificabili e il nome si scrive a mano: "non lo so", non "non esiste". I tre esiti sono distinti: `members` popolato = elenco autorevole, `members: []` = membri non dichiarati (si digita, nessuna accusa), rifiuto `StructureNotFound` = classe non registrata (si segnala la **classe**) |
146
147
 
147
148
  | §6.5 Esecuzione | |
@@ -203,6 +204,14 @@ qualsiasi.
203
204
  dalla mappa delle uscite invece di essere «ramo di errore» per tutti: su uno stage di
204
205
  orchestrazione quel ramo e' lo **step rifiutato**, non un guasto.
205
206
 
207
+ La stessa mappa distingue i rami di **recupero da errore** (`isFaultRecovery`: Record\*,
208
+ ActionCall, ScriptCall, Wait) dagli altri, perche' lasciarne uno vuoto non significa «il
209
+ percorso finisce qui» ma «se questo fallisce l'interview termina `Failed` e le modifiche
210
+ vengono annullate» (§3.5). L'editor delle uscite lo dice come promemoria — non col colore
211
+ d'avviso, perche' rinunciare al recupero e' la scelta piu' comune — e il backend lo segnala
212
+ con `FAULT_CONNECTOR_MISSING`, che e' un `Warning` e non blocca niente. Lo stage di
213
+ orchestrazione ne resta fuori: la §7 non lo comprende.
214
+
206
215
  Un tipo con un **discriminatore** compare come piu' voci, una per valore: il Collection
207
216
  Processor e' «Ordina» e «Filtra», non «ordina o filtra». Sono due gesti diversi — un `Sort`
208
217
  vuole `sortOptions`, un `Filter` vuole condizioni (§5.5) — e sceglierli dalla palette evita di
@@ -311,6 +320,25 @@ quindi l'editor dice di filtrare per le colonne della chiave invece di far cerca
311
320
  nell'elenco non c'e'. Restano `<select>` i dizionari chiusi — tipi di dato, operatori,
312
321
  enumerazioni — dove non c'e' niente da scrivere a mano.
313
322
 
323
+ **Valori di enum.** Un `Enum` ha due meta' e servono entrambe: l'`objectType` dice **quale tipo** —
324
+ e quello resta un `<select>`, perche' l'elenco dei tipi e' un dizionario chiuso — mentre i **valori**
325
+ di quel tipo arrivano da `listEnumValues(objectType)` e sono cio' che finisce in `enumValue` (§4.2,
326
+ §4.6). Senza la seconda chiamata all'utente resta una casella di testo su un insieme chiuso, che e'
327
+ il modo piu' facile di scrivere un valore che il runtime non riconoscera'. Li propone
328
+ `<fb-enum-value-picker>`, che il `<fb-value-editor>` monta al posto della casella di testo appena il
329
+ tipo della destinazione e' `Enum`: vale quindi in una condizione, in un filtro, nel valore iniziale
330
+ di una risorsa, in un parametro di action o di form, in un Assignment e in una `Map` di un Transform.
331
+ Cio' che si scrive e' il **nome**: `numericValue` viene mostrato accanto al valore — aiuta a
332
+ riconoscerlo in dati legacy — ma un numero in `enumValue` sarebbe un altro tipo (§13.18). Elenco
333
+ vuoto resta "non lo so" — primitiva non esposta, tipo senza valori dichiarati, `objectType` ancora
334
+ da scegliere — e allora il valore si digita; con l'elenco popolato un valore fuori elenco e' un
335
+ **avviso**, perche' nessun codice della §7 lo blocca ed e' l'editor ad accorgersene prima del runtime.
336
+
337
+ Perche' l'editor conosca il tipo della destinazione serve saperlo: in un Assignment arriva da
338
+ `getWritableReferences` (per corrispondenza esatta del nome: su `Cliente.Stato` resta ignoto), in una
339
+ condizione e in un filtro dal riferimento o dal campo a sinistra, in un Transform dal **membro** della
340
+ classe di destinazione. Dove il tipo non si sa, il campo resta generico invece di indovinare.
341
+
314
342
  Lo stesso controllo, nella variante `<fb-name-picker>`, vale per **ogni altro nome che il flow
315
343
  prende da fuori**: tipo di action e action, script, form, i nomi dei loro parametri di ingresso
316
344
  e di uscita, il flow di uno step in background e dei suoi evaluation flow, il flow invocato da