Создание настраиваемых правил проверки: Методы проверки схем для управления вопросами

При задании свойств TargetType, FilterExpression и TestExpression правила Visio управляет вопросами, связанными с правилом. В очень сложных правилах проверки эти свойства можно пропустить и реализовать логику проверки в программном коде решения. В этом случае решение должно дождаться события RuleSetValidated, связанного с набором правил, и использовать собственную логику для определения списка вопросов, связанных с набором правил. Сложность правил, создаваемых с помощью этого метода, ограничивается только возможностью разработки кода, способного находить соответствующие вопросы.

Существует два основных метода управления вопросами. Краткое описание каждого метода и объяснение его параметров представлено в таблице.

Основные методы управления вопросами

Метод Описание метода Параметр Описание параметра
ValidationRule.AddIssue [ https://msdn.microsoft.com/en-us/library/ff767586.aspx ] Создает новый вопрос проверки на основе правила проверки, и добавляет его в документ.Если дополнительному параметру TargetShape значение не задано, вопрос проверки относится к странице. Если значение не задается никаким дополнительным параметрам, вопрос проверки относится к документу. TargetPage(необязательный параметр) TargetShape(необязательный параметр) Страница, содержащая либо непосредственно вопрос, либо фигуру с вопросом.
ValidationIssue.Delete [ https://msdn.microsoft.com/en-us/library/ff765925.aspx ] () Удаляет объект ValidationIssue из документа.   

После обнаружения события RuleSetValidated для набора правил рекомендуется удалить вопросы, связанные с набором правил, повторно оценить логику проверки, а затем, при необходимости, добавить новые вопросы. Следующий код VBA выполняет перебор вопросов проверки в активном документе. Этот код проверяет каждый вопрос vsoIssue на принадлежность к набору правил vsoValidationRuleSet. Вопросы, принадлежащие набору правил, удаляются. В коде предполагается, что vsoValidationRuleSet является допустимым объектом Visio.ValidationRuleSet.

VBA                                                                                                                                                           
Set vsoDocument = Visio.Activedocument
Set vsoIssues = vsoDocument.Validation.Issues
issueTotal = vsoIssues.Count
issueNumber = 1

'Walk through the validation issues
 For curIssue = 1 To issueTotal
      Set vsoIssue = vsoDocument.Validation.Issues(issueNumber)

     ' Delete the issues that belong to the vsoValidationRuleSet rule set
     If vsoIssue.Rule.RuleSet Is vsoValidationRuleSet Then
         vsoIssue.Delete
     Else
        issueNumber = issueNumber + 1
     End If

 Next curIssue

Следующий код VBA добавляет вопрос, связанный с фигурой vsoShape на странице vsoPage, в существующее правило vsoValidationRule. Предполагается, что vsoValidationRule является допустимым объектом Visio.ValidationRule, vsoShape является допустимым объектом Visio.Shape, а vsoPage является допустимым объектом Visio.Page.

     VBA                                                                                                                        
'Add a custom issue to the vsoValidationRule validation rule and associate it with
     'shape vsoShape on page vsoPage
     Set vsoValidationIssue = vsoValidationRule.AddIssue(vsoPage, vsoShape)

При запуске проверки Visio сохраняет свойство ValidationIssue.Ignored для всех существующих вопросов. В конце проверки Visio восстанавливает это свойство для вопросов, которые существовали при запуске проверки, включая те, которые были удалены и повторно вставлены в рамках процесса проверки. Visio использует фигуру, страницу и правило, связанные с вопросом, для определения его существования до проверки, поскольку идентификатор вопроса мог измениться. Это значит, что вопросы, удаляемые и повторно вставляемые в рамках процесса обработки события  RuleSetValidated, сохраняют свои прежние значения ValidationIssue.Ignored.