Проверить наличие типа подписи в коллекции.
Visual Basic |
---|
Public Function Has( _ ByVal SignDef As Variant _ ) As Boolean |
- SignDef
- Порядковый номер, ссылка на объект TDMSSignDef Объект, дескриптор TDMSSignDef.Handle Свойство, системное имя TDMSSignDef.SysName Свойство или описание TDMSSignDef.Description Свойство типа подписи.
TRUE - тип подписи найден в коллекции.
Example (VBScript) | ![]() |
---|---|
Option Explicit Call WorkWithSignDefs() '============================================================================== ' Выполнить выбранные пользователем действия над коллекцией типов подписей. ' Выполнять скрипт может только системный администратор '============================================================================== Sub WorkWithSignDefs() Dim SelDlg, RetVal, strAction, ArActions, SignDefsCol ArActions = Array("Создать тип подписи", "Удалить тип подписи", _ "Вывести информацию обо всех типах подписей в приложении") 'Предоставить пользователю выбрать действие Set SelDlg = ThisApplication.Dialogs.SelectDlg SelDlg.SelectFrom = ArActions SelDlg.Prompt = "Выберите действие:" RetVal = SelDlg.Show 'Если пользователь отменил диалог или ничего не выбрал, закончить работу. 'Диалог вернул массив, поскольку был инициализирован строковым массивом If (RetVal <> TRUE) Or (UBound(SelDlg.Objects)<0) Then Exit Sub 'ПОлучить ссылку на коллекцию всех типов подписей, созданных в приложении Set SignDefsCol = ThisApplication.SignDefs 'Если нет информации о типах подписей, выйти из процедуры If SignDefsCol.Count = 0 Then MsgBox "Типы подписей в системе отсутствуют.", _ vbInformation, "Информация о текущей настройке" Exit Sub End If 'Выполнить все заданные действия For Each strAction In SelDlg.Objects If StrComp(strAction, ArActions(0))=0 Then Call CreateSignDef(SignDefsCol) ElseIf StrComp(strAction, ArActions(1))=0 Then Call RemoveSignDef(SignDefsCol) ElseIf StrComp(strAction, ArActions(2))=0 Then Call ShowInfo(SignDefsCol) End If Next End Sub '============================================================================== '============================================================================== 'Создать новый тип подписи '============================================================================== Sub CreateSignDef(SignDefsCol) Dim NewSignDef, StrSysName, StrDescr, SelDlg, RetVal 'Запросить описание нового типа StrDescr = InputBox("Введите описание нового типа подписи:") 'Если ничего не введено, выйти из процедуры If StrDescr="" Then Exit Sub 'Проверить, существует ли системное имя типа; если да - запросить повторный ввод StrSysName = "SGN_TEST" While (SignDefsCol.Has(StrSysName)) StrSysName = InputBox("Введите другое сист. имя (" & StrSysName & " уже есть):",_ , StrSysName) 'Если диалог отменен или введена пустая строка, выйти из процедуры If StrSysName = "" Then Exit Sub Wend 'Включим собственный перехват ошибок On Error Resume Next 'Создать новый тип подписи в коллекции Set NewSignDef = SignDefsCol.Create 'Задать значения свойствам нового типа With NewSignDef .Description = StrDescr .SysName = StrSysName .ShortDescription = "Test" .Comments(0) = "Тестовый первый комментарий" 'Дадим право инициализации новой подписи роли "Разработчик" (RoleDefs это встроенная коллекция ролей, использующих подпись) .RoleDefs.Add ThisApplication.RoleDefs("ROLE_DEVELOPER") End With 'В логах отладчика выводим идентификатор ThisApplication.DebugPrint("Идентификатор нового определения подписи - " & NewSignDef.Handle) 'Если была ошибка... If Err<>0 Then MsgBox "Ошибка создания типа подписи " & StrSysName & "." &_ Chr(13) & "Код ошибки: " & Err, vbExclamation End Sub '============================================================================== '============================================================================== 'Удалить тип подписи из приложения. '============================================================================== Sub RemoveSignDef(SignDefsCol) Dim StrRet, index, SDef, RetVal 'Запросить индекс типа подписи для удаления. Он не должен превышать количество 'типов, созданных в приложении StrRet = InputBox("Введите индекс типа подписи, который должен быть удален:" & Chr(13) &_ "(от 0 до " & SignDefsCol.Count-1 & "):") 'Если введено не-число или диалог отменен, выйти из процедуры If (StrRet="") Or (Not IsNumeric(StrRet)) Then Exit Sub 'Получить введенный индекс index = CLng(StrRet) 'Возможно, введенное число выходит за границы допустимого диапазона If Not SignDefsCol.Has(index) Then MsgBox "Задан недопустимый индекс.", vbExclamation Exit Sub End If 'Запросить подтверждение удаления Set SDef = SignDefsCol.Item(index) RetVal = MsgBox("Удалить тип подписи """ & SDef.Description & """?", vbQuestion + vbYesNo) 'Если подтверждения нет, выйти из процедуры If RetVal <> vbYes Then Exit Sub 'Попытаться удалить тип подписи. Включим собственный перехват ошибок On Error Resume Next 'Удалить тип подписи из приложения MsgBox("Будет произведено удаление типа подписи № " & SignDefsCol.Index(Sdef)) SignDefsCol.Remove(SDef) 'Если ошибка, сообщить об этом If Err<>0 Then MsgBox "Ошибка удаления типа подписи """ & SDef.Description & """." _ & Chr(13) & "Код ошибки: " & Err, vbExclamation End Sub '============================================================================== '============================================================================== ' Вывести информацию обо всех типах подписей приложения '============================================================================== Sub ShowInfo(SignDefsCol) Dim StrInfo, SDef, RoleDef For Each SDef In SignDefsCol With SDef StrInfo = .Description & Chr(13) StrInfo = StrInfo & "Краткое описание: " & .ShortDescription & Chr(13) StrInfo = StrInfo & "Системное имя: " & .SysName & Chr(13) StrInfo = StrInfo & "Каким ролям разрешена инициализация: " & Chr(13) For Each RoleDef In .RoleDefs StrInfo = StrInfo & RoleDef.Description & Chr(13) Next 'Вывести информацию в окно сообщений ThisApplication.AddNotify(StrInfo) End With Next End Sub '============================================================================== |