• Muzammil Bajaria
  • NEWBIE
  • 28 Points
  • Member since 2016
  • Salesforce Developer
  • L&T Infotech


  • Chatter
    Feed
  • 0
    Best Answers
  • 1
    Likes Received
  • 1
    Likes Given
  • 6
    Questions
  • 52
    Replies

Hi,

I am 3x certofoed salesforce developer with 2.5 years of experience in both classic and lightning. I have worked on various projects like migration projects, Support, Sales cloud, Service cloud and optimization of application etc. 
- Proficient in Apex, Visualforce, Lightning framework, Javascript and JQuery.
- Has conducted various training sessions on Apex and Lightning framework.
- Experienced in integrating salesforce with other systems using REST API.
- Excellent team player, self-motivated, quick learner with good communication skills 
   and trouble-shooting capabilities.
- Salesforce Certified Platform developer 1
- Salesforce Certified Administrator
- Salesforce Certified Platform App Builder

Currently I am looking for freelancing projects so if you need a freelancer, please contact me at muzammilbajaria@gmail.com

Regards,
Muzammil Bajaria

I have installed the adobe Eco sign and its working fine. Whenever a user wants to send a file for signature, he has to specify various fields which he wants from user at different locations in file and send for signature. Now, I have different types of files let's say type A and type B. I want whenever user selects any type A file, name(any Eco sign field) field should be on top of file and if it is type B name field should be on bottom of file. I don't want user to drag and drop the fields every time he sends the file for signature.
Is it possible? If yes, Please point me in right direction.
Any kind of help is appreciated.
Thank You.
Hi,

I am stuck at step 8 of Lightning experience rollout specialist superbudge. I am facing this error "Didn't find a Lightning app named Lightning Knowledge.". I have created the lightning app still I am getting this error. Please help.

Can anyone please help me implementing fusionchart.js in lightning?

https://developer.salesforce.com/blogs/developer-relations/2017/02/lockerservice-lightning-container-third-party-libraries-lightning-components.html

There is  non- exhaustive list of libraries that are known to work with LockerService(Given in above link). Can we user libraries other than listed like fusionchart.js, blockUI.js etc? If yes, How to check if particular library is compatible eith lightning locker service or not?

 

Hi,
I am developing a lightning component to upload file in contentVersion object. I am refering to this site : 
http://webcache.googleusercontent.com/search?q=cache:yDEYXecmDHMJ:peterknolle.com/file-upload-lightning-component/+&cd=1&hl=en&ct=clnk&gl=in

I was successful uploading files upto 3 MB without chunking but I am facing some issue in chunking the file to upload the large files.
Wherever i upload the file , it gives me following error :
System.StringException: Unrecognized base64 character: %
I am attaching code for helper class and apex controller.

Helper Class :
({
    MAX_FILE_SIZE: 4 500 000, /* 6 000 000 * 3/4 to account for base64 */
    CHUNK_SIZE: 950 000, /* Use a multiple of 4 */

    readFile: function(component, helper, file) {
        if (!file) return;
        var reader = new FileReader();
        self = this;
        reader.onload = function() {
            var dataURL = reader.result;
            component.set("v.pictureSrc", "https://s3-us-west-1.amazonaws.com/sfdc-demo/image-placeholder.png");
            self.upload(component, file, dataURL);
        };
        reader.readAsDataURL(file);
    },

    upload: function(component, file, dataURL) {
        console.log('uploading file ...');
         var fromPos = 0;
        var toPos = Math.min(dataURL.length, fromPos + this.CHUNK_SIZE);
        console.log('toPos  '+toPos);
        console.log(' fromPos '+fromPos);
        this.uploadChunk(component, file, dataURL, fromPos, toPos,'');

    },
        uploadChunk : function(component, file, dataURL, fromPos, toPos,contentDocumentId){
            console.log('uploading chunk ');
             var action = component.get("c.saveTheChunkChatterFile");
            var chunk = dataURL.substring(fromPos, toPos);
            console.log(chunk);
            action.setParams({
            parentId: component.get("v.recordId"),
            fileName: file.name,
            base64Data: encodeURIComponent(chunk), 
            contentType: file.type,
            contentDocumentId :contentDocumentId
            });
            var self = this;
             action.setCallback(this, function(a) {
            contentDocumentId = a.getReturnValue();
            console.log('return value '+contentDocumentId);
            fromPos = toPos;
            toPos = Math.min(dataURL.length, fromPos + self.CHUNK_SIZE);    
            if (fromPos < toPos) {
                self.uploadChunk(component, file, dataURL, fromPos, toPos, contentDocumentId);  
            }else{
                component.set("v.message", "File Uploaded");
            }
        });
               component.set("v.message", "Uploading...");

            $A.enqueueAction(action); 
       }
})

