Jos olet käyttänyt aikaa Odoon konfiguroimiseen, olet todennäköisesti törmännyt domain-lausekkeisiin. Nämä sulkujen täyttämät suodatin ehdot ilmestyvät toimintopainikkeissa, automaattisissa säännöissä, tietue-säännöissä ja sähköpostipohjissa koko alustalla. Mutta harvempi tajuaa, että Odoo tarjoaa myös erillisen Domain-kenttätyypin ORM:ssaan, joka on suunniteltu erityisesti näiden lausekkeiden tallentamiseen ja näyttämiseen rakenteellisena tietona.
Domain-kenttien ymmärtäminen on tärkeää, olitpa sitten Odoo-kehittäjä, joka rakentaa mukautettuja moduuleja, tai liiketoimintakäyttäjä, joka konfiguroi automatisoituja työnkulkuja. Tämä opas kattaa kaiken siitä, mitä domain-kenttä oikeastaan tallentaa käytännön esimerkkeihin, kehitysvinkkeihin ja yleisimpiin virheisiin, joita kannattaa välttää.
Mikä on Domain-kenttä Odoossa
Odoossa domain on suodatin ehtojen lista, jota käytetään tietueiden kyselyyn. Se noudattaa tiettyä syntaksia, joka käyttää tuplia ja loogisia operaattoreita, ja se vastaa suoraan SQL WHERE -lausekkeita, kun Odoo suorittaa tietokantakyselyn.
Tyypillinen domain-lauseke näyttää tältä:
[('customer_rank', '>', 0), ('active', '=', True)]
Tämä tarkoittaa: palauta kaikki tiedot, joissa customer_rank on suurempi kuin 0 JA active on tosi.
Domain-kenttä (fields.Domain) on Odoo ORM:ssä kenttätyyppi, joka tallentaa nämä lausekkeet rakenteellisena tietona tietueen sisällä. Toisin kuin tavallisessa tekstikentässä, siinä on sisäänrakennettu validointi ja omistettu UI-widget, joka antaa käyttäjille mahdollisuuden rakentaa suodatinoloja visuaalisesti ilman koodin kirjoittamista.
Miten se näkyy käyttöliittymässä
Odoo-käyttöliittymässä Domain-kenttä renderöidään oletusarvoisesti domain-editori-widgetillä. Tämä widget esittää visuaalisen sääntöjen rakentajan, jossa käyttäjät voivat valita kentän, valita operaattorin (yhtä suuri, sisältää, suurempi kuin jne.) ja syöttää arvon. Se on sama käyttöliittymä, jonka näet määrittäessäsi käyttöoikeussääntöjä tai suodatinperusteita automatisoiduissa toiminnoissa.
Tietokannassa domain-arvot tallennetaan tavallisena tekstinä, erityisesti Python-listan merkkijonoesityksenä. Kenttätyyppi käsittelee sarjallistamista ja validointia läpinäkyvästi, joten kehittäjät työskentelevät puhtaiden domain-arvojen kanssa Pythonissa, kun taas tallennuskerros hoitaa loput.
Tämä on osa laajempaa Odoo-tietomallin suunnittelua: kentät eivät ole vain tallennusastioita. Ne kantavat semanttista merkitystä, käyttöliittymäkäyttäytymistä ja validointilogiikkaa yhdessä määritelmässä.
Kuinka kenttä toimii
Domain-kenttä integroituu tiiviisti Odoo ORM:ään ja tietueiden suodatusjärjestelmään. Tässä on, mitä tapahtuu taustalla, kun tallennat ja arvioit domainin.
Tallennus ja esitys
Kun domain tallennetaan tietokantaan, Odoo tallentaa sen sarjallistettuna merkkijonona. Domain, joka rajoittaa tietueita luonnostilaan nykyiselle käyttäjälle, tallennetaan tekstiarvona, jonka Odoo arvioi kyselyaikana. Erityinen muuttuja uid ratkaistaan nykyiseksi käyttäjä-ID:ksi ajonaikana, mikä mahdollistaa dynaamisen suodattamisen ilman arvojen kovakoodaamista.
Odoo ORM ottaa tämän merkkijonon, arvioi sen turvallisesti ja muuntaa sen SQL WHERE -lauseeksi. Tämä arviointi tapahtuu safe_eval:n kautta, joka tukee hallittua alijoukkoa Python-lausekkeista yhdessä Odoo-spesifisten kontekstimuuttujien kanssa.
Domain-widget
Odoo-käyttöliittymässä fields.Domain-tyyppiset kentät käyttävät oletusarvoisesti domain-widgettiä. Tämä widget esittää suodatinrakentajan, jonka näet monilla Odoo:n osa-alueilla. Käyttäjät voivat lisätä ehtoja, yhdistää niitä JA- tai TAI-logiikalla ja esikatsella tuloksia ilman, että heidän tarvitsee koskea mihinkään koodiin.
Widget on tekee aluekentistä aidosti saavutettavia liiketoimintakäyttäjille. Sinun ei tarvitse ymmärtää alue syntaksia määrittääksesi suodattimen. Visuaalinen rakentaja hoitaa käännöksen puolestasi.
Malli konteksti
Aluekenttä voidaan liittää tiettyyn malliin, joka kertoo Odoolle, mitkä kentät tarjotaan alueen rakentajassa. Määrität tämän model_field attribuutin avulla kenttä määritelmässä. Ilman mallikontekstia aluewidgetti palautuu tavalliseksi tekstikentäksi, joka on huomattavasti vähemmän hyödyllinen loppukäyttäjille.
Tämä kontekstin sitominen on keskeinen osa sitä, miten Odoo-kehys yhdistää kenttä määritelmät käyttöliittymän käyttäytymiseen. Kenttä tietää, mistä mallista se suodattaa, ja käyttöliittymä mukautuu sen mukaan.
Vuorovaikutus muiden tietueiden kanssa
Aluekenttiä käytetään usein rinnakkain suhteellisten kenttien kanssa rajoittamaan, mitkä tietueet näkyvät Many2one avattavassa valikossa, määrittämään, mitkä tietueet automaattinen toiminto kohdistaa, tai asettamaan raportin tai hallintapaneelin laajuus. Alueilmaisu toimii elävänä suodattimena, joka sovelletaan ORM-tasolla, mikä tarkoittaa, että se kunnioittaa Odoon turvallisuus sääntöjä ja kenttä käyttöoikeusvalvontaa.
Liiketoimintakäyttötapaukset
Aluekenttiä esiintyy käytännössä jokaisessa Odoo-moduulissa. Tässä on viisi todellista esimerkkiä, jotka osoittavat, kuinka ne ohjaavat käytännön liiketoimintatyönkulkuja.
1. Automaattiset toiminnot ja sähköpostikutsut
Kun määrität automaattisen toiminnon Odoossa (Asetukset > Tekniset > Automaatio), määrität alueen, joka tarkentaa, mitkä tietueet laukaisevat toiminnon. Esimerkiksi automaattinen sähköposti erääntyneistä laskuista saattaa kohdistaa vain julkaistuihin laskuihin, jotka ovat maksamatta ja eräpäivän ylittäneet. Tämä alue tallennetaan suoraan base.automation malliin aluekentässä nimeltä filter_domain. Toiminto aktivoituu vain tietueille, jotka vastaavat.
2. Tietue säännöt ja käyttöoikeuden hallinta
Odoon turvallisuus tietue säännöt käyttävät aluekenttiä rajoittamaan, mitkä tietueet käyttäjäryhmä voi nähdä tai muokata. Myyntitiimin sääntö saattaa rajoittaa näkyvyyttä tietueisiin, jotka on osoitettu nykyiselle käyttäjätiimille, arvioituna kyselyhetkellä. Tämä antaa sinulle rivikohtaisen turvallisuuden ilman, että sinun tarvitsee kirjoittaa mukautettua koodia. Jokainen suodatin jokaisessa tietue säännössä Odoossa on alueilmaisu, joka on tallennettu aluekenttään.
3. Varaston ja toimintojen suodatus
Varasto- ja inventaariohallinnassa aikataulutetut toimet ja uudelleentilaussäännöt käyttävät alueita kohdistamaan tiettyihin tuotekategorioihin, sijainteihin tai varastotasoihin. Automaattinen uudelleentilaustoiminto voidaan rajata varastoitaviin tuotteisiin, joiden saatavilla oleva määrä on tai alle uudelleentilauspisteen, estäen tarpeettoman käsittelyn tuhansissa tiedoissa.
4. CRM-putki ja liidien kvalifiointi
CRM-moduulissa putkivaiheen automaatio, aktiviteettisäännöt ja liidien jakaminen kaikki perustuvat alueilmaisuun liidien luokittelemiseksi ja kvalifioimiseksi. Mukautetut liidien jakosäännöt käyttävät alueita yhdistämään liidit oikealle myyjälle maan, toimialan tai kauppakoon perusteella. Aluekenttä on se, mikä tekee näistä säännöistä konfiguroitavia käyttöliittymästä sen sijaan, että vaadittaisiin koodimuutoksia jokaista uutta skenaariota varten.
5. Dynaamiset Many2one-pudotusvalikot
Mukautetuissa lomakkeissa alue, joka on sovellettu Many2one-kenttään, hallitsee, mitkä tiedot näkyvät pudotusvalikossa. Toimittajakentän rajaaminen näyttämään vain aktiiviset toimittajat, joilla on ei-nolla toimittajarankki, luo keskittyneempiä käyttäjäkokemuksia ja vähentää syöttövirheitä. Alue voi olla jopa dynaaminen, viitaten arvoihin muista kentistä samalla lomakkeella, jolloin saatavilla olevat vaihtoehdot muuttuvat käyttäjän valintojen perusteella.
Kentän luominen tai mukauttaminen
Odoossa on kaksi pääasiallista lähestymistapaa työskennellä aluekenttien kanssa: käyttää Odoo Studioa ilman koodia mukauttamiseen tai kirjoittaa Pythonia ja XML:ää mukautetussa moduulissa.
Odoo Studion käyttäminen
Odoo Studio ei tällä hetkellä tarjoa erillistä Aluekenttätyyppiä sen visuaalisessa kenttäluojassa. Useimmissa liiketoimintakonfiguraatiotarpeissa et tarvitse sellaista. Automatisoitujen toimintojen, tietueiden sääntöjen ja palvelintoimintojen sisäänrakennetut alueeditorit tarjoavat sinulle visuaalisen alueen rakentajan ilman, että tarvitset mukautettua kenttää.
Jos haluat lisätä alueen suodattimen Many2one-kenttään lomakkeessa, voit tehdä sen Studiolla muokkaamalla kenttäominaisuuksia ja syöttämällä alueilmaisu suoraan. Studio validoi alueen syntaksin ja tallentaa sen näkymä määrittelyyn.
Tekninen mukauttaminen Pythonissa
Mukautetussa Odoo-moduulissa aluekentän lisääminen on suoraviivainen osa standardia odoo kehittäjän opasta. Tässä on perusesimerkki, joka käyttää ORM:ää:
from odoo import models, fields
class MyModel(models.Model):
_name = 'my.model'
model_name = fields.Char(default='res.partner')
filter_domain = fields.Domain(
string='Suodatinalue',
model_field='model_name',
help='Alueilmaisu kumppanitietueiden suodattamiseen'
)
Attribuutti model_field yhdistää domain-editorin mallin nimeen, joka on tallennettu model_name-kenttään. Tämä kertoo domain-widgetille, mitkä kentät tarjotaan visuaalisessa rakentajassa. Mallin nimen pitäminen erillisessä kentässä mahdollistaa myös dynaamisen mallin valinnan, jos käyttötapasi sitä vaatii.
Widgetin lisääminen lomakenäkymään
Näyttääksesi domain-rakentajan lomakenäkymässä, viittaa sekä mallikenttään että domain-kenttään näkymän XML:ssä:
<field name="model_name" invisible="1"/>
<field name="filter_domain" widget="domain"
options="{'model': 'model_name'}"/>
Ilman widget="domain"-ilmoitusta ja mallivaihtoehtoa kenttä renderöidään tavallisena tekstinä. Sisällytä aina molemmat, kun rakennat lomakkeita, jotka altistavat domain-konfiguraation käyttäjille.
Domain-arvojen kirjoittaminen XML-RPC API:n kautta
Jos asetat domain-kenttäarvoja ohjelmallisesti API:n kautta, siirrä arvo aina merkkijonona:
models.execute_kw(db, uid, api_key, 'my.model', 'write',
[[record_id], {
'filter_domain': "[('active', '=', True)]"
}]
)
Python-listaobjektin välittäminen merkkijonon sijaan on yleinen virhe, joka aiheuttaa virheitä tai hiljaisia epäonnistumisia Odoo-version mukaan. Sarjoita aina domain merkkijonoksi ennen sen kirjoittamista API:n kautta.
Parhaat käytännöt
Nämä käytännön tavat säästävät aikaasi ja estävät ongelmia työskennellessäsi domain-kenttien kanssa Odoossa.
Vahvista domain-syntaksi ennen käyttöönottoa
Virheellinen domain-lauseke aiheuttaa virheitä heti, kun Odoo yrittää arvioida sitä. Testaa domainisi Odoo-hakupalkissa tai kehittäjätilassa ennen niiden tallentamista automatisoituihin toimintoihin tai tietueiden sääntöihin. Nopea search_count-kutsu API:n kautta on myös luotettava tapa varmistaa, että domain palauttaa odotetun määrän tietueita.
Käytä dynaamisia muuttujia, kun se on mahdollista
Vältä käyttäjä-ID:iden, yritys-ID:iden tai päivämäärien kovakoodamista domain-ilmaisuissa. Käytä sen sijaan dynaamisia muuttujia kuten uid, context_today() ja current_company_id. Tämä pitää domainisi siirrettävinä ja estää hiljaista rikkoutumista, kun tietueet muuttuvat ympäristöjen välillä.
Sitouta aina mallin konteksti
Kun lisäät Domain-kentän mukautettuun malliin, aseta aina model_field-attribuutti ja sisällytä se näkymään. Ilman sitä käyttäjät näkevät tavallisen tekstikentän visuaalisen domain-rakentajan sijaan, mikä vähentää käytettävyyttä ja lisää mahdollisuutta, että virheellisiä arvoja tallennetaan.
Pidä domainit luettavina
Monimutkaiset sisäkkäiset domainit, joissa käytetään | (TAI) ja & (JA) -operaattoreita, voivat olla vaikeita lukea ja ylläpitää. Lisää kommentteja Python-koodiisi selittämään kunkin domainin tarkoitus. Jos domainista tulee hyvin monimutkainen, harkitse, olisiko palvelintoiminto tai laskettu kenttä selkeämpi ja helpompi testata.
Käytä safe_eval:ia ohjelmalliseen arviointiin
Kun arvioit domain-merkkijonoja Python-koodissa, esimerkiksi palvelintoiminnossa tai automatisoidussa toiminnossa, käytä Odoo:n sisäänrakennettua safe_eval:ia Pythonin alkuperäisen eval:n sijaan. Se on turvallisempaa, käsittelee Odoo-spesifisiä kontekstimuuttujia oikein ja on johdonmukaista sen suhteen, miten Odoo arvioi domainit sisäisesti.
Testaa realistisilla tiedoilla
Varmista aina, että domainisi vastaa odotettuja tietueita ennen kuin siirryt live-tilaan. Tämä on erityisen tärkeää automatisoiduissa toiminnoissa ja tietue-säännöissä, joissa virheellinen suodatin voi käsitellä vääriä tietueita tai estää käyttäjä pääsyn ilman näkyvää varoitusta.
Yleiset sudenkuopat
Tässä ovat virheet, jotka ilmenevät useimmiten työskennellessä domain-kenttien kanssa Odoo:ssa, ja miten välttää ne.
Sekoitus kenttätyypin ja domain-syntaksin välillä
Sana "domain" tarkoittaa kahta eri asiaa Odoossa. Se viittaa suodatin syntaksiin (tuplalista), ja se viittaa myös fields.Domain:iin, erityiseen ORM-kenttätyyppiin, joka tallentaa nämä lausekkeet datana. Uudet käyttäjät Odoo mukauttamisessa sekoittavat usein nämä kaksi. Domain-kenttä on tallennusastia. Domain-lauseke on suodatinlogiikka sen sisällä.
Listan välittäminen merkkijonon sijaan API:n kautta
Kun kirjoitat Domain-kenttään XML-RPC:n kautta, sinun on välitettävä merkkijono, ei Python-listaobjektia. Domainin välittäminen raakalistana aiheuttaa tyyppivirheen tai hiljaisen epäonnistumisen Odoo-version mukaan. Sarjoita aina domain merkkijonoksi ennen sen kirjoittamista API:n kautta.
Puuttuva mallikonteksti widgetissä
Jos lisäät Domain-kentän lomakenäkymään ilman, että määrität mallikontekstia widgetin asetuksissa, käyttäjät näkevät tavallisen tekstikentän sen sijaan, että visuaalinen domain-rakentaja näkyisi. Domain-rakentaja ilmestyy vain, kun widget tietää, mihin malliin viitata. Muista aina sisällyttää model_field -linkki näkymäsi määrittelyyn.
Kiinteiden tietueiden ID:iden kovakoodaus domaineissa
Domaineissa, jotka viittaavat suoraan tiettyihin tietueiden ID:ihin, tapahtuu hiljainen rikkoutuminen, kun nämä tietueet poistetaan tai kun kopioit konfiguraation uuteen tietokantaan. Käytä dynaamisia viittauksia, kuten uid tai relaatiohakuja aina kun mahdollista, jotta domaineistasi tulee siirrettäviä.
Liian laajat tai rajoittavat tietosääntöjen domaineja
Tietosääntöjen domain, joka on liian salliva, voi altistaa tietueita käyttäjille, jotka eivät saisi nähdä niitä. Liian rajoittava voi hiljaa piilottaa tietueita ilman mitään selitystä käyttäjälle. Testaa aina tietosääntöjen domaineja kohdekäyttäjäryhmän näkökulmasta, ei admin-tililtä, joka ohittaa kaikki säännöt.
Arkistettujen tietueiden unohtaminen
Odoossa arkistoidut tietueet (joissa active = False) suljetaan oletuksena hakutuloksista. Jos domainisi ei ota tätä huomioon, saatat saada odottamattomia aukkoja tietoihisi. Lisää ('active', 'in', [True, False]), kun tarvitset arkistettujen tietueiden sisällyttämistä suodatin tuloksiin.
Yhteenveto
Domain-kentät ovat yksi niistä rakennuspalikoista, jotka hiljaa tukevat suurta osaa siitä, miten Odoo toimii. Pääsyvalvonnasta ja automatisoiduista toiminnoista dynaamisiin alasvetovalikoihin ja kojelaudan suodattimiin, domain-lausekkeet ovat Odoon tietueiden suodattamisen selkäranka, ja fields.Domain -tyyppi antaa kehittäjille puhtaan, validoidun tavan tallentaa ja esittää tätä logiikkaa suoraan Odoo tietomallissa.
Liiketoimintakäyttäjille alue-widget tekee suodatinmäärityksistä saavutettavia ilman koodia. Kehittäjille Domain-kenttätyyppi tuo selkeyttä mallimäärityksiin, jotka ennen perustuivat yleisiin Char-kenttiin widget-yliuudella. Olitpa sitten työskentelemässä Odoo Studiolla, kirjoittamassa mukautettua Python-moduulia tai määrittämässä automatisoituja työnkulkuja käyttöliittymästä, ymmärtäminen siitä, miten aluekentät toimivat, avaa laajan valikoiman mahdollisuuksia.
Tässä oppaassa käsitellyt käsitteet pätevät kaikissa Odoo-versioissa ja -moduuleissa. Aika, jonka käytät aluekenttien ymmärtämiseen, on hyvin sijoitettu, koska ne ovat todella kaikkialla Odoossa.
Tarvitsetko apua Odoo-toteutuksessasi?
Dasolo auttaa yrityksiä toteuttamaan, mukauttamaan ja optimoimaan Odoo heidän erityisiin liiketoimintatarpeisiinsa. Olitpa sitten määrittämässä automatisoituja työnkulkuja, rakentamassa mukautettuja moduuleja tai yrittämässä saada enemmän irti nykyisestä Odoo-asetuksestasi, tiimillämme on teknistä syvyyttä auttaakseen sinua etenemään luottavaisin mielin.
Jos sinulla on kysymyksiä aluekentistä tai mistä tahansa muusta Odoo-toteutuksesi osa-alueesta, ota meihin yhteyttä. Olemme iloisia voidessamme tarkastella asetustasi ja ohjata sinua oikeaan suuntaan.