Каковы преимущества использования контекста данных в xPages? - PullRequest
4 голосов
/ 23 февраля 2012

Я никогда не использовал контекст данных в xPages и хотел бы узнать о преимуществах,

Если я хочу вернуть что-то в память, я часто вызываю функцию в библиотеке сценариев SSJS, которая, как мне кажется, также хранится в памяти.

так скажем, у меня есть функция в ssjs, которая возвращает документ notes, эта функция может быть вызвана из нескольких мест на моей странице.будет ли контекст данных в этом случае полезным, если использовать функцию в библиотеке сценариев ssjs.

Ответы [ 2 ]

7 голосов
/ 23 февраля 2012

dataContexts можно рассматривать как глобальные переменные.Преимущества перед функциями SSJS:

1) dataContext запускает SSJS / Java / независимо от того, что возвращает значение.Ссылки на dataContext используют EL (например, # {myVar}), так же, как источники данных.Так что я понимаю, что EL получает значение, а не запускает код SSJS / Java каждый раз.Таким образом, здесь есть преимущество в производительности.

2) Значение dataContext может быть вычислено динамически или при загрузке страницы.Таким образом, вы можете использовать $ {javascript: @Today ()} и запускать его один раз, а не запускать функцию каждый раз.

Я подозреваю, что есть и выигрыш в производительности, поскольку ссылки на dataContexts используют EL.Таким образом, ни в одной из ссылок вы не запускаете SSJS, поэтому нет необходимости проходить через анализатор SSJS.

Дополнительным преимуществом dataContexts является то, что они могут быть ограничены до любого уровня, к которому могут обращаться источники данных - например, XPage, CustomПанель управления или панель.Это дает им преимущество перед viewScope.Таким образом, вы можете также установить dataContext на панели в повторяющемся элементе управления, чтобы избежать множественных ссылок на поле NotesDocument или конкатенации полей.

Я обычно избегал хранения объектов Domino в dataContexts, главным образом из-занеотъемлемые риски утилизации.Я не знаю, есть ли проблема, я '

1 голос
/ 28 сентября 2012

@ Withers: # {MyVar}, который я обнаружил, не работал, когда я использовал свою переменную DataContext # {DataStoreDbName} в dblookup: (однако, я считаю ваши сообщения очень ценными, мистер Уизерс)

Это не сработало :

#{DataStoreDbName}
@Sum(@DbLookup("#{DataStoreDbName}","personnelbudget",compositeData.catid,10))

#{id:DataStoreDbName}
@Sum(@DbLookup("#{id:DataStoreDbName}","personnelbudget",compositeData.catid,10))

Это сработало

Мне нравится, как переменная dataContext отображается в списке источников данных в разделе «Данные» на вкладке «Свойства» элемента управления, под которым был введен DataContext.

  1. Начнем с определения DataContext: var = DataStoreDbName
  2. Эта переменная контекста данных является внешней базой данных Сервера: БД, которую я использую в @ DbLookup's.

    Имя переменной DataStoreDbName теперь отображается в источниках данных в разделе данных:

  3. Это DbLookup, я использую DataContext в: @Sum (@DbLookup ( DataStoreDbName , "personnelbudget", compositeData.catid, 10))

enter image description here

  1. Выше приведен пример другого DataConext (очевидно), но здесь показано, как имя переменной использовалось в вычислениях в полях или в customCoverter скрытых полей (что делает скрытые поля в Notes похожими на вычисляемые поля). * Заметьте @Text () суммой, чтобы избежать ошибки.

enter image description here

просто показывает значение переменной DataContext, а использует значение переменной DataContext в customCoverter для сохранения / сохранения значения при отправке / сохранении.

...