Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Detailed Code Samples

This section currently contains some quick examples without much explanation. For a more thoroughly detailed example, seea few detailed code samples intended as tutorials to give you more guidance:

...

...

Quick and Dirty Code Samples

This section contains some quick examples without much explanation, intended to give you some more ideas of what is possible.

Expand
titleImmediately add all group members as reservation contacts when selecting a group.
Code Block
global with sharing class MyFormLogic implements B25.FormAPI.Customizable {
    global void customize(B25.Form form) {
        // Trigger MyGroupHandler when the Group field changes
        form.getField(B25__Reservation__c.B25__Group__c).onUpdate(new MyGroupHandler());
    }
    
    global with sharing class MyGroupHandler implements B25.FormAPI.EventHandler {
        global void handleEvent(B25.FormEvent event, B25.Form form) {
            // Get all members that belong to the group
            Id newGroupId = (Id) event.getNewValue();
            List<B25__Group_Membership__c> groupMembers = [SELECT B25__Contact__c FROM B25__Group_Membership__c WHERE B25__Group__c = :newGroupId];

            // Loop through the members and add the contact to the reservation contacts
            for(B25__Group_Membership__c groupMember : groupMembers){
                B25__ReservationContact__c reservationContact = new B25__ReservationContact__c();
                reservationContact.B25__Contact__c = groupMember.B25__Contact__c;
                form.getRelatedList(B25__ReservationContact__c.SObjectType).addRecord(reservationContact);
            }
            
            //This updates the quantity of the reservation to the amount of contacts in the group 
            form.getField(B25__Reservation__c.B25__Quantity__c).updateValue(groupMembers.size());
        }
    }
}
Expand
titleAdd an extra

...

option to the

...

reservation contact search that adds all contacts linked to the selected account as reservation contacts
Code Block
global 

...

class 

...

ReservationContactAddedHandler 

...

extends B25.

...

FormEventHandler {
    global override void 

...

handleEvent(B25.FormEvent event, B25.Form form) {
        

...

B25__Reservation__c reservation = form.getReservation();
        if (reservation.B25__Account__c == null || event.getNewValue() != 'all-contacts') {
       

...

 

...

 

...

 

...

 

...

 

...

return;

...

 

...

 

...

 

...

 

...

 

...

 

...

 

...

 

...

}
        for (Contact contact : [SELECT Id FROM Contact WHERE AccountId = :reservation.B25__Account__c]) {
        	form.getRelatedList(B25__ReservationContact__c.SObjectType).

...

addRecord(new 

...

B25__ReservationContact__c(
    

...

        

...

	B25__Contact__c = contact.Id
         

...

 

...

 

...

 ));
        }
    }
}
Code Block
languagejava
global class ReservationContactSearchHandler implements B25.SearchContext.Handler 

...

{
	global B25.SearchResult.

...

Collection getSearchResults(B25.SearchContext searchContext) {
    	B25.SearchResult.Collection searchCollection = searchContext.getDefaultResults();
   

...

 

...

 

...

 

...

 

...

 

...

B25.SearchResult.Collection updatedCollection = new B25.SearchResult.Collection();
        if (searchContext.form.getReservation().B25__Account__c != null) {
        

...

	updatedCollection.addSearchResult(
                new B25.SearchResult('all-contacts', 'Add all contacts linked to current account')
        

...

        	.setPreventDefault(true)
                	.setIcon('standard:contact_list')
     

...

       );
        }
    

...

 

...

 

...

 

...

 updatedCollection.addSearchResults(searchCollection.getSearchResults());
        return updatedCollection;
    }
}
Expand
titleUpdate the status to the status with the same name as the reservation title
Code Block
languagejava
global class ReservationTitleUpdateHandler extends B25.FormEventHandler {
   

...

 global override void handleEvent(B25.FormEvent event, B25.Form form) {
        String newTitleValue = 

...

(String) event.getNewValue();
        List<B25__Reservation_Status__c> matchingStatus = [SELECT Id 

...

FROM B25__Reservation_Status__c WHERE Name = :newTitleValue];
        

...

if (!matchingStatus.isEmpty()) {
          

...

 

...

 form.getField(B25__Reservation__c.B25__Status__c).updateValue(matchingStatus[0].Id);
        }
    }
}
Expand
titleRemove all reservation contacts if the account field is cleared
Code Block
global class ReservationAccountChangeHandler extends 

...

