Warsztat: obiekt Nieruchomość krok po kroku

Instrukcja do samodzielnej pracy: w około 65 minut zbudujesz obiekt Nieruchomość z polami wszystkich podstawowych typów, relacjami, formułą i Roll-Up Summary.

Lekcja 8 z 8Moduł 2: Pola w praktyce14 min czytania

W ok. 65 minut (plus 15 minut zadania samodzielnego) zbudujesz w swoim Salesforce obiekt Nieruchomość z polami wszystkich podstawowych typów. Przy każdym kroku masz zrzut ekranu, a czerwone numery na zrzucie odpowiadają numerom w tekście. Pełne wyjaśnienia każdego typu pola i jego pułapek we Flow znajdziesz w lekcji Pola i typy pól w Salesforce.

Zanim zaczniesz

Potrzebujesz: przeglądarki Chrome i darmowego konta Salesforce Developer Edition z uprawnieniami administratora.

Gdzie pracujesz: koło zębate w prawym górnym rogu → Setup → zakładka Object Manager.

Trzy zasady na cały kurs:

  1. Etykieta po polsku, nazwa API po angielsku. Salesforce psuje nazwy tworzone z polskich liter. Pole z nazwą API zawsze poprawiaj ręcznie.

  2. Typ pola wybierasz raz. Zmiana typu później bywa niemożliwa albo kasuje dane. Przeczytaj opis kroku, zanim klikniesz Next.

  3. Opisuj każde pole w Description. Za pół roku nikt nie będzie pamiętał, po co powstało.

Twój ekran może się nieznacznie różnić od zrzutów, np. edytorem formuł. Przyciski i pola mają jednak te same nazwy.

Etap 1: utwórz obiekt Nieruchomość (10 min)

Krok 1.1. W Object Managerze kliknij Create (1) → Custom Object (2).

Menu Create w Object Manager

Krok 1.2. Wpisz nazwy:

Formularz nowego obiektu - nazwy

  1. Label: Nieruchomość

  2. Plural Label: Nieruchomości

  3. Object Name: Property - popraw ręcznie, Salesforce podpowie błędne "Nieruchomo".

  4. Record Name: Nazwa nieruchomości

Krok 1.3. Zostaw Data Type = Text (1). Zaznacz Allow Reports, Allow Activities, Track Field History (2).

Formularz nowego obiektu - typ nazwy i opcje

Record Name - Text czy Auto Number?

Record Name to nazwa, pod którą rekord pokazuje się wszędzie: na listach, w wynikach wyszukiwania, w polach Lookup i na powiązanych listach. Data Type decyduje, skąd ta nazwa pochodzi.

  • Text - nazwę wpisuje użytkownik, np. Kwiatowa 5/12, Gdańsk. Wybierasz, gdy rekord ma naturalną, czytelną nazwę.

  • Auto Number - Salesforce sam nadaje kolejny numer według wzoru, np. OF-00001, a pole jest tylko do odczytu. Wybierasz, gdy rekord nie ma sensownej nazwy własnej: oferta, zgłoszenie, zamówienie.

Nieruchomość zostaje na Text, bo adres niesie informację - NR-00001 w podpowiedzi pola Lookup nie powie nic. Auto Number zobaczysz w etapie 4, na obiekcie Oferta. Salesforce dokłada przy tym polu własne ostrzeżenie: przy masowym wstawianiu rekordów przez API pewniejszy jest Text. Typ da się zmienić po utworzeniu obiektu, ale zmiana dotyka wszystkich istniejących rekordów - decyduj, zanim wprowadzisz dane.

Co włączają opcje na tym ekranie

