Form, FormUID e ItemUID¶
Cos'è un Form¶
Chi arriva dal frontend web tende a pensare a un <form> HTML. Nella UI API di SAP Business One il significato è completamente diverso.
Un Form è l'equivalente di una finestra/schermata intera dell'applicazione — quello che nel mondo desktop si chiamerebbe "una window" o "una view". Esempi:
- La finestra "Ordine di Vendita"
- La finestra "Anagrafica Articoli"
- Una finestra custom creata da XML
Struttura gerarchica¶
graph TD
Form["<b>Form</b><br/><i>(La finestra intera: schermata, window o view)</i>"]
Items["<b>Items</b><br/><i>(Collezione di tutti i controlli presenti nella form)</i>"]
Item["<b>Item</b><br/><i>(Singolo controllo generico: posizione, dimensioni, visibilità)</i>"]
Specific["<b>Specific</b><br/><i>(Controllo tipizzato: EditText, ComboBox, Matrix, Button...)</i>"]
Form -->|"contiene"| Items
Items -->|"indicizza"| Item
Item -->|"cast al controllo concreto"| Specific
FormUID vs FormTypeEx¶
Sono due identificativi diversi, spesso confusi all'inizio.
FormTypeEx — il "tipo" di form¶
Identifica quale schermata ha generato l'evento, indipendentemente dall'istanza aperta. È sempre lo stesso per lo stesso tipo di finestra.
FormTypeEx è la versione stringa di FormType (che è un intero). È la versione raccomandata oggi perché gestisce meglio i form custom/UDO e garantisce compatibilità futura.
Come trovare il FormTypeEx di una form standard¶
- Aprire la form in SAP Business One.
- Usare System Information (in basso a sinistra) e passare il mouse sulla form: SAP mostra il
Form Typenella barra di stato. - In alternativa, mettere un breakpoint nel proprio
FormDataEvente ispezionareBusinessObjectInfo.FormTypeExa runtime.
Note
Nessuna lista ufficiale è sempre aggiornata nell'help — verificare sempre a runtime con System Information o breakpoint.
FormUID — l'istanza specifica¶
Ogni volta che si apre una finestra, SAP crea una nuova istanza con un UID univoco e progressivo (es. "3", "27", "142"...). Aprendo due Ordini di Vendita contemporaneamente, si avranno due form con lo stesso TypeEx ("139") ma UniqueID diversi.
ItemUID: fisso o variabile?¶
Diversamente da FormUID, l'ItemUID degli item standard SAP è fisso e sempre uguale per ogni istanza dello stesso tipo di form. Non identifica un'istanza runtime, ma la posizione nel layout definita staticamente nello screen painter di quella form.
Esempio: nell'Ordine di Vendita (139), il campo "Codice Cliente" è sempre "4", in qualsiasi istanza si apra quella form.
Eccezioni da tenere a mente¶
- Item aggiunti via codice (es. un bottone custom): l'
ItemUIDlo si sceglie in fase di creazione (.Add("MyButton", ...)), quindi resta fisso solo perché è lo sviluppatore a definirlo sempre uguale — non è una garanzia di SAP. - Righe di una Matrix: non hanno un proprio
UIDindividuale come gli Item — si indirizzano per indice (oMatrix.GetCellSpecific(columnUID, rowIndex)). Il concetto di "UID fisso" non si applica riga per riga.
Regola
FormUID cambia per istanza, ItemUID resta fisso per tipo di form (a meno che non venga creato dinamicamente dal codice).