留几个字吧,在view.js里有一个函数是用来判断button的type的,如图3,我在view里增加一个type类别,然后form表单的button填写上类别之后,点击事件就可以调用该type对应的js函数了,剩下的就是海阔天空任鸟飞了
阿狸
- 
 Form表单button弹出自定义对话框(button增加type)
- 
 Form里自定义显示many2many与one2many的字段many2many字段在from里一般会显示出many端的表的tree视图,如果要更改显示的字段需要修改该表的tree视图,比较麻烦,经总监提示,通过 
 <field name="many2many 字段">
 <tree ....
 </tree>
 </field>
 便可选择性的显示many端的表的字段
 上代码:<field name="lc_fixed_assets_line"><br />                        <tree string="固定资产明细"><br />                            <field name="article_id"/><br />                            <field name="name"/><br />                            <field name="asset_id"/><br />                            <field name="asset_user"/><br />                            <field name="user_department"/><br />                            <field name="state"/><br />                            <button name="get_assets" icon="STOCK_REDO" string="领用" type="object"/><br />                        </tree><br />                    </field><br />                </form>
 改之前与改之后的效果图如下:
- 
 放假无聊用OPENERP做了个股票数据分析平台期待楼主的开源  
- 
 开阖软件已收购OpenERP中文包并开源其实这篇文章对国内的现状充满了无奈感,我只能说大家加油! 
- 
 【分享】oe字段过滤器首先谢谢总监指导  
 比如account_id是个many2many字段,所对应的表有两条记录,分别为“张三”,“李四”
 如果在xml这么写的话:
 <field name="account_id" domain="('name', '=', '张三')]" />
 则many2many备选框里只会出现张三,不会出现李四。
- 
 【分享】定义oe自带的搜索及默认搜索(即过滤器)谢谢上海-开阖正翔的解答,有学问又有耐心 
 下面是代码:<!--定义视图动作--><br /><record model="ir.actions.act_window" id="action_my_debug_models"><br /><field name="name">调试</field><br /><field name="res_model">my_debug.models</field><br /><field name="view_type">form</field><br /><field name="view_mode">form,tree</field><br /><field name="view_id" ref="my_debug_models_tree_view"/><br /><field name="context">{"search_default_outpeople":1}</field><br /><field name="search_view_id" ref="view_my_debug_models_filter"/><br /></record><br /><!--定义搜索视图--><br /><record id="view_my_debug_models_filter" model="ir.ui.view"><br /><field name="name">my_debug.models.select</field><br /><field name="model">my_debug.models</field><br /><field name="arch" type="xml"><br /><search string="Search Partner"><br /><field name="meeting_temporary_data"/><br /><filter string="离职人员" name="outpeople" domain="[('active','=',0)]"/><br /><separator/><br /><filter string="显示所有" name="display_all" domain="['|',('active','=',1),('active','=',0)]"/><br /></search><br /></field><br /></record>
 代码不过多解释,都能看明白,需要注意的是定义默认搜索这两句代码比较关键:
 <field name="context">{"search_default_outpeople":1}</field>
 <field name="search_view_id" ref="view_my_debug_models_filter"/>
 效果图如下:
- 
 总监分享: 在v8 v9 多维报表导出excel 时, 日期 时间格式 造成 Excel 不能正常处理这是总监发的,我只是转到bbs上 
- 
 总监分享: 在v8 v9 多维报表导出excel 时, 日期 时间格式 造成 Excel 不能正常处理【大校】重庆-mrshelly 
 分享一个:
 在v8 v9 多维报表导出excel 时, 日期 时间格式 造成 Excel 不能正常处理需要修改 openper\models.py
 日期 时间格式
 注:以上出自总监言论
