Saiku更改導出文件的文件名

Saiku查询完数据之后,可以以excel,pdf,csv等格式将数据导出,这里我们来讲一下怎么更改导出的文件名。

 

找到对应的导出方法所在的js文件: saiku-server\tomcat\webapps\ROOT\js\saiku\views\WorkspaceToolbar.js

这里分别有三个方法导出不同形式的文件:

export_xls

export_csv

export_pdf

 

我们主要更改里面的filename即可啦!

可以自定义filename,我这里是需要将入参中的日期纳入文件名中,所以我的更改后的export_xls方法如下:(其余两种形式的导出方法也类似)

export_xls: function(event) {
  if(this.workspace.query.name!=undefined){
	var filename = this.workspace.query.name.substring(this.workspace.query.name.lastIndexOf('/')+1).slice(0, -5);
	var paramsURI = Saiku.URLParams.paramsURI(); //get the param from url
	if(paramsURI.startdate != null && paramsURI.startdate != undefined && paramsURI.enddate != null && paramsURI.enddate != undefined){
		var datename = (paramsURI.startdate).substring(-1,10).replace(/-/g,'') +"-"+ (paramsURI.enddate).substring(-1,10).replace(/-/g,'');//获取参数中的日期
		filename = filename.replace('.','') + datename + ".";//将参数中的日期添加到的文件名中
	}
	window.location = Settings.REST_URL +
	this.workspace.query.url() + "/export/xls/" + this.workspace.query.getProperty('saiku.olap.result.formatter')+"?exportname=" + "\"" + encodeURIComponent(filename)+"xls" + "\"";
  }
  else{
	window.location = Settings.REST_URL +
	this.workspace.query.url() + "/export/xls/" + this.workspace.query.getProperty('saiku.olap.result.formatter');
   }

},

 

需要注意的是我这里更改后的文件名与我的入参有关,主要是因为我这边是将saiku嵌入公司系统使用的,所以用到日期参数。

请求URl如下:(请求中携带入参 startdate与enddate)

http://10.22.33.44:8080/?username=test&password=111&startdate=2019-03-06&enddate=2019-03-18&plugin=false&mode=view#query/open//KPII/bb.saiku

 

最后这里给出修改后完整的WorkspaceToolbar.js文件

/*
 *   Copyright 2012 OSBI Ltd
 *
 *   Licensed under the Apache License, Version 2.0 (the "License");
 *   you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 */

/**
 * The workspace toolbar, and associated actions
 */
