Saturday, 8 September 2012

How to generate a Listed JSON from multiple Salesforce Objects(say account and contact) and send data in JSON format to mobile client without nesting Using REST API

Sometimes there is a request for listed JSON .Say we have two objects Accounts and Contacts and we have requirement not to nest the response instead send as a collection with key for list of Accounts as Account and key for Contact as Contact.

Below is the JSON format thats expected output,

{
    "Accounts": [
        {
            "attributes": {
                "type": "Account",
                "url": "/services/data/v25.0/sobjects/Account/001W0000006XDG9IAO"
            },
            "CreatedDate": "2012-08-09T08:29:43.000+0000",
            "LastModifiedDate": "2012-08-09T15:24:42.000+0000",
            "IsDeleted": true,
            "Id": "001W0000006XDG9IAO"
        },
        {
            "attributes": {
                "type": "Account",
                "url": "/services/data/v25.0/sobjects/Account/001W0000006XGEuIAO"
            },
            "CreatedDate": "2012-08-09T15:44:29.000+0000",
            "LastModifiedDate": "2012-08-09T15:50:31.000+0000",
            "IsDeleted": false,
            "Id": "001W0000006XGEuIAO"
        },
        {
            "attributes": {
                "type": "Account",
                "url": "/services/data/v25.0/sobjects/Account/001W0000006QtKyIAK"
            },
            "Phone": "12131",
            "CreatedDate": "2012-08-02T14:46:48.000+0000",
            "LastModifiedDate": "2012-08-09T15:43:20.000+0000",
            "IsDeleted": true,
            "Id": "001W0000006QtKyIAK"
        },
        {
            "attributes": {
                "type": "Account",
                "url": "/services/data/v25.0/sobjects/Account/001W0000006XGI4IAO"
            },
            "CreatedDate": "2012-08-09T15:50:07.000+0000",
            "LastModifiedDate": "2012-08-14T11:33:05.000+0000",
            "FirstName": "Test",
            "IsDeleted": false,
            "Id": "001W0000006XGI4IAO",
            "LastName": "Thomas"
        },
        {
            "attributes": {
                "type": "Account",
                "url": "/services/data/v25.0/sobjects/Account/001W0000006XGIDIA4"
            },
            "CreatedDate": "2012-08-09T15:44:55.000+0000",
            "LastModifiedDate": "2012-08-14T10:15:39.000+0000",
            "FirstName": "shgdshg",
            "IsDeleted": false,
            "Id": "001W0000006XGIDIA4",
            "LastName": "Hello"
        },
        {
            "attributes": {
                "type": "Account",
                "url": "/services/data/v25.0/sobjects/Account/001W0000006XGhwIAG"
            },
            "CreatedDate": "2012-08-09T16:08:14.000+0000",
            "LastModifiedDate": "2012-08-09T16:08:19.000+0000",
            "FirstName": "deleted",
            "IsDeleted": true,
            "Id": "001W0000006XGhwIAG",
            "LastName": "check"
        },

"Contacts": [
        {
            "attributes": {
                "type": "Contact",
                "url": "/services/data/v25.0/sobjects/Contact/003W0000007mNoqIAE"
            },
            "AccountId": "001W0000006XGI4IAO",
            "HCP__c": "001W0000006XGIDIA4",
            "FirstName": "Test",
            "IsDeleted": false,
            "Id": "003W0000007mNoqIAE",
            "LastName": "Thomas"
        },
        {
            "attributes": {
                "type": "Contact",
                "url": "/services/data/v25.0/sobjects/Contact/003W0000007mNp1IAE"
            },
            "AccountId": "001W0000006XGIDIA4",
            "HCP__c": "001W0000006XGEuIAO",
            "FirstName": "shgdshg",
            "IsDeleted": false,
            "Id": "003W0000007mNp1IAE",
            "LastName": "Hello"
        },
        {
            "attributes": {
                "type": "Contact",
                "url": "/services/data/v25.0/sobjects/Contact/003W0000007mNpGIAU"
            },
            "Phone": "3213",
            "AccountId": "001W0000006XGEuIAO",
            "HCP__c": "001W0000006XGIDIA4",
            "IsDeleted": false,
            "Id": "003W0000007mNpGIAU",
            "LastName": "ueiru"
        },
        {
            "attributes": {
                "type": "Contact",
                "url": "/services/data/v25.0/sobjects/Contact/003W0000007wAkwIAE"
            },
            "Phone": "206-999-1111",
            "AccountId": "001W0000006XJ3fIAG",
            "Email": "mwells@ubermind.com",
            "HCP__c": "001W0000006XGIDIA4",
            "FirstName": "Mark",
            "IsDeleted": false,
            "Id": "003W0000007wAkwIAE",
            "LastName": "Wells"
        }
]}

For this we will have to use customized wrapping ,

Following is the source code that will automatically handle the generation of JSON in the expected format,

global class SFA_AccountContactListedResponse{
 //Wrapper class to warp the various  List as Super wrapper
 global class supersobjectWrapper{
List Accounts=new List();//A list to hold the Accounts
List Contacts=new List();//A list to hold the Contacts  
}
//This method will be called as the http get request
public static supersobjectWrapper makeResponseString(){  
List  lstacc=new List();
List lstcontacts=new List();
lstacc=[Select Id,CreatedDate,LastModifiedDate,Isdeleted from Acccount ];
lstcontacts=[Select id,CreatedDate,LastModifiedDate,Isdeleted from Contact];
supersobjectWrapper superWrap=new supersobjectWrapper();//Instantiating thesuperclass
superWrap.Contacts= lstcontacts ;
superWrap.Accounts= lstacc;
return superWrap;
 }
}

The above class will be called as REST API using GET HTTP call,

@RestResource(urlMapping='/GetAcc/*')
global with sharing class SFA_ListedJsonGenerator{ 
@HttpGet
global static SFA_AccountGroupSyncManagerRevised.supersobjectWrapper returnJsonpacket(){ 
RestRequest req = RestContext.request;
SFA_AccountGroupSyncManagerRevised.supersobjectWrapper result;  
result=SFA_AccountContactListedResponse.supersobjectWrapper;
return result;
    }
}

4 comments:

  1. Hi ,

    I had an query with json response tags, in the above example , though we have queried only for
    lstacc=[Select Id,CreatedDate,LastModifiedDate,Isdeleted from Acccount ];

    we get extra tags in the output
    {
    "attributes": {
    "type": "Account",
    "url": "/services/data/v25.0/sobjects/Account/001W0000006XDG9IAO"
    },
    "CreatedDate": "2012-08-09T08:29:43.000+0000",
    "LastModifiedDate": "2012-08-09T15:24:42.000+0000",
    "IsDeleted": true,
    "Id": "001W0000006XDG9IAO"
    }

    is there any way not to print , type and url attribute in response , and return only for the queried fields in output ?


    ReplyDelete
    Replies
    1. Big data is a term that describes the large volume of data – both structured and unstructured – that inundates a business on a day-to-day basis. big data projects for students But it’s not the amount of data that’s important.Project Center in Chennai

      Spring Framework has already made serious inroads as an integrated technology stack for building user-facing applications. Corporate TRaining Spring Framework the authors explore the idea of using Java in Big Data platforms.

      Spring Training in Chennai

      The new Angular TRaining will lay the foundation you need to specialise in Single Page Application developer. Angular Training

      Delete
  2. Hello! Hope you are having a good day. Your site has really good posts. This post gives truly quality information. I’m definitely going to look into it. Really very useful tips are provided here. Thank you so much. Keep up the good work. We can also be helpful in developing your site, as our site provides the best web development tools. Here is the link jsononline

    ReplyDelete
  3. This article gives the light in which we can observe the reality. This is very nice one and gives indepth information. Thanks for this nice article. دمج ملفات pdf

    ReplyDelete

Introducing Lightning Base Components

Lightning Base Components are great addition to the platform and in fact revolutionary .One of the concerns around lightning component ...