COMmatePLUS Outlook (Serien)Termine auslesen

Anfängerfragen zum Programmieren mit PureBasic.
dietmar
Beiträge: 97
Registriert: 19.09.2005 19:11
Wohnort: Zuhause

COMmatePLUS Outlook (Serien)Termine auslesen

Beitrag von dietmar »

Seit Tagen versuche ich die Termine aus Outlook auszulesen, funktioniert in Teilbereichen auch ganz gut. Nur die Serientermine wollen nicht wie ich. Bei meinen Versuchen mit unterschiedlichen Ansätzen bin ich letztens bei COMatePlus gelandet da dieser bis jetzt am schnellsten läuft.

In Zeile 20 (Debug Terminwiederholung...) kommt ungültiger Speicher Zugriff, hat jemand eine Idee oder einen Schubs in eine ganz andere funktionierende Richtung?

Code: Alles auswählen

XIncludeFile "COMatePLUS.pbi"

Global Outlook.COMateObject, NameSpace.COMateObject, Folder.COMateObject, Items.COMateObject, Termin.COMateObject, TerminWiederholung.COMateObject

Outlook = COMate_CreateObject("Outlook.Application")
If Outlook
  NameSpace = Outlook\GetObjectProperty("GetNamespace(" + Chr(39) + "MAPI" + Chr(39) + ")")
  If NameSpace
    Folder = NameSpace\GetObjectProperty("GetDefaultFolder(" + 9 + ")")
    If Folder
      Items = Folder\GetObjectProperty("Items")
      ; Items\SetProperty("items.IncludeRecurrences = True)")
      If Items
        For i=1 To i+1
          Items\SetProperty("GetRecurrencePattern")
          Termin = Items\GetObjectProperty("Item("+Str(i)+")" )
          TerminWiederholung = Items\GetObjectProperty("Item("+Str(i)+").GetRecurrencePattern" )
          If Not Termin: Break: EndIf
          Debug Termin\GetStringProperty("Subject") + ", " + Termin\GetStringProperty("Start") + " bis " + Termin\GetStringProperty("End") + " Uhr"
          Debug TerminWiederholung\GetStringProperty("Item("+Str(i)+").RecurrenceType")
          
        Next
        If Termin   : Termin\Release()  : EndIf
        If Items    : Items\Release()    : EndIf
        If Folder   : Folder\Release()   : EndIf
        If NameSpace: NameSpace\Release(): EndIf
        If Outlook  : Outlook\Release()  : EndIf
      EndIf
    EndIf
  EndIf
EndIf
Wir leben alle unter dem gleichen Sternenhimmel, aber wir haben nicht alle den gleichen Horizont.
Benutzeravatar
Kiffi
Beiträge: 10621
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: COMmatePLUS Outlook (Serien)Termine auslesen

Beitrag von Kiffi »

Code: Alles auswählen

Debug TerminWiederholung\GetStringProperty("Item("+Str(i)+")\RecurrenceType")
Grüße ... Peter
Hygge
dietmar
Beiträge: 97
Registriert: 19.09.2005 19:11
Wohnort: Zuhause

Re: COMmatePLUS Outlook (Serien)Termine auslesen

Beitrag von dietmar »

Danke, hab ich eben versucht. Leider mit dem gleichen Ergebnis.

Korrektur, man den "\" grundsätzlich verwendet kommt die Fehlermeldung nicht mehr, allerdings auch kein Ergebnis.

Code: Alles auswählen

Global Outlook.COMateObject, NameSpace.COMateObject, Folder.COMateObject, Items.COMateObject, Termin.COMateObject, TerminWiederholung.COMateObject

