0

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);
        }
    }
}
3

I believe that something like this should work

trigger ActiveOrder on Order (after insert, after update) {
    public class JSONOrderInfo {
        private String ordAccountId;
        private String ordBillingStreet;
        ...

        public JSONOrderInfo(Order newOrder) {
            this.ordAccountId = newOrder.AccountId;
            this.ordBillingStreet = newOrder.BillingStreet;
            ...
        }
    }

    for(Order o : Trigger.New) {
        if(o.Status == 'Activated') {
          String ordInvoiceJSON = JSON.serialize(new JSONOrderInfo(o));
        }
    }
}

It's a similar solution to what's presented in Salesforce's JSON docs here.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.