OpenERPアクションで特定のレコードのフォームビューを直接開く魔法の(そしておそらく文書化されていない)方法は、res_id
アクションに追加の属性を設定することです。
残念ながら、OpenERP 6.1 [1]では、res_id
属性はact_window
データモデルの一部ではないため、XML宣言で直接設定することはできません。
ほとんどの公式アドオンは、返されたアクションの属性<button type="object" ... />
を設定するPythonメソッドへのバインドを使用します。res_id
公式モジュールのソースコードでこの例を見つけるのは非常に簡単であり、この関連する質問で1つ見ることができます。
クイック/未テストの例:
school.schedule
これをフォームに追加します。
<button name="open_student_form" type="object" string="Student"/>
そして、school.schedule
モデルの次のメソッド:
def open_student_form(self, cr, uid, ids, context=None):
this = self.browse(cr, uid, ids, context=context)[0]
return {
'type': 'ir.actions.act_window',
'name': 'Student',
'view_mode': 'form',
'view_type': 'form',
'res_model': 'school.student',
'nodestroy': 'true',
'res_id': this.student.id, # assuming the many2one is (mis)named 'student'
'views': [(False, 'form')],
}
「サイドバーボタン」を使用して(つまり、を使用して)これを本当に実行したい場合は<act_window/>
、サイドバーボタンをPythonメソッドに直接バインドできないため、少し注意が必要です。データベースに保存されているアクションにバインドする必要があります。ただし、たとえば、にバインドしてPythonメソッドを呼び出すか、同様のことを行うir.actions.server
アクションを介して、引き続き実行できます。<act_window/>
の秘訣は、アクションディクショナリを変数ir.actions.server
に割り当てることで動的アクション定義を返すことができるPythonブロックとして定義できることです。action
そのパスをたどりたい場合は、OpenERPアドオンのソースコードを検索して、属性ir.actions.server
を持つアクションを返すメソッド(一部は同様のことを行う可能性があります)の宣言を探します。res_id
[1] OpenERP 7.0以降、res_id
列はデータモデルで明示的に使用できるため、直接設定できます。