2017-08-04 1 views
1

Je suis en train de faire état: A ou (B et C)Odoo multiple état dans l'erreur de domaine

mon code:

<field name="x" attrs="{'readonly': ['|',('state','!=', 'ok'), (('state', '=', 'fine'), ('participate_process', '=', False))]}" > 

Je suis erreur js du web:

Error: unknown field state,=,to_approve_second domain ["|",["state","!=","ok"],[["state","=","fine"],["participate_process","=",false]]] 

Également j'essayais d'une autre manière:

<field name="x" attrs="{'readonly': ['|', '&amp;', ('state','!=', 'ok'), ('state', '=', 'fine'), ('participate_process', '=', False)]}" > 

Mais cela ne fonctionne pas ..

Quel est le problème avec ces domaines multiples?

Répondre

2

Bonjour fueggit,

OpenERP utilise la notation polonaise pour les filtres de domaine.

D'abord, vous devez comprendre ce qu'est la notation polonaise. Vous pouvez trouver des informations détaillées dans wikipedia sur la notation polonaise. http://en.wikipedia.org/wiki/Polish_notation

A propos de votre question

(A OR B) AND (C OR D OR E) 

doit convertir la notation polonaise

AND OR A B OR OR C D E 

et doit être résolu par l'algorithme avec l'ordre suivant [] représente le fonctionnement

AND [OR A B] OR OR C D E   Result of [OR A B] is F 

AND F OR [OR C D] E    Result of [OR C D] is G 

AND F [OR G E]     Result of [OR G E] is H 

[AND F H] 

il commence à GAUCHE à Droite. Si un autre opérateur est trouvé avant la découverte de deux opérandes, alors l'ancien opérateur est mis de côté jusqu'à ce que ce nouvel opérateur soit résolu, ce processus se répète jusqu'à ce qu'un opérateur soit résolu, ce qui doit arriver finalement, car il doit y en avoir un autre. opérande qu'il n'y a d'opérateurs dans une déclaration complète. " De l'article wikipedia.

vous pouvez également utiliser dans l'opérateur au lieu d'écrire trois tuples séparés par l'opérateur OR comme

['&',('field2', 'in', ['A', 'B']),('state', 'in', ['open', 'closed', 'draft'])] 

Solution

<field name="x" attrs="{'readonly': [('participate_process', '=', False),'|',('state','!=', 'ok'),('state', '=', 'fine')]}" > 

OU

<field name="x" attrs="{'readonly': ['&',('participate_process', '=', False),'|',('state','!=', 'ok'),('state', '=', 'fine')]}" > 

J'espère que ma réponse est utile.
Si n'importe quelle requête ainsi commenter s'il vous plaît.

+0

Bonjour fueggit, vérifiez ma réponse si l'aide est complète alors acceptez la réponse. –

+0

Bonjour, donc c'est la même chose pour ma solution, oui? Juste la syntaxe est un peu différente. – fueggit

+0

Oui aussi vrai mais utiliser polonais Notation ......

0

Je trouve la décision:

<field name="x" attrs="{'readonly': [('participate_process', '=', False), ('state', '=', 'fine'), '|', ('state','!=', 'ok')]}" > 
1

Il devrait être:

<field name="x" attrs="{'readonly': ['|', ('state', '=', 'ok'), '&amp;', ('state', '=', 'fine'), ('participate_process','=', False)]}" > 
1

Vous devriez également écrire comme ça,

<field name="x" attrs="{'readonly': [('participate_process', '=', False), '|', ('state', '=', 'fine'), ('state','!=', 'ok')]}" > 

il sera converti en comme ça.

Where participate_process = False and 
(state = 'fine' or state != 'ok')