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

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

Файлы, используемые в этом примере

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

open_system('slvnvdemo_powerwindowController');

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

  1. На вкладке Приложения откройте Диспетчер требований.

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

  3. В браузере требований в раскрывающемся меню View выберите Ссылки.

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

Если в течение этого примера в раскрывающемся меню «Вид» браузера требований в любой момент можно изменить значение параметра «Требования», это приведет к изменению кнопок, которые можно увидеть, и, возможно, вы не сможете правильно следовать инструкциям без возврата на «Ссылки».

Внешнее хранение ссылок

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

rmipref('StoreDataExternally', true);

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

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

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

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

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

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

Можно также обратиться к более расширенному типу ссылки Microsoft Excel Workbook:

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... для вызова диалогового окна «Исходящие ссылки».

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

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

  • Используйте кнопку Browse, чтобы найти powerwindowController.pptx.

  • Введите метку «Описание», например «Пример презентации».

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

Также можно оценить следующий код, чтобы создать ссылку. Этот код сначала заполняет информацию о месте назначения ссылки, затем использует 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 будет использоваться COM API. Вы будете использовать actxserver команда в MATLAB для создания соединения с приложением PowerPoint. Тогда вы будете использовать вызовы, как Application.Presentations.Open(FILENAME) для манипулирования приложением PowerPoint через rmidemo_pp_linktype методы. Для получения информации о том, какие объекты и методы PowerPoint доступны через COM API, см. страницы Справочника разработчиков Майкрософт.

The 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... для вызова диалогового окна «Исходящие ссылки».

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

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

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

  • Введите 5 в поле Location/Identifier входа.

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

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

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

Перейдите к ссылке, выбрав Truth Table блок, щелчок правой кнопкой мыши и выбор Requirements > 1. «Драйвер входа». Окно презентации 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)

Связь и навигация с идентификатором слайда

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

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

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

rmidemo_callback('locate','slvnvdemo_powerwindowController/Truth Table')
  • Щелкните правой кнопкой мыши блок, выберите Requirements > Open Outgoing Links Dialog... для вызова диалогового окна «Исходящие ссылки».

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

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

  • Введите 260 в поле Location input.

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

«260» является постоянным идентификатором для Driver Input слайд (подробнее об этом ниже).

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

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

>> 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. Одним из возможных решений является выбор необходимого слайда на вкладке Индекс диалогового окна Outgoing Links. Содержимое вкладки Индекс контролируется ContentsFcn() метод в файле определения типа linktype. можно обеспечить реализацию для этого метода таким образом, чтобы постоянное значение SlideID сохранялось в RMI при создании ссылки вместо изменчивого значения SlideNumber.

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

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

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

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

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

hDoc.Slides.Item(k).SlideID

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

Для создания ссылки используйте вкладку Индекс документа в редакторе исходящих ссылок.

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

rmidemo_callback('locate','slvnvdemo_powerwindowController/Truth Table1')
  • Щелкните правой кнопкой мыши блок, выберите Requirements > Open Outgoing Links Dialog... для вызова диалогового окна «Исходящие ссылки».

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

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

  • Задайте powerwindowController.pptx как документ из меню Обзор.

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

  • Вместо определения местоположения вручную перейдите на вкладку Индекс, найдите линию, которая соответствует ползунку Passenger Inputs, и дважды щелкните по линии.

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

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

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

Также можно создать ссылку путем оценки следующего кода. Ссылка 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

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

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

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

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

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

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

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

Также можно создать ссылку с помощью следующего кода. Ссылка 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. Затем выберите Ссылку Settings > Linking Опций. Кроме того, оценка следующего кода откроет это диалоговое окно: rmi_settings_dlg.

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

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

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

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

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

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

rmidemo_callback('locate','slvnvdemo_powerwindowController/obstacle')
  • Щелкните правой кнопкой мыши блок и выберите в контекстном меню «Требования» > «Ссылкой для слайда в PowerPoint».

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

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

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

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

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

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

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

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

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

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

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

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

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

 linkType.LocDelimiters = '#@?';

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

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

  • IsValidDocFcn()

  • IsValidIdFcn()

  • IsValidDescFcn()

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

  • CreateURLFcn()

  • UrlLabelFcn()

  • DocDateFcn()

  • DetailsFcn()

  • HtmlViewFcn()

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

linkType.IsFile = 0;

и обеспечить специализированную реализацию для BrowseFcn(). Это функция, которая вызывается при нажатии кнопки Browse в диалоговом окне Outgoing Links.

rmi('edit','slvnvdemo_powerwindowController');

Очистка

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

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

Копирайт 2014-2018 The MathWorks, Inc

Для просмотра документации необходимо авторизоваться на сайте