Выбрать главу

 BasePath,  //Путь к текущему каталогу

 PathBook,  //Путь к файлу с данными

 XMLDoc,    //XML-файл с данными

 NomRec=0,  //Счетчик количества записей

 PersonRec, //Объект для хранения данных об одном человеке

 PersonArr; //Массив для хранения объектов PersonRec

//Инициализируем константы для диалоговых окон

var vbYesNo=4,vbQuestion=32,vbInformation=64,vbYes=6,vbOkOnly=0;

//Поиск фамилии в записной книжке и удаление всех

//реквизитов, относящихся к этой фамилии

function FindAndDelRecord() {

 var Root,sSelect,i,Parent,NodeList;

 //Создаем объект DOMDocument

 XMLDoc = WScript.CreateObject("Msxml.DOMDocument");

 //Загружаем XML-файл

 XMLDoc.load(PathBook);

 //Сохраняем в переменной Root ссылку на корневой элемент

 //документа

 Root=XMLDoc.documentElement;

 //Формируем строку для поиска фамилии

 sSelect="Person/LastName[text()='"+LastName+"']";

 //Создаем коллекцию NodeList всех элементов LastName,

 //значение которых совпадает со значением переменной LastName

 NodeList=XMLDoc.documentElement.selectNodes(sSelect);

 if (NodeList.length==0) //Коллекция NodeList пуста

  //Выводим диалоговое окно с сообщением

  WshShell.Popup("Фамилия "+LastName+

   " не найдена в записной книжке!",0,

   "Работа с XML-файлом",vbInformation+vbOkOnly);

 else { //Требуемая фамилия найдена

  //Цикл по всем найденным элементам LastName

  for (i=0;i<=NodeList.length-1;i++) {

   //Определяем родительский элемент (Person) для найденного

   //элемента LastName

   Parent=NodeList.item(i).parentNode;

   //Удаляем элемент Person вместе со всеми его дочерними элементами

   Root.removeChild(Parent);

   //Выводим диалоговое окно с сообщением

   WshShell.Popup("Запись удалена!",0,

    "Работа с XML-файлом",vbInformation+vbOkOnly);

  }

  //Сохраняем содержимое XML-файла на диске

  XMLDoc.save(PathBook);

 }

}

//Построение путей к файлам

function InitPath() {

 BasePath=WshShell.CurrentDirectory+"\\";

 //Путь к файлу с данными

 PathBook=BasePath+"book.xml";

}

//Основная запускная функция

function Main() {

 var Res;

 //Создаем объект WshShell

 WshShell = WScript.CreateObject("WScript.Shell");

 //Определяем пути к файлам

 InitPath();

 LastName=InputName();

 //Запрос на удаление записи

 Res=WshShell.Popup("Удалить фамилию "+LastName+

  " из \n"+PathBook+"?",0,

  "Работа с XML-файлом",vbQuestion+vbYesNo);

 if (Res==vbYes) { //Нажата кнопка Да

  //Ищем в книжке нужную фамилию и удаляем относящуюся к

  //ней запись

  FindAndDelRecord();

 }

}

/*******************  Начало  **********************************/

Main();

/*************  Конец *********************************************/

</script> 

</job>

Глава 7

Способы организации диалогового режима работы сценариев 

В этой главе на примере работы с записной книжкой будут рассмотрены три способа организации из сценария диалога с пользователем.

Во-первых, мы еще раз подробно остановимся на том, как можно использовать параметры командной строки для запуска различных заданий из многозадачного WS-файла, который в нашем случае будет реализовывать несколько функций для работы с записной книжкой.

Во-вторых, для того же WS-файла мы создадим кнопочное (командное) меню, в котором пользователь сможет выбрать нужное ему действие с помощью ввода определенных символов в диалоговом окне.

Наконец, будет показано, как можно организовать в сценарии полноценный пользовательский интерфейс с помощью HTML-форм и браузера Internet Explorer.

Многозадачный сценарий для работы с записной книжкой

В качестве примера рассмотрим сценарий для работы с записной книжкой в XML-формате (структура файла book.xml, в котором хранится записная книжка, описана в предыдущей главе), в котором будут реализованы следующие функции:

□ просмотр всех записей в алфавитном порядке;

□ поиск записей по фамилии;

□ добавление и удаление записей.

Каждая из этих задач реализуется в виде отдельного задания в файле PhoneBook.wsf (листинг 7.1).

Листинг 7.1. Схема многозадачного файла PhoneBook.wsf

<package>

 <!-- ****************** Просмотр всех записей ******************* -->