Реализуйте расширение RMI для поддержки пользовательского типа документа

Requirements Management Interface (RMI) обеспечивает инструменты для создания и рассмотрения ссылок между элементами модельно-ориентированного проектирования и документами требований. RMI оказывает встроенную поддержку для многих типов документа. Кроме того, можно реализовать расширения типа настраиваемой ссылки, чтобы позволить соединиться с другими типами документа. Этот пример иллюстрирует реализацию расширения RMI для соединения с презентациями Microsoft PowerPoint.

Файлы, чтобы Использовать с этим Примером

В целях этого примера в качестве примера вы будете объекты ссылки в slvnvdemo_powerwindowController.slx модель со слайдами в powerwindowController.pptx Презентация PowerPoint. Откройте модель Simulink slvnvdemo_powerwindowController.slx.

open_system('slvnvdemo_powerwindowController');

Настройте менеджера по требованиям, чтобы работать со ссылками

  1. Во вкладке Apps откройте менеджера по Требованиям.

  2. Во вкладке Requirements обеспечьте Размещение>, Браузер Требований выбран.

  3. В Браузере Требований, в Представлении выпадающее меню, выбирают Links.

В этом примере вы будете работать исключительно во вкладке Requirements, и любые ссылки на кнопки панели инструментов находятся в этой вкладке.

Сохраните ссылки внешне

В slvnvdemo_powerwindowController модель, сконфигурируйте настройки, чтобы сохранить ссылки внешне. Во вкладке Requirements выберите Link Settings> Default Link Storage. Это откроет диалоговое окно Requirements Settings. Под направляющимся режимом хранения По умолчанию для трассируемости данные выбирают Store внешне (в отдельном *.slmx файле). В качестве альтернативы оцените следующий код.

rmipref('StoreDataExternally', true);

Установленные файлы определения типа ссылки

В зависимости от приложения вы используете для своих документов пользовательского типа, можно реализовать основную поддержку, включая создание ссылки через диалоговое окно Outgoing Links и соединить навигацию через ярлыки контекстного меню, или можно принять решение реализовать более многофункциональную поддержку с выбором, соединяющимся через ярлыки контекстного меню, проверку непротиворечивости, и т.д.

В этом примере вы будете использовать определение Типа Настраиваемой ссылки, которое было создано с нуля. Чтобы узнать больше о API расширения Типа Настраиваемой ссылки, обратитесь к включенному linktype_TEMPLATE.m путем оценки следующего:

edit([matlabroot,'/toolbox/slrequirements/linktype_examples/linktype_TEMPLATE.m'])

Можно также рассмотреть фактические linktype файлы определения, используемые выпущенным продуктом. Для примера обратитесь к минимальному типу ссылки Текстового файла путем оценки следующего:

edit([matlabroot,'/toolbox/slrequirements/linktype_examples/linktype_rmi_text.m'])

Можно также обратиться к более усовершенствованному типу ссылки Рабочей книги Microsoft Excel:

edit([matlabroot,'/toolbox/slrequirements/linktype_examples/linktype_rmi_excel.m'])

Создайте и зарегистрируйте заблокированный файл типа ссылки

Файл rmidemo_pp_linktype.m в текущей рабочей директории содержит информацию о типе ссылки для RMI, чтобы работать с файлами Microsoft PowerPoint. Укажите тип ссылки с RMI путем оценки следующего.

rmi('register', 'rmidemo_pp_linktype')

Это дает RMI команду распознавать расширения файла .ppt и .pptx как поддерживаемые файлы и использовать методы, заданные здесь для функциональности RMI.

Создайте первую ссылку

  • Щелкните правой кнопкой по фону slvnvdemo_powerwindowController модель в качестве примера. В контекстном меню выберите Requirements at This Level> Open Outgoing Links Dialog..., чтобы поднять диалоговое окно Outgoing Links.

  • Нажмите New, чтобы создать новую ссылку.

  • Расширьте Тип документа выпадающий список. Выберите Microsoft PowerPoint в нижней части списка.

  • Используйте Кнопку обзора, чтобы определить местоположение powerwindowController.pptx.

  • Введите метку Description, как Представление В качестве примера.

  • Нажмите ОК, чтобы сохранить новую ссылку и закрыть диалоговое окно.

В качестве альтернативы можно оценить следующий код, чтобы создать ссылку. Этот код заполняет информацию о месте назначения ссылки сначала, затем использует rmi функция, чтобы создать ссылки.