Outlook = COMate_CreateObject("Outlook.Application")
If Outlook
  NameSpace = Outlook\GetObjectProperty("GetNamespace(" + Chr(39) + "MAPI" + Chr(39) + ")")
  If NameSpace
    Folder = NameSpace\GetObjectProperty("GetDefaultFolder(" + 9 + ")")
    If Folder
      Items = Folder\GetObjectProperty("Items")
      Items\SetProperty("Item\Sort" + Chr(39) + "[Start]"  + Chr(39))
      Items\SetProperty("items\IncludeRecurrences = True)")
      If Items
        For i=1 To i+1
          Termin = Items\GetObjectProperty("Item("+Str(i)+")" )
          TerminWiederholung = Items\GetObjectProperty("Item("+Str(i)+")\GetRecurrencePattern" )
          If Not Termin: Break: EndIf
          Debug Termin\GetStringProperty("Subject") + ", " + Termin\GetStringProperty("Start") + " bis " + Termin\GetStringProperty("End") + " Uhr"
          Debug TerminWiederholung\GetStringProperty("Item("+Str(i)+")\RecurrenceType")
          Debug TerminWiederholung\GetStringProperty("Item("+Str(i)+")\RecurrenceType")
          Debug TerminWiederholung\GetStringProperty("Item("+Str(i)+")\DayOfWeekMask")
          Debug TerminWiederholung\GetStringProperty("Item("+Str(i)+")\MonthOfYear") 
          Debug TerminWiederholung\GetStringProperty("Item("+Str(i)+")\Instance")
          Debug TerminWiederholung\GetStringProperty("Item("+Str(i)+")\Occurrences")
          Debug TerminWiederholung\GetStringProperty("Item("+Str(i)+")\Duration")
          Debug TerminWiederholung\GetStringProperty("Item("+Str(i)+")\PatternStartDate")
          Debug TerminWiederholung\GetStringProperty("Item("+Str(i)+")\StartTime")
          Debug TerminWiederholung\GetStringProperty("Item("+Str(i)+")\EndTime")
          
        Next
        If Termin   : Termin\Release()  : EndIf
        If Items    : Items\Release()    : EndIf
        If Folder   : Folder\Release()   : EndIf
        If NameSpace: NameSpace\Release(): EndIf
        If Outlook  : Outlook\Release()  : EndIf
      EndIf
    EndIf
  EndIf
EndIf
Wir leben alle unter dem gleichen Sternenhimmel, aber wir haben nicht alle den gleichen Horizont.
Benutzeravatar
Kiffi
Beiträge: 10621
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: COMmatePLUS Outlook (Serien)Termine auslesen

Beitrag von Kiffi »

was meinst Du mit "kein Ergebnis"?

Sind die Debug-Ausgaben leer?

Testweise kannst Du mal schauen, ob COMate_GetLastErrorDescription() etwas zurückgibt.

Grüße ... Peter
Hygge
dietmar
Beiträge: 97
Registriert: 19.09.2005 19:11
Wohnort: Zuhause

Re: COMmatePLUS Outlook (Serien)Termine auslesen

Beitrag von dietmar »

Sorry für die späte Antwort. Mit kein Ergebnis meinte ich das Einzeltermine ausgegeben werden, Serientermine lediglich einmal am Startdatum. Es kommen keine Informationen über die Wiederholung (Häufigkeit, Anzahl) oder direkt die Serientermine.
Wir leben alle unter dem gleichen Sternenhimmel, aber wir haben nicht alle den gleichen Horizont.
dietmar
Beiträge: 97
Registriert: 19.09.2005 19:11
Wohnort: Zuhause

Re: COMmatePLUS Outlook (Serien)Termine auslesen

Beitrag von dietmar »

Keiner eine Idee?
Wir leben alle unter dem gleichen Sternenhimmel, aber wir haben nicht alle den gleichen Horizont.
dietmar
Beiträge: 97
Registriert: 19.09.2005 19:11
Wohnort: Zuhause

Re: COMmatePLUS Outlook (Serien)Termine auslesen

Beitrag von dietmar »

Ich hab im Netz folgendes Makro gefunden:
Sub DemoFindNext()
Dim myOlApp As Outlook.Application
Dim myNameSpace As Outlook.NameSpace
Dim tdystart As Date
Dim tdyend As Date
Dim myAppointments As Outlook.Items
Dim currentAppointment As Outlook.AppointmentItem
Set myOlApp = CreateObject("Outlook.Application")
Set myNameSpace = myOlApp.GetNamespace("MAPI")
tdystart = VBA.Format("09.11.2015", "Short Date")
tdyend = VBA.Format("13.11.2015", "Short Date")
Set myAppointments = myNameSpace.GetDefaultFolder(olFolderCalendar).Items
myAppointments.Sort "[Start]"
myAppointments.IncludeRecurrences = True

