2013-08-18 3 views
6

Из двух вариантов я должен получить доступ к значению элемента управления, который является наиболее эффективным?Каков наиболее эффективный способ доступа к значению элемента управления?

getComponent("ControlName").getValue(); 

или

dataSource.getItemValue("FieldName"); 

Я считаю, что иногда, кажется, не возвращает текущее значение, getComponent, но доступ к dataSource кажется более надежным. Значит ли это имеет большое значение с точки зрения эффективности, которая используется?

DataSource.getValue, похоже, работает повсюду, что я пробовал его. Однако при работе с rowData мне все же кажется, что нужно сделать rowData.getColumnValue («Что-то»). rowData.getValue («Что-то») терпит неудачу.

+0

Могут быть различия в типе значения, которое вы получаете от компонента и источника данных. –

ответ

17

Ни один. Самый быстрый синтаксис - dataSource.getValue ("FieldName"). Метод getItemValue является надежным только для источника данных документа, тогда как метод getValue не только доступен также для записей в представлении, доступных через источник данных просмотра (хотя в этом контексте вы передадите ему программное имя столбца представления, обязательно то же имя, что и поле), но также будет доступно в любых настраиваемых источниках данных, которые вы разрабатываете или устанавливаете (например, сторонние библиотеки расширений). Кроме того, это автоматическое преобразование типов, которое вам нужно было бы сделать самостоятельно, если бы вы использовали getItemValue.

Даже на очень простых страниц, dataSource.getValue ("FieldName") в 5 раз быстрее, чем getComponent ("id").getValue(), потому что, как отмечает Фредрик, сначала должна найти компонент, а затем спросить его, что значение ... что, позади сцены, просто спрашивает источник данных в любом случае. Таким образом, всегда будет проще просто запросить источник данных самостоятельно.

ПРИМЕЧАНИЕ: соответствующий метод записи dataSource.setValue ("FieldName", "NewValue"), а не dataSource.replaceItemValue ("FieldName", "NewValue"). Оба будут работать, но setValue также выполняет преобразование того же типа, что и getValue, поэтому вы можете передать ему данные, которые строго не соответствуют старым Java-API Domino, и обычно это просто определяет, какое значение нужно преобразовать в порядке быть «безопасным» для Domino для хранения.

+0

Спасибо, это действительно важно знать, у меня есть XPage, который я делаю такого рода поиск. Теперь вернемся к коду и найдите все те места, которые я использую, и меняем их. Это сообщение, которое я скопировал в мой документ с cheatsheet для дальнейшего использования и напоминания. Много раз наиболее очевидный метод далек от лучшего метода. –

+0

Ниже приведено подробное описание. При повторном управлении я отображаю значения из rowData путем привязки computedField к поляризованным в rowData. Я предполагаю, что rowData.getValue будет быстрее? –

+0

Ах - бесценная (предназначенная для каламбуров) лучшая практика для разработки: никогда не заходите за элементом поддержки/thingi, придерживайтесь источника данных. – stwissel

4

Я бы сказал, что наиболее эффективным способом является получение значения непосредственно из источника данных. Потому что, если вы используете getComponent («ControlName»). GetValue(); вы сначала получите компонент, а затем getValue. Так что, если вы спросите меня, сделайте один доступ из источника данных.