覆盖作者字段并允许访问某些字段。莲花便笺

Override Authors Field and allow access to some fields. Lotus Notes

我有一个 Notes 表单,其中包含许多字段、选项卡式表格、嵌入式视图等。通过作者字段和 ACL 将编辑访问权限限制在一个小组中,以防止对大部分数据进行更改。但是,我还需要允许更广泛的用户组编辑一个或两个字段。本质上与受控访问部分可以做的事情相反。

在此实例中迁移到 XPages 不是一个现实的选择。

我知道这可能无法启动,但我们将不胜感激。

没有作者访问权限的用户无法直接编辑部分文档。我能想到的唯一选择是让他们能够单击一个按钮,允许他们将更改输入到新的临时文档中(使用仅包含您要公开的字段的表单),并设置一个在创建或修改文档时运行的代理读取这些文档,将数据从它们复制回原始文档。不过,在应用更改之前可能会有一些延迟,因此您必须就此警告用户。

我也会遵循理查德在他的回复中描述的路径,但不会拖延。编写一个代理,代表允许编辑该数据库中所有内容的人/服务器运行。

然后创建一个您在对话框中打开的表单,用户可以填写该表单并使用 runonserver 调用代理。

示例代码可能如下所示:

Dim ws as New NotesUIWorkspace
Dim ses as New NotesSession
Dim db as NotesDatabase
Dim ag as NotesAgent
Dim docTmp as NotesDocument
Dim strID as String
Dim varOK as Variant

Set db = ses.CurrentDatabase
Set ag = db.GetAgent( "RunMeOnServerOnBehalfOfSomeone" )
Set docTmp = new NotesDocument( db )
call docTmp.ReplaceItemValue( "ChangeUNID", docToEdit.UniversalID )

varOK = ws.Dialogbox( "YourSpecialDialogForm", True, True, False, False, False, False, "Enter values", docTmp, True, False, True )
If not varOK then exit sub
Call docTmp.Save( True, True, True ) '- runonserver cannot be called with a notesdocument that is unsaved
strId = docTmp.NoteID
Call ag.RunOnServer( strID )

在代理中,您读取文档的 unid 以更改并将值从 docTmp 写入目标文档。

不要忘记稍后在代理或代码中清理 docTmp。

当然你可以使用"reusable"个参数文件或者每个用户一个文件。取决于需要此功能的频率。

但这似乎有点牵强(您需要在您的代理中跟踪谁请求更改,因为所有文件都将由代理的签名者而不是用户本人保存。

可能更好的解决方案是将用户添加到文档的作者字段,并使用访问控制部分简单地保护文档中的所有其他内容。您可以完全隐藏这些部分 headers 和所有内容,这样就没有人可以折叠它们,或者如果您不喜欢它们的外观。