UNPKG

devexpress-reporting

Version:

DevExpress Reporting provides the capability to develop a reporting application to create and customize reports.

217 lines (216 loc) 13.8 kB
/** * DevExpress HTML/JS Reporting (designer\tools\generator\_settings.js) * Version: 24.2.6 * Build date: Mar 18, 2025 * Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED * License: https://www.devexpress.com/Support/EULAs/universal.xml */ import { DxDeferred, extend } from '@devexpress/analytics-core/analytics-internal'; import { ModelSerializer } from '@devexpress/analytics-core/analytics-utils'; import { DataSourceType, _createDataSourceFullscreenWizard, _createDataSourceWizard, _createMultiQueryDataSourceWizard, _DataSourceWizardOptions, _MultiQueryDataSourceWizardOptions, _registerMultiQueryDataSourcePages } from '@devexpress/analytics-core/analytics-wizard'; import * as ko from 'knockout'; import { DataSourceActions } from '../../actions/_dataSourceActions'; import { FederationDataSourceEditor } from '../../actions/_federationDataSourceEditor'; import { JsonDataSourceEditor } from '../../actions/_jsonDataSourceEditor'; import { ObjectDataSourceEditor } from '../../actions/_objectDataSourceEditor'; import { SqlDataSourceEditor } from '../../actions/_sqlDataSourceEditor'; import { DataFederationDataSource } from '../../dataObjects/dataFederation'; import { collectAvailableParameters } from '../../dataObjects/metadata/_parameterUtils'; import { ObjectStorageItem } from '../../dataObjects/objectStorageItem'; import { FieldListDataSourcesHelper } from '../../internal/fieldlist/_fieldListDataSourcesHelper'; import { createReportViewModel } from '../../internal/_utils'; import { ReportDataSourceService } from '../../services/_reportDataSourceService'; import { ReportWizardService } from '../../services/_reportWizardService'; import { _ReportWizardOptions } from '../../wizard/internal/utils'; import { MasterDetailRequestModel } from '../../wizard/internal/_masterDetailRequestModel'; import { _registerReportWizardPages } from '../../wizard/reportWizard'; import { _createReportWizard } from '../../wizard/_reportWizardCreating'; import { OpenReportDialog } from '../dialogs/openReportDialog'; import { SaveAsReportDialog } from '../dialogs/saveAsReportDialog'; import { SaveReportDialog } from '../dialogs/saveReportDialog'; import { QBRequestWrapper } from './_qBRequestWrapper'; export class WizardsInitializerSettings { _doFinishCallback(data, connections) { if (data.predefinedDataSourceName) { this.dataSourceActionProvider.addPredifinedDataSource(data.predefinedDataSourceName); } else if (data.dataSourceType === DataSourceType.Sql) { return this.sqlDataSourceEditor.applySqlDataSourceWizardChanges(data); } else if (data.dataSourceType === DataSourceType.Federation) { return this.federationDataSourceEditor.applyFederationDataSourceWizardChanges(data); } else if (data.dataSourceType === DataSourceType.Json) { const deferred = new DxDeferred(); if (data.jsonDataSourceWizard.jsonSource && data.jsonDataSourceWizard.newConnectionName) { this.jsonDataSourceEditor.saveJsonSource(data, connections). done((result) => { deferred.resolve(result); }) .fail(() => deferred.reject()); } else { this.jsonDataSourceEditor.applyDataSourceWizardChanges(data) .done((result) => { deferred.resolve(result); }) .fail(() => deferred.reject()); } return deferred.promise(); } else if (data.dataSourceType === DataSourceType.Object) { const deferred = new DxDeferred(); this.objectDataSourceEditor.applyDataSourceWizardChanges(data) .done((result) => { deferred.resolve(result); }) .fail(() => deferred.reject()); } return new DxDeferred().resolve(null).promise(); } _getParameters(model) { if (model && model()) { return collectAvailableParameters(model().parameters()).map((x) => { const obj = new ModelSerializer().serialize(x); return { name: obj['@Name'], value: obj['@ValueInfo'], type: x.type() }; }); } return []; } _getItemsProviderCallBack(itemsProvider) { if (itemsProvider) return itemsProvider; return null; } createSqlDataSourceWizard(disableCustomSql, itemsProvider, model) { this.dataSourceWizardOptions.callbacks = { selectStatement: (connection, queryJSON) => QBRequestWrapper().getSelectStatement(connection, queryJSON), finishCallback: data => this._doFinishCallback(data, this.dataSourceWizardOptions.connectionStrings), customizeQBInitData: (data) => { data.parametersItemsProvider = itemsProvider; data.requestWrapper = QBRequestWrapper(); return data; }, getParameters: () => this._getParameters(model), getItemsProviderCallback: () => this._getItemsProviderCallBack(itemsProvider()) }; this.dataSourceWizardOptions.disableCustomSql = disableCustomSql; this.dataSourceWizard = _createDataSourceWizard(undefined, this.dataSourceWizardOptions); return this.dataSourceWizard; } createSqlDataSourceEditor(settings) { this.federationDataSourceEditor = new FederationDataSourceEditor(settings.dataSourceHelper, settings.dataSourceWizard, settings.model, settings.undoEngine, settings.fieldListProvider, this.multipleQueriesWizardCallbacks, settings.rtl); this.sqlDataSourceEditor = new SqlDataSourceEditor(settings.dataSourceHelper, settings.dataSourceWizard, settings.model, settings.undoEngine, settings.fieldListProvider, this.multipleQueriesWizardCallbacks); this.jsonDataSourceEditor = new JsonDataSourceEditor(settings.dataSourceHelper, settings.dataSourceWizard, settings.model, settings.undoEngine, settings.fieldListProvider); this.objectDataSourceEditor = new ObjectDataSourceEditor(settings.dataSourceHelper, settings.dataSourceWizard, settings.model, settings.undoEngine, settings.fieldListProvider); this.dataSourceActionProvider = new DataSourceActions(settings.dataSourceHelper, settings.model, settings.undoEngine, settings.allowEditDataSource, settings.allowRemoveDataSource, settings.fieldListProvider); } createMultipleQueriesWizardCallbacks(itemsProvider, model, state) { const helper = new FieldListDataSourcesHelper(); const fieldsCallback = (request, dataSource, useCache) => { return helper.wrapFieldsCallback(this.callbacks.fieldLists, state, ko.observableArray(dataSource ? [dataSource] : this.multiQueryWizardOptions.dataSources()), useCache ?? true)(request); }; this.multipleQueriesWizardCallbacks = { selectStatement: (connection, queryJSON) => QBRequestWrapper().getSelectStatement(connection, queryJSON), sqlDataSourceResultSchema: (dataSource) => QBRequestWrapper().rebuildResultSchema(dataSource), federationDataSourceResultSchema: (dataSource) => QBRequestWrapper().getFederationResultSchema(dataSource), finishCallback: data => this._doFinishCallback(data, this.multiQueryWizardOptions.connectionStrings), customQueriesPreset: ReportDataSourceService.getCustomQueriesPreset, customizeQBInitData: (data) => { data.parametersItemsProvider = itemsProvider; data.requestWrapper = QBRequestWrapper(); return data; }, getParameters: () => this._getParameters(model), getItemsProviderCallback: () => this._getItemsProviderCallBack(itemsProvider()), fieldListsCallback: fieldsCallback }; } createMultiQueryDataSourceWizard(disableCustomSql, multipleQueriesWizardCallbacks = this.multipleQueriesWizardCallbacks, allowCreateNewJsonConnection = false) { this.multiQueryWizardOptions.callbacks = multipleQueriesWizardCallbacks; this.multiQueryWizardOptions.allowCreateNewJsonConnection = allowCreateNewJsonConnection; this.multiQueryWizardOptions.disableCustomSql = disableCustomSql; this.multiQueryWizardOptions.getSqlConnectionStrings = () => ReportDataSourceService.getWizardSqlDataConnections(); this.multiQueryWizardOptions.getJsonConnectionStrings = () => ReportDataSourceService.getWizardJsonDataConnections(); this.registerMultiQueryDataSourceWizardPages = (factory) => { _registerMultiQueryDataSourcePages(factory, this.multiQueryWizardOptions); }; if (this.reportWizardOptions.wizardSettings.useFullscreenWizard) { this.multiQueryDataSourceWizard = _createDataSourceFullscreenWizard(this.multiQueryWizardOptions); } else this.multiQueryDataSourceWizard = _createMultiQueryDataSourceWizard(undefined, this.multiQueryWizardOptions); } createReportWizard(settings) { this.reportWizardOptions.searchBoxVisibilityMode = settings.data.wizardSettings.reportWizardTemplatesSearchBoxVisibility; this.reportWizardOptions.reportTemplates = settings.data.reportWizardTemplates; this.reportWizardOptions.allowCreateNewJsonConnection = settings.data.allowCreateNewJsonConnection; this.reportWizardOptions.hideDataMemberSubItems = settings.data.isReportServer; this.reportWizardOptions.disableCustomSql = settings.data.disableCustomSql; this.reportWizardOptions.dataSources = ko.pureComputed(() => { let result; if (!settings.dataSourceHelper()) { result = (settings.data.availableDataSources || []).map(object => { return extend({}, object, { data: new ObjectStorageItem(object.data) }); }); } if (!result) { result = settings.data.isReportServer ? settings.dataSourceHelper().availableDataSources : settings.dataSourceHelper().mergedDataSources(); } return result.filter(object => !(object.data instanceof DataFederationDataSource) && !object.hasErrors); }); this.reportWizardOptions.callbacks = extend({}, this.multipleQueriesWizardCallbacks, { createSqlDataSourceInfo: SqlDataSourceEditor.createSqlDataSourceInfo, createJsonDataSourceInfo: JsonDataSourceEditor.createJsonDataSourceInfo, getItemsProviderCallback: () => this._getItemsProviderCallBack(this.reportWizard.itemsProvider()), finishCallback: (reportWizardModel) => { settings.isLoading(true); const deferred = new DxDeferred(); ReportWizardService.generateReportFromWizardState(reportWizardModel, MasterDetailRequestModel, settings.state(), (wizardModel) => { this.reportWizard.events.call('beforeFinish', { state: settings.state(), wizardModel: wizardModel }); }) .done((result) => { settings.navigation.currentTab().undoEngine.start(); settings.isDirty(true); const newReport = createReportViewModel(result, settings.navigation.currentTab().context().report); settings.navigation.currentTab().changeContext(newReport, ''); settings.navigation.currentTab.notifySubscribers(); settings.navigation.currentTab().undoEngine.end(); settings.isLoading(false); deferred.resolve(newReport); }) .fail(() => { deferred.reject(); }); return deferred.promise(); } }); this.registerReportWizardPages = (factory) => { _registerReportWizardPages(factory, this.reportWizardOptions); }; this.reportWizard = _createReportWizard(this.reportWizardOptions); } constructor(connectionStrings, wizardSettings, callbacks, rtl, dataSources, predefinedDataSources) { this.callbacks = callbacks; this.reportWizardOptions = new _ReportWizardOptions(); this.multiQueryWizardOptions = new _MultiQueryDataSourceWizardOptions(); this.dataSourceWizardOptions = new _DataSourceWizardOptions(); [this.reportWizardOptions, this.multiQueryWizardOptions, this.dataSourceWizardOptions].forEach((wizardOptions) => { wizardOptions.connectionStrings = connectionStrings; wizardOptions.wizardSettings = wizardSettings; wizardOptions.requestWrapper = QBRequestWrapper(); wizardOptions.rtl = rtl; wizardOptions.dataSources = dataSources; wizardOptions.predefinedDataSources = predefinedDataSources; }); } } export class ReportDialogSettings { constructor(_designerCallbacks) { this._designerCallbacks = _designerCallbacks; } createSaveReportDialog(reportUrls) { this.saveReportDialog = new SaveAsReportDialog(reportUrls, this._designerCallbacks); this._designerCallbacks.customizeSaveAsDialog && this._designerCallbacks.customizeSaveAsDialog(this.saveReportDialog); } createSaveReportDialogLight(saveReportDialog = this.saveReportDialog) { this.saveReportDialogLight = new SaveReportDialog(saveReportDialog, this._designerCallbacks); this._designerCallbacks.customizeSaveDialog && this._designerCallbacks.customizeSaveDialog(this.saveReportDialogLight); } createOpenReportDialog(reportUrls, navigation) { this.openReportDialog = new OpenReportDialog(reportUrls, navigation, this._designerCallbacks); this._designerCallbacks.customizeOpenDialog && this._designerCallbacks.customizeOpenDialog(this.openReportDialog); } }