function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
Smita Hodiggeri (Admin)Smita Hodiggeri (Admin) 

How do I run this class in anonymous window -- accepts list of record id's

My Class

public class EngagementSharepointFolderCreation {
    @InvocableMethod(label='Setup Engagements Folder structure in Sharepoint' description='Creates accounts with children of Opportunities and Deliverables')
    public static void CreateEngagementsFolder (List<String> engagementId){
        CreateEngagementsFolderHierarchy(engagementId);
    }
    @future(callout=true)
    public static void CreateEngagementsFolderHierarchy(List<String> lstOfEngagementIds){ 
        try{
            // get the Engagement
            List<pse__Proj__c> lstOfEngagementRecs = [Select Id,pse__Account__r.Account_Opt_DFIR_Eng_Folder_ID__c,pse__Account__r.Account_Sharepoint_Folder_Name__c,Engagement_SharePoint_Folder_Name__c, AccountEngagementSharePointFolderIdOnEng__c,pse__Account__c, pse__Account__r.Name, pse__Account__r.Account_Engagement_SharePoint_Folder_Id__c, pse__Opportunity__r.Name,pse__Account__r.Opportunity_Sharepoint_Folder_Id__c, pse__Proj__c.Engagement_Sharepoint_Folder_Id__c from pse__Proj__c where Id = :lstOfEngagementIds];
            
            List<Account> lstOfAccountsToPSEFolderIds = new List<Account>();
            List<Account> lstOfAccountsToPSEFolderIdsDFIR = new List<Account>();
            
            List<Opportunity> lstOfOppPSEFolderIds = new List<Opportunity>();
            List<Opportunity> lstOfOppPSEFolderIdsDFIR = new List<Opportunity>();
            
            //get auth info from the Settings MDT
            fileforcem1__Sharepoint_Settings__mdt orgSettings = [SELECT fileforcem1__Named_Credential__c,fileforcem1__Document_Library_Id__c,fileforcem1__Site_Id__c FROM fileforcem1__Sharepoint_Settings__mdt WHERE Developername = 'Default' limit 1];
            
            //Initialize the client object
            fileforcem1.ClientApi apiClient = new fileforcem1.ClientApi();
            apiClient.namedCredentialName = orgSettings.fileforcem1__Named_Credential__c;
            
            
            //get the root folder id for the Engagement -- Need to check whats this?
            fileforcem1__SharePoint_Object_Settings__mdt objectSettings = [SELECT fileforcem1__Root_Folder_Id__c,fileforcem1__Site_Id__c,fileforcem1__Document_Library_Id__c,fileforcem1__Initial_Folder_Structure__c FROM fileforcem1__Sharepoint_Object_Settings__mdt WHERE MasterLabel ='pse__Proj__c' LIMIT 1 ];
            
            apiClient.sharepointSiteId = objectSettings.fileforcem1__Site_Id__c;
            apiClient.documentLibraryId = objectSettings.fileforcem1__Document_Library_Id__c;
            for(pse__Proj__c  engagement : lstOfEngagementRecs){
                String accFolderId;
                fileforcem1.SharepointFileInfo accFolder1;
                if (String.isBlank(engagement.pse__Account__r.Account_Opt_DFIR_Eng_Folder_ID__c))
                {
                    //Create the Customer Account folder and record the ID
                    
                    if (!Test.isRunningTest()) {
                        accFolder1 = apiClient.createFolder(Label.PSA_DFIR, engagement.pse__Account__r.Account_Sharepoint_Folder_Name__c);
                        } else {accFolder1=new fileforcem1.SharepointFileInfo();}
                    accFolderId = accFolder1.Id;
                    lstOfAccountsToPSEFolderIdsDFIR.add(new Account(Id = engagement.pse__Account__c, Account_Opt_DFIR_Eng_Folder_ID__c = accFolder1.Id));        
                }else{ accFolderId = engagement.pse__Account__r.Account_Opt_DFIR_Eng_Folder_ID__c;
                }
                
                //Create the opportunity folder and record the ID
                fileforcem1.SharepointFileInfo oppFolder1;
                if (!Test.isRunningTest()) {
                    oppFolder1 = apiClient.createFolder(accFolderId, engagement.pse__Opportunity__r.Name);
                    
                } else{ oppFolder1 = new fileforcem1.SharepointFileInfo();}
                lstOfOppPSEFolderIdsDFIR.add(new Opportunity(Id = engagement.pse__Opportunity__c, Opportunity_DFIR_PSA_Sharepoint_FolderId__c = oppFolder1.Id));
                

                System.debug('Opp Folder created successfully'+oppFolder1.Id);
                
                //Create Engagement folder
                fileforcem1.SharepointFileInfo pseFolder1;
                if (!Test.isRunningTest()){
                pseFolder1 = apiClient.createFolder(oppFolder1.Id, engagement.Engagement_SharePoint_Folder_Name__c);
                }
                
                 else{ pseFolder1 = new fileforcem1.SharepointFileInfo();
                     }
                 engagement.sharepoint_folder_id__c = pseFolder1.Id;
                 engagement.DFIR_PSA_Folder_Id__c= pseFolder1.Id;

                
                
                //Create Deliverables Folder under opportunity
                fileforcem1.SharepointFileInfo Deliverable1Folder1;
                if (!Test.isRunningTest()) {
                    Deliverable1Folder1  = apiClient.createFolder(pseFolder1.Id, 'Deliverables');
                } 
                else {Deliverable1Folder1 = new fileforcem1.SharepointFileInfo(); }
                engagement.DFIR_Deliverable_Folder_Id__c = Deliverable1Folder1.Id;
                System.debug('Deliverable Folder created successfully'+Deliverable1Folder1.Id);
                
                
                
                fileforcem1.SharepointFileInfo accFolder;
                if (String.isBlank(engagement.pse__Account__r.Account_Engagement_SharePoint_Folder_Id__c))
                {
                    //Create the Customer Account folder and record the ID
                    
                    if (!Test.isRunningTest()) {
                        accFolder = apiClient.createFolder(Label.PSA_CCX_Account, engagement.pse__Account__r.Account_Sharepoint_Folder_Name__c);
                        } else {accFolder=new fileforcem1.SharepointFileInfo();}
                    accFolderId = accFolder.Id;
                    lstOfAccountsToPSEFolderIds.add(new Account(Id = engagement.pse__Account__c, Account_Engagement_SharePoint_Folder_Id__c = accFolder.Id));        
                }else{ accFolderId = engagement.pse__Account__r.Account_Engagement_SharePoint_Folder_Id__c;
                }
                
                //Create the opportunity folder and record the ID
                fileforcem1.SharepointFileInfo oppFolder;
                if (!Test.isRunningTest()) {
                    oppFolder = apiClient.createFolder(accFolderId, engagement.pse__Opportunity__r.Name);
                    
                } else{ oppFolder = new fileforcem1.SharepointFileInfo();}
                lstOfOppPSEFolderIds.add(new Opportunity(Id = engagement.pse__Opportunity__c, Opportunity_PSA_Sharepoint_Folder_Id__c = oppFolder.Id));
                

                System.debug('Opp Folder created successfully'+oppFolder.Id);
                
                //Create Engagement folder
                fileforcem1.SharepointFileInfo pseFolder;
                if (!Test.isRunningTest()){
                pseFolder = apiClient.createFolder(oppFolder.Id, engagement.Engagement_SharePoint_Folder_Name__c);
                }
                
                 else{ pseFolder = new fileforcem1.SharepointFileInfo();
                     }
                 engagement.sharepoint_folder_id__c = pseFolder.Id;
                 engagement.pse_folder_id__c= pseFolder.Id;

                
                
                //Create Deliverables Folder under opportunity
                fileforcem1.SharepointFileInfo Deliverable1Folder;
                if (!Test.isRunningTest()) {
                    Deliverable1Folder  = apiClient.createFolder(pseFolder.Id, 'Deliverables');
                } 
                else {Deliverable1Folder = new fileforcem1.SharepointFileInfo(); }
                engagement.Deliverable_Folder_Id__c= Deliverable1Folder.Id;
                
                
                
            }
            // update Account Engagement Folder Id 
            if(!lstOfAccountsToPSEFolderIds.isEmpty()){
                update lstOfAccountsToPSEFolderIds;
            }
            // update Opportunity Engagement Folder Id
            if(!lstOfOppPSEFolderIds.isEmpty()){
                update lstOfOppPSEFolderIds;
            }
            // update Account Engagement Folder Id 
            if(!lstOfAccountsToPSEFolderIdsDFIR.isEmpty()){
                update lstOfAccountsToPSEFolderIdsDFIR;
            }
            // update Opportunity Engagement Folder Id
            if(!lstOfOppPSEFolderIdsDFIR.isEmpty()){
                update lstOfOppPSEFolderIdsDFIR;
            }
            
            //update the opportunity to save the IDs
            update lstOfEngagementRecs;
        }
        
        catch(DmlException e) {
            System.debug('The following exception has occurred: ' + e.getMessage());
        }
    }
}

