Kontakte anlegen mit C#

  • Hallo zusammen,


    ich will mit C# einen neuen Notes Kontakt anlegen/updaten/löschen und bekomme das noch nicht so ganz auf die Reihe.


    Ich muss dazu sagen, dass ich bis vor ein paar Tagen noch nie was mit Notes zu tun hatte. Daher kann es sein, dass einige meiner Fragen eher trivialer Natur sind. Ich hoffe, ihr seid mir dann nicht böse. Ihr könnt mich dann gern auf eine Quelle verweisen, in der ich das nachlesen kann. Hab aber bisher noch nix geeignetes gefunden (schickt mal ne google Abfrage ab, in der das Wort "contact" oder "kontakt" drin vorkommt :roll: )


    Nun, wie gesagt, es klappt noch nicht so richtig.
    Ich lege einen Kontakt auf folgende Weise an:


    Code
    NotesDocument doc = db.CreateDocument();doc.UniversalID = "12345678901234567890123456789012";doc.AppendItemValue("Form", "Person");doc.AppendItemValue("FirstName", myVorname);doc.AppendItemValue("LastName", myNachname);doc.AppendItemValue("MailAddress", myMail);doc.Save(true, false, false);


    Die Session ist natürlich initialisiert.


    Wenn ich nun alle Items in "Person" ausgeben lassen, ist der gerade angelegte Kontakt neben allen anderen Kontakten zu finden. Öffne ich Notes und schaue dann in den Kontakten nach, ist dieser Eintrag allerdings nicht zu finden. Also mach ich wohl was falsch, ich weiß aber noch nicht was.


    Ich hoffe, dass mir dabei jemand weiterhelfen kann.
    Komme alleine momentan nicht weiter.


    Ich dachte mir, dass es eventuell an den Parametern des GetDatabase Aufrufes liegen könnte:


    Code
    NotesDatabase db = mySession.GetDatabase("", "names.nsf", false)


    Aber das ist doch richtig, oder nicht? Oder werden die Kontakte in einer anderen DB gespeichert?



    Vielen Dank für eure Mühe und Antworten im Voraus.


    Gruß,
    Stay

  • Vermutlich hängt es damit nicht ursächlich zusammen, aber probier es mal mit ReplaceItemValue, anstatt AppendItemValue. Und vor dem Save bau noch ein ComputeWithForm ein. In der View "Person" wird auf das Feld "Type" abgezielt, das "Computed when composed" ist

    Life is not a journey to the grave with the intention of arriving safely in a pretty and well-preserved body, but rather to skid in broadside, thoroughly used up, totally worn out, and loudly proclaiming "Wow, what a ride!!! :evil:
    Beschleunigung ist, wenn die Tränen der Ergriffenheit waagrecht zum Ohr hin abfliessen - Walter Röhrl

  • Hi,


    danke erst mal für die schnelle Antwort.


    In der Zwischenzeit habe ich auch an deinen Tipp gedacht und das ganze mal mit "ReplaceItemValue" probiert. Und siehe da, es funktioniert. Die DB ist also auf jeden Fall die Richtige.


    Auf "ComputeWithForm" bin ich bisher noch nicht gestoßen. Ich schau mir das mal kurz an und gib Bescheid, ob das geklappt hat.


    Noch was:
    Ich habe ja bei meinem Kontakt Dokument nur "FirstName", "LastName", "MailAddress" und eine beliebige "UniversalID" vergeben. Ist es eventuell auch möglich, dass ich alle anderen Attribute eines Kontaktes auch anlegen muss, zumindest mit einem leeren String als Value?
    Oder gibt es eventuell irgendwelche Pflichtfelder, die unbedingt mit angelegt werden müssen?


    Gruß,
    Stay

  • Hallo,


    hab deinen Tipp mal ausprobiert und "ComputeWithForm" vor dem "save" Aufruf ausgführt.


    Die Auswirkung war, dass alle möglichen Felder (neben denen von mir angelegten Feldern) ebenfalls zu meinen Kontaktdaten hinzugefügt wurden - mit einem leeren Value.
    Das Feld "Type" war allerdings nicht dabei.


    Das habe ich dann hinzugefügt:


    Code
    doc.AppendItemValue("Type", "Person");


    Die Auswirkung? Es funktioniert!!!!!!!!!!!! :strike: :strike: :strike: :strike:


    :laola: :laola:



    Vielen Dank für deinen Tipp und deine Hilfe.


    An dem Problem habe ich jetzt schon echt lange rumgemacht.


    Danke und Gruß,
    Stay

  • Schön, dass es tut.


    Ein kleiner Nachtrag: die DocID musst du nicht extra vergeben, das passiert automatisch beim Speichern. Das Problem bei deiner Methode ist, dass du dir im Zweifelsfalle alle DocIDs merken musst, die du jemals in die DB reingeschrieben hast und die gegen die DocIDs matchen, die andere Dokumente in der DB haben, um mögliche (teils recht strangen) Wechselwirkungen auszuschließen.

    Life is not a journey to the grave with the intention of arriving safely in a pretty and well-preserved body, but rather to skid in broadside, thoroughly used up, totally worn out, and loudly proclaiming "Wow, what a ride!!! :evil:
    Beschleunigung ist, wenn die Tränen der Ergriffenheit waagrecht zum Ohr hin abfliessen - Walter Röhrl

  • Eine Frage habe ich jetzt doch noch:


    werden Kontakte nur in der lokalen names.nsf gespeichert?
    Die müssen doch noch irgendwo auf dem Domino Server gespeichert sein, oder? Angenommen ich melde mich in Notes auf einem anderen Rechner an, würden mir ja sonst meine Kontakte gar nicht zur Verfügung stehen. Das kann ja nicht sein.


    Appointments und Mails werden ja auch auf dem Server in der mail\user.nsf gespeichert.


    Gruß,
    Stay

  • Außer, du bist als Roaming User deklariert

    Life is not a journey to the grave with the intention of arriving safely in a pretty and well-preserved body, but rather to skid in broadside, thoroughly used up, totally worn out, and loudly proclaiming "Wow, what a ride!!! :evil:
    Beschleunigung ist, wenn die Tränen der Ergriffenheit waagrecht zum Ohr hin abfliessen - Walter Röhrl

  • Ookeeey :-o :-o
    Das ist schlecht! Weißt du warum IBM sich für so einen seltsamen Weg entschieden hat? Würde mich interessieren.


    Ist das mit Tasks auch so? Oder werden die wieder zentral abgelegt?


    Gruß,
    Stay

  • Seltsam? Ich finde das durchaus korrekt so. Ich möchte nicht, dass jeder sieht, wen ich so alles in meinem Adressbuch habe...


    Mit Tasks meinst du die Aufgaben im Kalender? Die sind eben im Kalender, da ist es egal, von wo du dein Mailfile öffnest, die siehst du immer.


    Bist du Roaming User, wird u.a. dein names.nsf auf den Rechner repliziert, an dem du grad sitzt. Vorgehalten werden die Daten in einem Verzeichnis auf deinem Mailserver.

    Life is not a journey to the grave with the intention of arriving safely in a pretty and well-preserved body, but rather to skid in broadside, thoroughly used up, totally worn out, and loudly proclaiming "Wow, what a ride!!! :evil:
    Beschleunigung ist, wenn die Tränen der Ergriffenheit waagrecht zum Ohr hin abfliessen - Walter Röhrl

  • Ja, das will ich natürlich auch nicht.
    Aber du kannst doch auch an einem anderen Rechner deine Mails lesen ohne das jemand anderes das kann. Ich dachte nur, es wäre sinnvoller, die Kontakte auch auf dem Domino Server abzulegen und nicht lokal zu speichern. So hätte man eben überall Zugriff auf sie.
    Aber gut, egal. Es ist, wie es ist. Das kann man nicht ändern.


    Ja, mit Tasks meine ich die Aufgaben im Kalender.
    Das heißt, die werden wiederum wie die Mails auf dem Server unter "mail\user.nsf" abgelegt. Sonst würde ich die ja nicht immer und überall sehen können, oder?


    Zum Roaming hätte ich noch eine Frage.
    Wie bekommt der Rechner, an dem ich aktuell sitze Zugriff auf meine lokal hinterlegte names.nsf?
    Wenn meine names.nsf auf den Rechner, an dem ich gerade arbeite, repliziert wird, müssen doch die Daten der lokalen names.nsf irgendwo zentral herumliegen, sonst komme ich doch gar nicht an sie ran.
    Oder habe ich einen Denkfehler?


    Wohin genau wird sie denn dann eigentlich repliziert? Und wie heißt sie dann?

  • Zitat


    Stay schrieb:
    Ja, das will ich natürlich auch nicht.
    Aber du kannst doch auch an einem anderen Rechner deine Mails lesen ohne das jemand anderes das kann. Ich dachte nur, es wäre sinnvoller, die Kontakte auch auf dem Domino Server abzulegen und nicht lokal zu speichern. So hätte man eben überall Zugriff auf sie.
    Aber gut, egal. Es ist, wie es ist. Das kann man nicht ändern.


    Lässt sich schon ändern. Vielleicht ein Wort zum Hintergrund: das lokale names.nsf ist analog zum DD des Servers die zentrale Schalt- und Waltstelle. Das Ding ist nicht nur für Kontakte gedacht, sondern eigentlich für die wichtigen Dinge im Leben: Querzertifikate, Verbindungsdokumente und so'n Zeugs. Willst du von überall und unabhängig vom Rechner auf deine Kontakte zugreifen, hast du 2 Möglichkeiten
    1) der Admin deines Vertrauens legt dir auf dem Server ein Adressbuch an, auf das nur du drauf kommst. So kannst du deine Kontakte unabhängig vom Rechner und der lokalen names.nsf pflegen
    2) Mit einer minimalen Anpassung an Mailfile und einer anderen Schablone eben dessen (iNotes-Schablone), hast du zum Einen im Mailfile selbst die Möglichkeit, Kontakte zu hinterlegen und zum Anderen kannst du diese Dokumente mit einem lokal vorhandenen names.nsf syncen.


    Der große Unterschied zwischen Mails lesen und Kontakte pflegen ist eben der, dass es 2 unterschiedliche DBs sind. Zum einen das Mailfile mit Mails, Kalendereinträgen, To-Dos und zum Anderen das names.nsf
    Hast die die normale mail6.ntf als Schablone wird eben davon ausgegangen, dass du "normaler" User bist, der imm am selben Platz sitzt, oder der sein data-Verzeichnis auf einem Netzlaufwerk liegen hat (weshalb es dann egal ist, an welchem Platz er physisch sitzt, das Homelaufwerk ist ja immer das Selbe), oder der (ab ND6) eben roamt. Dann gibt es da noch die iNotes-Schablone. Die ist dafür gedacht, wenn man kein Notes-Client hat, sondern mit dem Browser arbeitet. Der Browser hat naturgemäß kein lokales data-Verzeichnis, also auch kein names.nsf. Also muss der User anderweitig an seine Informationen kommen, weswegen die iNotes-Schablone spezielle Ansichten und Masken mitliefert, die das names.nsf ersetzen. Und genau das wären dann auch die minimalen Anpassungen, man muss den Masken und Ansichten eben sagen, dass sie bitte schön nicht nur im Web, sondern auch im Notes-Client aufzutauchen haben.


    Zitat


    Ja, mit Tasks meine ich die Aufgaben im Kalender.
    Das heißt, die werden wiederum wie die Mails auf dem Server unter "mail\user.nsf" abgelegt. Sonst würde ich die ja nicht immer und überall sehen können, oder?


    Genau so


    Zitat


    Zum Roaming hätte ich noch eine Frage.
    Wie bekommt der Rechner, an dem ich aktuell sitze Zugriff auf meine lokal hinterlegte names.nsf?
    Wenn meine names.nsf auf den Rechner, an dem ich gerade arbeite, repliziert wird, müssen doch die Daten der lokalen names.nsf irgendwo zentral herumliegen, sonst komme ich doch gar nicht an sie ran.
    Oder habe ich einen Denkfehler?


    Hast du nicht. Wie gesagt: das lokale names.nsf liegt als Replik auch auf dem Mailserver in einem speziellen Verzeichnis dafür (parallel zu diversen anderen Dingen, siehe Admin-Hilfe). Meldest du dich nun heute auf Rechner A an, wird u.a. das names.nsf vom Server ins lokale data-Verzeichnis repliziert und beim Abmelden wieder zurück. Bist du Montag nun an Rechner B zugange, passiert dort genau das Selbe. Hast du heute einen Kontakt oder eine Gruppe angelegt, wirst du sie -so denn alles gut ging- Montag an Rechner B so sehen und verwenden können, wie erwartet.

    Life is not a journey to the grave with the intention of arriving safely in a pretty and well-preserved body, but rather to skid in broadside, thoroughly used up, totally worn out, and loudly proclaiming "Wow, what a ride!!! :evil:
    Beschleunigung ist, wenn die Tränen der Ergriffenheit waagrecht zum Ohr hin abfliessen - Walter Röhrl

  • Wow!!! Das nenne ich mal eine ausführliche und hervorragende Antwort und Hilfestellung! Vielen Dank dafür!


    Ich werde mir die Sachen, die du erwähnt hast (INotes Schablone, Roaming, ...) mal genauer anschauen und mich etwas tiefer damit beschäftigen.


    Ich werde mich dann wieder melden, wenn Fragen auftauchen (was sehr wahrscheinlich ist :roll: ) .


    Vorerst nochmal vielen Dank!


    cu,
    Stay

  • Hallo,


    ich versuche die Variante mit dem Roaming umzusetzen, stoße da aber auf ein Problem.


    Ich habe einem TestUser die Roaming Eigenschaft gegeben und will nun das Replik auf dem Mailserver ansprechen, also die names.nsf auf dem Server zu öffnen.


    Das versuche ich wie folgt:


    Code
    NotesSession session = new NotesSession();session.Initialize(myPass);NotesDatabase db = session.GetDatabase(myServer, @"roaming\TestUser\names.nsf", false);


    Genau an der Stelle krieg ich eine Exception ausgeworfen.


    Versuche ich aber eine andere DB zu öffnen, die sich in dem gleichen Ordner wie die names.nsf befindet, funktioniert das einwandfrei. Also beipielsweise so:


    Code
    NotesDatabase db = session.GetDatabase(myServer, @"roaming\TestUser\bookmark.nsf", false);


    Wieso kann ich die names.nsf DB auf dem Server nicht öffnen? Geht das allgemein aus irgendwelchen Sicherheitsgründen nicht oder mache ich etwas falsch?


    Gruß,
    Stay

  • Wie wäre es noch mit dem Fehler den die Exception auswirft ?


    Ohne diese ist alles nur rumgeraten.


    Vermutlich wirst du einfach auf die names.nsf mit deinem aktuellen User keinen Zugriff haben

  • Ja, berechtigter Einwand :)
    Es ist eine "Lotus Notes Error Notification". "An Error has occurd in a Lotus Notes application".
    Mehr kann ich auch nicht sagen.


    Ich habe mit dem aktuellen User aber Zugriff auf die Mail DB des TestUsers. Kann es trotzdem eine Zugriffberechtigungs-Sache sein?

  • Taucht bei dir da etwa das Dialogfenster auf, mit dem bei einem Absturz Daten gesammelt werden ?


    Ja es kann trotzdem ein Zugriffsproblem sein, da der Zugriff auf das Mailfile nichts mit dem Zugriff auf andere Datenbanken zu tun hat.