Exempel på dynamiska fältformler
På den här sidan finns en liten samling exempel på några vanliga dynamiska fältformler. Formlerna kanske inte passar för alla behov som de är, men de visar dig hur liknande formler kan skrivas.
Formlerna i den här guiden är skrivna med hjälp av färgkodning för att visualisera vilka delar av formeln som med största sannolikhet ersätts för att möta det specifika behovet. Delarna markerade med blått är ID för fälten i modulen och de bör bytas ut för att matcha ID:n för de fält som faktiskt används. Delarna markerade med orange representerar ett värde för ett visst fält. Delarna markerade med rött är variabler som påverkar målfältets slutvärde. Dessa variabler kan till exempel vara ett tal som fältets innehåll jämförs med, eller en text som är skriven i fältet.
Snabba grundläggande IF – formler
{if $contact_id} - Contact -field needs some value
{if !$contact_id} - Contact - field needs to be empty
{if account_type=='customer'} - Account type needs be Customer
{if account_type!='customer'} - Account type needs be something else than Customer
Fylla i ämne på en offert
Quote {$account_id|getEntityFieldValue:'accountname'}
Formeln fyller fältet (i det här exemplet, ämnesfältet för ett citat) med texten ”Offert” och kontots namn.
Uppdaterar sannolikheten för potentialen till 100 % om försäljningsstadiet ändras till vunnet
{if $sales_stage=='Closed Won'}100{else}{$probability}{/if}
Formeln uppdaterar värdet på sannolikheten i fältet ”sannolikhet” till 100, om statusen för fältet ”sales_stage” är ”Stängd vunnen”. I övrigt görs inga ändringar.
Informationsformel: Meddelar användaren om ett tomt fält
{if $account_id|getEntityFieldValue:'ovt' == ''}Customer doesn't have OVT{/if}
Formeln kontrollerar om fältet ”ovt” är tomt och om det är det meddelar den användaren med en informationstext ”Kunden har inte OVT”.
Informationsformel: Meddelar användaren om ett ifyllt fält
{if $passivation_date!= ''}The contact has a passivation date{/if}
Formeln kontrollerar om fältet ”passivation_date” är tomt. Om inte, meddelar den användaren med en informationstext ”Kontakten har ett passiveringsdatum”.
Hämta priset på en produkt som är kopplad till en enhet
{$product_id|getEntityFieldValue:'unit_purchase_price'}
Formeln hämtar priset för produkten ”product_id” från fältet ”unit_purchase_price” och kopierar värdet till målfältet.
OBS! En liknande funktion kan också göras på radnivå med följande format:
{$row.hdnProductId|getEntityFieldValue:'unit_purchase_price'}
Hämtar kontakten från ett projekt, om kontaktfältet är tomt
{if !$contact_id}{$project_id|getEntityFieldValue:'contact_id'}{else}{$contact_id}{/if}
Om kontaktfältet på t.ex. en faktura är tom, formeln hämtar kontakten i ett projekt kopplat till fakturan. Om fältet inte är tomt görs inga ändringar.
Hämta e-postadressen till den tilldelade till ett textfält
{$assigned_user_id|getUserFieldValue:'email1'}
Formeln hämtar e-postadressen till användaren som valts i fältet Tilldelad till.
Uppdatera och korrigera formen på ett telefonnummer
{assign var=pno value='/[^0-9]/'|preg_replace:'':$mobile}{if $pno|strpos:'0' === 0}358{$pno|substr:1}{else}{$pno}{/if}
Den första delen av denna formel verifierar att det bara finns siffror 0-9 i fältet och om ett ogiltigt tecken används ersätts det med ett tomt tecken. Den andra delen ersätter det första numret på ett telefonnummer som börjar med en nolla med Finlands landnummer 358. Om innehållet i fältet redan är i rätt format görs inga ändringar. OBS! Ersätt ”$mobile” med ID:t för fältet som formeln skapas för (om det inte är fältet Mobil).
Uppdatering och korrigering av formen på ett bankkontonummer
FI{assign var=pno value='/[^0-9]/'|preg_replace:'':$cf_pankkitili1}{$pno}
De två första bokstäverna i formeln läggs till i början av fältdata. Partitionen inom parentesen säkerställer att endast siffror mellan 0-9 används i fältvärdet och inga mellanslag eller andra tecken finns kvar i formeln. Om innehållet i fältet redan är i rätt format görs inga ändringar. I avsnittet om valideringsformel finns ett exempel på en formel som kan användas för att verifiera den erforderliga längden på bankkontonumret och som inte tillåter enheten att spara i andra fall.
Tillåter endast användning av bokstäver och siffror
{assign var=pno value='/[^a-z0-9]/'|preg_replace:'':$cf_1234}{$pno}
Formeln verifierar att det bara finns bokstäver eller siffror i fältet och ersätter alla andra tecken med ett tomt tecken.
Ta bort blanksteg från e-postfältet
{$email|regex_replace:"/\s+/":""}
Formeln tar bort alla blanksteg från fältet.
Generera nummerföljd exempel medlemsnummer
{'y'|date}{sprintf("%'.08d\n", $id)}
Den här formeln använder det aktuella året och lägger till CRM-ID med det.
{"$createdtime"|date_format:"%y"}{sprintf("%'.08d\n", $id)}
Den här formeln använder entitetsskapande år och lägger till CRM-ID med det.
Sparar aktivitetstyp och namnen på de länkade kontakterna i ett ämnesfält
{if $subject ==''}{$activitytype} {foreach item=contact from=$Contacts name=cnt}{if !$smarty.foreach.cnt.first}, {/if}{$contact|getContactName}{/foreach}{else}{$subject}{/if}
Om ämnesfältet för händelsen är tomt, ställs händelsetypen och namnen på varje kontakt som är kopplad till händelsen in som ämne. Kontaktnamnen separeras med kommatecken (,) och blanksteg. Om inga kontakter är kopplade till händelsen kommer ämnet endast att vara händelsetypen.
Multiplicera två tal från separata fält till ett tredje tredje fält + bestämma antalet decimaler
{math equation="(x/z)*y" x=$cf_1100|default:0 y=$cf_1200|default:0 z=100 format="%.2f"}
Formeln multiplicerar siffrorna i de två fälten och placerar utfallet i målfältet (ett av värdena delas också med 100). Slutligen är det definierat att resultatet kommer att visa två decimaler.
Notera! Med matematiska formler är det nödvändigt att använda |default:0
Radformel: Visa radsekvensnummer
{$row.sequence_no}
Formeln används för att spara. Ett nytt fält (nummer eller text) måste skapas för raden där informationen ska lagras.
Detta fungerar även vid spara, om en rad raderas eller på annat sätt flyttas upp eller ner på rader.
Obs: Om en produktrad kopieras, fungerar formeln inte vid första sparandet. Entiteten måste åter tas till redigeringsläge och sparas igen – sedan uppdateras radens sekvensnummer.
Formler för datumfält
Datumfältstyp vid tillägg idag
{'Y-m-d'|date}
Istället för nästa måndag kan olika värden användas till exempel: första dagen i nästa månad, +1 vecka, – 3 dagar
{assign var='t' value='next monday'|strtotime}{'Y-m-d'|date:$t}
Sista dagen på nuvarande år
{strtotime('Dec 31')|date_format:'Y-m-d'}
Ange ett giltigt till-datum med 14 dagars mellanrum om fältet är tomt
{if $validtill ==''}{assign var='t' value='+ 14 days'|strtotime}{'Y-m-d'|date:$t}{else}{$validtill}{/if}
Formeln kontrollerar om fältet ”validtill” är tomt. Om så är fallet sätter formeln värdet på fältet till ett datum som är 14 dagar efter det aktuella datumet. Om fältet inte är tomt görs inga ändringar.
Räknar dagar från flera fält
{assign var='t' value="$invoicedate + $payment_term days"|strtotime}{'Y-m-d'|date:$t}
Formeln lägger till antalet dagar som definierats i fältet payment_term till datumet i fältet invoicedate och placerar sedan detta nya datum i målfältet.
Observera att fälten är mellan dubbla övre märken och andra singel ” ’
Räknar dagar
{assign var='a' value='now'|strtotime} {assign var='b' value=$invoicedate|strtotime} {if $a < $b}Invoice date is greater than current date{/if}
Formeln jämför två värden som avräknas med tilldelning var -metoden.
Hämta ett datum från ett datumfält och spara det i ett textfält
{"$createdtime"|date_format:"d.m.Y"}
Formeln hämtar skapandetiden för entiteten i fältet skapad tid och lägger till den i måltextfältet i formatet dd.mm.YYYY.
Beräkna tiden mellan två datum (i dagar)
{assign var="start" value=$createdtime|strtotime}{assign var="end" value=$modifiedtime|strtotime}{floor(($end - $start) / (3600 * 24))}
Värdena för variablernas start och slut ställs in som skapelsetid och modifierad tid för enheten. Tiden i dagar mellan dessa datum beräknas sedan i den sista delen av formeln.
Fyller i passiveringsdatumet om enheten är passiv
{if $passivation_date=='' && $passive=='1'}{'Y-m-d'|date}{else}{$passivation_date}{/if}
Formeln fyller upp fältet med aktuellt datum, om ”passivation_date” är tomt och entiteten är inställd passiv. I övrigt görs inga ändringar.
Kontrollera automatiskt om produkten fortfarande är under garanti
{assign var=today value='Y-m-d'|date}{assign var=date value=$cf_1234|getDBInsertDateValue}{if $today <= $date}1{/if}
Formeln jämför värdet av ett separat ”Garanti giltig till”-fält cf_1234 med det aktuella datumet. Om det aktuella datumet är mindre eller lika med fältets värde, är fältet ”Warranty valid” aktiverat.
Valideringsformler
Valideringsformel: Endast siffror kan anges i fältet
{if !is_numeric($cf_field)}Only numbers can be entered in the field{/if}
I exemplet kontrollerar valideringsformeln värdet som anges i den självskapade textrutan (cf-fält) och förhindrar att det sparas om det innehåller andra tecken än siffror. Texten inom parentes kommer att visas för användaren i meddelandefältet om det angivna värdet inte är tillåtet.
Valideringsformel: Det angivna bankkontonumret är av en viss längd
{if $cf_bankaccount1|count_characters > 18}The bank account is too long{elseif $cf_bankaccount1|count_characters < 18}The bank account is too short{/if}
I exemplet kontrollerar valideringsformeln värdet som anges i det självskapade (cf-fältet) fältet bankaccount1 och förhindrar att det sparas, om värdet är mindre än 18 eller större än 18 tecken. Texten mellan parenteser visas för användaren i meddelandesektionen, om värdet inte är inom det tillåtna intervallet.
Valideringsformel: Det angivna värdet ligger inom ett visst intervall
{if $description <3}The value must be at least 3{elseif $description >28}The value must not exceed 28{/if}
I exemplet kontrollerar valideringsformeln värdet som anges i beskrivningsfältet och förhindrar att det sparas om det är mindre än 3 eller större än 28. Texten mellan parenteserna visas för användaren i meddelandesektionen om värdet är inte tillåtet (inte inom ett visst intervall).
Valideringsformel: Meddela ett befintligt konto med samma namn
{if $id == ''}{assign var="id" value="0"}{/if}{assign var="c" value="crmid != `$id` AND crm_account.accountname"}{assign var="cnt" value='Accounts'|entity_count_by_field_value:$c:$accountname}{if $id && $cnt > 0}You are editing an entity and making a duplicate{elseif !$id && $cnt > 0}You are creating a new entity and making a duplicate{/if}
Valideringsformeln kontrollerar och förhindrar att ett konto sparas med samma namn som något annat konto. Värdet på variabeln cnt beräknas av antalet av samma kontonamn. Om det finns mer än ett konto med samma namn, meddelar systemet användaren och förhindrar att kontot sparas. Det finns först en kontroll för situationen att ett befintligt konto (id finns) redigeras och sparas med ett dubblettnamn, och sedan en kontroll för de helt nya enheterna (det finns inget id ännu).
Valideringsformel: Meddelande om en ogiltig landskod
{if $bill_country|count_characters > 2}The country code of the billing country is invalid. Finland = FI, Sweden = SE, Norway = NO and Denmark = DK{/if}
Formeln verifierar längden på den givna landskoden och om längden är mer än två tecken, meddelar den användaren med en varning ”Faktureringslandets landskod är ogiltig…”. Enheten sparas då inte.