【问题标题】:Dialog Control Cannot See Second Data Source on the XPage对话框控件在 XPage 上看不到第二个数据源
【发布时间】:2012-02-23 17:44:31
【问题描述】:

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

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

我会发布一张图片以提供视觉帮助,但我还没有足够的声誉。 :( 我错过了什么?因为它在同一个 XPage 上,我不应该能够从对话框控件中访问 document1 吗?

更新:对话框表单上的两个字段已计算出默认值,它们使用 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 的值,它显示“已添加捆绑包 - 匿名”。

【问题讨论】:

  • 唐,您能否在您的问题中添加一些代码以更清楚地说明您要做什么?这将帮助您获得答案
  • 谢谢,每。今天早上添加了一些代码。希望这会提高我的声誉,以便在需要时发布控件的图片。

标签: dialog xpages


【解决方案1】:

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

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

【讨论】:

  • 谢谢,马克。请参阅我在原始问题中所做的补充。您的第二段描述了我如何定义数据源。我将在保存 bundleDoc 数据源之前尝试更新 document1,但如果这样我不得不说对话框控件中存在错误。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多