Pages

Wednesday, June 3, 2015

How to export/import your MorphX VCS settings and history

When using MorphX for version control, sometimes you need to restore a backup of a database, and you don't want to lose all of your check in/out history.  I wrote this job to export and import your MorphX VCS settings.

Use at your own risk, but it's worked fine for me.

Enjoy!


static void AKBackupMorphXVCData(Args _args)
{
    SysDataExport           sysDataExport;
    SysDataImport           sysDataImport;
    
    Dialog                  dialog = new Dialog();
    FormBuildRadioControl   fbImportExport;
    FormRadioControl        radioResults;
    
    dialog.addText("Warning, if you choose Import, this will replace your VCS data and is not reversible!");
    
    // Add the radio button, name it anything
    fbImportExport = dialog.formBuildDesign().addControl(FormControlType::RadioButton, 'RadioButton1');
    fbImportExport.caption("Choose Import/Export");
    fbImportExport.items(2); 

    fbImportExport.item(1);
    fbImportExport.text("Export");
    
    fbImportExport.item(2);
    fbImportExport.text("Import");

    dialog.doInit();
    dialog.formRun().design().moveControl(fbImportExport.id());
    dialog.run();

    if (dialog.closedOk())
    {
        radioResults = dialog.formRun().control(fbImportExport.id());
        
        if (radioResults.selection() == 0) // Export
        {
                sysDataExport = new SysDataExport();
                sysDataExport.parmDoNotBypassDefIO(true);
                sysDataExport.parmServerAccess(true);
                sysDataExport.addTmpExpImpTable(tableNum(SysVersionControlMorphXItemTable), false);
                sysDataExport.addTmpExpImpTable(tableNum(SysVersionControlMorphXLockTable), false);
                sysDataExport.addTmpExpImpTable(tableNum(SysVersionControlMorphXRevisionTable), false);
                sysDataExport.addTmpExpImpTable(tableNum(SysVersionControlParameters), false);
                sysDataExport.addTmpExpImpTable(tableNum(SysVersionControlSynchronizeLog), false);

                if (sysDataExport.prompt())
                {   
                    sysDataExport.parmFiletype(FileType::Binary);
                    sysDataExport.run();
                }
        }
        else if (radioResults.selection() == 1) // Import
        {
            sysDataImport = new SysDataImport();

            if (sysDataImport.prompt())
            {
                sysDataImport.parmLoadAll(true);
                sysDataImport.parmInclTablesNotPerComp(true);
                sysDataImport.parmFiletype(FileType::Binary);
                sysDataImport.run();

                versioncontrol.init();
            }
        }
        
        info("Done!");
    }
}

Dynamic dialog controls at runtime

This is a job that demonstrates how to dynamically add controls (specifically radio button) to a dialog at runtime and also change their position and access their values.

You can use this style in custom advanced UI builders.

static void AKDynamicDialogExample(Args _args)
{
    Dialog                  dialog = new Dialog();
    FormBuildRadioControl   fbRadioControl;
    FormRadioControl        radioControl;
    
    // Add the radio button, name it anything
    fbRadioControl = dialog.formBuildDesign().addControl(FormControlType::RadioButton, 'RadioButton1');

    // Set radio basic properties
    fbRadioControl.caption("Test Radio Buttons");
    fbRadioControl.items(2); // This is needed

    fbRadioControl.item(1); // Switch to first item
    fbRadioControl.text("Item 1"); // Set first item's text
    
    fbRadioControl.item(2); // Switch to second item
    fbRadioControl.text("Item 2"); // Set second item's text

    // This is needed to instantiate the FormRun
    dialog.doInit();

    // Just passing one argument moves it UP.
    // So this moves it UP above the "OK/Cancel" buttons created
    dialog.formRun().design().moveControl(fbRadioControl.id());

    dialog.run();

    if (dialog.closedOk())
    {
        // You need to access it from the formRun() with the correct
        // form control
        radioControl = dialog.formRun().control(fbRadioControl.id());
        info(strFmt("%1", radioControl.selection()));
    }
}