2017-07-13 4 views
3

Wir bekommen Login-Benutzer in Self.env.user, aber ich möchte auf Login-Benutzer in ir.action.act.window zugreifen.Wie können wir einen Login-Benutzer in ir.action.act.window in odoo v10 bekommen?

<record id="act_mail_messages_form_ept_closed" model="ir.actions.act_window"> 
     <field name="name">Closed</field> 
     <field name="res_model">mail.message</field> 
     <field name="domain">[('model','=','res.partner'),('res_id','!=',False),('user.company_id','=',company_id)]</field>   
     <field name="context">{'readonly_by_pass': True,'check_domain':True}</field> 
     <field name="view_type">form</field> 
     <field name="search_view_id" ref="view_message_search"/> 
     <field name="view_mode">tree,form</field> 
    </record>   

Meine Forderung ist, ich will Daten filtern, ohne Aufzeichnung Regel zu erstellen, weil, wenn wir Rekordregel mail.message dann System schaffen wird sehr langsam, da für jeden Datensatz System Rekord Regel überprüfen.

Ich möchte unternehmensweite Nachrichten mit Domain in mail.message filtern.

In mail.message ich habe company_id Feld (Benutzerdefiniertes Feld) und ich möchte Daten filtern, wenn die Aktion aufruft.

Gibt es eine alternative Lösung, Nachrichten zu filtern, ohne eine Datensatzregel zu erstellen, oder gibt es eine Möglichkeit, dass wir auf den Login-Benutzer in ir.action.act.window zugreifen können?

+0

Wie wäre es mit * search_read() * Methode? Wir können den Datensatz auch von dort filtern. –

+0

Haben Sie versucht, '('user.company_id', '=', user.company_id.id)' in Ihrer Domain zu verwenden? Ich bin mir nicht sicher, ob die Domain-Auswertung die Verwendung von 'user' erlaubt. – CZoellner

Antwort

1

, wenn Sie nur die ID des Benutzers müssen Sie Domain: verwenden uid

Wenn Sie eine Datensätze mit einem komplexen Bereich filtern möchten, die nicht don mit der Aktion sein, dann sollten Sie verwenden ir.actions.server:

XML :

<record id="action_mail_closed" model="ir.actions.server"> 
    <field name="name">Closed</field> 
       <!-- here the name of the module containing mail_message model--> 
    <field name="model_id" ref="module_name.mail_message"/> 
    <field name="state">code</field> 
    <field name="code">action = model.open_closed()</field> 
    <field eval="True" name="condition"/> 
</record> 

Python:

@api.model 
def open_closed(self): 
    # here you can filter you records as you want 
    records = self.env... search(...) 
    search_view_id = self.env.ref('module_name.view_message_search') 
    return { 
     'name': _('Closed'), 
     'type': 'ir.actions.act_window', 
     'view_type': 'form', 
     'view_mode': 'tree,form', 
     'res_model': 'mail.message', 
     'search_view_id': search_view_id.id, 
     'target': 'current', 
     'context': {'readonly_by_pass': True,'check_domain':True}, 
     # and here show only your records make sure it's not empty 
     'domain' : [('id', 'in', records.ids)] 
     } 
+0

Danke ich werde versuchen & zurück zu dir .. –

+0

sollte funktionieren gibt es ein Beispiel in CRM-Modul: Überprüfen Sie Action-ID: 'action_your_pipeline' in odoo 10.0 – Cherif

+0

Dies ist Server-Aktion, aber ich möchte in ir.action.act.window tun .. –

0

Ich war in einer ähnlichen Situation, in der ich Domäne hinzufügen musste, um nur die Ergebnisse in der Baumstruktur anzuzeigen, die für den angemeldeten Benutzer relevant sind. Das hat bei mir funktioniert.

XML

<field name="domain">[('cmp_id','=',uid)]</field> 

Python:

cmp_id = fields.Many2one('module.company', related='user_id.company_id') 

Hier Modul ist das benutzerdefinierte Modul, das Sie für Unternehmen gemacht haben, CMP_ID ein Many2one Feld ist die verwandt ist an die Firmen-ID über user_id.

Verwandte Themen