• Drew Chaplin
  • 0 Points
  • Member since 2015

  • Chatter
  • 0
    Best Answers
  • 0
    Likes Received
  • 0
    Likes Given
  • 0
  • 6
I am getting the Boat picklist vlaues from the "BoatSearchForm" component and passing it Boat Search Component as an event.

From the BoatSearchForm component, I am firing an event that is handled by the BoatSearch Component.

User-added image
<aura:component controller="boatTypeValues" implements="force:appHostable,flexipage:availableForAllPageTypes,flexipage:availableForRecordHome,force:hasRecordId,forceCommunity:availableForAllPageTypes,force:lightningQuickAction" access="global" >
 <aura:attribute name="boatTypeNames" type= "String[]"/>
 <aura:attribute name="boatTypeList" type = "BoatType__c[]"/>
 <aura:attribute name="showNew" type = "Boolean"/>
 <aura:attribute name ="carTypeSelect" type = "String"/>
 <aura:attribute name = "boatTypeID" type = "String"/>
 <aura:registerEvent name="formsubmit" type="c:formsubmit"/>
 <aura:handler name="init" value="{!this}" action="{!c.doInit}" /> 
    <lightning:layout horizontalAlign="center" class="slds-box slds-theme_default">
            <!--div class = " alignLeft">
         		<h1 class= "slds-text-align_left"> Find a Boat </h1>
            <ul class="slds-list--horizontal">
                    <lightning:layoutItem padding="around-small">
                        <lightning:select class="select-auto-width moveTop" aura:id="select" name="selectType"  onchange ="{!c.newValueSelected}">
                            <option value="All Types">All Types</option>
                            	<aura:iteration items="{!v.boatTypeNames}" var="s">
                                    <option value="{!v.boatTypeID}" selected="{!v.boatTypeID}">{!s}</option>
                    <lightning:layoutItem padding="around-small">
                            <lightning:button variant="brand" label="Search" title="Search" class="slds-m-left_x-small" onclick ="{!c.onFormSubmit}"></lightning:button>
                    <lightning:layoutItem padding="around-small">
                            <aura:if isTrue = "{!v.showNew}">
                                     <lightning:button variant="neutral" label="New" title="newRecord" class="slds-m-left_x-small" onclick ="{!c.creatNewRecord}"/>