B25.FormEventHandler {
    global override void handleEvent(B25.FormEvent event, B25.Form form) 

...

{

...

        String 

...

newAccountValue = (Id) event.getNewValue();
 

...

       

...

if (String.isBlank(newAccountValue)) {
         

...

 

...

 

...

 

...

for(

...

RelatedListItem item : form.getRelatedList(B25__ReservationContact__c.SObjectType).getItems()) {
            

...

 

...

 

...

 

...

 item.remove();
            }
        }
    

...

}
}
Expand
titleSet all reservation contacts to checked in if the status is set to completed
Code Block
global class ReservationStatusChangeHandler extends B25.FormEventHandler {
    global override void handleEvent(B25.FormEvent event, B25.Form form) {
        Id newStatus = 

...

form.getReservation().B25__

...

Status__c;

...

 

...

 

...

 

...

 

...

 

...

 

...

  List<B25__Reservation_Status__c> reservationStatus = [SELECT Id, Name FROM B25__Reservation_Status__c WHERE id = :newStatus];
   

...

     if (reservationStatus.isEmpty()) {
     

...

       return;
     

...

 

...

 

...

 

...

}

...

 

...

 

...

 

...

 

...

    if (reservationStatus[0].Name == 'Completed') {
    

...

 

...

 

...

 

...

 

...

 

...

 

...

 

...

 

...

for(B25.RelatedListItem item : form.getRelatedList(B25__

...

ReservationContact__c

...

.SObjectType).getItems()) {
                

...

item.

...

getField(B25__ReservationContact__c.

...

B25__

...

CheckedIn__c).updateValue(true);
            }
       

...

 } else {
            for(B25.RelatedListItem item : form.getRelatedList(B25__ReservationContact__c.SObjectType).getItems())

...

 {
           

...

     

...

item.getField(B25__ReservationContact__c.B25__CheckedIn__c).updateValue(false);
            }
        }
    }
}
Expand
title

...

Adds the reservation contact

...

back into the list when removed if the contact is the same as the selected contact on the reservation
Code Block
languagejava
global class 

...

ReservationContactRemoveHandler extends B25.FormEventHandler {
    global override void handleEvent(B25.FormEvent event, B25.Form form) {
        B25__

...

ReservationContact__c 

...

removedReservationContact = (B25__ReservationContact__c) form.

...

getRelatedList(B25__ReservationContact__c.SObjectType).getItemByGuid(event.guid).getRecord();
        if (form.getReservation(

...

).B25__

...

Contact__c == 

...

removedReservationContact.B25__Contact__c) {
            

...

form.getRelatedList(B25__ReservationContact__c.SObjectType).addRecord(removedReservationContact);
        }
    }
}
Expand
titleRandomise the icons on the resource lookup search results
Code Block
global class ResourceLookupSearchHandler 

...

