Skip to content

Structure Changelog

We strongly advise you to download and configure changelog schemas at your IntelliJ IDEA, this will be necessary to obtain IntelliSense when editing. More information here.

The platform provides a schema definition based on changelog/changeset to manipulate DataObject, DocumentType and others structures (see bellow).

Supported Operations

DataObject

  • addOrChangeDataObject: Add or change DataObject.
  • addDataObject: Add DataObject.
  • changeDataObject: Change DataObject.
  • removeDataObject: Remove DataObject.
Field
  • addOrChangeDataObjectField: Add or change Field at an existing DataObject.
  • addDataObjectField: Add Field at an existing DataObject.
  • changeDataObjectField: Change Field (properties, type, params).
  • removeDataObjectField: Remove Field from DataObject.
Index
  • addOrChangeDataObjectIndex: Add or change Index at an existing DataObject.
  • addDataObjectIndex: Add Index at an existing DataObject.
  • changeDataObjectIndex: Change Index at an existing DataObject.
  • removeDataObjectIndex: Remove Index from DataObject.
DataSource
  • addOrChangeDataObjectDataSource: Add or change Data Source at an existing DataObject.
  • addDataObjectDataSource: Add Data Source at an existing DataObject.
  • changeDataObjectDataSource: Change Data Source at an existing DataObject.
  • removeDataObjectDataSource Remove Data Source from DataObject.

DocumentType

  • addOrChangeDocumentType: Add or change DocumentType general information, such as, display name, order, sequence strategy, sharing, properties, etc.
  • addDocumentType: Add DocumentType, also possible to define data, expression, validation, notification, sharing, cloneable field, relationship, subdocument and index.
  • changeDocumentType: Change DocumentType general information, such as, display name, order, sequence strategy, sharing, properties, etc.
  • removeDocumentType: Remove DocumentType.
Data
  • addOrChangeDocumentTypeData: Add or Change DocumentTypeData at an existing DocumentType.
  • addDocumentTypeData: Add DocumentTypeData at an existing DocumentType.
  • changeDocumentTypeData: Change DocumentTypeData at an existing DocumentType.
  • removeDocumentTypeData: Remove DocumentTypeData from DocumentType.
Expression
  • addOrChangeDocumentTypeExpression: Add or change Expression at an existing DocumentType or DocumentTypeData.
  • addDocumentTypeExpression: Add Expression at an existing DocumentType or DocumentTypeData.
  • changeDocumentTypeExpression: Change Expression.
  • removeDocumentTypeExpression: Remove Expression from DocumentType or DocumentTypeData.
Validation
  • addOrChangeDocumentTypeValidation: Add or change Validation at an existing DocumentType or DocumentTypeData.
  • addDocumentTypeValidation: Add Validation at an existing DocumentType or DocumentTypeData.
  • changeDocumentTypeValidation: Change Validation at an existing DocumentType or DocumentTypeData.
  • removeDocumentTypeValidation: Remove Validation from DocumentType or DocumentTypeData.
Notification
  • addOrChangeDocumentTypeNotification: Add Notification at an existing DocumentType. AppBuilder compatibility
  • addDocumentTypeNotification: Add Notification at an existing DocumentType.
  • removeDocumentTypeNotification: Remove Notification from DocumentType.
Sharing
  • addOrChangeDocumentTypeSharing: Add Sharing at an existing DocumentType. AppBuilder compatibility
  • addDocumentTypeSharing: Add Sharing at an existing DocumentType.
  • removeDocumentTypeSharing: Remove Sharing from DocumentType.
Cloneable Field
  • addOrChangeDocumentTypeCloneableField: Add Cloneable Field at an existing DocumentType. AppBuilder compatibility
  • addDocumentTypeCloneableField: Add Cloneable Field at an existing DocumentType.
  • removeDocumentTypeCloneableField: Remove Cloneable Field from DocumentType.
Relationship
  • addOrChangeDocumentTypeRelationship: Add or change Relationship at an existing DocumentType.
  • addDocumentTypeRelationship: Add Relationship at an existing DocumentType.
  • changeDocumentTypeRelationship: Change Relationship.
  • removeDocumentTypeRelationship: Remove Relationship from DocumentType.
SubDocumentType
  • addOrChangeDocumentTypeSubDocumentType: Add SubDocument at an existing DocumentType. AppBuilder compatibility
  • addDocumentTypeSubDocumentType: Add SubDocument at an existing DocumentType.
  • removeDocumentTypeSubDocumentType: Remove SubDocument from DocumentType.
SubDocumentType Expression
  • addOrChangeSubDocumentTypeExpression: Add or change Expression at an existing SubDocument.
  • addSubDocumentTypeExpression: Add Expression at an existing SubDocument.
  • changeSubDocumentTypeExpression: Change Expression.
  • removeSubDocumentTypeExpression: Remove Expression from SubDocument.
