0

When I try to add a new field to a custom object, I get an error. Apparently I missed one of the recommended fields or have some typo? I also tried to add a field of the "Text" type - everything was successful with it.

public class MetadataUtility {

    public static void generateField(String objectAPIName, String fieldAPIName, String fieldLabel){
        String metadata = '{"Metadata" : {"type" : "Currency","Precision":18,"Scale":1,"Label":"'+fieldLabel+'","DeveloperName":"'+fieldLabel+'","Required":false},"FullName":"'+objectAPIName+'.'+fieldAPIName+'"}';
        String responseBody = createField(metadata);
    }
    
    public static String createField(String metadata) {
        HttpRequest request = new HttpRequest();
        request.setHeader('Authorization', 'Bearer ' + UserInfo.getSessionID());
        request.setHeader('Content-Type', 'application/json');    
        request.setEndpoint(URL.getSalesforceBaseUrl().toExternalForm()+
        +'/services/data/v51.0/tooling/sobjects/CustomField');
        request.setMethod('POST');
        request.setBody(metadata);
        Http http = new Http();
        HTTPResponse res = http.send(request);
        return res.getBody();
   }
}

//I'm trying to make a recording

MetadataUtility.generateField('Exchange_Rate__c', 'BYN__c', 'BYN');

//I get this error

System.HttpResponse[Status=Bad Request, StatusCode=400]

[{"message":"Cannot deserialize instance of complexvalue from VALUE_NUMBER_INT value 18 or request may be missing a required field at [line:1, column:50]","errorCode":"JSON_PARSER_ERROR"}]
2
  • the apex metadata api wrapper makes coding this more reliable
    – cropredy
    Commented Jun 11, 2021 at 19:49
  • Thanks for the information. I'll take it into consideration. But I first need to solve my write error problem... Commented Jun 13, 2021 at 15:52

1 Answer 1

0

During the time since the publication of the question, I conducted a number of experiments and solving the problem on adding it in this form led to success. Maybe it will be useful to someone:

String metadata = '{"Metadata" : {"type" : "Currency","precision" : 18,"scale" : 1,"label" : "' + fieldLabel + '","required" : false},"fullName" : "'+objectAPIName+'.'+fieldAPIName+'"}';

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .