Отображение рассчитаннойсуммы платежа по закладной
Рисунок 22.2. Отображение рассчитаннойсуммы платежа по закладной
Приглашение пользователюна ввод данных по закладной
Рисунок 22.1. Приглашение пользователюна ввод данных по закладной
Рассмотрение файла сценария 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 рассчитывает и отображает сумму закладной.