Index
  • addOrChangeDocumentTypeIndex: Add or change Index at an existing DocumentType.
  • addDocumentTypeIndex: Add Index at an existing DocumentType.
  • changeDocumentTypeIndex: Change Index.
  • removeDocumentTypeIndex: Remove Index from DocumentType.

FilterConfiguration

  • addOrChangeFilterConfiguration: Add Or change Document Type Filter Configuration.
  • addFilterConfiguration: Add Document Type Filter Configuration.
  • changeFilterConfiguration: Change Document Type Filter Configuration.
  • removeFilterConfiguration: Remove Document Type Filter Configuration.
  • addOrChangeFilterConfigurationField: Add Or Change Field in Filter Configuration.
  • addFilterConfigurationField: Add Field in Filter Configuration.
  • removeFilterConfigurationField: Remove Field.

HumanBeingDataSource

  • addOrChangeHumanBeingDataSource: Add or change HumanBeingDataSource.
  • addHumanBeingDataSource: Add HumanBeingDataSource.
  • changeHumanBeingDataSource: Change HumanBeingDataSource permissions.
  • removeHumanBeingDataSource: Remove HumanBeingDataSource.

Macro

  • addOrChangeMacro: Add Macro. AppBuilder compatibility
  • addMacro: Add Macro.
  • removeMacro: Remove Macro.

Group

  • addOrChangeGroup: Add or change Group.
  • addGroup: Add Group.
  • changeGroup: Change Group.
  • removeGroup: Remove Group.
  • addOrChangeGroupElement: Add element to an existing Group. AppBuilder compatibility
  • addGroupElement: Add element to an existing Group.
  • removeGroupElement: Remove element from an existing Group.

TemplateMail

  • addOrChangeTemplateMail: Add or change TemplateMail.
  • addTemplateMail: Add TemplateMail.
  • changeTemplateMail: Change TemplateMail.
  • removeTemplateMail: Remove TemplateMail.
  • addOrChangeTemplateMailParameter: Add or change parameter at an existing TemplateMail.
  • addTemplateMailParameter: Add parameter to an existing TemplateMail.
  • changeTemplateMailParameter: Change parameter from an existing TemplateMail.
  • removeTemplateMailParameter: Remove parameter from an existing TemplateMail.
  • addOrChangeTemplateMailLocale: Add or change locale at an existing TemplateMail.
  • addTemplateMailLocale: Add locale to an existing TemplateMail.
  • changeTemplateMailLocale: Change locale from an existing TemplateMail.
  • removeTemplateMailLocale: Remove locale from an existing TemplateMail.

Dynamic Filter

  • addOrChangeDynamicFilter: Add or change Dynamic Filter.
  • addDynamicFilter: Add Dynamic Filter.
  • changeDynamicFilter: Change Dynamic Filter.
  • removeDynamicFilter: Remove Dynamic Filter.

Data Contract (Wsdl or Wadl) files

  • removeDataContract: Remove Data contract file based on name and type. Besides the operation, you must also remove your file from the project structure.

AppBuilder compatibility: Operations marked as AppBuilder compatibility has no effect for change, only add the target object if not exists.

Changelog File

Main structure

As demonstrated below, the root element of a changelog file is changelog, it supports n changesets.

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<changeLog xmlns="http://meceap.me.com.br/schema/changeLog-mapping"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://meceap.me.com.br/schema/changeLog-mapping http://docs.miisy.me/xsd/changelog-mapping.xsd">
    <changeSet author="author 01" description="changeset description 01" id="01-01-0001" runAlways="false" runOnChange="false" failOnError="true">
    </changeSet>
    <changeSet author="author 02" description="changeset description 02" id="01-01-0002" runAlways="false" runOnChange="false" failOnError="true">
    </changeSet>
    <changeSet author="author n" description="changeset description n..." id="n-n-n..." runAlways="false" runOnChange="false" failOnError="true">
    </changeSet>    
</changeLog>

Must be stored at src\main\mapping\changelog and must have the .changelog.xml extension. Example: \customroot\core\src\main\mapping\changelog\v1.changelog.xml.

Use .ext in the filename when working with application extensions. Example: v1.ext.changelog.xml.

ChangeSet element

ChangeSet is the root element for all supported operations, it's possible to define 0..n of each operation.