BoatSearchForm Controller:
      doInit : function(component, event, helper) {
        //To show the new button using Force:create record
        var newRecord = $A.get("e.force:createRecord");
           component.set("V.showNew", true);    
            component.set("V.showNew", false);  
    	var pick = component.get("c.getPickListValuesIntoList");
    	pick.setCallback(this, function(response) {
            var state = response.getState();
            if(state === 'SUCCESS'){
                var listBoats= []; 
                listBoats = response.getReturnValue();
                console.log('The list of boats size is ' +JSON.stringify(listBoats));
                var listboatNames=[];
                for (var item in listBoats){
                    var boatName = listBoats[item].Name;
                    console.log ('The boat name is  '+boatName);
                    //console.log('The boat name is ' +listboatNames[3]);
                console.log('The list of boats names size is ' +listboatNames.length);
                component.set("v.boatTypeNames", listboatNames);
 			 else if(state === 'ERROR'){

                console.log("Failed with state: " + state);
    creatNewRecord : function (component, event, helper){
        var createBoatRecord = $A.get("e.force:createRecord");
        //Get the picklist value selected by the user
        var pickListOption = component.find("select").get("v.value");
                'Name':'Test Boat',
                'Contact__c' :'0036g00000AjiioAAB',
                'BoatType__c' :pickListOption
    newValueSelected : function(component, event, helper){
    var pickListValue = component.find('select').get('v.value');
	//var pickListValue = component.get("v.carTypeSelect");     
    console.log('Option selected is'+pickListValue);
    onFormSubmit : function(component, event, helper){
        console.log('Inside  a onFormsubmit BoatSearchForm controller');
        //var boatTypeID = component.get("v.boatTypeID");
        var boatTypeID = component.find('select').get('v.value');
        //console.log('Boat Type Id is '+boatTypeID);
        var searchEvent = component.getEvent("formsubmit");
        console.log('Fired the event ' +searchEvent);
        console.log('Event fired');

BoatSearch Component:
<aura:component implements="flexipage:availableForAllPageTypes,flexipage:availableForRecordHome,force:hasRecordId" access="global">
    <aura:handler name="formsubmit" event="c:formsubmit" action ="{!c.onFormSubmit}"/>
    <article class="slds-card bottomMargin slds-m-bottom--medium">
  		<div class="slds-card__header slds-grid ">
        	<header title ="Find a Boat" class="slds-text-heading--small">Find a Boat</header>            
        <div class="slds-card__body">
            <c:BoatSearchForm aura:id ="boatSearchFormID"/>
    <article class="slds-card bottomMargin">
      	<div class="slds-card__header slds-grid ">
        	<header title ="Matching Boats" class="slds-text-heading--small">Matching Boats</header>            
        <div class="slds-card__body">
            <c:BoatSearchResults aura:id="boatSearchResID"/>

BoatSearchForm Controller:
	onFormSubmit : function(component, event, helper) {
        var formData = event.getParam("formData");
        console.log('The form data Inside Boat Search Component is '+formData);
        //var boattypeID = formData.boatTypeId;
        //var boatTypeId = formData;
        console.log ('The boat type ID inside the BoatSearch controller is ' +formData);
        //Call the search function in boatSearchResults component
        var bsr = component.find("boatSearchResID");


From the boatsearch component, I am calling an <Apex:method> inside BoatSearchResults componet which through the helper calls the  apex class - ​​​​​BoatSearchResults

BoatSearchResults component:
<aura:component controller="BoatSearchResults" implements="force:appHostable,flexipage:availableForAllPageTypes,flexipage:availableForRecordHome,force:hasRecordId,forceCommunity:availableForAllPageTypes" access="global" >
    <aura:attribute name = "Boats" type ="Boat__c[]" access="GLOBAL"/>
    <aura:attribute name ="noResults" type = "Boolean"/>
    <aura:attribute name="boatTypeId" type = "String"/>
    <aura:method name="search" description="Sample method with parameter" action="{!c.doSearch}" access="public" >
        <aura:attribute name="boatTypeIdMethod" type="String"/>
    <aura:handler name="init" value="{!this}" action="{!c.doInit}" />
    <aura:if isTrue="{!v.noResults}">
    		<div class="slds-align_absolute-center  slds-text-heading_medium slds-text-color_error">
                <p>"No boats found"</p>
            <aura:set attribute="else">
               	<lightning:layout horizontalAlign="spread" multipleRows="true">
                    <aura:iteration items="{!v.Boats}" var="eachBoat">
                        <lightning:layoutItem size="3">

BoatSearchResults Controller:
	doSearch : function(component, event, helper)  {
        console.log('Inside BoatSearchResultsController');
        //var param = component.get("v.boatTypeId");
        var param = event.getParam("arguments");
        //console.log('The BoatSearchResults method arguments are ' +param);
            var boatTypeIdLatest = param.boatTypeIdMethod;
            console.log('The boat type ID in BoatSearchResults  is '+boatTypeIdLatest);
            //var currentBoatID = component.get("v.boatTypeId");
            component.set("v.boatTypeId", boatTypeIdLatest);
            var updatedboatTypeID = component.get("v.boatTypeId");
            console.log('The updated boat type sent from BoatSearchResults controller to helper is '+boatTypeIdLatest);
    doInit : function(component, event, helper)  {

BoatSearchResults Helper:
	onSearch : function(component,boatTypeId) {
        var finalboattype = boatTypeId;
        //component.set("v.boatTypeId",boatTypeId );
        console.log('Inside the BoatSearchResult helper and the boat type Id is '+finalboattype);
        //console.log('The action is' +component.get("c.getBoats"));
        var action = component.get("c.getBoats");
            //"boatTypeId" : finalboattype
            "boatTypeId": component.get("v.boatTypeId")
        console.log('The action is ' +action);
        action.setCallback(this, function(response){

			console.log('The response is '+ JSON.stringify(response));
            var state = response.getState();
			//var state = "SUCCESS"
            console.log('The state is '+state);
            if (state === "SUCCESS"){
                var boats = component.get("v.Boats");
                var responseOne = response.getReturnValue();
                console.log('The response list size is '+JSON.stringify(responseOne));
                component.set("v.Boats", responseOne);
                console.log('The new Boat is '+component.get("v.Boats").length);
                /*var boats = component.get("v.Boats");
                console.log('The response is '+response);
                component.set("v.Boats", boats);*/                
            else if (state === "ERROR"){
                var errors = response.getError();
            	if (errors) {
                	if (errors[0] && errors[0].message) {
                    	console.log("Error message: " + 
            	} else {
                console.log("Unknown error");
                //$A.log("Errors", response.getError());
                //console.log('Not success' +response.getError());
        console.log('Last part');

The helper calls the apex class which is excuted but still throws an Error Response.

BoatSearchResults APEX Class:
public with sharing class BoatSearchResults {

    public static List<Boat__c> getBoats(String boatTypeId){
        System.debug('The javascript boartsearchresults APEX called');
        String matchingID =  boatTypeId;
        System.debug('The matching ID in the APEX Class is ' +matchingID);
        List<Boat__c> matchingBoats = new List<Boat__c>();
        List<BoatType__c> matchingBoatIDList = new List<BoatType__c>();
        matchingBoatIDList = [Select Name, Id from BoatType__c where Name =:matchingID];
        System.debug('The size of matching list is '+matchingBoatIDList.size());
        if(matchingID != ''){
            ID boatIdFin = matchingBoatIDList[0].Id ;
            System.debug('The matching boat ID hello is '+boatIdFin);
            matchingBoats = [Select  Name, BoatType__c, Geolocation__c, Picture__c, contact__r.Name from Boat__c where BoatType__c = :boatIdFin];
            System.debug('The returned matchingBoats list size is'+matchingBoats.size());
        else {
             System.debug('The mathcing boat ID is NULL');
			 matchingBoats = [Select  Name, BoatType__c, Geolocation__c, Picture__c, contact__r.Name from Boat__c ALL ROWS];
             System.debug('The returned no matchingBoats list size is'+matchingBoats.size());
        System.debug('The final list is'+matchingBoats);
        return matchingBoats;

/*Map<String, String> matchingBoatIDMap = new Map<String, String>();
        for(BoatType__c btOne :matchingBoatIDList){
            matchingBoatIDMap.put('btOne.Name', 'String.ValueOf(btOne.Id)');
        //System.debug('The map size is'+matchingBoatIDMap.size());

This is the error -  I am getting in the browser.

User-added image

APEX Class is Executed:

User-added image

I am gettign the picklist value from the option selected and then passing the string to the APEX method and return a list of matching records  that I need to iterate over and display the picture of each as a Tile.

BoatTile component:
<aura:component implements="force:appHostable,flexipage:availableForAllPageTypes,flexipage:availableForRecordHome,force:hasRecordId" access="global" >
    <aura:attribute name ="boat" type = "Boat__c" access="GLOBAL"/>
    <lightning:button class="tile" >
	<div style="{!'background:'+ ' url(' + v.boat.Picture__c +') no-repeat;background-position: center;background-size: cover;'}" class="innertile">
 	 <div class="lower-third">
   		<h1 class="slds-truncate">{!v.boat.Contact__c}</h1>

Boat Tile CSS:

.THIS.tile {
    display: inline-block;
    width: 100%;
    height: 220px;
    padding: 1px !important;
.THIS.innertile {
    background-size: cover;
    background-position: center;
    background-repeat: no-repeat;
    width: 100%;
    height: 100%;
.THIS.lower-third {
    position: absolute;
    bottom: 0;
    left: 0;
    right: 0;
    color: #FFFFFF;
    background-color: rgba(0, 0, 0, .4);
    padding: 6px 8px;

I have also tried replicating this in another org and still getting the same error.

​​​​​​​Any help would be highly appreicated! Thanks!​​​​​​​
I am able to send emails from Apex code, however it is only saved in Activity history of Case (object in setWhatId) if I set the TargetObjectId.

My requirement is that I might / might not want to send the email to TargetObjectId, so I have made use of ToAddress.
This however doesn't save the Activity history (or basically create a task as completed + save email message) & if I also include TargetObjectId, it will save the email as Activity history, however I donot want to include TargetObjectId.

In Winter16 there is a feature treatTargetObjectAsRecipient which when set to false won't send the email to TargetObjectId (which is what I wanted), but it is also not saving the Activity History.

So is there a way, where I can Save the email in the Activity History + provide ability to avoid email being sent to the TargetObjectId, but send it to other email addresses mentioned on my page in ToAddress field (which may or may not contain the contact being used as TargetObjectId).

I don't want to create a Contact , send Email and then delete contact.
I have three objects.i.e. Car, Driver and Booking. Booking has Master-Detail relationship with the Car and Driver Objects. OWD of the Car is public Read/Write and for Driver it is Read only.
In such scenario, how the visibility and secuity setting of Booking will behave in the application.



i want mask in telephone number like this.

(999) 999-9999


I have tried with Jquery but not done at all.


please suggest me solution


Thanks in advance