• Sisodia Saurabh
  • NEWBIE
  • 20 Points
  • Member since 2016

  • Chatter
    Feed
  • 0
    Best Answers
  • 0
    Likes Received
  • 0
    Likes Given
  • 8
    Questions
  • 15
    Replies
Dear Team ,

I created LWC having search functionality but m getting error plz have a look on image and my code User-added image
<template>
    <div class="slds-m-around_medium">
     
        <div class="slds-m-bottom_small">
            <lightning-input type="text"
               value={sVal}
               label="Contact Name"
               onchange={updateSeachKey}
               ></lightning-input>
         </div>
         
         <lightning-button label="Search"
            onclick={handleSearch}
            variant="brand"></lightning-button>
            
         <!-- custom data table(with SLDS style) to display contact list  -->  
         <table class="slds-table slds-table_cell-buffer slds-table_bordered slds-m-top_small">
            <thead>
               <tr class="slds-line-height_reset">
                  <th class="" scope="col">
                     <div class="slds-truncate" title="First Name">First Name</div>
                  </th>
                  <th class="" scope="col">
                     <div class="slds-truncate" title="Last Name">Last Name</div>
                  </th>
                  <th class="" scope="col">
                     <div class="slds-truncate" title="Phone">Phone</div>
                  </th>
                  <th class="" scope="col">
                     <div class="slds-truncate" title="Email">Email</div>
                  </th>
               </tr>
            </thead>
            
            <tbody>
               <!--iterate all contact records using for-each iteration -->    
               <template for:each={contacts} for:item="contact">
                  <tr class="slds-hint-parent" key={contact.Id}>
                     <td>
                        <div class="slds-truncate">{contact.FirstName}</div>
                     </td>
                     <td>
                        <div class="slds-truncate">{contact.LastName}</div>
                     </td>
                     <td>
                        <div class="slds-truncate">
                           <lightning-formatted-phone value={contact.Phone} ></lightning-formatted-phone>
                        </div>
                     </td>
                     <td>
                        <div class="slds-truncate">
                           <lightning-formatted-email value={contact.Email} ></lightning-formatted-email>
                        </div>
                     </td>
                  </tr>
               </template>
            </tbody>
         </table>
      </div>
</template>


import { LightningElement,track} from 'lwc';
// import server side apex class method 
import getContactList from '@salesforce/apex/customSearchController.getContactList';
// import standard toast event 
import {ShowToastEvent} from 'lightning/platformShowToastEvent'
 
export default class customSearch extends LightningElement {
    //@track: Marks a property for internal monitoring. A template or function using- 
    //this property forces a component to rerender when the property’s value changes.
    @track contacts;
    sVal = '';
 
    // update sVal var when input field value change
    updateSeachKey(event) {
        this.sVal = event.target.value;
    }
 
    // call apex method on button click 
    handleSearch() {
        // if search input value is not blank then call apex method, else display error msg 
        if (this.sVal !== '') {
            getContactList({
                    searchKey: this.sVal
                })
                .then(result => {
                    // set @track contacts variable with return contact list from server  
                    this.contacts = result;
                })
                .catch(error => {
                    // display server exception in toast msg 
                    const event = new ShowToastEvent({
                        title: 'Error',
                        variant: 'error',
                        message: error.body.message,
                    });
                    this.dispatchEvent(event);
                    // reset contacts var with null   
                    this.contacts = null;
                });
        } else {
            // fire toast event if input field is blank
            const event = new ShowToastEvent({
                variant: 'error',
                message: 'Search text missing..',
            });
            this.dispatchEvent(event);
        }
    }
}
 

<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata" fqn="customSearch">
    <apiVersion>47.0</apiVersion>
    <isExposed>true</isExposed>
     <targets>
        <target>lightning__AppPage</target>
        <target>lightning__RecordPage</target>
        <target>lightning__HomePage</target>
    </targets>
</LightningComponentBundle>

Plz help me to solve this error

Thanks & Regards
Sachin Bhalerao
 
Hi,
I have written batch to send emails to users not logged in more than 20 days. it is working when I use schedular  with batch limit 10.
But when I am trying to write test class I am getting below error:
"System.UnexpectedException: No more than one executeBatch can be called from within a test method.  Please make sure the iterable returned from your start method matches the batch size, resulting in one executeBatch invocation."

--- my batch -- 
global class SendEmailtoNonActiveUsersBatch implements database.Batchable<sObject> {
    Exception[] errors = new Exception[0];
    global String query;
    global Database.QueryLocator start(Database.BatchableContext bc) {
        
        string query = 'SELECT id,Firstname,Lastname,Profile.name, email,Isactive, LastLoginDate, category__c,IsEmailSendToNonActive__c FROM User where IsActive=True and Category__c= \'Employee\' and IsEmailSendToNonActive__c != true and LastLoginDate < LAST_N_DAYS:20 order by Firstname ASC ';
        return database.getQueryLocator(query);
    }
    
    global void execute(Database.BatchableContext bc, List<User> scope){
        system.debug('Scope size' +scope.size());
        try{ 
            String currentUserLink = URL.getSalesforceBaseUrl().toExternalForm() + '/';
            if(scope.size() >0){ 
                for(user u: scope){
                    if(u.IsEmailSendToNonActive__c != true){
                        u.IsEmailSendToNonActive__c = true;
                        string[] toAddress = new string[] {u.Email};
                        string subject = 'Notification Of User Deactivation';
                        
                        string plainBody = 'TEST'
                        
                        SendEmail(toAddress,subject, plainBody, null, null );
                        update u;
                    }
                }
            }
        }
        catch(exception e){
            errors.add(e);
        }
    }
    
    global void finish(Database.BatchableContext bc){
        //Admins email addresses
        List<string> emailAdd = new List<string>();
        for(AdminsEmailList__c emad : AdminsEmailList__c.getAll().values())
        {
            system.debug('emad.Email__c:'+emad.Email__c);   
            emailAdd.add(emad.Email__c);
        }
        
        List<AggregateResult> numberOfRows = [Select count(id) from user where IsEmailSendToNonActive__c=True and lastmodifieddate = today];
        integer numRow = (integer)numberOfRows[0].get('expr0');
        
        AsyncApexJob a = [SELECT Id,Status,JobType,NumberOfErrors,JobItemsProcessed,TotalJobItems,CompletedDate,ExtendedStatus
                          FROM AsyncApexJob WHERE Id =:BC.getJobId()];
        
        
        
        //check for errors if no error then proceed
        string errorString;
        for(Exception s: errors)
        {
            errorString = errorString + s.getMessage();  
        }
        if(!errors.isEmpty()) {
            string errSub = 'Error(s) occurred during sending emails to Non Active user batch process.';
            string errBody = 'below is the error details: \n\n'+errorString;
            SendEmail(emailAdd, errSub, errBody, null, null);
        } 
    }
    public void SendEmail(List<string> toEmailAdd, string subject, string body, string attchmentName, string attachment){
        system.debug('toEmailAdd::'+toEmailAdd);
        if(toEmailAdd != null && !toEmailAdd.isEmpty()){
            Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();

            mail.setToAddresses(toEmailAdd);
            mail.setSubject(subject);
            mail.setSaveAsActivity(false);
            mail.setPlainTextBody(body);
 
            
            Messaging.sendEmail(new Messaging.Email[] { mail });
        }
    }
}
--- Schedular --
global class ScheduleSendEmailToNonActiveUsers implements Schedulable{
    
    global void execute(SchedulableContext sc){
        SendEmailtoNonActiveUsersBatch s = new SendEmailtoNonActiveUsersBatch();
        database.executeBatch(s, 10);
    }
    
}

--- TEST CLASS -----
@isTest
public class SendEmailtoNonActiveUsersBatch_Test {
        
    @IsTest(seeAllData=true)
    public static void SendEmailTest_positive()
    {
          User us = [Select id from User where Id = :UserInfo.getUserId()];
        
        System.runAs(us)
        { 
           List<user> uu = [SELECT id,Firstname,Lastname,Profile.name, email,Isactive, LastLoginDate, category__c,IsEmailSendToNonActive__c FROM User where IsActive=True and Category__c= 'Employee' and IsEmailSendToNonActive__c != true and LastLoginDate < LAST_N_DAYS:20 order by Firstname ASC Limit 10];
        Test.startTest();
        SendEmailtoNonActiveUsersBatch s = new SendEmailtoNonActiveUsersBatch();
     
        database.executeBatch(s);
         Test.stopTest();
        }
    }
}

