I am using datatable plugin in a visualfroce page. Below warning popsup only at the time of page loading and table looks good after closing the alert.
Here is the code...
VisualForce Page
$('#mgtable').dataTable({
sPaginationType: "full_numbers", "bJQueryUI" : true,"sDom": '<"H"lfr>t<"F"ip>',
"aoColumnDefs": [
{ "aTargets":[ "mgName" ], "mData": "Name",sClass:"Name", "bAutoWidth": false },
{ "aTargets":[ "gcb" ], "mData": "CreatedBy.Name", sClass:"CBName", "bAutoWidth": false },
{ "aTargets":[ "desc" ], "mData": "Client_Group_Description__c", sClass:"CGDesc", "bAutoWidth": true }
],
"fnInitComplete": function(oSettings) {
MasterDetailListController1.refreshMasterGroupList(function(result, event){
if(event.type == 'exception') {
alert(event.message);
} else {
$('#mgtable').dataTable().fnAddData(result);
}
});
}
});
<table id="mgtable" class="display">
<thead>
<th class="mgName">Master Group Name</th>
<th class="gcb">Group Created By</th>
<th class="desc">Description</th>
</thead>
<tbody></tbody>
</table>
Apex Controller
public with sharing class DataTableController {
@RemoteAction
public static list<Client_Group__c> refreshMasterGroupList() {
return [select id,Name,CreatedBy.Name,Client_Group_Description__c from Client__c order by Name];
}
Attribution to: vraavi
Possible Suggestion/Solution #1
Sounds like your JSON data does not include the Client_Group_Description__c
field (in all cases).
- Does your user have permission to see this field?
- Can you confirm that the field is in your @RemoteAction response payload on all records returned in the list?
Update: per Josh Kaplan, Salesforce changed the behavior prior to Spring '13 of the JSON serializer to omit fields (properties) which have null values in them, but apparently this change in behavior was reverted back to including the properties which had null values in Spring '13.
If this is indeed still the case, the first option I can think of off the top of my head would be to return your own type rather than returning the sObject type, using an inner class on your controller.
public with sharing class DataTableController {
public class ClientGroup {
public string Id { get; set; }
public string Name { get; set; }
public string CreatedByName { get; set; }
public string ClientGroupDescription { get; set; }
public ClientGroup(Client__c client) {
this.Id = client.Id;
this.Name = client.Name;
this.CreatedByName = client.CreatedBy.Name;
this.ClientGroupDescription = client.Client_Group_Description__c;
// in the event that this still serializes null values and omits the property
// it can be coded like this:
//
// if (client.Client_Group_Description__c == null) {
// this.ClientGroupDescription = '';
// } else {
// this.ClientGroupDescription = client.Client_Group_Description__c;
// }
//
}
}
@RemoteAction
public static List<ClientGroup> refreshMasterGroupList() {
List<ClientGroup> clientGroups = new List<ClientGroup>();
for (Client__c client : [SELECT Id
, Name
, CreatedBy.Name
, Client_Group_Description__c
FROM Client__c
ORDER BY Name]) {
// convert to our inner class type
clientGroups.add(new ClientGroup(client));
}
return clientGroups;
}
}
Attribution to: Mark Pond
Possible Suggestion/Solution #2
Another way to deal with this is at the client side where if a field that DataTable requires is missing you add it back in as a null:
} else {
for (var i = 0; i < result.length; i++) {
if (result[i].Client_Group_Description__c == undefined) {
result[i].Client_Group_Description__c = null;
}
}
$('#mgtable').dataTable().fnAddData(result);
}
Attribution to: Keith C
This content is remixed from stackoverflow or stackexchange. Please visit https://salesforce.stackexchange.com/questions/33131