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": {}