`
从此醉
  • 浏览: 1046616 次
  • 性别: Icon_minigender_1
  • 来自: US
社区版块
存档分类
最新评论

53. 在Lotus Notes中删除文档的功能

 
阅读更多
缘起

“删除”是几乎所有应用程序,特别是以数据为中心(Data-Centric)的应用具有的普通功能。单纯的“删除”也和新建、保存、编辑、查找等功能一样,集成在Lotus Notes客户端中,简单到不需要编程,只要和在Windows下删除文件一样按Delete键再加F9刷新即可。但是这样方便的前提是用户有权限删除这些目标文档。而在Lotus Notes特殊的数据库设计中,一个数据库的删除文档的权限是一个不可分的单元,而不像关系型数据库那样可以细分到每个表。而且,Lotus Notes中安全性被设计成基础的特性,每一段运行的程序都有一个账户身份,这个身份具备特定的权限,该程序执行的操作被限定在权限范围内。由于Lotus Notes客户端应用程序的代码都是以客户端当前所属的用户身份在客户端上运行,而绝大部分的应用程序都不可能把整个数据库的删除文档的权限赋予每一个用户,所以Lotus Notes客户端集成的删除文档功能对大部分用户都是不可用的。

常见方案

但是删除功能很多时候又是必不可少的,所以程序员就必须绕过上述限制来实现。一般采用的是“假删除”的方法,即对要删除的文档加上某个标记,使其不符合视图的选择条件,从而“消失”。比如,在一个操作中添加如下公式:

@SetField(“DeleteFlag”; 1);

然后给视图的选择公式补充相应的条件:

Select Form=”Company” & DeleteFlag!=1

与此配套地,还可以建一个视图专门包含被“删除”的文档,以及一个代理定时删除这些文档。

这个方案的好处是删除功能的代码很简单,被删除的文档还可以从类似回收站的视图查看和恢复。缺点是每个普通视图的选择公式都必须加上额外的部分以屏蔽这些文档。

另一种思路

为了克服这个缺点,笔者设计了另一个方案。真正删除文档的障碍在于用户没有权限,那我们就暂时以有权限的账户身份来运行代码,这样做的可能性就来源于代理。Lotus Notes的代理在服务器上运行时可以设置为以某个特定账户的身份运行(在代理属性信息框的安全性页里有Run on behalf of)。我们可以建一个用于删除文档的代理,以一个有相应权限的账户身份运行。在用户界面的删除操作中,调用这个代理。这样不但解决了权限问题,还可以灵活控制删除前后的逻辑。唯一的问题是,在视图里删除选定的多个文档时,如何使代理明白选择的是哪些文档。可以通过调用代理时建立一个临时文档记录要删除的文档的ID,然后将这个临时文档的ID作为参数传给代理的RunOnServer()方法。

视图操作中调用删除文档代理的代码:

Sub Click(Source As Button)
	Dim s As New NotesSession
	Dim db As NotesDatabase
	Set db=s.CurrentDatabase
	
	Dim ws As New NotesUIWorkspace
	Dim dc As NotesDocumentCollection
	Set dc=ws.CurrentView.Documents
	Dim ids As New NArray(-1)
	Dim doc As NotesDocument
	Set doc=dc.GetFirstDocument
	Do Until doc Is Nothing
		‘Check if the selected document can be deleted.
		If doc.Status(0)="1.1 Draft" Then
			ids.Add(doc.NoteID)
		End If
		Set doc=dc.GetNextDocument(doc)
	Loop
	If ids.Count=0 Then
		Msgbox "Please select drafts to delete. Submitted documents cannot be deleted."
		Exit Sub
	End If
	
	Dim docPrmt As New NotesDocument(db)
	docPrmt.DocIds=ids.container
	Call docPrmt.Save(True, False)
	Dim agent As NotesAgent
	Set agent=s.CurrentDatabase.GetAgent("(agDeleteDocs)")
	Call agent.RunOnServer(docPrmt.NoteID)
	
	Msgbox ids.Count & " documents have been deleted."
	Call ws.ViewRefresh()
End Sub

删除文档代理的代码:

%REM
	Agent agDeleteDocs
	Created Feb 29, 2012 by Starrow Pan
	Description: Comments for Agent
%END REM
Option Public
Option Declare
Use "Commons"
Sub Initialize
	Dim s As New NotesSession
	Dim db As NotesDatabase
	Set db=s.Currentdatabase
	Dim agent As NotesAgent
	Set agent=s.Currentagent
	Dim profile As NotesDocument
	Set profile=db.Getdocumentbyid(agent.Parameterdocid)
	Dim ids As Variant
	ids=profile.DocIds
	Dim doc As NotesDocument
	Dim ed As ExtDoc
	ForAll id In ids
		Set doc=db.Getdocumentbyid(id)
		Set ed=New ExtDoc(doc)
		Call ed.RemoveAll(True)
	End ForAll
	Call profile.Remove(True)
End Sub
Web应用程序

最后要说明的是,在用ASP、PHP、Java等各种语言开发的Web应用程序中,因为安全性是和其他所有业务逻辑一起由程序员后天开发的,而且包括操作数据库的大量代码都是以唯一的有权限的用户身份在服务器上运行的,所以“删除”操作和其他操作一样,只要程序员在其代码或专门的安全性模块里做好检查,就没有特别的问题。

分享到:
评论

相关推荐

    中文LOTUS NOTES R5 24学时学习教程

    在Lotus Notes R5的客户端中搜索和保存;管理日历项和任务;使用群组日历和安排计划;复制数据库;操作附件;自定义Notes客户端。 目 录 前言 第1学时 Notes起步 1 1.1 Lotus Notes和Domino概述 1 1.2 了解Notes的...

    Lotus Domino WEB详细 学习笔记

    38. DOMINO R5的域搜索功能在WEB上的实现 77 39. Display Rich Text fields in a view 86 40. Auto-Launch a file attachment 87 41. Showing a response count without showing the responses 89 42. ...

    Lotus Domino WEB 开发技术积累-DOC(313页)

    38. DOMINO R5的域搜索功能在WEB上的实现 77 39. Display Rich Text fields in a view 86 40. Auto-Launch a file attachment 87 41. Showing a response count without showing the responses 89 42. 常用的几个...

    LotusDomino学习笔记.doc

    38. DOMINO R5的域搜索功能在WEB上的实现 77 39. Display Rich Text fields in a view 86 40. Auto-Launch a file attachment 87 41. Showing a response count without showing the responses 89 42. 常用的几个...

    LotusDomino学习笔记(400页涵盖代理和公式使用)

    38. DOMINO R5的域搜索功能在WEB上的实现 77 39. Display Rich Text fields in a view 86 40. Auto-Launch a file attachment 87 41. Showing a response count without showing the responses 89 42. 常用的几个...

    Lotus公式语言函数简介

    @DeleteDocument 在代理中运行时此函数时,删除正在被处理的文档 @DeleteField 在代理中运行该函数,@DeleteField 将删除指定的域 @DialogBox 弹出一个对话框,用指定的表单显示当前的文档 @Do 从左到右计算表达式,...

    Lotus Domino如何删除死信

    删除死信代理,具体的nsf文件没有上传,代码在文档中都有

    服务器的Mail.box文件被破坏的解决方法

    (1)在Windos目录下或在Notes系统目录下找到Notes.ini文件,然后使用在文本编辑器中打开Notes.ini文件,保留该文件中的前六行内容,其余内容全部删除,保存Notes.ini文件并退出。 (2)删除c:\notes\data系统目录下...

    极品文档影像软件

     该软件可以跟其他应用相集成,比如Lotus Domino/Notes,基于Web的应用,其他应用系统等。  ■ 互联网发布  另外,该软件生成的影像文件是符合国际标准的TIFF文件,可以方便地转换成PDF文件或直接发布到互联网...

    2档案管理系统.doc

    档案管理系统功能 大类 需求描绘 目录管理 1、 目录由企业档案管理员创立 2、 目录改正必然在无有关文档时才可进行 或批量更新有关档案后才可操作(后期 做) 3、 删除必然在无有关文档时才可进行 档案种类管 1、 ...

    McAfee 8.0 简体中文

    这些"访问保护"功能在防范入侵时非常有效。在病毒发作时,管理员可以 阻止对感染病毒区域的访问,直到发布新的 DAT。 注: 如果您阻挡 ePolicy Orchestrator 代理或 Entercept 代理 使用的端口,则代理...

    档案管理系统.docx

    档案管理系统 神州数码档案管理系统... 大类 需求描述 目录管理 目录由公司档案管理员创建 目录修改必须在无相关文档时才可进行或批量更新相关档案后才可操作(后期做) 删除必须在无相关文档时才可进行 档案类型管理

    档案管理系统-.docx

    档案管理系统- 神州数码档案管理系统解决... 大类 需求描述 目录管理 目录由公司档案管理员创建 目录修改必须在无相关文档时才可进行或批量更新相关档案后才可操作(后期做) 删除必须在无相关文档时才可进行 档案类型

    TurboPack SysTools Updated for 10.3 Rio FullSource.zip

    电子邮件转换工具:允许用户将电子邮件从一个平台或格式转换到另一个,例如将 Outlook 数据文件(PST)转换为 Lotus Notes(NSF)格式。 文件格式转换工具:使用户能够将文件从一种格式转换为另一种格式,比如将 ...

    BlackBerry开发平台配置及入门介绍(傻瓜教程)

    其中“手机邮箱”还可支持LotusNotes、MicrosoftExchange或POP3/IMAP4邮件系统,支持Web界面管理、查看RAR、声音及视频格式的文件,目前可使用的主流品牌手机已达数10款。“Black Berry”支持Lotus Notes、Microsoft...

    PROJECT 2007宝典 9/9

    Microsoft Project 2007是流行的基于网络的项目管理软件,在各类项目管理中发挥着巨大的作用。本书全面介绍了Microsoft Project 2007的强大功能和使用方法。首先从项目管理基础入手,然后建立具体的项目,介绍如何...

    PROJECT 2007宝典 7/9

    Microsoft Project 2007是流行的基于网络的项目管理软件,在各类项目管理中发挥着巨大的作用。本书全面介绍了Microsoft Project 2007的强大功能和使用方法。首先从项目管理基础入手,然后建立具体的项目,介绍如何...

    PROJECT 2007宝典 1/10

    Microsoft Project 2007是流行的基于网络的项目管理软件,在各类项目管理中发挥着巨大的作用。本书全面介绍了Microsoft Project 2007的强大功能和使用方法。首先从项目管理基础入手,然后建立具体的项目,介绍如何...

Global site tag (gtag.js) - Google Analytics