Domino Xpage上的域值传递.docx
《Domino Xpage上的域值传递.docx》由会员分享,可在线阅读,更多相关《Domino Xpage上的域值传递.docx(13页珍藏版)》请在冰豆网上搜索。
DominoXpage上的域值传递
DominoXpage上的域值传递
假如我们要给某个文档添加评论,实现简单的工作流,那么应该可以记录用户名,目前Xpage没有提供调用地址簿的控件,在这里我们用简单的域传递方式来进行替代。
当然为了确保数据完整性,我们必须确认用户输入的用户名在公共通讯录中存在;并且文档的作者不能添加他自己为评论者。
在我们以前创建的自定义控件ccformdocumen中,在最后面加一个包含两行的表格,将第一行的单元格进行合并,如下图
然后在其中添加一个panel命名为panelReview的控件,如下图
在此控件中,再创建一个三行四列的表格,表格宽度为100%,并且每个单元格宽度为120px
在第一列的第二和第三行中,我们分别添加二个新的label控件,Addreviewer和Reviewers;在第二行的第二列中,我们添加一个名称叫做Addreviewer的宽度为400px的EditBOX控件,并且仅仅在编辑模式下可以访问,在其属性找哦你,Visiable变成可计算,并且在出现的对话框中写入代码:
currentDocument.isEditable();
在第二列的第三行中,添加一个ListBox控件,名称为ListReviewers,高60px,宽400px,可访问
紧接着在这个域的下面,同一个单元格中,我们再创建一个MultilineEditBox控件,名称为DataReviewers,设置宽度和高度与ListReviewers一样,最后的效果如下
我们现在为这个域绑定一些数据,在它对应的属性面板中,找到数据,然后选择高级,
写入公式currentDocument.ReviewerList作为它的值
现在我们在Addreviewer控件的旁边添加一个按钮,名称叫做Add,按钮类型为submit
我们通过区域变量(Scopevariables)reviewers里的值传给listbox域和multilineeditbox域
区域变量是指Javascript中的在特定范围里可以传递、共享值的变量
区域变量有三种,sessionScope、applicationScope、viewScope、requestScope;最常用的是requestScope,这里我们将使用requestScope变量获取Addreviewer控件里的值,并通过sessionScope将值传递到ListReviewers域中。
选择Addreviewer控件,在属性面板中的数据中,选择高级,里面有requestScope
现在我们对Add按钮进行处理,在样式里写入lotusBtn(这个样式我们前面用Themes调用),现在我们在此按钮的事件中,写入下列在服务器端执行的代码
varv=requestScope.reviewerName;
if(v!
=null){
if(sessionScope.reviewerName!
=null){
v+=",";
sessionScope.reviewerName+=v;
}else{
sessionScope.reviewerName=v;
}
requestScope.reviewerName="";
}
如下图:
在上面的代码中很简单,就是将当前的reviewerName的值取出来给sessionScope变量reviewerName(名称可以不一样),之后再将reviewerName清除掉。
选择Add按钮,在事件属性中,选择OnClick,然后在ServerOptions中,选择PartialUpdate,选择元素panelReview(即我们一开始在表格中创建的panel控件)
现在我们选择ListReviewers控件,在其属性中,选择Options属性,确定Allowmultipleselections选项被勾选中。
在Value属性中,选择AddFormulaItem,在里面写入下列公式@Explode(sessionScope.reviewerName,",",0)
之后我们在浏览器中进行预览,在Subject中输入主题;然后在reviewerName输入人名,点击添加按钮就可以看到数据写到ListReviewers中去了。
这是简单的域数据传递,并且是在数据校验之后才能将值从reviewerName添加到ListReviewers中去。
下列函数则并不需要经过域校验获取和设置域值
getComponent("AddReviewer").getSubmittedValue()
getComponent("AddReviewer").setSubmittedValue()
我们用以下代码来改写Add按钮,将"Donotvalidateorupdatedata"选项选中。
varrev=getComponent("AddReviewer");
varv=rev.getSubmittedValue();//Getthevalueofthereviewername
rev.setSubmittedValue("");
if((v!
="")&&(v!
=null)){
if(sessionScope.reviewerName!
=null){
v+=",";
sessionScope.reviewerName+=v;
}else{
sessionScope.reviewerName=v;
}
}
再将Add按钮的属性设置为Cancel
这时就可以直接添加了
别忘了,在每次导入页面的时候sessionScope变量reviewerName都要清空,选择ccformdocument控件,然后在事件属性中,Page->beforeofpageLoad中写入代码sessionScope.reviewerName=””即可。
再下一步,我们将值保存在DataReviewers域中,这样就可以随文档一些保存。
在Add按钮代码后面,我们添加下列代码
varlst=@Explode(sessionScope.reviewerName,",",0);
vartxt=getComponent("DataReviewers");
txt.setSubmittedValue(sessionScope.reviewerName)
如下图:
这样的话,值就可以传递到DataReviewers中去了,如下图
LotusDomino中使用Xpage技术打造通讯录
我们来完成一个类似通讯录的功能,我们可以添加人员,查看和修改,删除人员,我们假设我们的通讯录中只记录人员的名字和年龄字段。
先看看完成后的效果吧
点击New可以到新增人员页面,如下图:
编辑按钮后进入编辑页面,并将人员信息带过来,删除按钮可以将文档删除。
我们的项目中一种包含三个Xpage页面,CaryMain,CaryCreate和CaryUpdate。
1. CaryMain页面为主页面,提供新建按钮和显示信息。
1.1.该页面的New按钮的OnClick的事件代码如下:
1.2.DataTable属性设置如下:
Name的计算域值为:
rowdoc.getItemValueString(“name”)
Age的计算域值为:
rowdoc.getItemValueDouble(“age”)
LastModified的计算域值为:
rowdoc.getLastModified()
编辑按钮的onclick代码如下:
sessionScope.docUnid=rowdoc.getUniversalID();
sessionScope.name=rowdoc.getItemValueString("name");
sessionScope.age=rowdoc.getItemValueDouble("age");
context.redirectToPage("CaryUpdate")
删除按钮的代码为:
rowdoc.remove(true)
2. CaryCreate页面为创建新文档页面
2.1.页面有两个EditBox提供Name和Age的输入,首先设置Name的属性,如下图
Age也同样设置,不过Age的属性要将DisplayType改为Number。
2.2.两个按钮的代码如下:
OK:
vardoc=database.createDocument();
doc.replaceItemValue("name",requestScope.name);
doc.replaceItemValue("age",requestScope.age)
doc.save();
context.redirectToPage("CaryMain")
Cancel:
context.redirectToPage("CaryMain")
3.CaryUpdate页面提供更改时的修改页面,
3.1.我们将CaryCreate所有设置拷贝一份到CaryUpdate页面,然后调整Name和Age和EditBox的属性,将属性中Data标签中的高级中的Parameter改为SessionScope。
3.2.OK按钮代码调整为如下:
vardoc=database.getDocumentByUNID(sessionScope.docUnid);
doc.replaceItemValue("name",sessionScope.name);
doc.replaceItemValue("age",sessionScope.age);
doc.save();
sessionScope.name=null;
sessionScope.age=null;
context.redirectToPage("CaryMain")
这样我们一个简单的通讯录功能就完成了,也算入门Xpage了。