72. XPages的文档数据源

2024-02-01 18:48
文章标签 文档 数据源 72 xpages

本文主要是介绍72. XPages的文档数据源,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在经典的Lotus Notes应用程序开发中,表单与Notes文档密不可分,在位于表单的代码里获取当前文档几乎是后续所有操作和运算的起点。在XPages里,页面和数据虽然在架构上是分开的,但是一个用作表单的XPage的数据源通常还是一个Notes文档,只不过在SSJS里可以直接使用的document1等变量对应的是一个Java的com.ibm.xsp.model.domino.wrapped.DominoDocument对象。如果只用SSJS编程,这些变量具有和LotusScript里NotesDocument类似的方法可以读写字段。但如果要用Java开发,很多人已经习惯了使用lotus.domino包【注1】里的类,它们与LotusScript里的Notes类有几乎一一对应的属性和方法。那么怎样从一个设定了数据源为一个Domino文档的XPage获取代表该文档的lotus.domino.Document类型的Java对象呢?笔者写了如下的工具方法,可以在managedbean里调用:

	public static Document getCurrentDocument() throws Exception{UIViewRootEx2 view=(UIViewRootEx2) FacesContext.getCurrentInstance().getViewRoot();for (DataSource ds : view.getData()){if (ds instanceof DominoDocumentData){DominoDocumentData ddd=(DominoDocumentData) ds;DominoDocument dd=(DominoDocument) ddd.getDataObject();return dd.getDocument();}}throw new AppException("No document data source is found.");}

UIViewRootEx2 view是代表整个XPage的视图对象,它的getData()方法返回该页面添加的所有数据源,这些对象都实现了com.ibm.xsp.model.DataSource接口。如果添加了一个Domino文档,就会产生一个类型为com.ibm.xsp.model.domino.DominoDocumentData的对象,从这个数据源对象的getDataObject()方法可以返回一个com.ibm.xsp.model.domino.wrapped.DominoDocument对象,从它的getDocument()方法才能最终得到我们想要的lotus.domino.Document对象。如果当前XPage没有添加任何Domino文档数据源,则抛出一个自定义的异常AppException(简单扩展Exception,统一标志自定义的异常)。

com.ibm.xsp.model.domino.wrapped.DominoDocument类(以后简称DominoDocument)从名称就显示了它是一个包装器(wrapper),实际上它也确实是XPages对lotus.domino.Document类(以后简称Document)的包装,因为Document类不能满足在一个XPage上作数据源的要求,XPages构建了一个复杂的类和接口的层次【注2】,Document只是在最底层作为和Lotus Domino平台的接口读写文档的数据,最上层的com.ibm.xsp.model.domino.DominoDocumentData类作为数据源,和它绑定的各个表单控件从中读写数据,还要在同一页面每次被提交后和视图一道恢复状态。因此,在XPages环境下用Java编程时,不少情况用DominoDocument比Document更合适。比如用户填写了一个XPage表单后,点击一个按钮触发managed bean里的事件代码,在业务逻辑里读取用户输入的字段值,修改和保存表单背后的Domino文档时,就都应该调用DominoDocument的相应方法,而不能用Document,因为与在Lotus Notes客户端NotesDocument的各字段动态获得用户的输入值不同,在XPages里更新的是DominoDocument对象,而不是底层的Document。所以只有从DominoDocument对象才能获得用户输入的值;保存时如果直接调用Document的save方法,则会丢失用户的修改;若要修改文档,也要使用DominoDocument对象,否则在调用DominoDocument的save方法时,Document上做的修改会被DominoDocument对应的字段值覆盖掉。既然我们要经常获得和使用这个DocuminoDocument对象,也就应该像Document一样写一个工具方法:

	public static DominoDocument getCurrentDominoDocument() throws Exception{UIViewRootEx2 view=(UIViewRootEx2) FacesContext.getCurrentInstance().getViewRoot();for (DataSource ds : view.getData()){if (ds instanceof DominoDocumentData){DominoDocumentData ddd=(DominoDocumentData) ds;return (DominoDocument) ddd.getDataObject();}}throw new AppException("No document data source is found.");}

有了这个对象我们就可以像下面这样读取修改和保存文档数据源。

		DominoDocumentData domDoc=XSPUtil.getCurrentDominoDocument();String status = domDoc.getItemValueString("Status");domDoc.replaceItemValue("Action", "");domDoc.save();

注1:lotus.domino包随R5发布,自那以后Java访问Lotus Domino对象都是藉由其中的类, XPages API里有关Domino对象的类也是依靠调用lotus.domino包。

 

注2:下面只是列举了XPages API里与Domino文档数据源相关的部分类和接口的层次:

