0

我想以编程方式将一些值更改为 NSF 项目,然后想要保存它。(即编辑 NSF 文件,然后保存版本)

例如:

我想将所有邮件的发件人名称设置为“preeti@abc.com”。(使用 Domino.dll)。

我尝试过的解决方案:(交换 To 和 From 值)

String Temp_From = ((object[])docInbox.GetItemValue("From"))[0] as String; String Temp_SendTo = ((object[])docInbox.GetItemValue("SendTo"))[0] as String; docInbox.ReplaceItemValue("From", Temp_SendTo); docInbox.ReplaceItemValue("SendTo", Temp_From); docInbox.Save(true, false, false);

/* 也适用于以下领域:

对于来自:AltFrom、DisplayFrom、DisplayFrom_2、dspFrom、ForwardedFrom、INetFrom、tmpDisplayFrom

对于 To : displaySendTo,EnterSendTo,Envelope_to,tmpDisplaySendTo

还尝试保存: docInbox.Save(true, true, true); */

在成功编辑更改后的上述代码中,值不会反映在 Nsf 文件中。但是,当我以编程方式读取编辑过的 Nsf(在不同位置复制修改后的文件)文件时,它会显示更改的值。(为什么此处看不到更改?)

4

3 回答 3

0

“编程指南,第 2 卷:LotusScript/COM/OLE 类”可在此处找到: http ://www-12.lotus.com/ldd/doc/uafiles.nsf/docs/DESIGNER70/

不过,作为简要总结,一旦您有了 Document 的句柄,就可以使用 Items 属性遍历该文档上的所有现有字段(“items”);并且您可以使用 ReplaceItemValue 和/或 AppendItemValue 方法更新该文档上的给定字段。

于 2009-11-11T14:46:32.867 回答
0

您是否正在使用 Notes 客户端检查结果?我想这种行为可以用客户端相当激进的缓存来解释。cache.ndk在检查程序结果之前,请尝试从数据目录中删除该文件。

此外,Notes“项目”通常包含一组值 -如果例如已将邮件发送给多个人,则交换SendTo和字段的方法将丢失数据。From尝试复制整个object[]

于 2009-11-12T06:14:15.890 回答
0

我做过一次。

您必须为您的项目添加一个新引用并在“添加引用”对话框中选择“COM”。在列表中找到名为“Lotus Domino Objects”的组件并添加它。您将看到一个名为“Domino”的新参考添加到您的项目中。该 COM 组件由 Lotus Notes 客户端安装。您必须在开发机器中安装它,并且在运行应用程序时也必须安装它。

从那时起,您可以使用在 NotesDesigner 中使用 lotusscript 进行开发时可用的大多数类。

添加适当的“使用”语句:

using Domino;

创建一个笔记会话:

NotesSession session = new NotesSession();
session.Initialize("mypassword");
//this uses your current Notes location and id.
//i think you can use session.Initialize("") if notes is already running and you are already logged in.

获取数据库:

NotesDatabase notesDb = session.GetDatabase("server", "database", false);

获取一些文件,例如:今天的约会(如果你打开的数据库是你的mail.nsf)

NotesDocumentCollection col = null;
try { col = notesDb.Search("Form = \"Appointment\" & StartDate = @Today", null, 0); }
catch (Exception e) { }

遍历您的集合:

if (null != col)
{
    NotesDocument doc = col.GetFirstDocument();
    while (doc != null)
    {
        //do your magic tricks
        doc = col.GetNextDocument(doc);
    }
}    

我注意到这个接口的一个问题:没有 session.Close() 方法或任何类似的方法,一旦 GC 收集了 C# 对象,我的会话就没有在服务器中关闭。一旦我打开一个新的 NotesSession(),只要我的 c# 线程还活着,它就会在 domino 服务器中保持活跃。为了解决这个问题,我必须创建后台线程并且只从线程中实例化新的 NotesSession() 对象。线程还必须在启动之前使用 STA 单元模式设置。

Thread thread = new Thread(new ThreadStart(MyFunctionThatInstantiatesNewNotesSessions));
thread.SetApartmentState(System.Threading.ApartmentState.STA);
thread.Start();
thread.Join();

我不确定这个问题是否真的是界面中的问题,或者我在代码中做错了什么。但是如果有人面临这个问题:线程是我修复它的方式。

于 2016-07-21T20:04:51.397 回答