简体   繁体   中英

Apex extracting fields from a trigger to create a custom JSON

I have created a trigger for Order Object and only want specific fields to be pulled from that object to create a custom JSON data structure. I have tried saving the fields that I need from the object into local variables, placing them into a list and then serializing them but the output is wrong. The curly brackets are missing and commas are not being added in the proper locations. Please reference my code below.

trigger ActiveOrder on Order (after insert, after update) 
{


    private String ordAccountId;
    private String ordBillingStreet;
    private String ordBillingCity;
    private String ordBillingState;
    private String ordBillingPostalCode;
    private String ordBillingCountry;
    private String ordDescription;
    private Double ordTotalAmount;
    private String ordOrderNumber;
    private String ordShipToContact;
    private String ordShipToMethod;
    private String ordShippingStreet;
    private String ordShippingCity;
    private String ordShippingState;
    private String ordShippingPostalCode;
    private String ordShippingCountry;
    private String ordBillToAttn;
    private String ordCustomerPO;
    private String ordShipToAttn;


    for(Order o : Trigger.New)
    {

        If(o.Status == 'Activated')
        {

            ordAccountId = o.AccountId;
            ordBillingStreet = o.BillingStreet;
            ordBillingCity = o.BillingCity;
            ordBillingState = o.BillingState;
            ordBillingPostalCode = o.BillingPostalCode;
            ordBillingCountry = o.BillingCountry;
            ordDescription = o.Description;
            ordTotalAmount = o.TotalAmount;
            ordOrderNumber = o.OrderNumber;
            ordShipToContact = o.Ship_To_Name__c;
            ordShippingStreet = o.ShippingStreet;
            ordShippingCity = o.ShippingCity;
            ordShippingState = o.ShippingState;
            ordShippingPostalCode = o.ShippingPostalCode;
            ordShippingCountry = o.ShippingCountry;
            ordBillToAttn = o.BillToAttn__c;
            ordCustomerPO = o.Customer_PO__c;
            ordShipToAttn = o.Ship_to_Attention__c;


            List<String> ordInvoice = new List<String>();


            ordInvoice.add('Account Id: ' + ordAccountId + ', ' 
                           + 'Billing Street: ' + ordBillingStreet + ', ' 
                           + 'Billing City: ' + ordBillingCity + ', ' 
                           + 'Billing State: ' + ordBillingState + ', ' 
                           + 'Billing Postal Code: ' + ordBillingPostalCode + ', ' 
                           + 'Billing Country: ' + ordBillingCountry + ', ' 
                           + 'Description: ' + ordDescription + ', ' 
                           + 'Total Amount: ' + ordTotalAmount + ', ' 
                           + 'Order Number: ' + ordOrderNumber + ', ' 
                           + 'Ship To Contact: ' + ordShipToContact + ', ' 
                           + 'Shippin Street: ' + ordShippingStreet + ', ' 
                           + 'Shipping City: ' + ordShippingCity + ', ' 
                           + 'Shipping State: ' + ordShippingState + ', ' 
                           + 'Shipping Postal Code: ' + ordShippingPostalCode + ', ' 
                           + 'Shipping Country: ' + ordShippingCountry + ', ' 
                           + 'Bill To Attn: ' + ordBillToAttn + ', ' 
                           + 'Customer PO: ' + ordCustomerPO + ', ' 
                           + 'Ship To Attn: ' + ordShipToAttn);

            System.debug('Pre JSON: ' + ordInvoice);


            String ordInvoiceJSON = JSON.serialize(ordInvoice);

            System.debug('Post JSON: ' + ordInvoice);
            System.debug('Post JSON: ' + ordInvoicePostJSON);


        }
    }
}

You are Serializing a List with one value, which is a long String with all you're data in it You've almost serialized the Order yourself. In your case, you should try using a Map to build your object and then serialize that. for example

Map<String,String> orderMap = new Map<String,String>();

orderMap.put('Account Id', o.accountId);
orderMap.put('Billing Street',o.billingStreet);
//...etc
String jsonStr = JSON.serialize(orderMap);
System.debug(jsonStr);

Give that a try or if you just want all fields with values and a lot less code you could use the method sObject.getPopulatedFieldsAsMap() . which could be as simple as JSON.serialize(o.getPopulatedFieldsAsMap());

Hope that helps

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM