Documentation

Implement RMI Extension for Support of Custom Document Type

Requirements Management Interface (RMI) provides tools for creating and reviewing links between model-based design elements and requirements documents. RMI provides built-in support for many document types. Additionally, you can implement custom link-type extensions to enable linking to other document types. This example illustrates implementation of RMI extension for linking with Microsoft PowerPoint presentations.

Files to Use with This Example

For the purposes of this example tutorial, we will link objects in the slvnvdemo_powerwindowController.slx model with slides in the powerwindowController.pptx PowerPoint presentation. Because of possible user permission limitations, and to avoid the risk of unintentionally modifying installed files, it is recommended that you create your own copies of both the model. and the document. Consider making both files writeable, and configure RMI settings to store traceability data in a separate .req file (see the Storage tab in the Settings dialog).

rmipref('StoreDataExternally', true); % use "external" (.req) storage
rmidemoroot = [matlabroot,'/toolbox/slrequirements/slrequirementsdemos'];
copyfile([rmidemoroot,'/powerwin_reqs/powerwindowController.pptx'], './powerwindowController_copy.pptx');
fileattrib(fullfile(pwd, 'powerwindowController_copy.pptx'),'+w'); % make user copy writable
copyfile([rmidemoroot,'/slvnvdemo_powerwindowController.slx'], './slvnvdemo_powerwindowController_copy.slx');
fileattrib(fullfile(pwd, 'slvnvdemo_powerwindowController_copy.slx'),'+w'); % make user copy writable
open_system('slvnvdemo_powerwindowController_copy');

Installed Link Type Definition Files

Depending on the application you use for your custom-type documents, you can implement basic support, including link creation via the Link Editor dialog box and link navigation via context menu shortcuts, or you may choose to implement a more feature-rich support with selection linking via context menu shortcuts, consistency checking, etc.

In this tutorial we will create a Custom Link Type definition from scratch. To find out more about the Custom Link Type extension API, please refer to the included linktype_TEMPLATE, or review the actual linktype definition files used by the released product. For an example, refer to the minimal Text File link type or the more advanced Microsoft Excel Workbook link type.

Create and Register a Stubbed Link Type File

Copy and paste the following code into the MATLAB Editor and save the script as slvnvdemo_pp_linkype.m anywhere on MATLAB path.

function linkType = rmidemo_pp_linktype
    linkType = ReqMgr.LinkType;
    linkType.Registration = mfilename;
    linkType.Version = '';  % not used
    %
    % Label describing this link type
    linkType.Label = 'Microsoft Power Point';
    %
    % File information
    linkType.IsFile = 1;
    linkType.Extensions = {'.ppt', '.pptx'};
    %
    % Location delimiters
    linkType.LocDelimiters = '#';
    %
    % Supported methods
    linkType.NavigateFcn = @NavigateFcn;
end
function NavigateFcn(filePath,locationStr)
    if isempty(locationStr)
        disp(['Navigating to "' filePath '"']);
    else
        disp(['Navigating to "' locationStr '" in "' filePath '"']);
    end
end

Alternatively, click here to install this script.

Next, register your new link type with RMI.

This instructs RMI to recognize the filename extensions .ppt and .pptx as supported files and to use the methods defined here for RMI functionality.

rmidemoroot = [matlabroot,'/toolbox/slrequirements/slrequirementsdemos'];
copyfile([rmidemoroot,'/powerwin_reqs/rmidemo_pp_linktype_step1.m'], './rmidemo_pp_linktype.m');
fileattrib('./rmidemo_pp_linktype.m','+w');
rmi('register', 'rmidemo_pp_linktype')

Create the First Link

  • Right-click the background of the slvnvdemo_powerwindowController_copy example model and expand the Requirements Traceability submenu

  • Click Open Link Editor to bring up the Link Editor dialog

  • Click New to create a new link

  • Expand the Document Type drop-down list. Microsoft Power Point appears at the bottom

  • Use the Browse button to locate your copy of the example document

  • Enter a Description label, like Example Presentation

  • Click OK to save the new link and close the dialog

Right-click the Simulink diagram background again and expand the Requirements Traceability submenu. Notice the new navigation shortcut at the top of the submenu. When you click this new shortcut, MATLAB displays the message in a command window, according to the stubbed implementation of rmidemo_pp_linktype.

