Export APEX applications from App Builder environment. One or more Application is exported based on provided inputs. You can use this operation to export applications from development environment and commit to SCM on periodic basis. See example workflow below on this page. Example workflow is exporting applications in apexexport folder and then Git repository is cloned in to apexgitrepo, eventually exported files are copied in to cloned repository and committed.
...
Property Name | Property Code | Required | Description | ||||||
---|---|---|---|---|---|---|---|---|---|
Oracle SQLcl Home |
| Yes | Folder where SQLcl is installed. Make sure that the endpoint Java Home is a high enough version for your SQLcl version. | ||||||
APEX User |
| Yes | Provide database user APEX_xxxxx (APEX user requires INHERIT Privilege) or owner (parsing schema) of the application for export and import operations. You can use system user as well. | ||||||
APEX Password |
| Yes | Password for APEX User. | ||||||
Oracle Database URL |
| Yes | JDBC URL for Oracle database. For example:
|
...
Export and commit to Git
Code Block | ||
---|---|---|
| ||
<?xml version="1.0" encoding="UTF-8"?> <ns0:WorkFlow xmlns:ns1="http://flexagon.com/flexdeploy/workflow/common" xmlns:ns0="http://flexagon.com/flexdeploy/workflow"> <ns1:Name>Export Apex Applications</ns1:Name> <ns1:Description></ns1:Description> <ns0:Steps> <ns0:Step> <ns1:Name>exportAPEXApplications</ns1:Name> <ns1:StepId>1</ns1:StepId> <ns0:InvokePlugin> <ns0:PluginName>FlexagonOracleAPEXPlugin</ns0:PluginName> <ns0:PluginOperation>exportAPEXApplications</ns0:PluginOperation> <ns0:consumesArtifacts>false</ns0:consumesArtifacts> <ns0:producesArtifacts>false</ns0:producesArtifacts> <ns0:PluginInputs> <ns0:PluginInput> <ns0:Name>FDAPEX_INP_WORKSPACE_NAME</ns0:Name> <ns0:ValueType>Text</ns0:ValueType> <ns0:Encrypted>false</ns0:Encrypted> <ns1:Type>String</ns1:Type> </ns0:PluginInput> <ns0:PluginInput> <ns0:Name>FDAPEX_INP_APPLICATION_NAME</ns0:Name> <ns0:ValueType>Text</ns0:ValueType> <ns0:Encrypted>false</ns0:Encrypted> <ns1:Type>String</ns1:Type> </ns0:PluginInput> <ns0:PluginInput> <ns0:Name>FDAPEX_INP_EXPORT_FOLDER</ns0:Name> <ns0:ValueType>Text</ns0:ValueType> <ns0:Encrypted>false</ns0:Encrypted> <ns1:Type>String</ns1:Type> <ns0:Text>apexexport</ns0:Text> </ns0:PluginInput> </ns0:PluginInputs> <ns0:UserInputs/> <ns0:PluginOutputs/> <ns0:UserOutputs/> </ns0:InvokePlugin> </ns0:Step> <ns0:Step> <ns1:Name>Git Clone</ns1:Name> <ns1:StepId>2</ns1:StepId> <ns0:InvokePlugin> <ns0:PluginName>FlexagonGITPlugin</ns0:PluginName> <ns0:PluginOperation>clone</ns0:PluginOperation> <ns0:consumesArtifacts>false</ns0:consumesArtifacts> <ns0:producesArtifacts>false</ns0:producesArtifacts> <ns0:PluginInputs> <ns0:PluginInput> <ns0:Name>FDGIT_INP_INSTANCE_CODE</ns0:Name> <ns0:ValueType>Text</ns0:ValueType> <ns0:Encrypted>false</ns0:Encrypted> <ns1:Type>String</ns1:Type> <ns0:Text>GITDEMO</ns0:Text> </ns0:PluginInput> <ns0:PluginInput> <ns0:Name>FDGIT_INP_DEST_SUBFOLDER</ns0:Name> <ns0:ValueType>Text</ns0:ValueType> <ns0:Encrypted>false</ns0:Encrypted> <ns1:Type>String</ns1:Type> <ns0:Text>apexgitrepo</ns0:Text> </ns0:PluginInput> <ns0:PluginInput> <ns0:Name>FDGIT_INP_BRANCH</ns0:Name> <ns0:ValueType>Text</ns0:ValueType> <ns0:Encrypted>false</ns0:Encrypted> <ns1:Type>String</ns1:Type> <ns0:Text>master</ns0:Text> </ns0:PluginInput> <ns0:PluginInput> <ns0:Name>FDGIT_INP_DEPTH</ns0:Name> <ns0:ValueType>Text</ns0:ValueType> <ns0:Encrypted>false</ns0:Encrypted> <ns1:Type>Integer</ns1:Type> <ns0:Text>1</ns0:Text> </ns0:PluginInput> <ns0:PluginInput> <ns0:Name>FDGIT_INP_SPARSE_CHECKOUT_FOLDERS</ns0:Name> <ns0:ValueType>Text</ns0:ValueType> <ns0:Encrypted>false</ns0:Encrypted> <ns1:Type>String</ns1:Type> <ns0:Text>APEXV2</ns0:Text> </ns0:PluginInput> </ns0:PluginInputs> <ns0:UserInputs/> <ns0:PluginOutputs/> <ns0:UserOutputs/> </ns0:InvokePlugin> </ns0:Step> <ns0:Step> <ns1:Name>Copy exported files to local Git repo</ns1:Name> <ns1:StepId>3</ns1:StepId> <ns0:InvokePlugin> <ns0:PluginName>FlexagonFilePlugin</ns0:PluginName> <ns0:PluginOperation>copy</ns0:PluginOperation> <ns0:consumesArtifacts>false</ns0:consumesArtifacts> <ns0:producesArtifacts>false</ns0:producesArtifacts> <ns0:EndpointSelection> <ns0:EndpointSelectionChoice>All</ns0:EndpointSelectionChoice> </ns0:EndpointSelection> <ns0:EndpointExecutionChoice>Any</ns0:EndpointExecutionChoice> <ns0:PluginInputs> <ns0:PluginInput> <ns0:Name>FDFILE_INP_FILE_FILTER</ns0:Name> <ns0:ValueType>Text</ns0:ValueType> <ns0:Encrypted>false</ns0:Encrypted> <ns1:Type>String</ns1:Type> <ns0:Text>*.sql</ns0:Text> </ns0:PluginInput> <ns0:PluginInput> <ns0:Name>FDFILE_INP_FILE_FILTER_EXCLUDED</ns0:Name> <ns0:ValueType>Text</ns0:ValueType> <ns0:Encrypted>false</ns0:Encrypted> <ns1:Type>String</ns1:Type> </ns0:PluginInput> <ns0:PluginInput> <ns0:Name>FDFILE_INP_SOURCE_PATH</ns0:Name> <ns0:ValueType>Expression</ns0:ValueType> <ns0:Encrypted>false</ns0:Encrypted> <ns1:Type>String</ns1:Type> <ns0:Value> <ns0:Expression>FD_TEMP_DIR + "/apexexport"</ns0:Expression> </ns0:Value> </ns0:PluginInput> <ns0:PluginInput> <ns0:Name>FDFILE_INP_TARGET_PATH</ns0:Name> <ns0:ValueType>Expression</ns0:ValueType> <ns0:Encrypted>false</ns0:Encrypted> <ns1:Type>String</ns1:Type> <ns0:Value> <ns0:Expression>FD_TEMP_DIR + "/apexgitrepo/APEXV2"</ns0:Expression> </ns0:Value> </ns0:PluginInput> <ns0:PluginInput> <ns0:Name>FDFILE_INP_CLEAN_DIRECTORY</ns0:Name> <ns0:ValueType>Text</ns0:ValueType> <ns0:Encrypted>false</ns0:Encrypted> <ns1:Type>Boolean</ns1:Type> <ns0:Text>true</ns0:Text> </ns0:PluginInput> </ns0:PluginInputs> <ns0:UserInputs/> <ns0:PluginOutputs/> <ns0:UserOutputs/> </ns0:InvokePlugin> </ns0:Step> <ns0:Step> <ns1:Name>Add any new Files</ns1:Name> <ns1:StepId>4</ns1:StepId> <ns0:InvokePlugin> <ns0:PluginName>FlexagonGITPlugin</ns0:PluginName> <ns0:PluginOperation>add</ns0:PluginOperation> <ns0:consumesArtifacts>false</ns0:consumesArtifacts> <ns0:producesArtifacts>false</ns0:producesArtifacts> <ns0:PluginInputs> <ns0:PluginInput> <ns0:Name>FDGIT_INP_INSTANCE_CODE</ns0:Name> <ns0:ValueType>Text</ns0:ValueType> <ns0:Encrypted>false</ns0:Encrypted> <ns1:Type>String</ns1:Type> <ns0:Text>GITDEMO</ns0:Text> </ns0:PluginInput> <ns0:PluginInput> <ns0:Name>FDGIT_INP_DEST_SUBFOLDER</ns0:Name> <ns0:ValueType>Text</ns0:ValueType> <ns0:Encrypted>false</ns0:Encrypted> <ns1:Type>String</ns1:Type> <ns0:Text>apexgitrepo</ns0:Text> </ns0:PluginInput> <ns0:PluginInput> <ns0:Name>FDGIT_INP_FILELIST</ns0:Name> <ns0:ValueType>Text</ns0:ValueType> <ns0:Encrypted>false</ns0:Encrypted> <ns1:Type>String</ns1:Type> <ns0:Text>--all .</ns0:Text> </ns0:PluginInput> </ns0:PluginInputs> <ns0:UserInputs/> <ns0:PluginOutputs/> <ns0:UserOutputs/> </ns0:InvokePlugin> </ns0:Step> <ns0:Step> <ns1:Name>Commit to Git</ns1:Name> <ns1:StepId>5</ns1:StepId> <ns0:InvokePlugin> <ns0:PluginName>FlexagonGITPlugin</ns0:PluginName> <ns0:PluginOperation>commit</ns0:PluginOperation> <ns0:consumesArtifacts>false</ns0:consumesArtifacts> <ns0:producesArtifacts>false</ns0:producesArtifacts> name: Export Apex Applications description: '' steps: - id: '1' name: exportAPEXApplications type: INVOKE_PLUGIN data: pluginName: FlexagonOracleAPEXPlugin pluginOperation: exportAPEXApplications endpointInstanceOverride: isExpression: false consumesArtifacts: false producesArtifacts: false endpointSelection: choice: All endpointExecution: choice: Any stopOnError: false inputs: - name: FDAPEX_INP_WORKSPACE_NAME value: isExpression: false isEncrypted: false - name: FDAPEX_INP_APPLICATION_NAME value: isExpression: false isEncrypted: false - name: FDAPEX_INP_EXPORT_FOLDER value: value: apexexport <ns0:PluginInputs> isExpression: false <ns0isEncrypted:PluginInput> false outputs: [] userInputs: [] userOutputs: [] <ns0:Name>FDGIT_INP_INSTANCE_CODE</ns0:Name> - id: '2' name: Git Clone type: INVOKE_PLUGIN data: <ns0:ValueType>Text</ns0:ValueType> pluginName: FlexagonGITPlugin pluginOperation: clone endpointInstanceOverride: <ns0isExpression:Encrypted>false</ns0:Encrypted> false consumesArtifacts: false producesArtifacts: false <ns1:Type>String</ns1:Type>endpointSelection: choice: All endpointExecution: <ns0choice:Text>GITDEMO</ns0:Text> Any stopOnError: false </ns0inputs:PluginInput> - name: FDGIT_INP_INSTANCE_CODE <ns0value:PluginInput> value: GITDEMO <ns0:Name>FDGIT_INP_DEST_SUBFOLDER</ns0:Name> isExpression: false isEncrypted: false - name: FDGIT_INP_DEST_SUBFOLDER <ns0:ValueType>Text</ns0:ValueType> value: value: apexgitrepo <ns0:Encrypted>false</ns0:Encrypted> isExpression: false isEncrypted: false - <ns1:Type>String</ns1name:Type> FDGIT_INP_BRANCH value: value: master <ns0:Text>apexgitrepo</ns0:Text> isExpression: false </ns0isEncrypted:PluginInput> false - name: FDGIT_INP_DEPTH <ns0value:PluginInput> value: '1' <ns0:Name>FDGIT_INP_NAME</ns0:Name> isExpression: false isEncrypted: false - <ns0:ValueType>Expression</ns0:ValueType>name: FDGIT_INP_SPARSE_CHECKOUT_FOLDERS value: value: APEXV2 <ns0:Encrypted>false</ns0:Encrypted> isExpression: false isEncrypted: false <ns1:Type>String</ns1:Type> outputs: [] userInputs: [] userOutputs: [] - id: '3' <ns0name:Value> Copy exported files to local Git repo type: INVOKE_PLUGIN data: <ns0:Expression>FD_WF_USER</ns0:Expression> pluginName: FlexagonFilePlugin pluginOperation: copy endpointInstanceOverride: </ns0isExpression:Value> false consumesArtifacts: false producesArtifacts: false </ns0:PluginInput> endpointSelection: choice: All endpointExecution: <ns0:PluginInput> choice: Any stopOnError: false <ns0:Name>FDGIT_INP_EMAIL</ns0:Name>inputs: - name: FDFILE_INP_FILE_FILTER value: <ns0:ValueType>Expression</ns0:ValueType> value: '*.sql' isExpression: false <ns0:Encrypted>false</ns0:Encrypted> isEncrypted: false - name: FDFILE_INP_FILE_FILTER_EXCLUDED <ns1value:Type>String</ns1:Type> isExpression: false isEncrypted: false <ns0:Value> - name: FDFILE_INP_SOURCE_PATH value: <ns0value:Expression>FD FD_WF_USER_EMAIL</ns0:Expression> TEMP_DIR + "/apexexport" isExpression: true </ns0isEncrypted:Value> false - name: FDFILE_INP_TARGET_PATH </ns0value:PluginInput> value: FD_TEMP_DIR + "/apexgitrepo/APEXV2" <ns0:PluginInput> isExpression: true isEncrypted: false - <ns0name:Name>FDGIT FDFILE_INP_REVISION_MESSAGE</ns0:Name>CLEAN_DIRECTORY value: value: 'true' <ns0:ValueType>Text</ns0:ValueType> isExpression: false isEncrypted: false outputs: [] userInputs: [] <ns0:Encrypted>false</ns0:Encrypted>userOutputs: [] - id: '4' name: Add any new Files type: INVOKE_PLUGIN data: <ns1pluginName:Type>String</ns1:Type> FlexagonGITPlugin pluginOperation: add endpointInstanceOverride: <ns0isExpression:Text>new apexfalse files</ns0:Text> consumesArtifacts: false producesArtifacts: false </ns0endpointSelection:PluginInput> choice: All </ns0endpointExecution:PluginInputs> choice: Any <ns0:UserInputs/> stopOnError: false inputs: - name: FDGIT_INP_INSTANCE_CODE <ns0:PluginOutputs/> value: <ns0:UserOutputs/> value: GITDEMO </ns0:InvokePlugin>isExpression: false </ns0isEncrypted:Step> false - <ns0:Step>name: FDGIT_INP_DEST_SUBFOLDER value: <ns1:Name>Push to Central Repository</ns1value:Name> apexgitrepo <ns1isExpression:StepId>6</ns1:StepId> false isEncrypted: false <ns0:InvokePlugin> - name: FDGIT_INP_FILELIST <ns0:PluginName>FlexagonGITPlugin</ns0:PluginName>value: value: --all . <ns0:PluginOperation>push</ns0:PluginOperation> isExpression: false <ns0isEncrypted:consumesArtifacts>false</ns0:consumesArtifacts> false outputs: [] <ns0:producesArtifacts>false</ns0:producesArtifacts> userInputs: [] userOutputs: [] - id: '5' <ns0name:PluginInputs> Commit to Git type: INVOKE_PLUGIN data: <ns0pluginName:PluginInput> FlexagonGITPlugin pluginOperation: commit endpointInstanceOverride: <ns0:Name>FDGIT_INP_INSTANCE_CODE</ns0:Name> isExpression: false consumesArtifacts: false producesArtifacts: false <ns0:ValueType>Text</ns0:ValueType>endpointSelection: choice: All endpointExecution: <ns0:Encrypted>false</ns0:Encrypted>choice: Any stopOnError: false inputs: - <ns1:Type>String</ns1name:Type> FDGIT_INP_INSTANCE_CODE value: <ns0:Text>GITDEMO</ns0:Text>value: GITDEMO isExpression: false </ns0isEncrypted:PluginInput> false - name: FDGIT_INP_DEST_SUBFOLDER <ns0value:PluginInput> value: apexgitrepo <ns0:Name>FDGIT_INP_DEST_SUBFOLDER</ns0:Name>isExpression: false isEncrypted: false - name: FDGIT_INP_NAME <ns0:ValueType>Text</ns0:ValueType>value: value: FD_WF_USER <ns0:Encrypted>false</ns0:Encrypted> isExpression: true isEncrypted: false - <ns1:Type>String</ns1:Type> name: FDGIT_INP_EMAIL value: value: <ns0:Text>apexgitrepo</ns0:Text>FD_WF_USER_EMAIL isExpression: true </ns0isEncrypted:PluginInput> false - name: FDGIT_INP_REVISION_MESSAGE <ns0:PluginInput> value: value: new apex files <ns0:Name>FDGIT_INP_BRANCH</ns0:Name> isExpression: false isEncrypted: false <ns0:ValueType>Text</ns0outputs:ValueType> [] userInputs: [] userOutputs: [] - id: '6' <ns0:Encrypted>false</ns0:Encrypted> name: Push to Central Repository type: INVOKE_PLUGIN data: pluginName: FlexagonGITPlugin <ns1:Type>String</ns1:Type> pluginOperation: push endpointInstanceOverride: isExpression: false <ns0consumesArtifacts:Text>master</ns0:Text> false producesArtifacts: false endpointSelection: </ns0:PluginInput> choice: All endpointExecution: <ns0choice:PluginInput> Any stopOnError: false inputs: - <ns0name:Name>FDGIT FDGIT_INP_FOLLOW_TAGS</ns0:Name>INSTANCE_CODE value: value: GITDEMO <ns0:ValueType>Text</ns0:ValueType> isExpression: false isEncrypted: false - <ns0name:Encrypted>false</ns0:Encrypted> FDGIT_INP_DEST_SUBFOLDER value: value: apexgitrepo <ns1:Type>Boolean</ns1:Type> isExpression: false isEncrypted: false <ns0:Text>false</ns0:Text> - name: FDGIT_INP_BRANCH value: </ns0:PluginInput> value: master </ns0:PluginInputs>isExpression: false isEncrypted: false - <ns0:UserInputs/>name: FDGIT_INP_FOLLOW_TAGS value: <ns0:PluginOutputs/>value: 'false' isExpression: false <ns0:UserOutputs/> isEncrypted: false </ns0:InvokePlugin>outputs: [] userInputs: [] </ns0:Step> </ns0userOutputs:Steps> </ns0:WorkFlow> [] |