Skip to content
| Marketplace
Sign in
Visual Studio Code>Other>MultiValue Basic Utility for VS CodeNew to Visual Studio Code? Get it now.
MultiValue Basic Utility for VS Code

MultiValue Basic Utility for VS Code

Clarity Ascend

|
2 installs
| (0) | Free
| Sponsor
Bring Rocket UniVerse and UniData into VS Code: find records in plain language, explore dictionaries, and run TCL, API calls and compiles in a full-width console.
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

MultiValue Basic Utility (MVBU)

MultiValue Basic Utility (MVBU)

MultiValue Basic Utility (MVBU) is a Visual Studio Code extension for Rocket UniVerse and UniData. Business analysts use it to look up and find records in plain language. Developers use it to run commands, call catalogued subroutines, inspect file dictionaries and compile programs. Results are shown full width instead of in a 24 × 80 terminal.

Features

  • Analyst view: look up a record, find records, see what a file contains and run saved actions, with no query language. Fields are labelled with their dictionary headings, and dates, times and decimals are shown readably.
  • Developer console: run TCL/ECL commands, call catalogued subroutines (API calls), view a file's dictionary, layout and records, and compile and catalogue programs.
  • Find in results: press Ctrl+F (Cmd+F on macOS) to search any result.
  • Saved output: every run is saved as a timestamped Markdown file, ready to share or review later.
  • Connections: profiles for UniVerse and UniData over UniRPC with SSL. Passwords are kept in VS Code Secret Storage. Production profiles can ask for confirmation before every run.
  • History and favourites: re-run or reload any earlier command, search or API call.
  • Clear errors: server errors are explained in plain language, with the original code and message kept for reference.
  • Mock mode: try every feature with sample data and no server.

Requirements

Component Requirement
Visual Studio Code 1.85 or later, on Windows, macOS or Linux
Python 3.8 or later, on the same computer as VS Code
Rocket UOPY python3 -m pip install uopy (Windows: python -m pip install uopy)

Nothing is installed on the database server.

Installation

  1. Download mvbu2-<version>.vsix.

  2. In VS Code, open Extensions, click ⋯ and choose Install from VSIX…. Or run:

    code --install-extension mvbu2-0.5.3.vsix --force
    

    --force replaces an installed copy that has the same version number.

    The extension ID is now clarityascend.mvbu2. Upgrading from an earlier version (clarityascend.mvbu or lxie.mvbu): uninstall the old extension first. Your connections and settings carry over. Set each password again with MVBU: Set Password.

  3. Run Developer: Reload Window.

Getting started

  1. Click the MultiValue Basic Utility icon in the Activity Bar.
  2. In Connections, click + and answer the prompts: profile name, database (UniVerse or UniData), host, UniRPC port, account, user name, SSL, account flavor (UniVerse only), and whether to confirm before every run. Choose confirmation for production systems.
  3. Enter the password when asked.
  4. Press Ctrl+Alt+M (Cmd+Alt+M on macOS), or run MVBU: Open from the Command Palette. The Analyst view opens by default.
  5. Select the active connection at any time from the MVBU item in the status bar.

The first run connects automatically. To explore without a server, enable mvbu.mockMode in Settings.

After installation, MVBU opens its guide: this page, with a setup card that checks Python and uopy. Open it again with MVBU: Open Guide.

Website · Report an issue · ☕ Buy me a coffee

Analyst view: finding records with a step-by-step search

Analyst view

Open it with MVBU: Open or MVBU: Open Analyst View. The menu on the left offers four tasks.

