首页 > 解决方案 > XPages:一个模板,两个内存模型?

问题描述

我想为我们的 XPages 应用程序维护一个单一的主模板,尽管它具有 2 个不同的内存模型和属性。开发模板的模型(主)应该在磁盘上,没有 JS 优化和 dojo 压缩。派生模板中的模型,要在客户端应用程序中使用,我们配置为内存,优化的JS和压缩的dojo。

当在每个模板中设置不同的配置参数然后刷新派生模板的设计时,两个模板最终都相同(这似乎合乎逻辑)。我的意思是:不可能禁止刷新 XSP 设置,就像可以在其他元素上设置一样。

但即使有这种可能性,它也不会起作用,因为一切都应该重新编译(“干净”),否则压缩的 JS 和 css 不会正确生成。我发现无法自动在派生模板上开始编译。

或者有什么办法吗?

谢谢!

标签: xpagesdomino-designer-eclipse

解决方案


源代码控制和分支应该是处理它的正确方法:https ://www.ibm.com/support/knowledgecenter/en/SSVRGU_9.0.0/com.ibm.designer.domino.ui.doc/wpd_srcecontrol_top.html

老式的方法是“分支”你的模板。XSP 开发的主模板,第二个模板继承自第一个模板。在第二个模板中,为 XSP.properties 设计元素设置“禁止设计刷新或...”属性。然后更改其内容以满足您的需求。

这是故事

曾几何时,有一个开发人员团队在开发多个数据库,其中一些被标记为模板,以便进一步部署到生产环境中。一位开发人员想重用另一个数据库中的一些元素 - 模板。复制并粘贴到另一个数据库中。设计师提示:“你想从模板继承设计......?”。嗯,没有。所以设计师没有用模板名称标记设计元素,没关系。此外,设计师设置了“禁止设计刷新......”标志。没有人注意到,直到发布日!新应用程序的行为很奇怪,有些部分得到了更新,有些没有。很容易发现设置了“禁止...”标志并修复它。但诡异还在继续。你猜怎么着?此标志设置在设计者 GUI 中没有此类复选框的元素上(在本例中为 Java 源代码)。

什么有效

创建显示设计元素的特殊视图http://www-10.lotus.com/ldd/ddwiki.nsf/dx/view-of-design-elements.htm

创建另一列显示禁止刷新的元素。设置“将值显示为图标”。

"Prohibit design refresh or replace to modify";
@If( @Contains( $Flags; "P" ); 80; 0 ) : @If( @Contains( $Flags; "r" ); 204; 0 )

创建一个使用选定文档的视图操作(ss.CurrentDatabase.UnprocessedDocuments用于勾选的文档,uiv.CaretNoteIDGetDocumentByID用于聚焦的文档)并调用此代码以重置标志。

Sub Prohibit(note As NotesDocument)
    On Error Goto errHandler

    Dim flags As String
    Dim flagsNew As String
    flags = note.GetItemValue( "$Flags" )(0)
    flagsNew = Replace( flags, "P", "" )
    If flags <> flagsNew Then
        note.ReplaceItemValue "$Flags", flagsNew
        note.Save True, False
    End If

    Exit Sub

errHandler:
    Print "Error on " & note.UniversalID & " (" & note.GetItemValue( "$Title" )(0) & ")"
    Exit Sub

End Sub

免责声明:在某些情况下,这会破坏元素的签名 - 整个数据库的强制签名会修复它。

注意:关于继承的提示 - 如果您在从模板复制到模板时回答“”,它会设置标志“禁止...” - 即使它是同一个数据库!

结论

所以,在你的情况下,做相反的事情 - 只需通过添加"P"到文件$Flags字段来设置标志XSP.properties。顺便说一句,它的$TITLE字段是"WEB-INF/xsp.properties".

享受!


推荐阅读