Jos olet käyttänyt Odoota asetusten kanssa, olet todennäköisesti nähnyt ehto- tai suodatinlausekkeita, jotka on kirjoitettu hakasulkeisiin. Nämä suodattimet ovat läsnä toimintonapeissa, automaatiosäännöissä, tietueiden käyttöoikeuksissa ja sähköpostimalleissa. Vähemmän tunnettu seikka on, että Odoo tarjoaa myös erityisen ORM-kenttätyypin nimeltä Domain, jonka tarkoitus on tallentaa ja näyttää nämä suodattimeksi tarkoitetut lausekkeet rakenteellisena datana.
Domain-kentän perusteiden ymmärtäminen on hyödyllistä sekä kehittäjälle, joka rakentaa moduuleja, että loppukäyttäjälle, joka määrittää työnkulkuja. Tämä opas selittää, mitä kenttä säilöö, miten sitä käytetään käytännössä, miten sen voi lisätä tai muuttaa ja mitkä sudenkuopat kannattaa välttää.
Mikä on Domain-kenttä Odoossa
Odoossa domain on sarja suodattanehtoja, joiden avulla haetaan tietueita. Se noudattaa tiettyä syntaksia (tupleja ja loogisia operaattoreita) ja kääntyy Odoossa ajettaessa suoraan SQL:n WHERE-ehtoon.
Esimerkkidomain voi näyttää tältä:
[('customer_rank', '>', 0), ('active', '=', True)]
Tämä tarkoittaa: palauta kaikki tietueet, joiden customer_rank on suurempi kuin 0 JA kenttä active on True.
Domain-kenttä (fields.Domain) on ORM-kenttätyyppi, joka tallentaa nämä suodatinlausekkeet rakenteellisena arvona. Toisin kuin pelkkä tekstikenttä, se sisältää validoinnin ja käyttöliittymäkomponentin, jonka avulla käyttäjä voi rakentaa suodattimia visuaalisesti ilman koodausta.
Kuinka se näkyy käyttöliittymässä
Käyttöliittymässä Domain-kenttä renderöityy oletuksena domain-editorin avulla. Editorissa käyttäjä voi valita kentän, operaattorin (esim. yhtäsuuri, sisältää, suurempi kuin) ja arvon. Sama editori nähdään myös pääsynhallinnan ja automaatioiden ehdonmuodostuksessa.
Tietokannassa domain-arvot tallennetaan tekstimuotoisena — Python-listan merkkijonoesityksenä. Kenttä huolehtii sarjallistamisesta ja validoinnista niin, että kehittäjä käsittelee puhtaita domain-arvoja Pythoniin silloinkin, kun säilytys tapahtuu tekstinä.
Tämä heijastaa Odoon tietomallin filosofiaa: kenttä ei ole vain säilö, vaan sisältää myös semantiikan, käyttöliittymäkäytöksen ja validointisäännöt samassa määritelmässä.
Miten kenttä toimii
Domain-kenttä on tiukasti integroitu Odoon ORM:ään ja suodatusjärjestelmään. Alla on, mitä tapahtuu taustalla tallennettaessa ja arvioitaessa domainia.
Tallennus ja esitys
Kun domain tallennetaan, Odoo säilöö sen sarjallistettuna tekstinä. Domain joka rajoittaa tietueet esimerkiksi nykyisen käyttäjän luonnostilaan tallennetaan tekstinä, ja erikoismuuttuja kuten uid ratkaistaan ajohetkellä, jolloin suodatus pysyy dynaamisena ilman kovakoodattuja arvoja.
ORM ottaa tallennetun merkkijonon, arvioi sen kontrolloidusti ja muuntaa sen SQL WHERE -lauseeksi. Tämä tapahtuu Odoon safe_eval-mekanismilla, joka tukee rajoitettua osajoukkoa Python-lausekkeista ja Odoo-spesifejä kontekstimuuttujia.
Domain-widget
Domain-tyyppiset kentät käyttävät oletuksena domain-widgetiä, joka tarjoaa graafisen suodattimen rakentajan. Käyttäjä voi lisätä ehtoja, yhdistää ne AND/OR-logiikalla ja esikatsella hakutuloksia ilman, että tarvitsee kirjoittaa domain-syntaksia käsin.
Tämä widget tekee domaineista helposti lähestyttäviä liiketoimintakäyttäjille: suodattimen rakentamiseen ei tarvita syvää teknistä osaamista, koska visuaalinen editori hoitaa käännöksen taustalla.
Mallikonteksti
Domain-kenttään voi liittää mallin kontekstin, joka kertoo, mitä kenttiä editori tarjoaa suodatusehdoksiin. Tätä hallitaan kentän määritelmässä model_field-attribuutilla. Ilman mallikontekstia widget putoaa pelkkään tekstikenttään, mikä heikentää käyttökokemusta.
Tämä sidonta malliin on keskeinen tapa, jolla Odoon kehys yhdistää kenttämäärittelyt käyttöliittymän käyttäytymiseen: kenttä tietää, mitä se suodattaa, ja editori mukautuu sen mukaan.
Vuorovaikutus muiden tietueiden kanssa
Domain-kenttiä käytetään usein yhdessä relaatioiden kanssa: rajoittamaan, mitä vaihtoehtoja näkyy Many2one-valikossa, määrittämään automatisoidun toiminnon kohteet tai rajaamaan raportin tai hallintapaneelin näkyvyyttä. Koska suodatus tapahtuu ORM-tasolla, se huomioi myös Odoon tietoturvasäännöt ja kenttäoikeudet.
Liiketoimintatapaukset
Domain-kenttiä käytetään lähes kaikissa Odoon moduuleissa. Tässä viisi käytännön esimerkkiä siitä, miten ne tukevat liiketoimintaprosesseja.
1. Automaatiot ja sähköpostikäynnistimet
Automaatiossa määrittelet domainin, jolla kerrotaan, mitkä tietueet laukaisevat toiminnon. Esimerkiksi myöhässä oleville laskuille lähetettävä automaatti-sähköposti voidaan kohdistaa ainoastaan julkaistuihin, maksamattomiin laskuihin, joilla eräpäivä on mennyt. Tämä suodatin tallennetaan automaation mallille Domain-kenttään, ja toiminto ajetaan vain niille tietueille, jotka täsmäävät.
2. Tietueraulut ja käyttöoikeudet
Käyttöoikeussäännöt käyttävät domaineja rajoittaakseen, mitä tietueita käyttäjäryhmä näkee tai muokkaa. Esimerkiksi myyntitiimin sääntö voi näyttää vain heidän omat tilauksensa, arvioituna kyselyhetkellä. Näin saat rivi- eli row-tason turvallisuuden ilman lisäkoodia; jokainen rajoite tallennetaan domain-ilmaisuna Domain-kenttään.
3. Varaston ja operaatioiden suodatus
Varastonhallinnassa ajastetut toiminnot ja uudelleenosto-säännöt käyttävät domaineja kohdistamaan tuotteita tiettyihin kategorioihin, sijainteihin tai varastotasoihin. Esimerkiksi automaattinen täydennys voidaan rajata varastoitaviin tuotteisiin, joiden määrä on pienempi tai yhtä suuri uudelleenostoarvon kanssa, mikä estää tarpeettomat toimenpiteet tuhansien tuotteiden yli.
4. CRM-putki ja liidien luokittelu
CRM:ssä putken automaatio, aktiviteettisäännöt ja liidien jakaminen perustuvat domaineihin, jotka yhdistävät liidit oikeille myyjille maantieteellisen sijainnin, toimialan tai kaupan koon perusteella. Domain-kenttä tekee näistä säännöistä muokattavia suoraan käyttöliittymästä ilman jatkuvia koodimuutoksia.
5. Dynaamiset Many2one-valikot
Lomakkeissa domain rajoittaa, mitä vaihtoehtoja näkyy Many2one-valikossa. Esimerkiksi toimittajakenttä voidaan rajata näyttämään vain aktiiviset toimittajat, joilla on ei-nolla supplier_rank — näin lomakkeesta tulee selkeämpi ja virheiden mahdollisuus pienenee. Domain voi viitata myös muihin kenttiin samalla lomakkeella, jolloin vaihtoehdot päivittyvät käyttäjän valintojen perusteella.
Kentän luominen ja muokkaus
Domain-kenttien kanssa on kaksi käytännöllistä työskentelytapaa: tehdä muokkauksia Odoo Studion kautta ilman koodia tai lisätä kenttiä ja logiikkaa custom-moduulissa Pythonilla ja XML:llä.
Odoo Studio -vaihtoehto
Odoo Studio ei tarjoa suoraan erillistä Domain-kenttää visuaaliseen kentänluontiin, mutta useimpiin liiketoiminnan tarpeisiin Studio tarjoaa valmiit domain-editorit automaatioissa ja käyttöoikeuksissa. Näin ei välttämättä tarvitse lisätä erillistä kenttää.
Jos haluat rajata Many2one-kenttää lomakkeessa Studion kautta, voit muokata kentän ominaisuuksia ja lisätä domain-lausekkeen suoraan näkymään. Studio tarkistaa syntaksin ja tallentaa suodatteen näkymän määrittelyyn.
Tekninen muokkaus Pythonilla
Custom-moduulissa Domain-kentän lisääminen on suoraviivaista ja osa normaalia Odoo-kehitystä. Alla on yksinkertainen esimerkki ORM-määrittelystä:
from odoo import models, fields
class MyModel(models.Model):
_name = 'my.model'
model_name = fields.Char(default='res.partner')
filter_domain = fields.Domain(
string='Filter Domain',
model_field='model_name',
help='Domain expression to filter partner records'
)
Tässä model_field osoittaa, mistä kentästä haetaan mallin nimi, jolloin editori tietää, mitä kenttälistauksia näyttää. Mallin nimen säilyttäminen erillisessä kentässä mahdollistaa myös dynaamisen mallin valinnan tarpeen vaatiessa.
Widgetin lisääminen lomakenäkymään
Näyttääksesi domain-editorin lomakkeella, 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"-attribuuttia ja model-asetusta kenttä renderöityy pelkkänä tekstinä. Muista molemmat, kun haluat antaa käyttäjille visuaalisen domain-työkalun.
Domain-arvon kirjoittaminen XML-RPC-rajapinnan kautta
Jos asetat domain-arvoja ohjelmallisesti API:n kautta, lähetä arvo aina merkkijonona:
models.execute_kw(db, uid, api_key, 'my.model', 'write',
[[record_id], {
'filter_domain': "[('active', '=', True)]"
}]
)
Yleinen virhe on lähettää Python-lista objektina merkkijonon sijaan; se voi johtaa virheisiin tai hiljaisiin epäonnistumisiin Odoo-version mukaan. Sarjallista domain aina merkkijonoksi ennen API-kirjoitusta.
Hyvät käytännöt
Seuraavat käytännön tavat säästävät aikaa ja ehkäisevät ongelmia domain-kenttien kanssa työskennellessä.
Tarkista domain-syntaksi ennen käyttöönottoa
Virheellinen domain aiheuttaa virheen heti, kun Odoo yrittää arvioida sen. Testaa domaineja Odoon hakurivillä tai kehittäjätilassa ennen kuin tallennat ne automaatioihin tai käyttöoikeussääntöihin. Myös search_count-kutsu API:n kautta kertoo nopeasti, palauttaako domain odotetun määrän tietueita.
Käytä dynaamisia muuttujia
Vältä kovakoodattujen käyttäjä- tai yritystunnusten tai päivämäärien käyttöä domainissa. Hyödynnä muuttujia kuten uid, context_today() ja current_company_id. Näin domainit pysyvät siirrettävinä eri ympäristöjen välillä.
Sido aina mallikonteksti
Lisätessäsi Domain-kenttää räätälöityyn malliin, määrittele model_field ja sisällytä se näkymään. Ilman tätä käyttäjät näkevät vain tekstikentän, mikä heikentää käytettävyyttä ja kasvattaa virheellisten arvojen riskiä.
Pidä domainit luettavina
Monimutkaiset sisäkkäiset domainit OR- ja AND-operaattoreilla voivat muuttua hankaliksi ylläpitää. Dokumentoi Python-koodissa domainien tarkoitus. Jos domain kasvaa liian monimutkaiseksi, harkitse palvelintoimintoa (server action) tai laskettua kenttää, jotka ovat helpommin testattavia.
Käytä safe_eval:ia ohjelmalliseen arviointiin
Arvioitaessa domain-merkkijonoja Pythonissa, käytä Odoon safe_eval-apua eikä Pythonin natiivista eval-funktiota. Se on turvallisempi, käsittelee Odoo-kontekstimuuttujia oikein ja vastaa Odoon sisäistä arviointitapaa.
Testaa realistisilla datoilla
Varmista aina, että domain palauttaa odotetut tietueet ennen tuotantoon siirtymistä. Tämä on erityisen tärkeää automaatioissa ja käyttöoikeussäännöissä, joissa väärä suodatin voi käsitellä vääriä tietueita tai estää käyttäjän pääsyn ilman näkyvää virheilmoitusta.
Yleisiä sudenkuoppia
Seuraavassa yleisimmät virheet domain-kenttien kanssa ja miten ne voi välttää.
Kenttätyypin ja domain-syntaksin sekoittaminen
Sana domain viittaa Odoossa kahteen eri asiaan: suodatinlausekkeeseen (listaan tuplia) ja fields.Domain-kenttätyyppiin, joka säilöö nämä lausekkeet. Aloittelijat sekoittavat usein nämä: Domain-kenttä on pelkkä säilö, domain-ilmaisu on sen sisältämä suodatinlogiikka.
Listan lähettäminen merkkijonon sijaan API:ssa
Kun kirjoitat Domain-kenttään XML-RPC:llä, muista lähettää arvo merkkijonona, ei Python-listana. Väärä tyyppi voi johtaa virheisiin tai siihen, ettei arvo tallennu.
Mallikontekstin puuttuminen widgetistä
Jos lisäät Domain-kentän lomakkeeseen ilman model-asetusta widgetin optioneissa, käyttäjä näkee vain tekstikentän eikä visuaalista rakentajaa. Domain-editori tulee näkyviin vain, kun widget tietää, mitä mallia se suodattaa.
Kovakoodatut tietueiden tunnisteet domainissa
Domainit, jotka viittaavat suoraan tietue-ID:hin, rikkoutuvat helposti, kun tiedot muuttuvat tai siirrät konfiguraation uuteen tietokantaan. Käytä dynaamisia viittauksia kuten uid tai relatiivisia hakuja, jotta domaineista tulee kestävämpiä.
Liian laajat tai liian rajatut käyttöoikeussääntöjen domainit
Liian löysä sääntö voi paljastaa tietoja väärille käyttäjille, liian tiukka sääntö voi piilottaa tietoja ilman selitystä. Testaa aina sääntöjä loppukäyttäjän roolissa, älä ylläpitäjän tilassa, joka ohittaa säännöt.
Arkistoitujen tietueiden unohtaminen
Odoon oletushaku jättää arkistoidut tietueet pois (active = False). Jos haluat sisällyttää arkistoidut, lisää domainiin esimerkiksi ('active','in',[True,False]), muuten saatat huomata puuttuvia rivejä raportissa.
Yhteenveto
Domain-kentät ovat yksi Odoon perusrakenteista, jotka tukevat paljon järjestelmän toiminnallisuuksia. Pääsynhallinnasta ja automaatioista dynaamisiin valikkoihin ja paneelisuodattimiin — domain-ilmaisut ovat Odoon suodatusmoottorin selkäranka, ja fields.Domain tarjoaa kehittäjille puhtaan ja validoidun tavan tallentaa ja näyttää tämän logiikan.
Liiketoimintakäyttäjälle domain-widget mahdollistaa suodattimien määrittelyn ilman koodia. Kehittäjälle Domain-kenttä tuo selkeyttä mallimäärittelyihin verrattuna aiempaan käytäntöön, jossa käytettiin yleispäteviä Char-kenttiä widget-ylikirjoituksella. Olitpa Odoo Studion käyttäjä, custom-kehittäjä tai vastuuhenkilö automaatioiden määrittelyssä, domainien ymmärtäminen avaa paljon mahdollisuuksia.
Nämä periaatteet pätevät läpi Odoo-versioiden ja moduulien. Ajan investointi domain-kenttien opetteluun maksaa itsensä takaisin, koska niitä löytyy käytännössä joka paikasta Odoossa.
Tarvitsetko apua Odoo-implementaatiossasi?
Dasolo auttaa yrityksiä ottamaan Odoon käyttöön, räätälöimään ja optimoimaan sitä liiketoimintatarpeiden mukaan. Olipa kyse automaatioiden pystytyksestä, custom-moduulien rakentamisesta tai olemassa olevan ympäristön tehostamisesta, tiimillämme on osaamista viedä projekti seuraavalle tasolle.
Jos sinulla on kysymyksiä Domain-kentistä tai muusta Odoo-implementaation osa-alueesta, ota yhteyttä meihin. Tutustumme mielellämme ympäristöösi ja neuvomme seuraavat konkreettiset askeleet.