OpcjaCo dostajesz
Allow ReportsObiekt pojawia się w kreatorze raportów i dashboardów. Bez tego dane siedzą w bazie, ale nie policzysz ich w raporcie.
Allow ActivitiesDo rekordu podepniesz zadania i wydarzenia - historia telefonów, spotkań i przypomnień na osi aktywności.
Track Field HistoryOdblokowuje przycisk Set History Tracking na obiekcie. Wskazujesz do 20 pól, a Salesforce zapisuje każdą zmianę: kto, kiedy, z czego na co.
Allow in Chatter GroupsRekordy można dodawać do grup Chattera. Na kursie niepotrzebne.
Enable LicensingDotyczy pakietów dystrybuowanych przez AppExchange. Zostaw puste.
Allow Sharing, Allow Bulk API Access, Allow Streaming API AccessRazem decydują o klasie obiektu: zaznaczone = Enterprise Application (reguły współdzielenia, masowy import przez Bulk API, zdarzenia Streaming API), odznaczone = Light Application. Zostaw zaznaczone - odznaczenie odcina reguły współdzielenia i masowy import.
Deployment StatusIn Development ukrywa obiekt przed zwykłymi użytkownikami, widzą go tylko administratorzy. Deployed udostępnia go wszystkim, którzy mają uprawnienia.
Allow SearchRekordy wyskakują w globalnej wyszukiwarce i w podpowiedziach pól Lookup.
Add Notes and Attachments related list to default page layoutNa układzie strony ląduje sekcja na notatki i pliki - np. zdjęcia albo skan umowy przy nieruchomości.
Launch New Custom Tab Wizard after saving this custom objectPo zapisaniu Salesforce od razu otworzy kreator zakładki. To właśnie dzieje się w Kroku 1.5.

Dwie ostatnie pozycje to sekcja Object Creation Options - Salesforce pokazuje ją wyłącznie przy tworzeniu obiektu. Resztę zmienisz później przyciskiem Edit na obiekcie.

Krok 1.4. Na dole formularza:

Formularz nowego obiektu - status i zapis

  1. Deployment Status: Deployed

  2. Zaznacz Allow Search

  3. Zaznacz obie opcje z sekcji Object Creation Options

  4. Kliknij Save

Krok 1.5. Otworzy się kreator zakładki - trzy ekrany, z których dwa zwykle przeklikuje się przyciskiem Next bez czytania. To błąd: właśnie te dwa decydują o tym, czy ktokolwiek zobaczy Twój obiekt w systemie.

Gdyby kreator się nie otworzył, znajdziesz go ręcznie: w Setup wpisz Tabs, a w sekcji Custom Object Tabs kliknij New (1).

Lista Custom Object Tabs w Setup z przyciskiem New

Ekran 1 - wygląd zakładki. Pole Object jest już wypełnione (1). Kliknij ikonę lupy przy Tab Style (2) i wybierz ikonę, np. Building - wybór ikony otwiera się w osobnym oknie przeglądarki. Pola Description i Splash Page możesz zostawić puste. Kliknij Next.

Kreator zakładki, ekran 1: obiekt i styl zakładki

Ekran 2 - Add to Profiles. Tu ustawiasz, kto widzi zakładkę. Dla każdego profilu masz trzy opcje:

UstawienieCo oznacza
Default Onzakładka jest od razu w pasku nawigacji
Default Offzakładka istnieje, ale użytkownik musi sam ją sobie dodać przez App Launcher
Tab Hiddenużytkownik nie widzi zakładki i nie może jej dodać

W tym orgu pracujesz na profilu System Administrator - ustaw mu Default On (1) i kliknij Next (2). Na górze ekranu jest też pole Apply one tab visibility to all profiles, które ustawia to samo wszystkim naraz. W orgu kursowym wygodne, w produkcyjnym niebezpieczne - jednym kliknięciem pokazujesz obiekt całej firmie.

Kreator zakładki, ekran 2: widoczność zakładki w profilach

Ukrycie zakładki nie ukrywa danych. Tab Hidden zabiera tylko pozycję w nawigacji. Rekordy nadal będą widoczne w wyszukiwarce, raportach i pod bezpośrednim linkiem, bo o dostęp do danych odpowiadają uprawnienia do obiektu, nie zakładka. To dwie osobne rzeczy i mylenie ich jest jednym z częstszych błędów początkujących administratorów.

Ekran 3 - Add to Custom Apps. Wskazujesz, w których aplikacjach zakładka ma się pojawić (1). Jeśli nie zaznaczysz żadnej, zakładka powstanie, ale nie znajdziesz jej w żadnym pasku nawigacji - tylko w App Launcherze. Kliknij Save.

Kreator zakładki, ekran 3: dodanie zakładki do aplikacji

