Retaining Object IDs From Copied Objects
The most obvious reason to maintain multiple environments (Development, Test, Production) is so that you can make changes to objects while building/modifying without impacting Production. Once the changes are complete/tested, they can be migrated with MicroStrategy Object Manager into the target project. In order for this theme to work, MicroStrategy relies on the Object IDs to be synced for objects between projects. So what do you do if you just want to test something out or try something crazy? You could always try it in Dev, and if it doesn’t work, migrate it backwards from Test/Prod back to Dev to undo your changes. Today, I’ll show a different trick where you can work on copies of objects, but still retain their original GUIDs without the extra risk.
The trick is something non-intuitive, but is obvious when you think about how Web works. What you can do is make a copy of any object, which will now create a new Object ID. You can make your changes and test them out, and if you want to keep them, but retain the original Object ID, instead of reapplying the changes you can simple Save As on your new object and overwrite the original. Your changes are all applied, but the original Object ID is retained. When you think about the workflow when saving Reports in Web, it always does a Save As, as you get the confirmation that you’ll be overwriting the Report.
This trick can be useful in a few scenarios, specifically if you wanted to test some new changes or perhaps have a less experienced developer work on a copy of a complex/sensitive report without risk of messing it up. You could also take a Report that a user has modified in their My Reports and apply it to the Shared Reports version.
The importance of retaining the Object ID is so that Object Manager can still function for migrations between projects. Additionally, any existing subscriptions are tied to the Object IDs, as well as any dependents that use the object you’re copy/replacing.
I’ve tested this primarily with Reports/Documents, but it also works with all other types of objects with the exception of Prompts.