Apex Controller : 
 
@AuraEnabled
public static Id saveChatterFiles(Id parentId, String fileName, String base64Data, String contentType)  { 
    system.debug('Saving chatter files '+fileName + ' '+ contentType);
    ContentVersion testContentInsert =new ContentVersion(); 
     testContentInsert.Title =fileName; 
    testContentInsert.VersionData=EncodingUtil.base64Decode(base64Data);
    testContentInsert.PathOnClient='/' + fileName ;
     insert testContentInsert; 
    system.debug('testContentInsert.id '+ testContentInsert.id);
    testContentInsert = [select id, ContentDocumentId from ContentVersion WHERE Id =: testContentInsert.Id];
    ContentDocumentLink cl = new ContentDocumentLink();
    cl.ContentDocumentId = testContentInsert.ContentDocumentId;
    cl.LinkedEntityId = parentId; 
    cl.ShareType = 'V';
     cl.Visibility = 'AllUsers';
    insert cl;
    system.debug('testContentInsert.id');
    return testContentInsert.id;

}


@AuraEnabled                            
public static Id saveTheChunkChatterFile(id parentId,String fileName, String base64Data, String contentType, String contentDocumentId){
        system.debug('saving chatter file');
    if (contentDocumentId == '' || contentDocumentId==null ) {
        system.debug('null id');
        contentDocumentId = saveChatterFiles(parentId, fileName, base64Data, contentType);
    } else {
        system.debug('not null id');
        system.debug('id '+contentDocumentId);
        appendToFileChatter(contentDocumentId, base64Data);
    }

    return Id.valueOf(contentDocumentId);
}

@AuraEnabled
public static void appendToFileChatter(Id contentDocumentId, String base64Data) {
 base64Data = EncodingUtil.urlDecode(base64Data, 'UTF-8');
    system.debug('appending');
    ContentVersion a = [
        SELECT Id, VersionData,ContentDocumentId
        FROM ContentVersion
        WHERE Id = :contentDocumentId
    ];

    String existingBody = EncodingUtil.base64Encode(a.VersionData);
    a.VersionData = EncodingUtil.base64Decode(existingBody + base64Data); 

    update a;
}
Any kind of help or alternative to upload file in contentVersion using lightning component will be greatful.


 
Hi,

I want to use standard list controller for my custom object. I saw various example but they all are for stardard object  i.e accounts. i did the same for custom object but that wa not working. Can you please help how can we implement standard list controller for custom object with a short example.

ThankYou in advance
Hi,
I am developing a lightning component to upload file in contentVersion object. I am refering to this site : 
http://webcache.googleusercontent.com/search?q=cache:yDEYXecmDHMJ:peterknolle.com/file-upload-lightning-component/+&cd=1&hl=en&ct=clnk&gl=in

I was successful uploading files upto 3 MB without chunking but I am facing some issue in chunking the file to upload the large files.
Wherever i upload the file , it gives me following error :
System.StringException: Unrecognized base64 character: %
I am attaching code for helper class and apex controller.

