2012-01-30 2 views

ответ

2

Есть много примеров, просто попробуйте найти его. В этом примере вы можете начать:

//This DLL you've got to add under Project-> Add Reference --> COM Tab --> Lotus Domino Objects 
//Standard Path for this DLL is: "C:\Program Files\Notes\domobj.tlb" 
using Domino; //domobj.tlb* 
... 

try 
{ 
    //------------------------------------------- 
    //!!Important!! 
    //Before you start, you have to check 2 things 
    //1.) Lotus Notes has to run when you start this application 
    //2.)The files "notes.ini" and "user.id" 
    // has to be in the main Lotus Notes folder 
    //--------------------------------------------  

    //First, create a new Lotus Notes Session Object 
    Domino.NotesSession LNSession = new Domino.NotesSession(); 
    //Next add a Database and a Document Object (not new) 
    Domino.NotesDatabase LNDatabase; 
    Domino.NotesDocument LNDocument; 
    //Initialize your Session with your Password 
    LNSession.Initialize("password"); 

    //Connect to your Notes Server and the path of your 
    //.nsf File (in my case its in a subfolder 'mail'). 
    LNDatabase = LNSession.GetDatabase("Notes-Server", "mail\\user.nsf", false); 
    //Create an in memory document in the server database 
    LNDocument = LNDatabase.CreateDocument(); 
    //-------Assign Field Values------- 
    //Define Start&End Date+Time of your appointment 
    //Year, Month, Day, Hour, Minute and Second 
    System.DateTime StartDate = new DateTime(2008, 3, 19, 8, 2, 0); 
    System.DateTime EndDate = new DateTime(2008, 3, 19, 8, 5, 0); 
    //This Defines that it is an Calendar Entry 
    LNDocument.ReplaceItemValue("Form", "Appointment"); 
    //Type of the appointment, means: 
    LNDocument.ReplaceItemValue("AppointmentType", "0"); 
    //0 = Date, Appointment   
    //1 = Anniversary 
    //2 = All Day Event (Do Not Set Time Here!) 
    //3 = Meeting 
    //4 = Reminder 
    //5 = Date (Special, experimental!)  
    // Title of your entry 
    LNDocument.ReplaceItemValue("Subject", "hello world"); 

    // Set Confidential Level (Public=1 or Private=0) 
    LNDocument.ReplaceItemValue("$PublicAccess","1");  

    //Add Start&End Time of your event 
    LNDocument.ReplaceItemValue("CALENDARDATETIME", StartDate); 
    LNDocument.ReplaceItemValue("StartDateTime", StartDate); 
    LNDocument.ReplaceItemValue("EndDateTime", EndDate); 
    LNDocument.ReplaceItemValue("StartDate", StartDate); 
    LNDocument.ReplaceItemValue("MeetingType", "1"); 
    //Infos in The Body 
    LNDocument.ReplaceItemValue("Body", "Body Text Body Text ..."); 
    //Add an alarm to your appointment 
    LNDocument.ReplaceItemValue("$Alarm", 1); 
    LNDocument.ReplaceItemValue("$AlarmDescription", "hello world (alarm)"); 
    LNDocument.ReplaceItemValue("$AlarmMemoOptions", ""); 
    //5 = Time (in minutes) before alarm goes on 
    LNDocument.ReplaceItemValue("$AlarmOffset", 5); 
    LNDocument.ReplaceItemValue("$AlarmSound", "tada"); 
    LNDocument.ReplaceItemValue("$AlarmUnit", "M"); 
    //This saves your Document in the Notes Calendar 
    LNDocument.ComputeWithForm(true, false); 
    LNDocument.Save(true, false, false); 
    //On success, you'll see an info message; 
    MessageBox.Show("Calendar Entry Successfully Added!", "Info", 
     MessageBoxButtons.OK, MessageBoxIcon.Information); 
} 
catch (Exception e1) 
{ 
    //On error you'll see an error message 
    MessageBox.Show(e1.Message); 
} 
... 
+0

Благодарим за это. Но проблема в том, что у меня нет проблем с поиском примеров кода для добавления в Календарь. Но нет ли примера обсуждения, чтобы получить календарь из Lotus Notes ore Lotus Traveler? – mortenstarck

+0

Используйте приведенный выше пример в качестве отправной точки для понимания того, как разговаривать с Lotus Notes на C#. Затем сопоставьте это с Lotus Notes API, который расскажет вам обо всех объектах, которые вы можете получить по адресу: http://publib.boulder.ibm.com/infocenter/domhelp/v8r0/index.jsp?topic=%2Fcom.ibm. designer.domino.main.doc% 2FH_USING_LOTUSSCRIPT_APIS.html –

+0

Еще один совет - найти примеры того, что вы хотите делать на любом языке (Java, C API, LotusScript и т. д.), а затем использовать этот пример в качестве руководства по как сделать то же самое в C#. К сожалению, у меня нет конкретного примера того, как получить доступ к данным календаря. –

0

Прежде всего, мои соболезнования в связи с выбором почтового сервера, на который вы наложили свою компанию.

Проблема в том, что на самом деле нет и хороших примеров. Существует лишь небольшое сообщество пользователей, которые все еще используют эту мертвую технологию.

Вот что я нашел:

Как облажался, как это звучит .. Открыть НФС файл в шестнадцатеричном редакторе - есть некоторые «хорошие» примеры, написанные на VB (или Лотос Script) там. o_O

