1

我从 OpenERP 7 中的按钮打开向导。但是当单击向导的计算按钮时,我的向导关闭了,但我不想在单击计算按钮时关闭向导,而不是在单击向导的关闭按钮时关闭向导。我正在使用 OpenERP 7。

class test_pass_student(osv.osv_memory):
    _name = 'test.pass.student'
    _column ={  
        'pass_id': fields.many2one('pass.student', 'Passed'),
        'student_id':fields.many2one('student.student', 'Student'),
    }

test_pass_student()

def _reopen(self, res_id, model):
    return {'type': 'ir.actions.act_window',
            'view_mode': 'form',
            'view_type': 'form',
            'res_id': res_id,
            'res_model': self._name,
            'target': 'new',
            'context': {
                'default_model': model,
            },
    }

class pass_student(osv.osv_memory):
    _name = 'pass.student'

    _columns = {    
        'student_id':fields.many2one('student.student', 'Student'),
        'lines': fields.one2many('test.pass.student','pass_id', 'Passed students'),
    }

    def add_student(self, cr, uid, ids,context=None):
        lines_obj = self.pool.get('test.pass.student')
        for record in self.browse(cr,uid,ids,context):
            for line in record.student_id.scores:
                    if line.pass_score > 50:
                        lines_obj.create(cr,uid,{'pass_id': record.id,'student_id':line.student_id.id})

            return _reopen(self, record.id, record._model)

pass_student()

沉S选择第一个学生检查,如果他/她的分数大于50则添加one2many,然后再次检查另一个学生,同样的事情再次重复。

4

4 回答 4

1

要关闭按钮上的向导,请单击在视图表单 xml 上添加此代码:

<button string="Cancel" class="oe_link" special="cancel"/>
于 2013-02-27T12:06:06.227 回答
1

从 OpenERP 6.1(因此在 7.0 中也是如此) ,向导按钮(带有 )的默认行为type="object是立即关闭向导弹出窗口。按钮调用的方法可以返回一个将被执行的动作定义字典。当您不想关闭向导时,通常是因为您有几个步骤。由于多步骤向导通常具有不同的表单视图,因此它们的按钮方法只是返回操作以使用下一步的视图打开相同的向导记录(如果需要再次显示,也可以是相同的视图)。

您可以在官方插件源代码中找到示例,例如在模块修改mail.compose.message的向导中,它使用类似的技巧重新打开自身。email_template

这个问题另一个问题也可能包含有用的例子。

于 2013-01-23T17:29:37.933 回答
0

无需编写单独的方法来再次打开向导。您可以只获取对象引用并将其与视图 ID 一起返回。例如。

def add_student(self, cr, uid, ids,context=None):
    model_data_obj = self.pool.get('ir.model.data')
    lines_obj = self.pool.get('test.pass.student')
    for record in self.browse(cr,uid,ids,context):
        for line in record.student_id.scores:
                if line.pass_score > 50:
                    lines_obj.create(cr,uid,{'pass_id': record.id,'student_id':line.student_id.id})
    view_rec = model_data_obj.get_object_reference(cr, uid, 'pass_student', 'add_student_form_view_id')
    view_id = view_rec and view_rec[1] or False
    return {
       'view_type': 'form',
       'view_id' : [view_id],
       'view_mode': 'form',
       'res_model': 'pass.student',
       'type': 'ir.actions.act_window',
       'target': 'new',
       'context': context
    }

希望对您有所帮助!

于 2013-01-25T11:08:52.937 回答
0

我回答自己,在向导中,如果我放置按钮类型对象而不是按钮类型工作流,​​并且那里触发 wf 工作(不关闭),但这是正确的路径吗?

如果有人需要这是我的对象按钮事件代码(用于我的picking.import.wizard 向导):

def signal_import_load_2(self, cr, uid, ids, context=None):
    import netsvc

    wf_service = netsvc.LocalService("workflow")
    wf_service.trg_validate(uid, 'picking.import.wizard', ids[0], 'signal_import_load', cr)

    view_id = self.pool.get('ir.ui.view').search(cr,uid,[('model','=','picking.import.wizard'), ('name','=','Wizard import picking from CSV')])

    return {
         'type': 'ir.actions.act_window',
         'name': "Import",
         'res_model': 'picking.import.wizard',
         'res_id': ids[0],
         'view_type': 'form',
         'view_mode': 'form',
         'view_id': view_id,
         'target': 'new',
         'nodestroy': True,
           }
于 2013-02-21T14:19:39.307 回答