Task What you enter What you get
Look up a record A file (for example PRODUCTS) and a record key Every field, labelled with its business name. Multi-values are listed, and dates and times are readable. You can filter fields and hide empty ones. Show technical details adds the dictionary name, field number and stored value.
Find records The file, conditions (Genre is Drama, Title contains Star, is empty…), the fields to show, the sort order and the number of records A plain-English summary of the search before it runs, then a table you can sort and filter. Click a key to open that record. Copy table pastes into Excel. Show the query we'll run shows the SELECT … WITH … BY … command.
What's in a file A file Every field with its business name, dictionary name, position, single or multiple values, and kind of value. Calculated (I-type) fields are listed separately.
Saved actions A saved action and its inputs The action's outputs, labelled field by field when the definition names a dictionary.
  • The connection badge at the top shows the active system. Practice data means mock mode. Profiles that confirm before running show Live system, and every Find asks before it runs.
  • Errors are explained in plain language, for example Can't find "products". File names are usually upper case — try PRODUCTS. The original message is under Technical details.
  • Each run is saved as Markdown. Click Open saved copy to view it, or enable mvbu.analyst.openSavedCopy to open it after every run.
  • Developer tools (bottom left) opens the Developer console. To open the Developer console by default instead, set mvbu.ui.defaultView to developer.

Defining saved actions

Every API call definition in .mvbu/subroutines/ in your workspace appears under Saved actions. The optional title, label and help fields are the text analysts see:

{
  "name": "GET.PRODUCT",
  "title": "Get product details",
  "description": "Returns the full product record and a status code.",
  "args": [
    { "name": "Params.In",  "label": "Product ID", "help": "For example 1002", "dir": "in" },
    { "name": "Rec.In",     "label": "Options",    "dir": "in" },
    { "name": "Rec.Out",    "label": "Product",    "dir": "out", "dict": "PRODUCTS" },
    { "name": "Return.Sts", "label": "Status",     "dir": "out" }
  ]
}

IN and IN-OUT arguments become input boxes, which accept multi-line text such as XML. OUT arguments appear in the result. Those with a dict are labelled field by field. Add "raw": true to an argument to send its value exactly as typed. A template is in samples/.mvbu/subroutines/EXAMPLE.SUB.json.

Developer console

Open it with MVBU: Open Developer Console, or with Developer tools in the Analyst view.

Developer console: command output with Find in results

