Du greifst ja mit _OL_FolderAccess auf den jeweiligen Kalender zu.
Mit dem im Array zurückgegebenen Folder-Objekt rufst Du dann _OL_FolderGet auf. Im Feld 5 des Arrays kriegst Du dann den "Displayname" des Folders zurück.
_OL_Example_SentMail_Event
-
wuff100 -
2. Dezember 2020 um 17:03 -
Erledigt
-
-
Spoiler anzeigen
Local $aFolder = _OL_FolderAccess($oOL, $OutlookKalender, $olFolderCalendar)
If @error Then
MsgBox($MB_ICONERROR, "Error", "_OL_FolderAccess returned @error = " & @error & ", @extended = " & @extended, 0,"")
Return
EndIf
_ArrayDisplay($aFolder, "$aFolder")
Global $oStore = $aFolder[1].Store
Global $oDefaultFolder = $oStore.GetDefaultFolder("")
Local $aResult = _OL_FolderGet($oOL, $oDefaultFolder)
_ArrayDisplay($aResult, "$aResult")
water, vielen Dank!
So funktioniert es.
-
Das ist doppelt gemoppelt. So geht's auch:
CodeLocal $aFolder = _OL_FolderAccess($oOL, $OutlookKalender, $olFolderCalendar) If @error Then Return MsgBox($MB_ICONERROR, "Error", "_OL_FolderAccess returned @error = " & @error & ", @extended = " & @extended) _ArrayDisplay($aFolder, "$aFolder") Local $aResult = _OL_FolderGet($oOL, $aFolder[1]) If @error Then Return MsgBox($MB_ICONERROR, "Error", "_OL_FolderGet returned @error = " & @error & ", @extended = " & @extended) _ArrayDisplay($aResult, "$aResult")
-
-
water, aber leider nicht immer.
Spoiler anzeigen
$OutlookKalender = "Outlook-Datendatei\"
Local $aOL_Item = _OL_ItemFind($oOL, $OutlookKalender, $olAppointment, "", "Subject", $Betreff_GK, "EntryID,Subject,Location,Body,Start,End", "", 1)
_ArrayDisplay($aOL_Item, "_OL_ItemFind")
So wird mein Item in einem bestimmten Kalender z.B. "Test" gefunden.
Es muss doch jetzt möglich sein, aufgrund des gefundenen Items, den Kalender auszugeben, in dem sich das Item befindet.
Der Pfad müsste dann so als Beispiel aussehen: "Outlook-Datendatei\Test"
Ich komme einfach nicht weiter!
-
Wenn Du mit _OL_ItemGet das Objekt des jeweiligen Items holst, dann kannst Du mit $oFolder = $oObject.Parent den Folder dazu ermitteln. Mit $oFolder.FolderPath solltest Du den vollständigen Pfad erhalten.
-
Spoiler anzeigen
Local $aFolder = _OL_FolderAccess($oOL, $OutlookKalender, $olFolderCalendar)
If @error Then Return MsgBox($MB_ICONERROR, "Error", "_OL_FolderAccess returned @error = " & @error & ", @extended = " & @extended)
_ArrayDisplay($aFolder, "$aFolder")
Local $aResult = _OL_FolderGet($oOL, $aFolder[1])
If @error Then Return MsgBox($MB_ICONERROR, "Error", "_OL_FolderGet returned @error = " & @error & ", @extended = " & @extended)
_ArrayDisplay($aResult, "$aResult")
Local $oObject = $aResult[1]
Local $oFolder = $oObject.Parent
Local $Path = $oFolder.FolderPath
water, wenn es so richtig ist, wird der $oFolder, noch der $oFolder.FolderPath nicht ermittelt.
-
Ich ging vom Ergebnis von _OL_ItemFind von Deinem vorigen Beispiel aus.
D.h. vom Item -> Folder -> Folderpfad -> zerlegen und die gewünschten Infos extrahierenD.h. wir sollten zuerst klären, ob Du vom Folder oder vom item ausgehen willst/musst?
-
Zitat
D.h. wir sollten zuerst klären, ob Du vom Folder oder vom item ausgehen willst/musst?
Vom Item aus.
Spoiler anzeigen
Local $oOL = _OL_Open()
Local $aOL_Item = _OL_ItemFind($oOL, $OutlookKalender, $olAppointment, "", "Subject", $Betreff_GK, "EntryID,Subject,Location,Body,Start,End", "", 1)
Local $aOL_Properties[1] = ["Subject=" & $Betreff_GK]
Local $oObject = _OL_ItemModify($oOL, $aOL_Item[1][0], Default, $aOL_Properties)
Local $oFolder = $oObject.Parent
Local $Path = $oFolder.FolderPath
MsgBox(1, "", $Path)
Mit _OL_ItemModify funtioniert es.
Übrigens, für Deine UDF und Hilfe möchte ich Dir nochmals sehr danken.
-
So, das war jetzt eine ziemliche Doktorarbeit
_OL_ItemFind erlaubt nur die Rückgabe von direkten Properties eines Items. Das Item Objekt und das Folder Objekt gehören da leider nicht dazu.
Ich habe nun _OL_ItemFind (testweise) so angepasst, dass die folgenden beiden "pseudo properties" (@ItemObject und @FolderObject) das Item Objekt und das Folder Objekt zurückgeben.
Kannst Du das bitte testen und mir dann sagen, ob es Deine Wünsche erfüllt?
Falls es passt, dann erweitere ich die Funktionalität und baue sie in die OutlookEX UDF ein.Das nachfolgende Testskript baut auf dem _OL_ItemFind.au3 Beispielskript auf:
Code
Alles anzeigen#include <OutlookEX.au3> ; ***************************************************************************** ; Create test environment ; ***************************************************************************** Global $oOutlook = _OL_Open() If @error <> 0 Then Exit MsgBox(16, "OutlookEX UDF", "Error creating a connection to Outlook. @error = " & @error & ", @extended = " & @extended) Global $Result = _OL_TestEnvironmentCreate($oOutlook) If @error <> 0 Then Exit MsgBox(16, "OutlookEX UDF - Manage Test Environment", "Error creating the test environment. @error = " & @error & ", @extended = " & @extended) Global $aItems ;------------------------------------------------------------------------------------------------------------------------------------------------ ; Example 2 - Search for appointments with "Room" as location (partial match) ;------------------------------------------------------------------------------------------------------------------------------------------------ _OL_ErrorNotify(2) Global $aFolder = _OL_FolderAccess($oOutlook, "*\Outlook-UDF-Test\SourceFolder\Calendar") $aItems = _OL_ItemFindEX($oOutlook, $aFolder[1], $olAppointment, "", "", "", "EntryID,@FolderObject,@ItemObject,Subject,Location", "", 1) If @error = 0 Then _ArrayDisplay($aItems, "OutlookEX UDF: _OL_ItemFind Example Script - Find appointments by partial search") Else MsgBox(48, "OutlookEX UDF: _OL_ItemFind Example Script", "Error finding an appointment. @error = " & @error & ", @extended: " & @extended) EndIf ConsoleWrite("Folder Description: " & $aItems[1][1].Description & @CRLF) ConsoleWrite("Folder Folderpath : " & $aItems[1][1].FolderPath & @CRLF) ConsoleWrite("Item Subject : " & $aItems[1][2].Subject & @CRLF) _OL_Close($oOutlook) Func _OL_ItemFindEX($oOL, $vFolder, $iObjectClass = Default, $sRestrict = "", $sSearchName = "", $sSearchValue = "", $sReturnProperties = "", $sSort = "", $iFlags = 0, $sWarningClick = "") If $sRestrict = Default Then $sRestrict = "" If $sSearchName = Default Then $sSearchName = "" If $sSearchValue = Default Then $sSearchValue = "" If $sReturnProperties = Default Then $sReturnProperties = "" If $sSort = Default Then $sSort = "" If $iFlags = Default Then $iFlags = 0 If $sWarningClick = Default Then $sWarningClick = "" Local $bChecked = False, $oItems, $aTemp, $iCounter = 0, $oItem If $sWarningClick <> "" Then If FileExists($sWarningClick) = 0 Then Return SetError(2, 0, "") Run($sWarningClick) EndIf If $iObjectClass = Default Then $iObjectClass = $olContact ; Set Default ObjectClass ; Set default return properties depending on the class of items If StringStripWS($sReturnProperties, BitOR($STR_STRIPLEADING, $STR_STRIPTRAILING)) = "" Then Switch $iObjectClass Case $olContact $sReturnProperties = "FirstName,LastName,Email1Address,Email2Address,MobileTelephoneNumber" Case $olDistributionList $sReturnProperties = "Subject,Body,MemberCount" Case $olNote, $olMail $sReturnProperties = "Subject,Body,CreationTime,LastModificationTime,Size" Case $olAppointment $sReturnProperties = "EntryID,Start,End,Subject,IsRecurring" ; Same as returned by _OL_AppointmentGet Case Else Return SetError(6, 0, "") EndSwitch EndIf If Not IsObj($vFolder) Then $aTemp = _OL_FolderAccess($oOL, $vFolder) If @error Then Return SetError(3, @error, "") $vFolder = $aTemp[1] EndIf If ($sSearchName <> "" And $sSearchValue = "") Or ($sSearchName = "" And $sSearchValue <> "") Then Return SetError(1, 0, "") Local $aReturnProperties = StringSplit(StringStripWS($sReturnProperties, $STR_STRIPALL), ",") Local $iIndex = $aReturnProperties[0] If $aReturnProperties[0] < 2 Then $iIndex = 2 If StringStripWS($sRestrict, BitOR($STR_STRIPLEADING, $STR_STRIPTRAILING)) = "" Then $oItems = $vFolder.Items If @error Then Return SetError(5, @error, "") Else $oItems = $vFolder.Items.Restrict($sRestrict) If @error Then Return SetError(5, @error, "") EndIf Local $iItems = $oItems.Count Local $aItems[$iItems + 1][$iIndex] = [[0, $aReturnProperties[0]]] If BitAND($iFlags, 4) <> 4 And $sSort <> "" Then $aTemp = StringSplit($sSort, ",") If $aTemp[0] = 1 Then $oItems.Sort($sSort) Else $oItems.Sort($aTemp[1], True) EndIf EndIf For $i = 1 To $iItems $oItem = $oItems.Item($i) If $oItem.Class <> $iObjectClass Then ContinueLoop ; Get all properties of first item and check for existance and correct case If BitAND($iFlags, 4) <> 4 And Not $bChecked Then ;~ If Not __OL_CheckProperties($oItem, $aReturnProperties, 1) Then Return SetError(@error, @extended, "") ; <== __OL_CheckProperties erweitern $bChecked = True EndIf If $sSearchName <> "" And StringInStr($oItem.ItemProperties.Item($sSearchName).value, $sSearchValue) = 0 Then ContinueLoop ; Fill array with the specified properties $iCounter += 1 If BitAND($iFlags, 4) <> 4 Then For $iIndex = 1 To $aReturnProperties[0] If StringLeft($aReturnProperties[$iIndex], 1) <> "@" Then $aItems[$iCounter][$iIndex - 1] = $oItem.ItemProperties.Item($aReturnProperties[$iIndex]).value If @error Then Return SetError(4, @error, "") Else If $aReturnProperties[$iIndex] = "@ItemObject" Then $aItems[$iCounter][$iIndex - 1] = $oItem If $aReturnProperties[$iIndex] = "@FolderObject" Then $aItems[$iCounter][$iIndex - 1] = $vFolder EndIf If BitAND($iFlags, 2) = 2 And $iCounter = 1 Then $aItems[0][$iIndex - 1] = $oItem.ItemProperties.Item($aReturnProperties[$iIndex]).Name ; <== Header erweitern Next EndIf If BitAND($iFlags, 4) <> 4 And BitAND($iFlags, 2) <> 2 Then $aItems[0][0] = $iCounter Next If BitAND($iFlags, 4) = 4 Then ; Process subfolders If BitAND($iFlags, 1) = 1 Then For $vFolder In $vFolder.Folders $iCounter += _OL_ItemFind($oOL, $vFolder, $iObjectClass, $sRestrict, $sSearchName, $sSearchValue, $sReturnProperties, $sSort, $iFlags, $sWarningClick) Next EndIf Return $iCounter Else ReDim $aItems[$iCounter + 1][$aReturnProperties[0]] ; Process subfolders If BitAND($iFlags, 1) = 1 Then For $vFolder In $vFolder.Folders $aTemp = _OL_ItemFind($oOL, $vFolder, $iObjectClass, $sRestrict, $sSearchName, $sSearchValue, $sReturnProperties, $sSort, $iFlags, $sWarningClick) __OL_ArrayConcatenate($aItems, $aTemp, $iFlags) Next EndIf Return $aItems EndIf EndFunc ;==>_OL_ItemFind
-
water, es gib ein Problem mit dem Array.
$aItems = _OL_ItemFindEX($oOL, $aFolder[1], $olAppointment, "", "Subject", $Betreff_GK, "EntryID,@FolderObject,@ItemObject,Subject,Location", "", 1)
Wenn ich das "EntryID,Subject,Location,Body,Start,End" einsetze, funktoniert es.
Gib mir dann natürlich kein @FolderObject,@ItemObject zurück.
-
Definiere "Problem".
Wie sieht der Array aus?
Welche Werte haben @error und @extended? -
-
Kannst Du bitte die aktuellste Version (1.6.3.0) der OutlookEX UDF herunterladen und OutlookEX.au3 und OutlookEX_Base.au3 in den UDF Verzeichnis kopieren?
Mit der habe ich zuletzt getestet und da funktioniert alles problemlos. -
-
Sorry, hatte Deine OutlookExConstants.au3 noch drin!
-
water, mit der 1.6.3.0 funktioniert es!
Nochmals vielen Dank!
-
-