Laden...

Lotus Notes Kalender ansprechen

Erstellt von Minuert vor 14 Jahren Letzter Beitrag vor 13 Jahren 10.401 Views
Minuert Themenstarter:in
11 Beiträge seit 2009
vor 14 Jahren
Lotus Notes Kalender ansprechen

Hallo zusammen

Ich habe wirklich schon überall gesucht und nirgens was gefunden, darum frage ich jetzt euch, in der Hoffnung das mir jemand vielleicht dochnoch weiterhelfen kann.

Ich möchte ein Programm erstellen, welches in einem bereits geöffnetem Lotus Notes 8.0 Client, Termine Im Kalender erstellt.

Wie spricht man den Lotus Notes Kalender an/bez. ist das überhaupt möglich?

Und wie eröffnet man eine Lotus Session wenn der Client bereits offen ist?

Ihr müsst entschuldigen, bin ein ziemlicher anfänger in C# 😁

Danke schon im Voraus

2.760 Beiträge seit 2006
vor 14 Jahren

Wenn dann nur über eine entsprechende API. Habe hier mal was gefunden: C API for Lotus Notes da müsste man sich dann allerdings auch noch ein C# Binding bauen. Ob man damit an den Kalender kommt weiß ich auch nicht, habe das nur gerade mal ergooglet.

[EDIT]
Sollte gehen:

Calendar and scheduling

The Lotus C API provides the capability of performing calendar and scheduling operations, such as creating calendar entries or looking up busytime. Creating calendar entries such as meetings, appointments, reminders, and all-day events involves creating a note in the desired mail database using the NSFNoteCreate() function and adding the required calendar items to the note.

Minuert Themenstarter:in
11 Beiträge seit 2009
vor 14 Jahren

Habe ich vergesse zu erwähnen, Die schnitstelle habe ich schon. Über eine Com Schnittstelle lässt sich mit Lotus Notes kommunizieren, also über die interop.domino.dll
aber hier finde ich nur was von mails, ich weiss nicht recht ob man termine auch per mail an sich selbst erstellen kann...

2.760 Beiträge seit 2006
vor 14 Jahren

Dann würde sich wahrscheinlich ein Blick in die Dokumentation zu dieser API eher lohnen als die Frage hier zu stellen wo scheinbar nicht so viele Leute Domino/Lotus anprogrammieren.

[EDIT]
Das dürfte dann wohl ähnlich sein:

Creating calendar entries such as meetings, appointments, reminders, and all-day events involves creating a note in the desired mail database using the NSFNoteCreate() function and adding the required calendar items to the note.

95 Beiträge seit 2006
vor 14 Jahren

Hallo Minuert,

Notes ist eine Dokumentenbasierte Datenbank.
Das kannst du dir so vorstellen, wie ein Verzeichnis, wo man beliebig viele Ini-Dateien reinspeichert.

Das heißt, dass ein Kalendereintrag gleich wie eine E-Mail erstellt wird.
Der Unterschied ist lediglich, dass sich Feldwerte unterscheiden.
Normalerweise reicht es das Feld "Form" auf die jeweilige Maske zu setzen.
Bei einem E-Mail wäre das dann "Memo", bei einem Termin "Appointment".
Am besten ist, du erstellst einen Termin, genauso wie du ihn haben willst, und schaust dir in den Dokumenteigenschaften alle Feldwerte an.

Wenn du den Termin direkt im Notes-Client erstellen willst, dann musst du die UI-Klassen verwenden.
Eine Beschreibung der Klassen findest du in der Notes-Entwicklerdokumentation.
Beispiel:

        Wsp := CreateOleObject('Notes.NotesUIWorkspace');
        Doc := Wsp.ComposeDocument(Server, Datenbank, 'Appointment');

Garby

Wenn zwei dasselbe tun, ist es noch lange nicht dasselbe
(Adelphi)

Minuert Themenstarter:in
11 Beiträge seit 2009
vor 14 Jahren

Hallo Garby

Danke für deine Antwort!
Kannst du mir noch sagen welche Programmbibliothek ich brauche und welche verweise ich setzten muss?

