diff --git a/components/resources/resources-dashboard/src/main/resources/META-INF/dirigible/dashboard/services/entity.js b/components/resources/resources-dashboard/src/main/resources/META-INF/dirigible/dashboard/services/entity.js
index 5271300a000..a68764bd049 100644
--- a/components/resources/resources-dashboard/src/main/resources/META-INF/dirigible/dashboard/services/entity.js
+++ b/components/resources/resources-dashboard/src/main/resources/META-INF/dirigible/dashboard/services/entity.js
@@ -60,6 +60,11 @@ angular.module('EntityService', []).provider('EntityService', function EntitySer
const body = JSON.stringify(entity);
return $http.post(url, body);
}.bind(this);
+
+ const exportCsv = function () {
+ const url = `${this.baseUrl}/export`;
+ return $http.post(url);
+ }.bind(this);
const create = function (entity) {
const url = this.baseUrl;
@@ -86,6 +91,7 @@ angular.module('EntityService', []).provider('EntityService', function EntitySer
create: create,
update: update,
'delete': deleteEntity,
+ exportCsv: exportCsv,
};
}];
});
\ No newline at end of file
diff --git a/components/template/template-application-dao-v2/src/main/resources/META-INF/dirigible/template-application-dao-v2/data/reportFileEntity.ts.template b/components/template/template-application-dao-v2/src/main/resources/META-INF/dirigible/template-application-dao-v2/data/reportFileEntity.ts.template
index 44953fa78b2..0043d3656ec 100644
--- a/components/template/template-application-dao-v2/src/main/resources/META-INF/dirigible/template-application-dao-v2/data/reportFileEntity.ts.template
+++ b/components/template/template-application-dao-v2/src/main/resources/META-INF/dirigible/template-application-dao-v2/data/reportFileEntity.ts.template
@@ -67,5 +67,24 @@ export class ${name}Repository {
return Query.executeNamed(sql, parameters, this.datasourceName)[0].REPORT_COUNT;
}
+
+ public exportCsv() {
+ const sql = `
+#foreach($queryLine in $queryLines)
+ ${queryLine}
+#end
+ `;
+
+ const parameters: NamedQueryParameter[] = [];
+#foreach($parameter in $parameters)
+ parameters.push({
+ name: `${parameter.name}`,
+ type: `${parameter.type}`,
+ value: filter['${parameter.name}'] !== undefined ? #if($parameter.typeTypescript == 'string' && $parameter.isLikeCondition) `%${dollar}{filter['${parameter.name}']}%`#else filter['${parameter.name}']#end : `${parameter.initial}`
+ });
+#end
+
+ return Query.exportCsv(sql, parameters, this.datasourceName, '${name}');
+ }
}
diff --git a/components/template/template-application-dao/src/main/resources/META-INF/dirigible/template-application-dao/dao/reportFileEntity.ts.template b/components/template/template-application-dao/src/main/resources/META-INF/dirigible/template-application-dao/dao/reportFileEntity.ts.template
index 44953fa78b2..0043d3656ec 100644
--- a/components/template/template-application-dao/src/main/resources/META-INF/dirigible/template-application-dao/dao/reportFileEntity.ts.template
+++ b/components/template/template-application-dao/src/main/resources/META-INF/dirigible/template-application-dao/dao/reportFileEntity.ts.template
@@ -67,5 +67,24 @@ export class ${name}Repository {
return Query.executeNamed(sql, parameters, this.datasourceName)[0].REPORT_COUNT;
}
+
+ public exportCsv() {
+ const sql = `
+#foreach($queryLine in $queryLines)
+ ${queryLine}
+#end
+ `;
+
+ const parameters: NamedQueryParameter[] = [];
+#foreach($parameter in $parameters)
+ parameters.push({
+ name: `${parameter.name}`,
+ type: `${parameter.type}`,
+ value: filter['${parameter.name}'] !== undefined ? #if($parameter.typeTypescript == 'string' && $parameter.isLikeCondition) `%${dollar}{filter['${parameter.name}']}%`#else filter['${parameter.name}']#end : `${parameter.initial}`
+ });
+#end
+
+ return Query.exportCsv(sql, parameters, this.datasourceName, '${name}');
+ }
}
diff --git a/components/template/template-application-rest-v2/src/main/resources/META-INF/dirigible/template-application-rest-v2/api/reportFileEntity.ts.template b/components/template/template-application-rest-v2/src/main/resources/META-INF/dirigible/template-application-rest-v2/api/reportFileEntity.ts.template
index 08363730d90..07493cb13db 100644
--- a/components/template/template-application-rest-v2/src/main/resources/META-INF/dirigible/template-application-rest-v2/api/reportFileEntity.ts.template
+++ b/components/template/template-application-rest-v2/src/main/resources/META-INF/dirigible/template-application-rest-v2/api/reportFileEntity.ts.template
@@ -109,6 +109,23 @@ class ${name}Service {
this.handleError(error);
}
}
+
+ @Post("/export")
+ public exportCsv() {
+ try {
+#if($perspectiveRole || $security.roleRead)
+ this.checkPermissions("read");
+
+#end
+#if($isEntityPropertySecurityEnabled)
+ return this.repository.exportCsv().map(e => this.transformEntity("read", e));
+#else
+ return this.repository.exportCsv();
+#end
+ } catch (error: any) {
+ this.handleError(error);
+ }
+ }
private handleError(error: any) {
if (error.name === "ForbiddenError") {
diff --git a/components/template/template-application-rest/src/main/resources/META-INF/dirigible/template-application-rest/api/reportFileEntity.ts.template b/components/template/template-application-rest/src/main/resources/META-INF/dirigible/template-application-rest/api/reportFileEntity.ts.template
index 9a6d1a45b64..3b5eb49d17b 100644
--- a/components/template/template-application-rest/src/main/resources/META-INF/dirigible/template-application-rest/api/reportFileEntity.ts.template
+++ b/components/template/template-application-rest/src/main/resources/META-INF/dirigible/template-application-rest/api/reportFileEntity.ts.template
@@ -106,6 +106,23 @@ class ${name}Service {
this.handleError(error);
}
}
+
+ @Post("/export")
+ public exportCsv() {
+ try {
+#if($perspectiveRole || $security.roleRead)
+ this.checkPermissions("read");
+
+#end
+#if($isEntityPropertySecurityEnabled)
+ return this.repository.exportCsv().map(e => this.transformEntity("read", e));
+#else
+ return this.repository.exportCsv();
+#end
+ } catch (error: any) {
+ this.handleError(error);
+ }
+ }
private handleError(error: any) {
if (error.name === "ForbiddenError") {
diff --git a/components/template/template-application-ui-angular-v2/src/main/resources/META-INF/dirigible/template-application-ui-angular-v2/ui/perspective/report-file/controller.js.template b/components/template/template-application-ui-angular-v2/src/main/resources/META-INF/dirigible/template-application-ui-angular-v2/ui/perspective/report-file/controller.js.template
index 01129cda521..9fb4640db88 100644
--- a/components/template/template-application-ui-angular-v2/src/main/resources/META-INF/dirigible/template-application-ui-angular-v2/ui/perspective/report-file/controller.js.template
+++ b/components/template/template-application-ui-angular-v2/src/main/resources/META-INF/dirigible/template-application-ui-angular-v2/ui/perspective/report-file/controller.js.template
@@ -5,9 +5,17 @@ angular.module('page', ['blimpKit', 'platformView', 'platformLocale', 'EntitySer
}])
.controller('PageController', (${dollar}scope, EntityService, LocaleService, Extensions) => {
const Dialogs = new DialogHub();
+ const exportsHub = new ExportsHub();
$scope.dataPage = 1;
$scope.dataCount = 0;
$scope.dataLimit = 20;
+
+ $scope.triggerExportAction = () => {
+ let request = EntityService.exportCsv();
+ request.then(() => {
+ exportsHub.refresh();
+ });
+ }
//-----------------Custom Actions-------------------//
Extensions.getWindows(['${projectName}-custom-action']).then((response) => {
diff --git a/components/template/template-application-ui-angular-v2/src/main/resources/META-INF/dirigible/template-application-ui-angular-v2/ui/perspective/report-file/index.html.template b/components/template/template-application-ui-angular-v2/src/main/resources/META-INF/dirigible/template-application-ui-angular-v2/ui/perspective/report-file/index.html.template
index 3c96643e5b4..c7fa8570c34 100644
--- a/components/template/template-application-ui-angular-v2/src/main/resources/META-INF/dirigible/template-application-ui-angular-v2/ui/perspective/report-file/index.html.template
+++ b/components/template/template-application-ui-angular-v2/src/main/resources/META-INF/dirigible/template-application-ui-angular-v2/ui/perspective/report-file/index.html.template
@@ -18,6 +18,7 @@
#if($parameters && $parameters.size() > 0)
#end
+
diff --git a/components/template/template-application-ui-angular-v2/src/main/resources/META-INF/dirigible/template-application-ui-angular-v2/ui/translations-report.json.template b/components/template/template-application-ui-angular-v2/src/main/resources/META-INF/dirigible/template-application-ui-angular-v2/ui/translations-report.json.template
index d5827e6e878..9c057188f27 100644
--- a/components/template/template-application-ui-angular-v2/src/main/resources/META-INF/dirigible/template-application-ui-angular-v2/ui/translations-report.json.template
+++ b/components/template/template-application-ui-angular-v2/src/main/resources/META-INF/dirigible/template-application-ui-angular-v2/ui/translations-report.json.template
@@ -22,7 +22,8 @@
"formHeadSelect": "{{name}} Details",
"reportTitle": "{{name}} Report",
"reportFilter": "Report Filter",
- "viewDetails": "View Details"
+ "viewDetails": "View Details",
+ "export": "Export"
},
"extName": "{{content}}",
"t": {}