Tab Purpose
Command Runs TCL/ECL commands. Each line is a separate command, and lines starting with # are skipped. Press Ctrl+Enter (Cmd+Enter) to run. If a command asks for input, VS Code prompts you; press Esc to cancel the command. Select lists stay active between commands.
API Call Calls a catalogued subroutine. Enter its name and one row per argument (IN, OUT or IN-OUT). Type dynamic arrays with ^ for @FM, ] for @VM and \ for @SM. Tick As typed to send a value unchanged, for example XML or JSON. It is ticked automatically when a value starts with < or {. Label with DICT breaks an OUT argument into fields named from that dictionary. Save definition writes .mvbu/subroutines/<NAME>.json.
Schema Shows a file's Dictionary (LIST DICT {file}), Layout (CT {layout} {file}, with layout, equates and documentation in one) and Record (CT {file} {id}). Run one view or all of them. The layout file defaults to LAYOUT.
Compile Compiles a program with mvbu.compile.command, then runs mvbu.compile.catalogCommand if one is set. Use current editor takes the file and program from the open editor.

The inputs take as little room as possible and the output fills the rest of the panel. ▴ Hide inputs gives the output the whole panel.

Other places to start from:

  • Editor context menu: Run Selected Text as Command and Compile Current Program.
  • History & Favourites: click an entry to load it. Use ▶ to run it again, ★ to add it to favourites, and 📄 to open its saved output.
  • Files: pin a file to reach its schema views, Look Up a Record and View Record.

Keyboard shortcuts

Shortcut (Windows / Linux) macOS Action
Ctrl+Alt+M Cmd+Alt+M Open MVBU in the default view
Ctrl+Enter Cmd+Enter Run the commands in the Command tab
Ctrl+Alt+Enter Cmd+Alt+Enter Run the selected editor text as a command
Ctrl+F Cmd+F Find in results
Enter / Shift+Enter, F3 / Shift+F3 same Next / previous match
Esc Esc Close the find bar

Saved output

Every run is saved as Markdown:

mvbu-output/2026-11-02/1031_LIST-DICT.md
mvbu-output/2026-11-02/1032_API-GET.PRODUCT.md
mvbu-output/2026-11-02/1040_SCHEMA-PRODUCTS.md
  • Location: mvbu.output.folder, relative to the first workspace folder. An absolute path also works. Without an open workspace, files go to the extension's storage folder. MVBU: Reveal Output Folder opens the folder.
  • Contents: the title and the output come first. The connection summary and run details (connection, database, account, host, command, run time and duration) are at the end.
  • Viewing: files are saved but not opened. Click Open Markdown next to a result, or 📄 in History. To open every run automatically, set mvbu.output.open to window (a separate window), preview (beside the console) or editor.
  • Names: an existing file is never overwritten; the new file gets a _2 suffix. Enable mvbu.output.askFileName to choose each name.

Sessions and licences

MVBU keeps one server session open per active connection, so select lists and TERM settings carry over between runs. After mvbu.session.idleDisconnectMinutes (default 10) without a run, the session closes and its database licence is released. The next run reconnects automatically, which takes about a second plus the init commands.

Keeping the session with an idle timeout is recommended over disconnecting after every run:

  • Speed: each new connection costs an SSL handshake, a login and the init commands.
  • Select lists: a SELECT followed by a LIST only works within one session.
  • Licences: the idle timeout releases the licence a few minutes after your last run. Disconnect in the Connections view releases it immediately.
  • Reliability: servers and firewalls drop connections that stay idle for a long time, which shows up as error 81009. The idle timeout closes the session before that happens.

If licences are scarce, set mvbu.session.idleDisconnectMinutes to 1.

Settings

All settings start with mvbu..

Setting Default Description
profiles [] Connection profiles. Passwords are not stored here.
pythonPath python3 Python executable that has uopy installed
mockMode false Use sample responses instead of a server
ui.defaultView analyst View opened by MVBU: Open: analyst or developer
analyst.openSavedCopy false Also open the saved Markdown after each Analyst run
timeoutSeconds 120 Maximum wait for a server response. The session is reset after this.
session.initCommands ["TERM 132,999"] Commands run after connecting: 132 columns, 999 lines per page. A profile's own initCommands take precedence.
session.idleDisconnectMinutes 10 Minutes without a run before the session closes. 0 keeps it open.
command.multiLine eachLine eachLine runs each line separately; single sends the whole box as one command
command.allowed LIST, SORT, LIST.ITEM, SORT.ITEM, CT, SELECT, SSELECT, COUNT, GET.LIST, CLEARSELECT Commands that can run from the Command tab, Run Selected Text and History, by first word. Schema, compile and connection commands are not affected.
command.others block Any other command: block, confirm (ask each time) or allow. This prevents mistakes; database permissions still apply.
output.folder mvbu-output Folder for saved Markdown
output.askFileName false Ask for a file name for each run
output.open none none, window, preview or editor (see Saved output)
history.max 200 Number of entries kept in History
schema.views Dictionary, Layout, Record Schema commands, with {file}, {id} and {layout} placeholders
schema.layoutFile LAYOUT File used for {layout}. It can also be changed in the Schema tab for one run.
compile.command BASIC {file} {program} Compile command
compile.catalogCommand (empty) Command run after a successful compile, for example CATALOG {file} {program}
compile.successPattern (?i)compilation complete\|compiled\|0 errors Regular expression that marks compile output as successful
compile.stripExtensions .b, .bas, .mvb Removed from the editor file name to get the program name
files.pinned [] Files listed in the Files view
subroutines.folder .mvbu/subroutines Workspace folder for API call definitions
helper.debug false Add Python tracebacks to the log, for troubleshooting

Security and privacy

  • Passwords are kept in VS Code Secret Storage, never in settings.json.
  • Connections use UniRPC with SSL. The server certificate must be trusted by the computer running VS Code.
  • MVBU does not edit records itself. However, the Command tab runs any command you enter, with the permissions of your database account. Enable confirm before running on production profiles.
  • MVBU sends no telemetry. It connects only to the servers in your profiles.

Troubleshooting

Errors appear in plain language, with the server's code and message underneath. The Output › MVBU panel logs one line per error. Enable mvbu.helper.debug to include Python tracebacks.

Message Cause and solution
81009 The RPC failed / connection reset The server or network closed the session, usually after a long idle period. Disconnect, then connect again to clear the cached session: use Reconnect in the message, the link in the console, or ↻ on the connection. MVBU has already discarded the broken session, so the next run also reconnects.
Not allowed here: DELETE (or another command) The command's first word is not in mvbu.command.allowed. Add it there, or set mvbu.command.others to confirm or allow.
Other 81xxx UniRPC errors, or 930098 MVBU shows a plain-language explanation and Rocket's description for every UniRPC code (81001–81028, 930098): for example 81011 unknown host, 81016 connection refused, 81007 no more connections.
30105 Unable to load the subroutine The API name is not catalogued in this account. Check the spelling and case, and that the routine is compiled and catalogued. After re-cataloguing, reconnect.
30106 Wrong number of arguments The definition has a different number of arguments than the SUBROUTINE statement on the server.
Python package 'uopy' is not installed Run python3 -m pip install uopy, or set mvbu.pythonPath to the Python that has it.
Python not found Set mvbu.pythonPath, for example /usr/bin/python3 or C:\Python313\python.exe.
The server did not accept the user name or password Use Set Password (key icon) on the connection.
SSL or certificate errors Check the server's UniRPC SSL configuration, and that this computer trusts its certificate.
Output still wraps, or stops at a page prompt Check that TERM 132,999, or your system's equivalent, runs without error after connecting. Set a wider width in session.initCommands if your reports are wider than 132 columns.
Ctrl+F does not open the find bar Click inside the results first. Or run MVBU: Find in Results from the Command Palette; if that works, another extension is using Ctrl+F (see Preferences: Open Keyboard Shortcuts).
Anything else Open an issue at github.com/libin-xie/mvbu/issues with the MVBU version and the lines from Output › MVBU.

Known limitations

  • MVBU views and runs; it does not edit records.
  • Compile only: editing BASIC source is left to your editor or the Rocket MV BASIC extension.
  • Results are saved as Markdown. There is no CSV or Excel export, but Copy table in the Analyst view pastes into Excel.
  • Find records reads at most 5,000 records per search.

Chrome and Edge

MVBU is also available as a Chrome and Edge extension, with the same Analyst view and Developer console. It is distributed separately as mvbu-chrome-<version>.zip, which includes its own installation guide.

Development

node test/run-mock-tests.js          # extension tests in mock mode (no VS Code needed)
python3 test/test_helper_errors.py   # helper error handling against a stand-in for uopy
python3 tools/build_vsix.py          # builds dist/mvbu2-<version>.vsix (Marketplace name and description from vscode/marketplace.json)
Folder Contents
extension.js, lib/ Extension code (JavaScript, no build step)
helper/ Python helper that talks to the server through uopy, plus sample data for mock mode
media/ Logo, icons and screenshots
samples/ API call definition template
tools/ VSIX build, and build_readme_html.js, which writes this README as stand-alone pages in docs/
test/ Automated tests
chrome/ Chrome and Edge extension
docs/ Requirements

The VSIX build leaves out everything listed in .ignore, which uses .gitignore syntax.

Support

  • Questions and problems: open an issue at github.com/libin-xie/mvbu/issues. Include the MVBU version, UniVerse or UniData version, and the lines from Output › MVBU.
  • Ideas: feature suggestions are welcome in the same place.
  • Buy me a coffee: MVBU is an independent project. If it saves you or your team time, you can support its development with a coffee at buy.stripe.com. Your support pays for testing on more UniVerse and UniData versions, new Analyst view features, faster fixes and better documentation. Thank you!

Buy me a coffee

License

MultiValue Basic Utility is free software, released under the GNU General Public License, version 2 only (GPL-2.0-only). Copyright © 2026 Clarity Ascend.

Rocket, UniVerse, UniData and uopy are trademarks of Rocket Software, Inc. MVBU is not affiliated with or endorsed by Rocket Software. Rocket uopy is installed separately and is not part of MVBU.

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
  • Your Privacy Choices
  • Consumer Health Privacy
© 2026 Microsoft