Základný popis API rozhrania sa nachádza tu Gram CRM API. Tento dokument vyžaduje jeho znalosť.
Tu popísané API rozhranie sa môže kedykoľvek zmeniť bez upozornenia. Nepoužívajte v produkčnom systéme bez dôkladného otestovania, konzultácie.
UPOZORNENIE: Všetky vlastné Entity a Polia musia začínať prefixom „c“. Teda malé písmeno „c“. API umožní vytvoriť aj pole bez takéhoto prefixu, avšak v budúcnosti môže byť takéto pole/entita zmazaná aktualizáciou bez upozornenia.
Opis riešenia
Na tejto stránke si ukážeme modelový príklad vytvorenie úpravy systému pre „Bazénovú firmu“, teda organizáciu, ktorá predáva bazény a potrebuje pri obchodných prípadoch sledovať ich predaj a evidenciu. Riešenie vytvorí novú entitu Bazén, pridá prislúchajúci pohľad (Layout) s možnosťou editácie.
Entita Bazén bude obsahovať nasledovné polia:
- Názov – textové jednoriadkové pole s dĺžkou 255 znakov
- Dĺžka – číselná hodna, dĺžka bazénu v metroch
- Stav – stav, v ktorom sa daný typ bazénu nachádza (V predaji, Novinka, Akcia). Pole typu rozbaľovací zoznam (option).
- Potenciál Obchodných prípadov – hodnota aktuálne rozpracovaných obchodných prípadov pre daný typ bazénu. Počítané pole (calculated), kde je spočítaná hodnota všetkých aktívnych Obchodných prípadov
- Predaných – celkový počet predaných bazénov. Počítané pole (calculated) typu mena, ako suma všetkých vyhratých Obchodných prípadov s daným bazénom
- Celková dĺžka – celková dĺžka v metroch, ktoré sme doteraz predali. Pole typu formula, ktoré sa počíta ako súčin Dĺžky bazéna a Počtu predaných bazénov
Vytvoríme základný pohľad „Všetky bazény“, ktorý bude obsahovať polia:
- Názov, Dĺžka, Stav, Predaných, Potenciál, Vytvoril, Upravil
Vytvoríme náhľad na entitu (Layout), ktorý v hlavičke zobrazí polia: Názov, Predaných, Celková dĺžka, Potenciál. V zozname polí bude potom: Dĺžka, Vytvoril.
V editácii entity potom budú k dispozícii tieto polia: Názov, Dĺžka, Stav
Vizualizácia riešenia
Karta Bazénu
Pohľad:
Riešenie
Riešenie pozostáva v postupnom zavolaní nasledovných API volaní. Všetky volania sú typu PUT. Volania možné realizovať len užívateľom, ktorý má Admin oprávnenie.
Vytvorenie Entity
https://api.gramcrm.com/demo/api/v1/core/Entity
{
"Name": "cPool",
"Label": "Bazén",
"LabelPlural": "Bazény",
"Icon": "f5c4",
"Color": "692782",
"GroupId": "sales_id",
"GroupEntityOrder": 30,
"HasActivity": 1,
"HasAttachment": 1,
"Main": 1
}
Ikona je ľubovoľná ikona zo základných typov (solid, regular, light, thin) systému font awesome zapísaná vo forme unicode. Dostupné ikony ako aj prislúchajúce unicode sa nachádzajú na stránke: https://fontawesome.com/search. Parameter HasActivity určuje, či entita bude mať k dispozícii systémové aktivity (Telefonát, Email…). Parameter HasAttachment určuje, či bude možné prikladať prílohy k jednotlivým záznamom. GroupId definuje sekciu, do ktorej chceme zaradiť entitu (dostupné: accounts_id, sales_id, registry_id, preferences_id, fleet_id, support_id, services_id). GroupEntityOrder je následne poradie. Parameter Main určuje, či sa entita má zobraziť na hlavnom systémovom paneli.
Pridanie polí
Na pridanie, úpravu poľa (Field) slúži funkcia EntityField:
https://api.gramcrm.com/demo/api/v1/core/EntityField
Pole Názov (text)
Pridáme tzv. primárne pole „Názov“ typu jednoriadkový text s maximálnou dĺžkou 255 znakov. Vyplnenie poľa bude vždy povinné.
// https://api.gramcrm.com/demo/api/v1/core/EntityField
{
"Entity": "cPool",
"Name": "cName",
"Label": "Názov",
"Type": "edit",
"DataType": "varchar(255)",
"Primary": 1,
"Required": 1
}
Pole Dĺžka (číslo)
Pridáme tzv. primárne pole „Dĺžka“ typu číslo.
// https://api.gramcrm.com/demo/api/v1/core/EntityField
{
"Entity": "cPool",
"Name": "cLength",
"Label": "Dĺžka",
"Type": "edit",
"DataType": "number(11)"
}
Pole Stav (zoznam)
Pridáme pole „Stav“ typu zoznam. Zároveň aj nastavíme, jednotlivé hodnoty, farbu, „stage“ a poradie.
// https://api.gramcrm.com/demo/api/v1/core/EntityField
{
"Entity": "cPool",
"Name": "cStatus",
"Label": "Stav",
"Type": "edit",
"DataType": "option(cPool_cStatus)",
"DefaultValue": 3,
"Required": 1,
"Option": {
"Name": "cPool_cStatus",
"Items": [
{
"Label": "V predaji",
"Value": 3,
"Color": "#8bc34a",
"Stage": 0,
"Order": 1000
},
{
"Label": "Novinka",
"Value": 1,
"Color": "#f28e2b",
"Stage": 0,
"Order": 1001
},
{
"Label": "Akcia",
"Value": 2,
"Color": "#ff3547",
"Stage": 0,
"Order": 1002
}
]
}
}
Pole Predaných (calculated)
Pridáme pole „Počet Predaných„. Jedná sa o pole typu „calculated“, teda jeho hodnota bude vypočítaná na základe prepojenia v parametre „RelatedTo“, ktorý určuje vzťah medzi jednotlivými entitami. V tomto prípade prepojíme Obchodný prípad(Deal) a jeho pole cPool s našou entitou cPool (zhodou okolností majú rovnaký názov). V tomto momente ešte nie je pole cPool v entite Deal vytvorené, čo nevadí. V rámci parametru AdvInfo môžeme určiť pomocou Where podmienku, pre ktoré Deal-y sa bude vzťahovať výpočet. V tomto prípade zoberieme do úvahy len tie Obchodné prípady, ktoré sú v stave „Won“. Ak by sme nepoužili parameter Where, tak spočítame všetky obchodné prípady, v ktorých je prepojenie na náš bazén.
// https://api.gramcrm.com/demo/api/v1/core/EntityField
{
"Entity": "cPool",
"Name": "cDealCount",
"Label": "Počet Predaných",
"Type": "calculated",
"RelatedTo": "Deal:cPool",
"DataType": "number(11)",
"AdvInfo": {
"Operator": "COUNT",
"Field": "Id",
"Where": [
{
"Field": "Status",
"Operator": "e",
"Value": "Won"
}
]
},
"DefaultValue": 0
}
Pole Potenciál (calculated)
Pridáme aj pole „Potenciál„, čo je hodnota všetkých otvorených (Aktívnych) Obchodných prípadov.
// https://api.gramcrm.com/demo/api/v1/core/EntityField
{
"Entity": "cPool",
"Name": "cDealPrice",
"Label": "Potenciál",
"Type": "calculated",
"RelatedTo": "Deal:cPool", // relation between deal and cPool
"DataType": "currency(10,2)",
"AdvInfo": {
"Operator": "SUM",
"Field": "Price",
"Where": [
{
"Field": "Status",
"Operator": "e",
"Value": "Active"
}
]
},
"DefaultValue": 0
}
Pole Celková dĺžka (formula)
Pridáme aj pole „Celková dĺžka„, ktorá je typu „formula“ a teda vypočítame hodnoty podľa vzorca uvedeného v parametri AdvInfo.
// https://api.gramcrm.com/demo/api/v1/core/EntityField
{
"Entity": "cPool",
"Name": "cTotalLength",
"Label": "Celková Dĺžka",
"Type": "formula",
"DataType": "number(11)",
"AdvInfo": "={cDealCount} * {cLength}",
"DefaultValue": 0
}
Prepojenie medzi Entitami
Pole Bazén (lookup)
Pridáme aj pole „Bazén„, do entity Deal. Tým vytvoríme prepojenie medzi našou novou entitou Bazén(cPool) a existujúcim Obchodným prípadom(Deal).
// https://api.gramcrm.com/demo/api/v1/core/EntityField
{
"Entity": "Deal",
"Name": "cPool",
"Label": "Bazén",
"Type": "edit",
"DataType": "lookup(cPool)"
}
Vytvorenie pohľadu
Vytvoríme pohľad „Všetky Bazén„ aby sme mohli zobraziť obsah záznamov.
https://api.gramcrm.com/demo/api/v1/core/View/77b5c9e5-3d7a-4235-8de2-de2963a5f094
{
"Entity": "cPool",
"Label": "Všetky Bazény",
"Columns": [
{"Field": "cName", "Width": 150},
{"Field": "cLength", "Width": 75},
{"Field": "cStatus", "Width": 75},
{"Field": "cDealCount", "Width": 75},
{"Field": "cDealPrice", "Width": 75},
{"Field": "CreatedUser", "Width": 75},
{"Field": "ModifiedUser", "Width": 75}
]
}
Vytvorenie layoutu
Vytvoríme layout pre Entitu „Bazén„ pomocou funkcie Layout. Každá entita môže mať viacero layoutov. PreviewPage určuje vzhľad po otvorení v aplikácii tzv. „DetailView“, kde „TopFields“ sú prvé 4 polia a „Fields“ sú bežné polia zobrazené v aplikácii. „DetailPage“ je editačná stránka entity. Teda polia, ktoré sa zobrazia pri pridávaní, resp. editácii záznamu. Parameter „Related“ obsahuje pohľady na prepojené záznamy.
https://api.gramcrm.com/demo/api/v1/core/Layout
{
"Id": "d50555fc-9208-4a8b-84ae-747995eb59be",
"Entity": "cPool",
"Label": "Default",
"PreviewPage": {
"TopFields": [
{
"Field": "cName"
},
{
"Field": "cDealCount"
},
{
"Field": "cTotalLength"
},
{
"Field": "cDealPrice"
}
],
"Fields": [
{
"Field": "cLength"
},
{
"Field": "CreatedUser"
}
]
},
"DetailPage": {
"Sections": [
{
"Label": "Popis",
"Columns": 1,
"Fields": [
{
"Field": "cName",
"Column": 1,
"Hidden": 0
},
{
"Field": "cLength",
"Column": 1,
"Hidden": 0
},
{
"Field": "cStatus",
"Column": 1,
"Hidden": 0
}
]
}
]
},
"Related": {
"Views": [
{
"Field": "Deal:cPool",
"Label": "Obchodné prípady",
"Columns": [
{
"Field": "Number",
"Width": "75"
},
{
"Field": "OpenedDate",
"Width": "75"
},
{
"Field": "Name",
"Width": "75"
},
{
"Field": "Status",
"Width": "75"
},
{
"Field": "Account",
"Width": "75"
},
{
"Field": "Price",
"Width": "75"
}
],
"Section": {
"Field": "Status",
"Order": "Asc"
},
"Total": [
{
"Field": "Price"
}
],
"OrderBy": [
{
"Field": "Row",
"Order": "asc"
}
],
"Id": "665f9da4-d532-384a-0183-9e34c956cbf6"
}
]
}
}
Publikovanie riešenia
Po ukončení práce je potrebné zavolať funkciu „Publish“, ktorá všetky zmeny zverejní okamžite. V opačnom prípade je možné, že niektoré, z tu uvedených zmien sa aplikujú až po určitom čase (desiatky minút až hodiny).
https://api.gramcrm.com/demo/api/v1/core/Publish