Krok 1.6. Sprawdź widoczność zakładki na profilu, z którego korzystasz. W Setup wpisz w wyszukiwarce Profiles i otwórz System Administrator. Zjedź na dół strony do sekcji Custom Tab Settings (1) - zobaczysz tam pozycję Nieruchomości z wartością Default On, czyli dokładnie to, co ustawiono w kreatorze. Żeby zmienić tę wartość, klikasz Edit u góry profilu i odnajdujesz tę samą sekcję w trybie edycji.

Profil System Administrator, sekcja Custom Tab Settings

Ta strona wygląda różnie w różnych organizacjach i warto o tym wiedzieć, zanim zaczniesz szukać nie tam, gdzie trzeba. Decyduje ustawienie Enhanced Profile User Interface. Gdy jest wyłączone, jak w tym orgu, profil to jedna długa strona podzielona na sekcje i ustawienia zakładek znajdziesz w Custom Tab Settings. Gdy jest włączone, profil ma widok kafelkowy, a te same ustawienia siedzą w Object Settings - razem z uprawnieniami do obiektu i do pól.

Niezależnie od wyglądu zasada jest ta sama: jeśli użytkownik mówi "nie widzę tego obiektu", zaczynasz szukać na jego profilu.

Dla obiektu Oferta zakładki nie tworzymy. Oferta jest rekordem podrzędnym w relacji Master-Detail, więc nie istnieje samodzielnie - każda musi mieć przypisaną Nieruchomość. Tworzona z powiązanej listy na rekordzie Nieruchomości dostaje to powiązanie automatycznie. Gdyby powstawała z własnej zakładki, użytkownik musiałby za każdym razem wskazywać rodzica ręcznie, a przy pomyłce oferta wylądowałaby przy złej nieruchomości.

Krok 1.7. Sprawdź wynik: API Name ma wartość Property__c (1).

Szczegóły obiektu Nieruchomość

Checklista etapu 1:

  • API Name obiektu to Property__c

  • Zaznaczone Allow Reports i Allow Search

  • Istnieje zakładka Nieruchomości

Etap 2: pierwsze pole krok po kroku (10 min)

Każde pole tworzysz tym samym kreatorem w 4 krokach. Przejdziemy go raz na polu Ulica i numer.

Krok 2.1. W obiekcie otwórz Fields & Relationships i kliknij New (1). Cztery pola na liście (2) Salesforce dodał sam.

Lista pól nowego obiektu

Krok 2.2 (kreator 1/4). Zaznacz Text (1) i kliknij Next.

Wybór typu Text

Krok 2.3 (kreator 2/4). Wypełnij pola:

Szczegóły pola Ulica i numer

  1. Field Label: Ulica i numer

  2. Length: 120

  3. Field Name: Street

  4. Help Text: Wpisz ulicę z numerem, np. ul. Lipowa 5/12.

  5. Required: zostaw puste

  6. Kliknij Next

Krok 2.4 (kreator 3/4). Nic nie zmieniaj, kliknij Next. Tu decydujesz, które profile widzą pole (1) i czy tylko je czytają (2).

Uprawnienia do pola dla profili

Krok 2.5 (kreator 4/4). Zostaw zaznaczony układ strony (1). Kliknij Save & New (2), żeby od razu dodać kolejne pole.

Dodanie pola do układu strony

Checklista etapu 2:

  • Pole Street__c jest na liście pól

  • Umiesz powiedzieć, czym różni się Field Label od Field Name

Etap 3: pozostałe pola (20 min)

Powtarzaj kreator z etapu 2 dla każdego wiersza tabeli. Różni się tylko krok 2/4. W krokach 3/4 i 4/4 nic nie zmieniasz.

Typ (krok 1/4)Field LabelField NameCo ustawić w kroku 2/4
Text AreaKrótki opisShort_Descriptionnic więcej
Text Area (Long)Opis ofertyListing_DescriptionVisible Lines: 6
Text Area (Rich)Opis marketingowyMarketing_DescriptionLength: 10000, Visible Lines: 10
Text (Encrypted)Numer księgi wieczystejLand_Register_NumberLength: 20, Mask Type: Last Four Characters Clear, Mask Character: *
EmailE-mail agentaAgent_Emailnic więcej
PhoneTelefon agentaAgent_Phonenic więcej
URLWirtualny spacerVirtual_Tour_URLnic więcej
NumberPowierzchnia (m2)Area_m2Length: 6, Decimal Places: 2, Required
CurrencyCenaPriceLength: 10, Decimal Places: 2, Required
PercentProwizjaCommission_RateLength: 3, Decimal Places: 2
Auto NumberNumer ofertyListing_NumberDisplay Format: NR-{YYYY}-{0000}, Starting Number: 1
DateDostępna odAvailable_FromDefault Value: TODAY()
Date/TimeTermin prezentacjiNext_Viewingnic więcej
TimeGodzina dni otwartychOpen_House_Timenic więcej
CheckboxUmeblowaneIs_FurnishedDefault Value: Unchecked
PicklistStatusStatuswartości: Nowa, Dostępna, Zarezerwowana, Sprzedana
Picklist (Multi-Select)UdogodnieniaAmenitieswartości: Balkon, Winda, Miejsce parkingowe, Ogród, Piwnica
GeolocationLokalizacjaLocationDecimal, Decimal Places: 6

