Pola i typy pól w Salesforce
Tworzymy obiekt Nieruchomość i dodajemy pola wszystkich typów. Przy każdym typie: jak go skonfigurować, kiedy użyć i jak zachowa się później we Flow.
Zanim zbudujesz pierwszy Flow, musisz rozumieć pola: to one przechowują dane, które Flow odczytuje, sprawdza i zmienia. W tej lekcji tworzymy obiekt Nieruchomość i dodajemy do niego pola wszystkich typów, krok po kroku, ze zrzutami ekranu.
Wolisz od razu klikać? Ten sam obiekt zbudujesz w skróconej formie, z listami kontrolnymi, w warsztacie w następnej lekcji. Ta lekcja wyjaśnia każdy typ pola i jego pułapki we Flow, więc warto do niej wracać.
Cel lekcji
Po tej lekcji samodzielnie utworzysz obiekt i dodasz do niego pole dowolnego typu, a przy każdym typie będziesz wiedzieć, jak zachowa się później we Flow.
Flow to automatyzacja, która działa na danych w polach: sprawdza wartość ("czy cena jest większa niż 500 000 zł?"), ustawia wartość ("oznacz jako sprzedana") albo liczy ("dodaj 14 dni do daty"). Jeśli pole ma zły typ, Flow nie zadziała albo zadziała błędnie. Dlatego najpierw pola, potem Flow.
Co zrobisz w tej lekcji:
-
Utworzysz obiekt Nieruchomość - to będzie Twój poligon na cały kurs.
-
Poznasz kreator nowego pola i jego cztery ekrany.
-
Dodasz pola wszystkich typów dostępnych w Salesforce, pogrupowane w sześć rodzin.
-
Utworzysz drugi obiekt, Oferta, żeby zobaczyć, jak działają relacje między obiektami.
Czas: ok. 90 minut. Wymagania: dostęp do orga Developer Edition lub Trailhead Playground z uprawnieniami administratora.
Wszystkie nazwy przycisków i ekranów podajemy po angielsku, tak jak wyświetla je Salesforce, a obok polskie wyjaśnienie.
Słowniczek
Pięć pojęć, bez których dalsza część lekcji nie ma sensu. Najprościej porównać je do arkusza kalkulacyjnego.
| Pojęcie | Co to jest | Odpowiednik w arkuszu | Przykład |
|---|---|---|---|
| Obiekt (Object) | Rodzaj danych, które przechowujesz | Cały arkusz | Nieruchomość |
| Rekord (Record) | Jeden konkretny egzemplarz | Jeden wiersz | Mieszkanie przy ul. Lipowej 5 |
| Pole (Field) | Jedna cecha, którą zapisujesz o każdym rekordzie | Kolumna | Cena, Liczba pokoi |
| Etykieta (Field Label) | Nazwa, którą widzi użytkownik | Nagłówek kolumny | Liczba pokoi |
| Nazwa API (API Name) | Nazwa techniczna, której używa system i Flow | Adres kolumny, np. C | Liczba_pokoi__c |
Na co zwrócić uwagę:
-
Końcówka
__coznacza element własny (custom), czyli utworzony przez Ciebie. Standardowe pola Salesforce, np. Name, jej nie mają. -
Etykietę można zmieniać bez konsekwencji, nazwy API - nie. Flow, formuły i integracje odwołują się do nazwy API. Zmiana jej po zbudowaniu automatyzacji to najczęstsza przyczyna "nagle przestało działać".
-
Nazwę API twórz po angielsku lub bez polskich znaków. Salesforce i tak zamieni ą, ę, spacje na podkreślenia albo odrzuci nazwę, a po angielsku łatwiej szukać pomocy w dokumentacji.
-
Typ pola wybierasz raz. Zmiana typu później jest często niemożliwa albo kasuje dane. To najważniejsza decyzja przy tworzeniu pola.
Krok 1: tworzymy obiekt Nieruchomość
Pola zawsze należą do jakiegoś obiektu, więc najpierw tworzymy obiekt, a dopiero potem jego pola. Całość zajmuje ok. 5 minut.
1.1. Otwórz Object Manager
Kliknij ikonę koła zębatego w prawym górnym rogu, wybierz Setup, a potem zakładkę Object Manager. Kliknij Create (1) i wybierz Custom Object (2).
Na co zwrócić uwagę: Custom Object from Spreadsheet tworzy obiekt z pliku Excel razem z danymi. Kusi, ale na start go omiń. Salesforce sam zgaduje typy pól z arkusza i często zgaduje źle, a typ pola trudno później zmienić.
1.2. Nazwy obiektu
| Nr | Pole | Co wpisujemy | Po co |
|---|---|---|---|
| 1 | Label | Nieruchomość | Nazwa w liczbie pojedynczej, widoczna dla użytkowników |
| 2 | Plural Label | Nieruchomości | Nazwa w liczbie mnogiej, np. na zakładce i w listach |
| 3 | Object Name | Property | Nazwa techniczna. Salesforce doda do niej __c |
| 4 | Record Name | Nazwa nieruchomości | Etykieta głównego pola, które identyfikuje rekord |
Na co zwrócić uwagę:
-
Salesforce sam uzupełnia Object Name na podstawie etykiety i robi to źle przy polskich znakach. Z "Nieruchomość" zrobił "Nieruchomo", bo uciął wszystko od litery ś. Zawsze sprawdzaj to pole i wpisuj nazwę ręcznie, najlepiej po angielsku.
-
Pola Starts with vowel sound nie zaznaczaj. Dotyczy tylko angielskiej gramatyki (a/an).
-
Description wypełniaj zawsze. Za pół roku nikt nie będzie pamiętał, po co powstał obiekt.
1.3. Pole nazwy i opcje obiektu
-
Data Type pola nazwy (1): zostawiamy Text. Druga opcja to Auto Number, czyli numer nadawany automatycznie, np. NR-0001. Tekst jest lepszy, gdy ludzie szukają rekordów po nazwie, np. "Lipowa 5/12".
-
Optional Features (2): zaznaczamy Allow Reports, Allow Activities i Track Field History. Bez Allow Reports nie zbudujesz raportu na tym obiekcie. Track Field History przyda się do śledzenia, kto i kiedy zmienił np. cenę. Te opcje można włączyć też później, ale łatwo o nich zapomnieć.
1.4. Status i zapis
-
Deployment Status: Deployed. Obiekt w statusie In Development widzą tylko administratorzy.
-
Allow Search - rekordy będzie można znaleźć wyszukiwarką u góry ekranu.
-
Add Notes and Attachments i Launch New Custom Tab Wizard - te dwie opcje są dostępne tylko przy tworzeniu obiektu. Druga od razu tworzy zakładkę, na której użytkownicy zobaczą rekordy.
-
Kliknij Save.
1.5. Efekt
Obiekt ma nazwę API Property__c (1). Tej nazwy użyjesz we Flow, gdy będziesz pobierać albo aktualizować rekordy nieruchomości.
Na co zwrócić uwagę: nowy obiekt jest domyślnie niewidoczny dla użytkowników bez uprawnień administratora. Informuje o tym żółty komunikat na górze formularza. Dostęp dla innych nadaje się przez Permission Set. Podstawy uprawnień znajdziesz w lekcji Setup i użytkownicy.
Krok 2: kreator nowego pola
Każde pole tworzysz tym samym kreatorem w czterech krokach. Przechodzimy go raz w całości na przykładzie pola tekstowego Ulica i numer. Przy kolejnych typach pokażemy już tylko krok 2, bo tylko on się różni.
2.1. Lista pól obiektu
W obiekcie Nieruchomość otwórz Fields & Relationships i kliknij New (1).
Na co zwrócić uwagę: obiekt już ma cztery pola (2), choć nie dodano jeszcze żadnego własnego. To pola standardowe, które Salesforce dodaje do każdego obiektu:
-
Nazwa nieruchomości (Name) - pole nazwy z kroku 1.
-
Owner - właściciel rekordu, czyli użytkownik, który za niego odpowiada.
-
Created By i Last Modified By - kto utworzył rekord i kto go ostatnio zmienił. W tle zapisują się też daty tych zdarzeń.
We Flow często używa się właśnie tych pól, np. "wyślij powiadomienie do właściciela rekordu".
2.2. Krok 1 kreatora: wybór typu pola
To najważniejsza decyzja w całym kreatorze. Lista typów jest długa, więc pokazujemy ją w czterech częściach.
Na górze są typy specjalne: Auto Number, Formula i Roll-Up Summary. Roll-Up Summary jest wyszarzony (1). To nie błąd: ten typ działa tylko na obiekcie, który ma powiązane rekordy w relacji Master-Detail. Odblokujemy go w kroku o relacjach.
Zaznacz Text (1) i kliknij Next.
2.3. Krok 2 kreatora: szczegóły pola
| Nr | Pole | Co wpisujemy | Na co zwrócić uwagę |
|---|---|---|---|
| 1 | Field Label | Ulica i numer | Etykieta widoczna dla użytkownika. Można ją zmieniać bez konsekwencji. |
| 2 | Length | 120 | Maksymalna liczba znaków, najwyżej 255. Za krótkie pole utnie dane przy imporcie. |
| 3 | Field Name | Street | Nazwa API. Salesforce doda __c, więc pełna nazwa to Street__c. Wpisz ją ręcznie, tak jak nazwę obiektu. |
| 4 | Help Text | Wpisz ulicę z numerem, np. ul. Lipowa 5/12. | Podpowiedź, którą użytkownik zobaczy po najechaniu na ikonę "i" przy polu. |
| 5 | Required | niezaznaczone | Pole wymagane blokuje zapis rekordu bez wartości, także zapis wykonywany przez Flow i importy. |
| 6 | Next | - | Przejście do kroku 3. |
Na co zwrócić uwagę przy polu Required: to typowa pułapka we Flow. Jeśli pole jest wymagane, a Flow tworzy rekord bez tej wartości, Flow zakończy się błędem. Zaznaczaj Required tylko wtedy, gdy rekord naprawdę nie ma sensu bez tej informacji.
2.4. Krok 3 kreatora: kto widzi pole
Tu decydujesz, które profile użytkowników widzą pole (1) i czy mogą je tylko czytać (2). Domyślnie wszystkie profile mają pole widoczne i edytowalne. Na potrzeby kursu zostawiamy ustawienia domyślne.
Na co zwrócić uwagę: jeśli użytkownik nie widzi pola, to Flow uruchomiony w jego imieniu (np. ekran w Screen Flow) też go nie zobaczy. "Flow nie widzi pola" to bardzo często właśnie brak uprawnień z tego kroku.
2.5. Krok 4 kreatora: układ strony
Zaznaczony układ strony (1) oznacza, że pole pojawi się na formularzu rekordu. Kliknij Save & New (2), żeby od razu dodać kolejne pole, albo Save (3), żeby zakończyć.
Na co zwrócić uwagę: pole, którego nie ma na układzie strony, nadal istnieje i Flow może je zmieniać. Użytkownik po prostu go nie zobaczy na formularzu.
Rodzina 1: pola tekstowe i kontaktowe
Osiem typów, które przechowują tekst. We Flow wszystkie trafiają do zmiennej typu Text, ale różnią się długością, wyglądem i tym, co Salesforce z nimi robi.
| Typ | Pole w kursie | Nazwa API | Limit | Kiedy użyć |
|---|---|---|---|---|
| Text | Ulica i numer | Street__c | do 255 znaków | Krótki tekst w jednej linii |
| Text Area | Krótki opis | Short_Description__c | 255 znaków | Kilka linii, np. uwagi |
| Text Area (Long) | Opis oferty | Listing_Description__c | do 131 072 znaków | Długi opis bez formatowania |
| Text Area (Rich) | Opis marketingowy | Marketing_Description__c | do 131 072 znaków | Tekst z pogrubieniami, listami i zdjęciami |
| Text (Encrypted) | Numer księgi wieczystej | Land_Register_Number__c | do 175 znaków | Dane wrażliwe, maskowane na ekranie |
| E-mail agenta | Agent_Email__c | 80 znaków | Adres e-mail, Salesforce sprawdza format | |
| Phone | Telefon agenta | Agent_Phone__c | 40 znaków | Numer telefonu, klikalny w aplikacji mobilnej |
| URL | Wirtualny spacer | Virtual_Tour_URL__c | 255 znaków | Link otwierany w nowej karcie |
Text Area
Pole ma stały limit 255 znaków, więc kreator nie pyta o długość. Wpisujesz tylko etykietę (1) i nazwę API (2).
Text Area (Long)
-
Length (1) - domyślnie 32 768 znaków, maksymalnie 131 072.
-
Visible Lines (2) - ile linii ma pole na formularzu. Nie ogranicza długości tekstu, zmienia tylko wygląd.
Na co zwrócić uwagę: przy tym typie nie ma opcji Required. Kreator jej nie pokazuje. Długich pól tekstowych nie da się też użyć jako warunku filtra w elemencie Get Records we Flow.
Text Area (Rich)
Na co zwrócić uwagę:
-
Licznik znaków (1) pokazuje, ile z limitu na obiekt już zużyto. Wszystkie długie pola tekstowe jednego obiektu dzielą wspólny limit 1 638 400 znaków. Dlatego ustawiamy rozsądną długość (2), np. 10 000, zamiast zostawiać maksimum.
-
Flow odczyta z tego pola kod HTML, a nie czysty tekst. Jeśli Flow ma wstawić opis do e-maila albo porównać go z czymś, dostanie tekst ze znacznikami typu
<b>.
Text (Encrypted)
-
Length (1) - 20 znaków wystarczy na numer księgi wieczystej.
-
Mask Type (2) - jak ukryć wartość. Wybieramy Last Four Characters Clear, czyli widoczne tylko 4 ostatnie znaki.
-
Mask Character (3) - znak zastępujący ukryte cyfry, tu gwiazdka.
-
Example (4) - podgląd efektu.
Na co zwrócić uwagę: pełną wartość widzą tylko użytkownicy z uprawnieniem View Encrypted Data. Zaszyfrowanego pola nie da się użyć w filtrach, sortowaniu ani formułach. To stare, klasyczne szyfrowanie. Firmy z wyższymi wymaganiami używają płatnego Shield Platform Encryption.
Salesforce odrzuci wartość, która nie wygląda jak adres e-mail. Pole ma opcję Unique (1), która blokuje duplikaty. Tu jej nie zaznaczamy, bo jeden agent prowadzi wiele nieruchomości.
Phone
Na co zwrócić uwagę: Salesforce nie sprawdza, czy wpisano prawdziwy numer. Formatuje tylko numery amerykańskie (10 cyfr). Polski numer zapisze tak, jak go wpisano, więc warto ustalić w zespole jeden format, np. +48 600 100 200.
URL
Wartość wyświetla się jako link. Jeśli użytkownik wpisze adres bez https://, Salesforce doda http:// sam.
Rodzina 2: liczby i pieniądze
Cztery typy liczbowe. We Flow Number, Currency i Percent trafiają do zmiennych typu Number albo Currency. Auto Number, mimo nazwy, jest dla Flow tekstem.
| Typ | Pole w kursie | Nazwa API | Ustawienia | Kiedy użyć |
|---|---|---|---|---|
| Number | Powierzchnia (m2) | Area_m2__c | 6 cyfr, 2 miejsca po przecinku | Ilości, wymiary, liczniki |
| Currency | Cena | Price__c | 10 cyfr, 2 miejsca po przecinku | Kwoty pieniędzy |
| Percent | Prowizja | Commission_Rate__c | 3 cyfry, 2 miejsca po przecinku | Stawki i udziały procentowe |
| Auto Number | Numer oferty | Listing_Number__c | format NR-{YYYY}-{0000} | Numer nadawany automatycznie |
Number
-
Length (1) - liczba cyfr przed przecinkiem.
-
Decimal Places (2) - liczba cyfr po przecinku. Suma obu wartości nie może przekroczyć 18.
-
Required (3) - zaznaczamy. Powierzchnię użyjemy w formule "Cena za m2", a pusta powierzchnia zepsułaby wynik.
Na co zwrócić uwagę: Number usuwa zera z przodu. Kod pocztowy 05-120 albo numer 0012 zapisany jako liczba zamieni się w 5120 lub 12. Wszystko, na czym nie liczysz, zapisuj jako Text.
Currency
Ustawienia jak w Number: długość (1), miejsca po przecinku (2) i Required (3). Różnica jest w wyświetlaniu: Salesforce doda symbol waluty organizacji.
Na co zwrócić uwagę: symbol waluty zależy od ustawień organizacji, a nie od pola. Jeśli org ma włączonych kilka walut, każdy rekord dostaje własne pole waluty i Flow musi to uwzględniać przy porównaniach.
Percent
Długość 3 (1) i 2 miejsca po przecinku (2) pozwalają zapisać np. 2,50%.
Na co zwrócić uwagę: to ważna pułapka we Flow. Użytkownik wpisuje 2,5, na ekranie widzi 2,5%, ale w formułach wartość zachowuje się jak 0,025. Liczenie prowizji we Flow jako Cena * Prowizja daje więc poprawny wynik tylko w formule. W elemencie Assignment trzeba dzielić przez 100. Zawsze sprawdź wynik na jednym testowym rekordzie.
Auto Number
-
Display Format (1) - wzór numeru.
{0000}to licznik z czterema cyframi,{YYYY}to rok utworzenia rekordu. -
Starting Number (2) - od jakiej liczby zaczyna licznik.
-
Generate Auto Number for existing records (3) - nadaje numery rekordom, które już istnieją.
Na co zwrócić uwagę:
-
Licznik nie zeruje się z nowym rokiem. Po NR-2026-0157 przyjdzie NR-2027-0158, a nie NR-2027-0001.
-
Pola nie da się edytować, ani ręcznie, ani we Flow. Salesforce nadaje numer przy zapisie rekordu.
-
Licznik ma luki. Numer zużyty przez rekord, który potem usunięto, nie wraca do puli. Nie używaj Auto Number tam, gdzie prawo wymaga ciągłej numeracji, np. na fakturach.
Rodzina 3: daty i czas
Trzy typy, które najczęściej uruchamiają automatyzacje czasowe, np. "3 dni przed prezentacją wyślij przypomnienie". We Flow mają osobne typy zmiennych: Date, Date/Time i Time.
| Typ | Pole w kursie | Nazwa API | Co przechowuje | Przykład |
|---|---|---|---|---|
| Date | Dostępna od | Available_From__c | Sam dzień | 01.10.2026 |
| Date/Time | Termin prezentacji | Next_Viewing__c | Dzień i godzinę ze strefą czasową | 01.10.2026 17:30 |
| Time | Godzina dni otwartych | Open_House_Time__c | Samą godzinę, bez daty i strefy | 10:00 |
Date i wartość domyślna
W polu Default Value (1) wpisaliśmy formułę TODAY(). Nowy rekord dostanie więc dzisiejszą datę, a użytkownik może ją zmienić.
Na co zwrócić uwagę: wartość domyślna ustawia się tylko przy tworzeniu rekordu i tylko wtedy, gdy nikt nie poda własnej wartości. Dotyczy to formularza, Flow i importów. Rekordy, które istniały przed utworzeniem pola, zostają puste i trzeba je uzupełnić osobno.
Date/Time
Kreator wygląda jak przy Date, wystarczy etykieta (1) i nazwa API.
Na co zwrócić uwagę: Salesforce zapisuje Date/Time w czasie UTC i przelicza na strefę czasową użytkownika tylko na ekranie. We Flow i w e-mailach godzina może się więc różnić o 1-2 godziny od tej na formularzu. To jeden z najczęstszych błędów w przypomnieniach.
Time
Time przechowuje samą godzinę, np. 10:00, bez daty i bez strefy czasowej. Dobre na godziny otwarcia albo stałe terminy, które powtarzają się codziennie.
Na co zwrócić uwagę: z polem Time nie da się zaplanować Flow "na konkretny dzień", bo pole nie zna daty. Do terminów w kalendarzu używaj Date/Time.
Rodzina 4: pola wyboru
Te pola najczęściej są warunkiem startu Flow, np. "uruchom, gdy Status zmieni się na Sprzedana". Dlatego ich wartości trzeba zaprojektować szczególnie starannie.
| Typ | Pole w kursie | Nazwa API | Wartości | Typ we Flow |
|---|---|---|---|---|
| Checkbox | Umeblowane | Is_Furnished__c | prawda / fałsz | Boolean |
| Picklist | Status | Status__c | Nowa, Dostępna, Zarezerwowana, Sprzedana | Text (Picklist) |
| Picklist (Multi-Select) | Udogodnienia | Amenities__c | Balkon, Winda, Miejsce parkingowe, Ogród, Piwnica | Text (Multi-Select Picklist) |
Checkbox
Jedyne ustawienie to Default Value (1): zaznaczone albo nie. Checkbox nigdy nie jest pusty, zawsze ma wartość prawda albo fałsz, więc nie ma też opcji Required.
Na co zwrócić uwagę: nazwę API checkboxa warto zaczynać od Is_ albo Has_, np. Is_Furnished__c. We Flow warunek Is_Furnished__c = True czyta się wtedy jak zdanie.
Picklist
-
Enter values - wpisujemy własne wartości. Druga opcja, global value set, to lista wspólna dla wielu pól i obiektów.
-
Lista wartości - każda w osobnej linii, w kolejności, w jakiej mają się wyświetlać.
-
Use first value as default value - nowy rekord dostanie status "Nowa".
-
Restrict picklist - nikt, także Flow i import, nie zapisze wartości spoza listy.
Na co zwrócić uwagę:
-
Flow porównuje wartości picklisty jako tekst, co do znaku. Warunek
Status = "Sprzedana "ze spacją na końcu albo"sprzedana"małą literą nigdy się nie spełni. -
Zmiana nazwy wartości psuje automatyzacje. Jeśli za rok ktoś zmieni "Sprzedana" na "Sprzedane", Flow z warunkiem na "Sprzedana" przestanie działać bez żadnego błędu. Każda wartość ma też osobną nazwę API, którą lepiej zostawić bez zmian.
-
Restrict picklist zostaw włączone. Bez tego Flow może zapisać literówkę jako nową wartość i raporty się rozjadą.
Picklist (Multi-Select)
Lista wartości (1) wygląda jak w zwykłej pickliście. Dochodzi Visible Lines (2), czyli wysokość okienka z listą na formularzu.
Na co zwrócić uwagę: to typ, którego we Flow najlepiej unikać. Salesforce zapisuje wybrane wartości jako jeden tekst rozdzielony średnikami, np. Balkon;Winda;Ogród. Warunek Udogodnienia = "Balkon" nie zadziała, gdy wybrano też Windę. Trzeba używać operatora Contains albo funkcji INCLUDES() w formule. Jeśli planujesz automatyzacje na tych wartościach, rozważ kilka checkboxów zamiast jednego multi-selecta.
Rodzina 5: relacje między obiektami
Pole relacji łączy rekord z innym rekordem, np. nieruchomość z jej sprzedającym. W polu zapisuje się Id powiązanego rekordu, czyli 18-znakowy identyfikator, a nie jego nazwa. We Flow relacje pozwalają sięgać do pól powiązanego rekordu, np. {!$Record.Seller__r.Email}.
| Typ | Pole w kursie | Czy powiązanie jest wymagane | Co się dzieje po usunięciu "rodzica" | Dostępność |
|---|---|---|---|---|
| Lookup Relationship | Sprzedający (Seller__c) → Contact | Nie, do wyboru | Do wyboru: czyści pole, blokuje usunięcie albo usuwa rekord | Każdy obiekt |
| Master-Detail Relationship | Nieruchomość (Property__c) na obiekcie Oferta | Tak, zawsze | Usuwa wszystkie powiązane rekordy | Tylko obiekty własne jako "dziecko" |
| External Lookup Relationship | - | Nie | - | Tylko z obiektami zewnętrznymi (Salesforce Connect) |
| Hierarchical Relationship | - | Nie | - | Tylko na obiekcie User |
Lookup: Sprzedający
Najpierw wybierasz obiekt, z którym łączysz pole (1). Wybieramy Contact, bo sprzedający jest kontaktem.
Na kolejnym ekranie Salesforce proponuje nazwy sam. Child Relationship Name (1) zamienił na Nieruchomo_ci, bo znowu nie poradził sobie z polską literą.
Poprawione ustawienia:
-
Field Label - Sprzedający.
-
Field Name - Seller, czyli pełna nazwa
Seller__c. -
Child Relationship Name - Properties. To nazwa relacji "od drugiej strony", używana przy pobieraniu wszystkich nieruchomości danego kontaktu.
-
Co zrobić po usunięciu kontaktu - zostawiamy domyślne czyszczenie pola. Opcja "Delete this record also" mogłaby przy usunięciu jednego kontaktu skasować wiele nieruchomości.
Kreator relacji ma 6 kroków zamiast 4. Ostatni dodaje listę powiązanych rekordów po stronie kontaktu:
Related List Label (1) to tytuł listy "Nieruchomości" na stronie kontaktu. Zaznaczone układy (2) to formularze kontaktu, na których lista się pojawi.
Master-Detail: obiekt Oferta
Master-Detail potrzebuje drugiego obiektu, który będzie "dzieckiem" nieruchomości. Tworzymy obiekt Oferta (Offer__c) tak samo jak w kroku 1, z jedną różnicą: pole nazwy ma typ Auto Number.
-
Data Type: Auto Number - oferty nie mają naturalnej nazwy, więc numerujemy je automatycznie.
-
Display Format: OF-{00000} - numery OF-00001, OF-00002 itd.
-
Starting Number: 1.
Na obiekcie Oferta tworzymy nowe pole i wybieramy Master-Detail Relationship (1). Zauważ, że Roll-Up Summary (2) jest tu wciąż wyszarzony. Odblokuje się dopiero po stronie "rodzica", czyli na Nieruchomości.
Jako obiekt nadrzędny wybieramy Nieruchomość (1):
-
Field Name: Property - pełna nazwa
Property__c. Salesforce zostawił to pole puste, bo etykieta zaczynała się od polskich liter. -
Child Relationship Name: Offers.
-
Sharing Setting - jaki dostęp do nieruchomości musi mieć użytkownik, żeby dodawać i edytować jej oferty. Zostawiamy Read/Write.
Na co zwrócić uwagę: w Master-Detail nie ma opcji Required, bo powiązanie jest zawsze wymagane. Nie da się zapisać oferty bez nieruchomości, także we Flow.
Po zapisaniu obiekt Oferta ma pole relacji (1) i… nie ma pola Owner. W relacji Master-Detail właścicielem oferty jest automatycznie właściciel nieruchomości.
Na obiekcie Oferta dodaliśmy też pole Kwota oferty (Amount__c, typ Currency). Przyda się w następnej rodzinie do pola Roll-Up Summary.
External Lookup i Hierarchy
Po wybraniu External Lookup Relationship lista obiektów (1) jest pusta. Ten typ łączy rekord z danymi spoza Salesforce, np. z systemu ERP, i wymaga skonfigurowanego Salesforce Connect. W org Developer Edition bez integracji nie ma z czym go połączyć.
Hierarchical Relationship w ogóle nie pojawia się na liście typów dla Nieruchomości. Działa tylko na obiekcie User i służy do wskazania przełożonego, np. pole Manager. Z tego pola korzystają np. procesy akceptacji "do przełożonego".
Na co zwrócić uwagę przy wszystkich relacjach: we Flow pole relacji zawiera Id, a nie nazwę. Jeśli Flow ma ustawić sprzedającego, musi najpierw znaleźć kontakt (element Get Records) i przypisać jego Id. Wpisanie imienia i nazwiska nie zadziała.
Rodzina 6: pola wyliczane i lokalizacja
Formula i Roll-Up Summary nie przyjmują wartości od użytkownika. Salesforce liczy je sam, więc są tylko do odczytu, także dla Flow. Geolocation to osobny przypadek: dwa pola liczbowe w jednym.
| Typ | Pole w kursie | Nazwa API | Co liczy |
|---|---|---|---|
| Formula | Cena za m2 | Price_per_m2__c | Cena / Powierzchnia |
| Roll-Up Summary | Najwyższa oferta | Highest_Offer__c | MAX z Kwoty oferty wszystkich ofert |
| Geolocation | Lokalizacja | Location__c | Szerokość i długość geograficzna |
Formula: Cena za m2
Formuła ma 5 kroków kreatora. W kroku 2 podajesz etykietę i nazwę (2) oraz typ wyniku (1). Cena za metr to kwota, więc wybieramy Currency.
W kroku 3 wpisujesz formułę. Pola wstawiasz z listy Insert Field (1), żeby uniknąć literówek w nazwach API. Formuła (2):
IF( Area_m2__c > 0, Price__c / Area_m2__c, NULL )
Czytamy ją tak: jeśli powierzchnia jest większa od zera, podziel cenę przez powierzchnię. W przeciwnym razie zostaw pole puste. Warunek chroni przed dzieleniem przez zero, które wyświetliłoby błąd na rekordzie.
Kliknij Check Syntax (1). Zielony komunikat oznacza, że formuła jest poprawna.
Na co zwrócić uwagę:
-
Na zrzutach edytor formuł jest rozszerzony przez wtyczkę ORGanizer (napis pod polem edycji i znaczek w lewym dolnym rogu). U Ciebie edytor może wyglądać skromniej, ale działa tak samo.
-
Formuła liczy się przy każdym odczycie rekordu, a nie przy zapisie. Dlatego zmiana wartości formuły nie uruchamia Flow typu "po zapisie rekordu". Flow reaguje na zmianę ceny albo powierzchni, a nie na zmianę ceny za m2.
-
Flow może czytać formuły, ale nie może do nich zapisywać.
Roll-Up Summary: Najwyższa oferta
Po utworzeniu relacji Master-Detail Roll-Up Summary na Nieruchomości przestaje być wyszarzony (1).
-
Summarized Object - Oferty, czyli obiekt "dzieci".
-
Typ podsumowania - MAX, czyli największa wartość. Do wyboru są też COUNT (liczba rekordów), SUM (suma) i MIN (najmniejsza wartość).
-
Field to Aggregate - Kwota oferty, czyli pole, z którego bierzemy maksimum.
-
Filter Criteria - liczymy wszystkie oferty. Można ograniczyć się np. do ofert z określonym statusem.
Na co zwrócić uwagę: Roll-Up Summary działa tylko przy Master-Detail. Przy zwykłym Lookup trzeba liczyć to samo Flow. To jeden z najczęstszych powodów, dla których administratorzy budują pierwszy Flow. W przeciwieństwie do formuły zmiana Roll-Up Summary zapisuje się na rekordzie i może uruchomić Flow na Nieruchomości.
Geolocation: Lokalizacja
-
Display Notation: Decimal - współrzędne w formacie 52.229676, a nie w stopniach i minutach. Taki format zwracają mapy Google.
-
Decimal Places: 6 - dokładność do ok. 10 cm.
Na co zwrócić uwagę: Salesforce tworzy z tego pola dwa pola liczbowe: Location__Latitude__s i Location__Longitude__s. We Flow używasz właśnie ich, osobno. Samo Location__c nie jest dostępne jako jedna wartość.
Ściąga: typ pola a Flow
Po lekcji obiekt Nieruchomość ma 22 pola własne i 4 standardowe. Tak wygląda początek listy w Fields & Relationships:
Tabela poniżej zbiera to, co trzeba wiedzieć o każdym typie, zanim użyjesz go we Flow.
| Typ pola | Typ zmiennej we Flow | Flow może zapisać? | Najważniejsza pułapka |
|---|---|---|---|
| Text | Text | Tak | Za krótkie pole utnie dłuższy tekst i Flow zakończy się błędem |
| Text Area | Text | Tak | Limit 255 znaków |
| Text Area (Long) | Text | Tak | Nie da się go użyć jako filtra w Get Records |
| Text Area (Rich) | Text | Tak | Flow widzi kod HTML, nie czysty tekst |
| Text (Encrypted) | Text | Tak | Nie nadaje się do filtrów ani formuł |
| Text | Tak | Nieprawidłowy format przerwie zapis | |
| Phone | Text | Tak | Brak kontroli formatu |
| URL | Text | Tak | Brak kontroli, czy link działa |
| Number | Number | Tak | Usuwa zera z przodu |
| Currency | Currency | Tak | Przy wielu walutach porównuj kwoty w tej samej walucie |
| Percent | Number | Tak | 2,5% to w formułach 0,025, a w Assignment 2,5 |
| Auto Number | Text | Nie | Numer nadawany dopiero przy zapisie |
| Date | Date | Tak | Wartość domyślna tylko dla nowych rekordów |
| Date/Time | Date/Time | Tak | Zapisywany w UTC, przesunięcie godzin |
| Time | Time | Tak | Nie zna daty |
| Checkbox | Boolean | Tak | Nigdy nie jest pusty |
| Picklist | Text (Picklist) | Tak | Porównanie co do znaku, zmiana nazwy wartości psuje warunki |
| Picklist (Multi-Select) | Text (Multi-Select Picklist) | Tak | Wartości rozdzielone średnikiem, używaj Contains |
| Lookup | Text (Id rekordu) | Tak | Przyjmuje Id, nie nazwę |
| Master-Detail | Text (Id rekordu) | Tak, przy tworzeniu | Zawsze wymagane |
| Formula | zależnie od typu wyniku | Nie | Zmiana formuły nie uruchamia Flow |
| Roll-Up Summary | Number / Currency / Date | Nie | Tylko przy Master-Detail |
| Geolocation | 2 × Number | Tak, osobno | Używasz __Latitude__s i __Longitude__s |
Na co zwrócić uwagę w kolumnie "Flow może zapisać": przy Master-Detail rodzica ustawia się przy tworzeniu rekordu. Zmiana rodzica później jest możliwa tylko wtedy, gdy przy polu zaznaczono Allow reparenting.
Najczęstsze błędy i ćwiczenie
Pięć błędów, które potem psują Flow
-
Nazwy API z polskich etykiet. Salesforce tnie polskie litery i tworzy nazwy typu
NieruchomoalboNieruchomo_ci. Zawsze wpisuj nazwę API ręcznie, po angielsku. -
Zmiana nazwy API albo wartości picklisty po zbudowaniu automatyzacji. Etykiety zmieniaj śmiało, nazw API i wartości używanych w warunkach - nigdy bez sprawdzenia, gdzie są użyte (przycisk Where is this used? na stronie pola).
-
Liczby zapisane jako Number, choć nikt na nich nie liczy. Kody pocztowe, numery telefonów i numery dokumentów to Text.
-
Pole wymagane, którego Flow nie wypełnia. Każde pole z Required musisz uwzględnić w elemencie Create Records.
-
Multi-select tam, gdzie będą warunki. Jeśli na wartościach mają działać automatyzacje, wybierz picklist albo kilka checkboxów.
Ćwiczenie
Na obiekcie Oferta dodaj samodzielnie trzy pola:
-
Status oferty - Picklist z wartościami: Złożona, Zaakceptowana, Odrzucona. Pierwsza wartość domyślna.
-
Data ważności - Date z wartością domyślną
TODAY() + 14. -
Różnica do ceny - Formula (Currency): o ile oferta jest niższa od ceny nieruchomości. Podpowiedź: cenę nieruchomości pobierzesz przez relację
Property__r.Price__c.
Następnie na obiekcie Nieruchomość dodaj Roll-Up Summary Liczba ofert (COUNT).
Sprawdź się
1. Klient chce zapisywać kod pocztowy. Jaki typ pola wybierzesz i dlaczego nie Number?
Pokaż odpowiedź
Text. Number usuwa zera z przodu, więc kod 05-120 zamieniłby się w 5120, a na kodach pocztowych i tak niczego się nie liczy.
2. Dlaczego pole Najwyższa oferta mogło powstać dopiero po utworzeniu obiektu Oferta?
Pokaż odpowiedź
Bo to Roll-Up Summary, a ten typ działa tylko na obiekcie nadrzędnym w relacji Master-Detail. Dopóki Oferta nie miała pola Master-Detail wskazującego na Nieruchomość, typ był wyszarzony.
3. Flow ma wysłać e-mail, gdy Cena za m2 przekroczy 20 000 zł. Dlaczego Flow uruchamiany zmianą pola Cena za m2 nie zadziała i co ustawić zamiast tego?
Pokaż odpowiedź
Formuła liczy się przy odczycie rekordu i niczego nie zapisuje, więc jej zmiana nie uruchamia Flow. Flow trzeba uruchamiać zmianą pól, z których formuła się liczy, czyli Ceny albo Powierzchni, i dopiero w nim sprawdzić wartość Cena za m2.
4. Co zobaczy Flow w polu Udogodnienia, jeśli użytkownik zaznaczył Balkon i Ogród?
Pokaż odpowiedź
Jeden tekst z wartościami rozdzielonymi średnikiem: Balkon;Ogród. Żeby sprawdzić jedną z wartości, użyj operatora Contains albo funkcji INCLUDES().
Następny krok: przećwicz budowę obiektu w skróconej formie w warsztacie. O Flow uczysz się w kursie Salesforce Flow, zaczynając od lekcji Czym jest Salesforce Flow.















