Но насколько я могу судить (по крайней мере для себя), информация календаря не хранится в локальных файлах nsf. Проблемы, с которыми мы сталкиваемся:

  1. Что такое имя сервера/имя базы данных? Я могу найти около 10 различных IP-адресов domino-серверов, если я оглядеюсь по сторонам - могу ли я использовать только что-нибудь из них? Помогает ли знание SMTP-адреса?
  2. Какую строку передать в GetView? Я видел «Контакты» «Люди» «$ (Люди)», помещая что-то глупое там, возвращает null, есть ли где-нибудь список?
  3. Откуда у пользователя? В остальной части юниверса аутентификация использует имя пользователя и пароль. Почему API Notes не хочет знать имя пользователя?

Чтобы ответить на 1: Я думаю, что пустая строка как-то хватает правильный сервер от бог реестра знает где.

Еще одна возможность - попробовать это. В Lotus Notes есть стрелка вниз, которая расширяется, чтобы вы могли перейти к Mail, Calendar (и кучу другого дерьма, которого вы, вероятно, никогда не использовали). Щелкните правой кнопкой мыши «Календарь», затем перейдите в «Приложение»> «Свойства». Он отобразит сервер и имя файла. Удалите трейлинг/Garbage/Crap из имени сервера. Это даст имя сервера для функции ниже. Также удалите файл prefixing \ mail \ из имени файла, который предоставит базу данных для функции ниже.

Ответ 2: Я не нашел лучшего ответа, чем использовать редактор Hex или очистить Интернет от фрагментов кода. Я подозреваю, что эта строка задана не IBM, а во время установки. Поэтому, если бы мы могли найти значение по умолчанию, которое может работать *. Опять мне хотелось бы получить лучший ответ. Что работает для меня - это $ All for E-Mail (извините В примечаниях лотоса нет «писем» Lotus отправляет «Memos») и «Календарь для календаря».

Чтобы ответить 3: API Lotus Notes, как представляется, использует последний зарегистрированный пользователь для аутентификации следующего входа в систему пользователя. Пойдите, вероятно, потому, что Lotus настолько безопасна.

Следующая функция требует ссылки на dll Domino. Возможно, вам придется ссылаться на него, и если ваш на 64-битной системе все равно не будет работать. Скомпилируйте это в 32-битном режиме. Не забывайте, что Lotus Notes - это «приложение уровня предприятия» и светлые годы, за исключением того, что может сделать Outlook.Это вернет ряд пар ключ/значение. Да, вы это правильно поняли. Это все ключевые пары значений. Много 64-битных кодированных мусора, цветовых кодов, подсказок, казалось бы, случайных массивов «1» и другого бесполезного дерьма, к счастью, данные, которые вы хотите, имеют четкий текст.

using System; 
using System.Linq; 
using System.Data; 
using System.Collections; 
using System.Runtime.InteropServices; 
using Microsoft.Win32; 
using Domino; 
using System.Text; 
using System.IO; 
using System.Collections.Generic; 

namespace NotesScraper 
{ 
    public class NotesCommunication 
    { 
     public KeyValuePair<string, NotesViewResultSet[]>[] PullNotesView(string[] ViewNames, string server, string database, string password) 
     { 
      if (ViewNames == null || ViewNames.Length == 0 || ViewNames.ToList().Distinct().Count() != ViewNames.Length) 
      { 
       throw new ArgumentException(); 
      } 
      else 
      { 
       List<KeyValuePair<string, NotesViewResultSet[]>> results = new List<KeyValuePair<string, NotesViewResultSet[]>>(); 
       NotesSession notesSession = new Domino.NotesSession(); 
       notesSession.Initialize(password); 
       NotesDatabase notesDatabase = notesSession.GetDatabase(server, database, false); 
       for(int i=0; i<ViewNames.Length; i++) 
       { 
        List<NotesViewResultSet> result = new List<NotesViewResultSet>(); 
        Domino.NotesView notesView; 
        string view = ViewNames[i]; 
        notesView = notesDatabase.GetView(view); 
        NotesViewEntryCollection notesViewCollection = notesView.AllEntries; 
        for (int rowCount = 1; rowCount <= notesViewCollection.Count; rowCount++) 
        { 
         NotesViewEntry viewEntry = notesViewCollection.GetNthEntry(rowCount); 
         NotesDocument document = viewEntry.Document; 
         Array notesThings = document.Items as Array; 
         for (int j = 0; j < notesThings.Length; j++) 
         { 
          NotesItem notesItem = (notesThings.GetValue(j) as Domino.NotesItem); 
          result.Add(new NotesViewResultSet() 
          { 
           RecordID = rowCount, 
           Name = notesItem.Name, 
           Value = notesItem.Text 
          }); 
         } 
        } 
        results.Add(new KeyValuePair<string,NotesViewResultSet[]>(view, result.ToArray())); 
       } 
       return results.ToArray(); 
      } 
     } 
    } 
    public class NotesViewResultSet 
    { 
     public int RecordID {get;set;} 
     public string Name { get; set; } 
     public string Value { get; set; } 
    } 
} 
+0

Хотя ваш код содержит некоторые правильные точки, ваш ответ является чисто неправильным и показывает, что вы ничего не знаете о Lotus Domino/Notes. В реестре нет ничего, что могло бы помочь найти любую информацию о правильных серверах/путях. Пустая строка для сервера просто означает «local» (локальная реплика, если она у вас есть), а hex-редактор вообще не помогает в понимании структуры ... –

+0

Никто не знает о Lotus Notes, это мертвая технология. Однако мой ответ является самым дальней, чем вам не придется платить сотрудникам IBM. Когда я говорю реестр, я имею в виду черный ящик, в котором есть примечания лотоса. И да, шестнадцатеричный редактор предоставит гораздо больше примеров, чем вы найдете в Интернете, по крайней мере, вы можете получить правильные строки для параметра GetView. –

+0

Я рассмотрел ваши проблемы сейчас, пожалуйста, удалите свой эмоционально заряженный голос. Этот ответ стал лучшим и, вероятно, единственным решением в Интернете. –

Смежные вопросы