var WorkspaceToolbar = Backbone.View.extend({
    enabled: false,
    events: {
        'click a': 'call'
    },

    initialize: function(args) {
        // Keep track of parent workspace
        this.workspace = args.workspace;

        // Maintain `this` in callbacks
        _.bindAll(this, "call", "reflect_properties", "run_query",
            "swap_axes_on_dropzones", "display_drillthrough","clicked_cell_drillthrough_export",
			"clicked_cell_drillacross","clicked_cell_drillthrough","activate_buttons", "switch_to_mdx","post_mdx_transform", "toggle_fields_action", "group_parents");
        this.workspace.bind('workspace:toolbar:render', this.translate);

        // Redraw the toolbar to reflect properties
        this.workspace.bind('properties:loaded', this.reflect_properties);

        // Fire off workspace event
        this.workspace.trigger('workspace:toolbar:render', {
            workspace: this.workspace
        });

        // Activate buttons when a new query is created or run
        this.workspace.bind('query:new', this.activate_buttons);
        this.workspace.bind('query:result', this.activate_buttons);

    },

    activate_buttons: function(args) {
        if (args !== null && args.data && args.data.cellset && args.data.cellset.length > 0 ) {
            $(args.workspace.toolbar.el).find('.button')
                .removeClass('disabled_toolbar');

            $(args.workspace.el).find("td.data").removeClass('cellhighlight').unbind('click');
            $(args.workspace.el).find(".table_mode").removeClass('on');

        } else {
            $(args.workspace.toolbar.el).find('.button')
                .addClass('disabled_toolbar').removeClass('on');
            $(args.workspace.el).find('.fields_list .disabled_toolbar').removeClass('disabled_toolbar');
            $(args.workspace.toolbar.el)
                .find('.about, .new, .open, .save, .edit, .run,.auto,.non_empty,.toggle_fields,.toggle_sidebar,.switch_to_mdx, .mdx')
                .removeClass('disabled_toolbar');
        }

        this.reflect_properties();

    },

    template: function() {
        var template = $("#template-workspace-toolbar").html() || "";
        return _.template(template)();
    },

    render: function() {
        $(this.el).html(this.template());

        return this;
    },

    translate: function() {
        //Saiku.i18n.translate();
    },
    call: function(event) {
        // Determine callback
        event.preventDefault();
        var callback = event.target.hash.replace('#', '');

        // Attempt to call callback
        if (! $(event.target).hasClass('disabled_toolbar') && this[callback]) {
            this[callback](event);
        }

        return false;
    },

    reflect_properties: function() {
        var properties = this.workspace.query.model.properties ?
            this.workspace.query.model.properties : Settings.QUERY_PROPERTIES;

        // Set properties appropriately
        if (properties['saiku.olap.query.nonempty'] === true) {
            $(this.el).find('.non_empty').addClass('on');
        }
        if (properties['saiku.olap.query.automatic_execution'] === true) {
            $(this.el).find('.auto').addClass('on');
        }

        if (properties['saiku.olap.query.drillthrough'] !== true) {
            $(this.el).find('.drillthrough, .drillthrough_export').addClass('disabled_toolbar');
        }

        if (properties['org.saiku.query.explain'] !== true) {
            $(this.el).find('.explain_query').addClass('disabled_toolbar');
        }

        if (properties['org.saiku.connection.scenario'] !== true) {
            $(this.el).find('.query_scenario').addClass('disabled_toolbar');
        } else {
            $(this.el).find('.query_scenario').removeClass('disabled_toolbar');
            $(this.el).find('.drillthrough, .drillthrough_export').addClass('disabled_toolbar');
        }
        if (properties['saiku.olap.query.limit'] == 'true' || properties['saiku.olap.query.filter'] === true) {
            $(this.workspace.el).find('.fields_list_header').addClass('limit');
        }

        if (this.workspace.query.getProperty('saiku.olap.result.formatter') !== "undefined" && this.workspace.query.getProperty('saiku.olap.result.formatter') == "flattened") {
            if (! $(this.el).find('.group_parents').hasClass('on')) {
                $(this.el).find('.group_parents').addClass('on');
            }
        }
        if ($(this.workspace.el).find( ".workspace_results tbody.ui-selectable" ).length > 0) {
            $(this.el).find('.zoom_mode').addClass('on');
        }

        $(this.el).find(".spark_bar, .spark_line").removeClass('on');
        $(this.el).find('a.edit').removeClass('disabled_toolbar');

        if (Settings.MODE == 'VIEW' || this.workspace.isReadOnly) {
            $(this.el).find('a.edit').hide();
            $(this.el).find('a.save').hide();
        } else {
            if (this.workspace.viewState == 'view') {
                $(this.el).find('a.edit').removeClass('on');
            } else {
                $(this.el).find('a.edit').addClass('on');
            }
            $(this.el).find('a.edit').show('normal');
        }
    },

    new_query: function(event) {
        if(typeof ga!= 'undefined'){
		ga('send', 'event', 'Toolbar', 'New Query');
        }
        this.workspace.switch_view_state('edit');
        this.workspace.new_query();

        return false;
    },

    edit_query: function(event) {
        $(event.target).toggleClass('on');

        if ($(event.target).hasClass('on')) {
            this.workspace.switch_view_state('edit');
        } else {
            this.workspace.switch_view_state('view');
        }
    },

    save_query: function(event) {
        var self = this;
        if (this.workspace.query) {
            if (typeof this.editor != "undefined") {
                var mdx = this.editor.getValue();
                this.workspace.query.model.mdx = mdx;
            }
            (new SaveQuery({ query: this.workspace.query })).render().open();
        }
    },

    open_query: function(event) {
            (new OpenDialog()).render().open();
    },


    run_query: function(event) {
        this.workspace.query.run(true);
    },

    automatic_execution: function(event) {
        // Change property
        var newState = !this.workspace.query.getProperty('saiku.olap.query.automatic_execution');
        this.workspace.query.setProperty('saiku.olap.query.automatic_execution', newState);

        if (newState) {
            $(event.target).addClass('on');
        } else {
            $(event.target).removeClass('on');
        }
    },

    toggle_fields: function(event) {
        var self = this;
        if (event) {
            $(this.el).find('.toggle_fields').toggleClass('on');
        }
        if (!$(this.el).find('.toggle_fields').hasClass('on')) {
            this.toggle_fields_action('hide');
        } else {
            this.toggle_fields_action('show');
        }

    },

    toggle_fields_action: function(action, dontAnimate) {
        var self = this;
        if ( action == 'show' && $('.workspace_editor').is(':visible')) {
            return;
        } else if ( action == 'hide' && $('.workspace_editor').is(':hidden')) {
            return;
        }
        if (dontAnimate) {
            $('.workspace_editor').css('height','');
            if ($('.workspace_editor').is(':hidden')) {
                $('.workspace_editor').show();
            } else {
                $('.workspace_editor').hide();
            }
            return;
        }

        if (action == 'hide') {
            $(this.workspace.el).find('.workspace_editor').hide();
        } else {
            $(this.workspace.el).find('.workspace_editor').show();
        }

        // avoid scrollbar on the right

        /*
        var wf = $('.workspace_editor').height();
        if ( action == 'hide') {
            var wr = $('.workspace_results').height();
            $('.workspace_results').height(wr - wf);
        }
        $(this.workspace.el).find('.workspace_editor').slideToggle({
            queue: false,
            progress: function() {
                self.workspace.adjust();
            },
            complete: function() {
                if ($('.workspace_editor').is(':hidden')) {
                    $('.workspace_editor').height(wf);
                } else {
                    $('.workspace_editor').css('height','');
                }

                self.workspace.adjust();
            }
        });

        */
    },

    about: function() {
        (new AboutModal()).render().open();
        return false;
    },

    toggle_sidebar: function() {
        this.workspace.toggle_sidebar();
    },

    // group_parents: function(event) {
    //     $(event.target).toggleClass('on');
    //     if ($(event.target).hasClass('on')) {
    //         this.workspace.query.setProperty('saiku.olap.result.formatter', 'flattened');
    //     } else {
    //         this.workspace.query.setProperty('saiku.olap.result.formatter', 'flat');
    //     }
    //     this.workspace.query.run();
    // },

    group_parents: function(event) {
        if (event) {
            $(event.target).toggleClass('on');
        }
        // this.$el.find('.group_parents').toggleClass('on')
        if (this.$el.find('.group_parents').hasClass('on')) {
            this.workspace.query.setProperty('saiku.olap.result.formatter', 'flattened');
        } else {
            this.workspace.query.setProperty('saiku.olap.result.formatter', 'flat');
        }
        this.workspace.query.run();
    },

    non_empty: function(event) {
        // Change property
        var nonEmpty = !this.workspace.query.getProperty('saiku.olap.query.nonempty');
        this.workspace.query.helper.nonEmpty(nonEmpty);

        this.workspace.query.setProperty('saiku.olap.query.nonempty', nonEmpty);

        // Toggle state of button
        $(event.target).toggleClass('on');

        // Run query
        this.workspace.query.run();
    },

    swap_axis: function(event) {
        // Swap axes
        $(this.workspace.el).find('.workspace_results table').html('');
        this.workspace.query.helper.swapAxes();
        this.workspace.sync_query();
        this.workspace.query.run(true);
    },


    check_modes: function(source) {
        if (typeof source === "undefined" || source === null)
            return;

        if ($(this.workspace.el).find( ".workspace_results tbody.ui-selectable" ).length > 0) {
            $(this.workspace.el).find( ".workspace_results tbody" ).selectable( "destroy" );
        }
        if (!$(source).hasClass('on')) {
            $(this.workspace.el).find("td.data").removeClass('cellhighlight').unbind('click');
            $(this.workspace.el).find(".table_mode").removeClass('on');

            this.workspace.query.run();
        } else {
            if ($(source).hasClass('drillthrough_export')) {
                $(this.workspace.el).find("td.data").addClass('cellhighlight').unbind('click').click(this.clicked_cell_drillthrough_export);
                $(this.workspace.el).find(".query_scenario, .drillthrough, .zoom_mode, .drillacross").removeClass('on');
            } else if ($(source).hasClass('drillthrough')) {
                $(this.workspace.el).find("td.data").addClass('cellhighlight').unbind('click').click(this.clicked_cell_drillthrough);
                $(this.workspace.el).find(".query_scenario, .drillthrough_export, .zoom_mode, .drillacross").removeClass('on');
            } else if ($(source).hasClass('query_scenario')) {
                this.workspace.query.scenario.activate();
                $(this.workspace.el).find(".drillthrough, .drillthrough_export, .zoom_mode, .drillacross").removeClass('on');
            } else if ($(source).hasClass('drillacross')) {
				$(this.workspace.el).find("td.data").addClass('cellhighlight').unbind('click').click(this.clicked_cell_drillacross);
				$(this.workspace.el).find(".query_scenario, .drillthrough, .drillthrough_export, .zoom_mode").removeClass('on');
			} else if ($(source).hasClass('zoom_mode')) {

                var self = this;
                $(self.workspace.el).find( ".workspace_results tbody" ).selectable({ filter: "td", stop: function( event, ui ) {
                    var positions = [];
                    $(self.workspace.el).find( ".workspace_results" ).find('td.ui-selected div').each(function(index, element) {
                        var p = $(element).attr('rel');
                        if (p) {
                            positions.push(p);
                        }
                    });
                    $(self.workspace.el).find( ".workspace_results" ).find('.ui-selected').removeClass('.ui-selected');

                    positions = _.uniq(positions);
                    if (positions.length > 0) {
						self.workspace.query.action.put("/zoomin", { success: function(model, response) {
							self.workspace.query.parse(response);
							self.workspace.unblock();
							self.workspace.sync_query();
							Saiku.ui.unblock();
							self.workspace.query.run();
						},
							data: { selections : JSON.stringify(positions) }
						});
                    }
                } });
                $(this.workspace.el).find(".drillthrough, .drillthrough_export, .query_scenario, .drillacross, .about").removeClass('on');
            }
        }


    },
    query_scenario: function(event) {
       $(event.target).toggleClass('on');
        this.check_modes($(event.target));

    },
    zoom_mode: function(event) {
       $(event.target).toggleClass('on');
        this.check_modes($(event.target));

    },
	drillacross: function(event) {
		 $(event.target).toggleClass('on');
		 this.check_modes($(event.target));
		 },
    drillthrough: function(event) {
       $(event.target).toggleClass('on');
        this.check_modes($(event.target));
    },

    display_drillthrough: function(model, response) {
        this.workspace.table.render({ data: response });
        Saiku.ui.unblock();
    },

    export_drillthrough: function(event) {
        $(event.target).toggleClass('on');
        this.check_modes($(event.target));
    },

	clicked_cell_drillacross: function(event) {
		 $target = $(event.target).hasClass('data') ?
			 $(event.target).find('div') : $(event.target);
		 var pos = $target.attr('rel');
		 (new DrillAcrossModal({
		 workspace: this.workspace,
			 title: "Drill Across",
			 action: "export",
			 position: pos,
			 query: this.workspace.query
		 })).open();

	 },
    clicked_cell_drillthrough_export: function(event) {
        $target = $(event.target).hasClass('data') ?
            $(event.target).find('div') : $(event.target);
        var pos = $target.attr('rel');
        (new DrillthroughModal({
            workspace: this.workspace,
            maxrows: 10000,
            title: "Drill-Through to CSV",
            action: "export",
            position: pos,
            query: this.workspace.query
        })).open();

    },

    clicked_cell_drillthrough: function(event) {
        $target = $(event.target).hasClass('data') ?
            $(event.target).find('div') : $(event.target);
        var pos = $target.attr('rel');
        (new DrillthroughModal({
            workspace: this.workspace,
            maxrows: 200,
            title: "Drill-Through",
            action: "table",
            success: this.display_drillthrough,
            position: pos,
            query: this.workspace.query
        })).open();

    },

    swap_axes_on_dropzones: function(model, response) {
		this.workspace.query.parse(response);
		this.workspace.unblock();
		this.workspace.sync_query();
		Saiku.ui.unblock();
        /*
        $columns = $(this.workspace.drop_zones.el).find('.columns')
            .children()
            .detach();
        $rows = $(this.workspace.drop_zones.el).find('.rows')
            .children()
            .detach();

        $(this.workspace.drop_zones.el).find('.columns').append($rows);
        $(this.workspace.drop_zones.el).find('.rows').append($columns);
        var rowLimit = $(this.workspace).find('fields_list.ROWS .limit').hasClass('on') | false;
        var colLimit = $(this.workspace).find('fields_list.COLUMNS .limit').hasClass('on') | false;
        $(this.workspace).find('fields_list.ROWS .limit').removeClass('on');
        $(this.workspace).find('fields_list.COLUMNS .limit').removeClass('on');
        if (rowLimit) {
            $(this.workspace).find('fields_list.COLUMNS .limit').addClass('on');
        }
        if (colLimit) {
            $(this.workspace).find('fields_list.ROWS .limit').addClass('on');
        }
        */
        this.workspace.unblock();
        this.workspace.sync_query();
        Saiku.ui.unblock();
    },

    show_mdx: function(event) {
        //this.workspace.query.enrich();

        (new MDXModal({ mdx: this.workspace.query.model.mdx })).render().open();
    },

    workspace_report_titles: function(event) {
        (new ReportTitlesModal({ query: this.workspace.query })).render().open();
    },

    export_xls: function(event) {
		if(this.workspace.query.name!=undefined){
			var filename = this.workspace.query.name.substring(this.workspace.query.name.lastIndexOf('/')+1).slice(0, -5);
			var paramsURI = Saiku.URLParams.paramsURI(); //get the param from url
			if(paramsURI.startdate != null && paramsURI.startdate != undefined && paramsURI.enddate != null && paramsURI.enddate != undefined){
				var datename = (paramsURI.startdate).substring(-1,10).replace(/-/g,'') +"-"+ (paramsURI.enddate).substring(-1,10).replace(/-/g,'');//获取参数中的日期
				filename = filename.replace('.','') + datename + ".";//将参数中的日期添加到下载的文件名中
			}
			window.location = Settings.REST_URL +
			this.workspace.query.url() + "/export/xls/" + this.workspace.query.getProperty('saiku.olap.result.formatter')+"?exportname=" + "\"" + encodeURIComponent(filename)+"xls" + "\"";
		}
		else{
			window.location = Settings.REST_URL +
			this.workspace.query.url() + "/export/xls/" + this.workspace.query.getProperty('saiku.olap.result.formatter');
		}


    },

    export_csv: function(event) {
		if(this.workspace.query.name!=undefined){
			var filename = this.workspace.query.name.substring(this.workspace.query.name.lastIndexOf('/')+1).slice(0, -6);
			var paramsURI = Saiku.URLParams.paramsURI(); //get the param from url
			if(paramsURI.startdate != null && paramsURI.startdate != undefined && paramsURI.enddate != null && paramsURI.enddate != undefined){
				var datename = (paramsURI.startdate).substring(-1,10).replace(/-/g,'') +"-"+ (paramsURI.enddate).substring(-1,10).replace(/-/g,'');//获取参数中的日期
				filename = filename.replace('.','') + datename + ".";//将参数中的日期添加到下载的文件名中
			}
			window.location = Settings.REST_URL +
			this.workspace.query.url() + "/export/csv/" + this.workspace.query.getProperty('saiku.olap.result.formatter')+"?exportname=" + "\"" + encodeURIComponent(filename) + "\"";
		}
		else{
			window.location = Settings.REST_URL +
			this.workspace.query.url() + "/export/csv/" + this.workspace.query.getProperty('saiku.olap.result.formatter');
		}

    },


    export_pdf: function(event) {
		if(this.workspace.query.name!=undefined){
			var filename = this.workspace.query.name.substring(this.workspace.query.name.lastIndexOf('/')+1).slice(0, -6);
			var paramsURI = Saiku.URLParams.paramsURI(); //get the param from url
			if(paramsURI.startdate != null && paramsURI.startdate != undefined && paramsURI.enddate != null && paramsURI.enddate != undefined){
				var datename = (paramsURI.startdate).substring(-1,10).replace(/-/g,'') +"-"+ (paramsURI.enddate).substring(-1,10).replace(/-/g,'');//获取参数中的日期
				filename = filename.replace('.','') + datename + ".";//将参数中的日期添加到下载的文件名中
			}
			window.location = Settings.REST_URL +
			this.workspace.query.url() + "/export/pdf/" + this.workspace.query.getProperty('saiku.olap.result.formatter')+"?exportname=" + "\"" + encodeURIComponent(filename) + "\"";
		}
		else{
			window.location = Settings.REST_URL +
			this.workspace.query.url() + "/export/pdf/" + this.workspace.query.getProperty('saiku.olap.result.formatter');
		}
    },

    switch_to_mdx: function(event) {
        var self = this;
        $(this.workspace.el).find('.workspace_fields').addClass('hide');
        $(this.el).find('.auto, .query_scenario, .buckets, .non_empty, .swap_axis, .mdx, .switch_to_mdx, .zoom_mode, .drillacross').parent().hide();

        if ($(this.workspace.el).find( ".workspace_results tbody.ui-selectable" ).length > 0) {
            $(this.workspace.el).find( ".workspace_results tbody" ).selectable( "destroy" );
        }

        $(this.el).find('.run').attr('href','#run_mdx');
        $(this.el).find('.run, .save, .open, .new, .edit').removeClass('disabled_toolbar');

        if (Settings.MODE != "view" && Settings.MODE != "table" && !this.workspace.isReadOnly) {
            $mdx_editor = $(this.workspace.el).find('.mdx_input');
            //$mdx_editor.width($(this.el).width()-5);
            $(this.workspace.el).find('.workspace_editor .mdx_input, .workspace_editor .editor_info, .workspace_editor').removeClass('hide').show();
            this.editor = ace.edit("mdx_editor");
            this.editor.setShowPrintMargin(false);
            this.editor.setFontSize(11);
            this.editor.commands.addCommand({
                name: 'runmdx',
                bindKey: {win: 'Ctrl-Enter',  mac: 'Command-Enter'},
                exec: function(editor) {
                    self.run_mdx();
                },
                readOnly: true // false if this command should not apply in readOnly mode
            });

            var showPosition = function() {
                var pos = self.editor.getCursorPosition();
                $mdx_editor.parent().find('.editor_info').html("  " + (pos.row +1) + ", " + pos.column);
            };

            this.editor.on('changeSelection', showPosition);
            showPosition();

             var heightUpdateFunction = function() {

                // http://stackoverflow.com/questions/11584061/
                var max_height = $(document).height() / 3;
                var height = Math.floor(max_height / self.editor.renderer.lineHeight);
                var screen_length = self.editor.getSession().getScreenLength() > height ? height : self.editor.getSession().getScreenLength();
                var newHeight =
                          (screen_length + 1) *
                          self.editor.renderer.lineHeight +
                          self.editor.renderer.scrollBar.getWidth();

                $mdx_editor.height(newHeight.toString() + "px");
                self.editor.resize();
                self.workspace.adjust();
            };

            var resizeFunction = function() {
                var session = self.editor.session;
                //$mdx_editor.width($(self.el).width()-5);
                self.editor.resize();
                session.setUseWrapMode(true);
                if(session.getUseWrapMode()) {
                    var characterWidth = self.editor.renderer.characterWidth;
                    var contentWidth = self.editor.renderer.scroller.clientWidth;

                    if(contentWidth > 0) {
                        session.setWrapLimitRange(null, parseInt(contentWidth / characterWidth, 10));
                    }
                }
            };

            resizeFunction();

            heightUpdateFunction();

            self.editor.focus();
            self.editor.clearSelection();
            self.editor.getSession().setValue("");
            self.editor.getSession().on('change', heightUpdateFunction);
            $(window).resize(resizeFunction);

            self.editor.on('changeSelection', heightUpdateFunction);
            self.editor.on('focus', function(e) { heightUpdateFunction(); return true; });
            self.editor.on('blur', function(e) {
                    if ($(self.workspace.el).find(".mdx_input").height() > 100) {
                                $(self.workspace.el).find(".mdx_input").height(100);
                            }
                            self.editor.resize();
                            self.workspace.adjust();
             return true; });

            //this.editor.on('focusout', function(e) { alert('blur');  });

            //this.editor.setTheme("ace/theme/crimson_editor");
            this.editor.getSession().setMode("ace/mode/text");

        }

        if (this.workspace.dimension_list) {
            $(this.workspace.el).find('.sidebar_inner ul li a')
                .css({fontWeight: "normal"}).parent('li').removeClass('ui-draggable ui-draggable-disabled ui-state-disabled');
        }
        this.activate_buttons({ workspace: this.workspace });
        $(this.workspace.toolbar.el)
                .find('.run')
                .removeClass('disabled_toolbar');

        $(this.workspace.table.el).empty();

        if (this.workspace.timeSeriesFilter) {
            $(this.workspace.timeSeriesFilter.el).empty();
        }

        this.workspace.adjust();
        this.post_mdx_transform();
    },

    post_mdx_transform: function() {
        var self = this;

        if (this.workspace.query.model.type !== "MDX") {
            //this.workspace.query.enrich();
            this.workspace.query.model.queryModel = {};
            this.workspace.query.model.type = "MDX";
            this.workspace.query.setProperty('saiku.olap.result.formatter', 'flat');
            self.workspace.query.helper.model().parameters = {};

        }
        var mdx = this.workspace.query.model.mdx;

        if (self.editor) {
            self.editor.setValue(mdx,0);
            self.editor.clearSelection();
            self.editor.focus();
        }
        $(self.el).find('.group_parents').removeClass('on');

        if (Settings.ALLOW_PARAMETERS) {

            var parameterDetector = function() {
                var mdx = self.editor.getValue();
                var parameters = [];
                if (mdx) {
                    for (var i = 0, len = mdx.length; i < (len-1); i++ ) {
                        if (mdx[i] === "$" && mdx[i+1] === "{") {
                            var param = "";
                            var closed = false;
                            for(i = i + 2; i < len; i++) {
                                if (mdx[i] !== '}') {
                                    param += mdx[i];
                                } else {
                                    closed = true;
                                    i++;
                                    break;
                                }
                            }
                            if (closed && param && param.length > 0) {
                                parameters.push(param);
                            }
                        }
                    }
                }
                var qParams = self.workspace.query.helper.model().parameters;
                var newParams = {};
                _.each(parameters, function(p) {
                    if (!qParams[p]) {
                        newParams[p] = "";
                    } else {
                        newParams[p] = qParams[p];
                    }

                });
                self.workspace.query.helper.model().parameters = newParams;
                self.workspace.update_parameters();


            };

			var lazyDetector = function() { _.delay(parameterDetector, 1000); };
			if (self.editor) {
				self.editor.getSession().off('change', lazyDetector);
				self.editor.getSession().on('change', lazyDetector);
			}
			self.workspace.update_parameters();
        }

    },

    run_mdx: function(event) {
        //var mdx = $(this.workspace.el).find(".mdx_input").val();
        if ($(this.workspace.el).find(".mdx_input").height() > 100) {
            $(this.workspace.el).find(".mdx_input").height(100);
        }
        this.editor.resize();
        var mdx = this.editor.getValue();
        this.workspace.query.model.mdx = mdx;
        this.workspace.query.run(true);
    },

    explain_query: function(event) {
        var self = this;
        var explained = function(model, args) {

            var explainPlan = "<textarea style='width: " + ($("body").width() - 165) + "px;height:" + ($("body").height() - 175) + "px;'>";
            if (args !== null && args.error !== null) {
                explainPlan += args.error;
            } else if (args.cellset && args.cellset.length === 0) {
                explainPlan += "Empty explain plan!";
            } else {
                explainPlan += args.cellset[1][0].value;
            }
            explainPlan += "</textarea>";

            Saiku.ui.unblock();

            var html = '<div id="fancy_results" class="workspace_results" style="overflow:visible"><table>' +
                       '<tr><th clas="row_header">Explain Plan</th></tr>' +
                       '<tr><td>' + explainPlan + '</td></tr>' +
                       '</table></div>';

            $.fancybox(html,
                {
                'autoDimensions'    : false,
                'autoScale'         : false,
                'height'            :  ($("body").height() - 100),
                'width'             :  ($("body").width() - 100),
                'transitionIn'      : 'none',
                'transitionOut'     : 'none'
                }
            );
        };

        self.workspace.query.action.gett("/explain", { success: explained } );

        return false;

    }
});

  

 posted on 2019-03-26 12:35  阿叮339  阅读(510)  评论(0编辑  收藏  举报