Gruss Minuert

95 Beiträge seit 2006
vor 14 Jahren

Hallo Minuert,

wenn du es über Late Binding (COM) machst brauchst du keine Bibliotheken einbinden.
Nur der Notes-Client muss installiert sein.

object WS = Activator.CreateInstance(Type.GetTypeFromProgID("Notes.NotesUIWorkspace"));
object Doc = WS.GetType().InvokeMember("ComposeDocument", BindingFlags.IgnoreCase | BindingFlags.InvokeMethod | BindingFlags.OptionalParamBinding, null, WS, new object[] { Server, Datenbank, "Appointment" });
// Felder setzen und speichern
if (Doc != null)
{
    Marshal.ReleaseComObject(Doc);
}
if (WS != null)
{
    Marshal.ReleaseComObject(WS);
}

Garby

Wenn zwei dasselbe tun, ist es noch lange nicht dasselbe
(Adelphi)

Minuert Themenstarter:in
11 Beiträge seit 2009
vor 14 Jahren

Hallo Garby

Danke für die Anleitung habe es nun endlich geschafft LN anzusprechen 😁
Wenn ich das programm so ausführe wie du beschrieben hast geht einfach ein neuer Kalendereintrag auf, was muss ich jetzt machen damit es bei diesem automatisch die richtigen Werte setzt (bez. wie/wo setze ich die parameter wie Zeit,Datum,Betreff) und den Eintrag sozusagen im Hintergrund erstellt, ohne bestätigung vom User?

Gruss Minuert

95 Beiträge seit 2006
vor 14 Jahren

Hallo Minuert,

wie bereits oben erwähnt verwendest du die UI-Klassen (Frontend-Klassen) nur, wenn das Dokument direkt im Client bearbeitet werden soll. Sowas wie eine Fernsteuerung des Notes-Client. Wenn du einfach ein Dokument erstellen willst kannst du das auch einfach über die Backend-Klassen machen. Dann bekommt der User nichts davon mit. Allerdings musst du dann auch die Einladungen selber versenden usw..

So verbindest du dich über das Backend:

Erstelle Notes.NotesSession statt Notes.NotesUIWorkspace
NotesSession.GetDatabase öffnet die Datenbank
NotesDatabase.CreateDocument erstellt ein Dokument

Hier ist wieder zu beachten, dass NotesDatabas.CreateDocument ein Objekt der Klasse NotesDocument zurückgibt, wobei NotesUIWorkspace.ComposeDocument ein Objekt der Klasse NotesUIDocument zurückgibt.

was muss ich jetzt machen damit es bei diesem automatisch die richtigen Werte setzt (bez. wie/wo setze ich die parameter wie Zeit,Datum,Betreff)

Am besten ist, du erstellst einen Termin, genauso wie du ihn haben willst, und schaust dir in den Dokumenteigenschaften alle Feldwerte an.

Wie du Feldwerte setzt, hängt davon ab, ob du Frontend- oder Backend-Klassen verwendest.

Eine Beschreibung der Klassen findest du überall im Internet.

Wenn zwei dasselbe tun, ist es noch lange nicht dasselbe
(Adelphi)

Minuert Themenstarter:in
11 Beiträge seit 2009
vor 14 Jahren

Salut Garby

Ich probier jetzt so eine Notes Session zu öffnen über das Back-End:


NotesSession session = new NotesSession();
            session.Initialize("Password");
            NotesDatabase notes_db = session.GetDatabase("Server", "Datenbank", false);

Doch irgendwie läuft es bei mir immer auf einen Fehler bei der NotesSession initialisierung... hasst du vielleicht ein Codebeispiel wodu über das Back-End ein Mail oder so erstellst?

95 Beiträge seit 2006
vor 14 Jahren

Hallo Minuert,

ein wenig Eigeninitiative bitte 😉
Du musst es natürlich auch über Reflection machen (wie in meinem obigen Beispiel von NotesUIWorkspace)