firstReq = rmi('createempty');
firstReq.reqsys = 'rmidemo_pp_linktype';
firstReq.doc = 'powerwindowController_copy.pptx';
firstReq.description = 'Example presentation';
rmi('set', 'slvnvdemo_powerwindowController_copy', firstReq);
rmi('view','slvnvdemo_powerwindowController_copy', 1);
Navigating to "/tmp/BR2017bd_694400_188374/publish_examples0/tpeb62b15f/powerwindowController_copy.pptx"

Implement Navigation to the Document

You can now provide a functional implementation for the NavigateFcn in rmidemo_pp_linktype.m. Implementation of this and all other methods requires detailed knowledge of the APIs available in the application that manages the requirements documents. For this Microsoft PowerPoint example we use COM API. We use the actxserver command in MATLAB to create a connection with the PowerPoint application. Then, we use calls like Application.Presentations.Open(FILENAME) to manipulate the PowerPoint application via the rmidemo_pp_linktype methods. See Microsoft's Developer Reference pages for information on which PowerPoint Objects and Methods are available via COM API.

Copy and paste the following code to replace the existing NavigateFcn() stub in rmidemo_pp_linktype.m. Make sure to copy the new helper functions as well.

function NavigateFcn(filePath, locationStr)
    if isempty(loctionStr)
        disp(['Navigating to "' filePath '"']);
    else
        disp(['Navigating to "' locationStr '" in "' filePath '"']);
    end
    hDoc = openFile(filePath);
    if isempty(hDoc)
        disp(['Failed to open ' filePath]);
    else
        % try to bring the window forward
        [~, fileName, ext] = fileparts(filePath);
        reqmgt('winFocus', [fileName ext]); % locate by window title match
    end
end
function hDoc = openFile(fileName)
    disp(['Checking for ' fileName]);
    hApp = getApplication();
    hDoc = findOpenDoc(hApp, fileName);
    if isempty(hDoc)
        try
            hDoc = hApp.Presentations.Open(fileName);
        catch
            hDoc = [];
        end
    end
end
function hApp = getApplication()
    try
        % try to connecto to already running application
        hApp = actxGetRunningServer('powerpoint.application');
    catch
        % start-up PowerPoint and connect to it
        hApp = actxserver('powerpoint.application');
    end
end
function hDoc = findOpenDoc(hApp, fileName)
    hDoc = [];
    hDocs = hApp.Presentations;
    for i = 1:hDocs.Count
        if strcmp(hDocs.Item(i).FullName, fileName)
            hDoc = hDocs.Item(i);
            return;
        end
    end
end

Alternatively, click to install.

Retry navigation from the block diagram. The Microsoft PowerPoint application should start and display the correct document.

rmidemoroot = [matlabroot,'/toolbox/slrequirements/slrequirementsdemos'];
copyfile([rmidemoroot,'/powerwin_reqs/rmidemo_pp_linktype_step2.m'], './rmidemo_pp_linktype.m');
fileattrib('./rmidemo_pp_linktype.m','+w');
rmi('view','slvnvdemo_powerwindowController_copy', 1);
Navigating to "/tmp/BR2017bd_694400_188374/publish_examples0/tpeb62b15f/powerwindowController_copy.pptx"

Implement Navigation to a Given Slide Number

Suppose we want to link Driver Input Truth Table to the corresponding slide number 5 in the PowerPoint presentation.

  • Right-click the block, expand the Requirements Traceability submenu, and open the Link Editor dialog

  • Specify the document type and filename as before

  • Enter Driver input into the Description field

  • Enter 5 into the Location/Identifier input field

  • Click OK to save the new link

If you navigate this link from the Simulink diagram, the document will open as before, but it will not scroll down to 5th slide. You need to extend the implementation of NavigateFcn() in rmidemo_pp_linktype.m to allow navigation to particular slide. Copy and paste the following implementation, including the helper goToSlide() method.

function NavigateFcn(filePath, locationStr)
    if isempty(locationStr)
        disp(['Navigating to "' filePath '"']);
    else
        disp(['Navigating to "' locationStr '" in "' filePath '"']);
    end
    hDoc = openFile(filePath);
    if isempty(hDoc)
        disp(['Failed to open ' filePath]);
    else
        if ~isempty(locationStr)
            switch(locationStr(1))
                case '#'
                    slideNum = str2num(locationStr(2:end)); %#ok<ST2NM>
                    goToSlide(hDoc, slideNum);
                otherwise
                    warning('Invalid location specifier: %s', locationStr);
            end
        end
        % try to bring the window forward
        [~, fileName, ext] = fileparts(filePath);
        reqmgt('winFocus', [fileName ext]); % locate by window title match
    end
end
function goToSlide(hDoc, slideNum)
    disp(['Opening slide #' num2str(slideNum)]);
    hDoc.Slides.Item(slideNum).Select;
end

Alternatively, click to install.

Retry navigation from the Driver Input Truth Table block.

PowerPoint presentation window should scroll down to 5th slide.

secondReq = rmi('createempty');
secondReq.reqsys = 'rmidemo_pp_linktype';
secondReq.doc = 'powerwindowController_copy.pptx';
secondReq.description = 'Driver input';
secondReq.id = '#5';
rmi('set', 'slvnvdemo_powerwindowController_copy/Truth Table', secondReq);
rmidemoroot = [matlabroot,'/toolbox/slrequirements/slrequirementsdemos'];
copyfile([rmidemoroot,'/powerwin_reqs/rmidemo_pp_linktype_step3.m'], './rmidemo_pp_linktype.m');
fileattrib('./rmidemo_pp_linktype.m','+w');
rmi('view','slvnvdemo_powerwindowController_copy/Truth Table', 1);
Navigating to "#5" in "/tmp/BR2017bd_694400_188374/publish_examples0/tpeb62b15f/powerwindowController_copy.pptx"

Implement Navigation to a Given Slide ID

Linking to a stored slide number can be problematic: links may get stale when you modify the document. For example, duplicate the first slide in our presentation:

Now all the other slides shift down by one. Navigation from the Driver Input Truth Table block will bring up the wrong slide. We need to use a different location type, other than Page/Item number. To do this we modify the LocDelimiters list in rmidemo_pp_linktype.m file to become:

  % Location delimiters
  linkType.LocDelimiters = '#@';

We also need to further extend the NavigateFcn implementation by adding another case:

          case '@'
              goToItem(hDoc, locationStr(2:end));

Finally, we add implementation for the goToItem() method:

function goToItem(hDoc, itemIdStr)
    disp(['Opening item ID ' itemIdStr]);
    itemId = str2num(itemIdStr); %#ok<ST2NM>
    hDoc.Slides.FindBySlideID(itemId).Select;
end

You can insert these changes manually, or click to install. You also need to unregister and re-register the linktype for these changes to go into effect.

rmi('unregister', 'rmidemo_pp_linktype');
rmidemoroot = [matlabroot,'/toolbox/slrequirements/slrequirementsdemos'];
copyfile([rmidemoroot,'/powerwin_reqs/rmidemo_pp_linktype_step4.m'], './rmidemo_pp_linktype.m');
fileattrib('./rmidemo_pp_linktype.m','+w');
rmi('register', 'rmidemo_pp_linktype');

Linking and Navigation to Slide ID

Now that our linktype supports Named Item location identifiers, do the following:

"260" is a persistent ID for the Driver Input slide (more on this below).

Now, after this change, navigation from the Driver Input Truth Table block will bring up the correct slide, even after its order number changes.

Unfortunately, one cannot see slide IDs in the PowerPoint application UI. To find out the ID for the 5th slide, you can use the COM API:

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

More user-friendly solutions to this problem are covered in the sections below.

betterLink = rmi('createempty');
betterLink.reqsys = 'rmidemo_pp_linktype';
betterLink.doc = 'powerwindowController_copy.pptx';
betterLink.description = 'Driver input - better link';
betterLink.id = '@260';
rmi('set', 'slvnvdemo_powerwindowController_copy/Truth Table', betterLink);
rmi('view','slvnvdemo_powerwindowController_copy/Truth Table', 1);
Navigating to "@260" in "/tmp/BR2017bd_694400_188374/publish_examples0/tpeb62b15f/powerwindowController_copy.pptx"

Enable Linking Via a Document Index Selection

As shown above, we can create persistent links that do not become stale after slides in linked presentation are re-ordered, but you do not have easy access to persistent SlideID values in PowerPoint. One possible solution is to select a desired slide in the Document Index tab of the Link Editor dialog. The content of the Document Index tab is controlled by the ContentsFcn() method in the linktype definition file. We can provide implementation for this method, such that the persistent SlideID value is stored by RMI when creating a link, insetead of the volatile SlideNumber value.