firstReq = rmi('createempty');
firstReq.reqsys = 'rmidemo_pp_linktype';
firstReq.doc = 'powerwindowController.pptx';
firstReq.description = 'Example presentation';
rmi('set', 'slvnvdemo_powerwindowController', firstReq);

Навигация к документу

Навигации к документу PowerPoint предоставляют функции в rmidemo_pp_linktype.m файл. Реализация этого и всех других методов требует детального знания API, доступных в приложении, которое управляет документами требований. Для этого примера Microsoft PowerPoint вы будете использовать API COM. Вы будете использовать actxserver команда в MATLAB, чтобы создать связь с приложением PowerPoint. Затем вы будете использовать вызовы как Application.Presentations.Open(FILENAME) управлять приложением PowerPoint через rmidemo_pp_linktype методы. Смотрите Страницы с описанием Разработчика Microsoft для получения информации, на которой Объекты PowerPoint и Методы доступны через API COM.

rmidemo_pp_linktype.m файл содержит функции, чтобы найти правильный .pptx файл.

Возвратитесь к модели Simulink для slvnvdemo_powerwindowController. Щелкните правой кнопкой по фону схемы Simulink и перейдите к Требованиям на Этом Уровне снова из контекстного меню. Заметьте новый ярлык навигации наверху подменю. Когда вы кликаете по этому новому ярлыку, MATLAB открывает файл PowerPoint.

Можно переместиться к ссылке по тому же пути как прежде, или путем оценки следующего: rmi('view','slvnvdemo_powerwindowController', 1)

Реализуйте навигацию к данному номеру слайда

Предположим, что вы хотите соединить Truth Table блокируйтесь, который соединяется с driver вход control блок подсистемы к соответствующему номеру слайда 5 в презентации PowerPoint. Перейдите к Truth Table блокируйте или оцените следующий код.

rmidemo_callback('locate','slvnvdemo_powerwindowController/Truth Table')
  • Щелкните правой кнопкой по блоку, выберите Requirements> Open Outgoing Links Dialog..., чтобы поднять диалоговое окно Outgoing Links.

  • Нажмите New, чтобы создать новую ссылку.

  • Задайте тип документа и имя файла как прежде.

  • Введите вход Driver в поле Description.

  • Войдите 5 в поле ввода Местоположения/Идентификатора.

  • Нажмите ОК, чтобы сохранить новую ссылку.

Если вы переместитесь по этой ссылке из схемы Simulink, документ откроется как прежде, но это теперь прокрутит вниз к 5-му понижению. Помощник goToSlide() метод наряду с кодом в NavigateFcn() функционируйте открывают правильное понижение.

function goToSlide(hDoc, slideNum)
  disp(['Opening slide #' num2str(slideNum)]);
  hDoc.Slides.Item(slideNum).Select;
end

Перейдите к ссылке путем выбора Truth Table блокируйтесь, щелкнув правой кнопкой и выбор Requirements> 1. "Вход Driver". Окно презентации PowerPoint должно прокрутить вниз к 5-му понижению.

В качестве альтернативы создайте ссылку путем оценки следующего кода. Этот код заполняет информацию о месте назначения ссылки сначала, затем использует rmi функция, чтобы создать ссылки.

secondReq = rmi('createempty');
secondReq.reqsys = 'rmidemo_pp_linktype';
secondReq.doc = 'powerwindowController.pptx';
secondReq.description = 'Driver input';
secondReq.id = '#5';
rmi('set', 'slvnvdemo_powerwindowController/Truth Table', secondReq);

Можно переместиться к ссылке по тому же пути как прежде, или путем оценки следующего: rmi('view','slvnvdemo_powerwindowController/Truth Table', 1)

Соединение и навигация, чтобы двигать ID

Соединение с сохраненным номером слайда может быть проблематичным: ссылки могут стать устаревшими, когда вы изменяете документ. Например, скопируйте первое понижение в нашем представлении:

Теперь все другие слайды переключают вниз одним. Навигация от Входа Драйвера Truth Table блок поднимет неправильное понижение. Необходимо использовать тип другого места кроме Page/Item number.

  • Выберите тот же Truth Table блокируйтесь который подключения к driver вход control подсистема. Следующий код перешел к Truth Table блок.

