2013-03-20 5 views
1

C#을 통해 Lotus Notes에서 현재 열려있는 문서를 가져 오는 방법을 알아 내려고하고 있지만 그럴 수 없습니다. 나는 구글에서 반나절을 연구했지만 유용한 것을 찾을 수 없었다.현재 열려있는 문서 가져 오기

필자가 작성한 코드를 사용하면 원하는 데이터베이스, 원하는 데이터베이스 등을 얻을 수 있지만 열린 문서를 얻고 싶습니다. 나는 IsUIDocOpen과 같은 것을 시도했지만, 전체 콜렉션 중 어느 것도 사실이 아니다.

열린 문서와 열린 문서 트로프 Domino API간에 다른 것이 있는지 아는 사람이 있습니까? 내 해결 방법은 이메일 제목과 이메일 크기를 비교하고 각각을 비교하여 일치 할 때 항목 ID를 얻고 필요한 정보를 얻는 것입니다.하지만 너무 길어집니다. 특히받은 편지함이 클 때 특히 그렇습니다.

제안 사항?

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" }); 
+1

Domino API 또는 Lotus Notes Interop COM 클래스를 사용하고 있습니까? Domino를 사용 중이라면 Lotus Notes 프로그램이 아닌 Domino 서버의 데이터베이스에 액세스 할 수 있습니다. –

+0

Lotus Notes Interop COM 클래스는 어디에서 찾을 수 있습니까? 감사합니다. – peterpeterson

+1

여기를보십시오. http://www.ibm.com/developerworks/lotus/library/domino-msnet/index.html. VB.Net 용이지만, C#에서는 올바르게 기억하면 클래스를 만들 수있는 네임 스페이스의 래퍼 클래스에 액세스 할 수 있습니다. –

답변

2

당신이을 사용하는 데 필요한 상호 운용성 클래스를 사용하는 경우당신이 원하는 것을 얻으려면 ... here을보십시오.

+0

interop.Domino를 사용하고 있지만 NotesUIView를 볼 수 없습니다. 다른 제안 사항이 있습니까? – peterpeterson

2
당신은 먼저 NotesUIWorkspace을 얻을해야합니다

는, 당신은 실제로 참고 OLE 클래스입니다 필요가 무엇 CurrentDocument 재산

NotesUIWorkspace workspace = new NotesUIWorkspace(); 
NotesUIDocument uidoc = workspace.CurrentDocument(); 
3

를 사용합니다.

C# Interop 클래스는 Notes COM 클래스를 기반으로합니다. COM 클래스는 "백엔드"에만 액세스 할 수 있습니다. 즉, 루트 객체는 Lotus.NotesSession이며, 모든 클래스는 .NSF 파일에 저장된 데이터와 작동합니다. Notes UI에는 아무 것도 액세스 할 수 없습니다.

메모 OLE 클래스는 루트 개체 Notes.NotesSession과 함께 "백 엔드"와 루트 개체 Notes.NotesUIWorkspace를 사용하여 "프런트 엔드"에 모두 액세스 할 수 있습니다. 이 클래스의 이름으로 알 수 있듯이, 이는 Notes 클라이언트 UI 요소에 대한 액세스를 제공하는 프런트 엔드 클래스입니다.

참고 : OLE 클래스의 접두사는 "Lotus."대신 "Notes."입니다. COM 클래스.

CreateObject("Notes.NotesUIWorkspace") 

나는 그 C 번호로 변환하는 방법을 잘 모르겠어요 : 이전 스타일 VB에서

는 후기 바인딩의 OLE 클래스는이 방법을 인스턴스화. 아무튼, NotesUIWorkspace 개체가 있으면 현재 열려있는 문서를 NotesUIWorkspace.CurrentDocument 메서드와 함께 사용할 수 있습니다.

+1

Richard, 고맙습니다. 감사합니다. Type t = Type.GetTypeFromProgID ("Notes.NotesUIWorkspace", true); 개체 ThisInstance = Activator.CreateInstance (t); – peterpeterson

관련 문제