• odoo 向qweb report中传递上下文context


    在打印报表的时候发现没法将context传入到qweb模板中,有时候又需要用到临时的变量来做判断:

    调整js代码如下:

        /**
         * Generates an object containing the report's urls (as value) for every
         * qweb-type we support (as key). It's convenient because we may want to use
         * another report's type at some point (for example, when `qweb-pdf` is not
         * available).
         *
         * @param {Object} action
         * @returns {Object}
         */
        _makeReportUrls: function (action) {
            var reportUrls = {
                html: '/report/html/' + action.report_name,
                pdf: '/report/pdf/' + action.report_name,
                text: '/report/text/' + action.report_name,
            };
            // We may have to build a query string with `action.data`. It's the place
            // were report's using a wizard to customize the output traditionally put
            // their options.
            if (_.isUndefined(action.data) || _.isNull(action.data) ||
                (_.isObject(action.data) && _.isEmpty(action.data))) {
                if (action.context.active_ids) {
    			//我改了这里
                    var activeIDsPath = '/' + action.context.active_ids.join(',')+'?context='+encodeURIComponent(JSON.stringify(action.context));
                    reportUrls = _.mapObject(reportUrls, function (value) {
                        return value += activeIDsPath;
                    });
                }
            } else {
                var serializedOptionsPath = '?options=' + encodeURIComponent(JSON.stringify(action.data));
                serializedOptionsPath += '&context=' + encodeURIComponent(JSON.stringify(action.context));
                reportUrls = _.mapObject(reportUrls, function (value) {
                    return value += serializedOptionsPath;
                });
            }
            return reportUrls;
        },
    

    改了这部分js 之后,就可以直接使用context里边的值了
    比如我的context为:
    {"lang":"en_US","tz":"Canada/Pacific","uid":232,"params":{"id":22677,"action":545,"model":"res.partner","view_type":"form","menu_id":366},"active_model":"res.partner","search_disable_custom_filters":true,"active_id":22677,"active_ids":[22677],"date_end":"2021-10-04"}
    那么要在qweb中获取date_end 的值:
    <span t-esc="date_end"/>

    效果:

    image
    image

    另外:

    在odoo 的源码中可以看出,odoo 还有另一种方式来生成报表,只要在report_action方法中传入data参数,请求的地址就会发生改变,并且会回传contextoption参数到后端,可以参考产品路线的报表,这种方式比较复杂,需要设置一个report开头的瞬态模型.官方也有解释:
    image


    更新一下:
    pdf打印的上下文要从context中获取,即context.get('date_end')


    懂得,原来世界如此简单!

  • 相关阅读:
    Linux下的/dev/sr0、/dev/cdrom、df命令、free命令
    CentOS6.8 yum升级高版本gcc
    php5.6配置oracle数据库扩展 oci8(windows7系统64位)
    linux命令之ifconfig
    linux 编译安装swoole
    Bootstrap面包屑导航
    bootstrap滚动监听
    bootstrap弹出框
    Bootstrap 模态框(也可以说的弹出层)
    java反射拼接方法名动态执行方法
  • 原文地址:https://www.cnblogs.com/qianxunman/p/15380752.html
Copyright © 2020-2023  润新知