Another observation: test class should execute DML query menstioned in test class(resulte records 10). But when I run the test class it take query mentioned in batch apex(result records 162). 
 
Hi All,

I have created a component to should contact column on account. I have to show records in lightning: datatable with 17 columns. When I increase the number of columns, component truncate the headers and try to fit all the columns in component default width.

Expected output: component should not trim and wrap the header and should all 17 columns with scroll bar.

Below is the screen shot. highlited column is: LEADSOURCE (component wrapped it)

screen shot
Thanks.
Hello Everyone,
I am trying to impelement column sorting. When component loads it sorts the default coulmns value but  Lightning: datatable "Onsort" event is not firing, I am getting column names as text only , nothing else(like arrow or something) to click for sorting event firing.

below is my code:
TestAccountComponent
    <aura:attribute name="sortedBy" type="String" default="LastName"/>
    <aura:attribute name="sortedDirection" type="String" default="asc"/>
     <aura:attribute name="defaultSortDirection" type="String"/>
<lightning:datatable minColumnWidth="400px" 
                             data="{! v.Contact }" 
                             columns="{! v.Columns }"  
                             keyField="Id" 
                             hideCheckboxColumn="true"  
                             onsort="{!c.updateColumnSorting}" 
                             sortedBy="{!v.sortedBy}" 
                             sortedDirection="{!v.sortedDirection}"
                             defaultSortDirection="{! v.defaultSortDirection }"/> 

Controller:

getContact : function(component, event, helper) {
        debugger;
        helper.getStatus(component);
        helper.getLeadSourceOpt(component);
        
        component.set("v.Columns", [
            {label:"FirstName", fieldName:"FirstName", type:"text"},
            {label:"LastName", fieldName:"LastName", type:"text"},
            {label:"Phone", fieldName:"Phone", type:"text"},
            {label:"Email", fieldName:"Email", type:"text"},
            {label:"Contact_Status__c", fieldName:"Contact_Status__c", type:"text"},
             {label:"LeadSource", fieldName:"LeadSource", type:"text"}
        ]);
        var rcdID = component.get("v.recordId");
        var action = component.get("c.fetchContactList"); 
        action.setParams({ 
            recordId : rcdID
    });
        action.setCallback(this, function(data) {
          var state = data.getState();
          if (state === "SUCCESS") {
           component.set("v.Contact", data.getReturnValue());
           helper.sortData(component, component.get("v.sortedBy"), component.get("v.sortedDirection"));
            }
    });        
$A.enqueueAction(action);
    },
updateColumnSorting : function (cmp, event, helper) {
        var fieldName = event.getParam('fieldName');
       // var sortDirection = event.getParam('sortDirection');
       var sortDirection = component.get("v.sortDirection") == 'asc' ? 'desc' : 'asc';
        cmp.set("v.sortedBy", fieldName);
        cmp.set("v.sortedDirection", sortDirection);
        helper.sortData(cmp, fieldName, sortDirection);
    }
    
Helper::
 sortData : function (cmp, fieldname, sortDirection) {
         debugger;
        var data = cmp.get("v.Contact");
        var reverse = sortDirection !== 'asc';
        data.sort(this.sortBy(fieldname, reverse))
        cmp.set("v.Contact", data);
    },
    sortBy : function (field, reverse, primer) {
        var key = primer ?
            function(x) {return primer(x[field])} :
            function(x) {return x[field]};
        reverse = !reverse ? 1 : -1;
        return function (a, b) {
            return a = key(a), b = key(b), reverse * ((a > b) - (b > a));
        }
    }

Apex class::
@AuraEnabled
    public static List<contact> fetchContactList(Id recordId)
    {
        system.debug('fetchContactList');
        return [Select id, FirstName, LastName, Phone, Email, Contact_Status__c, LeadSource from Contact where AccountId=:recordId];
    }

Thanks.
Saurabh Sisodia
I'm using lightning dataTable component.  But the sortedDirection only ever sorts one direction.  The sortDirection param never updates properly. Here is some code:
 
