Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
При задании свойств 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.