extends B25.SearchHandler {
    global override B25.SearchResultCollection getSearchResults(B25.SearchContext searchContext) {
        

...

B25

...

.SearchResultCollection searchCollection = searchContext.getDefaultResults();
        for (B25.SearchResult result : 

...

searchCollection.getSearchResults()) {
            

...

result.setIcon(this.getRandomIconName());
        }
     

...

 

...

languagejava

...

 

...

 

...

return 

...

searchCollection;
    }
    
   

...

 private String getRandomIconName() {
       

...

 

...

Expand
titleUpdate the status to the status with the same name as the reservation title
Code Block
languagejava
global class ReservationTitleUpdateHandler extends B25.FormEventHandler {
    global override void handleEvent(B25.FormEvent event, B25.Form form) {
        String newTitleValue = (String) event.getNewValue();
        List<B25__Reservation_Status__c> matchingStatus = [SELECT Id FROM B25__Reservation_Status__c WHERE Name = :newTitleValue];
        if (!matchingStatus.isEmpty()) {
            form.getField(B25__Reservation__c.B25__Status__c).updateValue(matchingStatus[0].Id);
        }
    }
}
Expand
titleRemove all reservation contacts if the account field is cleared
Code Block
global class ReservationAccountChangeHandler extends B25.FormEventHandler {
    global override void handleEvent(B25.FormEvent event, B25.Form form) {
        String newAccountValue = (Id) event.getNewValue();
        if (String.isBlank(newAccountValue)) {
            for(RelatedListItem item : form.getRelatedList(B25__ReservationContact__c.SObjectType).getItems()) {
                item.remove();
            }
        }
    }
}
Expand
titleSet all reservation contacts to checked in if the status is set to completed
Code Block
global class ReservationStatusChangeHandler extends B25.FormEventHandler {
    global override void handleEvent(B25.FormEvent event, B25.Form form) {
        Id newStatus = form.getReservation().B25__Status__c;
        List<B25__Reservation_Status__c> reservationStatus = [SELECT Id, Name FROM B25__Reservation_Status__c WHERE id = :newStatus];
        if (reservationStatus.isEmpty()) {
            return;
        }
        if (reservationStatus[0].Name == 'Completed') {
            for(B25.RelatedListItem item : form.getRelatedList(B25__ReservationContact__c.SObjectType).getItems()) {
                item.getField(B25__ReservationContact__c.B25__CheckedIn__c).updateValue(true);
            }
        } else {
            for(B25.RelatedListItem item : form.getRelatedList(B25__ReservationContact__c.SObjectType).getItems()) {
                item.getField(B25__ReservationContact__c.B25__CheckedIn__c).updateValue(false);
            }
        }
    }
}
Expand
titleAdds the reservation contact back into the list when removed if the contact is the same as the selected contact on the reservation
Code Block
languagejava
global class ReservationContactRemoveHandler extends B25.FormEventHandler {
    global override void handleEvent(B25.FormEvent event, B25.Form form) {
        B25__ReservationContact__c removedReservationContact = (B25__ReservationContact__c) form.getRelatedList(B25__ReservationContact__c.SObjectType).getItemByGuid(event.guid).getRecord();
        if (form.getReservation().B25__Contact__c == removedReservationContact.B25__Contact__c) {
            form.getRelatedList(B25__ReservationContact__c.SObjectType).addRecord(removedReservationContact);
        }
    }
}
Expand
titleRandomise the icons on the resource lookup search results
Code Block
global class ResourceLookupSearchHandler extends B25.SearchHandler {
    global override B25.SearchResultCollection getSearchResults(B25.SearchContext searchContext) {
        B25.SearchResultCollection searchCollection = searchContext.getDefaultResults();
        for (B25.SearchResult result : searchCollection.getSearchResults()) {
            result.setIcon(this.getRandomIconName());
        }
        return searchCollection;
    }
    
    private String getRandomIconName() {
        return 'custom:custom' + String.valueOf(Math.Round(Math.Random() * (113-1) + 1));
    }
}
Expand
titleSet the title of any newly created reservation to New Reservation
Code Block
languagejava
global class FormInitHandler extends B25.FormEventHandler {
    global override void handleEvent(B25.FormEvent event, B25.Form form) {
        if (form.getReservation().Id == null) {
        	form.getField(B25__Reservation__c.Title__c).updateValue('New Reservation');   
        }
    }
}

...

titleAdd (Edited) when a reservation is opened and it is not a new reservation

...

languagejava

...

return 'custom:custom' + String.valueOf(Math.Round(Math.Random() * (113-1) + 1));
    }
}
Expand
titleSet the title of any newly created reservation to New Reservation
Code Block
languagejava
global class FormInitHandler extends B25.FormEventHandler {
    global override void handleEvent(B25.FormEvent event, B25.Form form) {
        if 

...

(form.getReservation().Id == null) {
        	form.getField(B25__Reservation__c.

...

Title__c).updateValue('

...

New Reservation');   
        }
    }
}
Expand
titleToggle the checked in checkbox based on if the notes field contains checked in or checked out
Code Block
global class ReservationContactNotesChangeHandler extends B25.FormEventHandler {
    global override void handleEvent(B25.FormEvent event, B25.Form form) {
        String newNotesValue = (String) event.getNewValue();
        if (!String.isBlank(newNotesValue)) {
            if (newNotesValue.containsIgnoreCase('Checked In')) {
                form.getRelatedList(B25__ReservationContact__c.SObjectType).getitembyGuid(event.guid).getField(B25__ReservationContact__c.B25__CheckedIn__c).updateValue(true);
            } else if (newNotesValue.containsIgnoreCase('Checked Out')) {
                form.getRelatedList(B25__ReservationContact__c.SObjectType).getitembyGuid(event.guid).getField(B25__ReservationContact__c.B25__CheckedIn__c).updateValue(false);
            }
        }
    }
}
Expand
titleDisplay two contact names linked to the account as meta text on the search result
Code Block
languagejava
global class AccountLookupSearchHandler extends B25.SearchHandler {
    global override B25.SearchResultCollection getSearchResults(B25.SearchContext searchContext) {
        B25.SearchResultCollection collection = new B25.SearchResultCollection();
        for (Account account : [SELECT Id, Name, (SELECT Name FROM Contacts LIMIT 2) FROM Account LIMIT 20]) {
            List<String> metaTextArray = new List<String>();
            for (Contact contact : account.Contacts) {
                metaTextArray.add(contact.Name);
            }
            collection.addSearchResult(new B25.SearchResult(account.Id, account.Name).setMetaText(String.join(metaTextArray, ', ')));
        }
        return collection;
    }
}