MetaEdit+ Modeler questions

All pop-up menus just show 'swap mouse buttons', 'relabel as...', 'refresh', ...

Explanation:The mouse button you used to open the pop-up menu is being reported by Windows to MetaEdit+ as the third mouse button instead of the second.
Affects:Versions before 3.0 SR2
Solution:Choose 'swap mouse buttons': the mouse button you used should now give you the pop-up menu you expect.

You can make this setting permanent thus:

  1. Exit and restart MetaEdit+
  2. Expand the Startup Launcher by pressing the down arrow button
  3. Press the 'File in Patches' button
  4. In the Patches Browser, open a pop-up menu, and choose 'swap mouse buttons'
  5. Close the Patches Browser and Help window
  6. In the Startup Launcher, press 'Save Image', and answer 'yes', 'no' and 'Save' to the dialogs to overwrite the existing image

Are there any reverse engineering features?

Explanation:Can I take my existing Delphi / C++ / whatever code, and read it in to create graphical models? Maybe if I could then I could generate documentation, or code in different language...

Yes, but not out of the box. Since we can have any modelling language, and generation of any kind of code, there's no possibility for built-in reverse engineering. This is a metaCASE tool, not a fixed-method CASE tool, so we have lots of flexibility in general, but some things can't be hard-coded anymore.

MetaEdit+ has an API, XML import, and text file reading and parsing capabilities in the MERL generator language. Users can thus use any of these to write their own reverse engineering. The UML Examples project contains an example graph using a MERL generator for simple Java reverse engineering.

However, this is not something we envisage our customers doing much, especially not round-trip engineering. The benefit of MetaEdit+ is the ability to build your own modeling language and code / documentation generation, so generated code and documentation are never edited - all changes are made to the models, and the code or documentation is regenerated as needed.

See also the question on model-to-model transformations.

Common errors

Affects:Versions before 4.0
Solution:Below are described some common error messages, the text they write as the first line to the meplus?.err file, their probable meaning, cause, and what you should do.

Error: Message not understood: #frameworkToModelTransform:

This occurs occasionally while closing a Diagram Editor, and is harmless: close the error with the Terminate button. Service Release 1 corrects this.

Error: Message not understood: #XXX, an UndefinedObject>>doesNotUnderstand:

Where the message is something other than #frameworkToModelTransform: this error normally indicates some variable not being initialized because of a previous error (for which Terminate was pressed). Sometimes shutting the offending window and reopening it will suffice: if not, it is best to logout and abandon the transaction.

Error: Message not understood: #XXX, an ABUndefinedObject(Object)>>doesNotUnderstand:

An object has not been able to be found in the database, and is now represented as an ABUndefinedObject. You should logout with abandon. If the same error occurs next time you log in and access the same object (perform the same operation), your database is probably in a bad state. This error can occasionally occur transiently when abandoning complicated metamodelling operations: normally it goes away then if you proceed as above.

Error: Message not understood: #XXX, 'SomePersistentObject'>>doesNotUnderstand:

Where the object is not an UndefinedObject, but instead some persistent object (Graph_*, Property_*, Object_*, Relationship_*, Role_*; GraphRepr, ObjectRepr, RelRepr, RoleRepr; SetM) this is often a serious error. If there has been a previous error, shutting the offending window and reopening it may suffice. If not, the error is probably serious, and you should logout and abandon the transaction. Make a backup of your database files. On your next login, try and access the same object again: if the error does not reoccur, the database is probably OK. If the error reoccurs, exit, restore the backup, and try full database recovery. If that does not help, return to an earlier backup.

Error: Strings only store Characters

This normally indicates that a type exists in two different areas in the repository, i.e. it has been imported as part of a type or model patch at a time when the area where it already existed was not open. The offending type is visible about 8 lines down the error trace, where a subclass of TargetLevel class is being sent the userPrintOn: message, i.e. the name of the type was being accessed (e.g. to display in an Object Tool or Types Browser): Role_From_sysadmin_3043295427(TargetLevel class)>>userPrintOn:

Sometimes it is possible to cure the problem by logging in as sysadmin and opening an Area Browser on the area where the type was mistakenly imported. Open the open script. Note that normally there are several such types: fortunately often it is clear that that area should contain no types at all. Delete the types from the open script, and similarly from the close script, and then logout committing changes.

Error: Accessing unaccessible physical area:

The ArtBASE area has been deleted or is otherwise unavailable. The number after the message is the number of that area, and you can find the name of the area on the basis of the number from the manager.ab file for that database. Most often, this results because a user deletes an area in the mistaken belief that no object in another area references an object in that area: for this reason we do not recommend ever deleting areas.

