Занятие 2. Создание клиентских сценариев средствами Microsoft VBScript
(Продолжительность занятия 60 минут)
Язык VBScript — оптимизированная для работы в Интернете версия популярного языка программирования Visual Basic for Applications. Этот высокопроизводительный язык разработки сценариев предназначен для создания активных Web-страниц. Средствами VBScript Вы можете связывать и автоматизировать множество объектов на Web-страницах, включая Java-апплеты и элементы управления ActiveX. На этом занятии Вы узнаете, как применять VBScript для построения клиентских сценариев.
Синтаксис языка VBScript
Язык VBScript применяют для обращения к свойствам и методам элементов управления ActiveX и Java-апплетов, расположенных на HTML-странице.
Синтаксисы VBScript и Visual Basic for Applications идентичны. Однако VBScript учитывает необходимость быстрой загрузки страниц по Интернету, поэтому поддержка многих элементов (как языковых, так и времени выполнения) Visual Basic for Applications не включена в VBScript. Кроме того, некоторые элементы языка — например, средства работы с файлами — изъяты по соображениям безопасности.
Встроенные функции Visual Basic
VBScript поддерживает некоторые встроенные функции Visual Basic, включая Msg-box, Date и IsNumeric.
If IsNumeric(Var) Then
MsgBox "Var is a number."
End If
Некоторые функции в VBScript реализованы иначе. Например, функция Visual Basic Format — в VBScript в виде четырех различных версии:
Определение процедур
В VBScript имеется два вида процедур: подпрограммы и процедуры-функции. Как и весь код сценария, процедуры должны располагаться внутри тэга <SCRIPT>, чтобы интерпретатор сценария и другие процедуры в составе HTML-страницы могли их распознать.
Подпрограммы
Подпрограмма — это последовательность выражений VBScript, заключенных между операторами Sub и End Sub. Она выполняет действия, но не возвращает значения. У подпрограммы могут быть аргументы (константы, переменные или выражения), передаваемые ей вызывающей процедурой.
Sub IncreaseSales(NumSales)
Sales = Sales + NumSales
End Sub
Чтобы вызвать подпрограмму из другой процедуры, укажите ее имя и значения всех необходимых аргументов, разделяя их запятыми. Оператор Call не обязателен, но если Вы применяете его, заключите аргументы подпрограммы в скобки:
IncreaseSales 100
-или-
Call IncreaseSales(IOO)
Процедуры-функции
Процедура-функция — это последовательность выражений VBScript, заключенных между операторами Function и End Function. Процедуры-функции аналогичны подпрограммам, но, в отличие от них, способны возвращать значение. Процедура-функция может принимать аргументы (константы, переменные или выражения), передаваемые ей вызывающей процедурой. Если она не имеет аргументов, определяющий ее оператор Function должен содержать пустые скобки. Процедуpa-функция возвращает значение, присваивая его своему имени в одном или нескольких операторах. Тип возвращаемого значения — всегда Variant.
Function Validate(myDate)
If IsDate(myDate)
Then Validate = True
Else Validate = False
End If
End Function
'Событийная процедура, вызываемая при нажатии пользователем кнопки cmdTest
Sub cmdTestDate_OnClick()
Results = Validate(myDate)
End Sub
Теперь Вы создадите Web-страницу, с которой мы будем работать в следующих упражнениях этого занятия.
> Создание Web-узла в Microsoft Frontpage 98
> Редактирование главной страницы
> Добавление сценария VBScript к главной странице
Function SquareIt(Num)
Squarelt = (Num * Num)
End Function
Dim Result
On Error Resume Next
Result = SquareIt(T1.Value)
MsgBox T1.Value & " в квадрате = " & Result
> Проверка
Введенное число будет обработано созданной Вами функцией Squarelt, а результат работы функции появится в окне сообщений.
Использование переменных
Как и Visual Basic, VBScript поддерживает использование переменных, а кроме того, — типы данных, область видимости и константы. Переменная — это удобная метка, обозначающая область в памяти компьютера, где Вы можете хранить информацию во время работы сценария. Например, созданная Вами переменная ClickCount покажет, сколько раз пользователь щелкнул объект на данной Web-странице. Где именно в памяти хранится переменная, неважно; имеет значение лишь то, что, обратившись к ней по имени. Вы можете узнать или изменить ее значение.
Типы данных
VBScript поддерживает только тип Variant, содержащий данные различных типов:
строки, числа и т.д. Вообще говоря, Вы вправе хранить в переменной типа Variant любые данные, и они будут выглядеть так, как нужно. Определить тип данных в переменной можно средствами функции VarType.
Чтобы объявить переменную в VBScript, пользуйтесь оператором Dim.
Dim myName
Массивы
VBScript поддерживает и массивы. Все они в VBScript индексируются начиная с нуля, то есть индекс первого элемента любого массива — ноль.
Dim Students(10)
Константы
Константы в VBScript объявляются оператором Const. Вы можете создавать строковые или числовые константы с описательными именами и присваивать им литеральные значения.
Const MYSTRING = "Моя строка" Const MYAGE = 37
Область видимости данных
Область видимости — это часть Web-страницы, в пределах которой можно обращаться к данной переменной. В VBScript используются две области видимости:
локальная и уровня сценария.
Если Вы объявили переменную в процедуре, она имеет локальную область видимости и доступна только внутри данной процедуры. Когда процедура завершается, переменная выходит из области видимости.
Если переменная объявлена вне процедуры, она доступна всем процедурам на Web-странице или, другими словами, имеет область видимости уровня сценария. Такие переменные доступны все время, пока Web-страница отображается в программе просмотра.
Когда переменная объявляется на уровне сценария, она дополнительно может быть объявлена открытой (ключевым словом Public) или закрытой (Private). Переменные, объявленные с помощью ключевого слова Public, доступны всем процедурам всех сценариев страницы. Закрытые переменные доступны только в рамках сценария, где они объявлены. Переменные, объявленные оператором Dim на уровне сценария, доступны всем его процедурам; переменные, объявленные на уровне процедуры, доступны только в ней.
Средствами операторов Dim, Public и Private с пустыми круглыми скобками можно объявить динамические массивы. Фактическая размерность и длина динамического массива в процедуре задается оператором ReDim. Если Вы попытаетесь изменить размерность массива, размер которого явно указан в операторе Private, Public или Dim, возникнет ошибка.
Синтаксис При объявлении переменных используется следующий синтаксис:
Dim имя_переменной[([размерности])]
Public имя_переменной[([размерности])]
Private имя_переменной[([размерности])]
<SCRIPT>
Public X
Private Y
MySub()
Dim Z
End Sub
</SCRIPT>
> Использование переменных в VBScript
Option Explicit
Private Y
Sub SetValues()
Dim X
X = 1
Y = 1
End Sub Sub Ch'angeValuesAgain( )
X = 1
Y = 1
End Sub
SetValues
ChangeValuesAgain
Вы получите сообщение об ошибке, гласящее, что переменная Х не определена. Это произошло потому, что Х действительна только в подпрограмме SetValues, где она была объявлена оператором Dim. Переменная Y же находится в области видимости, так как она была объявлена оператором Private вне процедуры.
Dim X
Обратите внимание, что ошибка не возникает: теперь Х находится в области видимости благодаря оператору Dim, который Вы только что добавили в подпрограмму ChangeValuesAgain.
Управление работой сценария
Для управления ходом выполнения сценария пользуйтесь соответствующими операторами Visual Basic.
VBScript поддерживает большую часть структур Visual Basic for Applications для управления работой программы.
Структуры для организации циклов
Циклы позволяют запускать часть кода сценария более одного раза; цикл завершается при выполнении условия, определяемого состоянием переменной цикла или введенной пользователем информацией. В VBScript 2.0 имеется несколько операторов цикла.
Оператор |
Назначение |
Do... Loop |
Выполняет цикл, пока условие истинно либо пока оно не станет истинным |
While...Wend |
Выполняет цикл, пока условие истинно |
For... Next |
С помощью счетчика выполняет набор операторов заданное число раз |
Dim x(10)
For i = 1 to 10
x(i) = i * 10 Next
Условное ветвление
Операторы условного ветвления определяют, будет ли выполняться данный фрагмент сценария и при каких условиях. Например, проверяется состояние переменных или введенная пользователем информация. Операторы условного ветвления отличаются от операторов циклов тем, что фрагмент сценария при условном ветвлении может выполняться не более одного раза. В VBScript 2.0 имеется несколько операторов условного ветвления.
Оператор |
Назначение |
If...Then |
Выполняет один из двух фрагментов кода в зависимости от того, истинно или ложно выражение |
Select...Case |
Выполняет один из фрагментов кода в зависимости от значения переменной |
Вы можете использовать выражение с оператором If... Then... Else, чтобы выяснить истинность или ложность условия и, в зависимости от результата, выполнить один из двух фрагментов кода.
If Sales > 100000 Then
Bonus =.10
Elself Sales > 50000 Then
Bonus =.05
Else
Bonus =.02
End If
VBScript 2.0 теперь поддерживает оператор Select...Case, который полезен, когда переменная-условие имеет больше двух значений. Хотя и в этом случае можно обойтись оператором If...Then, Select...Case проще и удобнее.
Select Case Sales
Case 100000
Bonus =.1
Case 50000, 75000
Bonus =.05
Case Else
Bonus =.02
End Select
> Использование конструкции Select Case в VBScript
Dim Result
On Error Resume Next
Result = SquareIt(T1.Value)
Select Case Result
Case 1,2,3
MsgBox "Между 1 и 3"
Case 4,5,6
MsgBox "Между 4 и 6"
Case 7,8,9
MsgBox "Между 7 и 9"
Case Else
MsgBox "Результат вне диапазона."
End Select
MsgBox T1.Value & " в квадрате = " & Result
Обратите внимание на различие результатов: при вводе чисел от 1 до 3 появляется сообщение об интервале, а любое другое числа вызывает выполнение блока Case Else.
Обработка ошибок
В Web-страницу, как и в обычное приложение Visual Basic, можно включить сценарий обработки ошибок.
Оператор On Error
Вы вправе изменить стандартный механизм обработки ошибок на Web-странице, добавив в начало сценария оператор On Error Resume Next. Он указывает программе просмотра (например, Internet Explorer) на необходимость продолжать выполнение сценария. Этим оператором нужно снабдить каждую процедуру, в которую Вы хотите включить обработку ошибок.
При возникновении ошибки Internet Explorer сохраняет информацию о ней в объекте Err. Данные о следующей ошибке заносятся в тот же объект Err, сведения же о предыдущей ошибке при этом теряются.
Чтобы отключить обработку ошибок, используйте оператор On Error GoTo 0. Internet Explorer вернется к стандартной процедуре обработке ошибок и будет сообщать о них пользователю.
Объект Err
Чтобы обнаружить ошибки времени выполнения, проверяйте свойство Number объекта Err после каждого оператора, который может их вызвать. Если значение свойства Number равно нулю, ошибки нет; ненулевое значение свидетельствует о ее возникновении.
Чтобы получить информацию об ошибке, обратитесь к свойству Description. Когда возникает ошибка, объект Err хранит информацию о ней до тех пор, пока не появится следующая. При успешном выполнении выражения объект Err не очищается, поэтому после возникновения ошибки нужно уничтожить информацию о ней, вызвав метод Clear объекта Err.
Sub cmdSubmit_OnClick
On Error Resume Next
'Выражение, которое может вызвать ошибку
If Err <> 0 Then
Msgbox "Произошла ошибка. " & Err.Description
Err.Clear
End if
End Sub
Чтобы проверить Ваш код обработки ошибок, можете специально создать ошибочную ситуацию средствами метода Raise объекта Err.
VBScript использует не все возможные номера для идентификации ошибок. Если Вы хотите поверить собственный код, начните нумерацию ошибок в нем с 65535 (максимально допустимое значение) с последующим уменьшением номеров.
Err.Raise 65000
Управление объектами на VBScript
Сценарии позволяют управлять объектами и реагировать на события (рис. 9.2). Прежде чем создать такой сценарий, необходимо идентифицировать объекты на Web-странице, например встроенные элементы управления в формах: кнопки, текстовые поля и т.п. Кроме объектов в формах, на странице могут находиться элементы управления ActiveX и Java-апплеты.
Рис.9.2 Объекты на Web-странице, которыми можно управлять средствами VBScript
Идентификация объектов
Чтобы воспользоваться объектом в сценарии клиентской части, сначала постройте объект, а затем присвойте ему имя для создания событийных процедур и для обращения к свойствам и методам объекта. Синтаксис присвоения имени зависит от типа объекта.
Стандартные элементы управления HTML
Чтобы присвоить имя стандартному элементу управления HTML, достаточно присвоить значение атрибуту NAME.
<INPUT TYPE="BUTTON" NAME="cmdValidateOrder" VALUE="Validate Order">
Элементы управления ActiveX
Чтобы присвоить имя элементу управления ActiveX, Вы устанавливаете атрибут ID тэга <OBJECT>.
<OBJECT
classid="clsid:99B42120-6EC7-11CF-A6C7-OOAAOOA47DD2"
id=lbl0ccupation>
</OBJECT>
Java-апплеты
Чтобы присвоить имя Java-апплету, нужно установить атрибут NAME тэга <APPLET>.
\ <APPLET
CODE=Outline.class
NAME=myoutline
HEIGHT=150
WIDTH=200>
</APPLET>
Создание событийных процедур
Создав объекты на Web-странице и присвоив им имена, Вы можете создать событийные процедуры. Сценарий, находящийся в событийной процедуре, запускается при возникновении соответствующего события.
Стандартные события
Все типы объектов распознают набор стандартных событий, куда входят щелчок мышью элемента управления, ввод текста в элемент управления и перемещение курсора по элементу управления.
Элементы управления ActiveX и Java-апплеты на Web-странице поддерживают те же события, что и в других средах, например в Visual Basic или Visual J++.
Создание событийной процедуры
Событийную процедуру для объекта можно создать несколькими способами.
Присвоить процедуре имя ИмяОбъекта_Событие
Если Вы дадите процедуре имя типа ИмяОбъекта_Событие, она будет автоматически запускаться при возникновении указанного события для данного объекта. Это — та же система именования, что и для создания событийных процедур в Visual Basic.
Sub Button1_OnClick ()
End Sub
Создать отдельный раздел <SCRIPT>
Вы можете создать отдельный раздел <SCRIPT> для сценариев, запускаемых при возникновении определенных событий для выбранного элемента управления.
<SCRIPT LANGUAGE="VBScript" FOR="Calendar1" EVENT="Click()">
<! -
MsgBox("Привет!")
</SCRIPT>
Этот способ создания событийных процедур элементов управления ActiveX и стандартных элементов управления HTML подходит как для JavaScript, так и для VBScript.
Назначить событийную процедуру при создании объекта
В тэге HTML, создающем объект, можно указать имя события и процедуру, вызываемую при его возникновении. Раздел <SCRIPT> с объявлением процедуры должен находиться перед тэгом HTML, определяющим объект.
Этот метод полезен, если Вы хотите, чтобы события нескольких объектов вызывали одну и ту же процедуру. Его средствами Вы можете связать событийные процедуры со стандартными элементами управления HTML.
<SCRIPT LANGUAGE=VBScript>
Sub ProcessOrder ()
...
End Sub
</SCRIPT>
<INPUT TYPE=RADIO NAME=RadioGroup onClick="ProcessOrder">
Этот метод поддерживают как VBScript, так и JavaScript.
Включить сценарий в тэг HTML
Имя события и сценарий, выполняемый при возникновении этого события, можно включить в тэг HTML, создающий объект. Этим методом удобно связывать событийные процедуры со стандартными элементами управления HTML.
<INPUT LANGUAGE="VBScript" TYPE=button Value="hello"
onClick ="MsgBox 'Привет всем!'">
Разработка событийных процедур
В этом упражнении Вы создадите код VBScript для подсчета общей стоимости товаров, выбранных в таблице Product.
Вы расширите функциональные возможности Web-страницы списка товаров Products.htm (воспользуйтесь оригиналом, находящимся в папке WA\Practice\Ch09).
> Добавление тэгов SCRIPT в Web-страницу Products
Function TotalIt()
Dim price
On Error Resume Next
price = txtQ1.Text * 2.99
price = price + txtQ2.Text * 75.59
price = price + txtQ3.Text * 1.75
price = price + txtQ4.Text * 7.99
price = price + txtQ5.Text * 4.99
Totallt = price
End Function
> Применение мастера создания сценариев
IblTotal.Caption = TotalItO
Элементы управления для изменения значений пока не содержат сценарного кода, поэтому значения приходится вводить вручную.
> Добавление событийной процедуры для элементов управления
txtql.text = txtql.text + 1
If txtql.text > 0 Then txtql.text = txtql.text - 1
Возможно, Вам придется нажать кнопку Refresh для перезагрузки страницы.
Использование свойств и методов элементов управления
Обращение к свойствам и вызов методов — самые частые задачи, выполняемые событийными процедурами объектов.
Обращение к свойствам
Синтаксис Для установки значения свойства применяется следующий синтаксис:
Объект.Свойство = Значение
Синтаксис Для извлечения значения свойства применяется синтаксис:
Значение = Объект.Свойство
стоимость доставки в этот день и результат отображается в стандартном текстовом
поле HTML:
Sub ShipDate_Click()
Dim shiptime
shiptime = ShipDate.Value - Date ,
If shiptime < 0 Then
MsgBox "Невозможно доставить задним числом"
Elself shiptime < 5 Then
frmShip.txtCost.Value = 12
Else
frmShip.txtCost.Value = 8
End If
End Sub
Вызов методов
Синтаксис Методы в сценарии вызываются точно так же, как и в Visual Basic:
[Call] Объект.Метод
Пример Этот пример вызывает метод Today элемента управления Calendar, когда пользователь нажимает кнопку Reset:
Sub Reset_OnClick()
call ShipDate.Today()
End Sub
Ключевое слово Call здесь необязательно; если Вы все же воспользовались им, заключите аргументы в круглые скобки.
Резюме
Microsoft VBScript — это оптимизированная для работы в Интернете версия Microsoft Visual Basic. Синтаксис VBScript идентичен синтаксису Visual Basic for Applications, однако VBScript может быстро загружать сценарии по Интернету. VBScript поддерживает большинство встроенных функций Visual Basic, например Msgbox, Date и IsNumeric.
VBScript позволяет устанавливать значения свойств и вызывать методы элементов управления ActiveX и Java-апплетов на HTML-странице. VBScript поддерживает подпрограммы и процедуры-функции, а также переменные, типизацию данных, массивы, область видимости и константы. Коме того, VBScript содержит большинство управляющих структур Visual Basic for Applications. Как и в традиционных приложениях Visual Basic, Microsoft VBScript позволяет включить в Web-страницу сценарии обработки ошибок, а также управлять объектами и реагировать на события.