Использовать источник данных для получения внутреннего документа

У меня есть панель, которая привязывается к открытому документу в качестве источника данных с именем document1 в диалоговом окне extlib. При сохранении кнопки я хочу сравнить все значения полей между внутренним документом и document1. Однако кажется, что все значения полей из внутреннего документа обновлены, поэтому их значения полей одинаковы в document1. Сравнение выполняется до docuemnt1.save().

Насколько я понимаю, document1.getDocument() должен получить внутренний документ, в котором все исходные/текущие данные. document1.getDocument(true) должен получить все новые данные. Я попытался getDocumentByID и обнаружил, что все значения полей обновляются во внутреннем документе. Понятия не имею, потому что document1.save еще не выполнено.

Почему внутренний документ обновляется новыми данными перед сохранением?

Есть ли лучший способ получить внутренний документ, содержащий все исходные/текущие данные?


person Dragon Chow    schedule 27.12.2012    source источник


Ответы (1)


Если вы используете параметр true с методом getDocument, все изменения, внесенные в источник данных, временно записываются в хранилище данных источника данных.

Движок XPages «достаточно умен», чтобы понять, что несколько экземпляров объекта NotesDocument ссылаются на один и тот же внутренний документ. Теперь он будет возвращать кэшированные данные из хранилища данных источника данных. Вот почему все объекты теперь будут возвращать обновленные значения вместо значений, хранящихся во внутреннем документе (использование нескольких источников данных даст вам тот же результат).

Чтобы получить доступ к данным из внутреннего документа, вы можете использовать @DbLookup для представления со всеми документами, отсортированными по их UNID.

@DbLookup("","AllByUNID", document1.getDocument( true ).getUniversalID(), "FIELD")
person Sven Hasselbach    schedule 02.01.2013