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
gaurav arora 33gaurav arora 33 

Metadata API for Owner field

I want to update the update the history tracking for Owner fields. but i am not able to do that. the below code is not working.
try{
    MetadataService.MetadataPort service1 = new MetadataService.MetadataPort();
    service1.SessionHeader = new MetadataService.SessionHeader_element();
    service1.SessionHeader.sessionId = UserInfo.getSessionId();
    MetadataService.MetadataPort service = service1;
    MetadataService.CustomField customField = new MetadataService.CustomField();
    customField.fullName = 'AG_PCM_Issue_Code__c.OwnerId';
    customField.type_x = 'Lookup';
    //customField.label = 'Owner';
    customField.relationshipLabel = 'Owner';
    customField.relationshipName = 'Owner';
    customField.referenceTo = 'User';
    customField.trackHistory = true;
    List<MetadataService.SaveResult> results = service.updateMetadata(new MetadataService.Metadata[] { customField });
    if(results[0].errors!=null)
    {
        List<String> messages = new List<String>();
        messages.add(
            (results[0].errors.size()==1 ? 'Error ' : 'Errors ') +
            'occured processing component ' + results[0].fullName + '.');
        for(MetadataService.Error error : results[0].errors)
            messages.add(
                error.message + ' (' + error.statusCode + ').' +
                ( error.fields!=null && error.fields.size()>0 ?
                 ' Fields ' + String.join(error.fields, ',') + '.' : '' ) );
        if(messages.size()>0)
            system.debug('errorstoh:::'+String.join(messages, ' '));
    }
}
catch(Exception e){
    system.debug('error: '+e.getMessage());
}
But if i use the same code for any custom lookup field then it is working.
try{
    MetadataService.MetadataPort service1 = new MetadataService.MetadataPort();
    service1.SessionHeader = new MetadataService.SessionHeader_element();
    service1.SessionHeader.sessionId = UserInfo.getSessionId();
    MetadataService.MetadataPort service = service1;
    MetadataService.CustomField customField = new MetadataService.CustomField();
    customField.fullName = 'AG_Issue_Code__c.AG_Issue_Category__c';
    customField.type_x = 'Lookup';
    customField.label = 'Issue Category';
    customField.relationshipLabel = 'AG_Issue_Codes';
    customField.relationshipName = 'AG_Issue_Codes';
    customField.referenceTo = 'AG_Issue_Category__c';
    customField.trackHistory = true;
    List<MetadataService.SaveResult> results = service.updateMetadata(new MetadataService.Metadata[] { customField });
    if(results[0].errors!=null)
    {
        List<String> messages = new List<String>();
        messages.add(
            (results[0].errors.size()==1 ? 'Error ' : 'Errors ') +
            'occured processing component ' + results[0].fullName + '.');
        for(MetadataService.Error error : results[0].errors)
            messages.add(
                error.message + ' (' + error.statusCode + ').' +
                ( error.fields!=null && error.fields.size()>0 ?
                 ' Fields ' + String.join(error.fields, ',') + '.' : '' ) );
        if(messages.size()>0)
            system.debug('errorstoh:::'+String.join(messages, ' '));
    }
}
catch(Exception e){
    system.debug('error: '+e.getMessage());
}