<aura:component implements="flexipage:availableForAllPageTypes" 
                controller="CrossSellActivityController"
                access="global">

  <!-- Attributes -->
  <aura:attribute name="activities" type="Array" />
  <aura:attribute type="String" name="sortedDirection" default="asc" />
  <aura:attribute name="columns" type="List" />

  <!-- Component DOM -->
  <div>
    <lightning:datatable keyField="id"
                         data="{!v.activities}"
                         columns="{!v.columns}"
                         sortedDirection="{!v.sortedDirection}"
                         onsort="{!c.updateColumnSorting}"
                         hideCheckboxColumn="true" />
  </div>

</aura:component>
Here is the column definition:
var columns = [
  { label: 'Program Key', fieldName: 'Program_Key__c', type: 'text', sortable: true },
  { label: 'Status', fieldName: 'Disposition__c', type: 'text', sortable: true },
  { label: 'User', fieldName: 'Username', type: 'text', sortable: true },
  { label: 'Asset', fieldName: 'Asset', type: 'text', sortable: true },
  { 
    label: 'Timestamp', 
    fieldName: 'CreatedDate', 
    type: 'date', 
    typeAttributes: {
      day: 'numeric',
      month: 'short',
      year: 'numeric',
      hour: '2-digit',
      minute: '2-digit',
      second: '2-digit',
      hour12: true
    },
    sortable: true
  }
];
component.set("v.columns", columns);
And where I console.log out the sortedDirection variable:
updateColumnSorting : function(component, event, helper) {
  var sortDirection = event.getParam('sortDirection');        
  component.set("v.sortedDirection", sortDirection);
  console.log('sortDirection: ', sortDirection);
},
The console.log always outputs 'asc' never flips to 'desc'.  I've even tried changing the definition to Boolean with no luck.
<aura:attribute type="Boolean" name="sortedDirection" default="false" />
I've also tried flipping it myself with a truthy check and setting it back on the sortedDirection attribute, but that doesn't work either.  Am I doing something wrong?


 
Hi,

It was really simple to open URL in new window with passing parameters and some Validations using salesforce classic Onclick Java. for example:
if({!ISBLANK( Account.CSOne_Case_Number__c )})
{
window.open('https://.na29.visual.force.com/apex/Relationship360?rId={!Account.Gainsight_Relationship_ID__c}');
}

Now we are moving to Salesforce Lightning and As Onclick Javascript is not supported. can someone please let me know how can I achieve this in Lightning.

Thanks in advance.

Saurabh Sisodia
Hi,
I am getting this error while I am trying to update contact which are associated to user objects.
trigger CommunityLoginOnContactTrigger on User (after update) {
    
    for(User u: trigger.new)
    {
        system.debug('USer trigger got triggered');
        if(system.isFuture()) return;
        if(u.ContactId != null)
        {
            if(u.LastLoginDate__c != null)
            {
                UpdateContactFromTestUser.updateContacts(u.ContactId, u.LastLoginDate__c);                
            }
        }
        
    }

}
global class UpdateContactFromTestUser {
    @future
    public static void updateContacts(String userId, Datetime Lastlogin) {
        if (userId!=null && userId != '') {
            Contact c = [ Select Last_Community_Login__c,Community_Category__c from Contact where id =:userId];
            
            if(c.Last_Community_Login__c != Lastlogin)
            {
                c.Last_Community_Login__c = Lastlogin;
                update c; 
            }
        }
    }
}
Hi All,
I want to implement a functionality in which when user click on Item it should display information in new Tab instead of new page.
My scenario description:
Name       First Name   Last Name Phone NoStart Date DOB Prog Lang
Emp-0034 Runthistime

 <apex:column headerValue="Name" >
          <apex:outputLink value="/apex/Emp_DisplayForm?id={!a.id}"> {!a.name}</apex:outputLink>                               
  </apex:column>
On click of Emp-0034. it opens item in my custom Emp_DisplayForm as new page. But I want it to be open in new tab?

Thanks.
Srb


 
I have my Salesforce.com Certified Administrator credential, and would like to gain more experience in the field.

I would like to volunteer my time (20 hours a week) to help a non-profit with any Salesforce.com admin tasks.

I am located in the Fremont California (USA) region, but naturally, can work remotely with any English-language org.

Appreciate any leads or any direction you can give.

Sincerely,

Sunny Singh
510-449-5752