Jak to wygląda na ekranie

Number - długość (1), miejsca po przecinku (2), pole wymagane (3):

Szczegóły pola Powierzchnia

Currency - te same ustawienia co Number:

Szczegóły pola Cena

Date - wartość domyślna TODAY() (1):

Szczegóły pola Dostępna od

Checkbox - wartość domyślna (1):

Szczegóły pola Umeblowane

Picklist - wybierz Enter values (1), wpisz wartości, każdą w nowej linii (2), zaznacz Use first value as default (3), zostaw Restrict picklist (4):

Szczegóły pola Status

Uwaga na pułapki:

  • Kod pocztowy albo numer telefonu zapisuj jako Text, nie Number. Number usuwa zera z przodu.

  • Wartości picklisty wpisuj starannie. Późniejsza zmiana nazwy wartości psuje automatyzacje.

Checklista etapu 3:

  • Na liście pól jest 19 pól własnych (z końcówką __c)

  • Wszystkie nazwy API są po angielsku, bez polskich znaków

Etap 4: relacje (15 min)

4.1. Lookup: Sprzedający

Krok 1. Nowe pole na Nieruchomości, typ Lookup Relationship. W Related To wybierz Contact (1).

Wybór obiektu dla relacji Lookup

Krok 2. Wpisz nazwy i popraw podpowiedzi Salesforce:

Szczegóły pola Sprzedający

  1. Field Label: Sprzedający

  2. Field Name: Seller

  3. Child Relationship Name: Properties - Salesforce podpowie błędne "Nieruchomo_ci"

  4. Po usunięciu kontaktu: zostaw Clear the value of this field

Co znaczą trzy opcje w "What to do if the lookup record is deleted?"

Ta sekcja odpowiada na jedno pytanie: co ma się stać z nieruchomością, gdy ktoś usunie kontakt wpisany w polu Sprzedający.

OpcjaCo się dzieje po usunięciu kontaktu
Clear the value of this fieldNieruchomość zostaje, pole Sprzedający robi się puste. Salesforce nie pozwoli wybrać tej opcji, jeśli zaznaczysz wyżej Required - bo pole wymagane nie może zostać puste.
Delete this record alsoRazem z kontaktem znika nieruchomość. To kasowanie kaskadowe i Salesforce sam przy nim ostrzega: usuwanie omija reguły współdzielenia, więc użytkownik może jednym ruchem skasować rekordy, do których nie ma dostępu.
Don't allow deletion of the lookup recordSalesforce zablokuje usunięcie kontaktu tak długo, jak wskazuje na niego choć jedna nieruchomość.

Na kursie zostaje Clear the value of this field - domyślne i najbezpieczniejsze zachowanie dla zwykłego powiązania. Pozostałe dwie to decyzja projektowa: kaskadowe kasowanie ma sens tylko wtedy, gdy rekord nie ma racji bytu bez tego drugiego, a wtedy zwykle właściwszym narzędziem jest Master-Detail z punktu 4.3. Blokada usuwania chroni spójność danych, ale kosztem użytkownika, który zobaczy komunikat o odmowie i nie będzie wiedział, co go blokuje.

Krok 3. Klikaj Next do końca kreatora (6 kroków) i Save.

4.2. Nowy obiekt Oferta

Utwórz drugi obiekt jak w etapie 1: Label Oferta, Plural Oferty, Object Name Offer. Jedna różnica - pole nazwy:

Obiekt Oferta z nazwą typu Auto Number

  1. Data Type: Auto Number

  2. Display Format: OF-{00000}

  3. Starting Number: 1

