API to access list of Process Steps

I'm currently using the Anaplan Integration API to upload files and run processes containing imports. This all works great.

Currently if I want to run a process I need to be careful to upload all files associated with any imports it runs beforehand. What I'd like to do is to query the process I want to run and discover what import actions it runs. I can then query those to work out what files I should upload first.

I see I can get the current step of a running process, but I can't see how I can get a list of all steps that a process has. Is this possible?

Best Answer

  • In case it's useful, I figured out that once i got a process id for a given process I can query /processes/ProcessId to get the actions. I then query the list of imports to find the corresponding import details for any action that is an import, then I query files to get the info about the datasource:

     

    var anaplanFiles = await client.GetJsonObjectAsync<FilesResponse>($"https://api.anaplan.com/2/0/workspaces/{WorkspaceId}/models/{ModelId}/files");
                
    Console.Write($"Getting list of processes.{new string(' ', Console.WindowWidth)}".Substring(0, Console.WindowWidth - 1) + "\r");
    // Get details of processes
    List<Process> anaplanProcesses =
        (await client.GetJsonObjectAsync<ProcessesResponse>($"https://api.anaplan.com/2/0/workspaces/{WorkspaceId}/models/{ModelId}/processes")).Processes;
    
    var processIdsByName = anaplanProcesses.ToDictionary(p => p.Name, p => p.Id);
    
    Console.Write($"Getting list of actions.{new string(' ', Console.WindowWidth)}".Substring(0, Console.WindowWidth - 1) + "\r");
    var anaplanActions = (await client.GetJsonObjectAsync<ActionsResponse>($"https://api.anaplan.com/2/0/workspaces/{WorkspaceId}/models/{ModelId}/actions")).Actions;
    
    Console.Write($"Getting list of actions for each process.{new string(' ', Console.WindowWidth)}".Substring(0, Console.WindowWidth - 1) + "\r");
    var processesActionsToRunTasks = ProcessesToRun
        .Select(async p => (await client.GetJsonObjectAsync<ProcessResponse>($"https://api.anaplan.com/2/0/workspaces/{WorkspaceId}/models/{ModelId}/processes/{processIdsByName[p]}")).ProcessMetadata.Actions).ToArray();
    Task.WaitAll(processesActionsToRunTasks);
    
    var processesActionsToRun = processesActionsToRunTasks.SelectMany(t => t.Result).Where(a => !string.IsNullOrEmpty(a.ImportDataSourceId));
    
    var usedFiles = processesActionsToRun.Select(a => anaplanFiles.Files.Single(f => f.Id == a.ImportDataSourceId)).ToArray();