[英]How to Edit NSF file using c#?
我想以編程方式將一些值更改為NSF項目,然后保存它。(即,編輯NSF文件,然后保存版本)
例如:
我想將所有郵件的發件人名稱設置為“ preeti@abc.com”。(使用Domino.dll)。
我嘗試的解決方案:(交換To和From值)
字符串Temp_From =((object [])docInbox.GetItemValue(“ From”))[0]作為字符串; 字符串Temp_SendTo =((object [])docInbox.GetItemValue(“ SendTo”))[0]作為字符串; docInbox.ReplaceItemValue(“ From”,Temp_SendTo); docInbox.ReplaceItemValue(“ SendTo”,Temp_From); docInbox.Save(true,false,false);
/ *也適用於以下字段:
對於發件人:AltFrom,DisplayFrom,DisplayFrom_2,dspFrom,ForwardedFrom,INetFrom,tmpDisplayFrom
收件人:displaySendTo,EnterSendTo,Envelope_to,tmpDisplaySendTo
還嘗試保存:docInbox.Save(true,true,true); * /
在上面的代碼中,成功編輯更改后,值未反映在Nsf文件中。 但是當我以編程方式讀取編輯的Nsf文件(將修改后的文件復制到其他位置)時,它顯示的是更改后的值(為什么更改在此處不可見?)
可以在這里找到“編程指南,第2卷:LotusScript / COM / OLE類”: http : //www-12.lotus.com/ldd/doc/uafiles.nsf/docs/DESIGNER70/
不過,作為簡要概述,一旦有了Document的句柄,就可以使用Items屬性遍歷該文檔上的所有現有字段(“項目”)。 並且您可以使用ReplaceItemValue和/或AppendItemValue方法更新該文檔上的給定字段。
您是否正在使用Notes客戶端檢查結果? 我猜這種現象可以由客戶端相當積極的緩存來解釋。 在檢查程序結果之前,請嘗試從數據目錄中刪除文件cache.ndk
。
另外,Notes“項目”通常包含一個值數組-如果例如已將郵件發送給多個人,則交換SendTo
和From
字段的方法將丟失數據。 嘗試復制整個object[]
。
我做了一次。
您必須為項目添加一個新引用,然后在“添加引用”對話框中選擇“ 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();
我不確定這個問題是否真的是界面中的問題,或者我在代碼中做錯了其他事情。 但是,如果有人遇到了這個問題:線程是我解決問題的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.