Server error on startup: an ABServerMonitor>>serverPasswordCheck

This is the error you get if the path in artbase.roo is wrong: correct the path and try again.

Do you have a VB.Net generator (and/or C#)?

Solution:Currently we don't have predefined generators for them as they need to be defined based on the underlying modeling language. Only this gives satisfactory code generation results directly from models. However MetaEdit+'s customizable generation environment allows the creation of your own, individually tailored generators.

Does MetaEdit+ require certain compilers for the produced code?

Solution:MetaEdit+ does not restrict you to any particular compiler. Your modeling languages and generators produce whatever code you want, in the syntax and format that you prefer. Usually people generate code that looks the same as good existing code that they have written by hand, which will thus compile with the same compiler as you already use. Changing later to a different compiler is easy, as you only need change the relevant parts of the generator, not every existing piece of generated code.

The example generators in the demo repository are intended to be generic for standard compilers of that language. Compiler versions we have tested with are generally documented in the manuals or generators.

How do I install MetaEdit+ without administrator rights?

Explanation:When installing without administrator rights on Windows Vista, UAC will request the password for an administrator. The installation will then take place as that administrator, and MetaEdit+ will be started at the end of the installation as that administrator. The resulting MetaEdit+ will only work for that administrator, not your normal account: there will not even be a shortcut in your normal account's Start menu.
Affects:Evaluation versions from 4.5 on Windows Vista
  1. After installation, exit MetaEdit+.
  2. Copy the complete "MetaEdit+ 4.5" directory:
    From:C:\Users\<administrator user name>\Documents
    To:C:\Users\<normal user name>\Documents
    (you will need to provide the administrator's password to do this).
  3. Create a shortcut on the desktop with:
    Target:"C:\Program Files\MetaEdit+ 4.5 Evaluation\mep45eval.exe"
    Start in:"C:\Users\<normal user name>\Documents\MetaEdit+ 4.5"
  4. Optionally, copy the complete "MetaEdit+ 4.5 Evaluation" Start menu group
    From:C:\Users\<administrator user name>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\
    To:C:\Users\<normal user name>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\
    (you will need to provide the administrator's password to do this).

Note that to uninstall, you will need to log in as the administrator user: the evaluation version will not show up in the list of programs in Control Panel's "Uninstall a program". After uninstallation, you can remove the normal user's desktop shortcut and optional Start menu group by hand.

How do I reinstall MetaEdit+?

Explanation:I want to try the Windows evaluation version again, so I uninstalled and reinstalled MetaEdit+. When I log in I am told "License has expired. MetaEdit+ exiting...".
Solution:The demo database is not removed by uninstall, nor overwritten by install - otherwise any work done by the user there would be lost. After reinstalling, you thus still have your old demo database, and MetaEdit+ knows that this has already been used for the full evaluation period.

There are three possible situations, and you must choose one of them and follow its instructions:

  1. You had nothing important in your demo database
    => Uninstall, delete the demo directory by hand, fill out the download form again to get a new evaluation code, download and install.
  2. You had something you still want in your demo database, and the current MetaEdit+ version is the same as you installed before
    => ask for more evaluation time from
  3. You had something you still want in your demo database, and the current MetaEdit+ version is newer than the one you installed before
    => Uninstall, download again from here and install, ask for more evaluation time from

How do I unload types after closing a project?

Explanation:I opened a project that uses other modeling languages, and the types for those languages were automatically loaded. Even after closing that project, those types are still listed in the Types Browser.

Those types are defined in other projects which have been opened automatically in the background. You need to open and close those projects explicitly, which you can do from the main MetaEdit+ launcher.

  1. If you have changes you want to save, first choose Repository | Commit.
  2. In the Projects list pop-up menu, choose Open..., Ctrl-click to select all the projects there with an asterisk "*" before their name, and press OK.
  3. In the Projects list pop-up menu, choose Close..., Select All projects except the one(s) you wish to remain open, and press OK.
  4. Deselect all projects in the Projects list.
  5. Choose Repository | Abandon....

How do I use an external text editor in Mac OS X

Explanation:The default external editor command line for Mac OS X in MetaEdit+ 5.0 and earlier is %1, but this no longer works in current versions of Mac OS X.
Affects:Mac OS X, MetaEdit+ 5.0 and earlier
Solution:Change Options... | Editor command to: open -W -n -t "%1". This will cause it to use your default text editor, initially TextEdit. After editing the text, press Apple+S to save and Apple+Q to quit TextEdit. Note that you need to quit the whole TextEdit application; just closing the window leaves the TextEdit application open in the dock, and MetaEdit+ does not know that the editing has finished. The full semantics of the parameters for the OS X open command are described in the open man page.

How is model complexity handled in MetaEdit+?

Solution:Complexity can be handled in several places and not by trying to handle it e.g. in the generator only. Best the model complexity can be handled via the metamodel by raising the abstraction of modeling work. Here the modeling language can be extended with the introduction of concepts and correctness constraints that map to the domain modelled. The key issue here is that only the experienced developer(s) solve these once, and not that every developer faces and solves them.

How to check that a given object type only has one instance per graph?

Affects:Versions before 4.0
Solution:In 4.5, you can add an Occurrence Constraint from the Constraints button in the Graph Tool. In earlier versions, the example report below will do this:
Report 'Check XYZ instances'
foreach .XYZ
foreach .XYZ
   {if not oid = oid;1; then 
      prompt; 'Object type: '; type; ' found several times in this graph!'; ask; 

Copy the report definition to MetaEdit+'s Report Browser. Replace 'XYZ' with your object type and save the report definition.

When running the report, a dialog will be shown if the graph contains more than one occurrence of XYZ. Answer 'Cancel/No' to that and the following dialogs. If no duplicates are found, the report results in an empty output window.

You can of course change the action from prompt; to simply output a string, but note that if there are N objects, each will be reported N-1 times.

Icons on the types toolbar are cut off on HiDPI Retina screens

Explanation:Icons on the types toolbar seem to be drawn with double size, so all but the top left corner is cut off. More may be cut off by the icon mask, which is the normal size. Also, rounded corners on scrollbars and buttons are displayed incorrectly.
Affects:Mac OS X on Retina / HiDPI screen
Solution:OS X tries to intelligently scale up all drawing calls when on a Retina screen (or manually selecting a scaling HiDPI resolution). This works correctly for most drawing, and symbols and texts benefit from the higher resolution. Unfortunately, for type icons, scrollbar thumbs and button corners the scaling is done twice, resulting in only a double-scale rendering of the top-left corner being visible.

You can make OS X use a simpler but more reliable "Low Resolution" algorithm on MetaEdit+ to get essentially the same display as on a non-Retina screen. Rather than setting that for the MetaEdit+ 5.1 Workbench application as normal, you need to set it on the sub-application within the main application package:

  1. Quit MetaEdit+ if it is currently open.
  2. In the Finder, choose Applications from the Go menu.
  3. Ctrl-click the MetaEdit+ 5.1 Workbench icon and select "Open Package Contents" from the pop-up menu.
  4. Open Contents then Resources and click the "MetaEdit+ 5.1" icon so it is highlighted.
  5. Choose Get Info from the File menu.
  6. Place a checkmark next to "Open in Low Resolution" to enable Low Resolution mode.
  7. Close Get Info and use Back to return from the package contents to the main Applications list.
  8. Double click MetaEdit+ 5.1 Workbench to reopen it.

OS X will then scale up the MetaEdit+ windows so they are physically big enough on the screen, but without the rendering problems. On the higher resolution Retina screen this looks slightly blurred, particularly in contrast to the higher resolution of the rest of the desktop, but overall is generally the better choice.

Is it possible to make a report which shows a list of objects and those graphs/projects where these objects are used

Solution:MetaEdit+'s Info Tool shows the situation for only a single object at a time, and has no printing functionality.

The reporting language is designed for a top-down approach, and as such cannot directly produce such a report. Such reports are however easy to implement using the reporting language together with an external tool, e.g. Excel.

Make a report which goes through each graph and reports each object one per line, with its graph. If an object is in several graphs, there will be a line for that object in each graph. Excel can then correlate these lines to make a single line, showing that object and the graphs it is in.

  1. Create a new report for Graph:
  2. In a Graph Browser, select a graph and choose Reports | Create from its popup menu. In the Report Browser: Graph | Change Graph Type... (choose 'Graph'). Report | New... (give name 'Object-Graph List'). Fill in the body of the report (please note, in line 4 there should be one tab inside each pair of single quotes, '    '):
    Report 'Object-Graph List'
    filename; 'tmp.txt'; append;
    foreach .()
    { oid; ' '; id; ' '; type; ' '; oid;1; ' '; id;1; ' '; type;1; newline;
  3. Save the report: Report | Save
  4. Run the report on all graphs in currently opened projects: Report | Run... (choose all graphs). You'll need to press Enter once for each graph during the report run.
  5. Open the generated file (tmp.txt) with Excel. Each row of the file includes the object's oid, name, type and after that the graph's oid, name and type, all separated with tabs. A wizard opens for converting the tab-separated file to Excel format:
  1. Press Next>
  2. Choose Text Qualifier {none}
  3. Press Finish
  4. Select the first row label with the right mouse button, and choose Insert
  5. Fill in the first row with labels for each column: oid, object, objectType, gid, graph, graphType
  6. Ctrl-End (goes to the last cell)
  7. Shift-Ctrl-Home (selects all the data)
  8. Data | PivotTable report
  9. Next>
  10. Next>
  11. Drag each field in turn to the ROW area, keeping them in the same order
  12. Drag the gid field from the right to the DATA area.
  13. Double click the oid field on the left
  14. set its 'Subtotals' radio button to none
  15. Press the Advanced... button
  16. set the AutoSort options to Descending, Using field 'Count of gid'
  17. In the same way, set the Subtotals radio button to none for each of the other fields on the left.

  18. Next>
  19. Press Options...

    turn off Grand totals for rows and columns
    turn off 'Enable drilldown'

  20. Finish

At the top of the pivot table are those objects that are reused most frequently.

You can scale the oid, gid and Total columns to be thin, or hide them completely. You can now save the file as an Excel document; remember to delete the tmp.txt file after closing Excel, as the report would otherwise append to the tmp.txt file each time it is run (necessary to report on many graphs to a single file).

Try it! Example of Object usage report (size 62976 bytes, in Excel97 format)

What is the typical development application domain for MetaEdit+?

Solution:Repetitive development efforts. Product family development is a typical usage scenario, because the created support environment can be used repetitively. Another typical scenario is development of functions on top of a software platform that provides a set of common “primitive services” which are used to create new features and products that are not necessarily found in the product family. A third typical scenario are configured products that are tailored for each customer/installation/delivery.

When I do the Tutorial, the dialog box is empty for "Pick the conceptual graph type to create"

Explanation:I am at the stage in the Tutorial where you click on Editor | Table Editor. according to the tutorial you should get a dialog box with the heading 'Pick the conceptual graph type to create', and that box should have a list of types from which you select Class Diagram [UML]. The Dialog box is empty, why?
Affects:Versions before 4.0
Solution:You have probably not selected any method while logging in. MetaEdit+ expects that you choose the method (like UML) before making any models.

Please read the Evaluation manual's section 'Choosing method' (Manuals\meplus\Mp-6_3.html) and proceed as described there, i.e. 1) Select ‘UML’ from the list of projects and press OK.

Please note that if you ignore or make other selections than those proposed in the tutorial, the situation in later steps will probably be different from what is described in the tutorial.

When I try to open a pop-up menu to create a ternary relationship, MetaEdit+ loses the selection of the objects I want to connect.

Solution:You have 'Diagram pop-up menu selects first' turned on, and a large transparent object enclosing those you want to connect. Thus after selecting the objects you want to connect, clicking with the right button to open the pop-up menu looks to see if the click happens over an object, and selects that first before opening the menu, thus losing the selection of the objects you want to connect.
Solution 1:
Open the Options Tool and turn off 'Diagram pop-up menu selects first' (Main Launcher | Repository | Options | System)

Solution 2:
To open the pop-up menu, click with the right mouse button in a totally empty area of the diagram: you can move the relationship to where you want it after creation.

Why does Word give a warning or silently fail running MetaEdit+'s Word generators ('Export graph [hierarchy] to Word')

Explanation:MetaEdit+'s Word reports use the AutoOpen macro to open the generated file and save it in document format, so Word should allow you to use this macro when opening the generated file.
Affects:Word 2000 and later
Solution:Change your Word Security Level settings:

Word 2000, 2002

  1. On Word's Tools menu, point to Macro, and then click Security
  2. Change security level to "Medium" and click OK.
  3. Close the open .RTF document
  4. Run the required report again
  5. When Word opens and the "Macro Warning" dialog appears, select "Enable macros"

Please note that the Security Level change will remain to the next Word sessions. More detailed instructions about changing the Security Levels can be found from Word's online help "Change the security level for macro virus protection".

Word 2007

  1. Word Options | Trust Center | Trust Center Settings ...
    • ... | Macro Settings | Disable all macros with notification (default)
    • ... | Trusted Publishers | if MetaCase is there already, you can stop here
  2. Open the or a file that uses it
  3. Under the ribbon you should see a Security Warning
  4. Click the Options... button on the warning
  5. Check that the signature is signed by MetaCase
  6. Choose to "Enable all code published by the publisher"

The macros in the document will now work, and MetaCase will have been added to the Truster Publishers. Opening documents will no longer give a warning: "Trusted Publishers" is checked before "Disable all macros with notification".