Jak określić status oznaczenia flagą wiadomości e-mail programu Outlook?
Skrypciarze odpowiadają na Wasze pytania
Witamy w rubryce TechNet, w której Skrypciarze z firmy Microsoft odpowiadają na częste pytania dotyczące używania skryptów w administracji systemu. Jeśli macie jakieś pytania z tej dziedziny, zachęcamy do wysłania e-maila na adres: scripter@microsoft.com. Nie możemy zagwarantować odpowiedzi na każde otrzymane pytanie, ale staramy się jak możemy. |
Jak określić status oznaczenia flagą wiadomości e-mail programu Outlook?
Cześć, Skrypciarze! Jak można określić, które z wiadomości znajdujących się w folderze programu Outlook są oflagowane, a które były oflagowane, ale są obecnie ukończone?
-- KF
Cześć, KF. W życiu tak już jest, że aby otrzymać jakieś wyróżnienie należy wykazać się czymś szczególnym. Dotyczy to większości środowisk i wszystkich grup wiekowych. Cóż, takie jest życie. Nagrody mają zmotywować nas do dalszej pracy i osiągania coraz to lepszych wyników. Są jednak w naszym społeczeństwie jednostki, które nie potrzebują żadnej zachęty do bardziej wydajnej pracy. Jedną z nich jest właśnie Skrypciarz piszący te słowa. Mało tego, dzień w dzień nasz Skrypciarz robi coś, co z powodzeniem kwalifikowałoby go do jakiegoś superwyróżnienia. A co takiego zrobił dzisiaj? Otóż dzisiaj napisał skrypt, dzięki któremu można określić, które wiadomości programu Outlook są oflagowane, a które były oflagowane, ale są już ukończone:
Const olFolderInbox = 6
Set objOutlook = CreateObject("Outlook.Application")
Set objNamespace = objOutlook.GetNamespace("MAPI")
Set objFolder = objNamespace.GetDefaultFolder(olFolderInbox)
Set colItems = objFolder.Items
For Each objItem in colItems
If objItem.FlagStatus = 1 Then
Wscript.Echo "Follow-up complete"
Wscript.Echo objItem.Subject
Wscript.Echo
End If
If objItem.FlagStatus = 2 Then
Wscript.Echo "Marked for follow-up"
Wscript.Echo objItem.Subject
Wscript.Echo
End If
Next
Słucham? Wyjaśnić skrypt? Nie jest to do końca nasza specjalność, ale zobaczymy co da się zrobić.
Zaczynamy od zdefiniowania stałej o nazwie olFolderInbox i nadania jej wartości 6; dzięki temu skrypt będzie wiedział, z którym folderem ma pracować. A jest to folder – no właśnie – folder Inbox, czyli skrzynka odbiorcza.
To by było na tyle, jeżeli chodzi o tajemnice. Określiwszy stałą olFolderInbox, stosujemy poniższe trzy wiersze kodu w celu utworzenia wystąpienia obiektu Outlook.Application, połączenia się z przestrzenią nazw MAPI i folderem Inbox:
Set objOutlook = CreateObject("Outlook.Application")
Set objNamespace = objOutlook.GetNamespace("MAPI")
Set objFolder = objNamespace.GetDefaultFolder(olFolderInbox)
Po zakończeniu tej czynności stosujemy następujący wiersz kodu w celu pobrania kolekcji wszystkich wiadomości e-mail, znajdujących się w tym folderze:
Set colItems = objFolder.Items
Teraz mamy przynajmniej dwie możliwości do wyboru: możemy napisać filtr eliminujący wszystkie wiadomości, które nie mają żadnych ustawień oflagowania, lub możemy uruchomić pętlę przechodzącą przez całą kolekcję i sprawdzić ustawienia flagi dla każdej pozycji. Z uwagi na fakt, że filtry programu Outlook mogą się niektórym wydawać skomplikowane, wybieramy opcję z uruchomieniem pętli przez całą kolekcję. Jeżeli jednak chcemy zmierzyć się z pisaniem filtrów, pomocne informacje znajdziemy w tym artykule Office Space (j.ang.).
Nie możemy zagwarantować, że napisanie skryptu filtra programu Outlook daje szanse na otrzymanie jakiejkolwiek nagrody, ale któż to wie, może kiedyś…
Skoro już zdecydowaliśmy się na opcję z pętlą, uruchamiamy pętlę For Each, która przejdzie przez całą kolekcję. Pierwszą rzeczą, jaką znajdziemy wewnątrz niej, jest fragment kodu wyglądający następująco:
If objItem.FlagStatus = 1 Then
Wscript.Echo "Follow-up complete"
Wscript.Echo objItem.Subject
Wscript.Echo
End If
Sprawdzamy tutaj wartość właściwości FlagStatus. Jeżeli właściwość FlagStatus jest równa 1, oznacza to, że dana wiadomość e-mail była początkowo oznaczona flagą, jednak została ukończona. (W samym programie Outlook można zobaczyć mały znak zaznaczenia statusu flagi.) Dlatego też wywołujemy echo informacji o ukończeniu elementu; dodatkowo, wywołujemy echo wiersza tematu (aby moc stwierdzić, która wiadomość e-mail została oznaczona flagą jako ukończona).
Dobre pytanie: co z wiadomościami e-mail, które nadal są oflagowane? No cóż, z nimi poradzi sobie poniższy fragment kodu:
If objItem.FlagStatus = 2 Then
Wscript.Echo "Marked for follow-up"
Wscript.Echo objItem.Subject
Wscript.Echo
End If
Przy pomocy tego kodu sprawdzamy, czy wartość FlagStatus jest równa 2; być może nie ma potrzeby wspominać, że reprezentuje ona wiadomość nadal oznaczoną flagą. W takim wypadku wyświetlamy odpowiedni komunikat („Marked for follow-up” – oznaczenie flagą) oraz wiersz tematu wiadomości.
Teraz oczywiście uruchamiamy pętlę i powtarzamy tę procedurę dla następnej wiadomości znajdującej się w folderze. Co robimy napotkawszy wiadomość, która nie ma żadnego przypisanego statusu flagi (ani jako element ukończony, ani jako oczekujący)? To proste. Oznacza to, że FlagStatus dla tej wiadomości ma wartość 0, co z kolei oznacza, iż należy pominąć tę właśnie wiadomość.
Tak przy okazji, istnieją jeszcze inne interesujące właściwości związane z oflagowaniem. Na przykład, jeżeli chcemy sprawdzić bieżący kolor flagi przypisanej do wiadomości, używamy właściwości FlagIcon oraz jednej z poniższych wartości:
Constant | Value |
olBlueFlagIcon | 5 |
olGreenFlagIcon | 3 |
olNoFlagIcon | 0 |
olOrangeFlagIcon | 2 |
olPurpleFlagIcon | 1 |
olRedFlagIcon | 6 |
olYellowFlagIcon | 4 |
Jeżeli chcemy wiedzieć, kiedy wiadomość należy ukończyć, możemy sprawdzić właściwość FlagDueBy. (Jeżeli nie ma przypisanej żadnej daty ukończenia, właściwość ta ma domyślną wartośc 1/1/4501, co prawdopodobnie i tak nie wystarczy Skrypciarzowi piszącemu te słowa na dokończenie wszystkich wiadomości, które oznaczył flagą.) Jako dodatkowy bonus, wszystkie te właściwości są właściwościami do odczytu i zapisu, co oznacza, że można programistycznie zmienić status flagi, ikonę oraz datę ukończenia. Fajnie, co nie?
Do początku strony |