- 
 【分享-oe嵌入qweb】用js读取数据库数据,用类似html语言重写web报表[quote author=神仙采葡萄 link=topic=16554.msg28959#msg28959 date=1410492180] 
 具体怎么把读取数据后的表格导出成一个excel文件呢?谢谢!
 [/quote]
 开发导出模块,大概就是用python读取数据库然后导出成excel。
 一般用xlrd等
- 
 【分享】在OE里用函数发邮件[quote author=Jeff link=topic=16642.msg29106#msg29106 date=1412669752] 
 发邮件不是这样子的么?
 您这个是发消息
 [/quote]
 总觉得我这么写有问题,果然有问题。。。
 谢谢Jeff指正
- 
 OE权限设置文档感谢分享 
- 
 【分享】在OE里用函数发邮件def send_the_mail(self, cr, uid, ids, context=None):<br />        active_model_pool = self.pool.get('mail.thread')<br />        post_values = {<br />            'subject': u'该开会了',<br />            'body': u'开会时间到了',<br />            'parent_id': [],<br />            'partner_ids': [9],<br />            'attachment_ids': [],<br />            'attachments': [],<br />        }<br />        res_id=[0]<br />        subtype = 'mail.mt_comment'<br />        msg_id = active_model_pool.message_post(cr, uid, res_id, type='comment', subtype=subtype, context=context, **post_values)
 其中, 'subject','body',分别为标题跟内容,partner_ids为res.user里的partner_id,发送给partner_id对应的联系人,前提是该user填写了邮箱地址,大前提是在OE里配置好了邮件发送服务器
 关于发送邮件若有更好的方法还请罗列一下
- 
 手把手教你在7.0下开发wizard【多亏了总监指导,大家一起感谢他】[quote author=mrshelly link=topic=16611.msg28995#msg28995 date=1411031355] 
 整些没用的. 把最重要的教程搞丢了.
 [/quote]
 嘿嘿。。
- 
 手把手教你在7.0下开发wizard【多亏了总监指导,大家一起感谢他】首先,先安装前两个模块,即oecn_training与oecn_training_classroom 
 oecn_training_classroom_wizard是基于oecn_training_classroom改写的,当然你也可以直接装oecn_training与oecn_training_classroom_wizard.zip!
 效果图见附件。
 wizard主要是定义一个osv_memory类,视图上加一个target,其他跟正常的view没啥区别。
 现在说下怎么基于oecn_training_classroom定义wizard
 首先,在oecn_training_classroom下写一个class,我是在classroom.py里写的。当然不一定写在同一个文件里。代码如下:# -*- coding: utf-8 -*-<br />from openerp.osv import fields, osv<br /> <br />class oecn_training_classroom(osv.osv):<br />    _name = 'oecn.training.classroom'<br />    _description = u'OECN 教室'<br />    _columns = {<br />        'number':fields.char(u'编号', size=64, select=True),<br />        'capacity':fields.integer(u'容纳人数', select=True),<br />        'location':fields.char(u'地点', size=125, select=True),<br />        'room_ids':fields.many2many('oecn.training.classroom.wizard', <br />        'classroom_many2many', <br />        'class_room_id','room_id',  string='room'}<br />        }<br />class oecn_training_classroom_wizard(osv.osv_memory):<br />    _name = 'oecn.training.classroom.wizard'<br />    _description = u'OECN 教室2'<br />    _columns = {<br />        'p_number':fields.integer(u'容纳人数', select=True),<br />        'class_room_ids':fields.many2many('oecn.training.classroom', 'classroom_many2many', <br />        'room_id', 'class_room_id', string='room'<br />        }<br />    def act_done(self, cr, uid, ids, context=None):<br />        raise osv.except_osv(_('Error!'), _('Set OK!'))<br />    <br />    <br />oecn_training_classroom()<br />oecn_training_classroom_wizard()<br />
 其中最关键的继承osv.osv_memory类
 xml里添加如下代码:<!--定义表单视图--><br />        <record model="ir.ui.view" id="oecn_training_classroom_wizard_form_view"><br />            <field name="name">课程表单</field><br />            <field name="type">form</field><br />            <field name="model">oecn.training.classroom.wizard</field><br />            <field name="arch" type="xml"><br />                <form string="课程表单" version="7.0"><br />                <button name="act_done" string="Set It!" type="object"/><br />                    <field name="p_number"/><br />                    <field name="class_room_ids" widget="many2many_tags"/><br />                </form><br />            </field><br />        </record><br />        <!--定义列表视图--><br /><!--定义视图动作--><br />    <record model="ir.actions.act_window"  id="action_oecn_training_classroom_wizard"><br />        <field name="name">课程</field><br />        <field name="res_model">oecn.training.classroom.wizard</field><br />        <field name="view_type">form</field><br />        <field name="view_mode">form,tree</field><br />        <field name="view_id" ref="oecn_training_classroom_wizard_form_view"/><br />        <field name="target">new</field><br />    </record><br /><!--定义菜单--><br />    <menuitem id="oecn_menu" name="OECN"/><br />    <menuitem id="oecn_training_menu" name="OECN Training" parent="oecn_menu"/><br />    <menuitem id="oecn_training_classroom_wizard_menu2" name="OECN Training Lesson2" parent="oecn_training_menu" action="action_oecn_training_classroom_wizard"/>
 注意几点,wizard不需要tree视图,另外,需要在视图动作下加上<field name="target">new</field>。
 这样wizard就出现了,然后可以根据业务逻辑添加自己想要的功能。。
 貌似没有其他的了。。wizard只会挡门外汉,进来了发现没那么难。。
- 
 手把手教你在7.0下开发wizard【多亏了总监指导,大家一起感谢他】首先,总监集耐心,爱心,雄心与一心;学富,财富,情妇与一身。 
 气度非凡,气宇轩昂,气壮河山;英俊潇洒,英姿飒爽,英姿焕发。
 总监1岁会打字,3岁会编程,4岁满地跑,6岁单手抱电脑;
 10岁进微软,15开公司,18收谷歌,20成首富。
 看淡世间情与乱,屈身公司当总监。
 热心教导新来人,不求谢来不求钱。
 咳咳,说好的教程呢?写二楼好了,一楼赞总监
- 
 【分享】禁用日历视图下的事件可以随意拖动功能,该功能容易引起误操作老规矩,先说下情景: 
 最近在做会议模块功能扩展时,发现了一个“bug”,会议时间过长时点击日历视图下的事件会随机延后一段时间,照成事件飘逸,经总监指点找到了该模块的源码,即web_calendar模块,在模块里一通乱翻,才发现那是人家的功能:即日历视图下的模块支持拖动功能。。。(吐,看来得换鼠标了)
 不过该拖动功能容易照成误操作,嘛,找到了“说辞”就该“加其罪”了,果断禁用掉!(叫你浪费我半天时间!)
 在addons\web_calendar\static\lib\dhtmlxScheduler\sources下有个dhtmlxScheduler.js文件
 在其2362行处,
 switch (classname) {
 case "dhx_cal_event_line":
 下面边加一个break;即可
 该方法简单粗暴,一劳永逸
 switch (classname) {
 case "dhx_cal_event_line":
 break;
- 
 【分享-oe嵌入qweb】用js读取数据库数据,用类似html语言重写web报表[quote author=行云流水 link=topic=16554.msg28741#msg28741 date=1408090429] 
 结合 上面几篇文章 掉坑了,然后 找老刘 要了 样例 bzr branch lp:~niv-openerp/+junk/oepetstore -r 1
 然后从坑里 爬了出来
 安装 这个 教程 [检测到链接无效,已移除] br />
 看 楼主的 顺序 ,没理解前都会copy 看看 能不能运行。。 js ,xml 写了,然后掉坑里了
 1、出菜单 ,贴代码<?xml version="1.0" encoding="utf-8"?><br /><openerp><br />    <data><br />      <!-- Top menu item --><br />        <menuitem name="Test"<br />            id="menu_test_root"<br />        <br />            sequence="30"/><br />    <record model="ir.actions.client" id="action_client_example"><br />            <field name="name">Example Client Action</field><br />  <!-- 此处 name  修改了 浏览器 title    --><br />          <field name="tag">petstore.homepage</field><br />        <!-- 此处 tag 内容 要对应  js    <br />        instance.web.client_actions.add('petstore.homepage', 'instance.oepetstore.HomePage');<br /><br />这个 阿狸木有 解释,或者不解释 。<br /><br />济南-stone  提示 过 , “找action.tag是否写对”  结果不得要领<br />看了样例才知道<br />        --><br />            <br />        </record><br /> <!-- 此处 tag 内容 要对应  js    这个 阿狸木有 解释,或者不解释 。<br />  --><br />        <menuitem id="test_qweb_menu" name="test qweb" sequence="20" parent="menu_test_root"/><br />        <menuitem action="action_client_example" id="menu_client_example" parent="test_qweb_menu" name="test report qweb"/><br />    </data><br /></openerp>
 这样 界面可以出 hello world
 [/quote]
 我上面说了, 注意qweb的name字段等与js中的关联,就不一一说了,仔细看就看出来了。
 。。。
 PS: 你这坑掉的可真深啊 ;D
- 
 【分享-oe嵌入qweb】用js读取数据库数据,用类似html语言重写web报表本来是开发个报表模块,具体功能为:OE读取excel表格-web显示-导出成excel。 
 做完了拿给老板看时,老板对web显示这一块大不满意(用的OE自带的form页面),觉得人性化方便做的不到位,让我重新设计web页面,于是开始了为期一个月的前端研究。
 起先是打算自己脱离OE搞个前端来显示这个报表,用的是Django做了一个页面,做的差不多时拿给老板看,老板说从OE再弹出个窗口体验性差,叫我整合进OE里,当时我就(此处省略若干字。。)
 不得已就去翻官网文档,看到这篇文档:https://doc.odoo.com/trunk/training/web_framework/
 后大有启发,决定用qweb来写这个报表。其中多亏了群里的高手指点,才得以实现呀
 看了这么久是不是着急看代码 8),嘿嘿。。
 首先从梦姑处偷了点经验,看了他的帖子:http://shine-it.net/index.php/topic,16514.0.html
 他的贴子里的我就不重复了
 先是js读取数据库:start: function() {<br />            var self = this;<br />            new instance.web.Model("lcqc.date.table.smt.data").query().filter([["smt_qctable_id", "=", 139]])<br />            .all().then(function(result) {<br />                console.log("##################the message_of_the_day result is", result);<br />                self.$el.append($(QWeb.render("MessageofTheDay", {item: result})));<br />            });<br />        },
 值得注意的是得到的是一个object
 然后把参数item: result传递给qweb。
 qweb代码:<t t-name="MessageofTheDay"><br />        <div class="oe_petstore_motd"><br />        <table><br />        <t t-foreach="item" t-as="qname"><br />            <tr><br />            <td><t t-esc="qname.date_smtqc_statistical_table"/></td><br />            <td><t t-esc="qname.inspector_smtqc_st"/></td><br />            ..................<br />            </tr><br />          </t><br />          </table><br />    </t>
 注意qweb的name字段等与js中的关联,就不一一说了,仔细看就看出来了。
 然后就是整合进OE:
 首先是__openerp__.py中的定义:
 'data': ['qc_table_qweb.xml'],
 "js": ["static/src/js/.js"],
 "css": ["static/src/css/.css"],
 "qweb": ["static/src/xml/*.xml"],
 其中qc_table_qweb.xml放在模块的根目录里,其代码:<openerp><br />    <data><br />        <record model="ir.actions.client" id="action_client_example"><br />            <field name="name">Example Client Action</field><br />            <field name="tag">example.action</field><br />        </record><br /> <menuitem id="qc_table_qweb_menu" name="QC报表qweb" sequence="20" parent="qc_table_menu"/><br />        <menuitem action="action_client_example" id="menu_client_example" parent="qc_table_qweb_menu" name="qc_smt日报表qweb"/><br />    </data><br /></openerp>
 同样注意下name字段与js的关联,才能保证正确显示。
 css:.oe_petstore_motd td,th{<br />    border:1px solid blue;<br />}<br />.oe_petstore_motd td{<br />    color:#F80E0E;<br />}
 其实我还是建议看上面的英文文档,跟着教程一步一步走,才能把握到精髓呀!
 下面上一张效果图:
- 
 Fields.function store=True 执行次数的问题(已解决)【大校】上海-开阖Jeff(85822082) 2014-08-06 21:41:00查看前后消息 
 @上海-Joshua 大神曾经说过,store=true 相当于 store = {self._name:(lambda self, cr, uid, ids, c={}: ids, None, 10)
- 
 Js初探感谢梦姑的分享,让好多新人少走了弯路,赞一个!希望后续再多多分享宝贵的经验,嘿嘿