Classcom.ibm.xsp.model.domino.DominoDocumentData

 java.lang.Object

 extended by com.ibm.xsp.complex.ValueBindingObjectImpl

     extended by com.ibm.xsp.model.AbstractDataSource

         extended by com.ibm.xsp.model.AbstractDocumentDataSource

              extended by com.ibm.xsp.model.domino.DominoDocumentData

All Implemented Interfaces:

ComponentBindingObject,ValueBindingObject, DataPublishingObject, DataSource, DocumentDataSource,javax.faces.component.StateHolder

 

Classcom.ibm.xsp.model.domino.wrapped.DominoDocument

java.lang.Object

 extended by com.ibm.xsp.model.domino.wrapped.DominoDocument

All Implemented Interfaces:

   com.ibm.xsp.model.DataObject, java.io.Serializable

这篇关于72. XPages的文档数据源的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/668135

相关文章

Python Pillow 库详解文档(最新推荐)

《PythonPillow库详解文档(最新推荐)》Pillow是Python中最流行的图像处理库,它是PythonImagingLibrary(PIL)的现代分支和继承者,本文给大家介绍Pytho... 目录python Pillow 库详解文档简介安装核心模块架构Image 模块 - 核心图像处理基本导入

C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式

《C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式》Markdown凭借简洁的语法、优良的可读性,以及对版本控制系统的高度兼容性,逐渐成为最受欢迎的文档格式... 目录为什么要将文档转换为 Markdown 格式使用工具将 Word 文档转换为 Markdown(.

详解如何使用Python构建从数据到文档的自动化工作流

《详解如何使用Python构建从数据到文档的自动化工作流》这篇文章将通过真实工作场景拆解,为大家展示如何用Python构建自动化工作流,让工具代替人力完成这些数字苦力活,感兴趣的小伙伴可以跟随小编一起... 目录一、Excel处理:从数据搬运工到智能分析师二、PDF处理:文档工厂的智能生产线三、邮件自动化:

Python实现自动化Word文档样式复制与内容生成

《Python实现自动化Word文档样式复制与内容生成》在办公自动化领域,高效处理Word文档的样式和内容复制是一个常见需求,本文将展示如何利用Python的python-docx库实现... 目录一、为什么需要自动化 Word 文档处理二、核心功能实现:样式与表格的深度复制1. 表格复制(含样式与内容)2

Maven项目中集成数据库文档生成工具的操作步骤

《Maven项目中集成数据库文档生成工具的操作步骤》在Maven项目中,可以通过集成数据库文档生成工具来自动生成数据库文档,本文为大家整理了使用screw-maven-plugin(推荐)的完... 目录1. 添加插件配置到 pom.XML2. 配置数据库信息3. 执行生成命令4. 高级配置选项5. 注意事

Python使用python-docx实现自动化处理Word文档

《Python使用python-docx实现自动化处理Word文档》这篇文章主要为大家展示了Python如何通过代码实现段落样式复制,HTML表格转Word表格以及动态生成可定制化模板的功能,感兴趣的... 目录一、引言二、核心功能模块解析1. 段落样式与图片复制2. html表格转Word表格3. 模板生

浅谈Redis Key 命名规范文档

《浅谈RedisKey命名规范文档》本文介绍了Redis键名命名规范,包括命名格式、具体规范、数据类型扩展命名、时间敏感型键名、规范总结以及实际应用示例,感兴趣的可以了解一下... 目录1. 命名格式格式模板:示例:2. 具体规范2.1 小写命名2.2 使用冒号分隔层级2.3 标识符命名3. 数据类型扩展命

使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)

《使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)》PPT是一种高效的信息展示工具,广泛应用于教育、商务和设计等多个领域,PPT文档中常常包含丰富的图片内容,这些图片不仅提升了... 目录一、引言二、环境与工具三、python 提取PPT背景图片3.1 提取幻灯片背景图片3.2 提取

Android实现在线预览office文档的示例详解

《Android实现在线预览office文档的示例详解》在移动端展示在线Office文档(如Word、Excel、PPT)是一项常见需求,这篇文章为大家重点介绍了两种方案的实现方法,希望对大家有一定的... 目录一、项目概述二、相关技术知识三、实现思路3.1 方案一:WebView + Office Onl

SpringBoot多数据源配置完整指南

《SpringBoot多数据源配置完整指南》在复杂的企业应用中,经常需要连接多个数据库,SpringBoot提供了灵活的多数据源配置方式,以下是详细的实现方案,需要的朋友可以参考下... 目录一、基础多数据源配置1. 添加依赖2. 配置多个数据源3. 配置数据源Bean二、JPA多数据源配置1. 配置主数据