Apex从触发器提取字段以创建自定义JSON

我为Order Object创建了一个触发器,并且只希望从该对象中提取特定字段以创建自定义JSON数据结构。我尝试将对象所需的字段保存到局部变量中,将它们放入列表中,然后序列化它们,但是输出错误。缺少大括号,并且没有在适当的位置添加逗号。请在下面引用我的代码。

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


        }
    }
}
gao1046811914 回答:Apex从触发器提取字段以创建自定义JSON

您要使用一个值序列化一个列表,该值是一个长字符串,其中包含所有数据。您几乎已经自己序列化了Order。对于您的情况,您应该尝试使用Map来构建您的对象,然后对其进行序列化。例如

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

尝试一下,或者如果您只想让所有字段都包含值和更少的代码,则可以使用方法sObject.getPopulatedFieldsAsMap()。可能像JSON.serialize(o.getPopulatedFieldsAsMap());

希望有帮助

本文链接:https://www.f2er.com/3114182.html

大家都在问