【问题标题】:creating fields in lotus notes document?在 Lotus Notes 文档中创建字段?
【发布时间】:2013-09-03 19:43:46
【问题描述】:

我正在尝试将我的 access 数据库中的项目导出到 lotus notes。我要导出到的文档是固定的,并且所有数据都写入其中,我只需要以某种方式标记占位符,然后更新值。我已阅读文档,看来我需要处理字段,然后调用一个方法来替换文本,如下所示:

'where body is the field and the following string is what to replace field with
Call doc.ReplaceItemValue("body", "REPLACE BODY")

要清楚,我的整个代码如下所示:

Set session = CreateObject("Notes.NotesSession")
Set maildb = session.GetDatabase("server", "mail\box.nsf")

Set View = maildb.GetView("Stationery")
Set entries = View.AllEntries

Set entry = entries.GetFirstEntry

Set doc = entry.Document

Call doc.ReplaceItemValue("Subject", "Report - " & Date)
'add code here
Call doc.send(False, "person.to.receive@thisemail.com")


End Sub

我注意到,在阅读文档时,似乎可以创建字段,然后处理这些字段以更新值。例如,如果我有一个名为 $COST 的字段,那么可以这样做:

Call doc.ReplaceItemValue("$COST", "The cost is $3000")

并且应该更新该字段以反映我通过该方法传递的值。我的大问题是,即使查看文档,我也无法弄清楚我需要去哪里添加自定义字段。文档似乎假设您知道如何创建这些字段并解决它们。还是我只应该以编程方式创建这些字段然后填写数据?我的客户是 Lotus Notes 8。谢谢!

【问题讨论】:

  • 我建议不要以 $ 符号开头的字段名称,有一些保留的系统字段以该字符开头,这样会使其他将使用您的代码的开发人员感到困惑。不在字段名称中使用该字符只是一个既定的约定。此外,对于富文本字段(例如您的正文字段),有富文本类可以让您更好地控制内容的外观,就像 Knut 在他的回答中显示的那样。

标签: vba lotus-notes


【解决方案1】:

是的,这就是 IBM Lotus Notes 数据库的酷炫之处:您可以将项目(=字段)放入 Notes 文档中,而无需事先定义字段。

如果您使用doc.ReplaceItemValue() 在文档中创建项目并保存或发送文档,那么项目就在那里。您可以在打开所选文档的属性框时检查项目。所有项目都列在文档属性的第二个选项卡上。

另一个问题当然是在表单中定义字段,以便用户可以看到创建的项目,而无需查看文档属性框。在 Designer 中打开数据库并将字段放置在正确的位置和大小以形成表格。

您的问题和 cmets 告诉您要创建一个文档,用数据填充它并将其发送给用户。

如果所有用户都可以访问您的 Notes 服务器,那么您可以在现有数据库中创建该文档,然后只向用户发送链接邮件。通过这种方式,您可以创建一个漂亮的表单并定位所有数据字段。用户将通过链接访问数据库中的文档。

另一种方法是创建一个漂亮的 HTML 文件,将其附加到邮件中并发送。 在这种情况下,您可以在 'add code here 处将此代码添加到您的示例中:

Call doc.RemoveItem("Body")
Set rtitem = doc.CreateRichTextItem( "Body" )
Call rtitem.AppendText("your mail text")
Call rtitem.EmbedObject(EMBED_ATTACHMENT, "", "report.html")

【讨论】:

  • 有没有办法可以在 UI 中将字段添加到我当前的笔记文档?或者你认为我应该如何解决我的问题?创建一个新文档并以编程方式添加一堆自定义字段,然后保存并使用它?现在我正在更换 rtf 正文,但有更简单的方法吗?否则,我如何在文档正文中“定位”我的字段?
  • 目标是向 Notes“外部”的人发送包含您的数据的电子邮件吗?
  • 不,我的目标是使用固定或动态生成的文档中的某个“模板”向我的联系人列表中的预定义组发送一封电子邮件,该组都有莲花笔记(我需要计算了解如何格式化、生成、填写表格以及将 .jpg“粘贴”到文档中)
  • 接受,因为这似乎是正确的行动方案。然而,我只有客户端访问权限,我无法使用设计器,也许这就是我需要讨论的事情。谢谢
  • 哦,那么创建和发送 HTML 文件对您来说是一个不错的选择。
【解决方案2】:

基于@Knut Herrmann 回答的评论线程,我相信您真正想要的解决方案涉及使用“存储形式”。 NotesDocument.Send() 方法的第一个参数是一个布尔值,用于指定是否要存储表单。

通常,您会使用 Domino Designer 创建存储表单。您不需要任何人邮箱的设计者权限。您只需要创建一个自己的空数据库,然后将一个表单放入其中。您将更改代码以打开该数据库并在其中创建文档,而不是像现在这样在邮箱数据库中创建文档。 (关于 Notes 的另一个很酷的事情是,您实际上不必在邮箱数据库中工作即可发送文档。您可以从 any 发送 any 文档em> 数据库,只要您将适当的字段放入其中即可。)

还有一种方法可以在没有 Domino Designer 的情况下执行此操作,您甚至可以动态生成具有真正自定义字段的表单,您的代码只有在运行时才会发现这些字段。您可以使用 DXL 来做到这一点,它是一种用于描述 Lotus Notes 对象(包括表单)的 XML 格式。您只需要一些示例 DXL 即可使用。最好应该是一个空数据库,其中包含一个简单的表单,该表单或多或少地设置在您想要的布局中,尽管您再次需要 Domino Designer。您可以只使用您的代码当前正在使用的邮箱数据库,但这会在 DXL 中留下很多不需要的额外内容;并且鉴于您对 Notes 并不是那么熟悉,因此您可能很难浏览所有内容以找到所需的内容。

不过,无论哪种方式,您都可以使用 NotesDXLExporter 类来生成 DXL 文件。您的代码可以操作 DXL,根据需要添加/更改元素(当然,遵循您在示例中看到的模式),并且您可以使用 NotesDXImporter 创建您的代码将实际用于创建文档和邮件的数据库带有存储形式的消息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-01
    相关资源
    最近更新 更多