2013-08-18 21 views
6

Delle due scelte devo accedere al valore di un controllo che è il più efficiente?Qual è il modo più efficiente per accedere al valore di un controllo?

getComponent("ControlName").getValue(); 

o

dataSource.getItemValue("FieldName"); 

trovo che a volte il getComponent non sembra restituire il valore corrente, ma l'accesso alla dataSource sembra essere più affidabile. Quindi fa molta differenza dal punto di vista delle prestazioni che viene utilizzato?

DataSource.getValue sembra funzionare ovunque che ho provato. Tuttavia, quando si lavora con rowData, sembra che sia ancora necessario eseguire rowData.getColumnValue ("Something"). rowData.getValue ("Something") non riesce.

+0

Ci possono essere differenze anche nel tipo di valore che si ottiene dal componente rispetto all'origine dati. –

risposta

17

Nessuno dei due. La sintassi più veloce è dataSource.getValue ("FieldName"). Il metodo getItemValue è affidabile solo sull'origine dati del documento, mentre il metodo getValue non è solo disponibile anche nelle voci di visualizzazione accessibili tramite una sorgente dati di visualizzazione (sebbene in quel contesto si passerebbe il nome programmatico di una colonna vista, che non è necessariamente lo stesso nome di un campo), ma sarà anche disponibile su qualsiasi origine dati personalizzata che si sviluppa o installa (ad esempio, librerie di estensioni di terze parti). Inoltre, fa la conversione di tipo automatico che dovresti fare da solo se invece hai usato getItemValue.

Anche sulle pagine molto semplici, dataSource.getValue ("FieldName") è 5 volte più veloce getComponent ("id").getValue(), perché, come cita Fredrik, prima di tutto deve trovare componente, e poi chiedere che cosa il valore è ... che, dietro la scene, chiede solo la fonte dei dati comunque. Quindi sarà sempre più veloce chiedere semplicemente la fonte dei dati.

NOTA: il metodo di scrittura corrispondente è dataSource.setValue ("FieldName", "NewValue"), non dataSource.replaceItemValue ("FieldName", "NewValue"). Entrambe funzioneranno, ma anche lo stesso setValue esegue la stessa conversione di tipo effettuata da getValue, quindi è possibile trasmetterli dati che non sono strettamente conformi alla vecchia API Java Domino e di solito si limitano a capire a cosa deve essere convertito il valore in ordine essere "sicuro" per Domino da conservare.

+0

Grazie, questo è davvero importante sapere che ho un XPage che faccio questo tipo di ricerca. Ora torna al codice e trova tutti quei posti che uso e li cambio. Questo è un post che ho copiato nel mio documento cheatsheet per riferimento futuro e promemoria. Molte volte il metodo più ovvio è lontano dal metodo migliore. –

+0

Ecco un po 'di follow-up. In un controllo ripetuto, visualizzo i valori da rowData associando un campo calcolato a un campo nel rowData. Immagino che rowData.getValue sarebbe più veloce? –

+0

Ah: una best practice inestimabile (destinata al gioco di parole) per lo sviluppo: non seguire mai l'elemento di supporto/thingi, attenersi alla fonte dei dati. – stwissel

4

Direi che il modo più efficace è ottenere il valore direttamente dall'origine dati. Perché se si usa getComponent ("ControlName"). GetValue(); farai prima un get sul componente e poi un getValue da quello. Quindi, fare una sola uscita dall'origine dati è più efficiente se me lo chiedi.

Problemi correlati