VC/m 4.0 Release Notes

Version 4.0 was released on 23rd September 2013.


New HTML documentation (VCM-D-0316)

New product documentation is available from the Help\Help menu option in the VC/m browser, or from a button on the default.htm launch page (where used). This documentation is locally searchable provided the web server hosting the VC/m browser UI is PHP-enabled. If it is not, searching can be done on a web edition of the documentation which is accessed via the local edition.

The two PDF files that previously shipped with VC/m are still present in the Documentation directory of the software kit. However their contents are no longer being updated.

Allow CRs to contain CRs (VCM-D-0295)

It is now optionally possible for change requests to have other change requests as members. This is enabled at the Change Request Type level with a new field titled ‘Members’, whose dropdown defaults to ‘Objects’ but can be changed to ‘Change requests’ or to ‘Objects and change requests’.

A change request is added to another change request via the work list, i.e. in the same manner as an object can be added.

When a change request is transferred the transfer acts on all object members, including those that are members of change request members at any depth. For instance, if

  • CR001 contains ObjA, ObjE, CR002 and CR003
  • CR002 contains ObjB and CR004
  • CR003 contains ObjC
  • CR004 contains ObjD and ObjE
  • a transfer of CR001 will transfer ObjA, ObjB, ObjC, ObjD and ObjE
  • a transfer of CR002 will transfer ObjB, ObjD and ObjE

The rights to add change requests to other change requests and to remove them are controlled by the new functions, ChangeRequest.Right.AddCR and ChangeRequest.Right.RemoveCR.

Per-system object browsing (VCM-D-0227)

A top-level folder named ‘Systems’ contains a subfolder for each system that has at least one object associated with it. Browsing the contents of that folder is equivalent to viewing the top-level ‘Objects’ folder with an additional filter that excludes all objects not belonging to the system.

Templating mechanism for locations, routes etc. (VCMB266)

A new mechanism has been introduced for defining VC/m workflow entities that need to recur in a regular manner. Templates can be created for the following entities:

  • Access Rights
  • Locations
  • Location Classes
  • Physical Addresses
  • Systems
  • Transfer Routes

Visualize VC/m workflow using graphml exported to yEd (VCM-D-0212)

A new option on the View\Reports submenu creates a 'Locations & Routes' report in an XML format suitable for use with a free third-party Java graphing tool called yEd.

By default the diagram excludes locations and routes derived from templates.

DFI component driver (VCM-D-0297)

The DFI component driver is available on Cache or Ensemble 2010.1 or later to manage DeepSee dashboards and pivot tables. To install the driver, DO setup^%vc1xDFI

Finer-grain access control on Change Request operations (VCMB197)

The following new pseudo-functions have been added. Set access codes on them to restrict the corresponding operation:

  • ChangeRequest.Right.AddObject
  • ChangeRequest.Right.ChangeType
  • ChangeRequest.Right.Delete
  • ChangeRequest.Right.RemoveObject
To control these rights for a single CR Type, or for a single Status of a CR Type, define corresponding pseudo-functions, e.g.
  • ChangeRequest.Right.AddObject("D") controls addition of objects to D-type CRs.
  • ChangeRequest.Right.AddObject("D","Closed") controls addition of objects to D-type CRs that have status Closed.
To control rights to alter status of a CR, define pseudo-functions as follows:
  • ChangeRequest.Right.EnterStatus("D","Closed") controls who can set a D-type CR status to Closed.
  • ChangeRequest.Right.LeaveStatus("D","Closed") controls who can change the status of a D-type CR status that has status Closed.

New dependency check mode – "Best Available" (VCM-D-0242)

All new physical location definitions now default their dependency check mode to a new value, 'Best Available'. With 'Best Available' mode, if the component driver supports getting and setting of native timestamps a 'Component Timestamp' check is performed. Otherwise a 'Physical Compare' check is performed.

It is important to note that component types stored in 'bin' or 'text' storage formats (e.g. BIN or T type components) will only have their native timestamp propagated by a VC/m transfer if VC/m is able to use a Perl interpreter to set the file modification timestamp at the destination to match the timestamp of the origin file. Failure to configure VC/m to use Perl for this purpose can lead to repeated automatic transfers when 'Best Available' or 'Component Timestamp' modes are used by the destination address. For more information, search for the term 'Perl' in the VC/m documentation.

