You need to sign in to do that
Don't have an account?
EagerToLearn
REST Invalid URI
Hi,
I had this code working but realized that it really wasn't bulkifyed because I was passing in a single username! I changed the caller to pass a list as shown below. The bold areas are what i changed from a String to a LIST string. Once I did that I started getting an invalid URI error. Your help is apprecaited - thanks.
public class SandboxManagerCallout {
@future(callout=true)
public static void DeactivateUser(String NamedCredential, List<String> UserNames) {
// The line below is only here to save time during testing by reactivating users.
// This should always be set to FALSE in PRODUCTION.
Boolean isActive = true;
String EndPoint = 'callout:' + NamedCredential + '/services/apexrest/SandboxManagerAPI/' + UserNames + '/' + isActive;
HttpRequest req = new HttpRequest();
req.setEndpoint(EndPoint);
req.setMethod('POST');
Http http = new Http();
req.setHeader('Content-Type', 'application/json;charset=UTF-8');
req.setBody('{"UserNames":UserNames, "isActive":isActive}');
HTTPResponse res = http.send(req);
System.debug('---Response---');
System.debug(res.getBody());
}
}
this is the code on the REST API side but the error I get doesn't even make it to this code but thought to show in case...
@RestResource(urlMapping='/SandboxManagerAPI/*')
global with sharing class SandboxManagerAPI {
static Boolean isSandboxValidated = false;
static Boolean isOrgSandbox = false;
@HttpPost
global static void doDeactivate() {
Integer USER_NAME = 2;
Integer IS_ACTIVE = 3;
if(!issandbox()) return;
System.debug('---DeactivateUser.doDeactivate()---');
RestRequest req = RestContext.request;
RestResponse res = RestContext.response;
System.debug('req: ' + req.requestURI);
List<String> Parms = req.requestURI.split('/');
String UserName = parms[USER_NAME];
String isActive = parms[IS_ACTIVE];
//String userName = req.requestURI.substring(req.requestURI.lastIndexOf('/')+1);
System.debug('Username Passed In: ' + UserName);
System.debug('isACtive passwed In: ' + isActive);
User user = [SELECT Id, Username, isActive
FROM User
WHERE userName .............................
.............................
I had this code working but realized that it really wasn't bulkifyed because I was passing in a single username! I changed the caller to pass a list as shown below. The bold areas are what i changed from a String to a LIST string. Once I did that I started getting an invalid URI error. Your help is apprecaited - thanks.
public class SandboxManagerCallout {
@future(callout=true)
public static void DeactivateUser(String NamedCredential, List<String> UserNames) {
// The line below is only here to save time during testing by reactivating users.
// This should always be set to FALSE in PRODUCTION.
Boolean isActive = true;
String EndPoint = 'callout:' + NamedCredential + '/services/apexrest/SandboxManagerAPI/' + UserNames + '/' + isActive;
HttpRequest req = new HttpRequest();
req.setEndpoint(EndPoint);
req.setMethod('POST');
Http http = new Http();
req.setHeader('Content-Type', 'application/json;charset=UTF-8');
req.setBody('{"UserNames":UserNames, "isActive":isActive}');
HTTPResponse res = http.send(req);
System.debug('---Response---');
System.debug(res.getBody());
}
}
this is the code on the REST API side but the error I get doesn't even make it to this code but thought to show in case...
@RestResource(urlMapping='/SandboxManagerAPI/*')
global with sharing class SandboxManagerAPI {
static Boolean isSandboxValidated = false;
static Boolean isOrgSandbox = false;
@HttpPost
global static void doDeactivate() {
Integer USER_NAME = 2;
Integer IS_ACTIVE = 3;
if(!issandbox()) return;
System.debug('---DeactivateUser.doDeactivate()---');
RestRequest req = RestContext.request;
RestResponse res = RestContext.response;
System.debug('req: ' + req.requestURI);
List<String> Parms = req.requestURI.split('/');
String UserName = parms[USER_NAME];
String isActive = parms[IS_ACTIVE];
//String userName = req.requestURI.substring(req.requestURI.lastIndexOf('/')+1);
System.debug('Username Passed In: ' + UserName);
System.debug('isACtive passwed In: ' + isActive);
User user = [SELECT Id, Username, isActive
FROM User
WHERE userName .............................
.............................
Hi,
The EndPoint you are building may have spaces or characters which may not be supported.
Please see debug and check if the URI has any white spaces or invalid symbols.
Note: if there is space even at the end of the endpoint then Invalid URI error is thrown!
Example: 'https://developer.salesforce.com/forums '
Hope this helps,
Prashanth