2

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

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

我会张贴一张图片来提供视觉帮助,但我还没有足够的声誉。:( 我错过了什么?难道我不能从对话框控件访问 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 行上,但它没有从 document1 获取 BundleID(我将 sessionScope 变量设置为 newArr 的值,它显示“已添加捆绑包 - 匿名”。

4

2 回答 2

1

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

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

于 2012-02-24T09:26:11.187 回答
0

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

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

在此处输入图像描述

要将 Save & Close 按钮​​中的值写回 WorkLog 字段,我必须在打开对话框之前保存 document1 数据源。然后 document1 在整个 Save & Close 代码中被识别,并且始终正确保存。

于 2012-03-01T14:26:06.547 回答