对话框控件无法在XPage上看到第二个数据源

时间:2012-02-23 17:44:31

标签: dialog xpages

我有一个自定义控件,其中一个字段用户将输入文档ID(不是笔记ID或UNID,只是一个唯一的编号)。此数据源名为document1。当他们退出该字段时,我执行查找并在extlib Dialog控件(数据源bundleDoc)中显示具有该ID的文档或新文档。保存bundleDoc时,我想更新document1上的日志字段以指示已添加捆绑文档。

我可以保存bundleDoc并关闭(隐藏)对话框但是我的Save&中的代码对话框中的关闭按钮无法“看到”document1。我不能使用document1.getItemValueString或getComponent来引用它。 getItemValueString返回并且空字符串和getComponent抛出错误,因为返回值为null。

我会在视觉上发布图片,但我还没有足够的声誉。 :( 我错过了什么?我不应该从对话框控件获取document1,因为它在同一个XPage上?

更新:对话框窗体上的两个字段计算了默认值,这些默认值使用getComponent从document1获取它们的值。因此,至少在加载对话框时,它可以看到document1。此外,bundleDoc未定义为对话框控件的数据源。明天我会试着看看它是否有所作为。

更新2:发布图片的声誉仍然不够,但这里有一些代码。这是一个包含对话框控件的自定义控件。 document1被定义为自定义控件的数据源,bundleDoc被定义为对话框控件中面板的数据源,其中包含bundle文档的字段表。

对话框控件中的BundleID字段具有使用此计算的默认值:

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

StorageLocationID的公式类似,只是组件是inputStorageTrayID。

这是Save& amp;中的代码。关闭按钮:

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行上,但它没有从document1获取BundleID(我将sessionScope变量设置为newArr的值,并显示'Added bundle - Anonymous'。

2 个答案:

答案 0 :(得分:1)

这取决于您添加数据源的位置。如果将document1设置为自定义控件1的数据源,并且bundleDoc是自定义控件2的数据源,则无法在定义它们的自定义控件之外访问它们。

如果添加document1作为自定义控件的数据源并在同一自定义控件中创建xe:dialog控件(包含带有bunleDoc数据源的面板),则应该能够访问document1(并更新/保存)对话框上的按钮。

答案 1 :(得分:0)

我认为问题最初是由缓存问题引起的,因为它在发布问题后的第二天就开始工作了。

但是,我必须再做一件事让页面以我想要的方式工作。这是Designer中的XPage:

enter image description here

从Save&中写入一个值。关闭按钮返回WorkLog字段,我必须在打开对话框之前保存document1数据源。然后在整个Save& amp;关闭代码并始终正确保存。