Пособие по написанию WAP сайтов

         

Пособие по написанию WAP сайтов



ГЛАВА 22

Рассмотрение приложения MortgageScript.wml
Рассмотрение файла сценария MortgageScript.wmls

В Главе 13 вы создали из WML-карт и Peri-сценария приложение, позволяющееопределять и отображать сумму закладной после ввода данных по основной сумме кредита, процентной ставке и количеству лет. В данной главе вы модифицируете приложение так, чтобы вместо Peri-сценария использовать WMLScript.Имейте в виду, что WMLScript не имеет эквивалента для HDML, поэтому, чтобы создать на HDML приложение для расчета закладной, вы, по-прежнему, должны будете использовать Perl. При первоначальном запуске приложения сотовый телефонпользователя отображает приглашение на ввод основной суммы кредита, процентной ставки и количества лет, как это показано на Рис. 22.1. После вводапользователем информации по закладной, приложение MortgageScript отображаетсумму соответствующего платежа, как показано на Рис. 22.2.



В настоящее время приложения, написанные на языке сценариевWMLScript, можно только просматривать, причем для этого необходимо использовать самые последние версии некоторых пакетов инструментального программного обеспечения (SDK) дляразработки WAP-приложенип, аналогичных SDK, который выможете загрузить с Web-cauma www.openwave.com. Пока вСША не существует сотовых телефонов с поддержкойWMLScript. Если вы скачаете и установите SDK, поддерживающий WMLScript, то, чтобы проверить работу приложенияMortgageScript, необходимо будет набрать в качестве URLwaplib. com/MortgageScript/MortgageScript. wml.






Рассмотрение файла сценария MortgageScript.wmls





Рассмотрение файла сценария MortgageScript.wmls


Как обсуждалось выше, основная часть обработки данных, выполняемой приложением MortgageScript, реализуется с помощью функций, находящихся вWMLScript-файле. Например, когда пользователь вводит данные для некоторогоконкретного поля, такого, как процентная ставка, приложение активизирует всценарии функцию, которая выводит приглашение пользователю на ввод данных. Сценарий MortgageCaJe.wmls реализуется с помощью следующего программного кода:
extern function GetPrincipal()
{
var Principal = WMLBrowser.getVar("Principal"); Principal = Dialogs.prompt("Enter Principal: $", Principal);


WMLBrowser.setVar("Principal", Principal);
}
extern function GetInterest()
{
var Interest = WMLBrowser.getVar("Interest"); Interest = Dialogs.prompt("Enter Interest %", Interest);
WMLBrowser.setVar("Interest", Interest);
}
extern function GetYears()
{
var Years = WMLBrowser.getVar("Years"); Years = Dialogs.prompt("Enter Years", Years);
WMLBrowser.setVar("Years", Years);
}
extern function CalcPayments()
{
var Principal = WMLBrowser.getVar("Principal"); var Interest = WMLBrowser.getVar("Interest"); var Years = WMLBrowser.getVar("Years");
var MonthInt = (Lang.parseFloat(Interest) / 12) / 100;
var Months = Lang.parseInt(Years) * 12;
var Payment = Lang.parseInt(Principal) * (MonthInt / (1 - (Float.pow((1 + MonthInt), -Months)))); Payment = String.format("%6.2f", Payment);
WMLBrowser.setVar("Payment", Payment); WMLBrowser.go("MortgageScript.wml#MortgageCalc");
}
}


Как вы уже знаете, в настоящее время WMLScript-код необходимо размещать в отдельном файле и предварять имя каждой функции ключевым словом extern. Каждая из функций GetPrincipal, Getlnterest и GetYears выполняет сходную обработку. Они выделяют переменную для хранения значения, вызывают функциюString. dialog для отображения приглашения пользователю на ввод данногозначения, затем активизируют функцию WMLBrowser.setVar, чтобы сделать переменную видимой для всего программного кода приложения.


Для расчета закладной функция CalcPayments вызывает функцию WMLBrowser.getVar, чтобы получить значения для переменных Principal,Interest и Years. Затем программа преобразует ежегодный процент по кредиту(в формате 7.75) в ежемесячный процент. Процентная ставка в результате деления на 100 переводится в десятичный формат (0.0775). Далее программа рассчитывает платеж по закладной, форматирует полученную сумму для вывода и использует функцию WMLBrowser. setvar, чтобы сделать переменную платежа видимой для всего программного кода приложения. Так как приложение вызываетфункцию CalcPayments посредством элемента <до>, а не с помощью элемента<а>, то для возврата в основное приложение, в программном коде необходимоиспользовать функцию WMLBrowser. go.





