8

Is it possible to query deployment status->Deployment details start time and end time?

Deployment Details

5 Answers 5

9

In 2021, the query is available using tooling API:

SELECT Id, Status, StartDate, CompletedDate FROM DeployRequest

enter image description here

P.S: Added as answer because I spent more than an hour by simply assuming it's not possible using Tooling API

2
6

You can't query it, but there is an API call: checkDeployStatus. This returns a DeployResult object that includes things like start date/time, end date/time, status, who cancelled it, number of tests run, errors, and so on.

3
  • can i call the api inside an aura component and display the record details? as there is very less information in the documentation so is there any sample code available.
    – Raj SF
    Jun 25, 2020 at 11:20
  • @Ananga It should be possible, though I haven't specifically tried it. It would probably be worth asking a new question if you haven't already, perhaps someone's already built this.
    – sfdcfox
    Jun 25, 2020 at 14:10
  • i already did it but not getting proper solution.salesforce.stackexchange.com/questions/310722/…
    – Raj SF
    Jun 26, 2020 at 7:45
5

If you investigate the Id value you will see that the object type is DeployRequest:

system.debug(Id.valueOf('0Af'.rightPad(15, '0')).getSObjectType());

This object is not currently available for query in SOQL, nor via the Tooling API or Metadata API.

3
  • 1
    I think you're being too literal.
    – sfdcfox
    Mar 7, 2018 at 19:01
  • 1
    Is the deploymentID same as what we get from ant deployment? via Ant we can check the status of deployment, probably that can be used :/ Mar 7, 2018 at 19:03
  • 4
    For anyone stumbling upon this, DeployRequest does now appear to be available to query in Tooling API, e.g. SELECT Id, Status, StartDate, CompletedDate FROM DeployRequest Sep 14, 2020 at 16:47
3

You can't currently get these details via SOQL. Instead, as sfdcfox answered, you can use the checkDeployStatus Metadata API to get this data.

Examples of calling this from Apex:

public void checkDeployStatus(Id deployRequestId) {
    HttpRequest req = new HttpRequest();
    req.setHeader('Authorization', 'Bearer ' + UserInfo.getSessionID());
    req.setHeader('Content-Type', 'application/json');

    req.setMethod('GET');     
    String instanceName = System.Url.getSalesforceBaseUrl().toExternalForm();
    // Visualforce can't make the direct API calls. Might need to massage the instanceName
    req.setEndpoint(instanceName + '/services/data/v49.0/metadata/deployRequest/' + deployRequestId + '?includeDetails=true');
    
    Http http = new Http();
    try {
        HTTPResponse res = http.send(req);                 
        System.debug('STATUS:' + res.getStatus());
        System.debug('STATUS_CODE:' + res.getStatusCode());
        String responseBody = res.getBody(); 

        if(res.getStatusCode() == 200) {

            DeployResultJson jsonResult = (DeployResultJson)JSON.deserialize(responseBody, DeployResultJson.class);

            if(jsonResult.deployResult.details != null) {
                for(Metadata.DeployMessage dm : jsonResult.deployResult.details.componentSuccesses) {
                    if(dm.fileName == 'package.xml') {
                        continue;
                    }

                    // Do something with the DeployMessage

                }
            }
        }
    } catch(System.CalloutException e) {
        // Exception handling goes here
    }
}

// Support unpacking via JSON.deserialize from deployRequest metadata api call
public class DeployResultJson {       
    public String id;
    public Object validatedDeployRequestId;
    public Object deployOptions;
    public Metadata.DeployResult deployResult;
}
1

You can query an object called DeployRequest but using the tooling api.

sfdx force:data:soql:query --query "SELECT Id, Status, StartDate, CompletedDate FROM DeployRequest WHERE Status = 'InProgress'  ORDER BY CreatedDate DESC LIMIT 1" --usetoolingapi --json --loglevel fatal -u USERNAME

Even though there is no documentation for it, you can still use it and use the describe request to get the list of fields

/services/data/v54.0/tooling/sobjects/DeployRequest/describe/

That request using Postman for example, will give you a JSON like this

enter image description here

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.