rmidemo_callback('locate','slvnvdemo_powerwindowController/Truth Table')
  • Щелкните правой кнопкой по блоку, выберите Requirements> Open Outgoing Links Dialog..., чтобы поднять диалоговое окно Outgoing Links.

  • Нажмите New, чтобы создать новую ссылку.

  • Выберите Named Item от Местоположения (Тип/Идентификатор) выпадающий список.

  • Введите 260 в поле ввода Местоположения.

  • Нажмите ОК, чтобы сохранить модифицированную ссылку.

"260" персистентный ID для Driver Input понижение (больше на этом ниже).

Теперь после этого изменения, навигации от Входа Драйвера Truth Table блок поднимет правильное понижение, даже после того, как его номер заказа изменится.

К сожалению, каждый не видит идентификаторы понижения в приложении PowerPoint пользовательский интерфейс. Чтобы узнать ID для 5-го понижения, можно использовать API COM:

>> hApp = actxGetRunningServer('powerpoint.application');
>> hDoc = hApp.ActivePresentation;
>> hDoc.Slides.Item(5).SlideID 
ans =
  260

Более удобные для пользователя решения этой проблемы покрыты разделами ниже.

В качестве альтернативы можно создать ссылку с помощью следующего кода. Этот код заполняет информацию о месте назначения ссылки сначала, затем использует rmi функция, чтобы создать ссылки.

betterLink = rmi('createempty');
betterLink.reqsys = 'rmidemo_pp_linktype';
betterLink.doc = 'powerwindowController.pptx';
betterLink.description = 'Driver input - better link';
betterLink.id = '@260';
rmi('set', 'slvnvdemo_powerwindowController/Truth Table', betterLink);

Можно переместиться месту назначения ссылки по тому же пути как прежде или оценить следующее: rmi('view','slvnvdemo_powerwindowController/Truth Table', 1)

Соединение Используя документ индексирует вкладку

Как показано выше, можно создать персистентные ссылки, которые не становятся устаревшими после того, как слайды в соединенном представлении переупорядочиваются, но у вас нет быстрого доступа к персистентным значениям SlideID в PowerPoint. Одно возможное решение состоит в том, чтобы выбрать желаемое понижение во вкладке Document Index Исходящего диалогового окна Ссылок. Содержимым вкладки Document Index управляет ContentsFcn() метод в linktype файле определения. можно обеспечить реализацию для этого метода, такого, что персистентное значение SlideID хранится RMI при создании ссылки вместо энергозависимого значения SlideNumber.

ContentsFcn() методы возвращают три массива:

  • labels чтобы использовать для Документа индексируют элементы списка и ярлыки навигации

  • depths указать на иерархическое отношение перечисленных элементов (неиспользованный в этом примере)

  • locations использовать для сохраненных уникальных идентификаторов

ContentsFcn() реализация использует следующий вызов API PowerPoint, чтобы заполнить значения местоположения:

hDoc.Slides.Item(k).SlideID

Это гарантирует персистентную информацию о навигации даже после того, как порядок понижения изменится. Обратите внимание на то, что вы используете в качестве префикса для locations значения, чтобы указать, что номер, который следует, хранит Именованное значение местоположения Элемента вместо понижения (страница) значение местоположения номера.

Используйте вкладку Document Index в Исходящем Редакторе связей, чтобы создать ссылку.

  • Перейдите к Truth Table1 блокируйтесь который подключения к passenger вход control блок подсистемы. Следующий код перешел к Truth Table1 блок.

rmidemo_callback('locate','slvnvdemo_powerwindowController/Truth Table1')
  • Щелкните правой кнопкой по блоку, выберите Requirements> Open Outgoing Links Dialog..., чтобы поднять диалоговое окно Outgoing Links.

  • Нажмите New, чтобы создать новую ссылку.

  • Задайте Microsoft PowerPoint как Тип документа.

  • Задайте powerwindowController.pptx как Документ в меню Browse.

  • Оставьте вход Description.

  • Вместо того, чтобы задать Местоположение вручную, переключитесь на вкладку Document Index, найдите линию, которая соответствует Пассажирскому Входному понижению, и дважды кликните линию.

  • Заметьте, что остающиеся поля ввода автоматически заполнены правильной информацией.

  • Нажмите ОК, чтобы сохранить новую ссылку.

Перейдите к ссылке путем щелчка правой кнопкой по Truth Table1 блокируйтесь и Requirements выбора> 1. "Пассажирский Вход состоит из вектора с тремя элементами в powerwindowController.pptx". Эта ссылка должна работать правильно даже после того, как слайды смещены или переупорядочены.