Helper Class :
({
    MAX_FILE_SIZE: 4 500 000, /* 6 000 000 * 3/4 to account for base64 */
    CHUNK_SIZE: 950 000, /* Use a multiple of 4 */

    readFile: function(component, helper, file) {
        if (!file) return;
        var reader = new FileReader();
        self = this;
        reader.onload = function() {
            var dataURL = reader.result;
            component.set("v.pictureSrc", "https://s3-us-west-1.amazonaws.com/sfdc-demo/image-placeholder.png");
            self.upload(component, file, dataURL);
        };
        reader.readAsDataURL(file);
    },

    upload: function(component, file, dataURL) {
        console.log('uploading file ...');
         var fromPos = 0;
        var toPos = Math.min(dataURL.length, fromPos + this.CHUNK_SIZE);
        console.log('toPos  '+toPos);
        console.log(' fromPos '+fromPos);
        this.uploadChunk(component, file, dataURL, fromPos, toPos,'');

    },
        uploadChunk : function(component, file, dataURL, fromPos, toPos,contentDocumentId){
            console.log('uploading chunk ');
             var action = component.get("c.saveTheChunkChatterFile");
            var chunk = dataURL.substring(fromPos, toPos);
            console.log(chunk);
            action.setParams({
            parentId: component.get("v.recordId"),
            fileName: file.name,
            base64Data: encodeURIComponent(chunk), 
            contentType: file.type,
            contentDocumentId :contentDocumentId
            });
            var self = this;
             action.setCallback(this, function(a) {
            contentDocumentId = a.getReturnValue();
            console.log('return value '+contentDocumentId);
            fromPos = toPos;
            toPos = Math.min(dataURL.length, fromPos + self.CHUNK_SIZE);    
            if (fromPos < toPos) {
                self.uploadChunk(component, file, dataURL, fromPos, toPos, contentDocumentId);  
            }else{
                component.set("v.message", "File Uploaded");
            }
        });
               component.set("v.message", "Uploading...");

            $A.enqueueAction(action); 
       }
})

Apex Controller : 
 
@AuraEnabled
public static Id saveChatterFiles(Id parentId, String fileName, String base64Data, String contentType)  { 
    system.debug('Saving chatter files '+fileName + ' '+ contentType);
    ContentVersion testContentInsert =new ContentVersion(); 
     testContentInsert.Title =fileName; 
    testContentInsert.VersionData=EncodingUtil.base64Decode(base64Data);
    testContentInsert.PathOnClient='/' + fileName ;
     insert testContentInsert; 
    system.debug('testContentInsert.id '+ testContentInsert.id);
    testContentInsert = [select id, ContentDocumentId from ContentVersion WHERE Id =: testContentInsert.Id];
    ContentDocumentLink cl = new ContentDocumentLink();
    cl.ContentDocumentId = testContentInsert.ContentDocumentId;
    cl.LinkedEntityId = parentId; 
    cl.ShareType = 'V';
     cl.Visibility = 'AllUsers';
    insert cl;
    system.debug('testContentInsert.id');
    return testContentInsert.id;

}


@AuraEnabled                            
public static Id saveTheChunkChatterFile(id parentId,String fileName, String base64Data, String contentType, String contentDocumentId){
        system.debug('saving chatter file');
    if (contentDocumentId == '' || contentDocumentId==null ) {
        system.debug('null id');
        contentDocumentId = saveChatterFiles(parentId, fileName, base64Data, contentType);
    } else {
        system.debug('not null id');
        system.debug('id '+contentDocumentId);
        appendToFileChatter(contentDocumentId, base64Data);
    }

    return Id.valueOf(contentDocumentId);
}

