Centrum skryptów - Systemy operacyjne

Jak przekonwertować numer wewnętrzny na cały numer telefonu?

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 przekonwertować numer wewnętrzny na cały numer telefonu?

Cześć Skrypciarze! Pytanie

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

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

Centrum skryptów - Systemy operacyjne