Кроме того, можно создать ссылку путем оценки следующего кода. Ссылка ID создается тот же путь как в предыдущем разделе, где персистентный ID установлен. Этот код заполняет информацию о месте назначения ссылки сначала, затем использует rmi функция, чтобы создать ссылки.

indexLink = rmi('createempty');
indexLink.reqsys = 'rmidemo_pp_linktype';
indexLink.doc = 'powerwindowController.pptx';
indexLink.description = 'Passenger input - linked via Index tab';
indexLink.id = '@259';
rmi('set', 'slvnvdemo_powerwindowController/Truth Table1', indexLink);

Переместитесь к ссылке по тому же пути как выше или оцените следующее: rmi('view','slvnvdemo_powerwindowController/Truth Table1', 1)

Соединитесь с текущим слайдом в PowerPoint

Еще лучший способ поддержать устойчивые персистентные ссылки через Ярлыки Соединения Выбора. API RMI позволяет вам задавать SelectionLinkFcn() функция для соединения с текущим объектом в текущем документе. На следующем шаге нашего примера вы автоматизируете соединение с текущим слайдом в в настоящее время открытой презентации PowerPoint.

Раздел Requirements контекстных меню отображает ярлык для соединения с текущим слайдом в PowerPoint.

  • В вашей копии примера презентации PowerPoint перейдите к слайду 6, названному Top or bottom of the window frame is reached.

  • В схеме Simulink щелкните правой кнопкой по endstop блок.

rmidemo_callback('locate','slvnvdemo_powerwindowController/endstop')
  • Щелкните правой кнопкой по блоку и выберите Requirements> Link to Slide in PowerPoint из контекстного меню

RMI автоматически создаст ссылку на SlideID, который соответствует текущему местоположению в активном представлении. RMI попытается использовать текст заголовка целевого понижения как метка для новой ссылки.

Чтобы перейти к ссылке, щелкните правой кнопкой по endstop блокируйтесь снова и выберите Requirements> 1. "Верхняя часть или нижняя часть рамки окна являются rea...". Программа PowerPoint должна открыться к правильному понижению.

В качестве альтернативы можно создать ссылку с помощью следующего кода. Ссылка ID создается тот же путь как в предыдущем разделе, где персистентный ID установлен. Этот код заполняет информацию о месте назначения ссылки сначала, затем использует rmi функция, чтобы создать ссылки.

selectionLink = rmi('createempty');
selectionLink.reqsys = 'rmidemo_pp_linktype';
selectionLink.doc = 'powerwindowController.pptx';
selectionLink.description = 'Endstop signal - selection link';
selectionLink.id = '@261';
rmi('set', 'slvnvdemo_powerwindowController/endstop', selectionLink);

Можно переместиться к ссылке по тому же пути как выше, или можно оценить следующее: rmi('view','slvnvdemo_powerwindowController/endstop', 1)

Создайте двунаправленные ссылки

Как последний шаг этого примера вы расширите SelectionLinkFcn() функционируйте, чтобы опционально вставить гиперссылку в текущий слайд для навигации от PowerPoint до связанного объекта в Simulink.

Ваш тип ссылки PowerPoint позволяет автоматизированную вставку средств управления навигацией Simulink в соединенные слайды, когда вы используете Ссылку, чтобы Скользить в ярлыке PowerPoint в контекстном меню для объектов Simulink. Чтобы активировать эту опцию, в модели Simulink выбирают вкладку Requirements. Затем выберите Link Settings> Linking Options. В качестве альтернативы оценка следующего кода откроет это диалоговое окно: rmi_settings_dlg.

Под При создании основанного на выборе заголовка ссылок, убедитесь, что Изменяют место назначения для двунаправленного соединения, проверяется. В качестве альтернативы следующий код установит эти настройки.

origMcState = rmipref('UnsecureHttpRequests', true);
origTwoWayPref = rmipref('BiDirectionalLinking', true);

Начинаясь в R2019a, встроенный сервис HTTP MATLAB активируется на защищенном порте 31515, но не на небезопасном порте 31415. Поскольку наши URL навигации не могут использовать защищенный порт без установки сертификата, необходимо также выбрать Enable, внешняя возможность соединения в MATLAB запускает флажок в нижней части этой вкладки.

Чтобы испытать это, повторите процедуру соединения выбора для obstacle предупредите о входном блоке, чтобы сопоставить его с соответствующим понижением в представлении в качестве примера.

  • Перейдите к слайду 7 в powerwindowController.pptx (сделайте его активным слайдом).

  • Перейдите к obstacle блокируйтесь в модели Simulink.

