xpages嵌入式视图或视图面板

时间:2014-06-19 11:32:38

标签: xpages xpages-extlib

我知道这是一个非常简单的问题,但我正在尝试查看视图面板(我从容器控件中拖动)和嵌入视图之间的区别。

如何在我的xpages上添加嵌入式视图?

或者两个项目是同一个。

我之所以会问这个问题:我的xpage上有一个视图面板(我认为它就像是一个嵌入式视图中的clasic lotus notes编程),我在其中列出了一些文档。第一列根据UNID文件进行分类。

我注意到如果我再次撰写另一个文档,此视图包含所有以前的文档,并且所有UNID都已分类。视图面板不为空。

在莲花笔记编程中:

如果我有一个主表单和一个带有@Text(@DocumentUniqueId)的计算文本字段和一些用于组成另一个表单的按钮(当然,单击按钮时我保存了主表单以获取UNID),这个表单有与前一个相同的文本字段名称 - 我将UNID传递给第二个表单。如果主窗体包含一个嵌入视图,其中列出了从第二个窗体保存的所有文档,我将使用第一列分类并隐藏第二个窗体中的字段名称(将包含UNID)。如果我保存并关闭第一个主要,然后我将组成另一个主窗体,嵌入视图不会列出已保存的先前文档。

嗯,这个视图已经创建了。

我确实在myxpage中拖放了这个视图。我在myxpage中有一个按钮,显示一个对话框。这里声明了一个数据源,该对话框包含一些字段。在主xpage(其中定义了另一个数据源)中,有一个计算字段,它接受文档的UNID。在我单击对话框之前,我保存了第一个数据源,将值UNID传递给对话框中的其他字段。

我从对话框中保存数据源&关闭对话框,然后视图面板(这是上面提到的Lotus notes经典视图)列出了doc。如果我关闭主xpage(如果是新的,则保存它),然后打开另一个主文档,视图不为空,它包含以前的文档列表。 (我试图隐藏它,如果xspDoc是新的。但是当我尝试从对话框中添加其他文档时,视图面板也会列出以前文档中的先前文档。,即使UNID是不同的)

提前致谢。

2 个答案:

答案 0 :(得分:1)

为了解释这一点,最好考虑一下Notes Client中的视图和嵌入视图是什么。视图确定外观,如视图面板,默认情况下将显示选择条件找到的所有文档。因此,在这种情况下,可用的文档对应于绑定到基础视图的dominoView数据源,没有定义其他条件。

嵌入视图仍然使用视图来确定外观,但不会显示第一列(它实际上是嵌入视图的属性"控制"在Notes客户端中)。在“视图”面板中,您可以选择显示哪些列,因此您需要在“视图”面板上自行编码,您可以在其中选择要显示的列。嵌入视图还具有定义单个类别的属性。但是视图面板和其他重复容器(如数据表和重复控制)不会限制数据源可用的数据 - dominoView或者例如dominoView。 ViewEntryCollection用于除View Panel之外的任何其他内容。所以你设置了过滤器。

但是,新文档没有UNID,因此无法限制显示的内容。相反,我认为一个好方法是设置可见性,以便只有在新文档时才会显示视图面板。如果您在保存后完全重新加载页面,或者已呈现,则可以使用已加载。

答案 1 :(得分:0)

首先,这不是一个愚蠢的问题。

我假设您正在使用自我实现的父响应系统,并且具有按父UNID排序的视图。在视图面板的数据源下,找到“按类别名称过滤”选项。计算您要搜索的UNID值或类别值。

步骤:

  1. 确保对背景视图进行分类(升序最好确保其有效,但我怀疑是否需要)
  2. 拖动(我最喜欢的是dynamicViewPanel)对xpage进行视图控制。
  3. 在“属性/数据”下,有一个位置可以计算要显示的类别的值。如果您想要完全匹配,请选中完全匹配复选框。
  4. 如果您输入的类别值不正确或者值不存在,则不会显示任何文件 如果你输入一个空值,则显示所有文件(至少在我能记住的测试中)
    如果返回文档,则会自动隐藏分类列。

    修改

    如果您正在读取字段中的值,则可以使用以下代码:

    xspDoc.getItemValueString("fld");
    

    如果您正在基于UNID进行搜索,请再次隐藏viewPanel,如果文档是新的。如果尚未设置该值,则还要隐藏面板。

    如果您有两个自定义控件,即使第二个嵌入了自定义控件,也不能轻易让一个自定义控件访问另一个自定义控件中的数据源值。我确信有办法将其设置为工作,但在这种情况下,使用viewScope变量来访问值,并可能使用onLoad,onChange或onSave事件来更新viewScope变量。确保通过将结果打印到服务器日志或其他字段来验证结果不为null或为空。

    问题编辑/扩展后的最终编辑

    这些是我要采取的措施来完成您所描述的内容。

    1. 您有父文档XPage。插入此Xpage的所有字段。
    2. 将dynamicViewPanel拖到XPage上。如果parentDoc是New,那么隐藏。(理论上这可能是一个自定义控件,但如果你遇到麻烦,请不要为了解决问题而尝试它。
    3. 将dynamicViewPanel数据源设置为ignoreReqeustParams。
    4. 计算数据源并设置“按类别名称过滤”过滤器。在计算时,为了便于检查和排除故障,请将此值输出到服务器或其他日志记录机制。您可以稍后删除它。
    5. 验证是否正在将正确的UNID /值插入到您在对话框中创建的文档中。
    6. 如果您使用范围变量来保存过滤器值,请确保使用的是viewScope而不是appliationScope或sessionScope。
    7. 如果您使用自定义控件和标准参数(不是scopedVars),请验证是否正在使用日志或服务器打印更新compositeData变量。
    8. 考虑将Dialog Properties / AllProperties / basics / refreshOnShow设置为true
    9. 使用dialogOpen操作的部分刷新选项进行游戏,测试完全部分刷新和部分刷新。
    10. 请记住将对话框中创建的文档的ignoreRequestParams设置为true
    11. 考虑在Dialog中创建新的文档数据源以请求范围。
    12. 当然,考虑并测试在XPage上定义的所有数据源,而不是在这里,有些数据源。
    13. 确认您错误地从主文档而不是新的对话框文档中获取了UNID的值!
    14. 这些是我现在能够想到的所有提示,几乎按照我尝试的顺序。如果这没有帮助,那么我怀疑有一个你不包括在内的这个难题这个问题。请记住,尽量保持简单。你可以过度思考事物,让事情变得比他们需要的更难。