Этот пример показывает, как создать отчет с разделами, которые пронумерованы согласно системной иерархии. Каждый раздел содержит системный снимок состояния и подразделы, которые содержат снимки состояния подсистемы. Чтобы создать такой раздел, создайте объект раздела, добавьте снимок состояния схемы, и затем добавьте разделы подсистемы. Чтобы создать разделы подсистемы, снова создайте раздел, добавьте, что схема подсистемы создает снимки и затем добавляет свои разделы подсистемы. Алгоритм, чтобы создать разделы является рекурсивным. Этот пример создает и использует локальную функцию, вызванную createSystemSection, который реализует рекурсивный алгоритм.
Откройте модель.
model = "sf_car";
open_system(model);
Создайте и откройте объект отчета.
% Change the output type from "pdf" to "docx" or "html" to create a % Word or HTML report, respectively. rpt = slreportgen.report.Report("myreport", "pdf"); open(rpt);
Добавьте титульный лист.
titlepage = mlreportgen.report.TitlePage();
titlepage.Title = "Hierarchical Report";
add(rpt, titlepage);
Добавьте оглавление с количеством набора уровней к 6, который является максимумом.
toc = mlreportgen.report.TableOfContents(); toc.TOCObj.NumberOfLevels = 6; add(rpt, toc);
Создайте системные разделы для модели путем вызывания createSystemSection локальной функции (см. ниже). Эта функция рекурсивно вызывает себя, чтобы создать разделы для подсистем.
section = createSystemSection(model); add(rpt, section);
Сгенерируйте и отобразите отчет.
close(rpt); rptview(rpt);
Системный раздел состоит из системного снимка состояния и его подсистем в подразделах. Чтобы создать системный раздел, найдите все системы одним уровнем глубоко при помощи slreportgen.finder. DiagramFinder с SearchDepth 1.
function section = createSystemSection(sys) df = slreportgen.finder.DiagramFinder(sys); df.SearchDepth = 1; % Use the finder in iterator mode. The next function returns search results % one-by-one and the hasNext function determines when there are no more % search results. To obtain the current system, call the next function % once. sysResult = next(df); % Now, create a section using mlreportgen.report.Section with the system % name as the title. section = mlreportgen.report.Section( ... "Title", mlreportgen.utils.normalizeString(sysResult.Name)); % Add a system snapshot and a caption that shows the full diagram path. % To include additional information about the system, add it to the % section object. diag = slreportgen.report.Diagram(sysResult.Object); diag.Snapshot.appendCaption(sysResult.Path); add(section, diag); % To create subsections, loop through all subsystems and recursively call % createSystemSection. Before calling createSystemSection, add a page break % so each system starts on a new page. Note that adding a page break right % after the system snapshot would add a blank page at the end of the report. while hasNext(df) childSysResult = next(df); add(section, mlreportgen.dom.PageBreak()); subSection = createSystemSection(childSysResult.Object); add(section, subSection); end end