• 版块
  • 标签
  • 热门
  • 用户
  • 群组
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(Flatly)
  • 不使用皮肤
折叠

Odoo 中文社区

server action 调用方法无效

已定时 已固定 已锁定 已移动 Odoo 开发与实施交流
12 帖子 3 发布者 1991 浏览
    • 从旧到新
    • 从新到旧
    • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • H 离线
    H 离线
    hui
    写于 最后由 编辑
    #1

    进行excel数据上传到数据库:
    方法一,通过点击一个按钮调用方法import_data()打开一个wizard进行文件上传,然后写入数据库,可以顺利进行。

    方法二,写一个server action,然后也调用方法import_data(),但是没效果,这两个有什么区别吗?server action怎么实现这个效果呢?

    方法import_data()代码如下:

    @api.multi
        def batch_import(self):
            if self.env.user:
                action = self.env.ref('upi.action_import_wizard').read()[0]
                return action
            else:
                raise ValidationError("You can't click this button !")
    
    1 条回复 最后回复
    0
  • W 离线
    W 离线
    wangyuhui
    写于 最后由 编辑
    #2

    请问这个解决了吗?我也遇到了,想要return一个action。结果不能弹出窗口。

    H 1 条回复 最后回复
    0
  • H 离线
    H 离线
    hui
    在 中回复了wangyuhui 最后由 编辑
    #3

    @wangyuhui
    我的好像是方法重名了,其他的没注意还有什么问题。

    1 条回复 最后回复
    0
  • W 离线
    W 离线
    wangyuhui
    写于 最后由 编辑
    #4

    我用的是base.automation这个模型,和ir.actions.server还有点不一样。我要实现的是到某个状态时,自动弹出窗口,base.automation触发不了窗口弹出。

    H 1 条回复 最后回复
    0
  • H 离线
    H 离线
    hui
    在 中回复了wangyuhui 最后由 编辑
    #5

    @wangyuhui 贴下代码看看吧。

    1 条回复 最后回复
    0
  • W 离线
    W 离线
    wangyuhui
    写于 最后由 digitalsatori 编辑
    #6
    < record id="sync_method" model="base.automation">
            < field name="name">Synchronize</field>
            < field name="model_id" ref="crm.model_crm_lead"/>
            < field name="trigger">on_write</field>
            < field name="filter_pre_domain" eval="[('stage_id', '=', ref('crm.stage_lead4'))]"/>
            < field name="filter_domain" eval="[('stage_id', '=', ref('crm.stage_lead4'))]"/>
            < field name="active" eval="True"/>
            < field name="state">code</field>
            < field name="code">
    if records:
        action = records.sync()
            < /field>
        < /record>
    
    @api.multi
        def sync(self):
            action = self.env.ref('my_crm.action_my_crm').read()[0]
            wizard_id = self.env['my_crm'].create({'lead_id': self.id})
            action['views'] = [(self.env.ref('my_crm.view_form_my_crm').id, 'form')]
            action['res_id'] = wizard_id.id
            return action
    
    H digitalsatoriD 2 条回复 最后回复
    0
  • H 离线
    H 离线
    hui
    在 中回复了wangyuhui 最后由 编辑
    #7

    @wangyuhui
    我没用过这个模型,我没有找到base.automation这个模型啊,有个ir.cron的处理自动化的。

    W 2 条回复 最后回复
    0
  • W 离线
    W 离线
    wangyuhui
    在 中回复了hui 最后由 编辑
    #8

    @hui
    https://github.com/odoo/odoo/tree/11.0/addons/base_automation
    你的代码库可能要升级了😂

    1 条回复 最后回复
    0
  • digitalsatoriD 离线
    digitalsatoriD 离线
    digitalsatori 管理员
    在 中回复了wangyuhui 最后由 digitalsatori 编辑
    #9

    @wangyuhui 请用三个backtick ```包住你的代码以保持格式并实现语法高亮, 帮你改了一下。

    base.automation其本质是创建钩子程序。比如你的代码实际上会插入到write方法中执行,write方法是不能返回action的。

    [Edit] 最好不要在别人的贴子下面提问,应该开个新贴。

    【上海先安科技】(tony AT openerp.cn)

    W 1 条回复 最后回复
    0
  • W 离线
    W 离线
    wangyuhui
    在 中回复了digitalsatori 最后由 编辑
    #10

    @digitalsatori
    好的,谢谢校长。
    我换种方法去实现吧。

    1 条回复 最后回复
    0
  • W 离线
    W 离线
    wangyuhui
    在 中回复了hui 最后由 编辑
    #11

    @hui
    多谢分析,我换种方法去试试吧。

    H 1 条回复 最后回复
    0
  • H 离线
    H 离线
    hui
    在 中回复了wangyuhui 最后由 编辑
    #12

    @wangyuhui 客气,等你实现了分享分享。

    1 条回复 最后回复
    0

  • 登录

  • 没有帐号? 注册

  • 登录或注册以进行搜索。
  • 第一个帖子
    最后一个帖子
0
  • 版块
  • 标签
  • 热门
  • 用户
  • 群组
  • 登录

  • 没有帐号? 注册

  • 登录或注册以进行搜索。