我正在尝试使用Apex更改Salesforce中对象字段的元数据。例如,我试图将所有必填字段都设为非必填字段。我能够使用架构类和诸如isNillable()之类的方法检索所有必填字段。我想问一下是否可以修改元数据。
我对此进行了很多搜索,但找不到任何有用的结果。
Schema.DescribeSObjectResult a_desc = objects.get(Name_of_of_object_whose_fields_are_to_be_retrieved).getDescribe();
Map<String, Schema.SObjectField> a_fields = a_desc.fields.getMap();
Set<string> x=a_fields.keySet();
//I am making a map of fieldname and bool(field required or not)
Map<String,boolean> result=new Map<String,boolean>();
for(String p:x)
result.put(p,a_fields.get(p).getDescribe().isCreateable() && !a_fields.get(p).getDescribe().isNillable() && !a_fields.get(p).getDescribe().isDefaultedOnCreate());
//what I want is to modify isNillable and other attributes and make these changes to the fields.
答案 0 :(得分:1)
您不能使所有必填字段都不是必需的,因为其中许多字段在数据库级别是必需的,并且无法修改。
例如,始终需要“名称”字段(在具有“名称”字段的任何对象上)。您不能更改此属性。同样,在标准对象和子对象上,始终需要“主从关系”字段。
要更改可修改的自定义字段的元数据,必须使用Metadata API。除非您使用apex-mdapi
之类的包装器,否则它在Apex中不可用。警告:通过Apex以广泛的方式修改组织的元数据很危险。您很容易以这种方式对组织及其功能造成损害。我强烈建议您不要尝试这样做。出于某些原因,必填字段是必需的。