Skip to content

Back to all documentation

Contents

References

Make sure to complete the ACACIA initial setup before starting a conversion.

Hybrid migration process

Currently, OutSystems only allows to export info about the data model, and not about the screens and logic. This means that manual enhancements are usually needed. As some applications may not need migration, or need a full rebuild with a new architecture, we propose a hybrid approach that combines automatic and manual migration, as shown below.

Export model info from OutSystems

To extract the model info from OutSystems, simply install the Cool Data Model Info React component from OutSystems Forge. After installing, hit ‘Open in browser’. Optionally you can configure the applications for which you want to export the model info. It defaults to exporting all information of your entire OutSystems application landscape. Hit ‘Start’ and wait for the export to download. The export is a spreadsheet that contains all information about the Modules, StaticValues, Entities and Attributes in the (selected) OutSystems application(s).

Start model conversion

When logged in into ACACIA as a user, go to Conversion Jobs. There you find a button ‘Manual OS export upload’. It will provide a screen to upload the spreadsheet as created in the previous (export model info) step. Other options are optional and explained below. When you hit save, the conversion will start, and can be monitored through the Job overview. You can always check the details of the Conversion Job where you can download the input file, see the generated apps (links to Sprintr project) and a full log of all actions taken. When something went wrong in the conversion process, you may be able to find error details as well.

Conversion options

  • Template app: you can select your template app to start generation with. Configuration of templates app is described here. Once you hacve selected a template app, you can also select the layouts used for overview and detail/new/edit screens.
  • Deploy automatically: if ticked, ACACIA will try to deploy the application to a free Mendix cloud node. Note that this sometimes fails, and especially won’t work when something went wrong in the conversion process. We cannot guarantee all generated applications are free of errors.
  • Advanced options:
    • Add guest user: when set to yes, anonymous users will be enabled, with the default project role named User as role.
    • Show as gallery: you an enter an entity name as <Application name>.<Module name>.<Entity name> and it will generate the overview page for that entity as a Gallery instead of the standard Data grid. You may enter multiple entities with the + button.
    • Parent child detail layout: you can enter a parent and child entity name as <Application name>.<Module name>.<Entity name> and it will add the maintenance of the child entity into the detail screen of the parent entity, as shown below. You may enter multiple parent/child rows with the + button and you can enter multiple rows with the same parent entity. Do not use nesting (an entity is both parent and child in different rows) as it may give unexpected results.

Export data from OutSystems

To export the data from OutSystems, several approaches are possible. Currently our generated data import module only supports CSV imports, so for now that is the recommended way to export your data. In future we may support complete database dumps.

Exporting normal entities to CSV

The recommended way to export normal (non binary/file based entities) is as follows:

  1. create a server action for each entity, called <entityname>_ToCSV, with an output parameter with Name=File and Data Type=File (Structure)
  2. create the flow as shown:
    • Get<entity name> retrieves the data from a specific table. Only include the necessary attributes
    • ExportRecordList2CSV with RecordList =ToObject(<previous action name>.List)
    • TextToBinaryData with Text=<previous action name>.Csv and Encoding=”UTF-8″
    • Assign with File.Content=<previous action name>.BinaryData and File.Name=”<entity name>.csv”

Exporting binary entities

Exporting entities with a binary component (files/images/etc.) needs a different flow to export:

  1. create the server action as described above
  2. create the flow as shown:
    • Get<entity name> retrieves the data from a specific table. Only include the necessary attributes
    • CreateZip
    • For Each with RecordList=<first retrieve action>.List
      • Cycle to AddFile action with ZipHandle=CreateZip.ZipHandle, FileName=<first retrieve action>.List.Current.LocationPicture.Id + “_” + <first retrieve action>.List.Current.LocationPicture.Filename, DateTime=CurrDateTime(), FileContent=<first retrieve action>.List.Current.LocationPicture.File
    • ExportRecordList2CSV with RecordList =ToObject(<first retrieve action>.List)
    • TextToBinaryData with Text=<previous action name>.Csv and Encoding=”UTF-8″
    • AddFile with ZipHandle=CreateZip.ZipHandle, FileName=”<entity name>.csv”, DateTime=CurrDateTime(), FileContent=<previous action name>.BinaryData
    • CommitChanges with ZipHandle=CreateZip.ZipHandle
    • GetZipBinary with ZipHandle=CreateZip.ZipHandle
    • Assign with File.Content=<previous action name>.ZipBinary and File.Name=”<entity name>.zip”

Start data import