No longer require Internet Explorer Compatibility View (P1715)

Prior to this enhancement it was necessary to run Internet Explorer in Compatibility View mode when accessing the VC/m interface. This is no longer necessary, though that mode continues to work.

Compatibility with Ensemble 2012.1+ portal source control interface (VCM-D-0249)

Starting with 2012.1 the Ensemble Portal is able to edit more kinds of code that can be source controlled. For VC/m to integrate with Portal the source control class selected for the namespace should be VCmStudio.SourceControl.Ensemble.

Task server can employ actor pool to improve concurrency (VCM-D-0226)

Where the VC/m task server (%vczn) is used to extend VC/m's reach to other ECP-connected Cache or Ensemble nodes, it is now possible to run the task server in a mode that improves concurrency, at the expense of running more background server processes. See code in server^%vczn for information about enabling this mode, known as 'actor mode'. When enabled, a task server master process assigns an actor process for each distinct requesting process. One benefit of this is that if one user of the VC/m browser UI is performing a slow task on a node (e.g. post-transfer compile of classes) this will not block other users whose actions need task server assistance on that same node.

Actor mode is enabled by default on new sites implemented with VC/m 4.0 or later. To enable it on other sites, or to disable it, see information in server^%vczn.

Utility for keeping task server’s local copy of routines in sync with central VC/m copy (VCM-D-0261)

Nodes serviced by the VC/m task server typically have a full set of %vc* routines stored in a local database so that the task server can start up even if the VC/m node is unreachable.

A new utility routine %vczn1 provides functions that the VC/m node can use to keep its task servers' local routine sets up to date. See comments in %vczn1 for more information.

Increase maximum length of object name from 60 to 200 (VCM-D-0245)

Object names can now be longer that previously.

Backslash is now permitted in component name (GJL701368)

