• Pedro Garcia G
  • NEWBIE
  • 70 Points
  • Member since 2018

  • Chatter
    Feed
  • 0
    Best Answers
  • 0
    Likes Received
  • 0
    Likes Given
  • 23
    Questions
  • 21
    Replies
Hi...

I have an issue to get the parameters are coming from Google OAuth request.

This is my code:
<apex:page controller="GoogleDriveController" showQuickActionVfHeader="true" action="{!init}" >

...
</apex:page>

public void init(){

        System.debug('GoogleDriveController CONSTRUCTOR');
        System.debug('THECODE '+ApexPages.currentPage().getParameters().get('code'));

        for(String val : ApexPage.currentPage().getHeaders().keySet()){

            System.debug('head '+val+' -- '+ApexPages.currentPage().getParameters().get(val));
        }

        for(String val : ApexPages.currentPage().getParameters().keySet() ){

            System.debug('val '+val+' -- '+ApexPages.currentPage().getParameters().get(val));
        }

        code = ApexPages.currentPage().getParameters().get('code') ;
        //Get the access token once we have code
        if(code != '' && code != null){

            AccessToken();
        }
    }
I can see in the browser inspect network the request with all parameters
 
https://myinstance.lightning.force.com/lightning/n/MyGoogleDrive?state=security_token%3D138r....

but the page is redirected and the parameters are removed.

The Debug Logs only shows the parameters ​​​​​​​from the servelet
my.salesforce.com/servlet/servlet.Integration?lid=01r63000000NUnV&ic=1&tour=&isdtp=p1&sfdcIFrameOrigin=https://speed-dream-189-dev-ed.lightning.force.com&sfdcIFrameHost=web&nonce=a9592094acf18f348a08b1e994e9addec1051e483efa3184630d1f17ebd71d89&ltn_app_id=06m63000000CUlNAAW&clc=0

The google sites: https://accounts.google.com, 
https://www.googleapis.com are included in the Remote Site setting.

Thanks
 
How could I make the unit test for an @AuraEnabled apex method?

