Passare alle selezioni di entità condivisibili senza problemi

Tradotto automaticamente da Deepl

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.

Avatar
- Product Owner - Marie-Sophie Landrieu-Yvert è entrata a far parte del team 4D Product come Product Owner nel 2017. In qualità di Product Owner, è incaricata di scrivere le storie degli utenti e di tradurle in specifiche funzionali. Il suo ruolo è anche quello di assicurarsi che l'implementazione della funzionalità fornita soddisfi le esigenze del cliente.Marie-Sophie si è laureata presso la scuola di ingegneria ESIGELEC e ha iniziato la sua carriera come ingegnere presso IBM nel 1995. Ha partecipato a vari progetti (di manutenzione o di costruzione) e ha lavorato come sviluppatrice Cobol. In seguito ha lavorato come progettista UML e sviluppatore Java. Ultimamente i suoi ruoli principali erano l'analisi e la scrittura dei requisiti funzionali, il coordinamento dei team di business e di sviluppo.