Wenn zwei dasselbe tun, ist es noch lange nicht dasselbe
(Adelphi)

Minuert Themenstarter:in
11 Beiträge seit 2009
vor 13 Jahren

Der Post liegt zwar schon etwas länger hier brach da aber ich hab die Lösung.

Mit dem Beispiel hier sollte schonmal die Verbindung mit Notes problemlos funktionieren.


                Domin.NotesSession LNSession = new Domino.NotesSession();
                Domino.NotesDatabase LNDatabase;
                Domino.NotesDocument LNDocument;
                //Domino.NotesItem LNItem;
                LNSession.Initialize(passwort);

                LNDatabase = LNSession.GetDatabase(Notes-Server, mail\\user.nsf, false);

So hat man schonmal eine Verbindung zur Datenbank, zwei Kriterien damit das funzt gibt es aber:
1.) Notes muss offen sein
2.) Die Dateien User.id und "notes.ini" müssen im Ordner C:\Programme\Notes\Data liegen.
Daran ist es bei mir gescheitert weil wir ein "spezielles" Notes haben, nix Reflection.

Mit NotesViews Objekten schaff ich es bereits Notes Datenbanken wie "Calendar,Adressbook oder Mail", so sehe ich beispielsweise auch wie die Felder heissen welche für einen Kalender eintrag nötig sind.

Einen Eintrag zu schreiben jedoch scheitert weiterhin bei mir da ich die richtige Synthax nicht finde und wenn ich die Synthax von LotusScript abändere hilft mir das, wie sonst meistens, nicht weiter. Wenn Hier bereits jemand erfahrung hat wäre ich wirklich sehr froh um ein kleines Code-Schnipsel.

Mit em Gruess
Minuert

Minuert Themenstarter:in
11 Beiträge seit 2009
vor 13 Jahren

Hab die **Lösung **selber herrausgefunden und mein Projekt sozialerweise auch gleich online gestellt (bekomm ich ne "Notes Programmierer Krone?" 😁

Codeprojekt - Schreiben in den Lotus Notes Kalender mit C#

Viel Spass Damit

Es grüsst
Minuert

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo Minuert,

bekomm ich ne "Notes Programmierer Krone"?

nein, aber die Anerkennung der Community. Es wird immer gern gesehen, wenn eigene Lösungen veröffentlicht werden.

Allerdings wurde der Artikel auf Code-Project mittlerweile gelöscht, möglicherweise weil er in Deutsch verfasst wurde. Du kannst aber deine Lösung gerne direkt hier im Thread posten.

herbivore

Minuert Themenstarter:in
11 Beiträge seit 2009
vor 13 Jahren

weil er in Deutsch verfasst wurde.

...oder weil ich zu viel über IBM gemotz hab kann auch sein, _:::

Ausserdem Im Anhang das Gesamte Projekt noch seperat als Download (Code ist dokumentiert)

Ich bin schon froh wenn ich nur einer Person helfen kann die vielleicht mal den gleichen Mist machen muss mit LN 😉

Mfg Minuert

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo Minuert,

der neue Link funktioniert leider auch schon nicht mehr. Wobei das aus myCSharp.de-Sicht keine so große Rolle mehr spielt, nachdem du freundlicherweise das Projekt hier angehängt hast.

Vielleicht hast du mit deinem Motzen wirklich gegen irgendwelche Regeln verstoßen. Sachliche Kritik ist immer erlaubt, aber motzen bzw. "Frust ablassen" kommt auch bei uns nicht gut an. 😃

Wenn du auf myCSharp.de das angehängte Projekt noch kurz erläutern magst, hab ich da sicher nichts gegen. 😃

herbivore

Minuert Themenstarter:in
11 Beiträge seit 2009
vor 13 Jahren

Hallo herbivore

Ja gut, wenn man "IBMs LN is just an antisocial software" als motzen betrachtet 😉

Der Link funktioniert übrigens schon immer.

Die erläuterung sollte auf dem Link schon getan sein. Kurz: Einen Kalender Eintrag ins Lotus Notes via C# interface machen.

Gruss Minuert