При задании свойств TargetType, FilterExpression и TestExpression правила Visio управляет вопросами, связанными с правилом. В очень сложных правилах проверки эти свойства можно пропустить и реализовать логику проверки в программном коде решения. В этом случае решение должно дождаться события RuleSetValidated, связанного с набором правил, и использовать собственную логику для определения списка вопросов, связанных с набором правил. Сложность правил, создаваемых с помощью этого метода, ограничивается только возможностью разработки кода, способного находить соответствующие вопросы.
Существует два основных метода управления вопросами. Краткое описание каждого метода и объяснение его параметров представлено в таблице.
Основные методы управления вопросами
Метод
Описание метода
Параметр
Описание параметра
ValidationRule.AddIssue
[ http://msdn.microsoft.com/en-us/library/ff767586.aspx ]
Создает новый вопрос проверки на основе правила проверки, и добавляет его в документ.
Если дополнительному параметру TargetShape значение не задано, вопрос проверки относится к странице. Если значение не задается никаким дополнительным параметрам, вопрос проверки относится к документу.
TargetPage(необязательный параметр)
TargetShape(необязательный параметр)
Страница, содержащая либо непосредственно вопрос, либо фигуру с вопросом.
ValidationIssue.Delete [ http://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.IssuesissueTotal = vsoIssues.CountissueNumber = 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.