I have http request batch class with the endpoint url is set by using Named Credential in apex code
Named Credential:
- Given as My Domain URL
- Identity type as Named Principal
- Authentication Protocol as OAuth
- Authentication Provider as Salesforce
I have checked Generate Authorization Header checkbox
req.setEndpoint('callout:Createddateconversionrate/services/data/v43.0/sobjects/DatedConversionRate');
Batch class
global class CreateDatedConversionRate implements Database.Batchable<sObject>,Database.Stateful,Database.AllowsCallouts {
private String sessionId;
public string querystring{get;set;}
global CreateDatedConversionRate(){
this.sessionId = querystring;
}
global Database.QueryLocator start(Database.BatchableContext BC) {
String query = '';
List<AggregateResult> startDateList = [SELECT StartDate FROM DatedConversionRate GROUP BY STARTDATE ORDER BY STARTDATE DESC LIMIT 1];
System.debug(LoggingLevel.INFO,'Last exchangeDate:'+startDateList.get(0));
String startDate = DateTime.newInstance(((Date)startDateList.get(0).get('StartDate')), Time.newInstance(0,0,0,0)).format('yyyy-MM-dd');
System.debug(LoggingLevel.INFO,'query string:'+startDate);
query = 'SELECT IsoCode, ConversionRate FROM DatedConversionRate WHERE STARTDATE = '+ startDate +' ORDER BY IsoCode';
System.debug(LoggingLevel.INFO,'Executed query:'+query);
return Database.getQueryLocator(query);
}
global void execute(Database.BatchableContext BC, List<DatedConversionRate> conversionList) {
System.debug(LoggingLevel.INFO,'conversionList size:'+conversionList.size());
String todayDate = DateTime.newInstance(System.Date.today(), Time.newInstance(0, 0, 0, 0)).format('yyyy-MM-dd');
if(conversionList != null && conversionList.size()>0){
for(DatedConversionRate conversionRate : conversionList){
String str = '' ;
str +='{ "IsoCode" : "';
str += conversionRate.IsoCode +'", "ConversionRate" : ';
str += conversionRate.ConversionRate + ', "StartDate" : "';
str += todayDate + '"';
str += '}';
/*REST API CALL TO INSERT RECORDS.*/
Http h = new Http();
HttpRequest req = new HttpRequest();
req.setBody(str);
req.setEndpoint('callout:Createddateconversionrate/services/data/v43.0/sobjects/DatedConversionRate');
req.setMethod('POST');
System.debug(LoggingLevel.INFO,'request body:'+req.getBody());
if(!Test.isRunningTest()){
HttpResponse res = h.send(req);
System.debug(LoggingLevel.INFO,'res'+res.getBody());
System.debug(LoggingLevel.INFO,'res'+res.getStatus());
}
}
}
}
global void finish(Database.BatchableContext BC) {
}
}
When i am trying to execute the Batch class.I am getting following error
{"message":"This session is not valid for use with the REST API","errorCode":"INVALID_SESSION_ID"}]
How to rectify this error?
For GET Method is working,only for POST Method is not working? please guide me for answer






Secondly the user who is running the batch class, and the endpoint you are trying to reach are in same org ?
– Pranay Jaiswal Jul 13 '18 at 05:50