【问题标题】:Lotus notes automation from browser来自浏览器的 Lotus Notes 自动化
【发布时间】:2013-12-13 04:03:48
【问题描述】:

我一直在尝试从浏览器界面自动填充 Lotus Notes 邮件。

参考 Richard Schwartz 的回答后,我使用 Lotus.NotesSession 类想出了这段代码。

function SendScriptMail() {
            var mToMail = document.getElementById('txtMailId').value
            var mSub = document.getElementById('txtSubject').value
            var mMsg = document.getElementById('txtContent').value
            var Password = "yyy"
alert("1");
            var MailFileServer = "xxx.com"
            var MailFile = "C:\Program Files\IBM\Lotus\Notes\mail\user.nsf"
alert("2")
            var Session;
            var Maildb;
            var UI;
            var NewMail;
            var From = "user@xxx.com"
            try {
alert("3")
                // Create the Activex object for NotesSession
                Session = new ActiveXObject("Lotus.NotesSession");
alert("4")
                if (Session == null) {
                    throw ("NoSession");
                } else {
                    Session.Initialize(Password);
                    // Get mail database
                    Maildb = Session.GetDatabase(MailFileServer, MailFile);
alert("5")
                    if (Maildb == null) {
                        throw ("NoMaildb");
                    } else {
                        NewMail = MailDB.CreateDocument();
                        if (MailDoc == null) {
                            throw ('NoMailDoc');
                        } else {
                            // Populate the fields
                            NewMail.AppendItemValue("Form", "Memo")
                            NewMail.AppendItemValue("SendTo", mToMail)
                            NewMail.AppendItemValue("From", From)
                            NewMail.AppendItemValue("Subject", mSub)
                            NewMail.AppendItemValue("Body", mMsg)
                            NewMail.Save(True, False)
                            NewMail.Send(False)

                        }

                    }
                }
            } catch (err) {
                // feel free to improve error handling...
                alert('Error while sending mail');
            }
        }

但是现在,警报 1,2,3 正在触发,然后计数器移动到 catch 块。 Lotus Notes 会话未开始。

在我之前查看的一个 powershell 脚本中,有一个代码 regsvr32 "$NotesInstallDir\nlsxbe.dll" /sSession = new ActiveXObject("Lotus.NotesSession"); 之前使用。 javascript中是否也有类似的东西,如果有,我该如何调用该dll。

我想我已经意识到我哪里出错了。据我说,直到alert("5") 事情都很好。但是由于Lotus.NotesSession 没有CreateDocument() 方法,它会抛出错误。我不确定如何创建文档并填充值。

【问题讨论】:

  • Lotus Notes 安装程序的某些版本无法正确注册 NLSXBE.DLL。例如,请参阅此 IBM 技术说明:www-01.ibm.com/support/docview.wss?uid=swg21112239 这将影响在计算机上但在 Notes 客户端环境之外运行的所有 Notes 应用程序。我不知道有任何黑客可以让您从 JavaScript 运行 regsvr32.exe。如果可能的话,这将是一个巨大的安全漏洞。这只是在您的 JavaScript 可以运行之前必须在安装中更正的问题。
  • 我发现activex控制器只能在Internet Explorer中工作,所以我不需要导入dll文件。但是,安装数据库后,我不确定如何继续。请指导我完成接下来的步骤。
  • 您将以与目前几乎相同的方式继续进行(即初始化会话:调用 getDatabase 和 createDocument,以及 appendItemValue,但 Body 除外。为此,您将使用类似 rtBody = NewMail.CreateRichTextItem("Body"),然后您将使用 NotesRichTextItem 类的方法(例如 AppendText、AppendTable、AppendStyle... 更多信息请参阅文档)来创建您的内容。

标签: javascript lotus-notes


【解决方案1】:

由于您选择使用 Notes.NotesUIWorkspace 类,因此您正在使用 Notes 客户端前端。它正在运行,您的用户可以在屏幕上看到正在发生的事情。您是否知道有一组后端类(植根于Lotus.NotesSession)而不是Notes.NotesSessionNotes.NotesUIWorkspace)直接处理Notes 数据库数据,而不会导致Notes 客户端获取焦点并显示您的所有内容在做什么?

使用前端意味着在某些情况下(取决于您使用的 Notes 版本),您将不会直接使用 Notes 消息中的标准字段名称作为存储和作为在后端看到。您将使用在用于查看和编辑消息的表单中用作临时输入的名称。您可以使用 Domino Designer 查看备忘录表单来查看这些名称。

不要使用“SendTo”,而是尝试使用:

MailDoc.Fieldsettext('EnterSendTo', mToMail)

关于 Body 字段,没有涉及临时字段,但是您还没有真正解释您遇到的困难。你不知道如何在浏览器中显示你想要的界面吗?你不知道如何将不同的输入组合成一个FieldSetText 调用吗?或者你只是对FieldSetText 不能做任何花哨的格式不满意?在后一种情况下,要获得更多格式化功能,您可能需要切换到使用后端类,这样您就可以访问具有更多格式化功能的 NotesRichTextItem 类。

【讨论】:

  • 这里是 NotesSession 文档的链接。该页面将自动设置框架并向您显示所有类的索引。 publib.boulder.ibm.com/infocenter/domhelp/v8r0/…
  • 对于多个收件人,将 SendTo 项设置为字符串数组。即,将数组传递给 AppendItemValue() 方法。
  • var mToMail = new Array("xxx@abc.com","yyy@abc.com"); NewMail.AppendItemValue("SendTo",mToMail) 不工作。
  • 我不知道为什么那行不通,因为这是 AppendItemValue 在其他语言中的正确策略。另一种可能的方法是使用 var toItem = NewMail.GetItem("SendTo");然后为您需要的每个地址编写一个调用 toItem.AppendToTextList() 的循环。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-22
  • 1970-01-01
相关资源
最近更新 更多