Электронная библиотека УЛибрусФ ( ) Научно-техническая библиотека электронных книг. Первоначально задуманная как хранилище компьютерной литературы, в настоящий момент библиотека содержит книжные издания по ...
-- [ Страница 4 ] --Для определения типа данных и максимальной длины значения каждого столбца используются соответственно свойства Datatype и Length. В коде, представленном в листинге 6.9, например, столбец Prodio относится к типу целочисленных данных int;
столбец ProdName Ч к символьному типу дан ных переменной длины varchar.
Доступные типы данных представлены в табл. 6.1.
Таблица 6.1. Типы данных полей, доступные в SQL-DMO Идентификатор Описание bigint Целочисленный тип, от -263 (-9 223372 036854 775808) до 263 (9 223372 036854 775807) int Целочисленный тип, от-231 (-2 147 483 648) до 231 (2 147 483 647) smallint Целочисленный тип, от 215 (-32 768) до 215 (32 767) tinyint Целочисленный тип, от 0 до bit Целочисленный тип, 0 или decimal Тип с фиксированной точностью, от -1038 до numeric Эквивалентно типу decimal money Денежный тип, от -263 (-922 337 203 685 477.5808) до 263 (+922 337 203 685 477.5807) smallmoney Монетный тип, от -214 748.3648 до +214 748. float Числовой тип с плавающей запятой, до -1.79Е+308 по 1.79Е+ real Числовой тип с плавающей запятой, от -3.40Е+38 до 3.40Е+ datetime Дата и время, начиная с 1 января 1753 по 31 декабря с точностью до 3.33 миллисекунд smalldatetime Дата и время, начиная с 1 января 1900 по 6 июля 2079 с точ ностью до одной минуты char Строка фиксированной длины (не Unicode), максимально до пустимая длина Ч 8000 символов Использование SQL-DMO Table.FileGroup = "PRIMARY";
// Создаем колонки // Добавить целочисленный тип данных Columnl = СоздатьОбъект("SQLDMO.Column");
Columnl.Name = "ProdID";
Columnl.Datatype = "int";
Table.Columns.Add(Columnl);
// Добавить тип данных символьной строки Column2 = СоздатьОбъект("SQLDMO.Column");
Column2.Name = "ProdName";
Column2.DataType = "varchar";
Column2.Length = 25;
Table.Columns.Add(Column2);
// Добавить еще один целочисленный тип данных Columns = СоздатьОбъект("SQLDMO.Column");
Column3.Name = "Price";
ColumnS.DataType = "money";
Table.Columns.Add(ColumnS);
// Добавить десятичный тип данных Column4 = СоздатьОбъект("SQLDMO.Column");
Column4.Name = "ProdWeight";
Column4.DataType = "decimal";
Column4.NumericPrecision = 9;
Column4.NumericScale = 5;
Table.Columns.Add(Column4);
// Очистить объекты Columnl = " ;
" Column2 = " ;
" Columns = " ;
" Column4 = " ;
" // Перед добавлением новой таблицы в назначенную базу данных // удалить предыдущую версию таблицы, если она существует Глава Попытка Database.Tables(ИмяТаблицы).Remove();
Исключение КонецПопытки;
// Добавляем новую таблицу Database.Tables.Add(Table);
Для определения типа данных и максимальной длины значения каждого столбца используются соответственно свойства Datatype и Length. В коде, представленном в листинге 6.9, например, столбец Prodio относится к типу целочисленных данных int;
столбец ProdName Ч к символьному типу дан ных переменной длины varchar.
Доступные типы данных представлены в табл. 6.1.
Таблица 6.1. Типы данных полей, доступные в SQL-DMO Идентификатор Описание bigint Целочисленный тип, от -2 (-9 223372 036854 775808) до 2 (9 223372 036854 775807) int 31 Целочисленный тип, от-2 (-2 147 483 648) до 2 (2 147 483 647) smallint Целочисленный тип, от 215 (-32 768) до 215 (32 767) tinyint Целочисленный тип, от 0 до bit Целочисленный тип, 0 или decimal Тип с фиксированной точностью, от Ч1038 до numeric Эквивалентно типу decimal money Денежный тип, от -263 (-922 337 203 685 477.5808) до 263 (+922 337 203 685 477.5807) smallmoney Монетный тип, от -214 748.3648 до +214 748. float Числовой тип с плавающей запятой, до -1.79Е+308 по 1.79Е+ real Числовой тип с плавающей запятой, от -3.40Е+38 до 3.40Е+ datetime Дата и время, начиная с 1 января 1753 по 31 декабря с точностью до 3.33 миллисекунд smalldatetime Дата и время, начиная с 1 января 1900 по 6 июля 2079 с точ ностью до одной минуты char Строка фиксированной длины (не Unicode), максимально до пустимая длина Ч 8000 символов Использование SQL-DMO Таблица 6.1 (окончание) Идентификатор Описание varchar Строка переменной длины (не Unicode), максимально допус тимая длина Ч 8000 символов text Строка переменной длины (не Unicode), максимально допус тимая длина Ч 2 (2 147 483 647) символов nchar Строка фиксированной длины (Unicode), максимально допус тимая длина Ч 4000 символов nvarchar Строка переменной длины (Unicode), максимально допусти мая длина Ч 4000 символов ntext Строка переменной длины (Unicode), максимально допусти мая длина Ч 2 (1 073 741 823) символов binary Двоичные данные фиксированной длины до 8000 байт varbinary Двоичные данные переменной длины до 8000 байт image Двоичные данные переменной длины до 2 (2 147 483 647) байт cursor Ссылка на курсор sql_variant Любой тип данных, поддерживаемый SQL Server table Специальный тип данных, используемый в качестве хранили ща результата обработки данных timestamp Уникальный номер в пределах базы данных uniqueidentifier Глобальный уникальный идентификатор (GUID) Как видно из приведенного примера, определение столбцов таблицы реали зуется в три этапа.
На первом этапе необходимо создать экземпляр столбца.
На втором Ч код должен настроить этот столбец, присвоив значения таким его свойствам, как название Name и тип данных DataType. Определяемые свойства могут меняться в зависимости от типа данных столбца. К примеру, для столбца, принадлежащего целочисленному типу данных int, достаточно настроить всего два свойства Ч имя и тип данных. В то же время столбец, относящийся к типу данных varchar, требует определения значений как минимум трех свойств Ч названия (Name), типа данных (DataType) и длины (Length).
Третий этап создания столбца предусматривает инициирование метода до бавления Add, который и добавит созданный столбец в коллекцию столбцов Columns рассматриваемой таблицы.
С помощью метода Database.Tables.Add происходит добавление таблицы к подключенной базе данных. До начала добавления таблицы метод Remove 240 Глава удаляет из базы данных все ранние версии этой таблицы. После этого код вычищает все дочерние объекты.
Часть программного кода, отвечающая за установление соединения с серве ром, на котором будет размещена база данных, в примере не показана, так как подразумевается, что подключение было совершено ранее, по аналогии с кодом, приведенном в листинге 6.2.
Теперь рассмотрим пример создания таблицы заказов Orders (листинг 6.10).
У этой таблицы имеется первичный ключ, построенный по столбцу с акти визированным свойством идентичности identity. Приведенный пример кода во многом напоминает код из листинга 6.9, за исключением перевода свойства AiiowNuiis третьего столбца в состояние -1.
// Объект базы данных Database = СоздатьОбъект("SQLDMO.Database");
// Объект новой таблицы Table = СоздатьОбъект("SQLDMO.Table");
// Имя базы данных ИмяБазыДанных = "TestDB";
// Имя новой таблицы ИмяТаблицы = "Orders";
Database = SQLServer.Databases(ИмяБазыДанных) Table.Name = ИмяТаблицы;
Table.FileGroup = "PRIMARY";
// Создаем колонки // Добавить целочисленный тип данных Columnl = СоздатьОбъект("SQLDMO.Column");
Columnl.Name = "OrderlD";
Columnl.Datatype = "int";
Columnl.AllowNulls = 0;
Columnl.Identity = -1;
Columnl.IdentitySeed = 1000;
Columnl.Identitylncrement = 10;
Table.Columns.Add(Columnl);
Использование SQL-DMO // Добавить столбец со свойством Identity, который будет служить перигчным ключом таблицы Keyl = СоздатьОбъект("SQLDMO.Key");
Keyl.Name = "OrdersPK";
Keyl.Type = 1;
Keyl.Clustered = -1;
Keyl.KeyColumns.Add(Columnl.Name);
Table.Keys.Add(Keyl);
// Добавить временной тип данных datetime Column2 = СоздатьОбъект("SQLDMO.Column");
Column2.Name = "OrderDate";
Column2.DataType = "datetime";
Table.Columns.Add(Column2);
// Добавить тип данных datetime, допускающий неопределенные значения Column3 = СоздатьОбъект("SQLDMO.Column");
Column3.Name = "ShippedDate";
ColumnS.DataType = "datetime";
Columns.AllowNulls = -1;
Table.Columns.Add(ColumnS);
// Перед добавлением новой таблицы в назначенную // базу данных удалить предыдущую версию таблицы, // если она существует.
Попытка Database.Tables(ИмяТаблицы).Remove();
Исключение КонецПопытки;
// Добавляем новую таблицу Х Database.Tables.Add(Table);
// Очистить объекты Columnl = " ;
" Column2 = " ;
" ColumnS = " ;
" 242 Глава Код, приведенный в листинге 6.10, создает таблицу заказов с именем Orders. Таблица orders содержит столбец идентификатора заказа orderio;
столбец orderDate, в который заносится дата ввода заказа, а также столбец shippedDate, в который записывается дата отправки заказа. Столбец Orderio служит первичным ключом таблицы, а столбец ShippedDate может содержать неопределенные значения NULL. Чтобы заставить SQL Server авто матически формировать значения первичного ключа для новых строк, про цедура активизирует свойство identity, присваивая ему значение -1 (истина или True). При этом исходное значение равно юоо, а приращение составля ет ю. После добавления в проект таблицы столбца со свойством identity создается экземпляр Keyi ключевого объекта Key. Затем присваиваются зна чения свойствам Name и туре объекта Keyi, которые содержат соответствен но название и тип данных. Все возможные значения свойства туре объек та Key приведены в табл. 6.2.
Таблица 6.2. Типы ключей SQL-DMO Значение Константа SQL-DMO Описание SQLDMOKey Foreign 3 Внешний ключ SQLDMOKey Primary Первичный ключ SQLDMOKey Unique 2 Уникальное поле, не допускающее значение NULL SQLDMOKey_Unknown О Ошибочное значение Свойству Clustered объекта Keyi присваивается значение -1 (истина или True). В результате уникальный индекс первичного ключа строится в виде кластеризованного индекса для всей таблицы Orders. Прежде чем добавить ключ кеу! в коллекцию ключей Keys таблицы Orders, необходимо указать хотя бы один объект из класса столбцов, который будет поставлен в соот ветствие первичному ключу. В приведенном примере в этой роли выступает столбец Orderio, у которого активизировано свойство identity.
Во все столбцы (листинг 6.9) и в два первых столбца (листинг 6.10) необхо димо вводить определенные значения. Иное дело третий столбец Ч ShippedDate (листинге 6.10). В нем могут находиться неопределенные зна чения NULL, поскольку дата фактической отправки заказа неизвестна на мо мент ввода сведений о заказе. Она вводится в столбец shippedDate позднее, когда заказ уже отправлен. Поэтому в третьем столбце присваивается значение -1 свойству AiiowNuiis, после чего можно помещать в него неопределенные значения. По умолчанию значение этого свойства равно о (ложь или False).
Таблица товаров Products (листинг 6.9) и таблица заказов orders (лис тинг 6.10) связаны между собой отношением "многие-ко-многим". Такое Использование SQL-DMO отношение имеет место потому, что один и тот же товар может войти в один или несколько заказов, а каждый заказ может включать многие това ры. Чтобы отразить такое отношение в разрабатываемом проекте базы дан ных, необходимо внести в него два изменения. Во-первых, нужно переде лать проект таблицы товаров Products таким образом, чтобы у нее тоже появился первичный ключ. Во-вторых, необходимо добавить в базу данных новую таблицу, которая свяжет таблицы Products и orders. В этой таблице будут храниться общие данные доменов обеих таблиц. К примеру, в ней можно хранить количество определенного товара, которое указывается в от дельной строке заказа. Новую таблицу, которая связывает таблицы Products И Orders, назовем OrderDetails.
В листинге 6.11 приведен пример создания таблицы связей OrderDetails.
У этой таблицы имеются внешние ключи, которые ссылаются на таблицы Orders И Products.
истинг OrderDetails..
..
// Объект базы данных Database = СоздатьОбъект("SQLDMO.Database");
// Объект новой таблицы Table = СоздатьОбъект("SQLDMO.Table");
// Имя базы данных ИмяБазыДанных = "TestDB";
// Имя новой таблицы ИмяТаблицы = "OrderDetails";
Database = SQLServer.Databases(ИмяБазыДанных) Table.Name = ИмяТаблицы;
Table.FileGroup = "PRIMARY";
//.Создаем колонки // Добавить целочисленный тип данных Coluranl = СоздатьОбъект("SQLDMO.Column");
Columnl.Name = "OrderID";
Columnl.Datatype = "int";
Table.Columns.Add(Columnl);
244 Глава // Добавить целочисленный тип данных Column2 = СоздатьОбъект("SQLDMO.Column");
Column2.Name = "ProdID";
Column2.DataType = "int";
Table.Columns.Add(Column2);
// Добавить внешний ключ, указывающий на таблицу Orders Keyl = СоздатьОбъект("SQLDMO.Key");
Keyl.Name = "OrderIDFK";
Keyl.Type = 3;
Keyl.KeyColumns.Add(Columnl.Name);
Keyl.ReferencedTable = "Orders";
Keyl.ReferencedColumns.Add("OrderlD");
Table.Keys.Add(Keyl);
// Добавить внешний ключ, указывающий на таблицу Products Кеу2 = СоздатьОбъект("SQLDMO.Key");
Key2.Name = "ProdlDFK";
Key2.Type = 3;
Key2.KeyColumns.Add(Column2.Name);
Key2.ReferencedTable = "Products";
Key2.ReferencedColumns.Add("ProdID");
Table.Keys.Add(Key2);
// Добавить первичный ключ, состоящий из двух столбцов КеуЗ = СоздатьОбъект("SQLDMO.Key");
КеуЗ.Name = "OrderlDAndProdlDPK";
КеуЗ.Type = 1;
КеуЗ.Clustered = -1;
КеуЗ.KeyColumns.Add(Columnl.Name);
КеуЗ.KeyColumns.Add(Column2.Name);
Table.Keys.Add(КеуЗ);
// Добавить целочисленный тип данных Column3 = СоздатьОбъект("SQLDMO.Column");
Column3.Name = "Quantity";
Columns.DataType = "int";
Использование SQL-DMO Table.Columns.Add(ColumnS);
// Перед добавлением новой таблицы в назначенную // базу данных удалить предыдущую версию таблицы, // если она существует.
Попытка Database.Tables(ИмяТаблицы).Remove();
Исключение КонецПопытки;
// Добавляем новую таблицу Database.Tables.Add(Table);
// Очистить объекты Columnl = " ;
" Column2 = " ;
" Columns = " ;
" Код, приведенный в листинге 6.11, показывает также синтаксис, применяе мый при построении первичного ключа на основе нескольких столбцов.
Код, создающий внешний ключ, начинается с генерации экземпляра объек та ключа Key. После присвоения имени этому объекту, его свойству туре присваивается признак внешнего ключа (значение з). Вслед за этим добав ляется свойство Name объекта Key, содержащее название этого столбца, в принадлежащую ключу коллекцию названий ключевых столбцов KeyCoiumns.
В соответствии со спецификацией столбец orderio таблицы orderDetails назначается локальным столбцом внешнего ключа. Затем происходит назна чение таблицы orders и ее столбца Orderio соответственно таблицей и столбцом, на которые будут формироваться ссылки. После настройки всех этих свойств программный код, формирующий первый внешний ключ, за вершает свою работу добавлением созданного ключа в коллекцию ключей Keys таблицы orderDetails. После этого создается внешний ключ, который будет указывать на столбец идентификатора товара Prodio в таблице товаров Products ИЗ столбца ProdID таблицы OrderDetails.
Часть кода, в которой описан объект кеуЗ, демонстрирует синтаксис, при меняемый для формирования первичного ключа из нескольких столбцов таблицы. Этот блок операторов очень похож на те, в которых определяются внешние ключи таблицы.
Для того чтобы удалить поле таблицы, необходимо воспользоваться методом Column. Remove ( ), где идентификатор Column является объектом удаляемого поля.
246 Глава Создание SQL-скриптов В листинге 6.4 был приведен пример получения списка таблиц, имеющихся в базе данных. Аналогичным образом, через объект Database.Tables, можно сгенерировать SQL-скрипт, который можно использовать для создания таб лиц в другой базе или на другом сервере.
В листинге 6.12 приведен пример генерации SQL-скрипта для создания таб лицы customers, находящейся в базе данных Northwind, входящий в постав ку продукта Microsoft SQL Server 7.0/2000.
Ч.....Ч,.Ч. _......._,_....,.....ЧДД_ Листинг 6.12. Генерация SQL-скрипта создания таблицы Customers базы данных Northwind Database = СоздатьОбъект("SQLDMO.Database");
Database = SQLServer.Databases("Northwind");
// Выводим скрипт Сообщить(Database.Tables.Item("Customers").Script());
SQL-скрипт, созданный в результате выполнения приведенного выше кода, представлен в листинге 6.13.
! Листинг 6.13. SQL-скрипт создания таблицы Customers CREATE TABLE [Customers] ( [CustomerlD] [nchar] (5) COLLATE Cyrillic_General_CI_AS NOT NULL, [CompanyName] [nvarchar] ( 4 0 ) COLLATE Cyrillic_General_CI_AS NOT NULL [ContactName] [nvarchar] (30) COLLATE Cyrillic_General_CI_AS NULL, [ContactTitle] [nvarchar] ( 3 0 ) COLLATE Cyrillic_General_CI_AS NULL, [Address] [nvarchar] ( 6 0 ) COLLATE Cyrillic_General_CI_AS NULL, [City] [nvarchar] (15) COLLATE Cyrillic_General_CI_AS NULL, [Region] [nvarchar] (15) COLLATE Cyrillic_General_CI_AS NULL, [PostalCode] [nvarchar] (10) COLLATE Cyrillic_General_CI_AS NULL, [Country] [nvarchar] (15) COLLATE Cyrillic_General_CI_AS NULL, [Phone] [nvarchar] ( 2 4 ) COLLATE Cyrillic_General_CI_AS NULL, [Fax] [nvarchar] ( 2 4 ) COLLATE Cyrillic_General_CI_AS NULL, CONSTRAINT [PK_Customers] PRIMARY KEY CLUSTERED ( [CustomerlD] ) ON [PRIMARY] ) ON [PRIMARY] GO Использование SQL-DMO В листинге 6.12 показано, что получить ссылку на объект таблицы можно не только по его номеру, как это было показано в листинге 6.4, но и по имени.
Метод script возвращает строковое выражение скрипта соответствующего объекта. В листинге 6.14 приведен пример генерации полного SQL-скрипта создания базы данных, включающий:
П сценарий создания таблиц;
П сценарий создания представлений;
П сценарий создания хранимых процедур;
О сценарии создания пользователей;
О сценарии создания ролей.
инг 6.14, Генерация полн Database = СоздатьОбъект("SQLDMO.Database");
Database = SQLServer.Databases(ИмяБазыДэнных);
СтрокаСценария = " ;
" Попытка // Сценарий создания таблиц Для Ном = 1 По Database.Tables.Count Цикл СтрокаСценария = СтрокаСценария + Database.Tables.Item(Ном).Script();
КонецЦикла;
// Сценарий создания представлений Для Ном = 1 По Database.Views.Count Цикл СтрокаСценария = СтрокаСценария + Database.Views.Item(HoM).Script();
КонецЦикла;
// Сценарий создания хранимых процедур Для Ном = 1 По Database.StoredProcedures.Count Цикл СтрокаСценария = СтрокаСценария + Data base.StoredProcedures.Item(Ном).Script();
КонецЦикла;
// Сценарии создания пользователей Для Ном = 1 По Database.Users.Count Цикл СтрокаСценария = СтрокаСценария + Database.Users.Item(Ном).Script();
КонецЦикла;
248 Глава /I Сценарии создания ролей Для Ном = 1 По Database.DatabaseRoles.Count Цикл СтрокаСценария = СтрокаСценария + Database.DatabaseRoles.Item(Ном).Script();
.
КонецЦикла;
Текст = СоэдатьОбъект("Текст");
Текст.ДобавитьСтроку(СтрокаСценария);
Текст.Показать("Полный скрипт создания базы данных",);
Исключение Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
Выполнение SQL-запросов В SQL-DMO, помимо административных задач, можно получать выборки данных с помощью SQL-запросов. Для данных целей предназначен метод ExecuteWithResults объекта Database. Метод ExecuteWithResults имеет единственный параметр Ч строку SQL-запроса и возвращает объект типа QueryResults.
Рассмотрим основные свойства объекта QueryResults.
П ROWS Ч возвращает количество записей в результирующей таблице запроса;
О Columns Ч возвращает количество полей в результирующей таблице за проса;
О CoiumnType (номерКолонки) Ч возвращает тип соответствующего поля (все возможные типы перечислены в табл. 6.3);
О coiumnName (НомерКолонки) Чвозвращает имя соответствующего поля.
Таблица 6.3. Типы полей объекта QueryResults Константа SQL-DMO Значение Описание Целочисленный тип bigint - SQLDMO DTypeBigint Двоичный тип фиксированной длины - SQLDMO DTypeBinary Положительный целочисленный тип - SQLDMO_DTypeBit Строковый тип фиксированной длины SQLDMO DTypeChar Использование SQL-DMO Таблица 6.3 (окончание) Значение Константа SQL-DMO Описание SQLDMO DTypeDateTime -2 Специальный тип ODBC Ч SQL TIMESTAMP STRUCT SQLDMO DTypeDateTime4 93 Специальный тип ODBC Ч SQL TIMESTAMP STRUCT SQLDMO_DTypeFloat4 7 Числовой тип с плавающей запятой (4 байта) SQLDMO_DTypeFloat8 8 Числовой тип с плавающей запятой (8 байт) SQLDMO_DTypeGUID - 1 Глобальный уникальный идентификатор (GUID) SQLDMO DType Image -4 Двоичный тип переменной длины SQLDMO DTypelntl -6 Положительный числовой тип (1 байт) SQLDMO_DTypeInt2 5 Числовой тип со знаком (2 байта) SQLDMO_DTypeInt4 4 Числовой тип со знаком (4 байта) SQLDMO DTypeMoney Денежный тип SQLDMO DTypeMoney4 Расширенный денежный тип SQLDMO_DTypeNText Расширенный строковый тип (Unicode) - SQLDMO DtypeSQLVariant Любой тип данных, поддерживаемый SQL - Server SQLDMO_DTypeText -1 Расширенный строковый тип SQLDMO_DTypeUChar -8 Строковый тип фиксированной длины (Unicode) SQLDMO_DTypeUnknown 0 Ошибочный тип SQLDMO_DTypeUVarchar -9 Строковый тип переменной длины (Unicode) Двоичный тип переменной длины SQLDMO_DTypeVarBinary - SQLDMO_DTypeVarchar 12 Строковый тип переменной длины Основной метод GetColumnString объекта QueryResults позволяет получить значение результата запроса, находящееся в определенной строке и поле.
Метод GetCoiumnstring имеет два параметра Ч номер строки и номер ко лонки (поля).
В листинге 6.15 приведен пример выполнения SQL-запроса и вывода ре зультата на экран в виде таблицы значений.
250 Глава Попытка ИмяБазыДанных = "Northwind";
СтрокаЗапроса = "SELECT * FROM Customers";
Т3_3апроса = СоздатьОбъект("ТаблицаЗначений");
Состояние("Выполнение запроса...");
QueryResults = SQLServer.Databases(ИмяБазыДанных).ExecuteWithResults (СтрокаЗапроса);
Состояние("Преобразование данных...");
// Заполняем таблицу, перебирая результаты запроса по строкам Для НомерСтроки = 1 по QueryResults.Rows Цикл Если НомерСтроки = 1 Тогда // Формируем колонки в таблице с именами, // взятыми из результатов запроса и соответствующего типа Для НомерКолонки = 1 по QueryResults.Columns Цикл // Вставляем колонку Т3_3апроса.ВставитьКолонку(QueryResults.ColumnName (НомерКолонки), НомерКолонки, "Строка",,, QueryResults.ColumnName (НомерКолонки),15,) ;
КонецЦикла;
КонецЕсли;
// Добавляем строчку Т3_3апроса.НоваяСтрока();
// Поколоночно пишем в таблицу данные Для НомерКолонки = 1 по QueryResults.Columns Цикл ТЗ_Запроса.УстановитьЗначение(НомерСтроки, НомерКолонки, QueryResults.GetColumnString(НомерСтроки,НомерКолонки));
КонецЦикла;
КонецЦикла;
// Показать таблицу Т3_3апроса.ВыбратьСтроку();
Исключение Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
Использование SQL-DMO Данный пример является универсальным, т. е. в переменную строкаЗапроса можно поместить произвольный текст запроса, и при этом по-прежнему будет корректно выводиться результат выполнения запроса. Это достигается благодаря наличию свойств ROWS, columns и CoiumnName у объекта QueryResuits. В результате обработки объекта QueryResuits получаем таб лицу значений, содержащую результаты выполнения запроса.
Таким образом, как следует из данного примера, общий алгоритм выполне ния произвольного запроса следующий:
1. С ПОМОЩЬЮ метода ExecuteWithResults объекта Database Получаем объ ект QueryResuits, содержащий результат выполнения запроса.
2. Для инициализации колонок результирующей таблицы значений обходим все поля объекта QueryResuits, с помощью свойства CoiumnName получа ем имена полей, после чего создаем одноименные колонки в таблице значений. Количество полей определяется свойством columns.
3. Построчно обходим все записи объекта QueryResuits. Количество запи сей определяется свойством ROWS.
4. Для каждой записи обходим все поля объекта QueryResuits, с помощью метода Getcoiumnstring получаем значения соответствующих ячеек и по мещаем их в результирующую таблицу значений.
Резервирование и восстановление базы данных Для создания резервной копии базы данных предназначен объект Backup.
Рассмотрим основные свойства этого объекта.
П Action Ч свойство, определяющее, по отношению к чему выполнять действия резервирования данных (возможные значения свойства пере числены в табл. 6.4);
П Database Ч имя резервируемой базы данных;
П Files Ч имя файла резервных данных;
О MediaName Ч дополнительное описание, помогающее в идентификации резервной копии;
П BackupSetDescription Ч основное описание резервной копии;
П BackupSetName Ч идентификатор резервной копии.
Метод SQLBackup объекта Backup предназначен для создания резервной ко пии и, имеет один параметр Ч ссылку на объект SQLServer.
252 Глава б Таблица 6.4. Возможные значения свойства Action объекта Backup Константа SQL-DMO Значение Описание SQLDMOBackup_Database О Резервирование всей базы данных SQLDMOBackup_Files 2 Резервирование только определенных файлов SQLDMOBackup_Incremental I Дифференциальное резервирование, т. е. копируются файлы, созданные или измененные с момента последнего ре зервирования SQLDMOBackup_Log Резервирование только файла тран закций В листинге 6.16 приведен пример полного резервирования базы данных Northwind в файл C:\BACKUP\Northwind.bak.
! Листинг 6.16. Создание резервной копии базы данных Northwind Backup = СоздатьОбъект("SQLDMO.Backup");
Backup.Action = 0;
Backup.Database = "Northwind";
Backup.Files = "C:\BACKUP\Northwind.bak";
Backup.MediaName = "Northwind.bak " + РабочаяДата() + " " + ТекущееВремя();
Backup.BackupSetName = "Northwind";
Backup.BackupSetDescr-iption = "Резервная копия";
Backup.SQLBackup(SQLServer);
Для восстановления созданной ранее резервной копии предназначен объект Restore.
Рассмотрим основные свойства этого объекта.
О Action Ч описывает по отношению к чему выполнять восстановление данных (возможные значения свойства перечислены в табл. 6.5);
П Database Ч имя базы данных, для которой восстанавливаются данные;
П Files Ч имя файла резервной копии;
П FiieNumber Ч порядковый номер записи резервной копии;
П RepiaceDatabase Ч признак замены резервного образа базы данных (свойство может принимать значение -1 Ч истина и о Ч ложь);
О LastRestore Ч признак восстановления последних записей файла тран закций (свойство может принимать значение -1 Ч истина и о Ч ложь).
Использование SQL-DMO Таблица 6.5. Возможные значения свойства Action объекта Restore Константа SQL-DMO Значение Описание SQLDMORestore_Database 0 Восстановление всей базы данных SQLDMORestore_Files 1 Восстановление только определенных файлов SQLDMORestore_Log 2 Восстановление только файла тран закций В листинге 6.17 приведен пример восстановления базы данных Northwind из ранее созданного резервного файла C:\BACKUP\Northwind.bak.
иЩшмНМИНцимиррГ-"^~"^ИИИНИИК~"-"" ~Ч~" " "Щ:v"ЧЧ~ "-~-r-'~-"" -, j | Листинг 6.17. Восстановление базы данных Northwind из резервной копии Restore = СоздатьОбъект("SQLDMO.Restore");
Restore.Action = 0;
Restore.Database = "Northwind";
Restore.Files = "C:\BACKUP\Northwind.bak", Restore.FileNuraber = 1;
Restore.ReplaceDatabase = -1;
Restore.LastRestore = -1;
Restore.SQLRestore(SQLServer);
Настройка ограничений доступа к данным Для настройки офаничений доступа к базе данных в SQL-DMO существует три объекта:
П Login Ч предназначен для управления параметрами аутентификации для контроля доступа к SQL-серверу;
П DatabaseRole Ч предназначен для управления списком ролей базы данных;
П user Ч предназначен для управления списком пользователей базы данных.
Объект Login используется для создания или модификации регистрацион ных имен пользователей SQL Server и их атрибутов. Объект Login имеет следующие свойства.
CD Name Ч ИМЯ пользователя В формате "Имя домена\Имя пользователя";
П туре Ч тип пользователя (возможные значения свойства перечислены в табл. 6.6);
П DenyNTLogin Ч признак запрета Windows NT авторизации пользователя.
254 Глава ^ Примечание Если свойство DenyNTLogin установлено в -1 (Истина), то любая попытка Windows NT авторизации при подключении к SQL-серверу отвергается им. Ес ли свойство установлено в 0 (Ложь) Ч Windows NT авторизация разрешена.
Таблица 6.6. Возможные значения свойства туре объекта Login Значение Описание Константа SQL-DMO SQLDMOLogin_NTGroup Имя пользователя SQL Server ссылается на группу пользователей, определенную в Windows SQLDMOLogin_NTUser О Имя пользователя SQL Server ссылается на пользователя, созданного в Windows SQLDMOLogin_Standard 2 Стандартный пользователь с SQL Server авторизацией В листинге 6.18 приведен пример создания нового пользователя SQL Server с именем "MAVcoMP\mav" и Windows NT авторизацией.
6.18. Создание регистрационного имени пользователя Login = СоздатьОбъект ("SQLDMO. Login" ) ;
Login. Name = " MAVCOMP \rnav ";
Login. Type = 1;
SQLServer. Logins. Add(Login) ;
Как следует из приведенного примера, добавление нового пользователя ПРОИЗВОДИТСЯ С ПОМОЩЬЮ Метода Add КОЛЛеКЦИИ Logins Объекта SQLServer.
Если свойство туре имеет значение 2 (SQLDMOLogin_standard), то для поль зователя можно установить пароль с помощью метода setPassword. Общий синтаксис данного метода следующий:
Login. SetPassword ("старый пароль", "новый п а р о л ь " ).
Примечание ] Если ранее пароль не вводился, то в первом параметре указывается пустая строка.
Для удаления пользователя SQL-сервера в SQL-DMO предназначен метод Remove объекта User. Для удаления ранее созданного пользователя достаточ но выполнить команду:
SQLServer. Logins ( "MAVCOMPXmav" ). Remove ( ).
Использование SQL-DMO Второй рассматриваемый объект DatabaseRoie. Он предназначен для управ ления списком ролей базы данных. Microsoft SQL Server имеет ряд стан дартных ролей, описанных в табл. 6.7.
Таблица 6.7. Список стандартных ролей Microsoft SQL Server Описание Имя роли Db_owner Разрешены любые действия над базой данных Db_accessadmin Разрешено добавление и удаление пользователей базы данных Db_datareader Разрешено чтение любых таблиц Db_datawriter Разрешено вносить изменения в записи таблиц Db_ddladmin Разрешен запуск DDL (Data Definition Language Ч язык определения данных) команд Db_securityadmin Разрешена модификация прав и изменение ролей Db_backupoperator Разрешено выполнение резервного копирования базы Backs up the database данных Db_denydatareader Запрещено любое чтение данных из таблиц Db_denydatawriter Запрещено любое добавление, изменение или удале ние записей в таблицах или представлениях Помимо стандартных ролей SQL-сервер может иметь и роли приложений (Application Roles), которые в SQL-DMO можно создавать с помощью объ екта DatabaseRoie.
Рассмотрим основные свойства объекта DatabaseRoie.
П Name Ч ИМЯ роли.
О AppRole Ч признак роли приложения. Свойство может принимать значе ние -1 (Истина) и о (Ложь).
Примечание Если свойство установлено в -1 (Истина), то для роли необходимо заполнить свойство Password.
П Password Ч пароль.
В листинге 6.19 приведен пример создания новой роли базы данных.
256 Глава -----,,Ч.
-Ч ГЧгЧ--Хv------."--:-Ч-ЧЧЧ 7Т" " " "Ч. " -Ч -Х.-,.- Ч..
1нг 6.19. Создание новой роли базы данных Nor thwind DbRole = Co3flaTbO6beKT("SQLDMO.DatabaseRole");
DbRole.Narae = "AppRole";
DbRole.AppRole = -1;
DbRole.Password = "erpg_ru";
SQLServer.Databases("Northwind").DatabaseRoles.Add(DbRole);
Добавление новой роли производится с помощью метода Add коллекции DatabaseRoles объекта Database. Удаление роли происходит при помощи метода Remove объекта DatabaseRoie. Для удаления ранее созданной роли достаточно выполнить команду:
SQLServer.Databases("Northwind").DatabaseRoles("AppRole").Remove().
Для создания нового пользователя базы данных в SQL-DMO предназначен объект user. Объект user имеет следующие свойства:
П Name Ч имя пользователя;
П Login Ч регистрационное имя пользователя SQL Server;
П Role Ч имя роли пользователя.
В листинге 6.20 приведен пример создания нового пользователя с именем "MAV" базы Данных Northwind.
истинг 6.20. Создание нового пользователя базы данных Northwind DbUser = Co3flaTb06beKT("SQLDMO.User");
DbUser.Name = "MAV";
DbUser.Login = "MAVCOMP\mav";
SQLServer.Databases("Northwind").Users.Add(DbUser);
Для удаления пользователя базы данных предназначен метод Remove объекта user. Для удаления ранее созданного пользователя достаточно выполнить команду:
SQLServer. Databases("Northwind"). Users("MAV"). Remove().
После того как создан пользователь базы данных, необходимо с по мощью метода Grant определить его права. Права пользователя можно определить отдельно для базы данных, для таблиц, представлений и хра нимых процедур.
В листинге 6.21 приведен пример установки прав для пользователя "MAV".
Использование SQL-DMO Листинг 6.21. Определение прав пользователя "MAV" для базы данных Northwind | Database = SQLServer.Databases("Northwind");
// Установить права к базе данных Northwind Database.Grant(128, "MAV");
// Установить права к таблице Customers Database.Tables("Customers").Grant(63, "MAV");
// Установить права к представлению Invoices Database.Views("Invoices").Grant(63, "MAV");
// Установить права к хранимой процедуре CustOrdersOrders Database.StoredProcedures("CustOrdersOrders").Grant(16, "MAV");
В приведенном примере устанавливаются права доступа к таблице Customers, к представлению invoices, к хранимой процедуре CustOrdersOrders и к базе данных Northwind. Результат установки полного доступа к таблице customers для пользователя "MAV" приведен на рис. 6.1.
Object Properties - Northwind Remissions fi> Object: Щ Customers (dbo) jList all users/user-defined database toles/'publicj List only users/user-defined database toles/public with permissions on this object.
Users/Database Roles/Public i SELECT j INSERT IUPDATE iDELETE ^EXEC JDRI E MAV k ;
,..;
*;
'* Щ \ E и [1 rj. ["] guest Q is'" *j^*" -Hj^ public 5f jf Х T5CJ oPj Iifj Columns...
Справка Отмена OK Рис. 6.1. Установка полного доступа к таблице Customers 9 Зак. Глава Как видно из примера, приведенного в листинге 6.21, метод Grant имеет два параметра:
П номер разрешенных действий;
О имя пользователя базы данных.
Для разных объектов набор разрешенных действий различен.
В табл. 6.8 перечислены значения первого параметра метода Grant объекта Database.
Таблица 6.8. Возможные значения разрешенных действий ДЛЯ объекта Da tabase Константа SQL-DMO Значение Описание SQLDMOPriv AllDatabasePrivs 130944 Разрешены любые действия пользователя над базой данных SQLDMOPriv CreateDatabase 256 Пользователю разрешено соз дание баз данных SQLDMOPriv CreateDefault 4096 Пользователю разрешено соз дание объекта default и вы полнение КОМаНДЫ CREATE DEFAULT SQLDMOPriv CreateFunction 65366 Разрешено создание пользова тельских функций SQLDMOPriv CreateProcedure Разрешено создание хранимых процедур SQLDMOPriv_CreateRule Разрешено создание ролей Разрешено создание таблиц SQLDMOPriv_CreateTable SQLDMOPriv CreateView Разрешено создание представ лений SQLDMOPriv_DumpDatabase 2048 Разрешено создание резервных копий базы данных Оставлено для совместимости SQLDMOPriv_DumpTable с ранними версиями SQL-DMO Разрешено создание резервных SQLDMOPriv DumpTransaction копий файла транзакций В табл. 6.9 перечислены возможные значения разрешенных действий для объектов Table И View.
Использование SQL-DMO Таблица 6.9. Возможные значения разрешенных действий для объектов Table И View Константа SQL-DMO Значение Описание SQLDMOPriv_A110bjectPrivs 63 Разрешены любые действия пользо вателя над таблицей или представ лением SQLDMOPriv Delete Разрешено удаление записей и ис пользование оператора DELETE SQLDMOPriv Insert Разрешена вставка записей и ис пользование оператора INSERT SQLDMOPriv References Разрешено создание связей между таблицами с помощью внешних ключей SQLDMOPriv Select Разрешена выборка данных с по мощью оператора SELECT SQLDMOPriv Update Разрешено использование операто ра UPDATE В табл. 6.10 перечислены возможные значения разрешенных действий для объекта StoredProcedure.
Таблица 6.10. Возможные значения разрешенных действий ДЛЯ объекта StoredProcedure Константа SQL-DMO Значение Описание SQLDMOPriv_A110bjectPrivs 63 Разрешены любые действия пользо вателя над хранимой процедурой SQLDMOPriv Execute 16 Разрешен запуск хранимой про цедуры Для того чтобы отключить соответствующее право в SQL-DMO, предназна чен метод Revoke, который по синтаксису аналогичен методу Grant.
В листинге 6.22 приведен программный код, отменяющий все установлен ные ранее (листинг 6.21) права.
260 Глава I Листинг 6.22. Отмена установленных прав i для базы данных Northwind '--ХЧЧ Database = SQLServer.Databases("Northwind");
// Отмена прав к базе данных Northwind Database.Revoke(128, "MAV");
// Отмена прав к таблице Customers Database.Tables("Customers").Revoke(63, "MAV");
// Отмена прав к представлению Invoices Database.Views("Invoices").Revoke(63, "MAV");
// Отмена прав к хранимой процедуре CustOrdersOrders Database.StoredProcedures("CustOrdersOrders").Revoke(16, "MAV") Глава Команды управления Windows, использующие rundl! Понятие rundl! Microsoft Windows имеет в своем составе утилиту командной строки Rundll32.exe, которая позволяет запускать некоторые команды, заложенные в DLL-файлах.
Данная утилита была разработана для внутреннего пользования программи стами Microsoft. Однако богатые возможности этой программы дают повод использовать ее обычными программистами при разработке собственных приложений. Список команд, реализуемых Rundll32.exe, слишком обширен.
Поэтому в данной главе будут приведены только наиболее значимые.
Для использования команд данной утилиты во встроенном языке системы "1С:Предприятие" достаточно вызвать оператор запуститьПриложение, в па раметре которого указать необходимую команду. Например, для открытия панели управления необходимо вызвать следующую команду:
ЗапуститьПриложение ("RunDLL32.EXE shel!32.dll,Control_RunDLL").
При использовании команд rundll32 следует учитывать следующие особен ности.
П В разных версиях операционных систем имеется свой набор доступных команд, поэтому в данной главе, при указании команды, будут перечис лены операционные системы, в которых она доступна.
П Некоторые команды зависят от установленных в операционной системе компонент. Поэтому возможны ситуации, когда определенные команды будут недоступны, либо результат их выполнения в разных системах бу дет отличаться.
П Почти все команды должны вводиться с учетом регистра.
Глава Запуск элементов панели управления С помощью утилиты rundl!32 можно запускать элементы панели управления.
Все команды, отвечающие за их запуск, находятся в модуле Controi_RunDLL библиотеки shell32.dll.
В табл. 7.1 приведены наиболее значимые команды, запускающие элементы панели управления.
Таблица 7.1. Команды rundl!32, запускающие элементы панели управления Команда Описание команды Открывает диалог Специальные возможно- RunDLL32. EXE сти на закладке Экран. shel!32. dll, Control_ RunDLL access.cpl,, Доступна в Windows 95/98/ME/NT4/2000/XP/ Открывает диалог Специальные возможно- RunDLL32. EXE сти на закладке Общие. she!132.dll,Control_ RunDLL access.cpl,, Доступна в Windows 95/98/ME/NT4/2000/XP/ Открывает диалог Специальные возможно- RunDLL32. EXE сти на закладке Клавиатура. shell32.dll,Control_ _ RunDLL access.cpl,, Доступна в Windows 95/98/ME/NT4/2000/XP/ Открывает диалог Специальные возможно- RunDLL32. EXE сти на закладке Мышь. shel!32.dll,Control_ Д RunDLL access.cpl,, Доступна в Windows 95/98/ME/NT4/2000/XP/ Открывает диалог Специальные возможно- RunDLL32. EXE сти на закладке Звук. shel!32. dll, Control_ _ RunDLL access.cpl,, Доступна в Windows 95/98/ME/NT4/2000/XP/ Открывает диалог Установка и удаление RunDLL32. EXE программ на закладке Замена и удаление shel!32.dll, Control_ программ. RunDLL a p p w i z. c p l,, Доступна в Windows XP/ Открывает диалог Установка и удаление RunDLL32. EXE программ на закладке Установка новой she!132.dll,Control_ программы. RunDLL appwi z. cpl,, Доступна в Windows 95/98/ME/NT4/2000/XP/ Команды управления Windows, использующие rundl!32 Таблица 7.1 (продолжение) Описание команды Команда Открывает диалог Установка и удаление RunDLL32. EXE программ на закладке Выбор программ по Shell32.dll, Control_ RunDLL appwiz.cpl,, умолчанию.
Доступна в Windows XP Открывает диалог Установка и удаление RunDLL32. EXE программ на закладке Добавление и уда- shel!32. dll, Control_ RunDLL appwi z. cpl,, ление компонентов Windows.
Доступна в Windows 95/98/ME/NT4/2000/XP/ Установка панели управления из резервной RunDLL32. EXE копии. shel!32.dll,Control_ FillCache RunDLL Доступна в Windows 95/98/ME/NT4/2000/XP/ Открыть Панель управления. RunDLL32.EXE shell32.dll,control_ Доступна в Windows 95/98/ME/NT4/2000/XP/ Открывает диалог Экран на закладке RunDLL32. EXE shel!32.dll,Control_ Оформление.
J*unDLL deskХ с?1 ХХ Доступна в Windows 95/98/ME/NT4/2000/XP Открывает диалог Экран на закладке Фон. RunDLL32. EXE ^he:[;
T1^2-d1?-' Со^1:г1 Доступна в Windows 95/98/ME/NT4/2000/XP RunDLL d e s k. c p l,, Открывает диалог Экран на закладке RunDLL32. EXE she!132.dll,Control_ Заставка.
RunDLL desk.cpl,, Доступна в Windows 95/98/ME/NT4/2000/XP/ Открывает диалог Экран на закладке RunDLL32. EXE shel!32.dll,Control_ Настройка.
RunDLL desk.cpl,, Доступна в Windows 95/98/ME/NT4/2000/XP/ Открывает диалог Экран на закладке Темы. RunDLL32. EXE Доступна в Windows Открывает диалог Экран на закладке Темы. RunDLL32. EXE.,.-. shell32.dll,Control Доступна в Windows XP RunDLL degk ' cpl/ f _ ОТКРЫТЬ папку Шрифты. RunDLL32. EXE SHELL32.DLL,SHHelpShortcuts RunDLL Sows 95/98/ME/NT4/2000/XP/ Глава Таблица 7.1 (продолжение) Описание команды Команда Открыть папку Шрифты. RunDLL32. EXE shel!32.dll,Control_ Доступна в Windows 95/98/ME RunDLL main, cpl @ Открывает диалог Игровые устройства на RunDLL32. EXE закладке Контроллеры. shell32.dll,Control_... RunDLL j o y. cpl Доступна в Windows 95/98/ME/NT4/2000/XP/ Открывает диалог Свойства системы на за- RunDLL32. EXE кладке Общие. shell32.dll,Control_ RunDLL а Доступна в Windows 95/98/ME/NT/2000/XP У***-ср Открывает программу Диспетчер устройств. RunDLL32.EXE devmgr.dll Доступна в Windows 2000/XP/2003 DeviceManager_Execute Открывает диалог Свойства обозревателя. RunDLL32. EXE Доступна shell32.dll,Control_ в Windows 95/98/ME/NT4/2000/XP/2003 :cpl. cpl,, tt Открывает диалог Свойства обозревателя RunDLL32. EXE на закладке Общие. shel!32. dll, Control_... RunDLL inetcpl. cpl,, О Доступна в Windows 95/98/M E/NT4/2000/XP/ Открывает диалог Свойства обозревателя RunDLL32. EXE на закладке Конфиденциальность. shel!32. d l l, Control_ unDLL ^etcPl Х Ч>1,, Доступна в Windows NT4/2000/XP/ Открывает диалог Свойства обозревателя RunDLL32. EXE на закладке Безопасность. shell32.dll,Control_ R u n D L L inetc Pl -СР!" Доступна в Windows NT4/2000/XP/ Открывает диалог Клавиатура на закладке RunDLL32. EXE Языки и раскладки. shell32.dll,Control_ RunDLL m a i n c p l @ll Доступна в Windows 2000/XP/2003 ' ' Открывает диалог Клавиатура на закладке RunDLL32. EXE Скорость she!132.dll,Control_ RunDLL m a i n 'cpl @г Доступна в Windows 2000/XP/2003 ' Открывает диалог Телефон и модем RunDLL32. EXE на закладке Модемы. SHELL32. DLL, Control_,-, RunDLL modem, cpl,, add в Windows 95/98/ME/NT4/2000/XP/2003 RunDLL32. EXE shel!32.dll,Control_ RunDLL modem.cpl RunDLL32.EXE SysDM.cpl,InstallDevice RunDLL Modem Команды управления Windows, использующие rundl!32 Таблица 7.1 (продолжение) Команда Описание команды Открывает диалог Свойства мыши RunDLL32.EXE на закладке Кнопки мыши. shell32. dll, Control_ n IAI- -i onnn/vr>/r,,-.r,'1 RunDLL main.cpl @ 0, Доступна в Windows 2000/XP/ Открывает диалог Свойства мыши RunDLL32. EXE на закладке Оборудование. shel!32.dll, Control_ п vr,/or./-.o RunDLL main.cpl @0, Доступна в Windows XP/ Открывает диалог Свойства мыши RunDLL32. EXE на закладке Опции. shel!32. dll, Control_ п \/1-,//->ог> RunDLL m a i n. c p l @ 0, Доступна в Windows XP/ Открывает диалог Свойства мыши RunDLL3 2. EXE на закладке Указатели. shel!32. dll, Control_ ч/п//чол^ RunDLL main.cpl @0, Доступна в Windows XP/ Открывает диалог Свойства мыши RunDLLS 2. EXE на закладке Действия. shel!32. dll, Control_ x/i-1/г.плл, RunDLL main.cpl @ 0, Доступна в Windows XP/ Открывает диалог Звуки и мультимедиа RunDLLS 2. EXE на закладке Звуки. shel!32.dll,Control_ Доступна в Windows 95/98/ME/NT4/2000 RunDLL mmsys. cpl,, О Открывает диалог Звуки и мультимедиа RunDLL32. EXE на закладке CD-ROM. shell32. dll, Control_ -_._Д...._...._.. RunDLL m m s y s. c p l,, Доступна в Windows 95/98/ME/NT Открывает диалог Звуки и мультимедиа RunDLL32. EXE на закладке Устройства. she 1132.dll, Control_ Х,г-/чт. RunDLL mmsys. cpl,, Доступна в Windows 95/98/ME/NT Открывает диалог Звуки и мультимедиа RunDLL32. EXE на закладке MIDI. shell32.dll,Control_ _,.,,..г-Лпч RunDLL mmsys. cpl,, Доступна в Windows 95/98/ME/NT Открывает диалог Звуки и мультимедиа RunDLL32. EXE на закладке Аудио. shell32.dll,Control_ lsys С] Доступна в Windows 95/98/ME/NT4/2000 ' Открывает диалог Сетевые свойства. RunDLL32. EXE г-/г,г,/ш- shel!32.dll, Control Доступна в Windows 95/98/ME ^ cpl RunDLL netc Открывает диалог Настройки ODBC RunDLL32. EXE источников данных. shel!32.dll,Control_ RunDLL odbccp32.cpl Доступна в Windows 95/98/ME/NT4/2000/XP/ Глава Таблица 7.1 (продолжение) Команда Описание команды Открывает диалог Пароли. RunDLL32. EXE f e ^ T 3 2 ' dH- Control Доступна в Windows 95/98/ME RunDLL password.cpl Открывает диалог Свойства PCMCIA. RunDLLS2. EXE Доступна в Windows 95/98/ME Открывает диалог Управление питанием RunDLLS2. EXE на закладке Схемы. 132.dll, Control_ Доступна в Windows 95/98/ME/NT4/2000/XP Открывает диалог Электропитание RunDLLS2. EXE на закладке Схемы. shel!32. dll, Control^ lunDLL U PS-C^ Доступна в Windows NT4/2000/XP Открывает диалог Языки и стандарты RunDLL32. EXE на закладке Денежная единица. shell32. dll, Control_ _ RunDLL i n t l. c p l,, Доступна в Windows 95/98/ME/NT4/2000/XP/ Открывает диалог Языки и стандарты RunDLLS2. EXE на закладке Дата. s h e l l 3 2. d l l, Control^ unDLL i n t l 'cpl" Доступна в Windows 95/98/ME/NT4/ Открывает диалог Языки и стандарты RunDLLS2. EXE на закладке Общие. shell32.dll,Control_ Доступна в Windows 95/98/ME/NT4/2000 RunDLL intl. cpl,, О Открывает диалог Языки и стандарты RunDLL32. EXE на закладке Языки и раскладки. shell32.dll,Control_ Доступна в Windows 95/98/ME/NT4/2000 RunDLL intl. cpl,, Открывает диалог Языки и стандарты RunDLLS2. EXE на закладке Числа. shel!32.dll,Control_ RunDLL Доступна ^1. c p l,, в Windows 95/98/ME/NT4/2000XP/ Открывает диалог Языки и стандарты RunDLLS2. EXE на закладке Время. shel!32.dll,Control_ Доступна в Windows 95/98/ME/NT4/2000 RunDLL intl. cpl,, Открывает диалог Звуки и мультимедиа. RunDLLS2. EXE Доступна в Windows 95/98/ME/NT4 shel!32.dll, Control RunDLL mmsys.cpl @ Открывает диалог Звуки и аудиоустройства RunDLLS 2. EXE на закладке Аудио. shel!32.dll,Control_ RunDLL Доступна в Windows XP/2003 Щл=уs. cpl,, Команды управления Windows, использующие rundl!32 Таблица 7.1 (продолжение) Описание команды Команда Открывает диалог Звуки и аудиоустройства RunDLL32. EXE на закладке Оборудование. shell32. dll, Control_ _ wn/^ллл RunDLL ramsys.cpl,, Доступна в Windows XP/ Открывает диалог Звуки и аудиоустройства RunDLL32. EXE на закладке Звуки. shel!32.dll,Control_ Хч..,- -i RunDLL m m s y s. c p l,, !
\fi-4nnnn Доступна в Windows XP/ Открывает диалог Звуки и аудиоустройства RunDLL32. EXE на закладке Речь. shel!32.dll,Control^ ч/г,/^лло RunDLL mmsys.cpl,, Доступна в Windows XP/ Открывает диалог Звуки и аудиоустройства RunDLL32. EXE на закладке Громкость. shel!32. dll, Control_ RunDLL m m s y s. c p l,, О Доступна в Windows XP/ Открывает диалог Свойства системы RunDLL32.EXE на закладке Дополнительно. shel!32.dll, Control_ RunDLL s y s d m. c p l,, Доступна в Windows XP/ Открывает диалог Свойства системы RunDLL32. EXE на закладке Восстановление системы. shel!32.dll,Control_ RunDLL s y s d m. c p l,, Доступна в Windows XP/ Открывает диалог Свойства системы RunDLL32. EXE на закладке Автоматическое обновление. shel!32. dll, Control_ RunDLL sysdm.cpl,, Доступна в Windows XP Открывает диалог Свойства системы RunDLL32. EXE на закладке Имя компьютера. shel!32. dll, Control_ RunDLL sysdm.cpl,,!
Доступна в Windows XP/ Открывает диалог Свойства системы RunDLL3 2. EXE на закладке Общие. shel!32. dll, Control_ RunDLL sysdm.cpl,,О Доступна в Windows 95/98/ME/NT4/2000/XP/ Открывает диалог Свойства системы RunDLL32. EXE на закладке Оборудование. shel!32. dll, Control Доступна в Windows NT4/2000/XP/ Открывает диалог Свойства системы RunDLL32. EXE на закладке Сетевая идентификация. shel!32. dll, Control_ RunDLL sysdm.cpl,,!
Доступна в Windows NT4/ Открывает диалог Свойства системы RunDLL32. EXE на закладке Удаленное использование. shel!32. dll, Control_ RunDLL sysdm.cpl,,б Доступна в Windows XP Глава Таблица 7.1 (окончание) Команда Описание команды Открывает диалог Свойства системы RunDLL32. EXE на закладке Удаленное использование. shel!32.dll, Control_ RunDLL sysdm.cpl,, Доступна в Windows Открывает диалог Свойства системы RunDLL32. EXE на закладке Дополнительно. shel!32.dll, Control_ оЩ/ч/т-> RunDLL s y s d m. c p l,, Доступна в Windows 2000/XP Открывает диалог Свойства системы RunDLL32. EXE на закладке Профили пользователей. shel!32.dll, Control_ RunDLL Доступна в Windows 95/98/ME/NT4/2000/XP sysdm. cpl,, Открывает диалог Телефон и модем. RunDLL32. EXE Доступна shell32.dll,Control_ Leph n 'cpl в Windows 95/98/ME/NT4/2000/XP/ Открывает диалог Темы в Windows 95/98 RunDLL32. EXE при установке Windows Plus. shel!32. dll,Control_ RunDLL themes.cpl Доступна в Windows 95/98/ME Открывает диалог Дата и время. RunDLL32. EXE Доступна shell32.dll,Control_ RunDLL в Windows 95/98/ME/NT4/2000/XP/2003 ^f^ ^ Открывает диалог Дата и время RunDLL32. EXE на закладке Часовой пояс. shell32.dll,Control_ _ RunDLL t i m e d a t e. c p l,, / f Доступна в Windows 95/98/ME/NT4/2000/XP/ Открытие папки Сеть и Удаленный доступ RunDLL32. EXE к сети. she!132.dll,Control_ Доступна в Windows NT4/2000/XP/2003 RunDLL ncpa. cpl Как видно из табл. 7.1, многие команды имеют два параметра, разделенные запятой. Первый параметр обычно указывает на внутренний параметр модуля Controi_RunDLL, второй Ч номер закладки, которую необходимо открыть при открытии соответствующего элемента панели управления. Последний параметр можно опустить, при этом будет открыта закладка, использующаяся в диалоге по умолчанию.
В листинге 7.1 приведено несколько примеров запуска элементов панели управления.
Команды управления Windows, использующие rundl!32 iуправления..
.J // Открывает диалог "Свойства системы" на закладке "Дополнительно" ЗапуститьПриложение("RunDLL32.EXE shel!32.dll,Control_RunDLL sysdm.cpl,, 4") ;
// Открьтает диалог "Свойства системы" на закладке по умолчанию ЗапуститьПриложение("RunDLL32.ЕХЕ shell32.dll,Control_RunDLL sysdm.cpl");
// Открывает диалог "Дата и время" ЗапуститьПриложение("RunDLL32.EXE shel!32.dll,Control_RunDLL timedate.cpl");
// Открывает диалог "Дата и время" на закладке "Часовой пояс" ЗапуститьПриложение("RunDLL32.EXE shel!32.dll,Control^ RunDLL timedate.cpl,,/f");
// Открывает диалог "Свойства мыши" ЗапуститьПриложение("RunDLL32.EXE shell32.dll,Control_RunDLL main.cpl @0") ;
// Открывает диалог "Клавиатура" ЗапуститьПриложение("RunDLL32.EXE shel!32.dll,Control_RunDLL main.cpl 01") ;
Запуск мастеров При работе с операционной системой Microsoft Windows доступно множест во мастеров, позволяющих облегчить выполнение различных действий, на пример, создание нового Dial-Up соединения, подключение сетевых дисков или настройка сети. Все доступные мастера находятся в различных библио теках, поэтому общего правила их вызовов не существует.
В табл. 7.2 приведены команды запуска основных мастеров.
Таблица 7.2. Команды rundl!32, запускающие мастеров выполнения различных действий Команда Описание команды RunDLL32.EXE Запуск мастера очистки рабочего стола.
FLDRCLNR.DLL,Wizard RunDLL Доступна в Windows XP RunDLL32.EXE Запуск мастера создания нового RNAUI.DLL,RnaWizard Dial-Up-соединения.
Доступна в Windows 95/98/ME/NT4/2000XP RunDLL32.EXE Запуск мастера установки сканера SysDM.cpl,InstallDevice_ или цифровой камеры.
RunDLL ImageRunDLL32.EXE Доступна в Windows 95/98/ME/XP wiashext.dll,AddDeviceWasChosen Глава Таблица 7.2 (окончание) Описание команды Команда RunDLL32.EXE Запуск мастера добавления в сетевое netplwiz.dll,AddNetPlaceRunDll окружение.
Доступна в Windows 2000/XP/ RunDLL32.EXE Запуск мастера подключения сетевых USER.DLL,wnetconnectdialog дисков.
Доступна в Windows 95/98/ME RunDLL32.EXE Запуск мастера подключения сетевых shel!32.dll,SHHelpShortcuts_ дисков.
RunDLL Connect Доступна в Windows NT4/2000/XP/ RunDLL32.EXE Запуск мастера сетевой идентификации.
netplwiz.dll,NetAccWizRunDll Доступна в Windows RunDLL32.EXE hnet Запуск мастера настройки сети.
wiz.dll,HomeNetWizardRunDll Доступна в Windows XP RunDLL32.EXE net Запуск мастера новых подключений.
shell.dll, StartNCW Доступна в Windows XP/ RunDLL32.EXE Запуск мастера установки нового принтера.
SHELL32.DLL,SHHelpShortcuts_ Доступна RunDLL AddPrinter в Windows 95/98/ME/NT4/2000/XP RunDLL32.EXE RunDLL.SysDM.cpl,InstallDevice_ RunDLL Printer,, RunDLL32.EXE tcpmo Запуск мастера добавления стандартного nui.dll,LocalAddPortUI TCP/IP-порта принтеров.
Доступна в Windows В листинге 7.2 приведено несколько примеров запуска различных ма-стеров.
// Запуск мастера создания нового Dial-Up-соединения ЗапуститьПриложение("RunDLL32.EXE RNAUI.DLL,RnaWizard"};
// Запуск мастера новых подключений ЗапуститьПриложение("RunDLL32.EXE netshell.dll,StartNCW");
// Запуск мастера установки нового принтера ЗапуститьПриложение("RunDLL32.EXE SHELL32.DLL,SHHelpShortcuts RunDLL AddPrinter");
Команды управления Windows, использующие rundl!32 Работа с сетью Интернет В операционной системе Microsoft Windows существуют множество возмож ностей работы с сетью Интернет, небольшую часть которых можно исполь зовать через утилиту rund!132.
В табл. 7.3 приведены команды, работающие с интернет-технологиями.
Таблица 7.3. Команды rundll32, работающие с интернет-технологиями Описание команды Команда RunDLL32.EXE Установка соединения с Dial-Up-соединением, Rnaui.dll,RnaDial с именем, указанным в параметре ConnectionName ConnectionName.
Доступна в Windows 95/98/ME/NT4/2000/XP Открывает специальные интернет-каналы, где RunDLL32. EXE параметр %1 Ч полный путь к файлу CDF. cdfview.dll,openChannel % Доступна в Windows 95/98/ME/NT4/2000/XP/ Открывает Internet Explorer на странице авто- RunDLL32. EXE ризации почтового ящика HotMail. "%ProgramFiles%\ Internet ExplorerN Доступна hmmapi.dll",OpenInboxHandler в Windows 95/98/ME/NT4/2000/XP/ Открывает диалог Восстановления настроек RunDLL32. EXE setupwbv. dll, Internet Explorer. Поддерживается в Internet lESMaintenance "C:\ Explorer версий 5 и 6. Program FilesUnternet sETUp!EXE" e /g P "%SystemRoot%\ Доступна в Windows 95/98/ME/NT4/2000/XP IE Uninstall L o g. T x t " Открывает подписку на специальный интер- RunDLL32. EXE нет-канал, путь к СВА-файлу которого опре- cdfview. dll, Subscribe % деляется в параметре %1.
Доступна в Windows 95/98/ME/NT4/2000/XP/ Создание нового письма адресату, указан- RunDLL32. EXE u r l. dll, ному в параметре %1. При этом запускается MailToProtocolHandler % почтовая программа, используемая в системе по умолчанию.
Доступна в Windows 95/98/ME/NT4/2000/XP/ Открытие программы чтения групп новостей, RunDLL32.EXE u r l. d l l, имя сервера указывается в параметре %1. NewsProtocolHandler % Доступна в Windows 95/98/ME/NT4/2000/XP/ Глава Таблица 7.3 (окончание) Описание команды Команда Запуск интернет-ресурса с адресом, RunDLL32.EXE u r l. d l l, указанном в параметре % l. FileProtocolHandler % Доступна в Windows 95/98/ME/NT4/2000/XP/ Открытие диалога печати HTML-документа RunDLL32.EXE m s h t m l. d l l, с именем HtmlFileNameAndPath. PrintHTML "HtmlFileNameAndPath" Доступна в Windows 95/98/ME/NT4/2000/XP/ Установить соединение по Telnet-адресу, RunDLL32. EXE u r i. d l l, указанному в параметре %l. TelnetProtocolHandler % Доступна в Windows 95/98/ME/NT4/2000/XP/ В листинге 7.3 приведено несколько примеров использования интернет технологий.
: Листинг 7.3. Работа с Интернетом // Создание нового письма автору ЗапуститьПриложение("RunDLL32.EXE url.dll,MailToProtocolHandler mav@erpg.ru");
// Запуск интернет-страницы автора ЗапуститьПриложение("RunDLL32.EXE url.dll,FileProtocolHandler www.erpg.ru");
// Распечатать заглавную страницу форума автора ЗапуститьПриложение("RunDLL32.EXE mshtml.dll, PrintHTML "" Установка и удаление принтера С помощью rundl!32 можно автоматически установить или удалить принтер.
Для этих целей используется команда:
rund!132 p r i n t u i. d l l, P r i n t U I E n t r y [параметры] [@командный ф а й л ].
^ Примечание Данная команда доступна только в операционных системах Windows 2000/XP/2003.
Команды управления Windows, использующие rundl!32 Рассмотрим возможные параметры данной команды.
О /а [файл] Ч имя двоичного файла;
О /Ь[имя] Ч основное имя принтера;
П /с [имя] Ч UNC-имя компьютера, где выполняется команда;
П /dl Ч удаление локального принтера;
П /dn Ч удаление подключения к сетевому принтеру;
О /dd Ч удаление драйвера принтера;
П /е Ч вывод параметров настройки печати;
П /[файл] Ч информационный или выходной файл;
О /да Ч добавление подключений компьютеров к принтеру;
П /де Ч перечисление подключений компьютеров к принтеру;
П /gd Ч удаление подключений компьютеров к принтеру;
П / h [ a p x ] Ч архитектура драйвера Alpha|Intel|Mips|PowerPC;
П /la Ч установка драйвера принтера с помощью информационного файла;
П /id Ч установка драйвера принтера с помощью мастера установки драй веров принтеров;
П / i f Ч установка принтера с помощью информационного файла;
П /ii Ч установка принтера с помощью мастера установки принтеров и информационного файла;
П / i i Ч установка принтера с помощью мастера установки принтеров;
П /in Ч добавление подключения к принтеру;
О /j [имя] Ч имя системы печати;
П /k Ч печать пробной страницы на выбранном принтере (не может ис пользоваться с другими командами установки принтера);
П /I [путь] Ч путь к исходному размещению драйвера принтера;
П /т [модель ] Ч имя модели драйвера принтера;
П / п [ и м я ] Ч имя принтера;
О /о Ч показать очередь заданий на печать;
П /р Ч отображение свойств принтера;
П /q Ч скрытый режим без вывода сообщений об ошибках;
П /г [порт] Ч имя порта;
П /s Ч показать свойства сервера;
П /ss Ч запись параметров принтера в файл;
ШЗак. Глава П /sr Ч чтение параметров принтера из файла, при этом флаги, исполь зуемые при записи или чтении параметров принтера и помещаемые в кон це команды, могут принимать значения:
Х с Ч профиль цвета;
Х d Ч данные принтера;
Х s Ч дескриптор безопасности;
Х g Ч глобальный режим;
Х m Ч минимальный набор параметров;
Х и Ч пользовательский режим;
, Х г Ч разрешить конфликты имен;
Х f Ч принудительное использование имени;
Х р Ч сопоставить порт;
П /и Ч использовать существующий драйвер принтера, если он установлен;
О /t [номер] Ч номер начальной страницы (с нуля);
П / v [ в е р с и я ] Ч в е р с и я драйвера;
П /w Ч запрос драйвера у пользователя, если драйвер не найден в INF-файле;
П /у Ч- назначить принтер используемым по умолчанию;
П /хд Ч получить параметры принтера;
П /хз Ч установить параметры принтера;
О /z Ч не разрешать автоматический общий доступ к этому принтеру;
О /z Ч общий доступ к принтеру, используется только вместе с параметром / i f.
П Окомандный файл Ч файл аргументов командной строки.
В листинге 7.4 приведено несколько примеров работы с принтером.
f: " -----,-,г~--~~------ЧЧ-.Ч....тт-тЧ.- ---------- - т-- - -Ч ---Ч--- : Листинг 7.4. Работа с принтером // Запуск свойств сервера ЗапуститьПриложение("rundl!32 printui.dll,PrintUIEntry /s /tl /n\\machine");
// Запуск свойств принтера ЗапуститьПриложение("rundl!32 printui.dll,PrintUIEntry /p /n\\machine\printer");
// Локальный запуск мастера установки принтеров ЗапуститьПриложение("rundl!32 printui.dll,PrintUIEntry /il");
// Запуск мастера установки принтеров на компьютере \\machine ЗапуститьПриложение("rundl!32 printui.dll,PrintUIEntry /il /c\\machine' Команды управления Windows, использующие rundl!32 // Запуск показа очереди ЗапуститьПриложение("rundll32 printui.dll,PrintUIEntry /о /n\\machine\printer") ;
// Запуск установки с помощью информационного файла ЗапуститьПриложение("rundl!32 printui.dll,PrintUIEntry /if / b ""Test Printer"" /f %windir%\inf\ntprint.inf /r ""Iptl:"" / m ""AGFA-AccuSet v52.3""");
// Запуск мастера установки принтеров с помощью информационного файла ЗапуститьПриложение("rundl!32 printui.dll,PrintUIEntry /ii /f %windir%\inf\ntprint.inf");
// Добавление подключений компьютеров к принтеру ЗапуститьПриложение("rund!132 printui.dll,PrintUIEntry /ga /c\\machine /n\\machine\printer /j""LanMan Print Services""");
// Удаление подключений компьютеров к принтеру ЗапуститьПриложение("rundl!32 printui.dll,PrintUIEntry /gd /c\\machine /n\\machine\printer");
// Перечисление подключений компьютеров к принтеру ЗапуститьПриложение("rundl!32 printui.dll,PrintUIEntry /ge /c\\machine");
// Добавление драйвера принтера с помощью информационного файла ЗапуститьПриложение("rundl!32 printui.dll,PrintUIEntry /ia /c\\machine /m ""AGFA-AccuSet v52.3"" /h ""Intel"" /v ""Windows 2000"" /f %win dir%\inf\ntprint.inf");
// Удаление драйвера принтера ЗапуститьПриложение("rundl!32 printui.dll,PrintUIEntry /dd /c\\machine /m ""AGFA-AccuSet v52.3"" /h ""Intel"" /v ""Windows 2000""");
// Назначение принтера используемым по умолчанию ЗапуститьПриложение("rundl!32 printui.dll,PrintUIEntry /у /n ""printer""");
// Указание описания принтера ЗапуститьПриложение("rundl!32 printui.dll,PrintUIEntry /Xs /n ""printer"" comment ""My Cool Printer );
// Получение параметров принтера ЗапуститьПриложение("rundl!32 printui.dll,PrintUIEntry /Xg /n ""printer""");
// Получение параметров принтера и запись их в файл ЗапуститьПриложение("rundl!32 printui.dll,PrintUIEntry /f ""results.txt"" /Xg /n ""printer""");
// Справка об установке параметров принтера:
ЗапуститьПриложение("rundl!32 printui.dll,PrintUIEntry /Xs /n ""printer"" ?");
// Запись всех параметров принтера в файл ЗапуститьПриложение("rundl!32 printui.dll,PrintUIEntry /Ss /n ""printer"" /a ""file.dat""");
276 Глава II Чтение всех параметров принтера из файла ЗапуститьПриложение("гипс11132 printui.dll,PrintUI /Sr /n ""printer"" /a ""file.dat""");
// Запись сведений принтера уровня 2 в файл ЗапуститьПриложение("гип<11132 printui.dll,PrintUIEntry /Ss /n ""printer"" /a ""file.dat"" 2");
// Восстановление дескриптора безопасности из файла ЗапуститьПриложение("rundl!32 printui.dll,PrintUIEntry /Sr /n ""printer"" /a ""file.dat"" s");
// Восстановление глобального devmode и данных принтера из файла ЗапуститьПриложение("rundl!32 printui.dll,PrintUIEntry /Sr /n ""printer"" /a ""file.dat"" g d");
// Восстановление набора параметров из файла и разрешение имени порта ЗапуститьПриложение("rundl!32 printui.dll,PrintUIEntry /Sr /n ""printer"" /a ""file.dat"" m p">;
// Выполнение команды, описанной во внешнем файле command.txt ЗапуститьПриложение("rund!132 printui.dll,PrintUIEntry 3command.txt");
Прочие команды Помимо перечисленных ранее команд в Windows существуют и другие, ко торые не поддаются классификации. Например, команды, отвечающие за работу с папкой Портфель, команды открытия файлов, блокировки компью тера и др. Команды этого типа перечислены в табл. 7.4.
Таблица 7.4. Прочие команды rund/ Описание команды Команда Установить каскадное расположение окон RunDLL32. EXE приложений на рабочем столе. USER. DLL, cascadechild Доступна в Windows 95/98/ME Установить расположение окон приложе- RunDLL32. EXE ний на рабочем столе в виде заголовков. USER. DLL, tilechild Доступна в Windows 95/98/ME Создать новую папку Портфель, если эта RunDLL32. EXE функция установлена в системе. SYNCUI. DLL, Brief case_create Доступна в Windows 95/98/ME/NT4/2000/XP Запустить заглавную страницу папки RunDLL32. EXE Портфель. syncui.dll,Briefcase_Intro Доступна в Windows 95/98/ME/NT4/2000/XP Команды управления Windows, использующие rundl!32 Таблица 7.4 (продолжение) Описание команды Команда RunDLL32.EXE Открыть окно Порты панели управления.
shel!32.dll,Control_ Доступна в Windows NT RunDLL ports.cpl Переключить разрешение экрана. Пара- RunDLL32. EXE метры: DESKCP16.DLL,QUICKRES_ RUNDLLENTRY HxVxR н Ч горизонтальное разрешение, напри мер, 640, 800 и т. п.;
V Ч вертикальное разрешение, например, 480, 600 и т. п.;
R Ч глубина цвета, например, 8 (256 цветов), 16, 32 и т. п.
Доступна в Windows 95/98/ME Запуск программы копирования дискет. RunDLL32. EXE Доступна DISKCOPY.DLL,DiskCopyRunDll в Windows 95/98/ME/NT4/2000/XP Запуск программы форматирования RunDLL32. EXE дискеты. SHELL32.DLL,SHFormatDrive Доступна в Windows 95/98/ME/NT4/2000/XP Перерисовка (обновление) экрана. RunDLL32..EXE Доступна в Windows 95/98/ME USER. DLL, repaintscreen Открытие DUN-сервера. RunDLL32. EXE Доступна в Windows 95/98/ME rnaserv.dll,CallerAccess Запуск программы быстрого поиска RunDLL32. EXE (если установлена). shel!32.dll,Control_ Д RunDLL findfast.cpl Доступна в Windows 95/98/ME/NT4/2000/XP Запуск диалога открытия файла с именем RunDLL32. EXE FileName. SHELL32.DLL,OpenAs_ RunDLL FileName Доступна в Windows 95/98/ME/NT4/2000/XP/ Открывает диалог Отключение RunDLL32. EXE и извлечение аппаратного устройства. shel!32. dll, Control RunDLL h tplug'd:
Доступна в Windows 2000/XP/ Открывает диалог Упорядочить избранное. RunDLL32. EXE _ shdocvw.dll,DoOrganizeFavDlg Доступна в Windows 95/98/ME/NT4/2000/XP/ Глава Таблица 7.4 (продолжение) Описание команды Команда Отключение клавиатуры. RunDLL32.EXE KEYBOARD, disable Доступна в Windows 95/98/ME Открывает Microsoft Exchange профиль. RunDLL32.EXE flocTy^W^dowsQ^e/ME Открывает Microsoft Postoffice Workgroup RunDLL32. EXE Admin shell32.dll,Control_ RunDLL л9Pcpl Хc?1 ~ Доступна в Windows 95/98/ME Установка времени двойного щелчка мыши. RunDLL32.EXE USER.DLL, Значение Value указывается SetDoubleClickTime Value в миллисекундах.
Доступна в Windows 95/98/ME Переключает левую и правую кнопки мыши. RunDLL32. EXE USER Х DLL ' SwapMouseButton Доступна в Windows 95/98/ME Переключает левую и правую кнопки мыши. RunDLL32. EXE U S E R 3 2 DLL Доступна в Windows NT4 ' ' SwapMouseButton Запуск диалога отключения RunDLL32.EXE USER.DLL, от присоединенного сетевого диска. wnetdisconnectdialog Доступна в Windows 95/98/ME Запуск диалога отключения RunDLL32.EXE shell32.dll, от присоединенного сетевого диска. SHHelpShortcuts_ Доступна в Windows NT4/2000/XP/2003 RunDLL Disconnect Запустить программу "Управление RunDLL32. EXE сервером". shell32.dll,Control_ RunDLL s r v m g r 'cpl Доступна в Windows NT Открыть диалог создания нового общего RunDLL32. EXE ресурса. NTLANUI.DLL,ShareCreate Доступна в Windows NT4/2000/XP/ Открыть диалог общих папок. RunDLL32. EXE Доступна в Windows NT4/2000/XP/2003 NTLANUI. DLL, ShareManage Открытие диалога создания ярлыка для RunDLL32.EXE A p p W i z. C p l, файла, указанного в параметре %1. NewLinkHere % Доступна в Windows 95/98/ME/NT4/2000/XP/ Запуск программы TweakUl, если она RunDLL32. EXE установлена в системе. s h e l l 3 2. d l l, Control_RunDLL Доступна в Windows 95/98/ME/NT4 tweakui. cpl Команды управления Windows, использующие rundl! Таблица 7.4 (окончание) Команда Описание команды RunDLL32.EXE %SystemRoot%\ Открыть файл с изображением, имя кото System32\shimgvw.dll, рого передано в параметре %1, в програм ImageView_Fullscreen % ме просмотра изображений и факсов.
Доступна в Windows XP/ RunDLL32.EXE SHELL32.DLL, Открытие диалога О программе.
ShellAboutW Доступна в Windows 2000/XP/ RunDLL32.EXE SHELL32.DLL, ShellAboutA RunDLL32.EXE SHELL.DLL, Открытие диалога Применить системные RestartDialog настройки для перезагрузки или выклю чения компьютера.
Доступна в Windows 95/98/ME RunDLL32.EXE shell32.dll, Открыть файл, переданный в параметре ShellExec RunDLL % %1, в зарегистрированном для него при ложении.
Доступна в Windows 2000/XP/ RunDLL32.EXE user32.dll, Открыть диалог Заблокировать компью LockWorkStation тер, вызываемый при нажатии комбина ции клавиш .
Доступна в Windows 2000/XP/ В листинге 7.5 приведены примеры использования различных команд rund!132.
// Открытие диалога выбора программы для открытия файла boot.ini ЗапуститьПриложение("RunDLL32.EXE SHELL32.DLL,OpenAs_RunDLL с:\boot.ini");
// Открывает диалог "Отключение и извлечение аппаратного устройства" ЗапуститьПриложение("RunDLL32.EXE shel!32.dll,Control_RunDLL hot plug, dll");
// Открыть изображение в программе просмотра изображений и факсов ЗапуститьПриложение("RunDLL32.EXE %SystemRoot%\System32\shimgvw.dll, ImageView_Fullscreen с:\picture.jpg");
// Открыть файл booklc.doc в зарегистрированном для DOC-файлов приложении ЗапуститьПриложение("RunDLL32.EXE shel!32.dll,ShellExec_RunDLL c:\booklc.doc");
// Заблокировать компьютер ЗапуститьПриложение("RunDLL32.EXE user32.dll,LockWorkStation");
Глава Интернет-технологии Работа с электронной почтой В связи с бурным развитием интернет-программирования поддержка серви са электронной почты стала весьма распространенной задачей для програм мистов.
Чтобы эффективно решить задачу доступа к электронной почте, пользователю, в своей программе, необходимо понять основы ее устройства. Электронная почта представляет собой совокупность протоколов, регламентирующих об мен данными по сети, а также программных средств, реализующих эти про токолы и предоставляющих пользователю соответствующие интерфейсы.
Основными протоколами являются протоколы передачи (отсылки) и чтения писем, которые работают поверх TCP/IP (Transmission Control Protocol/ Internet Protocol Ч протокол управления передачей данных Интернет). Для передачи сообщений по TCP-соединению подавляющее большинство про граммных средств пользуется протоколом SMTP (Simple Mail Transfer Protocol).
Для приема почтовых сообщений в Интернете обычно используется прото кол РОРЗ (Post Office Protocol 3).
Непосредственное использование в конфигурациях системы "1С:Предприятие" команд протоколов SMTP и РОРЗ не представляется возможным. В связи с этим для работы с электронной почтой будут использоваться средства бо лее высокого уровня (внешние компоненты, приложения и стандартные объекты системы).
Использование команды mailto Самый простой способ подготовить письмо для отправки Ч это просто от крыть окно создания нового письма почтового клиента, используемого в системе по умолчанию, воспользовавшись при этом системной командой mailto: (ЛИСТИНГ 8.1).
282 Глава I/ Открывает окно нового сообщения с заполненными полями // "Кому", "Тема" и "Текст сообщения".
ЗапуститьПриложение("mailto:mav@erpg.ru;
boss@erpg.ru?subject= Пример%20темы&Ьос1у=Здавствуйте!%ОЗДоступ%20открыт.");
// Открывает окно нового сообщения с заполненным адресом получателя ЗапуститьПриложение("mailto:mav@erpg.ru");
// Открывает окно нового сообщения с заполненным адресом получателя и полями "Копия" и "Скрытая копия" ЗапуститьПриложение("mailto:mav@erpg.ru?subject=npMMep%20TeMbi&cc= erpgSerpg.ru&bcc=boss@erpg.ru");
Синтаксис команды maiito:
mailto:
Рассмотрим параметры команды:
П subject Ч тема (заголовок) письма;
О ее Ч строка с адресами электронной почты, перечисленными через точку с запятой, указывающая адресатов копии сообщения;
П Ьсс Ч строка с адресами электронной почты, перечисленными через точку с запятой, указывающая адресатов скрытой копии сообщения;
П body Ч текст сообщения без пробелов и знаков переноса строк.
Внимание Обратите внимание, что текст, следующий после команды maiito:, должен быть без пробелов. Для указания пробела в тексте используется метка %20, а для указания символа переноса строки Ч %0d.
Использование интерфейса MAPI Для совместимости и стандартизации программного доступа к приложени ям, которые работают с электронной почтой, Microsoft разработала набор интерфейсов, называемых MAPI (Messaging Application Program Interface).
Архитектура MAPI описывает так называемую подсистему MAPI, которая обеспечивает взаимодействие клиентских приложений с различными служ бами почтовой системы, такими как служба хранения информации, транс портная служба и т. д. Все почтовые клиенты, которые предназначены для функционирования в операционной системе Microsoft Windows, должны поддерживать интерфейсы MAPI. С другой стороны, MAPI Ч это приклад ной интерфейс, который был создан для того, чтобы разработчики на раз Интернет-технологии личных языках программирования, в том числе и на встроенном языке сис темы "1С:Предприятие", имели бы возможность добавлять в свои приложения функцию для работы с электронной почтой. С точки зрения прикладной про граммы, подсистема MAPI Ч это набор динамических библиотек, содержащих функции и объектно-ориентированные интерфейсы, благодаря которым взаи модействуют клиентские и серверные части почтовых приложений. Это значит, что, если в системе функционирует почтовый клиент, совместимый с MAPI (а их подавляющее большинство), то можно обратиться к нему через MAPI интерфейс посредством некоторых вызовов и выполнить нужные операции, например, сформировать и отправить письмо. При этом пользователь обращает ся к почтовому клиенту, используемому в системе по умолчанию, и всего лишь "поручает" ему выполнить необходимые действия. Как он это сделает, зависит лишь от его настроек. Отсюда возникают и минусы, и плюсы.
Основной минус в том, что MAPI ограничивает возможности программиро вания набором своих интерфейсов и функциональными возможностями почтового клиента. Более того, различные почтовые клиенты могут иметь различный набор команд.
Плюсы состоят в том, что всегда можно найти отправленное системой письмо в папке Исходящие или Отправленные, а полученное Ч в папке Входящие почтового клиента. При этом не нужно заботиться о подключении к Интернету (почтовый клиент сам все отправит при первом подключении).
Корпорация Microsoft поставляет элемент управления MSMAPI32.OCX, содер жащий простые компоненты ActiveX, позволяющие работать с MAPI из среды любых языков программирования, поддерживающих OLE-автоматизацию.
ActiveX содержит два объекта: MAPisession и MAPiMessage. MApisession от вечает за установление и окончание сеанса связи с провайдером Интернета.
Его функции и свойства позволяют задать параметры установления соеди нения, а затем, при необходимости, разорвать его. MAPiMessages предостав ляет функции и свойства для работы с почтовыми сообщениями.
Оба объекта можно создать в конфигурации системы "1C:Предприятие".
Для версии 7.7 Ч используется функция создатьобъект, а для версии 8.0 Ч Новый СОМОбъект.
Для инициализации сеанса связи (сессии) необходимо вызвать функцию signdn объекта MAPisession, а для того чтобы использовать объект MAPiMessages, нужно СВЯЗЭТЬ 6ГО С объектом MAPISession (ЛИСТИНГ 8.2). Для завершения сессии вызывается функция signoff объекта MAPisession.
. Инициализация сеанса связи MAPI.Д : : :
// Элемент управления Session SessionCtrl = СоздатьОбъект("MSMAPI.MAPISession") // Элемент управления Messages 284 Глава MessageCtrl = СоздатьОбъект("MSMAPI.MAPIMessages");
// Задаем имя пользователя SessionCtrl.UserName = "MyName";
// Задаем пароль пользователя SessionCtrl.Password = "MyPassword";
// Открываем сессию SessionCtrl.SignOn();
// Связываем элементы управления, используя идентификатор сессии MessageCtrl.SessionID = SessionCtrl.SessionID;
//...
// Закрываем сессию SessionCtrl.SignOff();
Свойства UserName и Password объекта MAPISession задают имя профиля и пароль доступа к нему, если в качестве почтовой системы используется Microsoft Mail. Если же применяется Microsoft Outlook, эти свойства ни на что не влияют, а в качестве активной учетной записи используется учетная запись, выставленная по умолчанию.
Для чтения входящих писем используется метод Fetch, после вызова кото рого заполняется коллекция сообщений объекта MAPiMessages. После за полнения коллекции переменная MessageCtrl содержит письмо с индексом, который определяется свойством Msgindex.
В листинге 8.3 приведен пример вывода содержания писем, находящихся в папке Входящие.
// Элемент управления Session SessionCtrl = СоздатьОбъект("MSMAPI.MAPISession");
// Элемент управления Messages MessageCtrl = СоздатьОбъект("MSMAPI.MAPIMessages");
// Открываем сессию SessionCtrl.SignOn();
// Связываем элементы управления, используя идентификатор сессии MessageCtrl.SessionID = SessionCtrl.SessionID;
.
// Выбирать для отображения все почтовые сообщения.
// Если вы хотите отображать только непрочитанные сообщения, // нужно присвоить свойству FetchUnreadOnly значение -1 (Истина) Интернет-технологии MessageCtrl.FetchUnreadOnly =0;
// Ложь // Выбрать письма MessageCtrl.Fetch();
Для Ном = 0 по MessageCtrl.MsgCount - 1 Цикл // Установить индекс для сообщения MessageCtrl.Msglndex = Ном;
// Сформировать текст из темы и тела почтового сообщения ТекстПисьма = "Тема: " + MessageCtrl.MsgSubject + "Текст: " + MessageCtrl.MsgNoteText;
Сообщить(ТекстПисьма);
КонецЦикла;
// Закрываем сессию SessionCtrl.SignOff();
С помощью данного кода будет получен список всех тем и текстов писем из папки Входящие. Свойства MsgSubject И MsgNoteText объекта MAPIMessages возвращают тему и содержание письма. Возможно получить доступ и к другой информации, заложенной в письмах. Например, для вывода имени и электронного адреса отправителя можно использовать свойства MsgOrigDisplayName И MsgOrigAddress соответственно, СВОЙСТВО MsgDateReceived будет содержать дату получения письма.
Для создания письма снова используется объект MAPIMessages. Перед от правкой нужно задать несколько необходимых параметров и, если нужно, присоединить файлы (листинг 8.4).
// Элемент управления Session SessionCtrl = СоздатьОбъект("MSMAPI.MAPISession");
// Элемент управления Messages MessageCtrl = СоздатьОбъект("MSMAPI.MAPIMessages");
// Открываем сессию SessionCtrl.SignOn();
// Связываем элементы управления, используя идентификатор сессии MessageCtrl.SessionID = SessionCtrl.SessionID;
// Подготовиться к отправке сообщения MessageCtrl.Compose();
286 Глава // Установить e-mail получателя MessageCtrl.RecipAddress = "mav@erpg.ru";
// Установить тему сообщения MessageCtrl.MsgSubject = "Заголовок тестового письма";
// Заполнить тело сообщения MessageCtrl.MsgNoteText = "Это тестовое письмо";
// Присоединяем к письму два файла MessageCtrl.Attachmentlndex = 0;
MessageCtrl.AttachmentPathName = ("C:\filel.txt");
MessageCtrl.Attachmentlndex = 1;
MessageCtrl.AttachmentPathName = ("C:\file2.txt");
// Отправить без отображения стандартного диалога отправки сообщения MessageCtrl.Send(0);
// Закрываем сессию SessionCtrl.SignOff();
Примечание Указывая в качестве параметра метода send значение "Истина" (-1), можно разрешить показ окна Создание нового письма.
Использование компоненты V7Plus.dll Внешняя компонента V7Plus.dll состоит из четырех объектов: WMail, VVSysInfo,VVHttpReader И XMLParser.
^ Примечание В данной главе будет рассматривается только объект работы с электронной по чтой Ч V7Mail, который позволяет работать с любым почтовым клиентом, рабо тающим через MAPI (например, Microsoft Outlook Express или Microsoft Outlook).
Инициализация внешней компоненты осуществляется с помощью метода Загрузитьвнешнююкомпоненту("v7Pius.dll"), а для доступа к свойствам и мето дам объекта необходимо вызвать функцию co3flaTb06beKT("Addin.v7Maii"), которая возвращает ссылку на объект WMail.
Рассмотрим общий алгоритм получения писем:
1. Установка соединения с помощью метода подключиться.
Интернет-технологии 2. Инициализация процесса приема сообщений с помощью метода ВыбратьСообщения.
3. Организация цикла получения сообщений с помощью метода ПолучитьСообщение.
4. С ПОМОЩЬЮ методов ПрочйтатьСообщение И ПолучитьФайл МОЖНО ПОЛу чить доступ к тексту сообщения и присоединенным файлам.
5. С помощью свойств заголовок и Текст можно получить доступ к заго ловку сообщения и его тексту.
6. Завершение работы с почтой происходит с помощью метода Отключиться.
Пример реализации данного алгоритма приведен в листинге 8.5.
ЧЧЧ Ч: г 8.5. Чтение входящих писем через компоненту V7Plus.dll Перем Путь, ИмяФайла;
// Загрузка компоненты V7Plus.dll ЗагрузитьВнешнооКомпоненту("VVPlus.dll");
Почта = СоздатьОбъект("Addln.VVMail");
ТекстДок=СоздатьОбъект("Текст") ;
// Инициализируем сеанс работы с почтой в соответствии //с выбранным на закладке свойств компоненты типом почты и параметрами подключения Почта.Подключиться();
// Инициализируем процесс получения сообщений Почта.ВыбратьСообщения();
Пока Почта.ПолучитьСообщение() = 1 Цикл // Получаем адрес, с которого было отправлено сообщение АдресОтправителя=Почта.АдресОтправителя();
// Тема сообщения Заголовок=Почта.Заголовок;
// Получаем содержимое сообщения (текст и присоединенные файлы) Почта.ПрочйтатьСообщение(0);
// Текст сообщения Текст=Почта.Текст;
// Получить имя и каталог следующего присоединенного файла сообщения Пока Почта.ПолучитьФайл(Путь, ИмяФайла) = 1 Цикл ТекстДок.Открыть(ПутЫ-ИмяФайла);
ТекстДок.ТолькоПросмотр(1);
288 Глава ТекстДок.Показать(Заголовок);
КонецЦикла;
КонецЦикла;
// Завершает сеанс работы с почтой Почта.Отключиться();
Алгоритм отправки сообщения будет состоять из следующих шагов.
1. Установка соединения с помощью метода подключиться.
2. Инициализация процесса создания нового сообщения с помощью метода НовоеСообщение.
3. С помощью метода ДобавитьАдрес можно задать один или несколько адресов получателей.
4. С помощью метода добавитьФайл можно прикрепить один или несколько файлов к сообщению.
5. С помощью свойств Заголовок и текст можно задать заголовок сообще ния и его текст.
6. Отправка сообщения происходит посредством вызова метода послать.
7. Завершение работы с почтой происходит с помощью метода Отключиться.
В листинге 8.6 приведен пример отправки сообщения с помощью компо ненты V7Plus.dll.
// Загрузка компоненты V7Plus.dll ЗагрузитьВнешнююКомпоненту("V7Plus.dll");
Почта = СоздатьОбъект("АоШп.У7Ма11") ;
// Метод Подключиться инициализирует сеанс работы с почтой MAPI // с соответствующими параметрами подключения и паролем.
Почта.Подключиться("MAPI","", " ) ";
// Инициализируем создание нового сообщения Почта.НовоеСообщение();
// Добавляем адрес в список адресов получателей Почта.ДобавитьАдрес("mavgerpg.ru") ;
// Добавляем имя нового файла в список присоединенных файлов сообщения Почта.ДобавитьФайл("С:\file.txt");
// Тема сообщения Интернет-технологии Почта.Заголовок="Привет!";
// Текст сообщения Почта.Текст="Добрый день! Жду результатов совещания.";
// Отправить сообщение Почта.Послать();
// Завершает сеанс работы с почтой Почта.Отключиться();
Е^~" Примечание Подробное описание всех методов и свойств объекта v7Mail можно найти в документации к компоненте.
Так как объект v?Maii компоненты V7Plus.dll работает через интерфейс MAPI, то при работе с ней сохраняются все особенности Ч плюсы и мину сы использования интерфейса MAPI, которые были описаны ранее.
Использование компоненты Rom-Mail.dll Все вышеописанные методы интеграции с электронной почтой используют интерфейс MAPI. Для работы напрямую с почтовыми серверами через про токолы РОРЗ и SMTP в системе "1С:Предприятие 7.7" лучше всего исполь зовать компоненту Rom-Mail.dll, которая распространяется бесплатно авто ром Олегом Ризвановым.
Компонентой поддерживаются следующие функции:
П стандарты MIME, UU-ENCODE;
О кодирование Base64 и QuotedPrintable;
П основные таблицы кодировок кириллицы: DOS, utf-8, KOI8-R, MAC;
П сообщения, состоящие из нескольких частей (multipart);
П отправка, получение, сохранение вложенных файлов (attachment);
О отправка тела сообщения в форматах TEKCT(plain/text), HTML(plain/html), RTF(richable);
П доступ как к указанной строке тела сообщения (построчное чтение), так и получение всего тела сообщения сразу;
П использование полей СС (копия) и ВСС (скрытая копия);
П настройка параметров соединения на странице свойств компоненты;
П сохранение соединения (keep alive);
П настройка аутентификации на странице свойств;
290 Глава П возможность установки произвольного значения полей АдресОтправителя (From) и ИмяОтправителя (FromName), а также оставлять эти значения пустыми;
П выбор вида аутентификации при входе на SMTP-сервер;
П возможность выбора Ч забирать или оставлять сообщения на сервере;
П возможность установки каталога для сохранения вложений;
О пометка/снятие пометки на удаление;
0 20 направлений перекодировки в различные таблицы кодировок;
П поддержка функции контроля соединения (Ping).
Внешняя компонента ROM-Mail.dll содержит только один объект AddlnMail.
В листинге 8.7 приведен пример загрузки внешней компоненты.
{]"~~:~'~;
"~~""'-~'^~~~~~~~~~~~~~~~~-~- - ".- -Ч----Ч-Ч,-ДД,.--Ч.--Ч----..-Д_-Д, 1 Листинг 8.7. Загрузка внешней компоненты ROM-Mail.dll // Загрузка внешней компоненты Если ЗагрузитьВнешнююКомпоненту{"ROM-Mail.dll") = 1 Тогда // Создание объекта AddlnMail ВК = СоздатьОбъект("Addln.AddlnMail");
Иначе Сообщить("Не удалось загрузить ROM-Mail.dll");
Возврат;
КонецЕсли;
Для чтения писем с РОРЗ-сервера необходимо заполнить параметры под ключения к нему и вызвать метод подключиться с параметром "Прием" (лис тинг 8.8). После подключения необходимо в цикле выбрать все сообщения.
I Листинг 8.8. Чтение писем с РОРЗ-сервера // Загрузка внешней компоненты Если ЗагрузитьВнешнююКомпоненту("ROM-Mail.dll") = 1 Тогда // Создание объекта AddlnMail ВК = СоздатьОбъект("Addln.AddlnMail");
Иначе Сообщить("Не удалось загрузить ROM-Mail.dll");
Возврат;
КонецЕсли;
// NetBIOS-имя или IP-адрес сервера приема сообщений (РОРЗ) Интернет-технологии ВК.СерверПриема = "pop.server.ru";
// Порт сервера приема сообщений ВК.ПортПриема = 110;
// Логин для аутентификации на РОРЗ-сервере ВК.Логин = "user";
// Пароль для аутентификации на РОРЗ-сервере ВК.Пароль = "password";
// 1 - оставлять письма на РОРЗ-сервере, 0 - удалять письма с сервера ВК.ОставлятьНаСервере = 1;
// Разрешить/запретить показ модальных окон предупреждений ВК.ПоказыватьПредупреждения = 0;
// Выполняет подключение к серверу Если ВК.Подключиться;
"Прием")=0 Тогда Предупреждение("Не удалось подключиться к серверу!");
Возврат;
КонецЕсли;
// Выборка писем Для Индекс = 1 По ВК.КоличествоСообщений() Цикл // Получает сообщение с заданным номером ВК.ПолучитьСообщение(Индекс);
// Заполняем данные письма в таблицу значений ТЗ.НоваяСтрока();
ТЗ.Отправитель = ВК.ИмяОтправителя;
ТЗ. Адрес = ВК.ДцресОтправителя;
ТЗ.Тема = ВК.Тема;
ТЗ.Получатель = ВК.ДцресПолучателя;
TS.MessagelD = ВК.IDMessage;
// Идентификатор сообщения ТЗ.Копия = ВК.СС;
ТЗ.Тело = ВК.Тело;
// Имя файла-вложения или список файлов (строка, с разделителем " " ;
) ТЗ.Вложения = ВК.Вложения;
ТЗ.Дата = ВК.ДатаОтправки;
ТЗ.Размер = ВК.Размер;
// Размер сообщения в байтах КонецЦикла;
// Разрывает установленные соединения ВК.Отключиться();
В данном примере вся информация о письмах добавляется в таблицу значе ний с идентификатором тз.
292 Глава ^~ Примечание Инициализация данной таблицы значений лежит за рамками данного примера.
При получении тела письма оно может быть в произвольной кодировке.
Чтобы преобразовать его к удобочитаемому виду, можно воспользоваться методом перекодировать, первым параметром которого указывается текст письма, а вторым Ч номер направления перекодировки:
1. Из ALT в ISO.
2. Из ALT в KOI.
3. Из ALT в MAC.
4. Из ALT в WIN.
5. Из ISO в ALT.
6. Из ISO в KOI.
7. Из ISO в MAC.
8. Из ISO в WIN.
9. Из KOI в ALT.
10. Из KOI в ISO.
11. Из КО1вМАС.
12. Из KOI в WIN.
13. Из MAC в ALT.
14. Из MAC в ISO.
15. Из MAC в KOI.
16. Из MAC в WIN.
17. Из WIN в ALT.
18. Из WIN в ISO.
19. Из WIN в KOI.
20. Из WIN в MAC.
Метод Перекодировать возвращает строку в кодировке, соответствующей номеру направления преобразования.
В цикле выборки писем, после получения очередного письма, при наличии вложенных файлов, можно сохранить их на жестком диске. Ниже приведен пример сохранения всех вложенных файлов в корневом каталоге диска (лис тинга 8.9).
Интернет-технологии _^ <нг 8.9. Сохранение вложенных файлов на диск Для Индекс = 1 По ВК. КоличествоСообщений ( ) Цикл Х ВК. Получить Сообщение (Индекс) ;
//...
Если ПустоеЗначение (ВК. Вложения) = 0 Тогда // Получаем тело сообщения с заданным номером ВК.ПолучитьТело (Индекс) ;
// Выбираем все вложенные файлы письма Для НомерФайла = 1 По ВК.КоличествоФайлов () Цикл // Получение строки с именем файла-вложения ИмяФайла = ВК.ПолучитьФайл (НомерФайла) ;
// Сохранение файла ВК.СохранитьФайл (НомерФайла, "С:\" + ИмяФайла);
КонецЦикла ;
КонецЕсли;
КонецЦикла ;
Для отправки письма через SMTP-сервер необходимо подключиться к поч товому серверу, заполнить атрибуты письма и вызвать метод отправить.
В листинге 8.10 приведен пример отправки одиночного письма.
Щ. -----, стинг 8.10. Отправка письма через SMTP-сервер // Загрузка внешней компоненты Если ЗагрузитьВнешнююКомпоненту("ROM-Mail.dll") = 1 Тогда // Создание объекта AddlnMail ВК = СоздатьОбъектГАсШп.AddlnMail") ;
Иначе Сообщить("Не удалось загрузить ROM-Mail.dll");
Возврат;
КонецЕсли;
// NetBIOS-имя или IP-адрес сервера отправки сообщений (SMTP) ВК.СерверОтправки = "smtp.server.ru";
// Порт сервера отправки сообщений (SMTP) ВК.ПортОтправки = 25;
// Логин для аутентификации на SMTP-сервере ВК.Логин = "user";
294 Глава 11 Пароль для аутентификации на SMTP-сервере ВК.Пароль = "password";
// SMTP-серверу требуется проверка подлинности ВК.АутентификацияПриОтправке = 1;
// Выполняет подключение к серверу Если ВК.Подключиться("Отправка") = 0 Тогда Предупреждение("Не удалось подключиться к серверу!");
Возврат;
КонецЕсли;
ВК.АдресОтправителя = "mav@erpg.ru";
ВК.ИмяОтправителя = "Андрей Михайлов";
ВК.АдресПолучателя = "Получатель!
Получатель
ВК.Копия = "Получатель3
ВК.СкрытаяКопия = "Получатель4
ВК.Тема = "Тема письма";
ВК.Тело = "Пример отправки письма";
ВК.Вложения = "C:\Temp\example.ert;
C:\Temp\Readme.doc";
ВК.KowipoBKa="utf-8";
ВК.ТипПисьма = 0;
// text/plain ВК.Важность =1;
// Высокая ВК.ПодтверждениеДоставки = 0;
ВК.ПодтверждениеПрочтения = 1;
// Выполнить отправку сообщений с SMTP-сервера Если ВК.Отправить() = 1 Тогда Предупреждение("Сообщение отправлено!");
Иначе Предупреждение("Не удалось отправить сообщение!");
КонецЕсли;
// Разрывает установленные соединения ВК.Отключиться();
Данный пример демонстрирует отправку письма текстового типа. Для его отправки в формате appiication/rtf или text/html необходимо в свойстве ТипПисьма указать соответственно значение i или 2 и выполнить метод за грузитьизфайла, который загружает тело письма из указанного файла.
В компоненте ROM-Mail.dll реализован дополнительный метод Ping, кото рый возвращает процент потерь. После выполнения метода свойство pingText содержит результат выполнения метода ping (листинг 8.11).
Интернет-технологии // NetBIOS-имя или IP-адрес хоста Host = "erpg.ru";
// Загрузка внешней компоненты Если ЗагрузитьВнешнююКомпоненту("ROM-Mail.dll") = 1 Тогда // Создание объекта AddlnMail ВК = СоздатьОбъект("Addln.AddlnMail");
Иначе Сообщить("Не удалось загрузить ROM-Mail.dll");
Возврат;
КонецЕсли;
// Отправляем пакет размером 72 байта по протоколу ICMP ВК.Ping(Host) ;
// Вывести результат выполнения метода Ping Сообщить(BK.PingText);
Результатом выполнения данного кода будет сообщение вида:
"IP-адрес: 194.135.22.201;
Байт отправлено: 72;
Байт получено: 72;
TTL: 128;
Потерь 0%".
Компонента ROM-Mail.dll имеет страницу свойств, атрибуты которой уста навливаются из меню Сервис | Параметры системы "1С:Предприятие". При использовании страницы свойств создавать объект и инициализировать компоненту следует в глобальном модуле.
Использование объекта Почта :
В системе "1C:Предприятие" (версия 8.0) для работы с электронной почтой существует объект почта, который является аналогом объекта v?Maii в сис теме "1С:Предприятие" (версия 7.7) в том смысле, что он тоже работает по технологии MAPI.
Рассмотрим все объекты, которые необходимо знать при работе с электрон ной почтой.
П Почта Ч основной объект, предназначенный для подключения, отключе ния соединения, а также для отправки и получения писем.
П почтовоесообщение Ч содержит информацию о письме, такую как: тема, текст письма, адресаты, вложения и т. п.
П почтовыйАдрес Ч содержит информацию о почтовом адресе (электрон ный адрес и имя пользователя).
296 Глава G ПочтовыеАдрес Ч СОДСрЖИТ КОЛЛ6КЦИЮ Элементов ПочтовыйАдрес.
П почтовоеВложение Ч содержит информацию о вложенном файле (данные и имя файла).
П ПочтовыеВложения Ч содержит КОЛЛ6КЦИЮ элементов ПочтовоеВложение.
Для подключения к почтовому клиенту используется метод подключиться объекта почта. Метод Подключиться имеет два параметра. Первый Ч строко вое выражение, обозначающее название профиля для подключения, если параметр не указан, то используется профиль пользователя, установленный по умолчанию. Второй параметр Ч пароль пользователя, если он требуется при подключении к серверу.
В листинге 8.12 приведен пример подключения к почтовому серверу.
// Создает объект Почта Почта = Новый Почта;
// Подключение к почтовому серверу Почта.Подключиться("МА7",);
//...
// Оключение от почтового сервера Почта.Отключиться();
Для получения почты с сервера используется метод выбрать объекта Почта.
Метод имеет два параметра. Первый Ч признак выборки только непрочи танных сообщений. Второй Ч признак выборки только конвертов сообще ний (т. е. без вложений).
В листинге 8.13 приведен пример выборки писем из профиля, используе мого по умолчанию, и записи информации о письмах в табличное поле ТабличноеПолеИнтернетПочта.
Листинг 8. 13. Чтение сообщений Х / / Создает объект Почта Почта = Новый Почта;
// Подключение к почтовому серверу для получения почты Почта. Подключиться (, ) ;
МассивПисем = Почта. Выбрать (Ложь, Истина);
// Перебираем массив писем Для каждого Письмо Из МассивПисем Цикл Интернет-технологии 11 Добавляем новую строку в табличное поле СтрокаТП = ТабличноеПолеИнтернетПочта.Добавить();
Попытка СтрокаТП.ОтКого = Письмо.Отправитель.Адрес;
Исключение СтрокаТП.ОтКого = Письмо.Отправитель;
КонецПопытки;
, Получатели = " ;
" // Перебираем всех получателей Для каждого Получатель Из Письмо.Получатели Цикл Получатели = Получатели + Получатель.Пользователь + " <" + Получатель.Адрес + "> ";
КонецЦикла;
СтрокаТП.Кому = Получатели;
СтрокаТП.Тема = Письмо.Тема;
СтрокаТП.Текст = Письмо.Текст;
// Перебираем вложения Для каждого Вложение Из Письмо.Вложения Цикл // Сохраняем вложение в папке C:\Mail\ Вложение.Данные.Записать("С:\Mail\" + Вложение.Имя);
КонецЦикла;
КонецЦикла;
// включение от почтового сервера Почта.Отключиться();
/ В приведенном примере есть несколько особенностей:
1. При обращении к свойству отправитель объекта письмо используется КОНСТРУКЦИЯ Попытка...Исключение...КонецПопытки. Это необходимо вследствие того, что свойство Отправитель может возвращать значе ние типа строка адреса или почтовыйАдрес. Вместо конструкции Попытка...Исключение...конецПопытки можно анализировать тип возвращае мого значения.
2. Все файлы вложений автоматически сохраняются в папке "C:\Mail\".
Вместо этого можно сохранять данные вложений в реквизиты объектов системы "1C:Предприятие 8.0" типа хранилищеЗначения.
Для отправки писем используется объект почтовоесообщение. В листин ге 8.14 приведен пример создания почтового сообщения и его отправки.
298 Глава I/ Создаем почтовое сообщение Письмо = Новый ПочтовоеСообщение;
Письмо.Тема = Тема;
Письмо.Текст = Текст;
// Добавляем адресата Письмо.Получатели.Добавить("mav@erpg.ru");
// Добавляем отправителя Письмо.Отправитель = "boss@erpg.ru";
// Добавляем файл Письмо.Вложения.Добавить("с:\plan.txt");
// Добавляем произвольные двоичные данные Архив = Новый ДвоичныеДанные("с:\trade.zip"), Письмо.Вложения.Добавить(Архив,"trade.zip");
// Создаем объект Почта Почта = Новый Почта;
// Отсылаем письмо Почта.Послать(Письмо);
Е^ Примечание Полный список свойств и методов каждого объекта приведен в документации.
Использование объекта ИнтернетПочта Объект ИнтернетПочта присутствует только в системе "1C:Предприятие" (версия 8.0) и позволяет работать с электронной почтой напрямую через сервер электронной почты. Другими словами Ч работа данного объекта не зависит от установленного почтового клиента.
Объект предназначен для доступа к почтовым серверам с целью отправки и получения сообщений. В отличие от объекта почта, который работает по технологии MAPI и требует от пользователя установленного почтового кли ента, объект ИнтернетПочта использует интернет-протоколы SMTP и РОРЗ.
Рассмотрим используемые в данном режиме объекты.
О ИнтернетПочта Ч основной объект, предназначенный для подключения и отключения от почтового сервера, а также для выборки писем с почто вого сервера и отправки сообщений.
П интернетпочтовыйпрофиль Ч- содержит информацию об учетной записи пользователя (имя РОРЗ, SMTP-серверов, имя пользователя, пароль и т. п.).
Интернет-технологии П интернетйочтовоеСообщение Ч содержит информацию о письме (тема, дата получения, дата отправления, вложения, почтовые адреса отправите ля и получателей и т. д.).
П интернетпочтовыйАдрес Ч содержит информацию о почтовом адресе (электронный адрес и имя пользователя).
П ИнтернетПочтовыеАдреса Ч содержит коллекцию элементов Интернет почтовыйАдрес.
П интернетТекстПочтовогоСообщения Ч содержит текст почтового сообще ния и его тип (HTML, простой или размеченный текст).
П интернетТекстыПочтовогоСообщения Ч содержит коллекцию элементов ИнтернетТекстПочтовогоСообщения.
П интернетпочтовоевложение Ч содержит информацию о вложенном файле (данные и имя файла).
П ИнтернетПочтовыеВложения Ч содержит КОЛЛСКЦИЮ Элементов Интернет ПочтовоеВложение.
Для подключения к почтовому серверу используется метод Подключиться, в параметре которого передается значение типа интернетпочтовыйпрофиль.
В листинге 8.15 приведен пример создания профиля пользователя и под ключения к почтовому серверу.
_Д ДЧ,-.
15. Подключение к почтовому серверу Профиль = Новый ИнтернетПочтовыйПрофиль;
// Адрес SMTP-сервера Профиль.АдресСервераSMTP = "smtp.erpg.ru";
// Адрес РОРЗ-сервера Профиль.АдресСервераРОРЗ = "pop.erpg.ru";
// Порт протокола SMTP Профиль.ПортЗМТР = 25;
// Порт протокола РОРЗ Профиль.ПортРОРЗ = 110;
// Логин пользователя Профиль.Пользователь = "boss";
// Логин пользователя для аутентификации на SMTP-сервере Профиль.ПользовательSMTP = "boss";
// Пароль доступа к почтовому ящику Профиль.Пароль = "neskaju";
// Пароль пользователя для аутентификации на SMTP-сервере 300 _ Глава Профиль. Пароль SMTP = "toje_neskaju";
// Время ожидания удачного исполнения операции в секундах Профиль. ВремяОжидания = 30;
Почта = Новый ИнтернетПочта;
// Подключение к почтовому серверу Попытка Почта. Подключиться (ПолучитьПрофиль ( ) ) ;
Исключение Сообщить (ОписаниеОшибки ( ) ) ;
Возврат;
КонецПопытки ;
// Отключение от почтового сервера Почта. Отключиться ( ) ;
^ Примечание При подключении к почтовому серверу используется конструкция Попытка... Исключение...КонецПопытки. Это необходимо сделать для подстра ховки от неудачного подключения.
Для получения писем с почтового сервера используется метод выбрать объ екта ИнтернетПочта, который возвращает массив объектов типа Интернет ПочтовоеСо общение.
В листинге 8.16 приведен пример получения писем с почтового сервера, профиль для которого был создан ранее.
зтинг 8.16. Получение писем с почтового сервера Почта = Новый ИнтернетПочта;
// Подключение к почтовому серверу Попытка Почта.Подключить ся(Профиль);
Исключение Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
ТабличноеПолеИнтернетПочта.Очистить();
Интернет-технологии Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
// Отключение от почтового сервера Почта.Отключиться();
^ Примечание При вызове метода Послать объекта Почта используется конструкция Попытка...Исключение...КонецПопытки, которая необходима для подстраховки от неудачной отправки письма. Полный список свойств и методов каждого объекта приведен в документации.
Работа с протоколом FTP Аббревиатура FTP расшифровывается как File Transfer Protocol (протокол передачи файлов). Протокол FTP оптимизирован для передачи файлов, это и послужило причиной того, что программы, использующие его, стали частью отдельного сервиса Интернета. Сервис, обеспечивающий доступ к файлам других компьютеров сети по протоколу FTP, носит одноименное название.
Чтобы воспользоваться протоколом FTP, понадобится специальная про грамма, так называемый FTP-клиент. FTP-клиентом может служить браузер (Microsoft Internet Explorer, Netscape Navigator), программа управления фай лами FAR, специализированная программа CuteFTP и др.
Для обеспечения программного доступа к протоколу FTP можно использо вать либо вызов программы ftp.exe, либо Ч объект FTP, являющийся частью объектной модели системы "1C:Предприятие" (версия 8.0).
Использование программы ftp.exe Программа ftp позволяет передавать файлы на удаленный компьютер или получать их оттуда. Она работает с файлами и каталогами удаленного ком пьютера.
При работе с функциями ftp необходимо запустить на своем компьютере программу ftp.exe, которая связывается с серверной программой, работаю щей на удаленном компьютере. В дальнейшем, используя возможности ftp, можно задавать выполняемые серверной программой команды, которые транслируются в инструкции.
Для запуска программы ftp в контексте конфигурации системы "1С:Предприятие" (версия 7.7) достаточно вызвать команду командаСистемы, 304 Глава в параметрах которой указать команду ftp с необходимыми параметрами.
Эти параметры помещаются после названия Ч ftp. Каждый параметр состо ит из дефиса (-) и одной буквы и имеет соответствующую команду того же имени, которая может быть использована внутри ftp.
^~ Примечание Следует различать использование опций и соответствующих ftp-команд.
Рассмотрим возможные параметры программы ftp.
П -v Ч заставляет ftp работать в многословном режиме. В этом режиме со общения ftp, посланные удаленной машиной, появляются на экране дис плея-приемника. Кроме того, если этот режим используется после завершения передачи каждого файла, то появляется статистическое со общение, уведомляющее об этом. Данный режим устанавливается по умолчанию, если ftp выполняется интерактивно. Если ftp выполняется в командном режиме, многословный режим выключен. Для того чтобы его включить, надо установить опцию -v. Включить этот режим внутри ftp МОЖНО С ПОМОЩЬЮ КОМаНДЫ verbose.
П -d Ч заставляет ftp работать в режиме отладки. В этом режиме сообще ния ftp, посланные ftp в удаленную машину, отображаются на экране дисплея-передатчика. Если не используется эта опция Ч информация не отображается. Вызвать этот режим в ftp можно также используя команду debug.
О -i Ч данная опция означает не интерактивную работу.
П -п Ч опция позволяет предотвратить использование ftp-авторегистрации, во время связи с удаленной машиной. Когда установлен режим автореги страции, ftp идентифицирует вас автоматически на удаленной машине и регистрирует вас на ней. Если вы используете -n-опцию для отключения автоматической регистрации, вы должны будете использовать команду user, чтобы вручную зарегистрироваться на удаленной машине.
П -д Ч является причиной лишения имен файлов, созданных в среде опе рационной системы UNIX, их расширений, например, таких как универ сальное Ч *. Если не используется эта опция, ftp расширяет имена фай лов с помощью универсального расширения в списке файлов. Вместо ЭТОЙ ОПЦИИ МОЖНО ИСПОЛЬЗОВаТЬ Команду glob.
П -з:ИмяФайла Ч определяет выполнение команды ftp в пакетном режиме.
В файле, имя которого указывается в параметре, описывается последова тельность команд. Данный режим является основным для автоматизации работы с протоколом FTP посредством системы "1С:Предприятие".
В листинге 8.18 приведен пример работы с FTP-сервером посредством па кетного файла.
Интернет-технологии /I Соединение с сервером ТекстКоманды = "open ftp.server.ru // Имя пользователя I user // Пароль пользователя I password // Выполняем команды программы ftp...
//...
// Закрыть связь с сервером Iquit I";
.
// Имя временного файла ИмяФайла = КаталогИБО + "ftp\transfer.ftp";
// Создаем временный файл для пакетного выполнения команды ftp Текст = СоздатьОбъект("Текст");
Текст.ДобавитьСтроку(ТекстКоманды) ;
Текст.Записать(ИмяФайла);
// Выполняем команду ftp в пакетном режиме КомандаСистемы("ftp -s:" + ИмяФайла);
// Удаляем временный файл ФС.УдалитьФайл(ИмяФайла);
Х Из приведенного примера видно, что текст пакетного файла обязательно начинается с команды open, после которой указывается имя сервера. Сле дующими двумя строками следуют имя пользователя и пароль. Заканчивает ся текст пакетного файла командой quit.
В табл. 8.1 приведен полный список команд программы ftp.
Таблица 8.1. Команды программы ftp Команда Описание команды append Добавляет содержимое локального файла в конец удаленного файла.
Например: append <имя локального файла> <имя файла удаленной машины> ascii Установка режима передачи файлов в формате ASCII (По умолчанию код всегда ASCII) ] 1 Зак. Глава Таблица 8.1 (продолжение) Команда Описание команды Выдача звукового сигнала по завершении команд. Чтобы прекратить bell подачу сигнала, нужно снова вызвать эту команду Установка режима передачи файлов в двоичном формате binary Закрывает все открытые связи bye или quit Изменение рабочего каталога на удаленном компьютере. Например:
cd cd / u s r / b i n Завершение сеанса работы ftp и закрытие текущей связи close Включение и выключение режима отладки debug delete Удаление файла на удаленном компьютере. Например:
delete <имя файла для удаления> dir Вывод детального списка каталога удаленного компьютера. На пример:
dir /usr/bin.
Если имя каталога не указывать, то будет распечатан текущий каталог удаленного компьютера. Для того чтобы занести результаты выполне ния команды в файл, необходимо указать имя выходного файла. На пример: dir /usr/bin printfile.
Если необходимо напечатать текущий каталог в файл, необходимо вызвать команду:
dir. printfile где "." означает текущий каталог get Копирует файл из удаленного компьютера на локальный. Например:
или recv get <имя файла удаленной машины> <имя файла вашей машины>.
Если просто указать имя файла удаленного компьютера, который нужно скопировать, то скопированный файл на вашей машине будет иметь то же самое имя glob Переключение метасимвольного расширения имен локальных фай лов. Эта команда запрещает такое универсальное расширение имен файлов, созданных в среде операционной системы UNIX, как Ч '*' hash Переключает вывод символа "#" на экране пользователя после каж дого блока данных, который посылается удаленному компьютеру.
Размер блоков данных может быть различным в зависимости от вер сии программного обеспечения. Для того чтобы увидеть текущее состояние данного режима, с командой ftp должен использоваться режим отладки. Эта команда включает и выключает выдачу симво ла "#" на экран пользователя Интернет-технологии Таблица 8.1 (продолжение) Команда Описание команды led Изменяет рабочий каталог, используемый ftp. Например:
led /usr/mav.
Если вы не задали имя каталога, то будет использоваться "стартовый" каталог Is Распечатывает аббревиатурный список содержания каталога удален ного компьютера, с которого установлена связь. Например:
Is / u s r / b i n.
Если имя каталога не определено, будет распечатан текущий. Можно также задать команду записи этих данных в файл. Это делается ftp, если указано имя файла локальной машины, куда следует поместить листинг каталога. Например:
Is /usr/bin printfile.
Имя каталога нужно задать до вывода файла (printfile). Например, если вам необходимо распечатать текущий каталог в файл с именем p r i n t f i l e : Is. p r i n t f i l e где символ "." ставится для указания, что каталог текущий mdelete Удаляет список файлов на удаленном компьютере. Например:
mdelete <имя 1-го файла> < имя 2-го файла >...
mdir Выводит листинг директории удаленного компьютера, и результат помещается в файл локальной машины. Можно задать список фай лов удаленной машины и имя файла локальной машины, куда помес тить результат при вызове команды. Например:
mdir <имя 1-го файла> <имя 2-го файла>... printfile mget Копирование одного или более файлов с удаленного компьютера.
Файлы после копирования будут иметь те же имена. Можно указать список файлов для копирования, например:
mget <имя 1-го файла> <имя 2-го файла>...
mkdir Создание каталога на удаленном компьютере. Например:
mkdir /u/mydir Вывод содержимого нескольких каталогов удаленного компьютера.
mis В команде можно задать список файлов удаленного компьютера и имя файла локального компьютера, куда поместить результат при выполнении команды, например:
mis <имя 1-го файла>... printfile input Отправка нескольких файлов. Эта команда копирует один или более файлов с локального компьютера на удаленный. На удаленном ком пьютере файлы будут иметь те же имена. Например:
mput <1-й файл> <2-й файл> машины...
Глава Таблица 8.1 (окончание) Команда Описание команды open Подключение к протоколу FTP удаленного компьютера. Эта команда устанавливает связь с удаленным компьютером, в который предпола гается передача файлов. Например:
open ftp.server.ru prompt Переключение интерактивной подсказки для составных команд. Эта команда переключает запросы к ftp между одноместными (обрабаты вают один файл) и многоместными командами (например, такими как mget). Эта команда подключается и отключается при повторном наборе put Отправка одного файла. Эта команда перемещает файл с локального или send компьютера на удаленный. Например:
put <имя локального файла> <имя удаленного файла> или put <имя локального файла> pwd Вывод рабочего каталога удаленного компьютера quote Отправка произвольных команд ftp, которые поддерживает удаленный сервер. Список доступных команд может быть отображен на экране с помощью команды remotehelp remotehelp Получение справочных сведений с удаленного сервера. Эта команда за прашивает помощь ftp на удаленном компьютере, с которым установлена связь на данный момент времени. Запрашиваемая информация сообща ет о том, какие команды поддерживает удаленный компьютер rename Переименование файла на удаленном компьютере. Например:
rename <имя 1-го файла> <имя 2-го файла> mdir Вывод содержимого нескольких каталогов удаленного компьютера.
Например:
rmdir /usr/mydir Выводит текущее состояние режимов bell, form, hash, glob, port, type status type Установка типа передачи файлов. Допустимы двоичный и коды ASCII.
Эта команда аналогична командам ascii и binary. Если не указан тип при вызове команды, то устанавливается ASCII trace Переключение трассировки пакетов. Эта команда включается и от ключается при ее повторным наборе user Отправка сведений о новом пользователе. Команда позволяет поль зователю идентифицировать самого себя на удаленном компьютере при установлении связи. Например: user mike cat myaccount verbose Переключение режима вывода сообщений. Данная команда включа ется и выключается при повторном наборе. В режиме отладки прото кольные сообщения, посланные удаленной машиной, появляются на терминале локальной машины. Кроме того, в этом режиме отобража ется статистика процесса вывода после передачи каждого файла Интернет-технологии В листинге 8.19 приведен пример работы пакетного режима команды ftp при работе с файлами.
// Соединение с сервером ТекстКоманды = "open ftp.server.ru // Имя пользователя luser // Пароль пользователя (password // Получить файл с сервера на локальную машину [get file.rtf c:\file.rtf Iget file.mp3 c:\mp3\file.mp // Записать файл на сервер с локальной машины Iput c:\file.htm file.htm Iput c:\docs\file.txt file.txt // Удалить файл с сервера [delete file.rtf // Создать новый каталог на FTP-сервере Imkdir newdir // Закрыть связь с сервером Iquit // Имя временного файла ИмяФайла = КаталогИБО + "ftp\transfer.ftp";
// Создаем временный файл для пакетного выполнения команды ftp Текст = СоздатьОбъект("Текст");
Текст.ДобавитьСтроку(ТекстКоманды);
Текст.Записать(ИмяФайла);
// Выполняем команду ftp в пакетном режиме КомандаСистемы("ftp -s:" + ИмяФайла);
// Удаляем временный файл ФС.УдалитьФайл(ИмяФайла);
310 Глава Использование объекта РТРСоединение В системе "1C:Предприятие" (версия 8.0) для работы с удаленными компью терами через протокол FTP предназначен объект гтрсоединение. С по мощью данного объекта можно выполнять типовые действия с файлами, например, такие как: скачивать и закачивать файлы, переименовывать их, обращаться к их свойствам, создавать каталоги и т. д.
Для установления соединения с FTP-сервером проще всего воспользоваться конструктором объекта гтрсоединение, который имеет следующие параметры:
П Сервер Ч сервер, с которым осуществляется соединение;
О порт Ч порт сервера, с которым осуществляется соединение (по умолча нию 21);
О имя пользователя Ч имя пользователя на указанном сервере;
CJ пароль пользователя Ч пароль пользователя на указанном сервере;
G прокси Ч значение типа ИнтернетПрокси (прокси, используемый для со единения с сервером);
П пассивное соединение Ч булево значение, определяющее тип ftp-соединения (по умолчанию Ч ложь).
Поле установки соединения с помощью метода УстановитьТекущийКаталог можно указать текущий каталог сервера, с которым будет происходить рабо та в дальнейшем. Далее можно работать с файлами и каталогами удаленного компьютера. В листинге 8.20 приведен пример вывода содержимого каталога в табличное поле.
I Листинг 8.20. Вывод содержимого каталога ftp // Соединение с удаленным сервером FTP = Новый ГТРСоединение("ftp.server.ru",21,"user","password",, // Установка текущего каталога FTP.УстановитьТекущийКаталог("httpd/www/");
// Получить массив файлов, расположенных в текущем каталоге МассивФайлов = ЕТР.НайтиФайлыС'",);
// Выбрать файлы их массива Для каждого Файл Из МассивФайлов Цикл // Добавить информацию о файле в табличное поле СтрокаТП = ТабличноеПолеФайлы.Добавить();
СтрокаТП.Имя = Файл.Имя;
СтрокаТП.ПолноеИмя = Файл.ПолноеИмя;
// Определяем, соответствует ли файловый объект файлу Интернет-технологии Если Файл.ЭтоФайл() Тогда СтрокаТП.ВремяИзменения = Файл.ПолучитьВремяИзменения ();
СтрокаТП.Размер = Файл.Размер();
КонецЕсли;
КонецЦикла;
Для удаления файлов на сервере предназначен метод удалить объекта РТРСоединение.
В программном коде, приведенном в листинге 8.21, показаны примеры уда ления одного файла и группы файлов.
' ' """"" '": ' " '.~'""~""""^""' пенном компьютере // Соединение с удаленным сервером FTP = Новый ЕТРСоединение("ftp.server.ru",21,"user","password",,);
// Установка текущего каталога РТР.УстановитьТекущийКаталог("usr/mav/");
Попытка // Удаляет файл на сервере FTP.Удалить("data.txt");
// Удаляет группу файлов на сервере FTP.Удалить("tmp/", "*.txt");
Исключение Сообщить(ОписаниеОшибки());
КонецПопытки;
Во втором вызове метода Удалить, в коде, который представлен в листин ге 8.21, используется маска, по которой определяются файлы, подлежащие удалению.
Для копирования файла с удаленного компьютера на локальный предназна чена команда получить. В параметрах этой команды указывается имя файла источника и имя файла локального компьютера (листинг 8.22).
энного компьютера на локальный // Соединение с удаленным сервером FTP = Новый ЕТРСоединение("ftp.server.ru",21,"user","password",,);
// Установка текущего каталога ЕТР.УстановитьТекущийКаталог("usr/mav/");
// Выбор папки для сохранения файла Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога);
312 Глава Диалог.Каталог = "с:\";
Диалог.Заголовок = "Выберите папку для сохранения...";
Диалог.МножественныйВыбор = Ложь;
Если Диалог.Выбрать() Тогда Попытка // Сохраняет файл из указанного адреса на локальный компьютер // Имя файла удаленного компьютера содержится в переменной <ИмяФайла> FTP.Получить(ИмяФайла, Диалог.Каталог + " " + ИмяФайла);
\ Исключение Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
В приведенном примере для определения локального каталога, в котором сохраняется файл, используется объект ДиалогВыбораФайла, описание мето дов и свойств которого можно найти в документации.
Для обратного действия, т. е. для копирования файла с локального компью тера на удаленный, используется метод записать. Пример использования этого метода приведен в листинге 8.23.
// Соединение с удаленным сервером FTP = Новый ГТРСоединение("ftp.server.ru",21,"user","password",,);
// Установка текущего каталога FTP.УстановитьТекущийКаталог("usr/mav/");
// Выбор файла для загрузки файла на ftp Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.Каталог = "с:\";
Диалог.Заголовок = "Выберите файл для загрузки на ftp...";
Диалог.МножественныйВыбор = Ложь;
Если Диалог.Выбрать() Тогда Попытка //Из полного имени выделяем только имя файла ИмяФайла = Сред(Диалог.ПолноеИмяФайла, СтрДлина(Диалог.Каталог)+1);
// Записывает файл с локального компьютера на ftp FTP.Записать(Диалог.ПолноеИмяФайла, ИмяФайла);
Исключение Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
Глава Использование Active Directory Service Interfaces Понятие ADSI Технология Active Directory Service Interfaces (ADSI) предоставляет объектную модель, которая обеспечивает единообразный, не зависящий от конкрет ного сетевого протокола, доступ из программ или сценариев WSH к функ циям различных каталогов (Active Directory для Windows 2000/Windows Server 2003, Windows Directory Service для Windows NT 4.0, NDS для Novell NetWare 4.x/5.x).
Объекты ADSI включены в операционные системы Windows XP/2000/2003, а также могут быть установлены в более ранних версиях, для чего их нужно загрузить с сервера компании Microsoft.
Для пользователей локальных или глобальных сетей важно уметь находить и использовать объекты разных типов (зарегистрированные пользователи, дос тупные сетевые принтеры и очереди печати и т. д.), которых в крупной сети может быть огромное количество. Администраторы сети должны поддержи вать эти объекты в работоспособном состоянии. Под службой каталога (Directory Service) понимается та часть распределенной компьютерной сис темы (компьютерной сети), которая предоставляет средства для поиска и использования имеющихся сетевых ресурсов. Другими словами, служба ка талога Ч это единое образование, объединяющее данные об объектах сети и совокупность служб, осуществляющих манипуляцию этими данными.
В гетерогенной (неоднородной) компьютерной сети могут одновременно функционировать несколько различных служб каталогов, например, NetWare Bindery для Novell Netware 3.x, NDS для Novell NetWare 4.x/5.x, Windows Directory Service для Windows NT 4.0 или Active Directory для Windows 2000. Естественно, для прямого доступа к разным службам катало гов приходится использовать различные инструментальные средства, что усложняет процесс администрирования сети в целом.
314 Глава Для решения этой проблемы фирмой Microsoft была разработана технология Active Directory Service Interfaces (ADSI), которая предоставляет набор объ ектов ActiveX, обеспечивающих единообразный, не зависящий от конкрет ного сетевого протокола, доступ к функциям различных каталогов. Немало важным фактом является то, что объекты ADSI включены в операционные системы Windows ХР/2000. Также они могут быть установлены в более ран них версиях операционной системы, для чего их нужно скачать с сервера Microsoft.
Служба Active Directory состоит из четырех основных частей:
П Служба DNS (Domain Name Service);
П WinNT Provider Service', О NWCOMPATProvider Service;
П Протокол LDAP (Lightweight Directory Access Protocol).
Традиционная в сетях TCP/IP служба DNS используется, в частности, для поиска контроллеров домена, а благодаря протоколу LDAP клиенты могут по имени находить в каталоге Active Directory нужные объекты и получать доступ к их атрибутам. С помощью службы WinNT Provider производится доступ к доменам сети в операционных системах Windows NT, а посредст вом службы NWCOMPAT Ч в Novell NetWare 3.x.
В данной главе будет рассмотрена только служба WinNT Provider, как самая простая и наиболее используемая.
Применяя объекты ADSI и службы WinNT Provider можно, например:
О получить список имеющихся в локальной сети доменов;
П получить список имеющихся в домене рабочих станций;
П получить список всех групп, определенных в домене или на компьютере;
П добавить и удалить пользователя домена или компьютера;
П определить всех пользователей заданной группы или все группы, в кото рые входит определенный пользователь;
П просмотреть атрибуты пользователя и изменить его пароль.
Далее будут рассмотрены практические примеры работы с ADSI.
Формирование дерева объектов WinNT Provider Все объекты службы WinNT Provider представляются в виде дерева, структу ра которого определена в табл. 9.1.
Использование Active Directory Service Interfaces Таблица 9.1. Иерархия классов WinNT Provider Имя класса Описание Namespace Самый верхний уровень пространства имен.
Пример:
Obj = ПолучитьСОМОбъект("WinNT://") Domain Домен Windows NT.
Пример:
Obj = ПолучитьСОМОбъект("WinNT://MyDomain") User Учетная запись пользователя.
Пример:
ОЬд=ПолучитьСОМОбъект ("WinNT: //MyDomain/User" ) Group Группа учетных записей, управляющая правами доступа.
Пример:
ОЬ]=ПолучитьСОМОбъект ("WinNT: //MyDomain/Group") UserGroupCollection Пользователи группы GroupCollection Прочие группы Computer Windows NT-сервер или рабочая станция.
Пример:
ОЬз=ПолучитьСОМОбъект ("WinNT: //MyServer") PrintJob Очередь задач принтера.
Пример:
ОЬ]=ПолучитьСОМОбъект("WinNT://MyServer/aPrinter") PrintJobsCollection Коллекция задач принтера PrintQueue Очередь задач программы-планировщика принтера Service Запущенные сервисы FileService Сервис доступа к файлам FileShare Общедоступные файлы Resource Ресурсы сервиса Session Активные файловые подключения User Локальные пользователи.
Пример:
Obj = Получить СОМОбъект("WinNT://MyServer/User") Локальные группы.
Group Пример:
Obj =Х ПолучитьСОМОбъект("WinNT://MyServer/Group") Глава Таблица 9.1 (окончание) Описание Имя класса UserCollection Коллекция локальных пользователей группы GroupCollection Коллекция локальных групп Schema Схема WinNT-контейнера Схема определения классов>
Для создания определенного объекта необходимо подсоединиться к целево му контейнеру используя функцию Получитьсомобъект. Для точной иденти фикации класса создаваемого объекта можно указать его имя через запятую (листинг 9.1).
// Создание объекта очереди задач принтера на компьютере "Сотр" Queue = ПолучитьСОМОбъект("WinNT:// Domain/Comp/aPrinter,printQueue");
// Создание объекта пользователя "MAV" User = ПолучитьСОМОбъект("WinNT:// Domain/MAV,user");
// Создание объекта компьютера "Сотр" Computer = ПолучитьСОМОбъект("WinNT://Сотр");
Для формирования дерева объектов WinNT Provider используется рекурсив ная процедура ВывестиУровеньПространства, показанная в листинге 9.2.
// Вызов процедуры и инициализация рекурсии ВывестиУровеньПространства("WinNT:", ТабличноеПолеПространствоИмен.Строки), // Рекурсивная процедура вывода очередного уровня иерархии Процедура ВывестиУровеньПространства(Имя, ТП) // Связываемся с корневым объектом Namespace NameSpace = ПолучитьСОМОбъект(Имя);
Использование Active Directory Service Interfaces // Перебираем элементы коллекции Попытка Для каждого Domain Из NameSpace Цикл СтрокаТП = ТП.Добавить ( ;
) СтрокаТП.КолонкаИмя = Domain.Name;
// Ограничиваем иерархию 4-ю уровнями Если СтрокаТП.Уровень() < 4 Тогда ВывестиУровеньПространства(Имя + ?(HMH="WinNT:","//","/") + Domain.Name, СтрокаТП.Строки);
КонецЕсли;
КонецЦикла;
Исключение КонецПопытки;
КонецПроцедуры // ВывестиУровеньПространстваО В данном примере для простоты вся выборка объектов определенного уров ня взята В программные скобки Попытка...Исключение...КонецПопытки. Это сделано для того, чтобы процедура не отработала с критической ошибкой, при отсутствии объектов в коллекции.
Вся иерархия объектов выводится в дерево значений, которое расположено на форме обработки С именем ТабличноеПолеПространствоИмен.
Приведенный в листинге 9.2 пример покажет дерево объектов локальной сети в соответствии с иерархией, приведенной в табл. 9.1.
Вывод списка всех доменов локальной сети Для вывода всех доменов локальной сети необходимо выполнить следую щую простую последовательность действий.
1. Используя функцию получитьсомобъект, подсоединимся к целевому кон тейнеру "winNT:", который будет содержать коллекцию доменов.
2. С помощью конструкции для каждого...из...цикл...конеццикла перебираем полученную коллекцию.
Пример вывода списка доменов показан в листинге 9.3.
Pages: | 1 | ... | 2 | 3 | 4 | 5 | Книги, научные публикации