我有一个自定义控件,其中包含用户将输入文档 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 的值,它显示“已添加捆绑包 - 匿名”。