我想向现有 xPage 添加一个字段,并且需要运行一些 xPage 基础知识以检查它们的有效性。
我做了以下事情:
- 为了确保我的开发和生产站点正常工作,将计算文档绑定到的表单(因为数据源位于 diff db 中)。
- 我的新字段名为“NewField”,我使用了简单的数据绑定,选择了 document1(与我文档中的其他字段相同),并输入了新字段名称(不能从下拉菜单中选择作为文档计算)。
- 我还在实际的笔记文档上创建了该字段,但是我认为我不必这样做?此外,它在计算的子表单上,所以不确定这是否相关?这是现有注释表单的 xpage 版本 - 客户端和 Web 访问都适用于该应用程序。
- 我认为如果缺少“绑定到”中指定的字段,它会创建它,但是即使在注释表单上,它仍然不存储该值。
出了什么问题:
- 该字段是在文档上创建的,但未填充该值。针对 notes 文档存储的值是一个空字符串。
- 这里没有什么复杂的,没有做任何时髦的事情,但值没有映射?
- 其余字段(在我创建初始文档时创建)已正确映射。
有什么建议么?这是向现有 xPage 添加字段的新手错误吗?
一种
根据要求,这里是数据绑定和一个有效的字段的代码,一个无效的代码。
这是我定义document1的初始代码。它确实调用了保存后的代理,但是该代理对未分配的字段值不做任何事情。
<xp:this.data>
<xp:dominoDocument var="document1" action="openDocument">
<xp:this.databaseName><![CDATA[#{javascript:var sname = ("","test\\testdb.nsf");
return sname;}]]>
</xp:this.databaseName>
<xp:this.formName><![CDATA[#{javascript:return "MainForm"}]]>
</xp:this.formName>
<xp:this.postSaveDocument>
<xp:executeScript>
<xp:this.script><![CDATA[#{javascript:var sname = @Name([CN]",@Subset(@DbName(),1));
var dbname = "test/testdb.nsf";
var dbTest:NotesDatabase = session.getDatabase(sname, dbname);
if (dbTest.isOpen()){
ag = dbTest.getAgent("UpdateDoc");
noteid = document1.getDocument().getNoteID();
ag.run(noteid);
} }]]></xp:this.script>
</xp:executeScript>
</xp:this.postSaveDocument></xp:dominoDocument>
</xp:this.data>
然后这里是无效的字段分配代码。
<xp:inputText value="#{document1.NewField}"
id="inputText25" disableClientSideValidation="true" styleClass="entryboxes">
</xp:inputText>
然后是有效的字段分配代码。
<xp:inputText value="#{document1.CLRef}"
id="inputText4" rendered="#{javascript:@IsNewDoc()}" styleClass="entryboxes">
</xp:inputText>
我认为这是相当标准的。
更新 8/10
所以 - 我已经确定只有当我有条件隐藏单元格时才会发生这种情况。这有一个基本公式,根据另一个字段的值要求该行可见。显示/不显示功能正在工作(代码见下文),但是,由于我不知道的原因,它没有保存值。
var hw = getComponent("module");
var hwv = hw2.getSubmittedValue();
hwv == "Product1" || hwv == "Product2" || hw2v == "Product3"
如果我创建任何其他未隐藏的字段(并组成字段名称),它会正确映射到文档(正如我认为的那样)。好消息是我已经成功地复制了一个新表格,所以我似乎想有条件地隐藏一行,而不是我的表格有问题?有任何想法吗?