rmidemo_callback('locate','slvnvdemo_powerwindowController/obstacle')
  • Щелкните правой кнопкой по блоку и выберите Requirements> Link to Slide in PowerPoint из контекстного меню.

Необходимо теперь видеть новый значок RMI, вставленный в верхнем левом углу понижения.

Следуйте инструкциям Microsoft PowerPoint, чтобы перейти по ссылке, и она должна подсветить соответствующий блок в slvnvdemo_powerwindowController модель.

Импорт элементов из документа PowerPoint в Simulink Requirements

Продукт Simulink Requirements включает возможность импорта документа, если ваше Пользовательское определение Linktype включает все необходимые части. Используя файл настройки rmidemo_pp_linktype.m и slreq.import() API, вы можете автоматически получение по запросу - в содержимое как объекты типа slreq.Reference или slreq.Requirement, и сохраните в .slreqx файл. Обратитесь к slreq.import для получения дополнительной информации.

Поскольку наше пользовательское определение типа документа не обеспечивает реализацию для HtmlViewFcn(), только импорт простого текста будет работать.

Убедитесь, что документ открыт в PowerPoint, прежде чем вы запустите slreq.import() команда. Средство импорта отобразит количество импортированных элементов, которое для нашего случая соответствует количеству слайдов. Используйте slreq.editor команда к принесенному Редактор Simulink Requirements пользовательский интерфейс. Расширьте узел документа, чтобы просмотреть импортированные элементы. Нажмите кнопку "Show in document", чтобы перейти от импортированной ссылки до исходного элемента в исходном документе.

В качестве альтернативы выполните эти шаги, чтобы импортировать требования из командной строки.

  • Убедитесь что powerwindowController.pptx документ открыт перед импортом:

rmi('view','slvnvdemo_powerwindowController', 1)
  • Импортируйте использование требований:

slreq.import('rmidemo_pp_linktype', 'AsReference', true, 'RichText', false)
  • Просмотрите требования в Редакторе Требований с slreq.editor

Куда пойти отсюда

В противоположность соединению с Понижением в целом, можно хотеть изменить SelectionLinkFcn() реализация, чтобы соединиться с определенным текстом или изображением в понижении. Обратитесь к Страницам с описанием Разработчика Microsoft для получения информации о том, как настроить привязку и внешний вид средств управления навигацией Simulink. Например, вместо того, чтобы вставить значок с гиперссылкой, можно хотеть присоединить гиперссылку на выделенный текст на текущем слайде.

Если необходимо соединиться с шаблоном Искомого текста, независимо от которого понижение включает сохраненный текст, можно ли расширить объявление поддерживаемых типов местоположения, чтобы включать? символ:

 linkType.LocDelimiters = '#@?';

Необходимо затем обеспечить дополнительный case для switch(locationStr(1)) в NavigateFcn() метод. Соответствующий findText() помощник запрашивает объект презентации PowerPoint для всех элементов TextFrame во всех Слайдах и выбирает элемент с совпавшим текстом.

Шаблон типа ссылки RMI поддерживает другие методы, в зависимости от ваших потребностей. Например, чтобы покрыть ваши настраиваемые ссылки Проверкой Непротиворечивости Требований, рассмотрите реализацию следующих методов:

  • IsValidDocFcn()

  • IsValidIdFcn()

  • IsValidDescFcn()

Чтобы настроить путь, ваши ссылки отображены в сгенерированных отчетах, можно использовать:

  • CreateURLFcn()

  • UrlLabelFcn()

  • DocDateFcn()

  • DetailsFcn()

  • HtmlViewFcn()

Если ваше приложение не основано на файле, но использует собственную базу данных, чтобы хранить документы требований, необходимо отметить тип ссылки как "не файл":

linkType.IsFile = 0;

и обеспечьте специализированную реализацию для BrowseFcn(). Это - функция, которая вызвана, когда вы кликаете по Кнопке обзора в Исходящем диалоговом окне Ссылок.

rmi('edit','slvnvdemo_powerwindowController');

Очистка

Команды очистки. Нерегистры rmidemo_pp_linktype, очищает открытые наборы требования, не сохраняя изменения и закрывает открытые модели, не сохраняя изменения.

rmi('unregister', 'rmidemo_pp_linktype');
slreq.clear();
bdclose all;