During my work on this question, I'm trying to retrieve a ListView using this code:
public class SFSEMetadataListView {
public static void readListView() {
MetadataService.MetadataPort service = createService();
MetadataService.ListView listView = (MetadataService.ListView) service.readMetadata(
'ListView', new String[] { 'Lead.MyListView' }
).getRecords()[0];
System.Debug(JSON.serializePretty(listView));
if(listView.columns!=null)
for(String column : listView.columns)
System.Debug('Column ' + column)
;
if(listView.filters!=null)
for(MetadataService.ListViewFilter filter : listView.filters)
System.Debug('Filter ' + filter.field + ' ' + filter.operation + ' ' + filter.value)
;
}
public static MetadataService.MetadataPort createService() {
MetadataService.MetadataPort service = new MetadataService.MetadataPort();
service.SessionHeader = new MetadataService.SessionHeader_element();
service.SessionHeader.sessionId = UserInfo.getSessionId();
return service;
}
}
1) Restricted Visibility
Why ListViews saved "Visible only to me" don't get retrieved and those saved "Visible for all users" actually do get retrieved? How to get "Restricted" ListViews, too?
2) Duplicate result properties
Now in case of "Visible for all users" there is a usable result, however the output of System.Debug(JSON.serializePretty(listView))
is puzzling:
17:38:29.538 (538524558)|USER_DEBUG|[221]|WARN|{
"fullName" : null,
"field_order_type_info" : [ "fullName" ],
"type_att_info" : [ "xsi:type" ],
"type" : "ListView",
"sharedTo" : null,
"queue" : null,
"language" : null,
"label" : "MyListView",
"fullName" : "Lead.MyListView",
"filterScope" : "Everything",
"filters" : [ {
"value" : "a",
"operation" : "contains",
"field_order_type_info" : [ "field", "operation", "value" ],
"field" : "FULL_NAME",
} ],
"field_order_type_info" : [ "fullName", "booleanFilter", "columns", "division", "filterScope", "filters", "label", "language", "queue", "sharedTo" ],
"division" : null,
"columns" : [ "FULL_NAME", "LEAD.COMPANY", "LEAD.STATE", "LEAD.EMAIL", "LEAD.STATUS", "LEAD.CREATED_DATE", "CORE.USERS.ALIAS", "LEAD.UNREAD" ],
"booleanFilter" : null,
}
The member fullName
and field_order_type_info
seem to appear twice and I can't explain how this is possible. However listView.fullName
outputs 'Lead.MyListView' as expected. Any ideas?