4.3. Master-Detail: Oferta należy do Nieruchomości

Krok 1. Na obiekcie Oferta utwórz pole typu Master-Detail Relationship (1). Related To: Nieruchomość.

Wybór typu Master-Detail na obiekcie Oferta

Krok 2. Field Name: Property (1), Child Relationship Name: Offers (2), Sharing Setting: zostaw Read/Write (3).

Szczegóły pola Nieruchomość na obiekcie Oferta

Krok 3. Next do końca i Save.

Krok 4. Na obiekcie Oferta dodaj pole Currency: Field Label Kwota oferty, Field Name Amount, Length 10, Decimal Places 2.

Uwaga: usunięcie nieruchomości usunie też wszystkie jej oferty. Tak działa Master-Detail.

Checklista etapu 4:

  • Na Nieruchomości jest pole Seller__c typu Lookup(Contact)

  • Istnieje obiekt Offer__c z polami Property__c i Amount__c

Etap 5: formuła i Roll-Up Summary (10 min)

5.1. Roll-Up Summary: Najwyższa oferta

Krok 1. Wróć na obiekt Nieruchomość → New. Typ Roll-Up Summary (1) jest już aktywny, bo istnieje relacja Master-Detail z etapu 4.

Roll-Up Summary jest już dostępny

Krok 2. Field Label Najwyższa oferta, Field Name Highest_Offer, Next.

Krok 3. Ustaw podsumowanie:

Definicja podsumowania

  1. Summarized Object: Oferty

  2. Typ: MAX

  3. Field to Aggregate: Kwota oferty

  4. Filter Criteria: zostaw All records

Next do końca i Save.

5.2. Formula: Cena za m2

Krok 1. Nowe pole typu Formula. Wybierz typ wyniku Currency (1), wpisz Field Label Cena za m2 i Field Name Price_per_m2 (2).

Wybór typu wyniku formuły

Krok 2. Wpisz formułę:

IF( Area_m2__c > 0, Price__c / Area_m2__c, NULL )

Krok 3. Kliknij Check Syntax (1). Musi pojawić się zielony komunikat "No syntax errors".

Sprawdzenie składni formuły

Krok 4. Next do końca i Save.

Uwaga: formuła i Roll-Up Summary są tylko do odczytu. Nikt, także automatyzacja, nie wpisze do nich wartości ręcznie.

Druga uwaga, ważniejsza: formuła niczego nie zapisuje na rekordzie - przelicza wynik dopiero w chwili, gdy ktoś na rekord patrzy. Skoro nic się nie zapisuje, nic się też nie dzieje: zmiana wartości pola formuły nie uruchomi Flow uruchamianego rekordem (record-triggered flow) ani reguły walidacji. Pole Cena za m2 może jutro pokazać inną liczbę, a żaden automat tego nie zauważy. Jeśli coś ma się wydarzyć w momencie zmiany, robi to Flow, nie formuła - wrócimy do tego w lekcji Before-Save czy After-Save.

Checklista etapu 5:

  • Check Syntax pokazał brak błędów

  • Na liście pól są Highest_Offer__c i Price_per_m2__c

Checklista końcowa i zadanie samodzielne

Tak powinna wyglądać lista pól Nieruchomości po warsztacie (fragment, razem 26 pól):

Pola obiektu Nieruchomość po lekcji

Sprawdź, zanim przejdziesz dalej:

  • Obiekt Nieruchomość ma 22 pola własne i 4 standardowe

  • Obiekt Oferta ma pola Property__c i Amount__c

  • Żadna nazwa API nie zawiera polskich znaków ani obciętych słów

  • Istnieje zakładka Nieruchomości

Zadanie samodzielne (15 min): na obiekcie Oferta dodaj bez instrukcji:

  • Picklist Status oferty: Złożona, Zaakceptowana, Odrzucona

  • Date Data ważności z wartością domyślną TODAY() + 14

  • Roll-Up Summary Liczba ofert (COUNT) na Nieruchomości

Co dalej: w kursie Zapytania SOQL nauczysz się wyciągać dane z obiektów, a w kursie Salesforce Flow zbudujesz pierwszy Flow. Gdyby coś w warsztacie było niejasne, wróć do lekcji Pola i typy pól w Salesforce.