SCENARIO
While working on one of the requirements for a Manufacture sector project for a client based out of Atlanta, GA, there was a requirement to allow special characters like % & # _ ( ) * - . in the document name while uploading from salesforce to SharePoint and open the document from salesforce custom LWC component.
Let's brief on the scenario: To store\manage files client is using SharePoint through integration. While users upload documents in the salesforce, files are uploaded to SharePoint and shown to salesforce custom component. Now the client has requested new enhancement to allow special characters as well like % & # _ ( ) * - in document name.
Document upload with special characters works fine as we were using salesforce content document to upload files. After that our custom API is responsible to upload same file and give response back to open uploaded files on success dialog box.
However, file was being uploaded in SharePoint and few changes were done in Custom API to provide response back for the document name containing special character.
CHALLENGE
Custom API changes were not enough to make solution fully work as we were able to open such documents from success dialog box but not from salesforce Custom Component. We were using SharePoint OOTB REST API to build link for SharePoint document link.
APPROACH
We have used salesforce APEX ENCODINGUTIL class to encode file name in URL. This solved the issue for most of the documents having special characters but not for which contains space in Document name.
After few analysis, we found ENCODINGUTIL replace space with '+' sign. With the tricky solution we resolved the issue by replacing '+' with '%20' in encoded Document name. Let's understand with the example.
EXAMPLE:
- Find below few specific parameter being used in solution.
- Document Name : Test % & # _ ( ) * - .docx
- OOTB\Standard SharePoint document Encoded URL :
SiteURL/Shared%20Documents/General/Test%20%25%20&%20%23%20_%20(%20)%20%20-%20.docx - To get document details, we make SharePoint REST API callout.
- In the response, we get FileRef As
SiteURL/Shared Documents/Genetal/Test % & # _ ( ) * - .docx - As we can see from both the URL SharePoint document URL is Encoded and in the response FileRef is not Encoded in format.
- So we need to Encode FileRef and replace '+' with '%20' in the apex as below.
String DocumentencodedUrl = EncodingUtil.urlEncode(FileRef, 'UTF-8'); //By using EncodingUtil class and its methods we can encode and decode URL strings. System.Debug('Encoded Document URL--> '+DocumentencodedUrl); // Encoded Document URL--> SiteURL%2FShared+Documents%2FGenetal%2FTest+%25+%26+%23+_+%28+%29+*+-+.docx String DocumentUrl = DocumentencodedUrl.replace('+','%20'); //By replace string function we are replacing '+' with '%20' System.Debug('Document URL--> '+DocumentUrl); //Document URL--> SiteURL%2FShared%20Documents%2FGenetal%2FTest%20%25%20%26%20%23%20_%20%28%20%29%20*%20-%20.docx
In the above code, we have used EncodeUtil class and its urlEncode Method to encode the URL string and replace the method to replace '+' with '%20'.
- Now our DocumentencodedUrl will work and document can be opened from salesforce custom component.
CONCLUSION
By encoding URL and replacing '+' with '%20' we can resolve the document URL issue having special character and space.
No comments:
Post a Comment