devexpress-reporting
Version:
DevExpress Reporting provides the capability to develop a reporting application to create and customize reports.
244 lines (243 loc) • 12.8 kB
JavaScript
/**
* DevExpress HTML/JS Reporting (designer\actions\_sqlDataSourceEditor.js)
* Version: 20.2.13
* Build date: Apr 10, 2023
* Copyright (c) 2012 - 2023 Developer Express Inc. ALL RIGHTS RESERVED
* License: https://www.devexpress.com/Support/EULAs/universal.xml
*/
;
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
var settings_1 = require("../utils/settings");
var _dataUtils_1 = require("../internal/_dataUtils");
var _reportDataSourceService_1 = require("../services/_reportDataSourceService");
var analytics_internal_1 = require("@devexpress/analytics-core/analytics-internal");
var analytics_wizard_1 = require("@devexpress/analytics-core/analytics-wizard");
var analytics_utils_1 = require("@devexpress/analytics-core/analytics-utils");
var analytics_data_1 = require("@devexpress/analytics-core/analytics-data");
var ko = require("knockout");
var $ = require("jquery");
var queryBuilder_widgets_internal_1 = require("@devexpress/analytics-core/queryBuilder-widgets-internal");
var _qBRequestWrapper_1 = require("../tools/generator/_qBRequestWrapper");
var DataSourceEditorBase = (function () {
function DataSourceEditorBase(_dsHelper, _wizard, _reportViewModel, _undoEngine, _itemsProvider) {
this._dsHelper = _dsHelper;
this._wizard = _wizard;
this._reportViewModel = _reportViewModel;
this._undoEngine = _undoEngine;
this._itemsProvider = _itemsProvider;
}
DataSourceEditorBase.prototype._findDataSource = function (dataSourceID) {
return this._dsHelper().usedDataSources().filter(function (item) {
return item.id === dataSourceID || item.ref === dataSourceID;
})[0];
};
DataSourceEditorBase._onFail = function (result, deferred) {
if (analytics_internal_1.getErrorMessage(result))
analytics_internal_1.ShowMessage(analytics_internal_1.getErrorMessage(result));
deferred.reject(result);
};
return DataSourceEditorBase;
}());
exports.DataSourceEditorBase = DataSourceEditorBase;
var CreateQueryIterator = (function (_super) {
__extends(CreateQueryIterator, _super);
function CreateQueryIterator() {
return _super !== null && _super.apply(this, arguments) || this;
}
CreateQueryIterator.prototype.getNextPageId = function (pageId) {
if (!pageId) {
return analytics_wizard_1.SqlDataSourceWizardPageId.ConfigureQueryPage;
}
return _super.prototype.getNextPageId.call(this, pageId);
};
return CreateQueryIterator;
}(analytics_wizard_1.DataSourceWizardPageIterator));
exports.CreateQueryIterator = CreateQueryIterator;
var SqlDataSourceEditor = (function (_super) {
__extends(SqlDataSourceEditor, _super);
function SqlDataSourceEditor() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.relationsEditor = ko.observable();
_this.addAction = {
clickAction: function (item) {
_this.addSqlQuery(item.data.name);
},
imageClassName: 'dxrd-image-add-query',
imageTemplateName: 'dxrd-svg-operations-add_query',
text: analytics_utils_1.getLocalization('Add query', 'AnalyticsCoreStringId.SqlDSWizard_AddQuery')
};
_this.editAction = {
clickAction: function (item) {
_this.editSqlQuery(new analytics_utils_1.PathRequest(item.path).id, item.name);
},
position: 0,
imageClassName: 'dx-image-edit',
imageTemplateName: 'dxrd-svg-operations-edit',
text: analytics_utils_1.getLocalization('Edit query', 'AnalyticsCoreStringId.SqlDSWizard_EditQuery')
};
_this.removeAction = {
clickAction: function (item) {
_this.removeSqlQuery(new analytics_utils_1.PathRequest(item.path).id, item.name);
},
position: 50,
imageClassName: 'dxrd-image-recycle-bin',
imageTemplateName: 'dxrd-svg-operations-recycle_bin',
text: analytics_utils_1.getLocalization('Remove query', 'AnalyticsCoreStringId.SqlDSWizard_RemoveQuery')
};
_this.editRelationsAction = {
clickAction: function (item) {
_this.editMasterDetailRelations(item.data.name);
},
position: 0,
imageClassName: 'dx-image-edit',
imageTemplateName: 'dxrd-svg-operations-edit',
text: analytics_utils_1.getLocalization('Edit Master-Detail Relations', 'ASPxReportsStringId.ReportDesigner_FieldListActions_EditMasterDetailRelations')
};
return _this;
}
SqlDataSourceEditor.prototype._applyWizardChanges = function (dataSource, sqlDataSource, queryName, relationsEditing) {
return this._applyDataSourceChange(sqlDataSource, dataSource, queryName, relationsEditing);
};
SqlDataSourceEditor.prototype._createOrEditSqlDataSource = function (requestJson, dataSource, requestName) {
var _this = this;
return analytics_internal_1.ajax(settings_1.HandlerUri(), requestName, encodeURIComponent(requestJson))
.done(function (result) {
result.dataSource.data = JSON.parse(result.dataSource.data);
result.dataSource.isSqlDataSource = true;
if (dataSource) {
dataSource.data['base64'](result.dataSource.data['@Base64']);
}
else {
_dataUtils_1.addDataSourceToReport(_this._dsHelper(), _this._reportViewModel(), _this._undoEngine(), _this._itemsProvider(), result.dataSource);
}
})
.fail(function (result) {
if (analytics_internal_1.getErrorMessage(result))
analytics_internal_1.ShowMessage(analytics_internal_1.getErrorMessage(result));
});
};
SqlDataSourceEditor.prototype._applyDataSourceChange = function (source, dest, queryName, relationsEditing) {
var _this = this;
return SqlDataSourceEditor.createSqlDataSourceInfo(source, queryName, relationsEditing)
.done(function (result) {
if (dest) {
dest.data['base64'](result.base64());
}
else {
_dataUtils_1.addDataSourceToReport(_this._dsHelper(), _this._reportViewModel(), _this._undoEngine(), _this._itemsProvider(), result);
}
});
};
SqlDataSourceEditor.prototype.editSqlQuery = function (dataSourceID, queryName) {
var _this = this;
var dataSourceInfo = this._findDataSource(dataSourceID);
_reportDataSourceService_1.ReportDataSourceService.sqlDataSourceFromBase64(dataSourceInfo.data['base64']()).done(function (result) {
var sqlDataSource = new analytics_data_1.SqlDataSource(JSON.parse(result.sqlDataSourceJSON), undefined, _qBRequestWrapper_1.QBRequestWrapper());
sqlDataSource.name(dataSourceInfo.name);
_this._wizard.initialize({
dataSourceType: analytics_wizard_1.DataSourceType.Sql,
sqlDataSourceWizard: {
name: sqlDataSource.connection.name(),
queryName: queryName,
sqlDataSourceJSON: JSON.stringify(new analytics_utils_1.ModelSerializer().serialize(sqlDataSource))
}
}, function (factory, stateManager) { return new CreateQueryIterator(factory, stateManager, _this._wizard['_wizardOptions']); });
_this._wizard.start();
_this._wizard.isVisible(true);
});
};
SqlDataSourceEditor.prototype.addSqlQuery = function (dataSourceID) {
this.editSqlQuery(dataSourceID, null);
};
SqlDataSourceEditor.prototype.removeSqlQuery = function (dataSourceID, queryName) {
var _this = this;
var dataSourceInfo = this._findDataSource(dataSourceID);
_reportDataSourceService_1.ReportDataSourceService.sqlDataSourceFromBase64(dataSourceInfo.data['base64']()).done(function (result) {
var sqlDataSource = new analytics_data_1.SqlDataSource(JSON.parse(result.sqlDataSourceJSON));
sqlDataSource.queries.remove(function (x) { return x.name() === queryName; });
_this._applyWizardChanges(dataSourceInfo, sqlDataSource, queryName);
});
};
SqlDataSourceEditor.prototype.editMasterDetailRelations = function (dataSourceID) {
var _this = this;
var dataSourceInfo = this._findDataSource(dataSourceID);
_reportDataSourceService_1.ReportDataSourceService.sqlDataSourceFromBase64(dataSourceInfo.data['base64']()).done(function (result) {
var sqlDataSource = new analytics_data_1.SqlDataSource(JSON.parse(result.sqlDataSourceJSON));
if (sqlDataSource.queries().length < 2) {
analytics_internal_1.ShowMessage(analytics_utils_1.getLocalization('At least two queries are required to create a master-detail relation.', 'DataAccessUIStringId.MessageLessThanTwoQueries'), 'warning', 10000);
return;
}
_this.relationsEditor(new queryBuilder_widgets_internal_1.MasterDetailEditor(sqlDataSource.relations, sqlDataSource.resultSet, function () {
return _this._applyWizardChanges(dataSourceInfo, sqlDataSource, '', true);
}));
_this.relationsEditor().popupVisible(true);
});
};
SqlDataSourceEditor.prototype.applySqlDataSourceWizardChanges = function (dataSourceWizardModel) {
var dataSourceWrapped = analytics_wizard_1._restoreSqlDataSourceFromState(dataSourceWizardModel.sqlDataSourceWizard, _qBRequestWrapper_1.QBRequestWrapper(), dataSourceWizardModel.dataSourceId);
var dataSource = this._dsHelper().findDataSourceInfoByName(dataSourceWrapped.sqlDataSource.name());
return this._applyDataSourceChange(dataSourceWrapped.sqlDataSource, dataSource, dataSourceWrapped.sqlQuery && dataSourceWrapped.sqlQuery.name());
};
SqlDataSourceEditor.createSqlDataSourceInfo = function (source, queryName, relationsEditing) {
var deferred = $.Deferred();
_qBRequestWrapper_1.QBRequestWrapper().rebuildResultSchema(source, queryName, relationsEditing)
.done(function (result) {
var model = JSON.parse(result.resultSchemaJSON);
source.resultSet = !!model ? new analytics_data_1.ResultSet(model) : null;
if (!!result.connectionParameters) {
source.connection.parameteres((function (x) { try {
return JSON.parse(x)['Parameters'] || x;
}
catch (_) {
return x;
} })(result.connectionParameters));
source.connection.fromAppConfig(false);
}
_reportDataSourceService_1.ReportDataSourceService.getSqlDataSourceBase64(source)
.done(function (result) {
deferred.resolve({
name: 'sqlDataSource',
id: source.id,
data: {
'@ObjectType': 'DevExpress.DataAccess.Sql.SqlDataSource',
'@Base64': result
},
isSqlDataSource: true,
base64: function () { return result; }
});
})
.fail(function (result) { SqlDataSourceEditor._onFail(result, deferred); });
})
.fail(function (result) { SqlDataSourceEditor._onFail(result, deferred); });
return deferred.promise();
};
SqlDataSourceEditor.prototype.getActions = function (context) {
var result = [];
if (!context.data)
return result;
if (context.data['canAddSqlQuery'] === true) {
result.push(this.addAction);
result.push(this.editRelationsAction);
}
if (context.data['canEditQuery'] === true) {
result.push(this.editAction);
result.push(this.removeAction);
}
return result;
};
return SqlDataSourceEditor;
}(DataSourceEditorBase));
exports.SqlDataSourceEditor = SqlDataSourceEditor;