ИВАН КОРОБКО
Редактор для создания скриптов: PrimalScript 4.0
Существует множество редакторов, позволяющих создавать скрипты. Как правило, они поддерживают один-два языка программирования. Редактор PrimalScript 4.0, имеет встроенную поддержку более чем 30 языков программирования, начиная от HTML, XML и VBScript, и заканчивая узкоспециализированными, такими как KIXTart.
О том, как пользоваться этим редактором, вы можете узнать из встроенной справки в редактор или из официальной документации, опубликованной на сайте разработчика (http://www.sapien.com). Мы поговорим о недокументированных возможностях, вы сможете самостоятельно интегрировать в редактор свои собственные шаблоны, создавать описание новых языков программирования, при необходимости вносить изменения в объектную модель, отображаемую в виде подсказки.
Интегрируем собственные шаблоны
Каждый программист имеет собственные наработки, которые позволяют ему быстро и качественно создавать различные скрипты. Получив возможность интегрировать их в редактор, он сможет еще быстрее их создавать, не тратя время на поиск нужного файла, содержащего шаблон. Словом, это позволит сделать работу в редакторе еще приятнее и эффективнее.
Создадим шаблон, в котором осуществляется соединение с Active Directory с помощью ADODB-соединения. За основу шаблона примем сценарий, с помощью которого осуществляется чтение всех пользователей в AD (о том, как осуществляется подключение и чтение данных из AD, см. статью «Программное управление ADSI: LDAP», №3, 2004 г. – http://www.samag.ru/cgi-bin/go.pl?q=articles;n=03.2004;a=09):
domain = "LDAP://" + GetObject("LDAP://RootDSE").Get("defaultNamingContext")
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.CommandTimeout = 120
objConnection.Provider = "ADsDSOObject"
objConnection.Properties("ADSI Flag")=1+2
objConnection.Properties("User ID")="msk\adminstrator"
objConnection.Properties("Password")="password"
objConnection.Properties("Encrypt Password")=TRUE
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection
objCommand.properties("Page size")=10000
objCommand.properties("Timeout")=300
objCommand.properties("Cache Results")=false
Set st=objconnection.execute("SELECT Samaccountname, description FROM ' " & Domain & " ' WHERE objectClass='person')
st.Movefirst
Temp=""
Do Until st.EOF
SamAccountName=""
SamAccountName= St.Fields("Samaccountname").Value
Description=""
A_Description= St.Fields("Description").Value
For Each AA in A_Description
Description= Description+AA
Next
Temp=Temp+ "Имя: "+ SamAccountName + "Описание: " + Description +chr(13)+chr(10)
st.MoveNext
Loop
Wscript.Echo Temp
Из приведенного сценария можно сделать несколько шаблонов: шаблон определения длинного имени домена, соединения с AD, SQL-запрос обращения к объекту, чтения данных строка и массив.
Однако ограничимся созданием только одного шаблона. По местоположению в скрипте соединение с AD располагается в самом начале и сразу после него формируется SQL-запрос.
Выбор создания именно такого шаблона не случаен. Дело в том, что для успешного соединения с AD и чтения/записи данных необходимы административные права доступа. Как следствие, эти значения параметров необходимо указать, и они не статичны, поэтому для формирования шаблона скрипт необходимо трансформировать:
Admin_Name=" "
Password=" "
Set Domain= GetObject("LDAP://RootDSE").Get("defaultNamingContextм)
Short_Domain = mid(Domain, instr(Domain,"=")+1,instr(Domain,",")-instr(Domain,"=")-1)
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.CommandTimeout = 120
objConnection.Provider = "ADsDSOObject"
objConnection.Properties("ADSI Flag")=1+2
objConnection.Properties("User ID")= Short_Domain + "\"+Admin_Name
objConnection.Properties("Password")=Password
objConnection.Properties("Encrypt Password")=TRUE
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection
objCommand.properties("Page size")=10000
objCommand.properties("Timeout")=300
objCommand.properties("Cache Results")=false
Именно такой шаблон, в котором имя и пароль пользователя перенесены в начало скрипта, будет просто и удобно использовать.
Определившись с содержанием шаблона, обратимся к файловой структуре редактора PrimalScript. Шаблон представляет собой текстовый файл с расширением snippet, расположенном в папке «C:\Program Files\SAPIEN\PrimalScript Professional\Snippets\», если программа установлена по умолчанию. Иерархическую структуру расположения шаблонов и описания функций различных языков определяет структура каталогов и файлы с расширением snippet (см. рис. 1).
Рисунок 1. Файловая структура PrimalScript
Итак, создадим в каталоге «Snippets» подкаталог «Шаблоны на VBScript», а в нем файл «AD Connection.snippet», который является текстовым. Все его содержимое представляет собой шаблон.
После создания файла и заполнения его содержимым необходимо перезапустить PrimalScript, чтобы внесенные в файловую структуру изменения вступили в силу.
Войдя в редактор, необходимо вызвать меню «Snippets Windows», в котором находятся все шаблоны. Для этого необходимо в меню «Tools» выбрать пункт Options, а в появившемся окне войти в «Environment/Nexus Windows» и сделать активным меню «Snippet Browser», как это показано на рис. 2. Чтобы сделанные изменения вступили в силу, необходимо перезапустить редактор.
Рисунок 2. Вид окна Tools для управления отображения меню с шаблонами
Рисунок 3. Snippet Browser. Пример использования шаблонов
Описываем новую объектную модель
Создание собственных объектных моделей поможет вам избежать ошибок при создании кода.
Разберем простой пример. На рис. 4 изображена некая объектная модель, которую предстоит описать. В ней присутствует ряд объектов, которые имеют свойства.
Рисунок 4. Тестовая объектная модель
Существует несколько правил описания модели. По структуре файл представляет собой INI-файлы, которые раньше активно использовались. Иерархии описываются с помощью имени раздела. Сами параметры, которые могут быть объектами или свойствами, различаются символами «P» или «M» соответственно. Синтаксис строки выглядит следующим образом: сначала пишется идентификатор P или M. Затем пишется название объекта или свойства, после него уточняющие параметры. Обратите внимание, что в названии раздела и описании значения раздела между идентификатором и именем объекта символ пробела не допускается!
Отображенная иерархическая модель описывается в файле, как показано на рис. 5, там же показана иерархическая связь объектов. Связанные объекты выделены одинаковыми цветами. Направления связей (дочерний/родительский объект) показаны на рисунке стрелками.
Рисунок 5. Описание объектной модели в файле
Рисунок 6. Демонстрация работы тестовой объектной модели
Добавляем новые функции в существующие языки программирования
Существует масса языков программирования, набор функций которых расширяется до сих пор: выходят новые версии. Ярким примером представителя такого языка программирования является KIXTart, который уже несколько лет находится в активной разработке. С выходом новой версии в нем становятся доступны новые функции, которые хотелось бы сделать «понятными» для редактора. Для этого нам опять же придется отредактировать соответствующий файл с расширением «sense», например, KIXTart.sense.
Приведу пример добавления абстрактной функции WriteToXml(), которая имеет три параметра: имя файла, записываемый текст и кодировку. Причем кодировка – не обязательный параметр. Исходя из этих условий, функция имеет синтаксис:
WriteToXml("filename", "doby" [, "encoding"])
Для того чтобы редактор воспринял «WriteToXml» как служебное слово, необходимо в файл Kixtart.sense добавить строку:
M, WriteToXml("filename", "doby" [, "encoding"])
Обратите внимание, что пробел между «M» и названием функции не допускается.
После сохранения файла также необходимо перезагрузить редактор, чтобы внесенные в файлы изменения вступили в силу.
Заключение
Теперь, когда вы знаете, как создать собственные шаблоны, добавлять описания новых функций и объектные модели различных объектов для разных языков, хочется надеяться, что программирование станет для вас еще большим удовольствием, поскольку сделан огромный шаг по предупреждению синтаксических ошибок и удобству использования созданных вами же шаблонов.