Beiträge von COOLIO

    Giten Morgen,


    Also da ich ja die Klasse DavidUser verwenden
    muss ich nicht die ID umwandeln^^
    Aber falls doch, das ist das kleinste Problem und hab auch schon eine ConvertMethode dafür.
    die ich jederzeit einsetzen kann, sobald ich es benötige.


    Ich hab mir mal die CalendarItem Klasse angeschaut.
    Jedesmal als ich dachte ich hätte die passende Propertie gefunden
    war es leider nur eine Read-Only Eigenschaft


    z.B:
    calendaritem.Recipients --> Read-Only
    calendaritem.Account --> Read-Only
    calendaritem.Options.Account --> Read-Only
    calendaritem.From --> Read-Only
    calendaritem.To --> Read-Only


    Also kurz:
    die Properties die ich für richtig gehalten hab, waren dann ein read-only





    Die Save-Methode
    calendaritem.save()


    Die kann ja zwei werte aufnehmen, kann man hier was machen?




    Die Doku finde ich persönlich nicht allzu hilfreich, sie verwirrt mich meist auch

    Guten Morgen Jens,


    mir ist heute ein Problem aufgefallen.
    Es geht immer noch um die Synchronisierung
    Funktioniert schon recht gut,


    Aber da ich ja alles über den Amdin mache
    und ein neuer Termin bei dem User angelegt wird vom Admin
    bekommt die Erinnerung aber der Admin User
    und nicht der Nutzer selber.


    Ist auch recht klar, da ich ja mit dem Admin eingeloggt bin
    Aber ist es möglich, dass der User die Erinnerung nur bzw. ebenfalls bekommt, ohne sich auf den Nutzer umzuloggen?
    Wenn ja, wie würde es funktionieren?



    Alex

    Guten Morgen Jens,


    Bei mir geht nun auch das verschieben,
    also auch mit meiner Variante, das Problem war was ganz anderes.
    Es lag am Server selber, er war falsch konfiguriert...
    Daher auch immer die Exception.


    Der Server-Name wurde geändert.
    und anscheinend ist David.fx empfindlich bei sowas.
    weil vieles noch auf den alten Server-Namen verwiesen hat.
    Und das hat zu vielen Fehler geführt, die jetzt bei mir behoben worden sind -.-
    *YEAHHH*


    Und das war das Problem gewesen,
    hab danach die Methode wieder aufgerufen, und siehe da es funktioniert alles wieder.


    Gruß
    Alexander

    Hallo Jens,


    ja, die hab ich auch gelesen
    hab mich gewundert warum man das machen muss,
    aber im Endeffekt gehts trotzdem nicht.


    schon bei dem Aufruf nach dem Beispiel


    DavidAPIClass oApp;
    oApp = new DavidAPIClass();


    gehts nicht, da steht in der ErrorList:
    Interop type 'DvApi32.DavidAPIClass' cannot be embedded. Use the applicable interface instead.



    Daher gebe ich dir Variante auf...sonst kostet es zu viel Zeit
    und gehe den umgekehrten Weg.
    neuen Termin anlegen und den alten löschen
    und dann das aktualisieren der ID.


    aber danke dir für die Geduld und Hilfe :)
    Ich hoffe ich hab ich jetzt alles, damit ich den Synch jetzt vollständig programmieren kann.


    Danke dir vielmals


    Falls doch noch was kommt.
    Wirst du von mir hören :D

    Hey Jens,



    Ja, die hab ich auch in der Doku gesehen.
    aber mit dem DBNull.value und "normalen" null,
    erscheint immer die COM-Exception.


    Einen neuen Termin anlegen klappt
    einen bestimmten Termin löschen klappt auch.
    Nur das Updaten will nicht :(


    Alo sich geh folgendermaßen vor
    melde mich mit dem Admin an


    Account account = dvapi.Logon("", "", "", "", "", "AUTH");


    Bin angemeldet.
    dann hole ich den User "Mustermann" aus den Users


    Users user = account.Users;
    DavidUser davidUser = user.Item("Mustermann")


    Hab den auch gefunden.
    hab dann die ID vom User..
    und geh dann über dem UNC-Pfade..auf das Archiv der Kalendereinträge


    Archive archiv = account.ArchiveFromID("UNCPfad");


    klappt auch...
    List<CalendarItem> items
    hab ich dann die ganzen Termine


    filtere mir den bestimmten aus.
    und dann den aufruf den ich beschroieben hab...
    wo ich dieses Item mit dem neuen Termindaten versehen will.
    klappt auch...nur die


    Item.save(null, null) mit allen möglichen varianten
    weigert sich mitzuspielen...
    und die COMException tretet auf :(


    Mein Kollege meint,
    ich muss das CalendarItem loslassen, da es vom Com gesperrt ist.
    Aber genaueres weiß er nicht.
    Und verwirrt mich eher noch mehr.



    Gruß,
    Alex

    Guten Morgen Jens,


    Also ich setze auch hier voraus, dass die Anwender
    David.fx12 haben müssen.
    Kann es ja nicht jedem Recht machen :D.
    Aber bin dir für jede Info dankbar, hilft mir sehr Tobit zu verstehen.
    Und wie es aufgebaut ist :)


    Ja, ich glaube ich hatte auch Null übergeben..
    Obowhl nein ich hab einfach nur calendarItem.Save()
    ausgeführt...selbes Phänomen.
    Update: Nein, ich bekomme da sogar eine Com-Excpetion--> "Beim Aufruf einer COM-Komponente wurde ein HRESULT E_FAIL-Fehler zurückgegeben"


    Dann teste ich es noch mit den beiden anderen Varianten (DBNull.Value, null).
    Da bekomme ich auch dieselbe Com-Exception.


    Also einen neuen Termin abspeichern mit :


    item.Save();


    klappt wunderbar.
    Aber wenn ich mir einen bestimmten raussuche simples Beispiel
    List<CalendarItem> items = GetUserCalendarItems(GetUserCalendarArchiv(user.UID, _server));
    CalendarItem item = items[0];
    dieses item nun mit meiner Methode (vorigen Post) ändere


    kann ich diesem item
    mit der Save()-Methode nicht mehr speichern und bekomme einen Com-Fehler
    Woran kann das liegen?




    Gruß,
    Alexander

    Heyhey


    Also hab doch noch ein Problem :(
    Es geht darum ein Termin zu updaten, falls er sich in unserer Datenbank geändert hat.
    Leider klappt das nicht wie ich gedacht hab.
    Er legt immer einen neuen an, und lässt den wo ich ändern möchte gleich.
    Und an der Doku hab ich nichts passendes gefunden...




    CalendarItem item //Hier hab ich den passenden Termin mir geholt
    Archive
    archiv = GetUserCalendarArchiv(user.UID, _server); //hier greife ich auf das Archiv vom User zu


    if (item != null) //Hier fülle ich dann neue Daten dem Termin zu
    {
    item.Subject = subject;
    item.BodyText.PlainText = body;
    item.StartTime = start;
    item.StopTime = end;
    item.AllDayEvent = fullday;
    item.Options.Priority = DvMessagePriority.DvMsgPriorityNormal;
    item.ShowAs = DvShowAsType.DvShowAsBusy;
    item.Private = privat;
    item.Location = location;
    item.LabelIndex = 3;



    item.Save(archiv);
    }


    Hier speichere ich dann den geupdateten Termin
    Problem eben: es wird ein neuer Termin angelegt, und der alte auch gelassen.
    Ja ich könnten den alten dann einfach löschen, wäre kein Thema...aber das will ich nicht.
    Er sollte geupdatet werden und kein neuer sein


    Alexander

    Hallo Jens,


    ja wir haben tatsächlich eine Api-Doku....
    danke dir, ich hätte sie sonst nie gefunden und neimand hat mir was gesagt... :(
    Gut möglich dass ich eine neuere Dll hab.
    In der Doku steht auch nichts über die DavidUser


    Also mit der "Users"
    zum Beispiel mit "account.Users" bekomme ich eine ganze Liste von User



    Users
    user = account.Users;


    Und ich nutze die DavidUser...
    aber es würde auch mit "User" oder "User2" gehen...ok getestet ich kann den doch nicht in "User/2" casten..
    die "User" und "User2" haben die ID...und die muss ich dann umwandeln wie du gesagt hast.
    Aber die "DavidUser" hat eine UID...da muss ich es nicht umwandeln, sondern hab direkt die richtige ID.
    Also bei meinen bisherigen Test hat es funktioniert.
    Aber der größere und genauere Test muss ich noch machen...um es bestätigen zu können.
    Kann dir dann Bescheid geben, sobald ich soweit bin.


    Also hab mal die Varinate mit dem AddressBook angeschaut.
    Ist doch etwas umständlich um an den Nutzer zu kommen, den ich gerade benötige...
    aber machbar :D


    Und die Root-Methode um an den Pfad zu kommen...die hab ich sogar mal unbewusst genutzt :D



    Sooo
    dann hoff eich mal dass ich mit dem Wissen
    und der Doku jetzt selbständig arbeiten kann


    Also vielen vielen Danke für die geduld mit mir :)
    Und bekommst dann noch ein Feedback wegen DavidUser und Users
    eventuell nutze ich eine neuere Dll.



    Alex

    Hallo


    Also habe mir mal die Klasse User2 und User angeschaut
    Worin unterscheiden sich beide?


    Jetzt hab ich mal deine vorgeschlagende Variante ausprobiert
    Also ich melde mich an
    Account account = dvapi.Logon("", "", "", "", "", "AUTH");


    Mein eigener Nutzer hat die ID "1001000".


    Archive archiv = account.ArchiveFromID("\\\\192.168.xxx.xxx\\david\\archive\\user\\10010000\\cal");
    MessageItems items = archiv.AllItems;


    und Voila, ich hab tatsächlich alle meine Termin-Items.


    Kann man davon ausgehen dass der UNC-PFad gleich ist
    oder besteht die Möglichkeit beim Einrichten dass er woander liegen kann?
    (Wäre aber kein Problem, muss der Anfangspfad in die XML-Datei eingeztragen werden worauf mein Tool zugreift)



    Soweit so gut...
    So ich weiß nun den Accountnamen: "MaxMustermann"
    wie komme ich mit dem Namen auf die ID des User.
    Das wäre mir noch sehr wichtig.


    Natürlich hab ich auch was ausprobiert :)
    und funktionerit es so?:


    Users user = account.Users; (Also als Admin angemeldet)


    DavidUser usertest = user.Item("MaxMustermann");
    string iD = usertest.UID


    damit hab ich sogar direkt die ID und muss es nicht umwandeln
    dann kann ich ja mit der UNC mit der passende ID an die CalendarItems kommen
    und das pro User


    Archive archiv = account.ArchiveFromID("\\\\192.168.xxx.xxx\\david\\archive\\user\\"iD"\\cal");
    MessageItems items = archiv.AllItems;


    Müsste doch so gehen?




    Glaub das meinte mein Kollege.
    Unsere Firma nutzt Exchange und kein Tobit.
    Aber wir haben Tobit-Kunden...und sie wünschen sich so ein Tool
    ALso glaub nicht dass wir Solution Partner sind.
    Mir wurde zumindest nichts gesagt.
    Ich hab ein paar PDF-Dokumente....aber da sind die Code-Beispiele in VB
    da tu ich mir sehr schwer sie zu verstehen...
    Und meiner Meinung nach, ist es nicht die Doku die du meinst.
    Sie heißt "David Client Scripts" und dann noch eine namens "Getting Started Guide"

    Ach eine Sache noch...
    ich hab ja alle Email-Accounts als Liste
    und werden den Dienst auf dem Server laufen lassen...


    Hab dann zum Beispiel die Accounts:
    Lala
    Test
    Mustermann



    Klappt dann folgender Aufruf:
    dvapi = new DavidAPI();
    account = dvapi.Logon("", "Lala", "", "", "", "AUTH");


    Hole die ganzen Termine folgendermaßen:


    MessageItems oMessageItems;
    List<CalendarItem> calendars = new List<CalendarItem>();
    CalendarItem
    item;


    Archive oArchiv;
    oArchiv = account.GetSpecialArchive(DvArchiveTypes.DvArchivePersonalCalendar);
    oMessageItems = oArchiv.AllItems;
    foreach (MessageItem msgitem in oMessageItems)
    {
    if (msgitem.Type == DvItemTypes.DvCalendarItem)
    {
    item = (CalendarItem)msgitem;
    calanders.Add(item);
    }
    }
    return calanders;



    Bearbeite sie entsprechend.
    Hab dann die alle Synchronisiert.
    Gehts dann weiter mit:


    account = dvapi.Logon("", "Test", "", "", "", "AUTH");
    ...Termine holen, synchronisieren


    Dann:
    account = dvapi.Logon("", "Mustermann", "", "", "", "AUTH");



    Also auf unserem Server klappt die Variante.
    Problem nur, bei uns ist der Server eventuell nicht sauber eingerichtet und hat eventuell einige
    Sicherheitslücken.
    Da fehlt mir das wissen über COM und wie du ja erwähnt hast
    das Wissen über Windows allgemein mit den ganze Rechten.


    Was meinst du dazu?
    Würde das so funktionieren? Da ich ja kein Password verwende beim Einloggen nutze


    Und tut mir leid, falls du es in den anderen Posts mir die ganze Zeit schon erklärst.
    Und ich es nicht kapiere :S



    Alex

    Hallo Jens,


    ahh, Danke!
    Ja da hast du recht bin kein Crack in Windows...vorallem nicht was Server anbelangt *mich schämen*.
    Glaub daher tu ich mir da etwas schwer.
    Also denke mal das mit dem Anmelden müsste passen :), hab mich vllt etwas falsch ausgedrückt^^
    Ob ich mich über API anmelde oder etc. war mir egal....hauptsache der Admin ist angemeldet :D.
    Und das ist er ja..


    Hmm...also das mit der dvapi32.dll ist glaub nicht ganz ausreichend.
    Ich hab mal das Programm auf einen Computer ohne Client laufen lassen, die die Dll im Verzeichnis dabei hatte.
    Aber als ich eine Instanz erzuegen wollte.


    DavidAPI dvapi = new DavidAPI();


    kam gleich eine COM-Fehlermeldung.
    Und bei den, die den Client hatten, kam keine Fehlermeldung.
    Aber gut, dass ist ein ich sag mal kleineres Problem, ich kann ja ja sagen
    dass der Client auf dem Server installiert sein muss, als Anforderung.


    Hmm...Also die API-Doku hab ich jetzt bei meinen gegeben Unterlagen nicht gefunden..
    Und laut meinen Kollegen ist oft die Hilfe offline...
    Was gerade das Thema David.fx sehr schwer macht.
    Daher versuche ich es über Foren, und wurde hier fündig :)


    Also CalenderItems bearbeiten kann ich, kann sie ändern, löschen, einen neuen hinzufügen :)
    Das sollte für mich kein Problem darstellen.


    Also muss gluab noch etwas genauer das Projekt beschreiben.
    In unseren großen eigenen Projekt (Warenwirtschaftssystem-Tool)...Da gibt es Abteilungen mit den zugeteilten Arbeiter.
    Die Arbeiter haben einiges an Informationen + den Email-Account.
    Und man kann bei den Abteilungen mit einer Checkbox setzen ob alle Arbeiter in der Abteilung synchronisiert werden sollen mit meinem Tool.
    Es sollen dann, also nur diese Nutzer der Abteilung synchronisiert werden und nicht alle.
    Und ich weiß von vornherein nicht, wer synchronisert werden soll. Sondern nur innerhalb der Laufzeit meines Tools.
    (Methode die mir die Liste von den EMail-Accounts liefert).


    Gut, abgemacht, sehe ich so ein.
    Dann versuche ich jetzt bis 17 Uhr. mit dem Wissen was ich von dir bekommen, es umzusetzen
    Und sag dann Bescheid wie weit ich gekommen bin und was ich genau getan/versucht habe :)



    Danke dir.



    Alex

    Hallo Jens und Community


    Der Programmnutzer, muss den Adminaccount in einer XML-angeben + das passende Passwort.
    Und ich setze voraus, dass dieser Nutzer die Rechte hat, die Termine der "normalen" Nutzer zu ändern.



    Ich synchronisiere die Daten mit den Terminen aus unserer Datenbank, die von unseren eigenen Programm entstammen.


    Also kein Exchange, oder etc. sondern ein eigenständiges Projekt.


    Da funktioniert das synchronieren mit Exchange...Und ich bin nun zuständig für David..
    Es wird als Windowsdienst laufen...der jede 5 Minuten die Kalendereinträge synchronisiert.


    Wenn ich nun den Dienst direkt am David.fx Server laufen lasse.
    muss da ein Client installiert sein, da die DavidAPI über COM zugreift, oder reicht der Server aus?
    Nein, das will ich ja gerade, dass ich die Kalenderarchive pro Nutzer haben will...und nicht alle von allen auf einmal :).



    Account account;


    account = dvapi.Logon("192.168.xxx.xxx", "Administrator", "12345", "", "", "AUTH"); (hier wird der Admin angemeldet)


    So sagen wir mal nun bin ich mit dem Admin angemeldet, der die rechte hat termine zu ändern.
    account bseitzen ja User und Users


    Wie bekomme ich nun die Termine vom User "MaxMustermann" mit dem Account



    Falls ich scheitere kann ich dann nach ein kleinen Codebeispiel fragen,
    oder ist es hier nicht gestattet?
    (versuche es morgen den ganzen tag, wenn es mir auf dee Arbeit gestattet wird)



    Also danke für die schnelle Antwort :)

    Hallo Communtiy


    Ich bin was David.fx angeht ein echter Anfänger.
    Kenne mich nur sehr wenig aus.
    Und verzweifle etwas an meinen Projekt


    Ich muss folgendes in C# programmieren:
    Ich soll die Kalendereinträge jeden Nutzer nacheinander synchronisieren, über den Administartor.
    (nutze die 12er Version vom David)
    und würe es gerne über die DavidAPI dll lösen


    AM besten wäre es wenn ich die Termine pro User in einer Listen von CalendarItem
    --> List<CalendarItem>
    gespeichert werden. Weil ändern,neuen hinzufüen und löschen kann ich die einzelnen CalenderItems


    Ich beginne folgenderweise um mich als Admin einzulogen:
    DavidAPI dvapi = new DavidAPI();
    Account account;
    account = dvapi.Logon("192.168.xxx.xxx", "Administrator", "12345", "", "", "AUTH"); (hier wird der Admin angemeldet)


    Das Einloggen klappt auch wunderbar.
    Und ich gehe auch davon aus, dass der Admin genug Rechte hat um Termine im Kalender für jeden "normalen"
    anderen Nutzer einzutragen.


    Nun steh ich auf dem Schlauch...
    WIe komme ich nun auf die ganzen Terminen pro Nutzer
    damit ich diese nacheinander synchroniseren kann?


    Könntet ihr mir ein Beispielcode in C# hier zeigen.
    weil mir einfach das Fachwissen von Tobit fehlt...und mir nicht die Zeit gegeben wird es zu verstehen.
    und mir ein Beispiel sehr helfen würde.



    Ich bedanke mich jetz schon ganz herzlich und freue mich auf
    zahlreichen und hilfreiche Antwprten :)



    Gruß,
    Alexander

    Guten Tag Community


    ich möchte mich auf einen Server verbinden
    bei dem Tobit(v. 12) installiert ist und einsatzbereit ist.
    Mit IMAP klappt das wunderbar. Kann mich zum server verbinden.
    und die Mails auslesen/speichern/löschen.


    Jetzt wollte ich per API die Kalendereinträge synchronisieren..Also holen mit einem anderen Termin vergleichen(datenbank)...Dann je nachdem in Tobit die neuen Termine in dem Kalender erstellen, aktualisieren, usw.


    Ich programmiere mit C#:


    DavidAPI dvapi = new DavidAPI();
    Aber schon hier beim compilieren, kommt eine Fehlermeldung, die ich nicht verstehe...


    COMException was unhandled
    Die COM-Klassenfactory für die Komponente mit CLSID {524D5913-F081-44DE-91DA-4C6F86BE5506} konnte aufgrund des folgenden Fehlers nicht abgerufen werden: 80040154 Klasse nicht registriert (Ausnahme von HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).


    Kleine Info: Bei mir selber ist Tobit nicht installiert.
    Diese Problem hat sich erledigit, Tobit muss installiert sein..da DavidAPI auf dei COM zugreift


    Dann eine andere Frage:
    Kann ich nur über COM zugreife, oder gibts eine andere Möglichkeit auf den Server ohne COM mich verbinden?
    Also anders formuliert: Muss David.fx installiert sein?


    Dann hätte ich noch eine Frage:
    kann ich mich per API, auf den Server verbinden und von allen Usern die Termine holen und synchronisieren
    oder funktioniert es doch eher so, dass ich mich mit jeden User verbinden muss..synchronisere..ausloggen..mit dem nächsten User verbinden...usw. ??


    Und eine kleine Bitte:
    könntet Ihr mir vllt einen kleinen Code beispil in C# zeigen, wie ich mich auf den Server verbinden kann mit API: (
    Server: 192.168.xxx.xx
    User: Mustermann
    Passwort: 12345


    Account oAccount,
    oAccount = dvapi.Logon("192.168.xxx.xx", "Mustermann", "12345", "", "", "NoAuth");


    soo?




    Damit wäre mir wirklich sehr geholfen.
    Bin echt noch ein Newbie was Tobit angeht.


    Danke euch sehr.



    Viele Grüße


    Alexander