Книга: Windows Script Host для Windows 2000/XP

Окончательная доработка сценария IEPhoneBook.js

Окончательная доработка сценария IEPhoneBook.js

Выше были описаны все основные функции, которые используются для работы с записной книжкой в диалоговом режиме. Осталось лишь собрать эти функции в один JScript-сценарий IEPhoneBook.js, определить глобальные переменные и добавить вспомогательные функции GetTagVal(obj, tgName) и SetTagVal(obj, tgName, sVal) для доступа к значениям XML-элементов (листинг 7.13).

Листинг 7.13. Функция для доступа к значениям XML-элементов

//Определение значения тега tgName XML-элемента obj
function GetTagVal(obj, tgName) {
 var ElemList;
 //Создаем коллекцию дочерних для obj элементов, которые
 //задаются тегом tgName
 ElemList=obj.getElementsByTagName(tgName);
 //Проверяем, есть ли в коллекции ElemList элементы
 if (ElemList.length>0)
  //Возвращаем значение тега tgName
  return ElemList.item(0).text
 else return "";
}
//Изменение значения тега tgName XML-элемента obj
function SetTagVal(obj, tgName, sVal) {
 var ElemList,New;
 //Создаем коллекцию дочерних для obj элементов, которые
 //задаются тегом tgName
 ElemList=obj.getElementsByTagName(tgName);
 //Проверяем, есть ли в коллекции ElemList элементы
 if (ElemList.length>0)
  //Устанавливаем значение элемента, задаваемого
  //тегом tgName
  ElemList.item(0).text=sVal;
 else {
  //Создаем новый элемент с именем tgName
  NewElem=XML.createElement(tgName);
  //Добавляем новый элемент в качестве дочернего для
  //элемента obj
  obj.appendChild(NewElem);
  //Устанавливаем значение добавленного элемента
  obj.lastChild.text=sVal;
 }
}

Полный текст сценария IEPhoneBook.js приведен в листинге 7.14.

Листинг 7.14. Сценарий IEPhoneBook.js

/*******************************************************************/
/* Имя: IEPhoneBook.js                                             */
/* Язык: JScript                                                   */
/* Описание: Сценарий для работы с записной книжкой                */
/*           (графический интерфейс пользователя на основе         */
/*           HTML-формы).                                          */
/*******************************************************************/
//Объявляем глобальные переменные
var
 WshShell,
 PathBook,       //Путь к файлу с данными
 PathHTML,       //Путь к HTML-файлу с формой
 XML,            //Экземпляр объекта XML DOM
 ie,             //Экземпляр объекта InternetExplorer.Application
 doc,            //Экземпляр объекта Document
 IsQuit,         //Признак выхода из сценария
 objListPersons; //Экземпляр объекта ListPersons
