Centrum skryptów - Microsoft Office

Jak określić status oznaczenia flagą wiadomości e-mail programu Outlook?

Udostępnij na: Facebook

Skrypciarze odpowiadają na Wasze pytania

Cześć Skrypciarze!

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! Pytanie

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ść Skrypciarze! Odpowiedź

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:

ConstantValue
olBlueFlagIcon5
olGreenFlagIcon3
olNoFlagIcon0
olOrangeFlagIcon2
olPurpleFlagIcon1
olRedFlagIcon6
olYellowFlagIcon4

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 Do początku strony

Centrum skryptów - Microsoft Office