2013-08-18 11 views
6

Z dwóch opcji muszę uzyskać dostęp do wartości kontroli, która jest najbardziej wydajna?Jaki jest najskuteczniejszy sposób uzyskania dostępu do wartości kontrolki?

getComponent("ControlName").getValue(); 

lub

dataSource.getItemValue("FieldName"); 

Uważam, że w dniu okazji getComponent nie wydaje się, aby powrócić do wartości bieżącej, ale dostęp do dataSource wydaje się być bardziej wiarygodne. Czy ma to duże znaczenie z perspektywy wydajności, z której się korzysta?

Wydaje się, że dataSource.getValue działa wszędzie tam, gdzie próbowałem. Jednak przy pracy z rowData nadal wydaje mi się, że potrzebuję zrobić rowData.getColumnValue ("Something"). rowData.getValue ("Something") nie działa.

+0

Możliwe są również różnice w typie wartości uzyskanej ze składnika względem źródła danych. –

Odpowiedz

17

Ani. Najszybsza składnia to dataSource.getValue ("FieldName"). Metoda getItemValue jest niezawodna tylko w źródle danych dokumentu, natomiast metoda getValue jest dostępna nie tylko w przypadku widoków przeglądania, do których można uzyskać dostęp za pośrednictwem źródła danych widoku (chociaż w tym kontekście przekazywałbyś mu programową nazwę kolumny widoku, która nie jest musi być taka sama jak nazwa pola), ale będzie również dostępna w dowolnych niestandardowych źródłach danych, które tworzysz lub instalujesz (np. zewnętrzne biblioteki rozszerzeń). Co więcej, robi on automatyczną konwersję typów, którą musiałbyś zrobić sam, gdybyś użył getItemValue.

Nawet na bardzo prostych stron, dataSource.getValue ("FieldName") jest 5 razy szybciej niż getComponent ("id").getValue(), ponieważ, jak wspomina Fredrik, najpierw musi znaleźć komponent, a następnie poprosić go, jaką wartość ma ... co, za sceny, tak i tak pyta źródło danych. Tak więc zawsze szybciej będzie po prostu zapytać źródło danych.

UWAGA: odpowiednią metodą zapisu jest dataSource.setValue ("FieldName", "NewValue"), a nie dataSource.replaceItemValue ("FieldName", "NewValue"). Oba będą działać, ale setValue dokonuje również konwersji tego samego typu co getValue, więc możesz przekazać dane, które nie są ściśle zgodne ze starym interfejsem API Java Domino i zwykle po prostu określają, do jakiej wartości należy dokonać konwersji w celu być "bezpiecznym" do przechowywania Domino.

+0

Dzięki, to jest naprawdę ważne, aby wiedzieć, że mam XPage, który robię tego rodzaju wyszukiwania. Teraz wróć do kodu i znajdź wszystkie miejsca, w których używam tego i zmieniaj je. Jest to post, który skopiowałem do mojego dokumentu do przyszłego odwołania i przypomnienia. Wiele razy najbardziej oczywista metoda jest daleka od najlepszej metody. –

+0

Oto trochę kontynuacji. W kontrolce powtórzeń wyświetlam wartości z wiersza danych, wiążąc obliczoną granicę z warstwą w wierszu danych. Zgaduję, że wartość rowData.getValue byłaby większa? –

+0

Ah - nieoceniona (kalamburowa) najlepsza praktyka dla rozwoju: nigdy nie chodź za elementem pomocniczym/rzeczą, trzymaj się źródła danych. – stwissel

4

Powiedziałbym, że najbardziej efektywnym sposobem jest uzyskanie wartości bezpośrednio ze źródła danych. Bo jeśli użyjesz getComponent ("ControlName"). GetValue(); najpierw pobierzesz komponent, a potem getValue. Tak więc pojedyncze pobranie z źródła danych jest bardziej wydajne, jeśli mnie zapytasz.

Powiązane problemy