My Code to run this class in anon window so far
List<pse__Proj__c> lstOfEngagementRecs = [Select Id,pse__Account__r.Account_Opt_DFIR_Eng_Folder_ID__c,pse__Account__r.Account_Sharepoint_Folder_Name__c,Engagement_SharePoint_Folder_Name__c, AccountEngagementSharePointFolderIdOnEng__c,pse__Account__c, pse__Account__r.Name, pse__Account__r.Account_Engagement_SharePoint_Folder_Id__c, pse__Opportunity__r.Name,pse__Account__r.Opportunity_Sharepoint_Folder_Id__c, pse__Proj__c.Engagement_Sharepoint_Folder_Id__c from pse__Proj__c WHERE pse__Opportunity__c <> null AND AccountEngagementSharePointFolderIdOnEng__c = null];
   List<pse__Proj__c> lstEngIds = new List<pse__Proj__c>();
   lstEngIds.add(lstOfEngagementRecs);
    EngagementSharepointFolderCreation.CreateEngagementsFolderHierarchy(lstEngIds);

I know my code to invoke the class is wrong I am not sure about the syntax. begineer developer here. 
AnudeepAnudeep (Salesforce Developers) 
It should be something like this. The invocable method is expecting list<String>. However, you are passing List<ps_Proj__c>. Otherwise, everything is fine with your code
 
List<pse__Proj__c> pseList = new List<([Select id from pse__Proj__c]);
List<String> lsEngIds = new List<String>();
for(pse__Proj__c ps: pseList) {
     lsEngIds.add(ps.Id);
}

EngagementSharepointFolderCreation.CreateEngagementsFolderHierarchy(lstEngIds);

Sample @Invocable method
 
public class AccountQueryAction {
  @InvocableMethod(label='Get Account Names' description='Returns the list of account names corresponding to the specified account IDs.' category='Account')
  public static List<String> getAccountNames(List<ID> ids) {
    List<String> accountNames = new List<String>();
    List<Account> accounts = [SELECT Name FROM Account WHERE Id in :ids];
    for (Account account : accounts) {
      accountNames.add(account.Name);
    }
    return accountNames;
  }
}

Example showing how to invoke the method
List<Account> accList = [Select id,name from account LIMIT 5];
List<Id> accId = new List<Id>();
public List<Account> newList = accList.clone();
for(Account Acc : newList){
accId.add(acc.Id);
}
AccountQueryAction.getAccountNames(accId);

NOTE: The code provided is an example. You'll need to review and make modifications for your organization.

Let me know if this helps, if it does, please mark this answer as best so that others facing the same issue will find this information useful. Thank you