我有一个自定义控件,其中一个字段用户将输入文档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'。
答案 0 :(得分:1)
这取决于您添加数据源的位置。如果将document1设置为自定义控件1的数据源,并且bundleDoc是自定义控件2的数据源,则无法在定义它们的自定义控件之外访问它们。
如果添加document1作为自定义控件的数据源并在同一自定义控件中创建xe:dialog控件(包含带有bunleDoc数据源的面板),则应该能够访问document1(并更新/保存)对话框上的按钮。
答案 1 :(得分:0)
我认为问题最初是由缓存问题引起的,因为它在发布问题后的第二天就开始工作了。
但是,我必须再做一件事让页面以我想要的方式工作。这是Designer中的XPage:
从Save&中写入一个值。关闭按钮返回WorkLog字段,我必须在打开对话框之前保存document1数据源。然后在整个Save& amp;关闭代码并始终正确保存。