Рассмотрение приложения MortgageScript.wml





Рассмотрение приложения MortgageScript.wml


При запуске приложения MortgageScript, WML-страница MortgageScript.wml выводит на экран приглашение пользователю на ввод основной суммы кредита, процентной ставки и количества лет. Внутри WML-страницы приложение реализуеткаждое поле ввода в виде ссылки на функцию, находящуюся в WMLScript-файле.Когда пользователь выбирает какую-либо ссылку, приложение вызывает функцию, которая, в свою очередь, выводит приглашение пользователю на ввод соответствующих данных.


После ввода пользователем данных и выбора кнопки Calc (Расчет) приложениеактивизирует находящуюся в WMLScript-файле функцию CalcPayments, котораявыполняет расчет и выводит на экран сумму закладной. WML-страницаMortgageCalc.wml реализуется с помощью следующего программного кода:
<?xml version="1.0"?> <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<head>
<meta http-equiv="Cache-Control" content="max-age=0" forua="true"/>
</head>
<card id="MortgageCalc">
<do type="accept" label="Edit"> <noop /> </do>
<do type="options" label="Calc"> <go href="MortgageScript.wmls#CalcPayments()" /> </do>
<p align="center">
Mortgage Calculator<br/>
</p>
<p align="left" mode="nowrap">
<a href="MortgageScript.wmls#GetPrincipal()" title="Edit">Principal: $$$(Principal)</a> <a href="MortgageScript.wmls#GetInterest()" title="Edit">Interest(%): $(Interest)</a> <a href="MortgageScript.wmls#GetYears()" title="Edit">Years: $(Years)</a><br/> Payment: $$$(Payment)
</p>
</card>
</wml>
Первые два элемента WML-страницы сообщают WAP-браузерам версию WAP-спецификации, которую поддерживает приложение. В данном случае WML-страница совместима с XML 1.0 и описанием типа документа (DTD) версии 1.1,разработанным ассоциацией WAP Forum. Любая WML-страница, размещаемаяпосле информации о версии, начинается с тега <WML>. В конце каждой WML-страницы должен находиться соответствующий тег </WML>, который завершаетэлементы WML-страницы. Теги <HEAD> и </НЕМ», располагающиеся после тега<WML>, позволяют указывать данные о WML-странице, включая метаданные и информацию, управляющую доступом.
Элемент <meta> позволяет определять для WML-страницы метаинформацию. В нашем случае параметр http-equiv=Cache-Control сообщает WAP-браузеру, что данная часть метаинформации относится к системе кэширования памяти. Аналогично, параметр content=max-age=0 сообщает браузеру, что максимальное время, втечение которого должно выполняться кэширование WML-страницы, равно нулюсекунд; то есть, браузер должен не запоминать, а повторно загружать данные с сервера каждый раз, когда поступает запрос. Для данной книги нулевое значение быловыбрано, чтобы помочь читателю в разработке программы. При выборе нулевогозначения каждый раз, когда происходит изменение, это изменение передается нателефон. В реально эксплуатируемом приложении статическое меню, подобноерассматриваемому здесь, по-видимому, должно использовать интервал хранения,установленный по умолчанию, равным 30 дням. Наконец, параметр forua="true"определяет, что данное значение Cache-Control предназначено для телефонами недолжно удаляться каким-либо промежуточным агентом.
Обработка, выполняемая WML-страницей, на самом деле достаточно прямолинейна - большая часть работы реализуется программным кодом на WMLScript. Если вы просмотрите WML-страницу, то обнаружите, что в ней имеется много ссылок, подобных приводимой ниже. Эта ссылка активизирует функцию, находящуюся в отдельном WMLScript-файле:
<go href="MortgageScript.wmls#CalcPayments()" />
В данном случае элемент отдает браузеру команду выполнить ветвление и перейти к функции CalcPayments, находящейся в файле MortgageScript.wmls. После того как функция выполнит обработку, для которой она предназначена, управлениевозвращается в текущее место программного кода. Как уже упоминалось ранее,функция CalcPayments рассчитывает и отображает сумму закладной.



Приглашение пользователюна ввод данных по закладной



Рис.. 22.1. Приглашение пользователюна ввод данных по закладной





Отображение рассчитаннойсуммы платежа по закладной



Рис.. 22.2. Отображение рассчитаннойсуммы платежа по закладной