//Инициализируем константы для диалоговых окон
var vbInformation=64,vbOkOnly=0;
//Построение путей к файлам
function InitPath() {
 BasePath=WshShell.CurrentDirectory+"";
 //Путь к файлу с данными
 PathBook=BasePath+"book.xml";
 //Путь к файлу с HTML-формой
 PathHTML=BasePath+"Phone.htm";
}
//Определение значения тега tgName XML-элемента obj
function GetTagVal(obj, tgName) {
 var ElemList;
 //Создаем коллекцию дочерних для obj элементов, которые
 //задаются тегом tgName
 ElemList=obj.getElementsByTagName(tgName);
 //Проверяем, есть ли в коллекции ElemList элементы
 if (ElemList.length>0)
  //Возвращаем значение тега tgName
  return ElemList.item(0).text
 else return "";
}
//Изменение значения тега tgName XML-элемента obj
function SetTagVal(obj, tgName, sVal) {
 var ElemList,New;
 //Создаем коллекцию дочерних для obj элементов, которые
 //задаются тегом tgName
 ElemList=obj.getElementsByTagName(tgName);
 //Проверяем, есть ли в коллекции ElemList элементы
 if (ElemList.length>0)
  //Устанавливаем значениеэлемента, задаваемого
  //тегом tgName
  ElemList.item(0).text=sVal;
 else {
  //Создаем новый элемент с именем tgName
  NewElem=XML.createElement(tgName);
  //Добавляем новый элемент в качестве дочернего для
  //элемента obj
  obj.appendChild(NewElem);
  //Устанавливаем значение добавленного элемента
  obj.lastChild.text=sVal;
 }
}
//Конструктор объекта Person
function Person() {
 //Инициализируем свойства объекта
 this.LastName="";
 this.Name="";
 this.Phone="";
 this.Street="";
 this.House="";
 this.App="";
 this.Note="";
 //Устанавливаем для метода LoadDialog указатель на
 //функцию Person_LoadDialog
 this.LoadDialog=Person_LoadDialog;
}
//Заполнение полей в форме для текущей записи
function Person_LoadDialog() {
 //Заполняем поля ввода в форме значениями соответствующих
 //свойств объекта Person
 doc.all.txtLastName.value = this.LastName;
 doc.all.txtName.value=this.Name;
 doc.all.txtPhone.value=this.Phone;
 doc.all.txtStreet.value=this.Street;
 doc.all.txtHouse.value=this.House;
 doc.all.txtApp.value = this.App;
 doc.all.txtNote.value = this.Note;
}
//Конструктор объекта ListPersons
function ListPersons() {
 //          Свойства объекта
 //Создаем массив PersonArr экземпляров объекта Person
 this.PersonArr = new Array();
 //Инициализируем номер текущей записи
 this.CurRecord = 0;
 //Сбрасываем признак изменения данных в форме
 this.IsChanged = false;
 //          Методы объекта
 //Устанавливаем для методов указатели на соответствующие функции
 this.FileToArray=ListPersons_FileToArray;
 this.SaveData=ListPersons_SaveData;
 this.LoadDialog=ListPersons_LoadDialog;
 this.RefreshDialog=ListPersons_RefreshDialog;
 this.NextRecord=ListPersons_NextRecord;
 this.PreviousRecord=ListPersons_PreviousRecord;
 this.FirstRecord=ListPersons_FirstRecord;
 this.FinalRecord=ListPersons_FinalRecord;
 this.NewRecord=ListPersons_NewRecord;
 this.DelRecord = ListPersons_DelRecord;
}
//Считывание данных из XML-файла в массив объектов Person
function ListPersons_FileToArray() {
 var Root,CurrNode,i;
 //Создаем объект XML DOM
 XML = WScript.CreateObject("Msxml.DOMDocument");
 //Загружаем XML-документ из файла
 XML.load(PathBook);
 //Сохраняем в переменной Root ссылку на корневой элемент
 //документа
 Root=XML.documentElement;
 //Обнуляем массив PersonArr
 this.PersonArr.length=0;
 //Перебираем все дочерние элементы первого уровня вложенности
 //для корневого элемента
 for (i=1; i<=Root.childNodes.length-1;i++) {
  //Выделяем в коллекции XML-элементов i-й элемент
  CurrNode=Root.childNodes.item(i);
  //Создаем новый экземпляр PersonRec объекта Person
  PersonRec=new Person();
  //Заполняем поля объекта PersonRec
  PersonRec.LastName=GetTagVal(CurrNode,"LastName");
  PersonRec.Name=GetTagVal(CurrNode,"Name");
  PersonRec.Phone=GetTagVal(CurrNode,"Phone");
  PersonRec.Street=GetTagVal(CurrNode,"Street");
  PersonRec.House=GetTagVal(CurrNode,"House");
  PersonRec.App=GetTagVal(CurrNode,"App");
  PersonRec.Note=GetTagVal(CurrNode,"Note");
  //Сохраняем объект PersonRec в массиве PersonArr
  this.PersonArr[this.PersonArr.length]=PersonRec;
 }
}
//Запись данных из формы в XML-файл
function ListPersons_SaveData() {
 var Root,CurrNode,ElemList;
 //Сохраняем в переменной Root ссылку на корневой элемент
 //документа
 Root=XML.documentElement;
 //Сохраняем в переменной CurrNode ссылку на (CurRecord+1)-й
 //элемент Person
 CurrNode=Root.childNodes.item(this.CurRecord+1);
 //Записываем данные из полей ввода формы в соответствующие
 //XML-элементы, которые являются дочерними узлами
 //относительно  CurrNode
 SetTagVal(CurrNode,"LastName",doc.all.txtLastName.value);
 SetTagVal(CurrNode,"Name",doc.all.txtName.value);
 SetTagVal(CurrNode,"Phone",doc.all.txtPhone.value);
 SetTagVal(CurrNode,"Street",doc.all.txtStreet.value);
 SetTagVal(CurrNode,"House",doc.all.txtHouse.value);
 SetTagVal(CurrNode,"App",doc.all.txtApp.value);
 SetTagVal(CurrNode,"Note",doc.all.txtNote.value);
 //Сохраняем XML-файл на диске
 XML.save(PathBook);
}
//Загрузка данных для текущей записи в форму
function ListPersons_LoadDialog() {
 //Вызываем метод LoadDialog для объекта Person,
 //который является CurRecord-м элементом массива PersonArr
 this.PersonArr[this.CurRecord].LoadDialog();
}
//Обновление данных в форме
function ListPersons_RefreshDialog(IsGoTop) {
 //Обнуляем массив PersonArr
 this.PersonArr.length=0;
 //Заново загружаем данные из XML-файла в массив PersonArr
 this.FileToArray();
 if (IsGoTop)
  //Переходим к первой записи в массиве
  this.FirstRecord()
 else
  //Переходим к последней записи в массиве
  this.FinalRecord();
 //Загружаем в форму данные для текущей записи
 this.LoadDialog();
}
//Переход к следующей записи
function ListPersons_NextRecord() {
 if (this.CurRecord<this.PersonArr.length - 1)
  //Если текущая запись не является последней, увеличиваем
  //номер текущей записи
  this.CurRecord++;
}
//Переход к предыдущей записи
function ListPersons_PreviousRecord() {
 if (this.CurRecord > 0)
  //Если текущая запись не является первой, уменьшаем
  //номер текущей записи
  this.CurRecord--;
}
//Переход к первой записи
function ListPersons_FirstRecord() {
 this.CurRecord = 0;
}
//Переход к последней записи
function ListPersons_FinalRecord() {
 this.CurRecord = this.PersonArr.length - 1;
}
//Добавление новой записи
function ListPersons_NewRecord() {
 var Root,NewElem;
 //Сохраняем в переменной Root ссылку на корневой элемент
 //документа
 Root=XML.documentElement;
 //Создаем новый элемент Person
 NewElem=XML.createElement("Person");
 //Добавляем новый элемент в XML-файл
 Root.appendChild(NewElem);
 //Сохраняем XML-файл на диске
 XML.save(PathBook);
 //Обновлем в форме данные для последней добавленной записи
 this.RefreshDialog(false);
}
//Удаление текущей записи
function ListPersons_DelRecord() {
 var Root,DelNom;
 //Сохраняем в переменной Root ссылку на корневой элемент
 //документа
 Root=XML.documentElement;
 //В переменной DelNom сохраняем номер удаляемого элемента Person
 DelNom=this.CurRecord+1;
 //Удаляем DelNom-й элемент Person из XML-файла
 Root.removeChild(Root.childNodes.item(DelNom))
 //Сохраняем XML-файл на диске
 XML.save(PathBook);
 //Выводим сообщение о том, что запись удалена
 WshShell.Popup("Запись N "+DelNom+" удалена",0,"Информация",
  vbInformation+vbOkOnly);
 //Обновлем в форме данные для первой записи
 this.RefreshDialog(true);
}
//             Обработчики событий Internet Explorer'a
//Функция-обработчик окончания загрузки документа в Internet Explorer
function ie_DocumentComplete() {
 //Создаем экземпляр objListPersons объекта ListPersons
 objListPersons = new ListPersons();
 //Загружаем данные из XML-файла в массив PersonArr
 objListPersons.FileToArray();
 //Получаем ссылку на объект Document
 doc = ie.Document;
 //Устанавливаем заголовок окна
 doc.title = "Редактирование данных";
 //Указываем функции-обработчики нажатий на кнопки формы
 doc.all.btnSave.onclick=btnSave_OnClick;
 doc.all.btnCancel.onclick=btnCancel_OnClick;
 doc.all.btnFirst.onclick=btnFirst_OnClick;
 doc.all.btnPrevious.onclick=btnPrevious_OnClick;
 doc.all.btnNew.onclick=btnNew_OnClick;
 doc.all.btnDelete.onclick=btnDelete_OnClick;
 doc.all.btnNext.onclick=btnNext_OnClick;
 doc.all.btnFinal.onclick=btnFinal_OnClick;
 //Указываем функции-обработчики изменения текста в полях ввода
 doc.all.txtLastName.onchange  = txtBoxOnChange;
 doc.all.txtName.onchange  = txtBoxOnChange;
 doc.all.txtPhone.onchange = txtBoxOnChange;
 doc.all.txtStreet.onchange  = txtBoxOnChange;
 doc.all.txtHouse.onchange = txtBoxOnChange;
 doc.all.txtApp.onchange  = txtBoxOnChange;
 doc.all.txtNote.onchange  = txtBoxOnChange;
 if (objListPersons.PersonArr.length < 1)
  //Если в XML-файле нет данных, добавляем пустую запись
  objListPersons.AddRecord();
 //В качестве текущей устанавливаем первую запись
 objListPersons.CurRecord = 0;
 //Загружаем в форму данные из массива PersonArr
 //для первой записи
 objListPersons.LoadDialog();
 // Делаем окно Internet Explorer'а видимым
 ie.Visible = true;
}
//Функция-обработчик закрытия окна Internet Explorer'а
function ie_OnQuit() {
 IsQuit=true;
 //Сохраняем данные из формы в XML-файле
 objListPersons.SaveData();
}
//             Обработчики нажатий на кнопки в форме
//Функция-обработчик нажатия на кнопку "Сохранить"
function btnSave_OnClick() {
 //Сохраняем данные из формы в XML-файле
 objListPersons.SaveData();
}
//Функция-обработчик нажатия на кнопку "Отменить"
function btnCancel_OnClick() {
 //Заново загружаем данные из текущего элемента массива
 //в форму
 objListPersons.LoadDialog();
 //Выводим сообщение в заголовке окна
 doc.title = "Данные восстановлены";
}
//Функция-обработчик нажатия на кнопку "<<"
function btnFirst_OnClick() {
 //Проверяем, были ли сделаны изменения в форме
 if (objListPersons.IsChanged) { //Изменения были сделаны
  //Сохраняем данные в XML-файле
  objListPersons.SaveData();
  //Заново загружаем данные из XML-файла в массив PersonArr
  objListPersons.FileToArray();
 }
 //Переходим к первой записи в массиве
 objListPersons.FirstRecord();
 //Загружаем в форму данные из массива PersonArr
 //для первой записи
 objListPersons.LoadDialog();
 //Выводим сообщение в заголовке окна
 doc.title = "Запись N " + (objListPersons.CurRecord + 1);
}
//Функция-обработчик нажатия на кнопку "<"
function btnPrevious_OnClick() {
 //Проверяем, были ли сделаны изменения в форме
 if (objListPersons.IsChanged) {  //Изменения были сделаны
  //Сохраняем данные в XML-файле
  objListPersons.SaveData();
  //Заново загружаем данные из XML-файла в массив PersonArr
  objListPersons.FileToArray();
 }
 //Переходим к предыдущей записи в массиве
 objListPersons.PreviousRecord();
 //Загружаем в форму данные из массива PersonArr
 //для текущей записи
 objListPersons.LoadDialog();
 //Выводим сообщение в заголовке окна
 doc.title = "Запись N " + (objListPersons.CurRecord + 1);
}
//Функция-обработчик нажатия на кнопку "Новая запись"
function btnNew_OnClick() {
 //Проверяем, были ли сделаны изменения в форме
 if (objListPersons.IsChanged) { //Изменения были сделаны
  //Сохраняем данные в XML-файле
  objListPersons.SaveData();
  //Заново загружаем данные из XML-файла в массив PersonArr
  objListPersons.FileToArray();
 }
 //Добавляем новую запись в XML-файл
 objListPersons.NewRecord();
 //Загружаем в форму данные из массива PersonArr
 //для добавленной записи
 objListPersons.LoadDialog();
 //Выводим сообщение в заголовке окна
 doc.title = "Добавлена новая запись";
}
//Функция-обработчик нажатия на кнопку "Удалить"
function btnDelete_OnClick() {
 //Удаляем текущую запись из XML-файла
 objListPersons.DelRecord();
 //Загружаем в форму данные из массива PersonArr
 //для первой записи
 objListPersons.LoadDialog();
 //Выводим сообщение в заголовке окна
 doc.title = "Запись удалена";
}
//Функция-обработчик нажатия на кнопку ">"
function btnNext_OnClick() {
 //Проверяем, были ли сделаны изменения в форме
 if (objListPersons.IsChanged) { //Изменения были сделаны
  //Сохраняем данные в XML-файле
  objListPersons.SaveData();
  //Заново загружаем данные из XML-файла в массив PersonArr
  objListPersons.FileToArray();
 }
 //Переходим к следующей записи в массиве
 objListPersons.NextRecord();
 //Загружаем в форму данные из массива PersonArr
 //для текущей записи
 objListPersons.LoadDialog();
 //Выводим сообщение в заголовке окна
 doc.title = "Запись N " + (objListPersons.CurRecord + 1);
}
//Функция-обработчик нажатия на кнопку ">>"
function btnFinal_OnClick() {
 //Проверяем, были ли сделаны изменения в форме
 if (objListPersons.IsChanged) { //Изменения были сделаны
  //Сохраняем данные в XML-файле
  objListPersons.SaveData();
  //Заново загружаем данные из XML-файла в массив PersonArr
  objListPersons.FileToArray();
 }
 //Переходим к последней записи в массиве
 objListPersons.FinalRecord();
 //Загружаем в форму данные из массива PersonArr
 //для текущей записи
 objListPersons.LoadDialog();
 //Выводим сообщение в заголовке окна
 doc.title = "Запись N " + (objListPersons.CurRecord + 1);
}
//Функция-обработчик изменения текста в полях ввода
function txtBoxOnChange() {
 //Устанавливаем признак изменения данных в форме
 objListPersons.IsChanged = true;
 //Выводим сообщение в заголовке окна
 doc.title = "Редактирование данных";
}
//Основная запускная функция
function Main() {
 //Создаем объект WshShell
 WshShell = WScript.CreateObject("WScript.Shell");
 //Определяем пути к файлам
 InitPath();
 //Создаем объект InternetExplorer.Application с возможностью
 //обработки событий этого объекта
 ie  = WScript.CreateObject("InternetExplorer.Application", "ie_");
 //Устанавливаем свойства объекта ie для отображения формы3
 ie.AddressBar = false;
 ie.FullScreen = false;
 ie.MenuBar    = false;
 ie.Resizable  = false;
 ie.StatusBar  = false;
 ie.ToolBar    = false;
 //Устанавливаем размеры окна
 ie.Height = 300;  //Высота
 ie.Width = 780;   //Длина
 IsQuit=false;
 //Загружаем HTML-файл с формой
 ie.Navigate(PathHTML);
 while (!IsQuit)
  //Приостанавливаем сценарий на 0,1 сек
  WScript.Sleep(100);
}
/*******************  Начало  **********************************/
Main();
/*************  Конец *********************************************/
 

Оглавление книги


Генерация: 2.838. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз