public without sharing class InvocableApexActionHandler { private static final String GOOGLE_DRIVE_API_URL = 'https://www.googleapis.com/drive/v3/files'; private static String externalStorage = 'Google Drive'; public static Map createFolderFromAction(Boolean isServiceMode,String userId,String folderName, String parentFolderId ,String recordId,String newAccessTokenGnt) { Map newAccessTokenMap=new Map(); String ACCESS_TOKEN; String refreshToken; System.debug('parentFolderId >>>'+parentFolderId); Map accessTokenMap=new Map(); // Map> storageTokenMap=new Map>(); Map googleDriveMap=new Map(); try{ System.debug('newAccessTokenGnt'+newAccessTokenGnt); if(newAccessTokenGnt == null){ accessTokenMap = CloudStorageUtlilty.getAccessToken(isServiceMode, userId, externalStorage); ACCESS_TOKEN=(String)accessTokenMap.get('ACCESS_TOKEN'); refreshToken = (String) accessTokenMap.get('REFRESH_TOKEN'); } else{ ACCESS_TOKEN=newAccessTokenGnt; } String folderMetadata = '{' + '"name": "' + folderName + '",' + '"mimeType": "application/vnd.google-apps.folder"'; if (parentFolderId != null && parentFolderId != '') { folderMetadata += ',"parents": ["' + parentFolderId + '"]'; } folderMetadata += '}'; Map headers = new Map(); headers.put('Authorization', 'Bearer ' + ACCESS_TOKEN); headers.put( 'Content-Type', 'application/json'); HttpResponse res = CloudStorageUtlilty.makeCallout(folderMetadata, GOOGLE_DRIVE_API_URL, headers, 'POST'); String createdFolderName; String folderId; if (res.getStatusCode() == 200) { System.debug('resBody'+JSON.serializePretty(res.getBody())); String responseBody = res.getBody(); Map resultMap = (Map) JSON.deserializeUntyped(responseBody); folderId=(String) resultMap.get('id'); createdFolderName=(String) resultMap.get('name'); googleDriveMap.put('folderName',createdFolderName); googleDriveMap.put('parentFolderId',folderId); } else if(res.getStatusCode() == 401){ newAccessTokenMap = CloudStorageUtlilty.refreshAndReturn(refreshToken, externalStorage); googleDriveMap.put('isnewAccesstoken' ,'true'); googleDriveMap.put('newAccessToken', newAccessTokenMap.get('ACCESS_TOKEN')); Map headers1 = new Map(); headers1.put('Authorization', 'Bearer ' + newAccessTokenMap.get('ACCESS_TOKEN')); headers1.put( 'Content-Type', 'application/json'); HttpResponse res1 = CloudStorageUtlilty.makeCallout(folderMetadata, GOOGLE_DRIVE_API_URL, headers1, 'POST'); String responseBody = res1.getBody(); Map resultMap = (Map) JSON.deserializeUntyped(responseBody); folderId=(String) resultMap.get('id'); createdFolderName=(String) resultMap.get('name'); googleDriveMap.put('folderName',createdFolderName); googleDriveMap.put('parentFolderId',folderId); // storageTokenMap.put('Google Drive',googleDriveMap); } return googleDriveMap; } catch (Exception e) { FME_Logger.error(e.getMessage(), 'InvocableApexActionHandler' + e.getLineNumber(), 'createFolderFromAction'); // System.debug('>>>error='+e.getMessage()); // throw new AuraHandledException(e.getMessage()); } finally{ FME_Logger.saveLog(); } return new Map(); } public static void linkFilesWithRecord(String recordId,String folderId,String storageType,String folderName){ try{ List fileLinkList = new List(); HIC_FilesME__File_Link__c fileLink = new HIC_FilesME__File_Link__c(); fileLink.HIC_FilesME__Linked_Entity_Id__c = folderId; fileLink.HIC_FilesME__Linked_Storage_Type__c = storageType; fileLink.HIC_FilesME__Linked_Entity_Name__c = folderName; fileLink.HIC_FilesME__Linked_Mimetype__c = 'application/vnd.google-apps.folder'; fileLink.HIC_FilesME__Linked_Record_Id__c = recordId; fileLinkList.add(fileLink); if(fileLinkList.size()>0){ insert fileLinkList; } } catch(Exception e){ FME_Logger.error(e.getMessage(), 'InvocableApexActionHandler' + e.getLineNumber(), 'linkFilesWithRecord'); } finally{ FME_Logger.saveLog(); } } public static void moveSalesforceFiles(String storageType,String recordId,String folderId,String driveId){ try{ ContentVersion cv = [SELECT Id, VersionData,Title,FileExtension FROM ContentVersion WHERE Id = :recordId]; Integer fileSize = cv.VersionData.size(); if (fileSize <= 6000000) { //String cloudFileId = 'test'; String fileId = FME_GoogleDriveService.uploadFile(cv, folderId); System.debug('✅ File uploaded to Google Drive, fileId = ' + fileId); } } catch(Exception e){ FME_Logger.error(e.getMessage(), 'InvocableApexActionHandler' + e.getLineNumber(), 'linkFilesWithRecord'); } finally{ FME_Logger.saveLog(); } } }