Example of use:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<changeLog xmlns="http://meceap.me.com.br/schema/changeLog-mapping"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://meceap.me.com.br/schema/changeLog-mapping http://docs.miisy.me/xsd/changelog-mapping.xsd">
    <changeSet author="author" description="Add DataObject" id="01-01-0001" runAlways="false" runOnChange="false" failOnError="true">
        <addDataObject auditable="true" baseName="doNotUse" description="For testing purposes only" exportable="true"
                       name="doNotUse" pluralBaseName="doNotUse">
            <field description="code" displayName="code" type="java.lang.String" name="code" order="10">
                <param name="length" value="50"/>
                <param name="minLength" value="0"/>
                <param name="required" value="true"/>
                <param name="auditable" value="true"/>
                <param name="email" value="false"/>
                <param name="useTextArea" value="false"/>
                <param name="ignore" value="false"/>
                <param name="updatable" value="true"/>
                <param name="meTextEditor" value="false"/>
                <param name="markDownEditor" value="false"/>
                <param name="sortable" value="false"/>
            </field>
            <field description="description" displayName="description" type="java.lang.String" name="description" order="20">
                <param name="length" value="50"/>
                <param name="minLength" value="0"/>
                <param name="required" value="false"/>
                <param name="auditable" value="true"/>
                <param name="email" value="false"/>
                <param name="useTextArea" value="false"/>
                <param name="ignore" value="false"/>
                <param name="updatable" value="true"/>
                <param name="meTextEditor" value="false"/>
                <param name="markDownEditor" value="false"/>
                <param name="sortable" value="false"/>
            </field>
            <index name="pk" unique="true">
                <field fullName="code" name="code"/>
            </index>
        </addDataObject>
    </changeSet>
    <changeSet author="author" description="Add new index" id="01-01-0002" runAlways="false" runOnChange="false" failOnError="true">
        <addDataObjectIndex dataObjectBaseName="doNotUse" name="idx_description" unique="false">
            <field fullName="description" name="description"/>
        </addDataObjectIndex>
    </changeSet>
    <changeSet author="author" description="Add new field" id="01-01-0003" runAlways="false" runOnChange="false" failOnError="true">
        <addDataObjectField dataObjectBaseName="doNotUse" description="otherField" displayName="otherfield" type="java.lang.String" name="otherfield" order="30">
            <param name="length" value="50"/>
            <param name="minLength" value="0"/>
            <param name="required" value="false"/>
            <param name="auditable" value="true"/>
            <param name="email" value="false"/>
            <param name="useTextArea" value="false"/>
            <param name="ignore" value="false"/>
            <param name="updatable" value="true"/>
            <param name="meTextEditor" value="false"/>
            <param name="markDownEditor" value="false"/>
            <param name="sortable" value="false"/>
        </addDataObjectField>
    </changeSet>
    <changeSet author="author" description="Add new DataSource" id="01-01-0004" runAlways="false" runOnChange="false" failOnError="true">
        <addDataObjectDataSource dataObjectBaseName="doNotUse" description="data source test" name="dstest"/>
    </changeSet>
    <changeSet author="author" description="add document" id="01-01-0005" runAlways="false" runOnChange="false"
               failOnError="true">
        <addDocumentType description="DocTestDoNotUse" displayName="DocTestDoNotUse" name="DocTestDoNotUse"
                         pluralName="DocTestDoNotUse" order="99" sequenceStrategy="">
            <defaultSharing>
                <shared-users>
                    <email>user@me.com.br</email>
                    <permission name="R"/>
                    <permission name="S"/>
                    <permission name="W"/>
                    <permission name="X"/>
                </shared-users>
            </defaultSharing>
            <properties>
                <item key="SEARCH_BOX_DISABLED" value="false"/>
                <item key="LIST_DOCUMENT_ENABLE" value="true"/>
                <item key="NOTIFY_USERS_ON_CHANGE" value="false"/>
            </properties>
            <sharing>
                <shared-users>
                    <email>admin@misy.com</email>
                    <permission name="R"/>
                    <permission name="S"/>
                    <permission name="W"/>
                    <permission name="X"/>
                    <permission name="C"/>
                </shared-users>
            </sharing>
            <cloneableFields>
                <field documentData="coffeeDataDoc" field="amountSubTotal"/>
            </cloneableFields>
            <documentData dataObjectBaseName="coffeereq" multiplicity="ONE" name="coffeeDataDoc"/>
            <documentData dataObjectBaseName="coffeeitem" multiplicity="MANY" name="coffeeMixtureDoc">
                <expression field="amountCalc" order="1">${amount} + 5</expression>
                <subDocData dataObjectBaseName="comment" multiplicity="MANY" name="mixtureCommentDoc"/>
            </documentData>
            <documentValidation validationClass="meceap.coffeeDispenser.validator.CoffeeAmountValidation"
                                validationType="DOCUMENT"/>
            <documentValidation documentData="coffeeDataDoc" field="requester"
                                validationClass="meceap.coffeeDispenser.validator.RequiredFieldValidation"
                                validationType="FIELD"/>
            <expression field="coffeeDataDoc.amountTotal" order="1">sum(${coffeeMixtureDocList.amountCalc})</expression>
            <expression field="coffeeDataDoc.amountSubTotal" order="2">${_subDocument.CoffeeItem.totalItem} + 2
            </expression>
            <index name="MyIndex" unique="false">
                <field fullName="coffeeDataDoc.requester" name="coffeeDataDoc"/>
                <field fullName="coffeeMixtureDocList.name" name="coffeeMixtureDoc"/>
            </index>
            <notificationFields>
                <field documentData="coffeeDataDoc" field="ownerRef"/>
            </notificationFields>
            <relationship documentTypeRelated="DocTestDoNotUse">
                <relationType className="br.com.me.ceap.service.relationship.impl.Related"/>
                <relationType className="br.com.me.ceap.service.relationship.impl.Child"/>
                <relationType className="br.com.me.ceap.service.relationship.impl.Parent"/>
            </relationship>
            <relationship documentTypeRelated="CoffeeRequest">
                <relationType className="br.com.me.ceap.service.relationship.impl.Parent"/>
                <relationType className="br.com.me.ceap.service.relationship.impl.Related"/>
                <relationType className="br.com.me.ceap.service.relationship.impl.Child"/>
            </relationship>
            <sharingFields>
                <field documentData="coffeeDataDoc" field="user"/>
            </sharingFields>
            <subDocumentType name="CoffeeAnnotation"/>
            <subDocumentType name="CoffeeItem">
                <expression name="totalItem" order="1">sum(${header.amount})</expression>
                <expression name="coffeeInfo" order="2">sum(${header.amount})</expression>
            </subDocumentType>
        </addDocumentType>
    </changeSet>
    <changeSet author="author" description="change document" id="01-01-0006" runAlways="false" runOnChange="false"
               failOnError="true">
        <changeDocumentType description="DocTestDoNotUse Changed" displayName="DocTestDoNotUse Changed"
                            name="DocTestDoNotUse"
                            order="98"
                            pluralName="DocTestDoNotUse">
            <properties>
                <item key="NOTIFY_USERS_ON_CHANGE" value="true"/>
            </properties>
        </changeDocumentType>
    </changeSet>
    <changeSet author="author" description="add document type data" id="01-01-0007"
               runAlways="false"
               runOnChange="false"
               failOnError="true">
        <addDocumentTypeData documentType="DocTestDoNotUse" dataObjectBaseName="coffeeitem" multiplicity="MANY"
                             name="newdtd">
        </addDocumentTypeData>
    </changeSet>
    <changeSet author="author" description="add document type data expression" id="01-01-0008"
               runAlways="false"
               runOnChange="false"
               failOnError="true">
        <addDocumentTypeExpression field="total" order="100" documentType="DocTestDoNotUse" documentData="newdtd">
            ${coffeeMixtureList.amountCalc}
        </addDocumentTypeExpression>
    </changeSet>
    <changeSet author="author" description="add document type data validation" id="01-01-0009"
               runAlways="false"
               runOnChange="false"
               failOnError="true">
        <addDocumentTypeValidation documentType="DocTestDoNotUse" documentData="newdtd" field="name"
                                   validationClass="meceap.coffeeDispenser.validator.RequiredFieldValidation"
                                   validationType="FIELD"/>
    </changeSet>
    <changeSet author="author" description="add document type index" id="01-01-0010"
               runAlways="false"
               runOnChange="false"
               failOnError="true">
        <addDocumentTypeIndex documentType="DocTestDoNotUse" name="newIndex" unique="false">
            <field fullName="coffeeDataDoc.requester" name="coffeeDataDoc"/>
            <field fullName="coffeeMixtureDocList.name" name="coffeeMixtureDoc"/>
        </addDocumentTypeIndex>
    </changeSet>
    <changeSet author="author" description="add document type relationship" id="01-01-0011"
               runAlways="false"
               runOnChange="false"
               failOnError="true">
        <addDocumentTypeRelationship documentType="DocTestDoNotUse" documentTypeRelated="CoffeeRequestAttachment">
            <relationType className="br.com.me.ceap.service.relationship.impl.Related"/>
            <relationType className="br.com.me.ceap.service.relationship.impl.Parent"/>
        </addDocumentTypeRelationship>
    </changeSet>
</changeLog>
Tips
  • Note you can mix operations of different types at the same changelog file, our example shows DataObject and DocumentType operations together.
  • You can make many operations at the same changeset, but break in multiples changesets is more readable and easy to maintain.
  • Don't forget to read about changelog master file. More information here.
  • AddOrChange operations are nothing more than a switch, if the target object exists the call will be redirect to change if not, to add.

XSD Download

How to manually configure xsd location at IntelliJ IDEA for IntelliSense here.