Joget DX 8 Stable Released
The stable release for Joget DX 8 is now available, with a focus on UX and Governance.
Table of Contents |
---|
Exporting an app programmatically can be done by invoking the function appService.exportApp() manually in the beanshell script. We will be using a BeanShell tool inside a process that we can trigger as needed.
Create a new process in the process builder and build it in such a way as seen in Figure 1. Paste the provided script into the tool.
Figure 1: The process
Drag a Run Process UI element in the UI Builder and have it point to the process created in Step 1.
Figure 2: Run Process Element that points to Process 1
Note |
---|
** Do note that the variable "path" in the code is contextual to your preference/environment and needs to be changed to suit your requirements. ** You will also need to either/or
|
Code Block |
---|
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.sql.DataSource;
import org.joget.apps.app.service.AppUtil;
import org.joget.apps.app.service.AppService;
import org.joget.apps.app.model.AppDefinition;
import org.joget.commons.util.LogUtil;
import java.text.SimpleDateFormat;
import java.io.File;
import org.joget.commons.util.FileManager;
// prepare the connection & appservice instance
Connection con = null;
AppService appService = (AppService) AppUtil.getApplicationContext().getBean("appService");
// prepare the filename common
// ensure the path and folder declared exists
String path = "wflow/jwa_backups/";
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
String timestamp = sdf.format(new Date());
try {
// retrieve connection from the default datasource
DataSource ds = (DataSource)AppUtil.getApplicationContext().getBean("setupDataSource");
con = ds.getConnection();
if(!con.isClosed()) {
// query the currently published app from db
PreparedStatement stmt = con.prepareStatement("select appId as id, appVersion as version from app_app where published = 1");
ResultSet rs = stmt.executeQuery();
// loop through each eligible apps
while (rs.next()) {
AppDefinition appDef = appService.getAppDefinition(rs.getObject("id"), Long.toString(rs.getObject("version")));
// complete the filename for each app
String filename = "APP_" + appDef.getId() + "-" + appDef.getVersion() + "-" + timestamp + ".jwa";
// create the file
File test = new File(path+filename);
// move the data to the created file above
FileOutputStream fos = null;
fos = new FileOutputStream(test);
appService.exportApp(appDef.getId(), appDef.getVersion().toString(), fos);
}
}
} catch(Exception e) {
LogUtil.error("error", e, "test");
} finally {
//always close the connection after used
try {
if(con != null) {
con.close();
}
} catch(SQLException e) {/* ignored */}
} |
For this example, all app files will be saved into /wflow/jwa_backup folder (Make sure the jwa_backup folder has been created)
Example Execution
Figure 3: Example Execution
Before
Figure 4: Result Before
After
Figure 5: Result After
View file | ||||
---|---|---|---|---|
|