Component names can now contain the backslash character (\) where this is valid for the specific component type. For example G.settings("\"

This change does not alter how VC/m handles subdirectories in a BIN- or T-type component name. In these the directory separator stored in the component name continues to be normalized to the forward-slash (/) regardless of operating system convention.

Initially create FX-format XML files and F-format $ files with a temporary extension (VCM-D-0313)

This enhancement creates the .$ control file as .$$ and renames it on successful completion, so that any file transfer or install daemon doesn't grab it too soon.

Similarly the FX driver writes its files with a .xml$ extension and renames them to .xml on completion.

Use .xml rather than .XML for FX-format files, for better interoperability on Unix (VCM-R-0168)

On case-sensitive filesystems this change provides better compatibility with Studio and Portal, whose import options use *.xml as the default filename pattern.

Permit longer prefixes for filesets (VCM-D-0272)

The limit is now 40 characters.

Add a way to restrict target of non-install transfers from filesets (VCM-D-0271)

By default, VC/live installs (%vc490) restrict transfers from a fileset so the objects within it only go to a location with the same name as they were transferred to when put into the fileset. This constraint can be relaxed by setting ^%vcvc("install_any_address")=1.

No equivalent constraints were applied when transferring objects from a fileset using other means (e.g. browser UI, programming API etc).

With this enhancement, set ^%vclt("F","params","targetOnly")=1 to require all transfers (including installs by %vc490) to go to the targeted location. Per-location overrides (1 or 0) can be set at ^%vclt("F","params","targetOnly",lcode).

Equivalent settings for FX filesets can be made in ^%vclt("FX","params",...)

New VCmEns.VCliveFeed production classes, enabling Ensemble 2012.1+ to drive propagation of transfer filesets (VCM-D-0312)

When implementing a feed from a VC/m-controlled Ensemble environment to a VC/live-controlled one it may be necessary to transfer the VC/m-generated filesets to the live server filesystem using FTP. A set of classes in a package named VCmEns.VCliveFeed is present in the VCM namespace of an Ensemble 2012.1+ installation. These classes implement a simple production to transfer the filesets. See documentation in the VCmEns.VCliveFeed.ProductionTemplate class.

Display null locations differently, and allow cancel when mastered there (VCM-D-0193)

Null locations (i.e. ones that map no components to any storage) are now displayed as white folders.

It is now permissible to cancel an objectversion that is mastered at a null location.

Permit component masks to point nowhere (VCM-D-0189)

Defining a component mask with no storage format or address is now permitted. This can be useful to exclude component patterns from subsequent mask entries.

Improve listing/comparing of objects under location where not present (VCM-R-0148)

When expanding a CR on an object at a location, then exploring a different object on that CR it is possible this object is not active at the current location. In such cases present the object without a Components subfolder.

When initiating a Compare from such an object, resort to master location.

Default /diffexport=1 for CLS driver at new sites so Beyond Compare diffs are cleaner (VCM-D-0309)

When VC/m exports a CLS component in XML format the file contains some information that results in false positives from BC's binary comparison. For example:

<Export generator="Cache" version="25" zv="Cache for Windows (x86-32) 2013.1 (Build 446U)" ts="2013-07-31 08:19:51">

The ts attribute indicates when the export occurred. If diffing a library component with a namespace one the ts attributes will be different even if the class is identical.

This change implements configurable flags in ^%vcct("CLS","settings","exportFlags") for VC/m's class export, and makes %vcins set that node to "/diffexport=1" on new sites. The component header will look like this:

<Export generator="Cache" version="25">

This setting can be made on existing sites provided the following consequences are acceptable:

  • Library copies of the component will no longer record the Cache version from which they were exported
  • The <TimeChanged> information will no longer be recorded

Optionally walk ^rINDEX instead of ^ROUTINE, ^rMAC etc (can be faster) (GJL701922)

Iterating through top level of ^ROUTINE or ^rMAC can be slow when there is a large codebase. This change walks ^rINDEX if ^%vcct(ctype,"settings","enumerateViaIndex")=1 where ctype is BAS, INC, INT, MAC or MVI.

Using ^rINDEX is not necessarily faster because its keys are in the wrong order for VC/m's purposes (name,type rather than type,name). Enumerating all MACs from ^rINDEX means reading all blocks of that global, which also indexes all OBJs, INTs and INCs.

If %GSIZE reports ^rMAC as smaller than ^rINDEX then it is probably faster not to enable enumerateViaIndex for MACs.

Do not use this option on Cache versions before 5.0 because these lack the ^rINDEX global.

Do not list HL7 schema components that are mapped from another database (VCM-D-0300)

This brings VC/m’s handling of mapped HL7 components into line with that of CLS components.

Enumerate M/SQL components in browser (VCM-D-0121)

The VC/m browser UI can now enumerate legacy M/SQL components on sites where the appropriate component drivers have been installed.

Implement dialog allowing user to change own VC/m password (VCM-D-0176)

Where VC/m has not been integrated with InterSystems security, users can now set their own VC/m account password using an option on the Settings menu.

Add right-click context menus to Object/CR listed in audit row (VCM-D-0250)

This enhancement applies to audit rows listed in the audit panel as well as to audit rows displayed within audit folders.

Add right-click context menu for items in setup lists (VCM-D-0210)

This enhancement aids tasks such as copying of routes.

Improve how Compare Locations report acts on a multi-version location (VCM-D-0302)

If the first location is multi-version we now use the latest-in-branch version of each objectversion selected, rather than the highest version at the location.

For example, suppose lcode1 contains two branches of an object:

  • v3->v4->v6
  • v3->v5
and lcode2 contains v2.

If user selects v3, v4 and v5 (e.g. by selecting @CRa and @CRb where CRa contains v3 and v4 and CRb contains v5) then the report will use v4 and v5 (previously it would only have used v6).

One row of the report will now show v4 versus v2 and a second row v5 versus v2, and if lcode2 is single-version will highlight these as a conflict (i.e. can't both go to lcode2).

Improve how Concurrent Branches report works with selection of objects (VCM-D-0306)

This change makes the report useful in the case where you only want to see concurrent branches of a set of objects on a CR.

The object selector dialog already supported @CR notation, but the report would only consider branch tips that were actually selected.

This has now been changed so non-selected tips will appear on the report as being concurrent with selected tips.

Omit empty location classes from report selectors (VCM-D-0257)

When generating Version by Location or Checked Out Objects reports, omit from the selector lists any location classes containing no locations.

Prior to this change, selecting only an empty location class would generate a report for all locations (which is - correctly - what happens when no locations or classes are selected).

Add TransferStatistic class for SQL access to ^%vcst information (GJL701748)

See the table User.TransferStatistic.

Record local variables, call stack and other info in ^%vcError (VCM-D-0296)

Errors logged in ^%vcError now store additional information which may be helpful in diagnosis, at the cost of consuming more disk space.

Reimplement system selector on object maintenance dialog using checkboxes (VCM-D-0299)

Previously it was implemented as a multi-select list, with the risk that an existing system might inadvertently be deselected when adding a new one.

Allow site-specific extension of CR Find dialog and lookup (VCM-D-0280)

See the routine %vcSampleChangeRequestSelect and the file Sample_ChangeRequestSelect.xsl for an example.

Add outermost end-of-transfer callout, and beginning-of-transfer partner (VCMB185)

The existing TERM callout (per-transfer termination) can occur more than once in a single transfer because auto-transfers nest their own INIT/do/TERM sequence. Also, the TERM callout happens before post-transfer compilation is done by term^%vc1xct.

Add a callout from term^%vc1xla that happens after term^%vc1xct and only when the nesting level has hit zero.

For symmetry, add a matching one in init^%vc1xla.

Supply cret to editCheckOutValidation callout (VCM-D-0288)

In order that an editCheckOutValidation callout can discover what component's editability is being tested, supply cret in piece 4 of the status string being passed.

The new information is provided as an extra piece rather than a new parameter so that the change is back-compatible.

Make event data available to message category callouts (VCM-D-0270)

oAudit("event") now contains the ^%vcat(item,atline,"event") subtree.

When dependency check is physical but component missing, report better (VCM-D-0303)

Prior to this change the dependency failure would only report that the object was different in the location. Now we say "Object component missing in XXX"

Drop support for DSM and MSM (VCM-D-0321)

Starting with VC/m 4.0 the DSM and MSM implementations of M are no longer supported platforms.


The following corrections date from after the original VC/m 3.2 release in October 2009. Some of them were back-ported into subsequent 3.2 release kits, so you site may already have them.

For more information about any of the items please contact Support and quote its reference number, e.g. VCMB276.

Work correctly with IE10 (GJL703735)

Prior to this change the selection combo box would not be available on the VC/m toolbar.

Most text was not altering size when IE zoom setting was changed (VCMB276)

Filters such as BIN.bin/* or T.csp/x* failed to list qualifying subdirectories (VCM-R-0176)

Avoid error deleting PRJ component if missing from namespace (GJL704160)

Handle ASCII chars above 127 properly (GJL700669)

Display accented location and location class names correctly in folder lists (VCM-R-0177)

Do not use UTF8 mode when transferring BIN components to/from Beyond Compare (VCM-R-0174)

Correct faults loading HL7 and RUL components from F and FX format storage (VCM-R-0103)

FX format files were not handling some components correctly (GJL701465)

G and GZ components in string-collating globals could lose subtree during transfer (GJL702388)

Implement OnBeforeDelete to stop newer Studios deleting if not checked out (GJL704414)

In some cases a Studio-initiated transfer dialog didn't close itself (GJL704373)

In-situ refresh of object was erasing display of activation date/time and user (VCM-B-0939)

Respect the "Maximum number of audit entries in browser display" setting on list of for-action audit items (VCM-R-0039)

Terminal-mode Manager\Load of components using a workfile did not pre-validate existence of components (VCMB268)

Location compare reports via browser were not filtering by system code (VCM-R-0038)

Merge dialog failed to open for object with complex branch/merge history (GJL702453)

If an object has undergone a large number of branches over a large number of versions (e.g. 16 branches over 148 versions) the merge dialog may fail to open because the structure generated is too complex for IE.

A simpler presentation of the branch/merge tree has been devised.

Output of LUT to F-format used the wrong delimiter string (VCM-R-0157)

Propagate error information better from task server task (VCM-R-0171)

Setup lists now allow resizing of last column (VCM-R-0102)

Sort locations correctly in transfer dialog dropdowns (VCM-R-0172)

When locations are contributed to a list because of a %ANY route they were appearing as a separately-sorted list ahead of the others.

Transfer event information was not logged by some pathways (VCM-R-0163)

When VC/m comments were being added to MACs or INCs, timestamp was not transferred (GJL702873)

Allow an empty objectversion to be merged in (VCM-D-0308)