Via DvAPI32 Aufgabe erstellen mit VB.NET

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • Via DvAPI32 Aufgabe erstellen mit VB.NET

      Hallo, dies ist mein erster Eintrag hier im Forum, also bitte ich um ein wenig Nachsicht.

      Ich möchte ein Programm schreiben, welches im David InfoCenter FX Aufgaben erstellt.

      Soweit habe ich mein Programm auch schon fertig, dass es bei mir im
      Verzeichnis die Aufgabe ablegt, nun möchte ich allerdings Aufgaben für
      andere Benutzer erstellen können. Diese kann ich mittels

      Source Code

      1. oArchive = oAccount.ArchiveFromID("\\server\david\archive\user\10000000\in")


      auch umsetzen, aber wie finde ich die ID der entsprechenden Benutzer heraus, damit ich die IDs nicht immer raussuchen muss ?

      Gibt es eine Möglichkeit, dass ich nicht manuell eine Liste pflegen muss ?


      Derzeit sieht mein Code wie folgt aus:

      Source Code

      1. Dim oApp As DvApi32.IApplication
      2. Dim oAccount As DvApi32.Account
      3. Dim oArchive As DvApi32.Archive
      4. Dim oTaskItem As DvApi32.TaskItem
      5. oApp = CreateObject("DVOBJAPILib.DvISEAPI")
      6. oApp.LoginOptions = DvApi32.DvLoginOptions.DvLoginForceAsyncDuplicate
      7. oAccount = oApp.Logon("", "", "", "", "", "NOAUTH")
      8. oArchive = oAccount.GetSpecialArchive(DvApi32.DvArchiveTypes.DvArchivePersonalToDo)
      9. oTaskItem = oArchive.NewItem(DvApi32.DvItemTypes.DvTaskItem)
      10. oTaskItem.StartTime = DateAdd("h", 1, Now)
      11. oTaskItem.DueTime = DateAdd("h", 2, Now)
      12. oTaskItem.Subject = "Testeintrag"
      13. oTaskItem.Percentage = CLng(0)
      14. oTaskItem.Reminder = ""
      15. oTaskItem.Companies = "Firma XY"
      16. 'oTaskItem.Resources = ""
      17. oTaskItem.KeepUpdatedCopy = True
      18. oTaskItem.StatusReportOnCompletion = FALSE
      19. oTaskItem.TaskStatus = 0
      20. oTaskItem.Viewed = False
      21. oTaskItem.Save(Nothing, oAccount.User.Name)
      Display All


      Falls jemand weiß, wieso ich bei "oTaskItem.Resources" keinen String übergeben kann, immer raus mit der Sprache. :)

      Ich bin über jeden Hinweis sehr dankbar.

      Gruß

      The post was edited 1 time, last by SH87 ().

    • Hallo und Willkommen im Forum,

      bis auf den fehlenden Vornamen hast Du doch alles wunderbar und sauber gemacht. ;)

      Hast Du mal versucht an die Resources Eigenschaft eine Stringvariable zu übergeben die Du vorher entsprechend initialisiert hast? Keine Ahnung ob das was bringt, nur so eine Idee.

      Wegen der User-IDs folgendes:
      Das Accountobjekt hält eine Methode get_LocalAddressBook bereit, mit der man alle Benutzer die im David angelegt auflisten kann.
      Ich weiß gerade nicht mehr was dabei alles zurück gegeben wird, aber im Zweifelsfall kann man da noch mit dem User-Objekt weiter arbeiten.

      Noch ein kleiner Hinweis zu den User-IDs in der API. Oft wird diese als Dezimalzahl dargestellt, die muss man also erst konvertieren. Also nicht wundern wenn dort z.b. für den Admin statt der 10004000 die 268451840 steht.
      Das kann man händisch übrigens wunderbar mit dem Windows Taschenrechner nachvollziehen wenn man diesen auf die "Programmierer" Ansicht umschaltet. Einfach HEX Wert eingeben und dann den Button auf DEZ stellen.

      Gruß Jens
      Es wäre schön, Deinen Vornamen zu kennen. Bitte beachte unsere Forenregeln und die Netiquette.

      ----------------------------------
      Jens Suing

      Tobit Software Authorized Partner *****
      Starface Advanced Partner
      work ... for all! Solution Partner
      bintec elmeg Certified Partner
      Kerio Partner
      ----------------------------------
      DIE Spezialisten - J.Suing
      www.schneller-und-besser.de
      DAS Portal: Faq, Forum
      ----------------------------------
      Support und Beratung unter
      02206-95100-0
      ----------------------------------
    • Hallo Teardrop,

      vielen Dank für die Hilfe. LocalAdressBook hat mir sehr weiter geholfen. Habe dies in der DvAPI Hilfe eingetippt und gemerkt, ich hatte den Code die ganze Zeit schon vor der Nase. Nungut, mein Code sieht nun in etwa so aus:

      Source Code

      1. oApp = CreateObject("DVOBJAPILib.DvISEAPI")
      2. oApp.LoginOptions = DvApi32.DvLoginOptions.DvLoginForceAsyncDuplicate
      3. oAccount = oApp.Logon("", "", "", "", "", "NOAUTH")
      4. oArchive = oAccount.GetSpecialArchive(DvApi32.DvArchiveTypes.DvArchiveUserRoot)
      5. Dim _UserName as String = "Name xy"
      6. For Each oAddr In oAccount.LocalAddressBook
      7. If LCase(oAddr.displayname) = LCase(_UserName) Then
      8. oArchive = oAccount.GetSpecialArchive(DvApi32.DvArchiveTypes.DvArchivePersonalToDo)
      9. oTaskItem = oArchive.NewItem(DvApi32.DvItemTypes.DvTaskItem)
      10. oTaskItem.Subject = "New Task"
      11. ....
      12. ....
      13. oTaskItem.Save(Nothing, oAddr)
      14. oAccount.Logoff()
      15. end if
      16. next
      Display All


      Falls der Benutzer dann die Rechte auf den Ordner des anderen hat, dann wird die Aufgabe auch erstellt.
      Nun bleibt aber weiterhin für mich das Problem mit einigen Werten, die ich nicht setzen kann, wie z.B.:

      Source Code

      1. oTaskItem.ActualWork = 10 'Integer
      2. oTaskItem.TotalWork = 20 'Integer
      3. oTaskItem.Resources = "Ressourcen" 'String
      4. oTaskItem.Companies = "Firmen" 'String
      5. oTaskItem.DateCompleted = "10.10.2012 10:00:00" 'Object


      Kann man diese Werte bei der Erstellung vielleicht gar nicht mit übergeben sondern nur nachträglich eintragen ?
      Wober ich mir nicht mehr sicher bin, ob ich es irgendwann mal geschafft haben den ein oder anderen Wert zu setzen. Es kam mir so vor als hätte ich die Firma mal eingetragen bekommen. Irgendwie komisch.

      In der Hilfe gibt es Beispielcode, wo diese Werte gesetzt werden.

      Source Code

      1. Archive* pArchive = NULL;
      2. FormattedText* pFText = NULL;
      3. Addresses
      4. *pAddresses = NULL;
      5. TaskItem* pTaskItem = NULL;
      6. VARIANT vType, vEmpty;
      7. vEmpty.vt = VT_EMPTY;
      8. vType.vt = VT_EMPTY;
      9. if (SUCCEEDED
      10. (pAcc->GetSpecialArchive (DvArchivePersonalToDo,
      11. &pArchive)))
      12. {
      13. if (SUCCEEDED (pArchive->NewItem(DvTaskItem,
      14. (IDispatch**)&pTaskItem)))
      15. {
      16. VARIANT vStartDate, vEndDate;COleDateTime dateTime;
      17. vStartDate.vt = VT_DATE;
      18. vEndDate.vt = VT_DATE;
      19. dateTime = dateTime.GetCurrentTime();
      20. vStartDate.date = dateTime.m_dt;
      21. dateTime.SetDateTime (dateTime.GetYear (),
      22. dateTime.GetMonth (), dateTime.GetDay ()+2, 17,30,00);
      23. vEndDate.date = dateTime.m_dt;
      24. pTaskItem->put_Subject(L"Task");
      25. pTaskItem->put_KeepUpdatedCopy(VARIANT_TRUE);
      26. pTaskItem->put_StatusReportOnCompletion(VARIANT_TRUE);
      27. pTaskItem->put_ActualWork (2);
      28. pTaskItem->put_Companies (SysAllocString (L"Company one, Company two"));
      29. pTaskItem->put_StartTime (vStartDate);
      30. pTaskItem->put_DueTime (vEndDate);
      31. pTaskItem->put_Percentage (10);
      32. pTaskItem->put_Resources (SysAllocString (L"Resources"));
      33. pTaskItem->put_Viewed (VARIANT_FALSE);
      34. pTaskItem->put_TaskStatus(1);
      35. if
      36. (SUCCEEDED
      37. (pTaskItem->get_BodyText(&pFText)))
      38. {
      39. pFText->put_PlainText(L"Task for Task");
      40. pFText->Release ();
      41. }
      42. if (SUCCEEDED (pTaskItem->get_Recipients(&pAddresses)))
      43. {
      44. VARIANT
      45. vAddress, vDisplay, vType;
      46. long index;
      47. vAddress.vt = VT_BSTR;
      48. vDisplay.vt = VT_BSTR;
      49. vType.vt = VT_EMPTY;
      50. vAddress.bstrVal = (L"thomas.tobit@tobit.com");
      51. vDisplay.bstrVal = (L"DisplayName");
      52. pAddresses->Add(vAddress, vDisplay, vType, &index);
      53. pAddresses->Release
      54. ();
      55. }
      56. pTaskItem->Send(vType, vEmpty);
      57. pTaskItem->Release();
      58. }
      59. pArchive->Release
      60. ();
      61. }
      Display All


      Hat vielleicht jemand noch einen Tipp für mich ?

      Danke und Gruß
      Sascha
    • Ich habe nun noch mal den Test gemacht, ob ich die Werte im nachhinein ändern kann. Leider hat das auch nicht geklappt. Aber beim auslesen habe ich herausbekommen, dass die Werde für die Zeit in Minuten gespeichert werden.

      Ich warte dann mal, vielleicht hat ja jemand die zündende Idee für mich. :)

      Gruß Sascha
    • Hallo Sascha,

      hast Du mal versucht wie oben erwähnt, die Werte als Variable zu setzen und nicht direkt als Werte?

      Also z.B. sowas:


      Source Code

      1. Dim res as String = "Test"
      2. oTaskItem.Resources = res


      Bekommst Du eine Fehlermeldung? Wenn ja, welche?

      Ich habe selbst noch nichts mit Aufgaben gemacht ausser vor Ewigkeiten mal ein paar Tests, und das auch nur in C#. Daher kann ich Dir darauf keine eindeutige Antwort geben. Prinzipiell denke ich aber schon dass es funktioniert.

      Gruß Jens
      Es wäre schön, Deinen Vornamen zu kennen. Bitte beachte unsere Forenregeln und die Netiquette.

      ----------------------------------
      Jens Suing

      Tobit Software Authorized Partner *****
      Starface Advanced Partner
      work ... for all! Solution Partner
      bintec elmeg Certified Partner
      Kerio Partner
      ----------------------------------
      DIE Spezialisten - J.Suing
      www.schneller-und-besser.de
      DAS Portal: Faq, Forum
      ----------------------------------
      Support und Beratung unter
      02206-95100-0
      ----------------------------------
    • Hallo Jens,



      das habe ich auch schon versucht, jedoch ohne Erfolg. Ich finde es halt
      komisch, weil die Werte, die nicht funktionieren alle auf der zweiten
      Seite sind, wenn man manuell eine Aufgabe erstellt. Beim Auslesen meiner
      Aufgaben habe ich es mal debuggt und konnte mir alle Werte anschauen
      von einem manuell angelegten Testeintrag. Habe sie dann versucht zu
      ändern, was aber auch nicht funktioniert hat. Vermutlich muss ich
      irgendwas beachten. Vielleicht beim Speichern, aber ich komme einfach
      nicht dahinter.

      Falls ich es mal schaffe, melde ich mich dann noch mal. :)

      Gruß Sascha
    • Hallo Zusammen,

      ich habe gerade Hilfe gefunden und konnte das Problem nun beheben.

      Ich sollte einfach bevor ich die Werte übergebe, lesend auf den Wert zugreifen.

      Source Code

      1. a = oTaskItem.ActualWork
      2. oTaskItem.ActualWork = 120
      3. oTaskItem.Resources = "Ressourcen"
      4. oTaskItem.TotalWork = 600
      5. oTaskItem.Companies = "Firma"


      Somit kann ich mein Projekt nun abschließen.
      Vielen Dank noch mal.

      Gruß Sascha
    • Hallo Sascha,

      danke für die Rückmeldung!

      Jetzt wo Du es schreibst - hab ich auf jeden Fall auch schonmal von gehört oder gelesen, hatte ich aber absolut nicht mehr auf dem Schirm.

      Gut das es funktioniert und die "Nachwelt" nun auch schlauer sein wird. :)

      Gruß Jens
      Es wäre schön, Deinen Vornamen zu kennen. Bitte beachte unsere Forenregeln und die Netiquette.

      ----------------------------------
      Jens Suing

      Tobit Software Authorized Partner *****
      Starface Advanced Partner
      work ... for all! Solution Partner
      bintec elmeg Certified Partner
      Kerio Partner
      ----------------------------------
      DIE Spezialisten - J.Suing
      www.schneller-und-besser.de
      DAS Portal: Faq, Forum
      ----------------------------------
      Support und Beratung unter
      02206-95100-0
      ----------------------------------