A while ago, our team had implemented a very sophisticated solution to solve this problem for one of our biggest SAS MA customers...
The solution was comprised of the following components:
- A cron job that monitored CI Core log looking for "campaign saved" events when a user saved a campaign, every 15 minutes
- For every identified campaign save event, running sasmaextract utility to extract a full campaign definition into an XML file
- Committing that campaign XML as a file into an SVN repository under the name of the user who made the original save of a campaign, with a timestamp of the original campaign save event. A folder structure in SVN repository was reflecting the folder structure in SAS MA metadata.
- A customized version of a WebSVN UI to provide users a lightweight browser-based view on that versioned campaign repository. So one could see a complete change history for every campaign (who made changes and when).
P.S> These days we'd probably utilized GIT / Github, back then SVN was still somewhat relevant.
- A customized version of a "diff" page of WebSVN that allowed one to compare two revisions of the same campaign (or two campaigns one with another) in details - what exactly has changed. The page invoked a complex SAS script that parsed both campaigns XML (a portion that described a diagram), compared them node-by-node, and presented a diff result as a summary table: added nodes, deleted nodes, changed node properties, changed connections. This was the most complicated piece.
- A "restore" button in WebSVN that allowed restoring a selected campaign version back into SAS MA repository using "sasmaimport" utility
Frankly speaking, this was quite a complex solution, required a lot of efforts to develop and to fix bugs... I would not recommend anyone developing the same thing from scratch, unless under a truly compelling need. But it worked. Back then it was developed for v5.41, not sure if it was even updated to 6.5.
-------
Dmitriy Alergant, Tier One Analytics