Yleistä
Tälle sivulle on koottu esimerkkejä joistakin yleisesti tarvittavista Dynaamisista kenttien kaavoista. Kaavat eivät välttämättä sellaisenaan sovi jokaiseen tarpeeseen, mutta ne toimivat malleina sille, miten vastaanvantyylisiä kaavoja voidaan kirjoittaa.
Kaavojen ohjeissa on värikoodaus havainnollistamaan sitä, mitkä osat kaavasta todennäköisimmin muuttuvat eri tarpeiden mukaan. Värien selitykset ovat seuraavat:
- Sinisellä merkityt kohdat ovat moduulin kenttien tunnuksia (id), jotka tulee vaihtaa vastaamaan juuri käytettävien kenttien tunnuksia.
- Turkoosilla merkityt kohdat kuvaavat tietyn kentän arvoa.
- Punaisella merkityt kohdat ovat muuttuvia tekijöitä, jotka vaikuttavat kentän lopputulokseen. Näitä kohtia ovat esimerkiksi numeroarvo, johon kentän sisältöä verrataan, tai kenttään kirjoitettava teksti.
Kaavojen kirjoittamisen pikavinkit
Tämä osio käsittelee huomioon otettavia asioita kaavojen kirjoittamisessa ja sisältää myös hieman vinkkejä kaavojen kirjoittamisen helpottamiseksi. Jos et halua kirjoittaa kaavoja itse, voit aina olla yhteydessä tukeen tilataksesi tarvitsemasi kaavat.
Huomioitavia asioita
Kentät ovat tuplahipsujen välissä ” kun taas muuten käytetään yksittäisiä hipsuja ’. Vain tuplahipsujen välissä olevat muuttujat ajetaan ja yksittäisten hipsujen sisällä olevia tietoja luetaan.
Esimerkki tilanteesta, jossa yksittäisiä hipsuja käytetään kentän tietojen lukemiseen:
{if $phone== ''}Puhelinnumero puuttuu{/if}
Yllä oleva kaava lukee phone-kentässä olevan tiedon ja mikäli kenttä on tyhjä, annetaan ilmoitus puhelinnumeron puuttumisesta.
Laskentakaavoihin on lisättävä |default:0, jotta laskenta voi toimia.
Tietoa yleisimmistä dynaamisten kenttäkaavojen virheistä löytyy ohjeesta Common Errors in Field Formulas.
Nopeat If -vinkit
{if $contact_id} – Kontaktikentässä tulee olla arvo
{if !$contact_id} – Kontaktikentässä ei saa olla arvoa
{if $account_type==’asiakas’} – Asiakastyyppi tulee olla asiakas
{if !$account_type!=’asiakas’} – Asiakastyyppi tulee olla jotain muuta kuin asiakas
Huom! If-lauseita tehdessä on aina tarkistettava pitääkö lausetta jatkaa else-lauseella. Käytännössä if tarvitsee elsen rinnalleen suurimmassa osassa tapauksissa, sillä else-kertoo mitä tehdään siinä tapauksessa, että if-lauseella asetettu ehto ei täyty.
Operaattoreita
== | Tarkistaa, että arvot yhtä suuret |
!= | Tarkistaa, että arvot ovat erisuuruiset. |
< | Tarkistaa, että vasemmanpuoleinen arvo on pienempi kuin oikeanpuoleinen arvo |
> | Tarkistaa, että vasemmanpuoleinen arvo on suurempi kuin oikeanpuoleinen arvo |
<= | Tarkistaa, että vasemmanpuoleinen arvo on pienempi tai yhtä suuri kuin oikeanpuoleinen arvo |
>= | Tarkistaa, että vasemmanpuoleinen arvo on suurempi tai yhtä suuri kuin oikeanpuoleinen arvo |
=== | Tarkistaa, että arvot yhtä suuret ja että niiden datatyyppi on sama |
&& | Tarkistaa, että molemmat annetuista ehdoista täyttyvät |
|| | Tarkistaa toteutuuko toinen annetuista ehdoista. |
Kenttien nimeämiseroja
Osalla kentistä esiintyy nimitysvariaatioita kun niitä käytetään dynaamisissa kenttien kaavoissa. Voit tarkistaa nämä nimitykset ohjeesta Kenttien nimeämiseroja Legacy vs REST/CRM2.
Yksinkertaisia kenttäkaavoja
Yksinkertaiset kenttäkaavat eivät sisällä monimutkaisia rakenteita. Niillä on helppo päästä kaavojen kirjoittamisen alkuun ja ne ovat pääosin yksinkertaisia validointikaavoja, informatiivisia kaavoja sekä erilaisia tiedon hakemiseen käytettyjä kaavoja.
Tarjouksen aiheen täyttäminen
Tarjous {$account_id|getEntityFieldValue:'accountname'}
Kaava syöttää kenttään (esimerkissä tarjouksen aihe-kenttä) tekstin ”Tarjous” sekä asiakkaan nimen.
Potentiaalin päivittäminen 100%, jos potentiaalin tila muuttuu toteutuneeksi kaupaksi
{if $sales_stage=='Closed Won'}100{else}{$probability}{/if}
Yllä oleva kaava muuttaa potentiaalin kentässä probability arvoon 100, jos sales_stage-kentän tila on ”Closed Won”. Muussa tapauksessa muutoksia ei tehdä.
Entiteetin omistajan hakeminen riville
Riveillä on kenttä ”Omistaja”, ja on mahdollista tehdä Tallennettaessa -tyyppinen kaava seuraavilla parametreilla tietojen hakemista varten:
{$assigned_user_id}
Entiteettiin liitetyn tuotteen hinnan hakeminen
{$product_id|getEntityFieldValue:'unit_purchase_price'}
Kaava hakee kenttään tuotteen product_id hinnan kentästä unit_purchase_price.
Vastaavan toiminnon saa tehtyä myös rivitasolle käyttämällä seuraavanlaista kaavan muotoa:
Rivikaava: Entiteettiin liitetyn tuotteen hinnan hakeminen
{$row.hdnProductId|getEntityFieldValue:'unit_purchase_price'}
Rivikaava: Näytetään tuoterivin järjestysnumero
{$row.sequence_no}
Kaavaa käytetään tallentaessa. Riville on luotava uusi kenttä (numero tai teksti), johon tieto tallentuu.
Kaava toimii tallentaessa myös kun rivien järjestystä muokataan tai tuoterivi poistetaan välistä.
Huom: Jos tuoterivi kopioidaan, ei kaava toimi ensimmäisen tallennuksen yhteydessä (kopioinnin jälkeen) vaan tietue on otettava jälleen muokkaustilaan ja tallennettava uudelleen. Silloin kaava toimii myös kopioidulle riville.
Kontaktin hakeminen projektilta, jos kontaktikenttä on tyhjä
{if !$contact_id}{$project_id|getEntityFieldValue:'contact_id'}{else}{$contact_id}{/if}
Jos kontaktikenttä esim. laskulla on tyhjä, kaava hakee laskuun linkitettyyn projektiin merkityn kontaktin kenttään. Jos kenttä ei ole tyhjä, ei sille tehdä muutoksia.
Vastuukäyttäjän sähköpostin hakeminen tekstikenttään
{$assigned_user_id|getUserFieldValue:'email1'}
Kaava hakee entiteetin Vastuu-kenttään merkityn käyttäjän sähköpostiosoitteen kenttään.
Informatiivisia kaavoja
Informatiivinen kaava: Kentän tyhjästä arvosta ilmoittaminen
{if $account_id|getEntityFieldValue:'ovt' == ''}Asiakkaalta uupuu OVT{/if}
Kaava tarkistaa, onko kentän ”ovt” arvo tyhjä ja jos se on, antaa se ilmoituksen ”Asiakkaalta uupuu OVT”.
Informatiivinen kaava: Kentän täytetystä arvosta ilmoittaminen
{if $passivation_date!= ''}Kontakti on passivoitu{/if}
Kaava varmistaa, onko kentän ”passivation_date” arvo tyhjä. Jos se ei ole tyhjä, annetaan ilmoitus ”Kontakti on passivoitu”.
Validointikaavoja
Validointikaava: Virheellisestä maakoodista ilmoittaminen
{if $bill_country|count_characters > 2}Laskutusmaa on väärässä muodossa: Suomi = FI, Ruotsi = SE, Norja=NO ja Tanska=DK{/if}
Kaava tarkistaa annetun maakoodin pituuden ja jos se on pidempi kuin kaksi merkkiä, antaa se ilmoituksen ”Laskutusmaa on väärässä muodossa…”. Entiteetin tiedot eivät tallennu, jos ilmoitus annetaan.
Validointikaava: Tilinumero on tietyn pituinen
{if $cf_pankkitili1|count_characters > 18}Tilinumero on liian pitkä{elseif $cf_pankkitili1|count_characters < 18}Tilinumero on liian lyhyt{/if}
Validointikaava tarkistaa esimerkkitapauksessa itseluotuun (cf-kenttä) tilinumerokenttään syötetyn arvon ja estää sen tallentamisen, jos se on arvoltaan pienempi kuin 18 tai suurempi kuin 18. Sulkeiden välissä oleva teksti näytetään käyttäjälle ilmoitusosiossa, mikäli arvo ei ole sallittu. Mikä tahansa sallittu merkkimäärä voidaan validoida käyt
Perustason kenttäkaavat
Perustason dynaamiset kenttäkaavat käyttävät hieman monimutkaisempia prosesseja ja laskutoimituksia kuin yksinkertaiset kenttäkaavat. Niiden tyyppi voi olla mikä tahansa ja esimerkiksi suurin osa päivämääriin ja matemaattisiin laskutoimituksiin liittyvistä kaavoista on perustason kaavoja.
Välilyöntien poistaminen sähköpostikentästä
{$email|regex_replace:"/\s+/":""}
Kaava poistaa kentästä kaikki välilyönnit.
Kirjaimista ja numeroista poikkeavien merkkien poistaminen
{$cf_1234|regex_replace:"/[^a-zA-Z0-9]/":""}
Kaava varmistaa, että kentässä on käytetty vain kirjaimia tai numeroita, ja korvaa mahdolliset muut merkit tyhjällä merkillä.
Tilinumeron muodon päivittäminen ja korjaus
FI{$cf_bankaccount1|regex_replace:"/[^0-9]/":""}
Kaavan ensimmäiset kaksi kirjainta lisätään aina kentän tiedon alkuun. Sulkeiden sisällä oleva osio varmistaa, että kentän arvossa on käytetty vain numeroita 0-9, ja että kaavassa ei ole välilyöntejä tai muita merkkejä. Jos numero on jo vaaditunlainen, ei sille tehdä muutoksia. Alempana ohjetta on esimerkki valindointikaavasta, joka tarkistaa, että tilinumero on kokonaisuudessaan vain 18 merkkiä pitkä, eikä anna muissa tapauksissa tallentaa entiteettiä (Validointikaava: Tilinumero on tietyn pituinen).
Puhelinnumeron muodon päivittäminen ja korjaus
{assign var=pno value=$mobile|regex_replace:"/[^0-9]/":""}{if $pno|strpos:'0' === 0}358{$pno|substr:1}{else}{$pno}{/if}
Kaavan ensimmäinen osa varmistaa, että kentän arvossa on käytetty vain numeroita 0-9, ja jos jotakin muuta merkkiä on käytetty, se korvaa väärän merkin tyhjällä merkillä. Kaavan toinen osa tunnistaa numerolla 0 alkavat numerot ja korvaa nollan Suomen suuntanumerolla 358. Jos numero on jo vaaditunlainen, ei sille tehdä muutoksia.
Generoidaan numero, esimerksi jäsennumero
{'y'|date}{sprintf("%'.08d\n", $id)}
Kaava käyttää kuluvaa vuotta sekä lisää siihen CRM ID:n
Kahden tekstikentän luvun kertominen keskenään kolmanteen kenttään + desimaalien määrittäminen
{math equation="(x/z)*y" x=$cf_1100|default:0 y=$cf_1200|default:0 z=100 format="%.2f"}
Kaava laskee kohdekenttään kahden kentän arvojen tulon (toisen kentän arvo jaetaan ensin muuttujalla, jonka arvo on 100). Kaavassa määritetään viimeisenä myös, että tulossa esitetään kaksi desimaalilukua.
Päivämäärätyyppiset kenttäkaavat
Päivämääräkentän tyyppi, kun lisätään tänään:
{'Y-m-d'|date}
Päivän asettaminen haluttuun päivään:
{assign var='haluttu_pv' value='seuraava maanantai'|strtotime}{'Y-m-d'|date:$haluttu_pv}
Seuraavan maanantain sijasta voidaan käyttää erilaisia arvoja, esimerkiksi: seuraavan kuukauden ensimmäinen päivä, +1 viikko, – 3 päivää
Kuluvan vuoden viimeinen päivä:
{strtotime('Dec 31')|date_format:'Y-m-d'}
Voimassaolopäivän asettaminen kahden viikon päähän, jos voimassaolo-kenttä on tyhjä
{if $validtill ==''}{assign var='voimassaolo' value='+ 14 days'|strtotime}{'Y-m-d'|date:$voimassaolo}{else}{$validtill}{/if}
Yllä oleva kaava varmistaa, että kenttä validtill on tyhjä. Jos on, lisää se siihen päivämäärän, joka on nykyisestä päivämäärästä 14 päivää eteenpäin. Jos kenttä ei ole tyhjä, ei sille tehdä muutoksia.
Päivämäärän laskeminen useammasta kentästä
{math equation="(y-x) / (3600*24)" x=$createdtime|strtotime y=$modifiedtime|strtotime format="%d"}
Muuttujien start ja end arvoiksi asetetaan entiteetin luomisaika (createdtime) ja muokkausaika (modifiedtime). Näiden päivämäärien välinen aika päivinä lasketaan kaavan viimeisessä osassa.
Päivämäärän vertaaminen
{assign var="thisdate" value="now"|strtotime}{assign var="invoiceday" value=$invoicedate|strtotime}{if $thisdate < $invoiceday}Laskun päiväys on suurempi kuin kuluva päivä{/if}
Kaava vertaa kahta arvoa keskenään, jotka on asetettu var-muuttujaa hyödyntäen.
Päivämäärän hakeminen päivämääräkentästä tekstikenttään
{$createdtime|date_format:"d.m.Y"}
Kaava hakee entiteetin luomispäivämäärän kentästä createdtime ja lisää tämän kohdetekstikenttään muodossa pp.kk.vvvv.
Passivointipäivämäärän täydentäminen, jos entiteetti on merkitty passiiviseksi
{if $passive && !$passivation_date}{'Y-m-d'|date}{else}{$passivation_date}{/if}
Kaava asettaa kenttään tämän päivän päivämäärän, jos passivation_date on tyhjä ja entiteetti on merkitty passiiviseksi. Muussa tapauksessa kentässä säilytetään siinä oleva arvo.
Takuun voimassaolon automaattinen tarkistaminen
{assign var=today value='Y-m-d'|date}{assign var=date value=$cf_1234|getDBInsertDateValue}{if $today <= $date}1{/if}
Kaava vertaa erillisen ”Voimassaolopäivämäärä”-kentän cf_1234 arvoa tämän päivän arvoon. Jos tämä päivä on pienempi tai yhtäsuuri kuin kentän päivämäärä, asetetaan ”Takuu voimassa”-kenttä aktiiviseksi.
Kahden päivämäärän välissä olevan ajan laskeminen (päivinä)
{assign var="start" value=$createdtime|strtotime}{assign var="end" value=$modifiedtime|strtotime}{floor(($end - $start) / (3600 * 24))}
Apumuuttujille start ja end annetaan arvot entiteetin luonti- ja muokkausajoista. Näiden kahden välinen aika päivinä lasketaan kaavan viimeisessä osassa.
Validointikaavoja
Validointikaava: Olemassa olevasta yrityksen nimestä ilmoittaminen
{if $id == ''}{assign var="id" value="0"}{/if}{assign var="check_name" value="crmid != '$id' AND crm_account.accountname"}{assign var="count_name" value='Accounts'|entity_count_by_field_value:$check_name:$accountname}{if $id && $count_name > 0}You are editing an entity and making a duplicate{elseif !$id && $count_name > 0}You are creating a new entity and making a duplicate{/if}
Validointikaava tarkistaa ja estää yrityksen tallentamisen samalla nimellä, kuin jo jokin olemassa oleva yritys. Apumuuttujaan count_name lasketaan, kuinka monta samaa yritysnimeä on järjestelmässä. Jos nimiä on useampi kuin yksi, annetaan yritystä tallentaessa ilmoitus ja estetään tallennus. Kaavassa on ensin tarkistus sille, että olemassa olevaa entiteettiä (id olemassa) muokataan ja yritetään tallentaa samalla nimellä, kuin jokin toinen yritys ja sen jälkeen tarkistus, kun kyseessä on aivan uuden entiteetin luominen (id:tä ei vielä olemassa).
Edistyneet kenttäkaavat
Tietyt toiminnot voivat vaatia hyvinkin edistyneitä kenttäkaavoja – näitä voi halutessaan kokeilla itse, mutta niitä voi myös tilata suoraan meiltä.
Esimerkki edistyneemmästä kenttäkaavasta, jolla generoidaan jäsennumero käyttämällä entiteetin luomisajan vuosilukua, johon lisätään sitten CRM ID:
{$createdtime|date_format:"%y"}{sprintf("%'.08d\n", $id)}
Esimerkki edistyneemmästä kenttäkaavasta, jolla tarkistetaan onko asiakkaalla listahintaa:
{if $row.product_id && $account_id}{assign var="PR" value=$row.product_id|get_pricebook_price:$account_id}{else}{assign var="PR" value=$row.listPrice}{/if}{if $PR}{$PR}{else}{$row.listPrice}{/if}
Lisää hinnastoista ja niihin liittyvistä kaavoista löytyy ohjeesta Hinnastot.
Muuttujien luominen ja niiden käyttäminen kaavoissa
Dynaamisia kaavoja varten on mahdollista luoda myös omia muuttujia, joita voidaan sitten käyttää dynaamisissa kenttäkaavoissa.
Esimerkiksi voidaan luoda muuttuja pii, joka antaa piin arvon kahden desimaalin tarkkuudella. Tämä tehtäisiin seuraavasti:
{assign_static var="pii" value="3.14"}
Tämän jälkeen muuttujaa voidaan käyttää seuraavasti:
{get_static var="pii"}
Muuttujien luomisessa huomioon otettavia asioita:
- Muuttujan luomisessa käytetty kaava tulee ajaa ennen muuttujaa käyttäviä kaavoja.
- Muuttujan luomiseen voidaan käyttää mitä tahansa olemassa olevaa kenttää, jossa ei ole dynaamista kenttäkaavaa käytössä.
- Toinen vaihtoehto on luoda tätä tarkoitusta varten oma kenttä.
- Muuttujat toimivat vain kaavoissa, joilla on sama ajoehto. Jos esimerkiksi haluat käyttää muuttujaa sekä ”Tallentaessa”- että ”Luodessa”-kaavoissa, sinun on luotava kaksi muuttujan luovaa kaavaa, joista toisessa on ”Tallentaessa”-ehto ja toisessa ”Luodessa”-ehto.
- Muuttujan luoneen kaavan on oltava aktiivinen, jotta muuttuja voidaan hakea get_staticin avulla.
Staattisen muuttujan asettaminen paikalliseen muuttujaan
Vaihtoehtoisesti luotu muuttujan arvo (esimerkissä pii) voidaan asettaa paikalliseen muuttujaan seuraavasti:
{get_static var="pii" assign="muuttujan_nimi"}
Tämän jälkeen paikallista muuttujaa voidaan käyttää seuraavasti:
{$muuttujan_nimi}