In the rmidemo_pp_linktype.m, add the ContentsFcn() declaration to the list of supported methods:

    % Supported methods
    linkType.NavigateFcn = @NavigateFcn;
    linkType.ContentsFcn = @ContentsFcn;

Next, provide the implementation for ContentsFcn():

function [labels, depths, locations] = ContentsFcn(filePath)
    hDoc = openFile(filePath);
    slidecount = hDoc.Slides.Count;
    if slidecount == 0
        labels = {'no slides in presentation!'};
        locations = {''};
        depths = 0;
    else
        labels = cell(slidecount,1);
        locations = cell(slidecount,1);
        depths = zeros(slidecount,1);
    end
    for k = 1:slidecount
        try
            txt = hDoc.Slides.Item(k).Shapes.Item(1).TextFrame.TextRange.Text;
            txt(txt < 32) = ' ';  % avoid control characters in labels
        catch
            txt = '[slide with no title]';
        end
        labels{k} = strtrim(txt);
        locations{k} = ['@' num2str(hDoc.Slides.Item(k).SlideID)];
    end
    reqmgt('winFocus', 'Link Editor'); % try to keep the dialog on top
end

Alternatively, click to install. You also need to unregister and re-register the linktype for these changes to go into effect.

As you can see, the ContentsFcn() methods returns three arrays:

  • labels to use for Document Index list items and navigation shortcuts

  • depths to indicate the hierarchical relationship of listed items (unused in this example)

  • locations to use for stored unique IDs

The ContentsFcn() implementation relies on the following PowerPoint API call to populate location values:

hDoc.Slides.Item(k).SlideID

This ensures persistent navigation information even after slide order changes. Note that we use @ as a prefix for locations values, to indicate that the number that follows stores the Named Item location value instead of slide (page) number location value.

rmi('unregister', 'rmidemo_pp_linktype');
rmidemoroot = [matlabroot,'/toolbox/slrequirements/slrequirementsdemos'];
copyfile([rmidemoroot,'/powerwin_reqs/rmidemo_pp_linktype_step5.m'], './rmidemo_pp_linktype.m');
fileattrib('./rmidemo_pp_linktype.m','+w');
rmi('register', 'rmidemo_pp_linktype');

Using Document Index Tab

Now that our PowerPoint link type supports a functional Document Index tab, we can use it to populate input fields in the primary tab:

  • Right-click the Truth Table block connected to passenger inputs

  • Expand the Requirements Traceability submenu

  • Open the Link Editor dialog

  • As done before, click New for a new link entry

  • Specify Microsoft PowerPoint as the Document type

  • Specify powerwindowController_copy.pptx as the Document

  • Leave the Description input

  • Instead of specifying Location manually, switch to the Document Index tab, locate the line that corresponds to Passenger Inputs slide, and double-click the line

  • Notice that the remaining input fields are automatically filled with the correct information

  • Click OK to save the new link

Navigate the link via the new shortcut at the top of the Requirements Traceability context submenu for the Truth Table1 block. This link should work correctly even after slides are shifted or re-ordered.

indexLink = rmi('createempty');
indexLink.reqsys = 'rmidemo_pp_linktype';
indexLink.doc = 'powerwindowController_copy.pptx';
indexLink.description = 'Passenger input - linked via Index tab';
indexLink.id = '@259';
rmi('set', 'slvnvdemo_powerwindowController_copy/Truth Table1', indexLink);
rmi('view','slvnvdemo_powerwindowController_copy/Truth Table1', 1);
Navigating to "@259" in "/tmp/BR2017bd_694400_188374/publish_examples0/tpeb62b15f/powerwindowController_copy.pptx"

Enable Linking to the Current Slide in PowerPoint

An even better way to support robust persistent links is via Selection Linking Shortcuts. The RMI API allows you to defind a the SelectionLinkFcn() function for linking with the current object in the current document. In the next step of our tutorial, you will automate linking to the current slide in the currently open PowerPoint presentation.

In the top section of rmidemo_pp_linktype.m, add the following declarations:

    % For selection-based linking:
    linkType.SelectionLinkLabel = 'Link to Slide in PowerPoint';
    linkType.SelectionLinkFcn = @SelectionLinkFcn;

Next, copy and paste the following implementation for SelectionLinkFcn(), including the getCurrentDoc() helper method:

