In questopost del blog avete scoperto la potenza che possono offrire le selezioni di entità condivisibili. 4D si concentra sulla condivisione dei dati perché, a lungo termine, porta alle prestazioni.
Ma siamo consapevoli che questa strategia potrebbe non essere la vostra attuale. Abbiamo seguito le discussioni sul forum e abbiamo compreso i vostri commenti e le vostre sensazioni.
Per ammorbidire questo passaggio e darvi più flessibilità e strumenti, abbiamo apportato alcuni miglioramenti per quanto riguarda la natura (condivisibile o non condivisibile) delle selezioni delle entità.
Prima di continuare, vi consigliamo vivamente di leggere questo post del blog e questo, in modo da poter comprendere i miglioramenti descritti di seguito.
HDI: miglioramenti alle selezioni di entità
4D v18 R5 offre maggiori possibilità di gestire le selezioni di entità non condivisibili (modificabili). Vi aiuta a lavorare nel modo in cui siete abituati.
D’altra parte, se siete disposti a lavorare con selezioni di entità condivisibili, vi abbiamo aiutato a prepararvi per questa nuova era in 4D v18 R5. In 4D v18 abbiamo introdotto un metodo flessibile che potete utilizzare in modo trasparente per preparare il vostro codice.
In poche parole: preparate in 4D v18, eseguite in 4D v18 R5 e preparatevi a ottenere maggiori prestazioni!
sulle selezioni di entità modificabili
aggiungere un’entità a una selezione di entità
Un caso d’uso frequente è quello di visualizzare una selezione di entità in una casella di riepilogo (prodotti, fatture, ecc.) e consentire all’utente di aggiungerne di nuove.
Lavoriamo su una classe di dati Prodotti.
Quando il modulo viene caricato, viene creato Form.products, che è la fonte di dati della casella di riepilogo:
Case of
: (Form event code=On Load)
Form .products:=ds.Products.all()
End case
Quando l’utente aggiunge un nuovo prodotto:
Form.products.add(Form.product)
Se si esegue questo codice così com’è in 4D v18 R5, si otterrà un errore quando si esegue la funzione add() perché ds.Products.all() restituisce una selezione di entità condivisibile (non modificabile).
Siamo consapevoli di questo inconveniente. Per questo motivo è disponibile la funzione 4D v18 copy() è disponibile per preparare il codice per 4D v18 R5.
Se copy() viene eseguito in 4D v18: copia semplicemente la selezione delle entità.
Se copy() viene eseguito in 4Dv18 R5, per impostazione predefinita, copia la selezione di entità non modificabile come modificabile, in modo da non avere problemi con l’azione di aggiunta!
Quindi preparate il codice in questo modo:
Case of
: (Form event code=On Load)
Form .products:=ds.Products.all().copy()
End case
mantenere la natura delle selezioni di entità
Le selezioni di entità create a partire da una selezione di entità originale mantengono la stessa natura.
esempi
Ordinare una casella di riepilogo
Riprendiamo l’esempio dei prodotti visualizzati. Questa selezione di entità visualizzate è stata impostata come modificabile perché l’utente deve aggiungere nuovi prodotti.
Qualsiasi tipo di azione sulle colonne della casella di riepilogo mantiene la natura modificabile della selezione di entità, in modo che sia ancora possibile aggiungere prodotti.
Eseguire una query
Se si esegue una query su una selezione di entità, la natura della selezione di entità viene mantenuta per il risultato.
Nel nostro esempio, se l’utente esegue una ricerca sui prodotti visualizzati:
Form.products:=Form.products.query("nome = :1"; Form.search)
Il risultato della query è modificabile, quindi è possibile aggiungere nuovi prodotti perché Form.products è modificabile.
Questi sono solo due esempi. Consultate la documentazione per verificare tutti i casi in cui viene mantenuta la natura della selezione originale.
codice generico
Può essere utile verificare la natura di una selezione di entità nel codice generico, per poterla utilizzare nel modo appropriato. Immaginiamo un metodo che riceve una selezione di entità che può essere condivisibile o meno.
Nell’esempio seguente, riceviamo una selezione di entità Products. Prima di passarla a un OPERATORE, dobbiamo verificare se è condivisibile. Se non lo è, la trasformiamo in una selezione di entità condivisibile.
A tale scopo, si utilizza la nuova funzione OB Is shared() .
var $products; $1: cs.ProductsSelection
$products :=$1
If (Not(OB Is shared($products)))
$products :=$products.copy(ck shared)
End if
//Generate the catalog of products
CALL WORKER ("worker"; "buildCatalog"; $products; Current form window)
Nota: è disponibile anche una nuova funzione isAlterable() sulle selezioni di entità per verificare se sono modificabili.
Scaricate l’HDI qui sopra per ulteriori esempi!
Continuare a lavorare come prima
Se si vuole mantenere il comportamento delle precedenti versioni di 4D (senza concetti di selezioni di entità condivisibili), si può usare la funzione makeSelectionsAlterable() disponibile sull’oggetto datastore.
In questo modo le modifiche apportate da 4D v18 R5 saranno completamente trasparenti per voi.