Jak przekonwertować numer wewnętrzny na cały numer telefonu?
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 przekonwertować numer wewnętrzny na cały numer telefonu?
Cześć, Skrypciarze! Nasze telefony przechowywane są w usłudze Active Directory jako numery wewnętrzne, mamy jednak kilka reguł dotyczących ich konwertowania na numery telefonów. Piszę skrypt, który tworzy podpisy w programie Outlook, potrzebuję jednak, by dodatkowo jeszcze konwertował numery wewnętrzne na numery telefonów. Jak to zrobić?
-- SM
Cześć, SM! Chciałem zacząć od tego, że jestem dość zmęczony, tylko, że byłoby to kłamstwo, a my nie kłamiemy w artykułach „Cześć Skrypciarze” (a przynajmniej się staramy). Więc zaczynam od nowa: jestem wykończony, a i to słowo nie oddaje do końca mojego stanu ducha. Powód jest chyba jasny – chodzi oczywiście o przygotowania do wyjazdu do Barcelony na konferencję TechEd IT Forum, wiecie przecież, że jestem perfekcjonistą i wszystko musi być zapięte na ostatni guzik… Śpię więc po cztery godziny dziennie (nie, nie w ciągu dnia, ale na dobę), nie spodziewałem się że aż tyle tego będzie. Jak Napoleon mógł tak żyć?
Jak widać po organizacji moich przygotowań, strategiem to ja chyba nie jestem najlepszym, ale wiem przynajmniej, jak przekonwertować numer wewnętrzny na cały numer właściwy. Oto interesujący nas kod skryptu:
strNumber = "7596"
If Left(strNumber, 2) = "74" Then
strNumber = "3112-74" & Right(strNumber, 2)
End If
If Left(strNumber, 2) = "75" Then
strNumber = "3115-85" & Right(strNumber, 2)
End If
Wscript.Echo strNumber
Nie wiem tylko, czy starczy mi dość energii na wyjaśnienie, jak ten skrypt właściwie działa. No dobra, skrypciarska Pani Redaktor właśnie obrzuciła mnie TYM spojrzeniem, muszę więc znaleźć w sobie energię, albo wiać w te pędy. Nie wiem w sumie co jest bardziej wyczerpujące.
Uwaga: Mała korekta lingwistyczna, ponieważ TYM spojrzeniem się nie obrzuca. Nie wiem czy oglądaliście Supermana. Tak, skrypciarska Pani Redaktor ma po prostu lasery w oczach i lepiej schodzić jej z drogi w trakcie ich uruchamiania… nie chcę wybuchnąć nagle, chcę jechać przecież do Barcelony… |
Potulnie wyjaśniam zatem, jak działa nasz skrypt. To, co widzieliście u góry, to kod, który konwertuje numery wewnętrzne na numer telefoniczny. Pod koniec artykułu pokażemy trochę bardziej fikuśny (czytaj: skomplikowany) skrypt, który pobiera numer wewnętrzny z usługi Active Directory, konwertuje go na numer telefoniczny, po czym tworzy podpis w programie Outlook. Tylko, że to pod koniec artykułu, a teraz jesteśmy w jego środku (prawda, ze wyśmienity ze mnie strateg?) Na tym etapie zaplanowałem omówienie procesu, który konwertuje numer wewnętrzny na numer telefonu.
Zacznijmy jednak od wyjaśnienia zasad konwertowania, o których wspominał SM. W jego organizacji numery wewnętrzna mają jeden z dwóch prefiksów – 74 lub 75. Jak przekonwertować wewnętrzny na właściwy numer telefonu? Załóżmy, nasz wewnętrzny to 7439. W takim wypadku najpierw konwertujemy 74 (pierwsze dwie cyfry numeru wewnętrznego) na 3112-74. Następnie pobieramy dwie kolejne cyfry (39) i dodajemy je do numeru 3112-74. Co daje nam 3112-74 plus 39? Tak, zgadza się: numer telefonu.
Uwaga: Wiemy, chcielibyście otrzymać cały ten numer telefonu, a nie wynik pozostawiony w niedomówieniu. Nie zapominajmy jednak o zasadach dotyczących numerów telefonów i umieszczania ich w sieci. Postanowiliśmy zatem obejść tę kwestię. Najpierw mieliśmy zamiar przekonwertować wszystkie numery wewnętrzne na 555-, w ten sposób moglibyśmy Wam pokazać 555- 7439. Trochę dziwnie jednak konwertować zarówno wewnętrzne numery 74, jak i 75 na 555-, więc stwierdziliśmy, że napiszemy artykuł na temat numerów telefonów, w którym nie doszukacie się ani jednego całego numeru telefonu. |
Robimy dokładnie to samo z wewnętrznymi zaczynającymi się na 75, czyli łączymy 3115-75 z dwiema ostatnimi cyframi numeru wewnętrznego.
Co zaś się tyczy skryptu (tudzież jego fragmentu), to zaczynamy od nadania numerowi wewnętrznemu (w tym wypadku 7596) zmiennej strNumber. Następnie, używając funkcji Left, ustalamy czy pierwsze dwie cyfry wewnętrznego są równe 74. Jeżeli są, konstruujemy nowy numer telefonu, który składa się ze standardowego 3112-74 oraz dwóch ostatnich cyfr wewnętrznego. Skąd znamy te dwie cyfry? Proste. Używamy po prostu funkcji Righti pobieramy ostatnie dwa znaki ze strNumber.
Tym właśnie zajmuje się następujący fragment kodu:
If Left(strNumber, 2) = "74" Then
strNumber = "3112-74" & Right(strNumber, 2)
End If
Co natomiast, jeżeli dwie pierwsze cyfry nie są równe 74? Nie ma problemu, w takim wypadku przechodzimy do następnej instrukcji If-Then, tego, które sprawdza, czy pierwsze dwie cyfry są równe właśnie 75. W takim wypadku skrypt podejmuje odpowiednie (strategiczne) kroki:
If Left(strNumber, 2) = "75" Then
strNumber = "3115-85" & Right(strNumber, 2)
End If
Oczywiście jest więcej typów numerów wewnętrznych (dla przykładu 76 i 77); jeżeli tak jest to dopisujemy po prostu odpowiednią instrukcję If-Then.
Tylko tyle. Teraz jeszcze przywołujemy echo wartości strNumber. Aby dobrze zobaczyć tę wartość wystarczy po prostu zamknąć oczy i wyobrazić sobie numer telefonu przywołany w oknie polecenia.
Jak wyglądałby więc ten kod użyty w gotowym skrypcie? No cóż, na przykład tak:
Set objWord = CreateObject("Word.Application")
Set objDoc = objWord.Documents.Add()
Set objSelection = objWord.Selection
Set objSysInfo = CreateObject("ADSystemInfo")
strUser = objSysInfo.UserName
Set objUser = GetObject("LDAP://" & strUser)
strName = objUser.FullName
strTitle = objUser.Title
strDepartment = objUser.Department
strCompany = objUser.Company
strNumber = objUser.telephoneNumber
If Left(strNumber, 2) = "74" Then
strNumber = "3112-74" & Right(strNumber, 2)
End If
If Left(strNumber, 2) = "75" Then
strNumber = "3115-85" & Right(strNumber, 2)
End If
Set objEmailOptions = objWord.EmailOptions
Set objSignatureObject = objEmailOptions.EmailSignature
Set objSignatureEntries = objSignatureObject.EmailSignatureEntries
objSelection.TypeText strName & ", " & strTitle
objSelection.TypeParagraph()
objSelection.TypeText strDepartment
objSelection.TypeParagraph()
objSelection.TypeText strCompany
objSelection.TypeParagraph()
objSelection.TypeText strNumber
Set objSelection = objDoc.Range()
objSignatureEntries.Add "AD Signature", objSelection
objDoc.Saved = True
objWord.Quit
Nie będziemy opisywać, jak działa powyższy skrypt, jest to bowiem opisane bardzo szczegółowo w jednym z artykułów w czasopiśmie TechNet Magazine (j.ang.). Wystarczy powiedzieć, że skrypt łączy się z usługą Active Directory i pobiera dane (dla zalogowanego użytkownika) typu: imię i nazwisko, tytuł, dział i oczywiście numer telefonu. Po skonwertowaniu numeru wewnętrznego na numer telefonu, skrypt przechodzi do utworzenia nowego podpisu pod wiadomościami email o nazwie AD Signature.
Niestety nic z tego nie widać na ekranie. Jeżeli jednak chcielibyście zobaczyć te magiczne sztuczki, użyjcie tego wiersza kodu jako drugiego (i oznaczcie ostatni wiersz jako komentarz, co zapobiegnie zamknięciu programu Word):
objWord.Visible = True
Sprawdzę tylko w moim kalendarzu stratega, czy czegoś nie pominąłem. Nie, nie pominąłem. Jakie inne cele strategiczne mam tam zapisane? Myślę, ze do najważniejszych Zimowa Olimpiada Skrypciarska (j.ang.) (mam zapisane pod datą 15.02.2008 do 03.03.2008). W tym roku, dla odmiany, Olimpiada będzie jeszcze większa i lepsza niż w zeszłym (dodaliśmy np. konkurencje z nowego języka – Perl.) Oczywiście, będzie to od nas wymagało wielu dokładnie zaplanowanych, strategicznych działań. Do tego czasu pozostało jednak jeszcze wiele miesięcy…
Do początku strony |