function reqstruct = SelectionLinkFcn(objH, varargin)
    reqstruct=[];
    hDoc = getCurrentDoc();
    if isempty(hDoc)
        errordlg('PowerPoint presentation is not open', 'Linking Failed');
        return;
    end
    %
    % PPT file we are linking with:
    docName = hDoc.Name;   % or should we use .FullName ??
    %
    % PPT slide we are linking with:
    currentSlide = hDoc.Application.ActiveWindow.Selection.Slide;
    [objName, objType] = rmi.objname(objH);
    disp(['Linking ' objName ' (' objType ') to ' currentSlide.Name ' in ' docName]);
    %
    % Add a new requirement
    reqstruct = rmi('createempty');
    reqstruct.reqsys = mfilename;
    reqstruct.doc = docName;
    reqstruct.id = sprintf('@%d', currentSlide.SlideId);
    %
    % Label for navigation shortcut
    try
        txt = currentSlide.Shapes.Item(1).TextFrame.TextRange.Text;
        txt(txt < 32) = ' ';  % avoid control characters in labels
    catch
        txt = '[slide with no title]';
    end
    if length(txt) > 40
        reqstruct.description = [txt(1:40) '...'];
    else
        reqstruct.description = txt;
    end
end
function hDoc = getCurrentDoc()
    hDoc = [];
    try
        % try to connecto to already running application
        hApp = actxGetRunningServer('powerpoint.application');
        hDoc = hApp.ActivePresentation;
    catch
        return;  % PowerPoint is not running
    end
end

Or, click to install this script. Again, you will need to unregister and re-register the linktype for these changes to go into effect.

rmi('unregister', 'rmidemo_pp_linktype');
rmidemoroot = [matlabroot,'/toolbox/slrequirements/slrequirementsdemos'];
copyfile([rmidemoroot,'/powerwin_reqs/rmidemo_pp_linktype_step6.m'], './rmidemo_pp_linktype.m');
fileattrib('./rmidemo_pp_linktype.m','+w');
rmi('register', 'rmidemo_pp_linktype');

Use the Selection Linking Shortcut

The Requirements Traceability section of the context menus will now display a new shortcut for linking with the current slide in PowerPoint.

  • In your copy of the PowerPoint presentation example, open a slide 6 which deals with end positions of window movement (make it the active slide)

  • In the Simulink diagram, right-click the endstop input

  • Expand the Requirements Traceability context submenu

  • Click on Link to Slide in PowerPoint

RMI will automaticlly create a link to the SlideID that corresponds to the current location in the active presentation. RMI will try to use the header text of the target slide as a label for the new link.

  • Close the PowerPoint application

  • Right-click the input again to re-display the context menu

  • Click the new link to navigate it

The PowerPoint application should open to the correct slide.

selectionLink = rmi('createempty');
selectionLink.reqsys = 'rmidemo_pp_linktype';
selectionLink.doc = 'powerwindowController_copy.pptx';
selectionLink.description = 'Endstop signal - selection link';
selectionLink.id = '@261';
rmi('set', 'slvnvdemo_powerwindowController_copy/endstop', selectionLink);
rmi('view','slvnvdemo_powerwindowController_copy/endstop', 1);
Navigating to "@261" in "/tmp/BR2017bd_694400_188374/publish_examples0/tpeb62b15f/powerwindowController_copy.pptx"

Selection-based Bidirectional Linking Support

As a final steop of this tutorial you will extend the SelectionLinkFcn() function to optionally insert a hyperlink in the current slide, for navigation from PowerPoint to the linked object in Simulink.

In the rmidemo_pp_linktype.m script, modify the header of SelectionLinkFcn() to look like this:

function reqstruct = SelectionLinkFcn(objH, make2way, varargin)

Then add the following code at the bottom of SelectionLinkFcn():

if make2way
    % Insert a Simulink RMI icon with navigation hyperlink:
    slPicture = [matlabroot '\toolbox\shared\reqmgt\icons\mwlink.bmp'];
    currentSlide.Shapes.AddPicture(slPicture, 'msoTrue', 'msoTrue', 20, 20);
    myNewShape = currentSlide.Shapes.Item(currentSlide.Shapes.Count);
    myNewShape.ActionSettings.Item(1).Hyperlink.Address = rmi.getURL(objH);
    myNewShape.ActionSettings.Item(1).Hyperlink.ScreenTip = ['Linked from ' objName ' (' objType ')'];
