首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >获取当前打开的文档

获取当前打开的文档
EN

Stack Overflow用户
提问于 2013-03-20 23:09:38
回答 3查看 1.7K关注 0票数 1

我试图弄清楚如何通过C#在Lotus Notes上获取当前打开的文档,但我做不到。即使我在谷歌上研究了半天,我也找不到任何有用的东西。

使用我的代码,我得到了我想要的视图,我想要的数据库,等等,但我只想得到打开的文档。我尝试了像IsUIDocOpen这样的东西,但是没有一个完整的集合包含它。

有人知道通过Domino API打开的文档和未打开的文档有什么不同吗?我的解决办法是获取电子邮件的主题和电子邮件的大小,然后比较每一个,当匹配时,获取条目ID,然后获取我需要的信息-但这太耗时了,特别是当收件箱很大的时候。

有什么建议吗?

下面是我的代码:

代码语言:javascript
运行
复制
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

=====================================================================================解决方案代码:

代码语言:javascript
运行
复制
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" });
EN

回答 3

Stack Overflow用户

发布于 2013-03-21 09:27:23

您真正需要的是Notes OLE类。

类基于C# COM类。COM类只能访问“后端”。也就是说,根对象是Lotus.NotesSession,并且所有的类都对存储在.NSF文件中的数据起作用。他们不能访问Notes UI中的任何内容。

Notes OLE类既可以访问根对象Notes.NotesSession的“后端”,也可以访问根对象Notes.NotesUIWorkspace的“前端”。从该类的名称可以看出,前端类使您能够访问Notes客户端UI的元素。

注意细微的区别: OLE类的前缀是"Notes.",而不是前缀“Lotus”。用于COM类。

在老式的VB后期绑定中,OLE类是这样实例化的:

代码语言:javascript
运行
复制
CreateObject("Notes.NotesUIWorkspace")  

我不确定这如何转化为C#。无论如何,一旦拥有了NotesUIWorkspace对象,就可以通过NotesUIWorkspace.CurrentDocument方法获得当前打开的文档。

票数 3
EN

Stack Overflow用户

发布于 2013-03-20 23:20:20

如果你正在使用互操作类,你需要使用NotesUIView.CurrentView.Documents来获得你想要的东西……参见here

票数 2
EN

Stack Overflow用户

发布于 2013-03-21 00:46:57

您需要先获取NotesUIWorkspace,然后再使用CurrentDocument属性

代码语言:javascript
运行
复制
NotesUIWorkspace workspace = new NotesUIWorkspace();
NotesUIDocument uidoc = workspace.CurrentDocument();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15527395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档