Do tej pory przyjrzeliśmy się obiektowi Request, który, jak mogłeś stwierdzić, pozwala na otrzymywanie informacji o gościu. Poznaliśmy również obiekt Response, którego używamy do wysyłania informacji do przeglądarki gościa. W tym rozdziale zwrócimy uwagę na kolejny element modelu obiektów ASP - obiekt Server
Obiekt Server używa jednej właściwości i czterech metod pozwalających na komunikację z Internetowym serwerem informacyjnym (IIS) i wykorzystanie jego funkcjonalności. Przez komunikację z serwerem IIS rozumiemy możliwość zmiany sposobów jego pracy ze stroną. Funkcjonalność obiektu Server pozwala na podjęcie takich działań w skrypcie, dla których sam skrypt nie posiada odpowiednich mechanizmów.
Rysunek 7.1. prezentuje rolę, jaką odgrywa obiekt Server w modelu przetwarzania strony ASP. Zgodnie z modelem goście wpisują w przeglądarce stronę, którą chcą przeglądać bądź klikają łącze będące częścią innej strony, która jest stroną ASP. Żądanie przemierza Internet podążając do twojego serwera. Ten następnie wyszukuje pożądaną stronę i jeśli jest to strona ASP, rozpoczyna jej przetwarzanie. Obiekt Server odgrywa rolę właśnie w tym momencie, kiedy strona jest przetwarzana. Obiekt pozwala włączyć inne składniki w proces przetwarzania strony oraz komunikować się z samym serwerem. Przetworzona strona jest następnie wysyłana do przeglądarki odwiedzającego.
1. Żądanie https://www.cds.com/sales.asp
2. Internet
3. IIS wyszukuje stronę ASP
4. IIS interpretuje stronę ASP i korzysta ze składników
Składniki
5. Internet
6. HTML w przeglądarce: Cześć Bob! Dzisiaj w sprz 13313t194n edaży mamy.
Rysunek 7.1. Rola obiektu Server w modelu obiektów ASP
Obiekt Server zawiera jedną tylko właściwość, która umożliwia komunikację z serwerem. Ta właściwość została omówiona poniżej, a podsumowana jest w tabeli 7.1.
Tabela 7.1. Właściwość obiektu Server
Właściwość |
Przeznaczenie |
ScriptTimeout |
Czas uruchomienia strony ASP (w sekundach) przed jej przeterminowaniem. |
Z różnorakich powodów przetwarzanie kodu może zająć dużo czasu. Serwer może być bardzo zajęty, składnik może utknąć w pętli lub twój własny program może zawierać kod powtarzający się w nieskończoność. Głównie z takich powodów być może ustalisz maksymalny czas działania twojego skryptu przed jego zatrzymaniem i zwróceniem błędu przeglądarce wystosowującej żądanie.
Możesz ustalić ten czas uruchamiania na poziomie serwera WWW, przeglądając jego właściwości i naciskając przycisk Konfiguracja (Configuration) w zakładce Katalog główny (Home Directory). W ten sam sposób możesz ustawić tą właściwość na poziomie strony WWW. Możesz to również zrobić na poziomie aplikacji ASP klikając prawym przyciskiem myszy wybraną aplikację w widoku Konsoli zarządzania Microsoftu serwera IIS, a następnie zaznaczając Właściwości (Properties). Następnie, gdy przejdziesz do zakładki Katalog (Directory) po naciśnięciu przycisku Konfiguracja (Configuration), zobaczysz dialog pokazany na rysunku 7.2.
Rysunek 7.2. Ustawianie maksymalnego czasu uruchamiania strony ASP
W zakładce Opcje aplikacji (App Options) tego dialogu znajduje się pole tekstowe o nazwie Czas uruchamiania skryptu ASP (ASP Script Timeout). Tutaj możesz ustalić maksymalną ilość sekund uruchamiania skryptu.
W swoim kodzie możesz zwiększyć ten czas uruchamiania przy użyciu właściwości ScriptTimeout obiektu Server. Właściwość ma następującą składnię:
Server.ScriptTimeout = NumberOfSeconds
Zmienna ScriptTimeout jest liczbą sekund, podczas których skrypt może być uruchamiany przed jego przeterminowaniem.
Wartość tej właściwości możesz wyświetlić w oknie przeglądarki poprzez następujący kod:
<%
Response.Write "<B>Ta strona może być uruchamiana przez "
Response.Write Server.ScriptTimeout
Response.Write "sekund przed przeterminowaniem.</B>"
%>
Ta strona wypisze domyślną wartość właściwości, jak to pokazano na rysunku 7.3.
Rysunek 7.3. Wyjście właściwości ScriptTimeout
Możesz również określić wartość właściwości w kodzie zwiększając w ten sposób czas potrzebny na zakończenie jego przetwarzania. Poniższy kod ustala ten maksymalny czas na poziomie 200 sekund:
<%
Server.ScriptTimeout = 200
Response.Write "<B>Ta strona może być uruchamiana przez "
Response.Write Server.ScriptTimeout
Response.Write "sekund przed przeterminowaniem.</B>"
%>
Wyjście tego kodu pokazuje, że wartość się zmieniła, co prezentuje rysunek 7.4. Wartość ta musi być liczbą większą od zera, w przeciwnym wypadku wystąpi stan błędu.
Rysunek 7.4. Wyjście kodu programowo zmieniającego wartość właściwości
Obiekt Server posiada cztery metody, których możesz użyć podczas realizacji rozmaitych zadań. Są one omówione poniżej, a podsumowano je w tabeli 7.2.
Tabela 7.2. Metody obiektu Server
Metoda |
Przeznaczenie |
CreateObject |
Pozwala na tworzenie składników serwera. |
HTMLEncode |
Koduje tekst w formacie HTML. |
MapPath |
Zwraca fizyczną ścieżkę ścieżki wirtualnej bądź względnej. |
URLEncode |
Modyfikuje przekazany tekst tak, że jest on zakodowany w formacie URL. |
Z tą metodą spotkałeś się już wielokrotnie w tej książce. W rzeczywistości bez tej metody strony ASP byłyby tak ograniczone w swojej funkcjonalności, że mało kto chciałby z nich korzystać.
Metoda CreateObject pozwala na tworzenie egzemplarza składnika serwera, co oznacza obiekt znajdujący się na serwerze, zwykle bibliotekę DLL, posiadającą własne obiekty, zbiory, metody, właściwości i zdarzenia. Termin "tworzyć egzemplarz" oznacza możliwość dostępu do składnika serwera poprzez twój kod.
Składniki serwera można podzielić na trzy różne kategorie. Istnieją składniki będące częścią serwera IIS. Takie składniki są specjalnie zaprojektowane tak, aby rozszerzać możliwości pracy ze stronami ASP. Łączą one w sobie składnik możliwości przeglądarki, który dostarcza informacji o przeglądarce wysyłającej żądanie; składnik rotatora ogłoszeń pozwalający umieścić na witrynie paski reklamowe i zarządzać nimi; oraz składnik licznika stron, dzięki któremu można uzyskać informacje o trafnych odpowiedziach.
Drugim typem składników serwera są te, które zwiększają funkcjonalność strony, ale niekoniecznie są zaprojektowane specjalnie na potrzeby stron ASP. Ten typ składników obejmuje Microsoft Word , którego możesz użyć do sformatowania tekstu w formie dokumentu Word; Graph Generator, który tworzy 'w locie' wykres w oparciu o wyjście mogące znajdować się na twojej stronie WWW; oraz zaawansowany program matematyczny dostarczający stronie wyniku obliczeń naukowych.
Ostatnim typem składników serwera będą te, które tworzysz sam. Przyjdzie czas, gdy będziesz potrzebował stworzyć procedurę, której nie możesz wykonać w ramach strony ASP oraz nie znajdującej się na serwerze. Czasami stworzysz taki składnik w celu ominięcia pewnych błędów i niedoborów w stronie ASP. Kolejnym powodem tworzenia własnych składników serwera jest kapsułkowanie, które oznacza umieszczenie kodu w jednym miejscu, a następnie używanie go w wielu innych położeniach; jeśli potem kod musi zostać zmieniony, należy to uczynić tylko w jednym miejscu.
Metoda ma następujący format:
Set MyObject = Server.CreateObject(NameOfAppClass)
Deklarację musisz rozpocząć od kluczowego słowa Set. Jeśli tak nie zrobisz (łatwo o tym zapomnieć), wystąpi błąd, co pokazano na rysunku 7.5.
Rysunek 7.5. Błąd metody CreateObject
Dużym problemem związanym z wystąpieniem tego błędu jest fakt, że wiadomość o błędzie nie jest opisowa. Poza tym nie wystąpi w tym miejscu, gdzie użyłeś instrukcji CreateObject, ale w miejscu pierwszego użycia obiektu poprzez jego metody i właściwości.
W poprzednim przykładzie ukazującym składnię MyObject jest zmienną, która staje się kopią obiektu serwera. Poprzez metodę CreateObject przekazywany jest pojedynczy parametr NameOfAppClass. Ogólnie rzecz biorąc jest on ciągiem zawierającym nazwę serwera i klasę, którą chcesz stworzyć w serwerze. Tak więc forma tego ciągu będzie następująca:
Aplikacja.Klasa
Jeśli na przykład chciałbyś ustanowić połączenie z bazą danych, kod wyglądałby tak:
set
W tym przykładzie nazwą aplikacji serwera jest ADODB. Klasa tworzona nosi nazwę Connection. Ustanawiany obiekt jest umieszczony w zmiennej Conn
Spójrzmy na kolejny przykład:
set MyWord = server.createobject("Word.Application")
Tutaj zmienna MyWord będzie obiektem dostarczonym przez klasę o nazwie Application składnika serwera, jakim jest Word.
Kiedy już stworzysz swój obiekt, możesz zacząć korzystać z jego metod, właściwości i zbiorów. Poniższy przykład pokazuje jak można to zrobić.
<%
Option Explicit
Dim conn
Dim RSEmp
set conn = server.createobject ("adodb.connection")
conn.open "ASPBook", "sa", "yourpassword"
conn.execute "delete from Emps where EmpID = " & Request.Form("EmpID")
set RSEmp = conn.Execute("select * from Emps where EmpID = " _
& Request.Form("NewEmpID"))
Response.Write "<P>" & RSEmp("FirstName")
Response.Write "<P>" & RSEmp("LastName")
set conn = Nothing
set RSEmp = Nothing
%>
Na początku kompilator otrzymuje informację o zamiarze deklarowania naszych zmiennych. Pamiętaj, że pomaga to bardzo podczas usuwania błędów ze stron ASP o dużej objętości:
Option Explicit
Następnie definiujemy dwie zmienne. Jedna z nich zapisuje obiekt połączenia w bazie danych:
Dim conn
Druga będzie przetrzymywała zestaw rekordów wzięty z bazy danych:
Dim RSEmp
Tutaj metoda CreateObject wykorzystana jest do stworzenia obiektu aplikacji ADODB z klasą Connection
set conn = server.createobject ("adodb.connection")
Kiedy już stworzyliśmy połączenie, możemy zacząć z niego korzystać. Tutaj metoda Open obiektu Connection jest używana przy połączeniu z określoną nazwą źródła danych:
conn.open "ASPBook", "sa", "yourpassword"
Następnie metoda Execute obiektu Connection jest używana do usuwania rekordu z bazy danych:
conn.execute "delete from Emps where EmpID = " & Request.Form("EmpID")
W następnym wierszu kodu ponownie korzystamy z metody Execute, ale tym razem zwraca ona kolejny obiekt:
set RSEmp = conn.Execute("select * from Emps where EmpID = " _
& Request.Form("NewEmpID"))
Zmienna RSEmp nie jest tworzona z metodą CreateObject, ale z metodą metody Execute obiektu połączenia. Jednak RSEmp jest obiektem i to obiektem typu Recordset (zestawem rekordów). Typ ten łączy w sobie zbiór Fields, który używany jest do wyszukiwania danych w polach bazy:
Response.Write "<P>" & RSEmp("FirstName")
Response.Write "<P>" & RSEmp("LastName")
Ponieważ użyto tutaj obiektów, które są bardziej złożone od standardowych zmiennych zapamiętujących liczbę lub tekst, korzystamy z większej ilości zasobów. Możesz zwolnić zasoby używane przez obiekt, porównując je do wartości Nothing, jak tutaj:
set conn = Nothing
set RSEmp = Nothing
W następnym przykładzie kodu tworzona jest kopia obiektu CDO (Collaborative Data Object). Ten obiekt wykorzystywany jest do wysyłania wiadomości e-mail poprzez twój kod i pracy z programem Microsoft Exchange.
<%
Option Explicit
Dim objMail
Set objMail = Server.CreateObject("CDONTS.NewMail")
ObjMail.Send "[email protected]", "[email protected]", "Cześć",
"Jak się masz?"
Set objMail = Nothing
%>
Na początku instrukcja deklaracji zmiennych:
Option Explicit
Następnie tworzona jest zmienna przeznaczona do przetrzymywania obiektu e-mail:
Dim objMail
Metoda CreateObject użyta jest w celu stworzenia kopii klasy NewMail serwera CDONTS:
Set objMail = Server.CreateObject("CDONTS.NewMail")
Następnie pojawia się metoda Send obiektu objMail, wysyłająca wiadomość e-mail. Metodzie przekazywane są cztery parametry:
ObjMail.Send "[email protected]", "[email protected]", "Cześć", _
"Jak się masz?"
Później uwalniamy zasoby obiektu:
Set objMail = Nothing
Załóżmy, że twoja strona ASP wyświetlająca pytania quizu sprawdza, czy studenci rozumieją zasady porównania numerycznego. Na przykład chciałbyś wyświetlić pytanie pokazane na rysunku 7.6.
Rysunek 7.6. Przykład strony quizu
Zauważ, że używamy znaków < i >, które oczywiście mają specjalne znaczenie na naszej stronie WWW. Jeśli strona ASP zawierałaby poniższy kod, nie otrzymałbyś pożądanego wyjścia:
<%
Response.Write "Pytanie 1:" & "<P>"
Response.Write "P = 5, B = 8. Używając operatorów <, >, i =" _
& "określ relację pomiędzy liczbami P i B." & "<P>"
Response.Write "A. P<B" & "<P>"
Response.Write "B. P>B" & "<P>"
Response.Write "C. P=B" & "<P>"
%>
Zamiast tego otrzymasz stronę pokazaną na rysunku 7.7. Zauważ, że odpowiedzi nie znajdują się tam, gdzie być powinny. Jest to spowodowane tym, że niektóre fragmenty tekstu zostały zinterpretowane przez przeglądarkę jako znaczniki HTML.
Rysunek 7.7. Nieprawidłowy tekst na stronie quizu
Możesz obejść ten problem stosując metodę HTMLEncode obiektu Server, która ma następującą składnię:
ConvertedText = Server.HTMLEncode(TextToConvert)
Zmienna TextToConvert jest tekstem, który chcesz konwertować. ConvertedText to zakodowany tekst HTML, zwracany przez metodę. Jeśli więc poprawilibyśmy poprzedni kod w taki sposób:
<%
Response.Write "Pytanie 1:" & "<P>"
Response.Write "P = 5, B = 8. Używając operatorów <, >, i =" _
& "określ relację pomiędzy liczbami P i B." & "<P>"
Response.Write Server.HTMLEncode("A. P<B") & "<P>"
Response.Write Server.HTMLEncode("B. P>B") & "<P>"
Response.Write Server.HTMLEncode("C. P=B") & "<P>"
%>
to otrzymalibyśmy pożądane wyjście, ponieważ tekst posiadałby właściwie zakodowane sekwencje HTML, mianowicie:
A. P<B<P>B. P>B<P>C. P=B<P>
Metoda MapPath obiektu Server zamienia wirtualną lub względną ścieżkę widzianą przez serwer WWW na rzeczywistą ścieżkę fizyczną. Metoda przyjmuje następującą formę:
ConvertedPath = Server.MapPath(PathToConvert)
Zmienna PathToConvert jest ścieżką, którą chcesz zamienić, a zmienna ConvertedPath jest ścieżką zamienioną na jej katalog fizyczny.
Na przykład:
<%
Response.Write "Ścieżka do katalogu nadrzędnego: " & "<BR>"
Response.Write Server.MapPath("../") & "<P>" & "<P>"
Response.Write "Ścieżka do katalogu bieżącego: " & "<BR>"
Response.Write Server.MapPath ("./") & "<P>" & "<P>"
Response.Write "Ścieżka do pliku w katalogu bieżącym: " & "<BR>"
Response.Write Server.MapPath ("myfile.txt") & "<P>" & "<P>"
Response.Write "Ścieżka do katalogu głównego: " & "<BR>"
Response.Write Server.MapPath ("/") & "<P>" & "<P>"
%>
Po pierwsze mapowana jest ścieżka do katalogu nadrzędnego:
Response.Write Server.MapPath("../") & "<P>" & "<P>"
Następnie ścieżka do katalogu bieżącego:
Response.Write Server.MapPath ("./") & "<P>" & "<P>"
Później mapujemy plik w katalogu bieżącym:
Response.Write Server.MapPath ("myfile.txt") & "<P>" & "<P>"
Na końcu mapujemy katalog macierzysty serwera:
Response.Write Server.MapPath ("/") & "<P>" & "<P>"
Wyjście kodu prezentuje rysunek 7.8.
Rysunek 7.8. Wyjście metody MapPath
Kiedy przesyłasz formularz metodą Post lub dostarczasz łącza z ciągiem zapytania, tekst w ciągu nie może zawierać w sobie pewnych znaków, ponieważ staje się on częścią łącza.
Możesz na przykład chcieć wyszukać znaczenie zapisu https:// i w tym celu korzystasz z wyszukiwarki. Gdy wpiszesz taki ciąg i naciśniesz przycisk przesłania, ujrzysz rezultaty poszukiwań. Część łącza do wyniku szukania jest twoim zapytaniem. Zauważ, że teraz twój ciąg https:// został zamieniony na:
http%3A%2F%2F
Znak dwukropka zamieniony został na coś, co nie zostanie odrzucone ani nie zaskoczy przeglądarki i serwera. Możesz zrealizować to zadanie manualnie w twoim kodzie przy użyciu metody URLEncode, która ma następującą składnię:
ConvertedText = Server.URLEncode(Text2Convert)
Text2Convert jest tekstem, który chcesz zamienić, a ConvertedText jest wynikiem metody. Za przykład weźmy taki kod:
<%
Response.Write Server.URLEncode("Hello? World!") & "<P>"
Response.Write Server.URLEncode("https://www.whatever.com") & "<P>"
Response.Write Server.URLEncode("Yes, 10% of $20.") & "<P>"
Response.Write Server.URLEncode("';:[]") & "<P>"
%>
Wynik wykonania kodu pokazano na rysunku 7.9.
Rysunek 7.9. Wynik kodu używającego metody URLEncode
W tym podrozdziale zwrócimy uwagę na rozwiązania wykorzystujące obiekt Server i inne obiekty omówione do tej pory. Przykład będzie używał metody CreateObject obiektu Server w celu stworzenia kopii Microsoft Worda umożliwiającej kreowanie własnych dokumentów Word.
W tym przykładzie używamy serwera Microsoft Word w kodzie do wygenerowania dokumentu Word. Gość przekazuje nam określone dane, które wykorzystamy w celu stworzenia dokumentu; ta informacja zostanie połączona z szablonem dokumentu. Następnie dokument dostosowany do potrzeb klienta jest prezentowany gościowi.
Kod wykorzystuje metodę CreateObject do stworzenia kopii Worda. Używa również metody MapPath obiektu Server w celu określenia fizycznego położenia wyjściowego dokumentu Word. Zastosowano także obiekty Request i Response, które wyszukują wejściowe dane gościa i odsyłają go odpowiedniego dokumentu Word.
Zanim przyjrzymy się kodowi, wcześniej zwrócimy uwagę na to, co właściwie ona ma robić. Kiedy goście po raz pierwszy odwiedzają stronę, widzą menu pokazane na rysunku 7.10. Zawiera ona listę wszystkich dostępnych formularzy listów. Jeśli gość wybrał list w sprawie bilansu, zobaczy formularz pokazany na rysunku 7.11.
Rysunek 7.10. Menu wyboru formularza listu
Rysunek 7.11. Formularz listu w sprawie bilansu
Większość pól formularza bilansu odnosi się do zakładek w szablonie Worda, które zaznaczają te miejsca w dokumencie, gdzie znajdą się teksty wpisane w poszczególne pola. Formularz przesyła wprowadzone dane z powrotem do siebie w celu przetworzenia:
<FORM ACTION="./balance_due.asp" METHOD=POST>
Kod sprawdza czy został naciśnięty przycisk Prześlij i na tej podstawie określa, czy należy wyświetlić formularz. Jeśli stwierdzono naciśnięcie przycisku, formularz musi być przesłany.
Kiedy gość naciska przycisk Prześlij, serwer ładuje kopię Worda w celu stworzenia dokumentu. Następnie gość jest readresowany to tego dokumentu gdy tylko jest on ukończony, jak to pokazano na rysunku 7.12. Zwróć uwagę na tekst strony. Zawiera ona dane wprowadzone w poprzednim formularzu. Kod umieszcza je w określonych miejscach dokumentu Word zwanych zakładkami (bookmarks). Odpowiedni szablon tworzysz poprzez menu programu Word, wybierając Wstaw (Insert), a następnie Zakładka (Bookmark) dokładnie w tym miejscu, gdzie ma być wstawione określone pole formularza.
Rysunek 7.12. Wygenerowany list w sprawie bilansu
Jeśli goście wybraliby w menu głównym list w sprawie opóźnienia płatności, ujrzeliby formularz pokazany na rysunku 7.13. Następnie wprowadziliby dane konieczne w tym formularzu w celu wygenerowania dokumentu Word zaprezentowanego na rysunku 7.14.
Rysunek 7.13. Formularz gromadzący dane potrzebne do stworzenia dokumentu Worda w sprawie opóźnienia płatności
Rysunek 7.14. Dokument formatu Word w sprawie opóźnienia płatności
Zauważ, że goście mogą wpisać w pola formularza dowolną treść. Poza tym, ponieważ wyjściowa strona posiada format Worda, goście mogą ją drukować, zapisywać i modyfikować w jakikolwiek sposób. Kod dla strony ASP formularza bilansu określa stan formularza. Jeśli został on przesłany, kod tworzy dokument Word i readresuje gości do miejsca jego położenia.
Główny blok kodowy jest następujący:
<%
Option Explicit
Dim MyWord
Dim Path2File
Dim Path2File1
if not isempty(Request.Form("Submit")) then
set MyWord = Server.Createobject("Word.Application")
MyWord.Application.Documents.Open Server.MapPath("../") _
& "\balancedue.doc"
MyWord.ActiveWindow.Selection.GoTo -1,,, "CurrentDate"
MyWord.ActiveWindow.Selection.TypeText cstr(Date)
MyWord.ActiveWindow.Selection.GoTo -1,,, "CustomersName"
MyWord.ActiveWindow.Selection.TypeText cstr(Request.Form
("CustomersName"))
MyWord.ActiveWindow.Selection.GoTo -1,,, "CustomersAddress"
MyWord.ActiveWindow.Selection.TypeText cstr(Request.Form
("CustomersAddress"))
MyWord.ActiveWindow.Selection.GoTo -1,,, "CustomersCSZ"
MyWord.ActiveWindow.Selection.TypeText cstr(Request.Form
("CustomersCSZ"))
MyWord.ActiveWindow.Selection.GoTo -1,,, "FirstName"
if instr(Request.Form("CustomersName"), " ") > 0 then
MyWord.ActiveWindow.Selection.TypeText _
cstr(left(Request.Form("CustomersName"),instr(Request.Form
("CustomersName"), " ")-1))
else
MyWord.ActiveWindow.Selection.TypeText cstr
(Request.Form("CustomersName"))
end if
MyWord.ActiveWindow.Selection.GoTo -1,,, "CurrentBalance"
MyWord.ActiveWindow.Selection.TypeText cstr(Request.Form("CurrentBalance"))
MyWord.ActiveWindow.Selection.GoTo -1,,, "YourName"
MyWord.ActiveWindow.Selection.TypeText cstr(Request.Form("YourName"))
Path2File1 = Month(Date) & Day(Date) & Year(Date) _
& Hour(Time) & Minute(Time) & Second(Time) & ".doc"
Path2File = Server.MapPath("./") & "\" & Path2File1
MyWord.ActiveDocument.SaveAs Path2File
set MyWord = Nothing
Response.Redirect "./" & Path2File1
end if
%>
Po pierwsze informujemy kompilator o zamiarze deklaracji naszych zmiennych:
Option Explicit
Następnie deklarujemy zmienną przechowującą kopię serwera Word:
Dim MyWord
Dwie inne zmienne zapamiętują informację o nazwie generowanego pliku:
Dim Path2File
Dim Path2File1
Następnie sprawdzamy czy formularz został przesłany. Realizujemy to wyszukując przycisk Prześlij (Submit) w zbiorze Form
if not isempty(Request.Form("Submit")) then
Jeśli przycisk został naciśnięty, musimy stworzyć dokument Word. W tym celu należy ustanowić połączenie z serwerem Word. Metoda CreateObject obiektu Server używana jest do połączenia z Wordem. Zmienna MyWord będzie zawierała naszą kopię serwera:
set MyWord = Server.Createobject("Word.Application")
Następnie metoda Open zbioru Documents, który jest zbiorem obiektu Application, który z kolei jest podobiektem naszego obiektu MyWord, wykorzystywana jest do otwarcia szablonu dokumentu Worda o nazwie balancedue.doc. Zwróć uwagę na metodę MapPath obiektu Server, która wykorzystywana jest podczas określenia fizycznej ścieżki katalogu nadrzędnego:
MyWord.Application.Documents.Open Server.MapPath("../")
& "\balancedue.doc"
Następnie używamy metody Goto w celu znalezienia zakładek w dokumencie Word o nazwie CurrentDate, który właśnie otwarliśmy:
MyWord.ActiveWindow.Selection.GoTo -1,,, "CurrentDate"
Bieżąca data, najpierw zamieniana na ciąg, umieszczana jest w tym miejscu:
MyWord.ActiveWindow.Selection.TypeText cstr(Date)
W następnej kolejności umieszczamy w szablonie dokumentu znacznik CustomersName
MyWord.ActiveWindow.Selection.GoTo -1,,, "CustomersName"
A w tym miejscu umieszczamy pole zbioru Form o nazwie CustomersName przekazane przez gościa w formularzu:
MyWord.ActiveWindow.Selection.TypeText cstr(Request.Form
("CustomersName"))
W podobny sposób postępujemy z polami CustomersAddress i CustomerCSZ
MyWord.ActiveWindow.Selection.GoTo -1,,, "CustomersAddress"
MyWord.ActiveWindow.Selection.TypeText cstr(Request.Form("CustomersAddress"))
MyWord.ActiveWindow.Selection.GoTo -1,,, "CustomersCSZ"
MyWord.ActiveWindow.Selection.TypeText cstr(Request.Form("CustomersCSZ"))
Następnie kod wstawia zakładkę FirstName
MyWord.ActiveWindow.Selection.GoTo -1,,, "FirstName"
W tym miejscu musimy umieścić imię klienta. Dysponujemy jednak imieniem i nazwiskiem klienta. W kodzie zakładamy, że jeśli pomiędzy imieniem i nazwiskiem znajduje się spacja, to wszystko przed nią jest imieniem. Tak więc najpierw musimy sprawdzić, czy znak spacji znalazł się w tym polu:
if instr(Request.Form("CustomersName"), " ") > 0 then
Jeśli w ciągu znaków znalazła się spacja, umieszczamy cały tekst znajdujący po jej lewej stronie w zakładce, używając przy tym metody TypeText obiektu MyWord
MyWord.ActiveWindow.Selection.TypeText _
cstr(left(Request.Form("CustomersName"),_
instr(Request.Form("CustomersName"), " ")-1))
W innym wypadku po prostu umieszczamy w polu imię i nazwisko:
else
MyWord.ActiveWindow.Selection.TypeText cstr(Request.Form
("CustomersName"))
end if
Teraz poprzedni kod jest wykorzystywany ponownie w celu wypisania pól CurrentBalance i YourName
MyWord.ActiveWindow.Selection.GoTo -1,,, "CurrentBalance"
MyWord.ActiveWindow.Selection.TypeText cstr(Request.Form
("CurrentBalance"))
MyWord.ActiveWindow.Selection.GoTo -1,,, "YourName"
MyWord.ActiveWindow.Selection.TypeText cstr(Request.Form("YourName"))
Teraz, kiedy stworzyliśmy już dokument Word, musimy zapisać plik w określonym fizycznym położeniu. Nazwa pliku będzie oparta o bieżącą datę i czas:
Path2File1 = Month(Date) & Day(Date) & Year(Date) _
& Hour(Time) & Minute(Time) & Second(Time) & ".doc"
Ścieżka dostępu do pliku będzie taka sama jak do strony ASP. W celu wyszukania tego położenia korzystamy z metody MapPath
Path2File = Server.MapPath("./") & "\" & Path2File1
Następnie metoda SaveAs zapisuje nowo utworzony plik:
MyWord.ActiveDocument.SaveAs Path2File
Na końcu uwalniamy zasoby używane przez dokument:
set MyWord = Nothing
Następnie gość jest readresowany do miejsca zapisania pliku:
Response.Redirect "./" & Path2File1
Podobny kod użyto dla strony ASP formularza opóźnienia płatności. Główny blok kodowy strony jest taki:
<%
Option Explicit
Dim MyWord
Dim Path2File
Dim Path2File1
if not isempty(Request.Form("Submit")) then
set MyWord = Server.CreateObject("Word.Application")
MyWord.Application.Documents.Open Server.MapPath("../") _
& "\overdue.doc"
MyWord.ActiveWindow.Selection.GoTo -1,,, "CurrentDate"
MyWord.ActiveWindow.Selection.TypeText cstr(Date)
MyWord.ActiveWindow.Selection.GoTo -1,,, "CustomersName"
MyWord.ActiveWindow.Selection.TypeText cstr(Request.Form("CustomersName"))
MyWord.ActiveWindow.Selection.GoTo -1,,, "CustomersAddress"
MyWord.ActiveWindow.Selection.TypeText cstr(Request.Form("CustomersAddress"))
MyWord.ActiveWindow.Selection.GoTo -1,,, "CustomersCSZ"
MyWord.ActiveWindow.Selection.TypeText cstr(Request.Form("CustomersCSZ"))
MyWord.ActiveWindow.Selection.GoTo -1,,, "FirstName"
if instr(Request.Form("CustomersName"), " ") > 0 then
MyWord.ActiveWindow.Selection.TypeText_
cstr(left(Request.Form("CustomersName"),instr(Request.Form
("CustomersName"), " ")-1))
else
MyWord.ActiveWindow.Selection.TypeText cstr
(Request.Form("CustomersName"))
end if
MyWord.ActiveWindow.Selection.GoTo -1,,, "DaysOverDue"
MyWord.ActiveWindow.Selection.TypeText cstr(Request.Form
("DaysOverDue"))
MyWord.ActiveWindow.Selection.GoTo -1,,, "DueDate"
MyWord.ActiveWindow.Selection.TypeText cstr(Request.Form
("DueDate"))
MyWord.ActiveWindow.Selection.GoTo -1,,, "YourName"
MyWord.ActiveWindow.Selection.TypeText cstr(Request.Form
("YourName"))
Path2File1 = Month(Date) & Day(Date) & Year(Date) _
& Hour(Time) & Minute(Time) & Second(Time) & ".doc"
Path2File = Server.MapPath("./") & "\" & Path2File1
MyWord.ActiveDocument.SaveAs Path2File
set MyWord = Nothing
Response.Redirect "./" & Path2File1
end if
%>
Najpierw informujemy kompilator o zamiarze deklarowania naszym zmiennych:
Option Explicit
Następnie deklarujemy zmienną, która będzie przechowywała kopię Worda:
Dim MyWord
Również deklarowane są zmienne zapamiętujące informację o ścieżce dostępu do pliku:
Dim Path2File
Dim Path2File1
Później sprawdzamy przycisk Prześlij (Submit) używając przy tym funkcji IsEmpty, która zwraca prawdę, jeśli pole formularza nie jest częścią zbioru. Operator not określa logikę odwrotną i wyrażenie jest wartością prawdziwą, jeśli pole jest obecne:
if not isempty(Request.Form("Submit")) then
Następnie łączymy się z serwerem Word przy użyciu metody CreateObject
set MyWord = Server.CreateObject("Word.Application")
Teraz używamy metody MapPath w celu wyszukania fizycznej lokalizacji pliku overdue.doc, bazując przy tym na informacji, że znajduje się on w katalogu nadrzędnym tej strony ASP:
MyWord.Application.Documents.Open Server.MapPath("../")
& "\overdue.doc"
Następnie kod używa metody Goto, aby znaleźć w naszym szablonie dokumentu zakładkę o nazwie CurrentDate
MyWord.ActiveWindow.Selection.GoTo -1,,, "CurrentDate"
Używając metody TypeText wstawiamy bieżącą datę w miejscu zakładki:
MyWord.ActiveWindow.Selection.TypeText cstr(Date)
Ta sama procedura przeprowadzana jest dla pól CustomersName CustomersAddress i CustomersCSZ
MyWord.ActiveWindow.Selection.GoTo -1,,, "CustomersName"
MyWord.ActiveWindow.Selection.TypeText cstr(Request.Form("CustomersName"))
MyWord.ActiveWindow.Selection.GoTo -1,,, "CustomersAddress"
MyWord.ActiveWindow.Selection.TypeText cstr(Request.Form("CustomersAddress"))
MyWord.ActiveWindow.Selection.GoTo -1,,, "CustomersCSZ"
MyWord.ActiveWindow.Selection.TypeText cstr(Request.Form("CustomersCSZ"))
Później umieszczamy zakładkę, która zostanie użyta do wstawienia imienia gościa:
MyWord.ActiveWindow.Selection.GoTo -1,,, "FirstName"
Ponieważ dysponujemy jedynie pełnym imieniem i nazwiskiem gościa, jego imię musi być wyodrębnione poprzez wypisanie wszystkich znaków znajdujących się po lewej stronie spacji:
if instr(Request.Form("CustomersName"), " ") > 0 then
MyWord.ActiveWindow.Selection.TypeText_
cstr(left(Request.Form("CustomersName"),instr(Request.Form
("CustomersName"), " ")-1))
else
MyWord.ActiveWindow.Selection.TypeText cstr
(Request.Form("CustomersName"))
end if
Następnie ustalamy kolejne zakładki i wstawiamy ich tekst w oparciu o zbiór formularza przesłany przez odwiedzającego:
MyWord.ActiveWindow.Selection.GoTo -1,,, "DaysOverDue"
MyWord.ActiveWindow.Selection.TypeText cstr(Request.Form
("DaysOverDue"))
MyWord.ActiveWindow.Selection.GoTo -1,,, "DueDate"
MyWord.ActiveWindow.Selection.TypeText cstr(Request.Form
("DueDate"))
MyWord.ActiveWindow.Selection.GoTo -1,,, "YourName"
MyWord.ActiveWindow.Selection.TypeText cstr(Request.Form
("YourName"))
Teraz musimy wymyślić niepowtarzalną nazwę dla dokumentu Worda, ponieważ nie chcemy, aby plik szablonu został podmieniony. Nazwa jest liczbą tworzoną w oparciu o bieżącą datę i godzinę:
Path2File1 = Month(Date) & Day(Date) & Year(Date) _
& Hour(Time) & Minute(Time) & Second(Time) & ".doc"
Ta nazwa pliku będzie wykorzystana w ścieżce do katalogu, w którym znajduje się bieżąca strona ASP. Korzystamy tutaj z metody MapPath
Path2File = Server.MapPath("./") & "\" & Path2File1
Dokument Word jest zapisywany przy użyciu metody SaveAs. Metodzie przekazywana jest nazwa utworzonego wcześniej pliku:
MyWord.ActiveDocument.SaveAs Path2File
Uwalniamy serwer Word:
set MyWord = Nothing
a następnie gość readresowany jest do wygenerowanego dokumentu Word:
Response.Redirect "./" & Path2File1
|