end

Or, click to install this script. Be sure to unregister and re-register the linktype.

rmi('unregister', 'rmidemo_pp_linktype');
rmidemoroot = [matlabroot,'/toolbox/slrequirements/slrequirementsdemos'];
copyfile([rmidemoroot,'/powerwin_reqs/rmidemo_pp_linktype_step7.m'], './rmidemo_pp_linktype.m');
fileattrib('./rmidemo_pp_linktype.m','+w');
rmi('register', 'rmidemo_pp_linktype');

Creating Bidirectional Links

Your PowerPoint link type now allows automated insertion of Simulink navigation controls into linked slides, when you use Link to Slide in PowerPoint shortcut in the context menu for Simulink objects. To activate this feature, enable the Modify destination for bidirectional linking checkbox in the Selection Linking tab of the RMI Settings dialog.

To try this out, let us repeat the selection linking procedure for the obstacle signal input, to associate it with the corresponding slide in the example presentation.

  • Scroll to slide 7 in the PowerPoint presentation (make it the active slide)

  • Right-click the obstacle input

  • Expand the Requirements Traceability context submenu

  • Click Link to Slide in PowerPoint

You should now see a new RMI icon inserted at the top-left corner of the slide.

You can open the Edit Hyperlink dialog in PowerPoint to confirm that there is a MATLAB URL associated with the new icon. It is recommended that you do not edit this URL manually.

To see the hyperlink in action, switch PowerPoint application into the presentation mode and click the MATLAB icon. The Simulink diagram will pop up with the correct input highlighted.

origTwoWayPref = rmipref('BiDirectionalLinking', true);

Where to Go from Here

As opposed to linking to a Slide as a whole, you may want to modify the SelectionLinkFcn() implementation to link to a specific text or picture in the slide. Refer to Microsoft's Developer Reference pages for information on how to adjust the anchoring and appearance of Simulink navigation controls. For example, instead of inserting an icon with a hyperlink, you may want to attach a hyperlink to the selected text on the current slide.

If you need to link to a Search text pattern, irrespective of which slide includes the stored text, you can extend the declaration of supported location types to include the ? character:

  linkType.LocDelimiters = '#@?';

You should then provide an additional case for switch(locationStr(1)) in the NavigateFcn() method. The corresponding findText() helper queries the PowerPoint Presentation object for all TextFrame items in all Slides and selects the item with tje matching text.

The RMI link type template supports other methods, depending on your needs. For example, to have your custom links covered by Requirements Traceability Consistency Checking, consider implementing the following methods:

  • IsValidDocFcn()

  • IsValidIdFcn()

  • IsValidDescFcn()

To adjust the way your links are displayed in generated reports, you can use:

  • CreateURLFcn()

  • UrlLabelFcn()

  • DocDateFcn()

  • DetailsFcn()

  • HtmlViewFcn()

If your application is not file-based, but uses a proprietary database to store requirements documents, you must mark the link type as "not a file":

linkType.IsFile = 0;

and provide a specialized implementation for BrowseFcn(). This is the function that gets called when you click the Browse button in the Link Editor dialog.

Cleanup

For this example to work as intended when you run it again, please discard all the changes and remove the example linktype registration:

rmipref('BiDirectionalLinking', origTwoWayPref);

try hApp = actxGetRunningServer('powerpoint.application'); hApp.Quit ; catch ; end;
docFile = 'powerwindowController_copy.pptx';
if exist(docFile, 'file') == 2 ; delete(docFile) ; end;

try close_system('slvnvdemo_powerwindowController_copy', 0); catch ; end;
modelFile = 'slvnvdemo_powerwindowController_copy.slx';
if exist(modelFile, 'file') == 4 ; delete(modelFile) ; end;

reqFilePath = 'slvnvdemo_powerwindowController_copy.req';
if exist(reqFilePath, 'file') == 2 ; delete(reqFilePath) ; end;

try rmi('unregister', 'rmidemo_pp_linktype') ; catch ; end;
if exist('rmidemo_pp_linktype.m', 'file') == 2 ; delete('rmidemo_pp_linktype.m') ; end;

clear('hApp', 'rmidemoroot', 'firstReq', 'secondReq', 'betterLink', 'indexLink');
clear('selectionLink', 'docFile', 'modelFile', 'reqFilePath', 'origTwoWayPref');
Was this topic helpful?