@AuraEnabled
public static void appendToFileChatter(Id contentDocumentId, String base64Data) {
 base64Data = EncodingUtil.urlDecode(base64Data, 'UTF-8');
    system.debug('appending');
    ContentVersion a = [
        SELECT Id, VersionData,ContentDocumentId
        FROM ContentVersion
        WHERE Id = :contentDocumentId
    ];

    String existingBody = EncodingUtil.base64Encode(a.VersionData);
    a.VersionData = EncodingUtil.base64Decode(existingBody + base64Data); 

    update a;
}
Any kind of help or alternative to upload file in contentVersion using lightning component will be greatful.


 
Hello,  Looking for a salesforce developer and architect in fast paced start up in Poland!  Please reply if you are interested and we will discuss the details directly.
Hi,  Could you please help me with the below Apex trigger. I am new to coding and SFDC as well .I am not sure what went wrong. Here is my code  
Contact-lookup with case(Case_c)
Caselookup with Opportunity (Opportunity_c)and Contact(contact)
Opportunity lookup with Contact(contact_c)  
Whenever I update case_c field in Contact,it should update case object and its related opportunity  (I mean the lookup field should be updated with contact name automatically)
 trigger Contacttriggertoupdatecase1 on Contact (before update) { Set<Id> contactids=new Set<Id>(); Map<Id,case> oppcase=new Map<Id,case>(); for(contact CON:Trigger.new) { contactids.add(con.id); }  List<contact> conlist=[Select Id,FirstName,Name,case__r.id from contact where Id IN:contactids]; List<case> caselist=[Select Id,contactid from case where contactId IN: contactids];  if(Caselist.size()>0) { for(Integer i=0;i<caselist.size();i++) { if(Trigger.isbefore&&Trigger.isupdate) { if(Trigger.New[i].case__c!='NULL') { Caselist[i].contactid=Trigger.New[i].id; } } } } //Child Parent SOQL query to retrieve its related opportunity List<case> caseopplist=[Select Id,caseNumber,Opportunity__r.id from Case where id IN:caselist]; for(case co:caseopplist) { //Adding case and its related opportunity id in Map oppcase.put(co.Opportunity__r.id,co); } //Querying related opportunities List<opportunity> opplisttoupdate=[Select id,contact__c from opportunity where id in:oppcase.keyset()];  if(opplisttoupdate.size()>0) {  for(contact con:Trigger.New) { for(opportunity o:opplisttoupdate) { o.contact__c =Trigger.New[0].id; o.contact__c=con.id; //opplisttoupdate[l].contact__c =Trigger.new[l].id; opplisttoupdate.add(o); } } update opplisttoupdate; } }  Regards,
Hi,

I am stuck at step 8 of Lightning experience rollout specialist superbudge. I am facing this error "Didn't find a Lightning app named Lightning Knowledge.". I have created the lightning app still I am getting this error. Please help.
I'm struggling with the custom lightning component on this part. I don't have much background coding and am having trouble finding resources to help me achieve coding the lightning component. If someone could help give me some framework code to create a custom lightning component to hold a URL or direct me to a resource that help break this down I'd be very appreciative.
 
I am facing another issue on this superbadge, specifically in Challenge #10, i am getting the following error:
The Campaign Influence Lightning report must have the correct 1. Aggregate, 2. Columns, 3. Groupings, and 4. Filter.

The requirements have no mention about what fields, groupings, filters, aggregates to include in the report. What am I missing?
Hi all,

I have a VF page where i have displayed sObject labels dynamically on this VF page. These field labels are associated with checkboxes.
I want that whichever checkboxes are selected , there labels should get stored in a text area field at the backend.
I will paste my code below. Please help me for the same.
APEX CLASS::::

public class getLabel{

public List<WrapperClass> listWrapper {get;set;}
public Map<String,String> labelMap;
public String resultString {get;set;}  

public getLabel(ApexPages.StandardController controller) {
    listWrapper = new List<WrapperClass>();
    labelMap = new Map<String,String>();
    labelMap = retLabelMap('ProposalFields__c');
    for(String s : labelMap.values()){
        listWrapper.add(new WrapperClass(s,false));
    }
}

public class WrapperClass {  
    public Boolean checkBool {get;set;}
    public String fieldNme{get;set;}  
    public WrapperClass(String prop,Boolean checkBool ){  
        this.fieldNme = prop;  
        this.checkBool = checkBool ;  
    }  
}

public Static Map<String,String> retLabelMap(String type){
    Map<String, Schema.SObjectType> m = Schema.getGlobalDescribe();
    Schema.SObjectType s= m.get(type);
    Map<String, Schema.SObjectField> fieldMap = s.getDescribe().fields.getMap();
    Map<String,String> aMap = new Map<String,String>();
    for (String fieldName: fieldMap.keySet()) {
        aMap.put(fieldName,fieldMap.get(fieldName).getDescribe().getLabel());
    }

    return aMap;
}

public void saveCheckboxValue(){
     Proposal_Form__c p = new Proposal_Form__c();
     p.Fields_Associated__c = resultString;
     insert p;
 }
 
public PageReference getSelected(){
   return null;
}



}



VF PAGE:


<apex:page showHeader="false" sidebar="false" standardController="Proposal_Form__c" extensions="getLabel">
<apex:form >
<style>
.panelWrapper .mainTitle {
   text-align :center;
    
}
</style>
<apex:outputPanel styleClass="panelWrapper" layout="block">
<apex:pageBlock title="Proposal Form">
<apex:pageBlockSection title="Service Requirements">
<apex:inputField value="{!Proposal_Form__c.Service_Family__c}"/>
<apex:inputfield value="{!Proposal_Form__c.Service_Type__c}"/>
<apex:inputField value="{!Proposal_Form__c.Sub_Service_Category__c}"/>
</apex:pageBlockSection>

<apex:pageBlockButtons location="Bottom">
<apex:commandButton value="Save" action="{!Save}"/>
</apex:pageBlockButtons>

<apex:pageBlockSection title="Available fields">
<apex:repeat var="lab" value="{!listWrapper}">
    <apex:pageblockSectionItem >
        <apex:outputlabel value="{!lab.fieldNme}"/>
        <apex:inputCheckbox value="{!lab.checkBool}"/>
    </apex:pageblockSectionItem> 
</apex:repeat>

</apex:pageBlockSection>
</apex:pageBlock>
</apex:outputPanel>

</apex:form> 
</apex:page>
Thanks,
Amita Tatar
 
I had a little visualforce page on my "Informal Case" custom object, that would automatically open a new tab when the status of the case = Issued. That Visualforce page doesn't seem to work in the Lightning Experience, though. Is there any way to generate a new tab or a popup window from a field value change in Lightning Experience?

Here's my original visualforce page that was working in Salesforce Classic, but which does nothing in Lightning Experience:
<apex:page standardController="Informal_Case__c" >
<script src="/soap/ajax/34.0/connection.js"></script>
<script src="/soap/ajax/34.0/apex.js"></script>
<script>
var arrId = '{!$CurrentPage.parameters.id}';
var queryresult = sforce.connection.query("Select status from case where id='"+arrId+"'");
var records = queryresult.getArray("records");
if(
"{!Informal_Case__c.Status__c}" === "Issued")
{
window.open("/apex/ActionPlanCreation?");
}

</script>

</apex:page>
Hi there,

I have recently integrated Adobe Sign with Salesforce through AppExchange but was having some problems with retrieving the Signing URL for any document that has been uploaded.

The link that I can access by querying the Signing URL field, is the link that is sent to the sender of a document and not the link needed for a recipient to preview and sign a document. Could you please advise as to how to retrieve this URL through Salesforce, for a recipient to be able to click on the link and be taken to preview and sign any such document?

Thank you!
Hi,
 
I'm working on integrating Adobe Live Cycle Designer with the Salesforce WSDL to create interactive pdf forms that work with Salesforce data.  So far, I have succeeded with the login operation -- the form receives a Salesforce session ID.
 
I want to work with more useful operations such as query, update, upsert, etc.  However, I cannot get any of these operations to work -- I get no error message and no results from them.  I suspect I need to somehow send the session ID received from the login command back with the other commands, but these operations do not include any elements for sending the session ID.  Any ideas on how I might be able to get this to work?
 
Thank you.
 
 
I am facing another issue on this superbadge, specifically in Challenge #10, i am getting the following error:
The Campaign Influence Lightning report must have the correct 1. Aggregate, 2. Columns, 3. Groupings, and 4. Filter.

The requirements have no mention about what fields, groupings, filters, aggregates to include in the report. What am I missing?