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 点以上の場合は 1 対多で追加し、別の生徒をもう一度チェックします。同じことが繰り返されます。

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 が機能する場合 (閉じることはありません)、ウィザードで自分自身に返信しますが、それは正しいパスですか?

誰かがこれを必要とする場合、これは私のオブジェクト ボタン イベント コードです (pick.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 に答える