我正在试图弄清楚如何通过C#获取Lotus Notes上当前打开的文档,但我不能。即使我在Google上研究了半天,我找不到任何有用的东西。
使用我的代码,我得到了我想要的视图,我想要的数据库等,但我只想获得打开的文档。我试过像IsUIDocOpen这样的东西,但是没有一个完整的集合包含它是真的。
有人知道通过Domino API打开的文档和未打开的文档之间是否有任何不同之处?我的解决方法是获取电子邮件的主题和电子邮件的大小,并比较每个电子邮件和匹配时获取条目ID,然后获取我需要的信息 - 但这需要太长时间,尤其是当收件箱很大时。 / p>
有什么建议吗?
这是我的代码:
NotesSession session = new NotesSession();
session.Initialize(sPassword);
notedb = session.GetDatabase(server, filename, false);
if (notedb.IsOpen)
{
mailView = notedb.GetView("$Inbox");
mailDoc = mailView.GetLastDocument();
//mailDoc = mailView.GetDocumentByKey();
try
{
while (mailDoc != null)
{
NotesItem item = mailDoc.GetFirstItem("From");
if (item != null)
{
MessageBox.Show("From = " + item.Text);
}
}
}
}
解决方案:应该是这样的:mailDoc = mailView.GetCurrentDocument();
//但显然这种方法不存在:D
=============================================== ====================================== 解决方案代码:
Type NotesUIWorkspaceType = Type.GetTypeFromProgID("Notes.NotesUIWorkspace", true);
object workspace = Activator.CreateInstance(NotesUIWorkspaceType);
object uiDoc = NotesUIWorkspaceType.InvokeMember("CurrentDocument", BindingFlags.GetProperty, null, workspace, null);
Type NotesUIDocument = uiDoc.GetType();
object Subject = NotesUIDocument.InvokeMember("FieldGetText", BindingFlags.InvokeMethod, null, uiDoc, new Object[] { "Subject" });
string subject = "test";
NotesUIDocument.InvokeMember("FieldSetText", BindingFlags.InvokeMethod, null, uiDoc, new Object[] { "Subject", subject });
object Body = NotesUIDocument.InvokeMember("FieldGetText", BindingFlags.InvokeMethod, null, uiDoc, new Object[] { "Body" });
答案 0 :(得分:3)
您实际需要的是Notes OLE类。
C#Interop类基于Notes COM类。 COM类只能访问“后端”。即,根对象是Lotus.NotesSession,并且所有类都针对存储在.NSF文件中的数据。他们无法访问Notes UI中的任何内容。
Notes OLE类可以访问“后端”,根对象是Notes.NotesSession,“前端”是根对象Notes.NotesUIWorkspace。正如您可以通过该类的名称来判断的那样,前端类可以让您访问Notes客户端UI的元素。
注意细微差别:OLE类的前缀是“Notes。”,而不是前缀“Lotus”。对于COM类。
在旧式VB后期绑定中,OLE类以这种方式实例化:
CreateObject("Notes.NotesUIWorkspace")
我不确定这是如何转化为C#的。
无论如何,一旦你有了NotesUIWorkspace对象,当前打开的文档就可以使用NotesUIWorkspace.CurrentDocument
方法。
答案 1 :(得分:2)
如果您使用的是Interop课程,则需要使用NotesUIView.CurrentView.Documents
来获得所需内容...请参阅here。
答案 2 :(得分:2)
您需要先获取NotesUIWorkspace,然后使用CurrentDocument属性
NotesUIWorkspace workspace = new NotesUIWorkspace();
NotesUIDocument uidoc = workspace.CurrentDocument();