Set currentAppointment = myAppointments.Find("[Start] >= """ & tdystart & """ and [Start] <= """ & tdyend & """")
While TypeName(currentAppointment) <> "Nothing"
MsgBox currentAppointment.Subject
Set currentAppointment = myAppointments.FindNext
Wend
End Sub
Das funktioniert in Excel soweit gut, auch die Serientermine werden mit den Wiederholungen angezeigt, mir ist klar das ich die beiden Zeile in Rot brauche. Allerdings egal was ich versuche die COMate gibt mir nur den Fehler "One or more arguments are invalid. Possibly a numerical overflow or too many nested objects, -if so, try splitting your method call into two or more subcalls." bei den beiden zurück. Andere Termine werden sauber erkannt und werden auch im Debug ausgegeben.
Wir leben alle unter dem gleichen Sternenhimmel, aber wir haben nicht alle den gleichen Horizont.
123
Beiträge: 9
Registriert: 21.07.2015 20:20

Re: COMmatePLUS Outlook (Serien)Termine auslesen

Beitrag von 123 »

Hallo zusammen,
ich suche einen source code, der outlook termine monatsweise oder einzeln ausliest, schreibt und löscht. dieses beispiel funktioniert leider nicht. hat irgend jemand funktionierende beispiele?
vielen dank im voraus
Bernie
Beiträge: 1
Registriert: 22.09.2021 17:24

Re: COMmatePLUS Outlook (Serien)Termine auslesen

Beitrag von Bernie »

Hallo 123
Auslesen von Outlook-Serien-Terminen (bei den Privaten Terminen klemmt noch etwas und
zudem habe ich noch ein Problem beim auslesen des Nachrichteninhalts.
Es funktionieren:
- Fremdkonto
- Serientermine
- Begrenzung des anzuzeigenden Zeitraumes

Code: Alles auswählen

 
IncludeFile "COMatePLUS.pbi"

Global Outlook.COMateObject, NameSpace.COMateObject 
Global Items.COMateObject, Termin.COMateObject
Global Kalender.COMateObject, Folder.COMateObject
Global NewItems.COMateObject
Global vUserid.s, vFilter.s, DatumVon.s, DatumBis.s, vDatum.s
Global vInterval.COMateObject, vFreeBusy.COMateObject, objRecipient.COMateObject


Outlook = COMate_CreateObject("Outlook.Application")
If Outlook
  
   NameSpace = Outlook\GetObjectProperty("GetNamespace('MAPI')")
   If NameSpace
     
      ; Default-Folder     
      ;Folder = NameSpace\GetObjectProperty("GetDefaultFolder(9)")
     
      ; Calendar from another User / e-mail-Address
      vUserid = "U123456" ; Userid
      ;vUserid = "email@mail.com" ; e-Mail
      Kalender = NameSpace\GetObjectProperty("CreateRecipient('" + vUserid + "')") 
      
      ; Private Termine des fremden Users anzeigen / Private Appointments
      ; https://docs.microsoft.com/en-us/office/vba/api/outlook.recipient.freebusy
      ; myFBInfo = myRecipient.FreeBusy(#11/11/2003#, 60 * 24) 
      ; Suchen der privaten Termine von heute (falls vorhanden)
      ; LET vStartTime = Dat_Heute_Form + " 00:00"
      ; 1 Minuten
      ; LET vInterval  = 1
      ; SET objRecipient = vKalender
      ; Generiert die Ansicht von 4 Wochen = 28 Tagen x (24 Std x 60 Min = 1440) = String mit 40320 Zeichen (0-4) = Minuten-Einheiten
      ; OBJECT CALL objRecipient.FreeBusy(vStartTime, vInterval) To vFreeBusy
      ; 0 olFree             The user is available.
      ; 1 olTentative        The user has a tentative appointment scheduled.
      ; 2 olBusy             The user is busy.
      ; 3 olOutOfOffice      The user is out of office.
      ; 4 olWorkingElsewhere The user is working in a location away from the office.
      ; Probleme mit dem Zugriff auf die FreeBusy-Information:
      ; https://support.microsoft.com/en-us/topic/how-to-troubleshoot-free-busy-issues-in-a-hybrid-deployment-of-on-premises-exchange-server-and-exchange-online-in-office-365-ae03e199-b439-a84f-8db6-11bc0d7fbdf0
      ; https://manuals.gfi.com/en/kerio/connect/content/email-clients/kerio-outlook-connector/outlook-free-busy-service-always-returns-no-information-297.html
;       vInterval = 1 ; Einen Monat (= 4 Wochen! fix!) in 1-Minuten-Einheiten anzeigen
;       vDatum = "22.09.2021 00:00" 
;       objRecipient = Kalender
;       MessageRequester("", "Kalender-Objekt = " + Str(objRecipient))
; 
;       Debug "Start  = " + objRecipient\GetObjectProperty("FreeBusy('" + vDatum + "',1)") + " Ende"
;       Debug "Start  = " + objRecipient\GetStringProperty("FreeBusy('" + vDatum + "',1)") + " Ende"
;       Debug "Start  = " + objRecipient\GetStringProperty("FreeBusy('" + Chr(34) + vDatum + Chr(34) + "',1)") + " Ende"
;       Debug "Start  = " + objRecipient\GetStringProperty("FreeBusy(" + Chr(34) + vDatum + Chr(34) + ",1)") + " Ende"
;       Debug "Start  = " + objRecipient\GetStringProperty("FreeBusy('22.09.2021 00:00',1)") + " Ende"
;       Debug "Start  = " + objRecipient\GetStringProperty("FreeBusy(" + Chr(34) + "22.09.2021 00:00" + Chr(34) + ",1)") + " Ende"
;       Debug "Start  = " + objRecipient\GetStringProperty("FreeBusy(#22.09.2021 00:00#,1)") + " Ende" 
;       
;       Debug "Start  = " + objRecipient\GetStringProperty("FreeBusy($002722.09.2021 00:00$0027,1)") + " Ende"
;       Debug "Start  = " + objRecipient\GetStringProperty("FreeBusy('22.09.2021 00:00',1)") + " Ende"
;       
;       Debug "Start  = " + Kalender\GetStringProperty("FreeBusy(#01/01/2021#,1)") + " Ende"
;       Debug "Start  = " + Kalender\GetStringProperty("FreeBusy('#01/01/2021#',1)") + " Ende"
;       
      
      
      Folder = NameSpace\GetObjectProperty("GetSharedDefaultFolder(" + Kalender + " AS COMateObject, 9)")
      
      If Folder
         Items = Folder\GetObjectProperty("Items")
         
         ; Termin-Serien aufbereiten für die Ausgabe
         Items\SetProperty("IncludeRecurrences=1")
         Items\GetObjectProperty("Sort('[START]')")
         
         DatumVon = "20.09.2021"
         DatumBis = "31.12.2021"
         ;DatumBis = "30.09.2021"
         vFilter = "[START] >= $0027" + DatumVon + " 00:00$0027 And [START] <= $0027" + DatumBis + " 00:00$0027"
         NewItems = Items\GetObjectProperty("Restrict('" + vFilter + "')")
         
         ;NewItems\GetObjectProperty("Sort('[START]')")

         ; Zeigt viel zuviele Elemente an!! -> "x" ist für For-Next unbrauchbar!
         x = NewItems\GetIntegerProperty("Count")
         ;MessageRequester("", "Anzahl Elemente = " + Str(x))
         
         If NewItems
          ;For i = 1 To x ; funktioniert nicht!
          For i = 1 To i+1
          Termin = NewItems\GetObjectProperty("Item("+Str(i)+")" )
          
          ;apptOrganizer = Termin\GetObjectProperty("Body" )
          ;MessageRequester("", "apptOrganizer = " + Str(apptOrganizer))
          
          ; addAsync(recipients: (string | EmailUser | EmailAddressDetails)[], 
          ; options: Office.AsyncContextOptions, callback?: (asyncResult: Office.AsyncResult<void>) => void): void;
          ; https://docs.microsoft.com/en-us/javascript/api/outlook/office.recipients?view=outlook-js-preview
          ; https://docs.microsoft.com/en-us/javascript/api/outlook/office.appointmentcompose?view=outlook-js-preview
          
          If Termin
             
             Debug  Termin\GetStringProperty("Start") + " bis " +
                    Termin\GetStringProperty("End") + " Uhr " +
                    Termin\GetStringProperty("Subject") + ", " + 
                    Termin\GetStringProperty("Location") + ", " + ; Bis hier funktioniert alles wie gewünscht!
                   
                    Termin\GetStringProperty("Body") + ", " +     ; Ab hier keine Daten mehr!? -> Mailinhalt / Details -> anderer Level?
                    ;Termin\GetStringProperty("emailAddress") + ", " +
                    ;Termin\GetStringProperty("RequiredAttendees") + ", " +
                    ;Termin\GetStringProperty("organizerAddress") + ", " +
                    ;apptOrganizer\GetStringProperty("displayName")
                    Termin\GetStringProperty("Recipients")
          Else
             Break
          EndIf 
          Next
       If Termin   : Termin\Release()  : EndIf
       If Items    : Items\Release()    : EndIf
       If Folder   : Folder\Release()   : EndIf
       If NameSpace: NameSpace\Release(): EndIf
       If Outlook  : Outlook\Release()  : EndIf
       EndIf
    EndIf
  EndIf
EndIf
Gruss Bernie
Antworten