The Aura component has a lightning:datatable component which load a custom data (it's not a sObject) from a CSV file.

The app allows select a row and send it to the apex insertContact method. This method parse the csv row to a Contact object through a mapping and save the record.

The method works very well, now I'm trying to make the Unit Test but It fails. The lightining controller sends a  Map<Object,Object> (see the code) but when I try to simulate this in the Unit Test it's sending a Map<String,Object>.

What is the best way to make the Unit Test for this scenario? Thanks!!!

I need to make the Unit Test to deploy it on production.
 
public static List<Contact> insertContact(List<Object> selectedItems){
        
                
        List<Contact> contactList = new List<Contact>();
        
        Map<Object, Object> fieldMap =  (Map<Object, Object>) selectedItems[0];

        Set<Object> fieldSet = new Set<Object>();
        
        fieldSet =  fieldMap.keySet();
        
        Map<String,String> fieldsMapping = CASContact.fieldsMapping;
        
        for(Integer i=0; i< selectedItems.size(); i++){
            
            Map<Object, Object> mObject =  (Map<Object, Object>) selectedItems[i];
            
            Contact newContact = new Contact();
            
            for(Object fieldname : fieldSet){
                
                if(fieldsMapping.get((String) fieldname) !=null)
                newContact.put(fieldsMapping.get((String) fieldname), mObject.get((String) fieldname).toString());
                
            }
            
            contactList.add(newContact);
           
        }
        
        System.debug('cas7.13>>>'+contactList);
        
        Database.SaveResult[] srList = Database.insert(contactList, false);
        
        // Iterate through each returned result
        for (Database.SaveResult sr : srList) {
            if (sr.isSuccess()) {
                // Operation was successful, so get the ID of the record that was processed
                System.debug('cas>>Successfully inserted account. Account ID: ' + sr.getId());
            }
            else {
                // Operation failed, so get all errors                
                for(Database.Error err : sr.getErrors()) {
                    System.debug('cas>>The following error has occurred.');                    
                    System.debug(err.getStatusCode() + ': ' + err.getMessage());
                    System.debug('cas>>Account fields that affected this error: ' + err.getFields());
                }
            }
        }
        
        return contactList;
        
    }

my Unit Test
@isTest static void insertContactTestTrue(){



        String selectedItems = '[{"cas_id":"6050902094","last_name":"pepe","first_name":"papo","permanent_street_address":"Ap #273-2abc565 Est Street","permanent_city":"Belxfast","permanent_state":"ursula","permanent_postal_code":"12345","permanent_country_name":"Papua New Guinea","Phone":"","Mobile":"","email":"a@nadiesabe.edu","program_id_0":"8425651082805990996","program_id_1":"","local_status_0":"Rejected - GPA","local_status_1":"Interview Scheduled","application_status_0":"Received"},{"cas_id":"8551822992","last_name":"papo","first_name":"pupa","permanent_street_address":"9623 Dondequiera. Rd.","permanent_city":"Germersheim","permanent_state":"RP","permanent_postal_code":"5819","permanent_country_name":"Uganda","Phone":"","Mobile":"","email":"ac.mattis.semper@esttempor.ca","program_id_0":"8425651082805990996","program_id_1":"","local_status_0":"Deferred","local_status_1":"","application_status_0":"Verified"}]';

        List<Object> fieldList = (List<Object>)JSON.deserializeUntyped(selectedItems);

        List<Contact> contacts = CASContact.insertContact(fieldList);

        System.assertEquals(2, contacts.size());

    }

 
I'm running a unit test for a method which include another callout method. The callout method is already tested. How could I make the unit test?

here is the involved code
@AuraEnabled
    public static List<CAS_User_Identity__c> requestUserIdentities(String x_api_key){
        
        //THIS IS A CALLOUT METHOD
        CASConnectorIdentity results = CASConnector.getUserIdentities(x_api_key);

        if(!String.isEmpty(results.error)){
            
            throw new AuraHandledException('The Connection was not possible. Verify the API KEY!');
            
        }   
        
		//PARSE THE JSON
        List<CASConnectorIdentity.user_identities> userIdentities = (List<CASConnectorIdentity.user_identities>) results.user_identities;

        List<CAS_User_Identity__c> casUserIdentityList = new List<CAS_User_Identity__c>();
        
        for(CASConnectorIdentity.user_identities usid : userIdentities){
            
            CAS_User_Identity__c  casUserIdentity = new CAS_User_Identity__c();
            
            casUserIdentity.Id__c 			= String.valueOf(usid.id);
            casUserIdentity.institution__c 	= usid.institution;
            casUserIdentity.type__c 		= usid.type;
            casUserIdentity.organization__c = usid.organization;
            casUserIdentity.association__c	= usid.association;
            casUserIdentity.cycle__c		= usid.cycle;
            
            
            casUserIdentityList.add(casUserIdentity);
            
             
        }        
        
    
        //REMOVE ALL RECORDS AND INSERT AGAIN.
        List<CAS_User_Identity__c> userIdentitiesDB = [Select Id from CAS_User_Identity__c];        
        
        if(userIdentities.size() > 0 ){
            
            delete userIdentitiesDB;
            
            insert casUserIdentityList;
            

        }
        
		Insert
        CASProgram.insertProgram( x_api_key);
        
        return casUserIdentityList;

    }

 
Hi...

I'm planning to deploy a managed package. I'm working in prove of concept (sandbox).

Once the app is installed, the user enters an API key to access to the third REST server. The REST server will provide the data to create Opportunity and the Opportunity.stage.
 
The Opportunity Stage is a picklist. How could I add a new stage value to the picklist?

The sf document says:
"Metadata access in Apex is available for Apex classes using API version 40.0 and later." at https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_metadata.htm

but I didn't find how to do it?

Thanks,
Pedro

 
Hi...
I read the following article:
Creating Parent and Child Records in a Single Statement Using Foreign Keys (https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/langCon_apex_dml_foreign_keys.htm)

In my case, I have the Contact and Opportunity info taken from a CSV. So, I'd like to insert Contact and Opportunity in one statement but the relation from them are many to may through a junction table. Opportunity Contact Role.

I appreciate any idea about how to do it. The source of data (CSV) is dynamic and it could have around 150 records.

Thanks,
hi...
I'm inserting Contact records from an array of object in JSON format.
The object property name does not match with the Contact field name. I've created a mapping for this purpose.
The issue is when the field format is the date such has Contact.birthdate.

How could I parse every field based on the field type?
Thanks

Here is my code:
public static boolean insertBunch(List<Object> selectedItems, boolean setFile, CAS_Export_File__c fileProperty){
        
        List<Contact> contactList = new List<Contact>();
        
        Map<Object, Object> fieldMap =  (Map<Object, Object>) selectedItems[0];

        Set<Object> fieldSet = new Set<Object>();
        
        fieldSet =  fieldMap.keySet();
        
        Map<String,String> fieldsMapping = MyContact.fieldsMapping;
        
        for(Integer i=0; i< selectedItems.size(); i++){
            
            Map<Object, Object> mObject =  (Map<Object, Object>) selectedItems[i];
            
            Contact newContact = new Contact();
            
            for(Object fieldname : fieldSet){
                
                if(fieldsMapping.get((String) fieldname) !=null)
                newContact.put(fieldsMapping.get((String) fieldname), mObject.get((String) fieldname).toString());
                
            }
            
            contactList.add(newContact);
           
        }
        
        System.debug('cas7.13>>>'+contactList);
        
        insert contactList;

        return (contactList.size()>0);
    }

this is the field mapping
 
public static Map<String,String> fieldsMapping = new Map<String,String>{
      
            'last_name'				=>'LastName',
            'first_name'			=>'FirstName',
            'email'					=>'Email'	,
            'date_of_birth'			=>'Birthdate',
            'permanent_street_address'		=>'MailingStreet',
            'permanent_street_address_2' 	=>'OtherStreet',
            'permanent_city'				=>'MailingCity',
            'permanent_state'				=>'MailingState',
            'permanent_postal_code'			=>'MailingPostalCode',
            'permanent_country_name'		=>'MailingCountry'};
Hi I got the following error but I can not see the logs

I did: sfdx force:source:push -u demo --loglevel FATAL -f
ERROR running force:source:push:  Push failed.
Hi...

We want to share a scratch org between two developers. How could we do?

Thanks
Hi...

I'm writing my unit test of the CustomerOrder class. This class has a method which returns all Orders with status = Available.

In the CustomerOrderTest class, I can not create the data for testing because I don't have access to OrderItem object. I have the System Administrator profile.
 
@isTest
    public static void hasTrackingNumberFalseTest(){
                    Product2 prd = new Product2();
        
        prd.name ='Product Express';
        
        orderItem oi = new OrderItem();
        
        order o = new Order();
        o.EffectiveDate = Date.newInstance(2019, 3, 23);
        o.Status = 'Draft';
        
        Account ac = new Account(name='Test Account');
        Test.startTest();
        
        insert prd;
        insert ac;
        oi.Product2Id = prd.Id;
        oi.UnitPrice  = 30;
        insert oi;
        
        o.AccountId = ac.Id;
        Database.SaveResult result = Database.insert(o);
        oi.OrderId = o.Id;
        System.debug('>>>'+result);
        
        System.assertEquals(true,String.isBlank(OrderAuraController.hasTrackingNumber(o)));

        
        System.debug('>>>'+o);
        
        o.Status = 'Shipped';
        
        Database.SaveResult result2 = Database.update(o);
        System.assertEquals(true,OrderAuraController.hasTrackingNumber(o).equals('OrderAuraController.hasTrackingNumber(o)'));
        
        System.assert(!result2.isSuccess());
        System.assert(result2.getErrors().size() > 0);
        System.assertEquals('The Order Status can not be Processed until the Trackin Number is entered.',
                             result2.getErrors()[0].getMessage());
        Test.stopTest();
        

        

    }


Questions:
How could I create test data if I don't have access to this object?
How could I give access to System Administrator project for OrderItem object?

Thanks,
Hi...

I need to navigate from one component (component "A") to another (component "B"), send parameters and request data from apex class.

Everything works except sending parameter to the apex class... here is my code:

Navigating to other component and send parameters:

Component A. controller
...
handleRowAction: function (component, event, helper) {

            
        var evt = $A.get("e.force:navigateToComponent");
        evt.setParams({
            componentDef : "c:CASCSVFile",
            componentAttributes: {
                selectedRow : JSON.stringify(event.getParam('row'))
            }
        });
        evt.fire();
 
       
    }
...

Component B XML
<aura:component controller="CASExportFile" >
 


        <!-- attributes -->
    <aura:attribute name="data" type="Object"/>
    <aura:attribute name="columns" type="List"/>
    <aura:attribute name="selectedRowsCount" type="Integer" default="0"/>
 
	<aura:attribute name="selectedRow" type="String" access="global"/>

...more code
Component B controller
init: function (component, event, helper) {

    var selectedItem = JSON.parse(component.get("v.selectedRow"));

    var action = component.get("c.csvtojson");
    
    	
        action.setParams({
            "selectedItem":  selectedItem
        });

    console.log('3.4>>>'+component.get("v.selectedRow"));
    console.log('3.5>>>'+selectedItem.Id);
    
        	action.setCallback(this, function(response) {
			var state = response.getState();
            

			if (state === "SUCCESS") {
                 
				var storeResponse = response.getReturnValue();


                console.log('3.6>>>'+Object.getOwnPropertyNames(storeResponse[0]));
                
                var headerlist = Object.getOwnPropertyNames(storeResponse[0]);
                
                var headerArray = [];
               
                for (var i in headerlist ) { 
                    
                    headerArray.push({ label: headerlist[i], fieldName: headerlist[i], type: 'text'})
                }
                
                headerArray.push({label: 'View', type: 'button', initialWidth: 135, typeAttributes: { label: 'View Details', name: 'view_details', title: 'Click to View Details'}});
                console.log('3.7>>>'+JSON.stringify(headerArray));

                 
                component.set('v.columns',headerArray);
             	component.set("v.data", storeResponse);
                component.set("v.filteredData", storeResponse);
                
                
                if(storeResponse != null && storeResponse.length > 0){

                    component.set("v.hasRecords", "true");
                }
                
                component.set('v.maxRowSelection', storeResponse.length);

			}
			else if (state === "RUNNING") {
                //@todo start the timer
            }
            else if (state === "ERROR") {
                var errors = response.getError();
                if (errors) {
                    if (errors[0] && errors[0].message) {
                        console.log("3.>>Error message: " + 
                                 errors[0].message);
                        alert(errors[0].message);
                    }
                } else {
                    console.log("3.>>Unknown error");
                }
            }
         }); 
    
 
		$A.enqueueAction(action);
    },

Lightning Action console
User-added imageBrowser Log Console

User-added image

 
Hi...

I'm working in an app which loads a big with CSV file through a callout and shows it in the lightning:datatable. I want to reduce the time of loading.

The CSV has many columns then the Infinite scrolling of rows doesn't work for me.

I'm planning to show in the lightning:datatable.data few columns and in 'View Details' by row show the rest. As the example: https://developer.salesforce.com/docs/component-library/bundle/lightning:datatable/example#lightningcomponentdemo:exampleDatatableInAction

I appreciate any recomendation on how to do it.

Thanks,
Hi... I've taken my time reading many articles before making this question.

I want to use the jquery library in aura:component.

I can not get the element using the jquery selector... some time it works and another time it doesn't.

here is the code:
aura:component
<aura:component controller="CASExportFile" >
    
        <ltng:require scripts="{!$Resource.jquery}" afterScriptsLoaded="{!c.search}" />

	    <!-- attributes -->
    <aura:attribute name="data" type="Object"/>
    <aura:attribute name="columns" type="List"/>
    <aura:attribute name="selectedRowsCount" type="Integer" default="0"/>
    <aura:attribute name="maxRowSelection" type="Integer" default="1000"/>
    <aura:attribute name="hasRecords" type="Boolean" default="false"/>
    
    
    <!-- handlers-->
    <aura:handler name="init" value="{! this }" action="{! c.init }"/>

    <!-- the container element determine the height of the datatable -->
    <aura:if isTrue="{!v.hasRecords}">
     <article class="slds-card">
        <div class="slds-card__header slds-grid">
            <header class="slds-media slds-media_center slds-has-flexi-truncate">
                
                    <div class="slds-media__body">
                    <h2 class="slds-card__header-title">
                    <a href="javascript:void(0);" class="slds-card__header-link slds-truncate" title="CAS Config">
                    <span>CAS Export Files</span>
                    </a>
                    </h2>
                    </div>
            </header>
        </div>
    <div >
        
        
         <div class="search">
        <div class="search-wrapper">

                <div class="search-input-wrapper">
                    <input id="searchid" class="search-input thesearcher" type="text" placeholder="My Search" />


                </div>


        </div>
    </div>
        
        <h1>Selected Rows: {! v.selectedRowsCount }</h1>
        <lightning:datatable
            columns="{! v.columns }"
            data="{! v.data }"
            keyField="id"
            maxRowSelection="{! v.maxRowSelection }"
            onrowselection="{! c.updateSelectedText }"/>
    </div>
    </article>
    </aura:if>

</aura:component>

aura:controller... it's only a test before implementing the filtering code
 
search : function(component, event, helper){
                 
        jQuery("document").ready(function(){
            
            console.log('>>loaded');
            console.log('1.0>>'+$('#searchid').val());
            
            
        });
   }
I got in the console: 
>>loaded
1.0>>undefined

my purpose with this is to filter the tr element from the table base on typing in searchid

this is the code for the filter​​​​​
//Searching & removing
                                $('#searchid').keyup(function() {
                                    search_table($(this).val());
                                });
                                function search_table(value) {

                                    $('.slds-hint-parent')
                                            .each(
                                                    function() {
                                                        var found = 'false';
                                                        $(this)
                                                                .each(
                                                                        function() {
                                                                            if ($(
                                                                                    this)
                                                                                    .text()
                                                                                    .toLowerCase()
                                                                                    .indexOf(
                                                                                            value
                                                                                                    .toLowerCase()) >= 0) {
                                                                                found = 'true';
                                                                            }
                                                                        });
                                                        if (found == 'true') {
                                                            $(this).show();
                                                        } else {
                                                            $(this).hide();
                                                        }
                                                    });
                                    //END: Searching & removing
                                }

Thanks!
Hi...

I'm developing a package which connects to the third system to pull and update the Contact data in Salesforce.

I'd like to provide to the SF administration the option to create the connection schedule. For example:
connect twice per day or connect twice per week, etc.

I'm wondering if there is a module that I could reuse or any tips to build it my self.

Thanks,
Pedro
Hi...

I've created an aura:component to render a custom object using lightning:recordViewForm. I pass the recordId but it show me an error: Error in fetching record or record metadata. [Invalid record id].
Even that, the lightning:recordViewForm render the fields.

aura:app
<aura:application extends="force:slds" >
    
    <c:CASConfig></c:CASConfig>
    
</aura:application>

aura:component
<aura:component controller="CASConfig"  access="global"  >
		
    <aura:handler name="init" value="{!this}" action="{!c.doInit}" />
    
    <aura:attribute name="hasCasRecord" type="boolean" default="true"/>
    <aura:attribute name="casConfig" type="CAS_Config__c" />
<lightning:card title="CAS API key">
    <lightning:recordViewForm aura:id="viewForm" recordId="{!v.casConfig.Id}" objectApiName="CAS_Config__c">
        <div class="slds-media">
            
            <div class="slds-media__body">
                
                <lightning:layout multipleRows="true">
                    <lightning:layoutItem size="6">
                        <lightning:outputField fieldName="x_api_key__c"/><h2>hola</h2>
                    </lightning:layoutItem>
                    
                </lightning:layout>
            </div>
        </div>
    </lightning:recordViewForm>
    </lightning:card>    
    

</aura:component>

js controller
({
    doInit : function(component, event, helper) {

		var action = component.get("c.getCasConfig");
		action.setCallback(this, function(response) {
			var state = response.getState();
			if (state === "SUCCESS") {
             
				var storeResponse = response.getReturnValue();

                if($A.util.isEmpty(storeResponse)){
                   component.set("v.hasCasRecord", false);

                }
                else{

                    component.set("v.casConfig", storeResponse);
                    
                }
                component.set("v.casConfigId", storeResponse.Id);
                alert(storeResponse.Id);
             	console.log('1.5>>>'+JSON.stringify(storeResponse));
                console.log('1.6>>>'+$A.util.isEmpty(storeResponse));
                console.log('1.7>>>'+storeResponse.Id);

			}
			
         });
         $A.enqueueAction(action);

	}
})

User-added image
Hi...

I have a task but I don't know how to afford it. I appreciate any help.
Application:
The app must connect to a third API through RESTFull and pull data.
The first step: the user enters the API KEY in the config page.
Task Requirement:
The API KEY must be entered in the config page. Once the user enters the API KEY the record must be created only if the API KEY is good. It means only if the connection succeeded.

My issue:
I create a Trigger in the CONFIG__c object with the following rule:
before.insert check the REST connection if this is OK the record is saved else the record is not saved.

But how could I know the connection result if the call to callout from trigger must have @future and the @future method MUST be static and avoid? So, how could I return the connection result?
Hi...

I'm calling a controller function in the client - side from blur event in the component.

component code 
<div class="slds-form-element slds-grid slds-wrap">
                                    <div class="slds-form-element__control slds-grow">
                                        <ui:inputText class="slds-input inputFieldWidth"
                                                      labelClass="slds-form-element__label slds-form-element__label_edit slds-no-flex"
                                                      aura:id="inputId"
                                                      blur ="{!c.closeNameBox}"
                                                      change="{!c.onNameChange}"
                                                      maxlength="17"
                                                      required="true"
                                                      label="Tracking #"
                                                      value="{!v.singleRec.Shipping_Track_Number__c}" />
                                    </div>
                                </div>

In the controller:
onNameChange : function(component,event,helper){ 
        // if edit field value changed and field not equal to blank,
        // then show save and cancel button by set attribute to true

        if(event.getSource().get("v.value").trim() != ''){ 
            component.set("v.showSaveCancelBtn",true);

        }

    },   
    
    closeNameBox : function (component, event, helper) {

      // on focus out, close the input section by setting the 'nameEditMode' att. as false   
        component.set("v.nameEditMode", false); 
      // check if change/update Name field is blank, then add error class to column -
      // by setting the 'showErrorClass' att. as True , else remove error class by setting it False   

        if(event.getSource().get("v.value").trim() == 0){
            component.set("v.showErrorClass",true);
        }else{
            component.set("v.showErrorClass",false);
        }
    }

I got the error: Cannot read property 'trim' of undefined. So, the event.getSource() return undefined...

Note: The <input... component is inside a <aura:iteration... so the aura:id="inputId" is the same for all input. I don't know if this is the reason for the error.

Please, let me know if you need more code...

Thanks,


 
Hi...

Our student service department processes the student request through cases.
There are some requests that a payment is required. So, we associate Case with Order. One case can have one or more than one Orders.

REQUIREMENT:
The Case can only be closed when the Order(s) status is "Activated" 

QUESTION:
How can we aware of the user when she/he tries to close the Case that the Order(s) is not Activated yet?

We're thinking to develop the Case validation in the Trigger event (before update). How could we launch a pop up from the Trigger?

Thanks,
Pedro
 
Hi...

I'm creating an aura component to load a CSV file pulled from a RESTFull server.

So, I need to pass the CSV header as a List<String> and the CSV body (columns and rows) as a List<List<String>>.

So, I decided to create an internal object in the controller for this.
public with sharing class CASCsvRecordsController {

    class CSVBody{
        
        List<List<String>> csvRows {get;set;}
        
        List<String> csvHeader {get;set;}
    }
    
    @AuraEnabled
    public static CSVBody loadCSV(String csv){
        

        //The CASConnector connect with a REST server and get the CSV as String
        String fullcsvbody = CASConnector.getCSV('293880', '419356');
        
        CSVBody csvBodyObj = new CSVBody();
        
        //This is List<String> of the CSV header
        csvBodyObj.csvRows = CASCsv.getCSVRows(fullcsvbody);
        
        //This is a List<List<String>> of the line & column
        csvBodyObj.csvHeader = CASCsv.getCSVHeader(fullcsvbody);
       
        return csvBodyObj;
    }

}

I don't know and I appreciate your help to render this in the aura:component.

This is my helper
 
({
 onLoad: function(component, event) {
  console.log('onLoad call');
  
  //call apex class method
  var loadHeader = component.get('c.loadCSV');
  loadHeader.setCallback(this, function(response) {
   //store state of response
   var state = response.getState();
   if (state === "SUCCESS") {
       
    component.set('v.ListOfHeader', response.getReturnValue());

   }
      else{
          console.log("cas Failed with state: " + state);
      }
  });
  $A.enqueueAction(loadHeader);
 },
 
})

and this is a piece of my component
 
<aura:component controller="CASCsvRecordsController" >
   <!--aura init handler , call js "loadContactList" function on component load, and display contact data on table-->   
   <aura:handler name="init" value="{!this}" action="{!c.loadCsvList}"/>
    
   <aura:attribute name="ListOfHeader" type="List" />

Thanks in advance.


 

 
Hi,

I'm building an application which connects with an external API (WebAdmit). One of these API function requests a callback URL to send a notification once the requested process is completed.

What is the safer way to build a URL to receive a notification from an external system?

Here is API documentation for this specific function:
https://liaison-intl.github.io/export_files.html

Thanks,
 
Hi...

I have an CSV file wich the amount and type of column (field) could be changable. The first row has the column (field) name.

I already pull the CSV into SF.

Now, I need to render it in a Lightning page and manipulate it (sort by, search, etc)

My thoughs:
Using a controller to put all CSV records in a List and render it in the page.
My PROBLEM, what data type could I assign to the list?

Could I build dynamically a data type when I read the first line of the CSV file?

List<CustomTypeData> mylist = new
List<CustomTypeData> ();

Thanks
 
Hi...

I have an issue to get the parameters are coming from Google OAuth request.

This is my code:
<apex:page controller="GoogleDriveController" showQuickActionVfHeader="true" action="{!init}" >

...
</apex:page>

public void init(){

        System.debug('GoogleDriveController CONSTRUCTOR');
        System.debug('THECODE '+ApexPages.currentPage().getParameters().get('code'));

        for(String val : ApexPage.currentPage().getHeaders().keySet()){

            System.debug('head '+val+' -- '+ApexPages.currentPage().getParameters().get(val));
        }

        for(String val : ApexPages.currentPage().getParameters().keySet() ){

            System.debug('val '+val+' -- '+ApexPages.currentPage().getParameters().get(val));
        }

        code = ApexPages.currentPage().getParameters().get('code') ;
        //Get the access token once we have code
        if(code != '' && code != null){

            AccessToken();
        }
    }
I can see in the browser inspect network the request with all parameters
 
https://myinstance.lightning.force.com/lightning/n/MyGoogleDrive?state=security_token%3D138r....

but the page is redirected and the parameters are removed.

The Debug Logs only shows the parameters ​​​​​​​from the servelet
my.salesforce.com/servlet/servlet.Integration?lid=01r63000000NUnV&ic=1&tour=&isdtp=p1&sfdcIFrameOrigin=https://speed-dream-189-dev-ed.lightning.force.com&sfdcIFrameHost=web&nonce=a9592094acf18f348a08b1e994e9addec1051e483efa3184630d1f17ebd71d89&ltn_app_id=06m63000000CUlNAAW&clc=0

The google sites: https://accounts.google.com, 
https://www.googleapis.com are included in the Remote Site setting.

Thanks
 
How could I make the unit test for an @AuraEnabled apex method?

The Aura component has a lightning:datatable component which load a custom data (it's not a sObject) from a CSV file.

The app allows select a row and send it to the apex insertContact method. This method parse the csv row to a Contact object through a mapping and save the record.

The method works very well, now I'm trying to make the Unit Test but It fails. The lightining controller sends a  Map<Object,Object> (see the code) but when I try to simulate this in the Unit Test it's sending a Map<String,Object>.

What is the best way to make the Unit Test for this scenario? Thanks!!!

I need to make the Unit Test to deploy it on production.
 
public static List<Contact> insertContact(List<Object> selectedItems){
        
                
        List<Contact> contactList = new List<Contact>();
        
        Map<Object, Object> fieldMap =  (Map<Object, Object>) selectedItems[0];

        Set<Object> fieldSet = new Set<Object>();
        
        fieldSet =  fieldMap.keySet();
        
        Map<String,String> fieldsMapping = CASContact.fieldsMapping;
        
        for(Integer i=0; i< selectedItems.size(); i++){
            
            Map<Object, Object> mObject =  (Map<Object, Object>) selectedItems[i];
            
            Contact newContact = new Contact();
            
            for(Object fieldname : fieldSet){
                
                if(fieldsMapping.get((String) fieldname) !=null)
                newContact.put(fieldsMapping.get((String) fieldname), mObject.get((String) fieldname).toString());
                
            }
            
            contactList.add(newContact);
           
        }
        
        System.debug('cas7.13>>>'+contactList);
        
        Database.SaveResult[] srList = Database.insert(contactList, false);
        
        // Iterate through each returned result
        for (Database.SaveResult sr : srList) {
            if (sr.isSuccess()) {
                // Operation was successful, so get the ID of the record that was processed
                System.debug('cas>>Successfully inserted account. Account ID: ' + sr.getId());
            }
            else {
                // Operation failed, so get all errors                
                for(Database.Error err : sr.getErrors()) {
                    System.debug('cas>>The following error has occurred.');                    
                    System.debug(err.getStatusCode() + ': ' + err.getMessage());
                    System.debug('cas>>Account fields that affected this error: ' + err.getFields());
                }
            }
        }
        
        return contactList;
        
    }

my Unit Test
@isTest static void insertContactTestTrue(){



        String selectedItems = '[{"cas_id":"6050902094","last_name":"pepe","first_name":"papo","permanent_street_address":"Ap #273-2abc565 Est Street","permanent_city":"Belxfast","permanent_state":"ursula","permanent_postal_code":"12345","permanent_country_name":"Papua New Guinea","Phone":"","Mobile":"","email":"a@nadiesabe.edu","program_id_0":"8425651082805990996","program_id_1":"","local_status_0":"Rejected - GPA","local_status_1":"Interview Scheduled","application_status_0":"Received"},{"cas_id":"8551822992","last_name":"papo","first_name":"pupa","permanent_street_address":"9623 Dondequiera. Rd.","permanent_city":"Germersheim","permanent_state":"RP","permanent_postal_code":"5819","permanent_country_name":"Uganda","Phone":"","Mobile":"","email":"ac.mattis.semper@esttempor.ca","program_id_0":"8425651082805990996","program_id_1":"","local_status_0":"Deferred","local_status_1":"","application_status_0":"Verified"}]';

        List<Object> fieldList = (List<Object>)JSON.deserializeUntyped(selectedItems);

        List<Contact> contacts = CASContact.insertContact(fieldList);

        System.assertEquals(2, contacts.size());

    }

 
I'm running a unit test for a method which include another callout method. The callout method is already tested. How could I make the unit test?

here is the involved code
@AuraEnabled
    public static List<CAS_User_Identity__c> requestUserIdentities(String x_api_key){
        
        //THIS IS A CALLOUT METHOD
        CASConnectorIdentity results = CASConnector.getUserIdentities(x_api_key);

        if(!String.isEmpty(results.error)){
            
            throw new AuraHandledException('The Connection was not possible. Verify the API KEY!');
            
        }   
        
		//PARSE THE JSON
        List<CASConnectorIdentity.user_identities> userIdentities = (List<CASConnectorIdentity.user_identities>) results.user_identities;

        List<CAS_User_Identity__c> casUserIdentityList = new List<CAS_User_Identity__c>();
        
        for(CASConnectorIdentity.user_identities usid : userIdentities){
            
            CAS_User_Identity__c  casUserIdentity = new CAS_User_Identity__c();
            
            casUserIdentity.Id__c 			= String.valueOf(usid.id);
            casUserIdentity.institution__c 	= usid.institution;
            casUserIdentity.type__c 		= usid.type;
            casUserIdentity.organization__c = usid.organization;
            casUserIdentity.association__c	= usid.association;
            casUserIdentity.cycle__c		= usid.cycle;
            
            
            casUserIdentityList.add(casUserIdentity);
            
             
        }        
        
    
        //REMOVE ALL RECORDS AND INSERT AGAIN.
        List<CAS_User_Identity__c> userIdentitiesDB = [Select Id from CAS_User_Identity__c];        
        
        if(userIdentities.size() > 0 ){
            
            delete userIdentitiesDB;
            
            insert casUserIdentityList;
            

        }
        
		Insert
        CASProgram.insertProgram( x_api_key);
        
        return casUserIdentityList;

    }

 
Hi...

I'm planning to deploy a managed package. I'm working in prove of concept (sandbox).

Once the app is installed, the user enters an API key to access to the third REST server. The REST server will provide the data to create Opportunity and the Opportunity.stage.
 
The Opportunity Stage is a picklist. How could I add a new stage value to the picklist?

The sf document says:
"Metadata access in Apex is available for Apex classes using API version 40.0 and later." at https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_metadata.htm

but I didn't find how to do it?

Thanks,
Pedro

 
Hi...

I'm writing my unit test of the CustomerOrder class. This class has a method which returns all Orders with status = Available.

In the CustomerOrderTest class, I can not create the data for testing because I don't have access to OrderItem object. I have the System Administrator profile.
 
@isTest
    public static void hasTrackingNumberFalseTest(){
                    Product2 prd = new Product2();
        
        prd.name ='Product Express';
        
        orderItem oi = new OrderItem();
        
        order o = new Order();
        o.EffectiveDate = Date.newInstance(2019, 3, 23);
        o.Status = 'Draft';
        
        Account ac = new Account(name='Test Account');
        Test.startTest();
        
        insert prd;
        insert ac;
        oi.Product2Id = prd.Id;
        oi.UnitPrice  = 30;
        insert oi;
        
        o.AccountId = ac.Id;
        Database.SaveResult result = Database.insert(o);
        oi.OrderId = o.Id;
        System.debug('>>>'+result);
        
        System.assertEquals(true,String.isBlank(OrderAuraController.hasTrackingNumber(o)));

        
        System.debug('>>>'+o);
        
        o.Status = 'Shipped';
        
        Database.SaveResult result2 = Database.update(o);
        System.assertEquals(true,OrderAuraController.hasTrackingNumber(o).equals('OrderAuraController.hasTrackingNumber(o)'));
        
        System.assert(!result2.isSuccess());
        System.assert(result2.getErrors().size() > 0);
        System.assertEquals('The Order Status can not be Processed until the Trackin Number is entered.',
                             result2.getErrors()[0].getMessage());
        Test.stopTest();
        

        

    }


Questions:
How could I create test data if I don't have access to this object?
How could I give access to System Administrator project for OrderItem object?

Thanks,
Hi...

I need to navigate from one component (component "A") to another (component "B"), send parameters and request data from apex class.

Everything works except sending parameter to the apex class... here is my code:

Navigating to other component and send parameters:

Component A. controller
...
handleRowAction: function (component, event, helper) {

            
        var evt = $A.get("e.force:navigateToComponent");
        evt.setParams({
            componentDef : "c:CASCSVFile",
            componentAttributes: {
                selectedRow : JSON.stringify(event.getParam('row'))
            }
        });
        evt.fire();
 
       
    }
...

Component B XML
<aura:component controller="CASExportFile" >
 


        <!-- attributes -->
    <aura:attribute name="data" type="Object"/>
    <aura:attribute name="columns" type="List"/>
    <aura:attribute name="selectedRowsCount" type="Integer" default="0"/>
 
	<aura:attribute name="selectedRow" type="String" access="global"/>

...more code
Component B controller
init: function (component, event, helper) {

    var selectedItem = JSON.parse(component.get("v.selectedRow"));

    var action = component.get("c.csvtojson");
    
    	
        action.setParams({
            "selectedItem":  selectedItem
        });

    console.log('3.4>>>'+component.get("v.selectedRow"));
    console.log('3.5>>>'+selectedItem.Id);
    
        	action.setCallback(this, function(response) {
			var state = response.getState();
            

			if (state === "SUCCESS") {
                 
				var storeResponse = response.getReturnValue();


                console.log('3.6>>>'+Object.getOwnPropertyNames(storeResponse[0]));
                
                var headerlist = Object.getOwnPropertyNames(storeResponse[0]);
                
                var headerArray = [];
               
                for (var i in headerlist ) { 
                    
                    headerArray.push({ label: headerlist[i], fieldName: headerlist[i], type: 'text'})
                }
                
                headerArray.push({label: 'View', type: 'button', initialWidth: 135, typeAttributes: { label: 'View Details', name: 'view_details', title: 'Click to View Details'}});
                console.log('3.7>>>'+JSON.stringify(headerArray));

                 
                component.set('v.columns',headerArray);
             	component.set("v.data", storeResponse);
                component.set("v.filteredData", storeResponse);
                
                
                if(storeResponse != null && storeResponse.length > 0){

                    component.set("v.hasRecords", "true");
                }
                
                component.set('v.maxRowSelection', storeResponse.length);

			}
			else if (state === "RUNNING") {
                //@todo start the timer
            }
            else if (state === "ERROR") {
                var errors = response.getError();
                if (errors) {
                    if (errors[0] && errors[0].message) {
                        console.log("3.>>Error message: " + 
                                 errors[0].message);
                        alert(errors[0].message);
                    }
                } else {
                    console.log("3.>>Unknown error");
                }
            }
         }); 
    
 
		$A.enqueueAction(action);
    },

Lightning Action console
User-added imageBrowser Log Console

User-added image

 
Hi...

I'm working in an app which loads a big with CSV file through a callout and shows it in the lightning:datatable. I want to reduce the time of loading.

The CSV has many columns then the Infinite scrolling of rows doesn't work for me.

I'm planning to show in the lightning:datatable.data few columns and in 'View Details' by row show the rest. As the example: https://developer.salesforce.com/docs/component-library/bundle/lightning:datatable/example#lightningcomponentdemo:exampleDatatableInAction

I appreciate any recomendation on how to do it.

Thanks,
Hi...

I've created an aura:component to render a custom object using lightning:recordViewForm. I pass the recordId but it show me an error: Error in fetching record or record metadata. [Invalid record id].
Even that, the lightning:recordViewForm render the fields.

aura:app
<aura:application extends="force:slds" >
    
    <c:CASConfig></c:CASConfig>
    
</aura:application>

aura:component
<aura:component controller="CASConfig"  access="global"  >
		
    <aura:handler name="init" value="{!this}" action="{!c.doInit}" />
    
    <aura:attribute name="hasCasRecord" type="boolean" default="true"/>
    <aura:attribute name="casConfig" type="CAS_Config__c" />
<lightning:card title="CAS API key">
    <lightning:recordViewForm aura:id="viewForm" recordId="{!v.casConfig.Id}" objectApiName="CAS_Config__c">
        <div class="slds-media">
            
            <div class="slds-media__body">
                
                <lightning:layout multipleRows="true">
                    <lightning:layoutItem size="6">
                        <lightning:outputField fieldName="x_api_key__c"/><h2>hola</h2>
                    </lightning:layoutItem>
                    
                </lightning:layout>
            </div>
        </div>
    </lightning:recordViewForm>
    </lightning:card>    
    

</aura:component>

js controller
({
    doInit : function(component, event, helper) {

		var action = component.get("c.getCasConfig");
		action.setCallback(this, function(response) {
			var state = response.getState();
			if (state === "SUCCESS") {
             
				var storeResponse = response.getReturnValue();

                if($A.util.isEmpty(storeResponse)){
                   component.set("v.hasCasRecord", false);

                }
                else{

                    component.set("v.casConfig", storeResponse);
                    
                }
                component.set("v.casConfigId", storeResponse.Id);
                alert(storeResponse.Id);
             	console.log('1.5>>>'+JSON.stringify(storeResponse));
                console.log('1.6>>>'+$A.util.isEmpty(storeResponse));
                console.log('1.7>>>'+storeResponse.Id);

			}
			
         });
         $A.enqueueAction(action);

	}
})

User-added image
Hi...

I have a task but I don't know how to afford it. I appreciate any help.
Application:
The app must connect to a third API through RESTFull and pull data.
The first step: the user enters the API KEY in the config page.
Task Requirement:
The API KEY must be entered in the config page. Once the user enters the API KEY the record must be created only if the API KEY is good. It means only if the connection succeeded.

My issue:
I create a Trigger in the CONFIG__c object with the following rule:
before.insert check the REST connection if this is OK the record is saved else the record is not saved.

But how could I know the connection result if the call to callout from trigger must have @future and the @future method MUST be static and avoid? So, how could I return the connection result?
Hi...

I'm calling a controller function in the client - side from blur event in the component.

component code 
<div class="slds-form-element slds-grid slds-wrap">
                                    <div class="slds-form-element__control slds-grow">
                                        <ui:inputText class="slds-input inputFieldWidth"
                                                      labelClass="slds-form-element__label slds-form-element__label_edit slds-no-flex"
                                                      aura:id="inputId"
                                                      blur ="{!c.closeNameBox}"
                                                      change="{!c.onNameChange}"
                                                      maxlength="17"
                                                      required="true"
                                                      label="Tracking #"
                                                      value="{!v.singleRec.Shipping_Track_Number__c}" />
                                    </div>
                                </div>

In the controller:
onNameChange : function(component,event,helper){ 
        // if edit field value changed and field not equal to blank,
        // then show save and cancel button by set attribute to true

        if(event.getSource().get("v.value").trim() != ''){ 
            component.set("v.showSaveCancelBtn",true);

        }

    },   
    
    closeNameBox : function (component, event, helper) {

      // on focus out, close the input section by setting the 'nameEditMode' att. as false   
        component.set("v.nameEditMode", false); 
      // check if change/update Name field is blank, then add error class to column -
      // by setting the 'showErrorClass' att. as True , else remove error class by setting it False   

        if(event.getSource().get("v.value").trim() == 0){
            component.set("v.showErrorClass",true);
        }else{
            component.set("v.showErrorClass",false);
        }
    }

I got the error: Cannot read property 'trim' of undefined. So, the event.getSource() return undefined...

Note: The <input... component is inside a <aura:iteration... so the aura:id="inputId" is the same for all input. I don't know if this is the reason for the error.

Please, let me know if you need more code...

Thanks,


 
Hi...

I'm creating an aura component to load a CSV file pulled from a RESTFull server.

So, I need to pass the CSV header as a List<String> and the CSV body (columns and rows) as a List<List<String>>.

So, I decided to create an internal object in the controller for this.
public with sharing class CASCsvRecordsController {

    class CSVBody{
        
        List<List<String>> csvRows {get;set;}
        
        List<String> csvHeader {get;set;}
    }
    
    @AuraEnabled
    public static CSVBody loadCSV(String csv){
        

        //The CASConnector connect with a REST server and get the CSV as String
        String fullcsvbody = CASConnector.getCSV('293880', '419356');
        
        CSVBody csvBodyObj = new CSVBody();
        
        //This is List<String> of the CSV header
        csvBodyObj.csvRows = CASCsv.getCSVRows(fullcsvbody);
        
        //This is a List<List<String>> of the line & column
        csvBodyObj.csvHeader = CASCsv.getCSVHeader(fullcsvbody);
       
        return csvBodyObj;
    }

}

I don't know and I appreciate your help to render this in the aura:component.

This is my helper
 
({
 onLoad: function(component, event) {
  console.log('onLoad call');
  
  //call apex class method
  var loadHeader = component.get('c.loadCSV');
  loadHeader.setCallback(this, function(response) {
   //store state of response
   var state = response.getState();
   if (state === "SUCCESS") {
       
    component.set('v.ListOfHeader', response.getReturnValue());

   }
      else{
          console.log("cas Failed with state: " + state);
      }
  });
  $A.enqueueAction(loadHeader);
 },
 
})

and this is a piece of my component
 
<aura:component controller="CASCsvRecordsController" >
   <!--aura init handler , call js "loadContactList" function on component load, and display contact data on table-->   
   <aura:handler name="init" value="{!this}" action="{!c.loadCsvList}"/>
    
   <aura:attribute name="ListOfHeader" type="List" />

Thanks in advance.


 

 
Hi,

I'm building an application which connects with an external API (WebAdmit). One of these API function requests a callback URL to send a notification once the requested process is completed.

What is the safer way to build a URL to receive a notification from an external system?

Here is API documentation for this specific function:
https://liaison-intl.github.io/export_files.html

Thanks,
 
Hi...

I have an CSV file wich the amount and type of column (field) could be changable. The first row has the column (field) name.

I already pull the CSV into SF.

Now, I need to render it in a Lightning page and manipulate it (sort by, search, etc)

My thoughs:
Using a controller to put all CSV records in a List and render it in the page.
My PROBLEM, what data type could I assign to the list?

Could I build dynamically a data type when I read the first line of the CSV file?

List<CustomTypeData> mylist = new
List<CustomTypeData> ();

Thanks
 
Hi...

I'm developing my first package in SF, I'm using SFDX and VisualStudio Code DX.

I need to create a custom field in Contact object and test it in Scratch org.

How could I do it? where could I get the documentation to understand that specific topic?

Thanks a lot.
Hi...

I'm inserting data from apex class. It's connected to an API and pull the applicants' data.

The applicant should be new or duplicated. The new applicants must be inserted and the duplicated applicants must be updated. I'm using HEDA and also create opportunities for requested courses.

I've written the following Trigger but it doesn't work properly. This avoids inserting new applicants.

How could I do?
 
trigger casContact on Contact (before insert, before update, after insert, after update) {
     
    if(Trigger.isBefore){
        if(Trigger.isInsert){
            
            Map<String, Contact> casIdMap = new Map<String, Contact>();
            
            for(Contact cc : Trigger.New){
                
                System.debug('CASSNEWINSERT'+cc.Cas_Id__c);

                // Make sure another new contact isn't also a duplicate 
   
                if (casIdMap.containsKey(cc.Cas_Id__c)) {
                    cc.Cas_Id__c.addError('Another new Contact is duplicated');
                } else {
                    casIdMap.put(cc.Cas_Id__c, cc);
                }
                
            }
            
            System.debug('CASSNEWSIZE '+Trigger.New.size());
            
            if(casIdMap.size() > 0){
                
                for(Contact ccs : [Select id, cas_id__c, Name from Contact where cas_id__c in: casIdMap.keySet() ]){
                    
                    Contact newContact = casIdMap.get(ccs.cas_id__c);
        			
                    newContact.Cas_Id__c.addError('A Contact is already exists');
                }

            }
            
        }
	}
	
}

Thanks
Pedro


 
Hi
I've tried from many ways and read a lot of forum topics, articles, etc but I'm not able to connect through the Data Loader using the CLI option.
I want to import Lead using the Data Loader in Batch files.
Note: I've already connected and imported Lead using the Data Loader GUI. I use the Password Authentication option and the password is: Mypassword + token
What I did:
Create the Encrypted password from the command line: https://developer.salesforce.com/docs/atlas.en-us.dataLoader.meta/dataLoader/loader_encryption.htm
Create a folder at C:\SALESFORCE\ and copied there all files I needed:
Progress-conf.xml
LEAD_NDCAS_INPROGRESS. sld
In-Progress_report.csv It's the csv files with the leads. it was previously imported with the Data Loader GUI
thekey.txt

I run the following script:
..\bin\process.bat c:\SALESFORCE leadInsert

I got the following error:
Caused by: [LoginFault [ApiFault  exceptionCode='LOGIN_MUST_USE_SECURITY_TOKEN' exceptionMessage='Invalid username, password, security token; or user locked out. Are you at a new location? When accessing Salesforce--either via a desktop client or the API--from outside of your companyÆs trusted networks, you must add a security token to your password to log in. To get your new security token, login to Salesforce. From your personal settings, enter Reset My Security Token inthe Quick Find box, then select Reset My Security Token.'
 extendedErrorDetails='{[0]}'

I've already reset my Token.

I appreciate any helps, thanks!

Progress-conf.xml file
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
	<bean id="leadInsert" class="com.salesforce.dataloader.process.ProcessRunner" singleton="false">
		<description>accountInsert job gets	the account	record from the CSV file and inserts it into Salesforce.</description>
		<property name="name" value="leadInsert" />
		<property name="configOverrideMap">
			<map>
				<entry key="sfdc.debugMessages" value="false" />
				<entry key="sfdc.debugMessagesFile" value="c:\SALESFORCE\sfdcSoapTrace.log" />
				<entry key="sfdc.endpoint" value="https://test.salesforce.com" />
				<entry key="sfdc.username" value="my_username_in_sandbox" />
				<!--Password below is the result of the encrypted using key file,
encrypt.bat -e Mypassword
Note: For this post, it's not the real password
 -->
				<entry key="sfdc.password" value="0231db029bxb88x82d3daex3bxf1829e5b99122x82e0f49beb0xdf193890433f"
 />
				<entry key="process.encryptionKeyFile" value="c:\SALESFORCE\thekey.txt" />
				<entry key="sfdc.timeoutSecs" value="600" />
				<entry key="sfdc.loadBatchSize" value="200" />
				<entry key="sfdc.entity" value="Lead" />
				<entry key="process.operation" value="insert" />
				<entry key="process.mappingFile"  value="c:\SALESFORCE\LEAD_NDCAS_INPROGRESS.sdl" />
				<entry key="dataAccess.name" value="c:\SALESFORCE\In-Progress_report.csv" />
				<entry key="process.outputSuccess" value="c:\SALESFORCE\lead_success.csv" />
				<entry key="process.outputError" value="c:\SALESFORCE\leadInsert_error.csv" />
				<entry key="dataAccess.type" value="csvRead" />
				<entry key="process.initialLastRunDate" value="2005-12-01T00:00:00.000-0800" />
				<entry key="process.outputError" value="C:\SALESFORCE\ProcessOutputError.csv"/>
			</map>
		</property>
	</bean>
</beans>