Как мы видим из листинга 10.3, при использовании в компоненте-сценарии языка JScript в результате работы мастера внутрь контейнера <script> помещаются:

? глобальные переменные, которые соответствуют объявленным в элементах <property> свойствам;

? заготовки функций с префиксами get_ и put_, которые осуществляют чтение и запись свойств объекта;

? заготовки функций, которые соответствуют объявленным в элементах <method> методам.

Кроме этого, создается экземпляр внутреннего объекта, содержащего те же свойства и методы, что были описаны внутри элемента <public> (переменная description). Имя этого внутреннего объекта совпадает с именем класса описываемого СОМ-объекта (в нашем случае это 'DateArc').

Замечание

Создаваемый мастером внутренний объект нужен только в иллюстративных целях, т.к. здесь наглядно видно, какие именно свойства и методы будет предоставлять клиентам автоматизации компонент-сценарий. Если убрать из контейнера <script> описание внутреннего объекта, это никак не скажется на функционировании объекта-сценария.

Доработка объекта-сценария DateArc.wsc (JScript)

Для получения нужного нам СОМ-объекта из сформированного с помощью Windows Script Component Wizard файла DateArc.wsc нужно выполнить несколько шагов.

Во-первых, для того, чтобы использовать внутри описания СОМ-объекта символы кириллицы, необходимо добавить в директиву <?xml?> аргумент encoding='windows- 1251' (без этого в сценарии не удастся даже написать по-русски комментарии):

<?xml version='1.0' encoding='windows-1251'?>

Во-вторых, в контейнер <registration>  мы вставим элемент <script> с двумя функциями Register() и Unregister(), которые будут выводить на экран диалоговые окна с соответствующей информацией при регистрации компонента-сценария и его отключении соответственно:

<script language='JScript'>

<![CDATA[

var WshShell;

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

var vbInformation=64;

function Register() {

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

 WshShell = new ActiveXObject('WScript.Shell');

 WshShell.Popup('Компонент зарегистрирован в системе',0,

  'Компонент для архивирования файлов',vbInformation);

}

function Unregister()   {

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

 WshShell = new ActiveXObject('WScript.Shell');

 WshShell.Popup('Компонент удален из системы', 0,

  'Компонент для архивирования файлов',vbInformation);

}

]]>

</script>

Затем нам понадобятся две дополнительные функции. Первая из них NowIs() формирует строку формата ММДД, где ММ — текущий месяц, ДД — текущий день:

//Вспомогательная функция для символьного представления даты

function NowIs() {

 var d, s='', s1='';

 //Создаем объект Date (текущая дата)

 d=new Date();

 //Выделяем номер месяца

 s+=(d.getMonth()+1);

 //Если месяц представляется одним символом, добавляем слева '0'

 if (s.length==1) s='0'+s;

 //Выделяем в дате день

 s1+=d.getDate();

 //Если день представляется одним символом, добавляем слева '0'

 if (s1.length==1) s1='0'+s1;

 s+=s1;

 //Возвращаем сформированную строку

 return s;

}

Вторая функция CheckPath() будет проверять наличие исходного каталога и каталога для хранения архивных файлов. Для этого используется метод FolderExists() объекта FileSystemObject. Заметим, что сам объект FileSystemObject нужно создавать не путем вызова метода CreateObject объекта WScript, а с помощью конструкции new ActiveXObject():

FSO=new ActiveXObject('Scripting.FileSystemObject');

т.к. в отличие от обычного сценария WSH в компоненте-сценарии нет встроенного объекта WScript. Если хотя бы один из каталогов не существует, функция CheckPath() запишет соответствующее сообщение в свойство SErrMess и вернет значение false, в противном случае функция CheckPath() возвращает значение true.

//Проверка доступности каталогов

function CheckPath() {

 var FSO;

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

 FSO=new ActiveXObject('Scripting.FileSystemObject');

 //Проверяем доступность исходного каталога

 if (!FSO.FolderExists(SFrom)) { //Исходный каталог не существует

  //Формируем строку с информацией об ошибке

  SErrMess='Не найден исходный каталог '+SFrom;

  return false;

 }

 //Проверяем доступность каталога для архивирования

 if (!FSO.FolderExists(SArch)) {

  //Каталог для архивирования не существует

  //Формируем строку с информацией об ошибке

  SErrMess='Не найден каталог для хранения архивов '+SArch;

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

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

Отметить Добавить цитату