exponenta event banner

Иерархические системы отчетов

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

Создание иерархического отчета с помощью функции createSystemSection

Откройте модель.

model = "slrgex_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);

Определение локальной функции createSystemSection

Системный раздел состоит из системного снимка и его подсистем в подразделах. Чтобы создать раздел системы, найдите все системы на один уровень глубиной, используя slreportgen.finder.DidiedicFinder с SeireDepth, равным 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