Диалоговое управление не может видеть второй источник данных на XPage - PullRequest
2 голосов
/ 23 февраля 2012

У меня есть пользовательский элемент управления с полем, в котором пользователь вводит идентификатор документа (не идентификатор заметки или UNID, просто уникальный номер). Этот источник данных называется document1. Когда они выходят из поля, я выполняю поиск и отображаю либо документ с этим идентификатором, либо новый документ в элементе управления extlib Dialog (источник данных bundleDoc). После сохранения bundleDoc я хочу обновить поле журнала в document1, чтобы указать, что документ пакета был добавлен.

Я могу сохранить bundleDoc и закрыть (скрыть) диалоговое окно, но код моей кнопки «Сохранить и закрыть» в диалоговом окне не может «увидеть» документ1. Я не могу ссылаться на него, используя document1.getItemValueString или getComponent. GetItemValueString возвращает пустую строку, а getComponent выдает ошибку, поскольку возвращаемое значение равно нулю.

Я бы выложил изображение, чтобы помочь визуально, но у меня пока недостаточно репутации. :( Что мне не хватает? Разве я не могу получить доступ к document1 из диалогового элемента управления, поскольку он находится на том же XPage?

ОБНОВЛЕНИЕ: Два поля в диалоговой форме имеют вычисленные значения по умолчанию, которые используют getComponent для получения своих значений из document1. Таким образом, по крайней мере, когда диалог загружен, он может видеть document1. Кроме того, bundleDoc не определяется как источник данных для диалогового элемента управления. Я попробую это завтра, чтобы увидеть, если это что-то меняет.

ОБНОВЛЕНИЕ 2: Все еще недостаточно репутации, чтобы разместить фотографию, но вот код. Это один пользовательский элемент управления, который содержит диалоговый элемент управления. document1 определен как источник данных для пользовательского элемента управления, а bundleDoc определен как источник данных для панели в диалоговом элементе управления, который содержит таблицу полей для документа комплекта.

Поле BundleID в диалоговом элементе управления имеет вычисленное значение по умолчанию, используя это:

if (bundleDoc.isNewNote()) {
    getComponent("inputBundleID").getValue();
} else {
    bundleDoc.getItemValueString("BundleID");
}

Формула для StorageLocationID похожа, за исключением того, что компонент является inputStorageTrayID.

Это код кнопки «Сохранить и закрыть»:

bundleDoc.save();
var newArr = new Array(document1.getItemValue("WorkLog"));
newArr.push("Added bundle " + document1.getItemValueString("BundleID") + " - " + session.getCommonUserName());
document1.setValue("WorkLog",newArr);
document1.save();
getComponent("dialog1").hide();

Ошибка возникает в строке document1.save, но она не получает BundleID из document1 (я установил для переменной sessionScope значение newArr, и он показал «Добавленный пакет - Аноним».

Ответы [ 2 ]

1 голос
/ 24 февраля 2012

Это зависит от того, где вы добавили источники данных. Если document1 установлен в качестве источника данных настраиваемого элемента управления 1, а bundleDoc является источником данных настраиваемого элемента управления 2, вы не можете получить к ним доступ вне настраиваемого элемента управления, в котором они определены.

Если вы добавите document1 в качестве источника данных своего пользовательского элемента управления и создадите диалоговый элемент управления xe: (содержащий панель с источником данных bunleDoc) в том же пользовательском элементе управления, вы сможете получить доступ к document1 (и обновить / сохранить его) из кнопка в диалоговом окне.

0 голосов
/ 01 марта 2012

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

Однако мне пришлось сделать еще одну вещь, чтобы заставить страницу работать так, как я хотел. Это XPage в Designer:

enter image description here

Чтобы записать значение из кнопки «Сохранить и закрыть» обратно в поле WorkLog, мне пришлось сохранить источник данных document1 перед открытием диалогового окна. Затем document1 был распознан по всему коду сохранения и закрытия, и он всегда сохранялся правильно.

...