问题描述
def get_data(self,params):
json_string = [{"SKU": "A4110","Unit": "PC"}]
return json_string
和这样的文件xml视图
<record id="view_report_product_qweb" model="ir.ui.view">
<field name="name">report.view.qweb</field>
<field name="model">view.product</field>
<field name="mode">primary</field>
<field name="arch" type="xml">
<qweb>
<div id="pivot-container1"></div>
<script>
new WebDaTarocks({
"container": "#pivot-container1","width": "100%","height": 430,"toolbar": true,"report": {
"dataSource": {
"type": "json","data": json_string
},"slice": {
"rows": [{"uniqueName": "Product"}],"columns": [{"uniqueName": "[Measures]"}],"measures": [{"uniqueName": "Quantity","aggregation": "sum"}]
}
}
});
</script>
</qweb>
</field>
</record>
我如何通过功能获取数据并将其推送到xml视图以呈现webdaTarock excel
解决方法
您至少可以通过两种我知道的方法来实现这一目标:
步骤1:
您可以创建一个从odoo的Abstract model
继承的类,并为其指定一个带有确切符号的名称。
模板名称代表实际的template_id
,而不是report_id
。必须使用@api.model decoration
对其进行定义。
该函数然后返回您计算的数据,并将其传递到上面的模板。
可以像模板<t t-foreach="some_variable" as "o"> ...
from odoo import models,api
class DataRock(models.AbstractModel):
_name = 'report.module_name.template_name'
_description = 'Normal description'
@api.model
def _get_report_values(self,docids,data=None):
#the docs will be the open form in the select model
docs = self.env['model.to.attach'].browse(docids[0])
other_data_structure = ...
some_variable = ...
return {
'docs': docs,'some_variable': some_variable,'other_data_structure': other_data_structure,}
在此链接中查看官方文档qweb
步骤2: 以下示例来自here
的odoo论坛中的答案 return语句应如下所示:report_action(args)
中传递的参数是您要从qweb访问的数据。
return self.env.ref('module_name.report_definition_id').report_action(employees,data=datas)
请注意report_definition_id
而不是template_id
@api.multi
def print_report(self):
self.ensure_one()
[data] = self.read()
data['emp'] = self.env.context.get('active_ids',[])
employees = self.env['hr.employee'].browse(data['emp'])
datas = {
'ids': [],'model': 'hr.employee','form': data
}
return self.env.ref('hr_holidays.action_report_holidayssummary').report_action(employees,data=datas)
,
感谢@Eric代表,但这不是我所需要的 我可以从操作菜单按钮(例如this)访问该xml视图 并渲染webdatarock表,我需要在表单视图中添加scrpit标记,例如,
const FORMAT_PATTERN = "DD/MM/YYYY HH:mm:ss";
export default function Timer({ dateCreated }) {
const [hours,setHours] = useState(0);
const [minutes,setMinutes] = useState(0);
const [seconds,setSeconds] = useState(0);
const [startTime,setStartTime] = useState();
useEffect(() => {
const orderTimestamp = Moment.unix(dateCreated);
setStartTime(Moment(orderTimestamp,FORMAT_PATTERN));
},[dateCreated]);
useEffect(() => {
let interval = null;
interval = setInterval(() => {
const now = Moment(Date.now());
const difference = Moment.duration(
Moment(now,FORMAT_PATTERN).diff(startTime)
);
setHours(Math.floor(difference.asHours())); // this is so that 1 day,12 hours will be 34 hours
setMinutes(Moment.utc(now.diff(startTime)).format("mm"));
setSeconds(Moment.utc(now.diff(startTime)).format("ss"));
},1000);
return () => clearInterval(interval);
},[hours,minutes,seconds]);
return hours && seconds && minutes ? (
<Typography>{[hours,seconds].join(":")}</Typography>
) : null;
}
我需要的是从python函数中获取数据 这条线
<odoo>
<data>
<!-- Form View -->
<record id="view_report_product_form" model="ir.ui.view">
<field name="name">purchase.product.report.view.form</field>
<field name="model">dms.excel.view.product</field>
<field name="arch" type="xml">
<form string="Purchase Products Report">
<group>
<group>
<field name="from_date" required="1"/>
<field name="to_date" required="1"/>
</group>
<group>
<field name="product_ids" widget="many2many_tags" options="{'no_create': True}"/>
</group>
</group>
<footer>
<button id="submit_data" name="action_print" string="Print" class="oe_highlight" default_focus="1" type="object"/>
<button string="Cancel" class="oe_link" special="cancel"/>
</footer>
<div id="pivot-container1"></div>
<script>
new WebDataRocks({
"container": "#pivot-container1","width": "100%","height": 430,"toolbar": true,"report": {
"dataSource": {
"type": "json","data": json_string
},"slice": {
"rows": [
{
"uniqueName": "sku"
},{
"uniqueName": "product_name"
},{
"uniqueName": "unit"
},{
"uniqueName": "purchase_qty"
},{
"uniqueName": "purchase_price_unit"
},{
"uniqueName": "return_qty"
},{
"uniqueName": "price_total"
}
],"columns": [
{
"uniqueName": "Measures"
}
],"measures": [
{
"uniqueName": "purchase_qty","aggregation": "sum"
}
],"flatOrder": [
"sku","product_name","unit","purchase_qty","purchase_price_unit","return_qty","price_total"
]
},"options": {
"grid": {
"type": "flat"
}
}
}
});
</script>
</form>
</field>
</record>
<!-- Action -->
<record id="action_dms_purchase_report_product" model="ir.actions.act_window">
<field name="name">Dashboard</field>
<field name="res_model">dms.excel.view.product</field>
<field name="type">ir.actions.act_window</field>
<field name="target">inline</field>
<field name="view_mode">form</field>
</record>
</data>
</odoo>