---
title: Class (Edit NetSuite Sales Order)
slug: netsuite/class-edit-netsuite-sales-order
description: Learn how to use the "editNSSalesOrderRunAsync" class in Salesforce to edit NetSuite sales orders. This Apex class includes methods to edit sales orders, generate order information maps, and conduct test cases with the "editNSSalesOrderRunAsyncTest" class
docTags: 
createdAt: 2023-04-14T08:00:32.000Z
---

:::CodeblockTabs
```apex
// Start Apex Class
public with sharing class editNSSalesOrderRunAsync {
    public editNSSalesOrderRunAsync() {
    }

    @InvocableMethod(label='Edit NetSuite Sales Order' description='Edit NetSuite Sales Order')
    public static List<Response> editNetSuiteSalesOrder(List<Requests> requestList){
        List<Response> resToBeReturnedList = new List<Response>();
        List<Object> netSuiteSalesOrderList = new List<Object>();

        for(Requests req : requestList){
            netSuiteSalesOrderList.add(generateNetSuiteSalesOrderMap(req));
        }
        // Sending request to NetSuite via exposed Global API
        Map<String, Object> reqJSONMap = new Map<String, Object>(); 
        reqJSONMap.put('salesOrders' , netSuiteSalesOrderList);
        String reqJSON = JSON.serialize(reqJSONMap); 

        Map<String, Object> finalReqMap = new Map<String, Object>(); 
        finalReqMap.put('version' , '1.0'); 
        finalReqMap.put('action' , 'updateSalesOrder');
        finalReqMap.put('RequestJSON' , reqJSON); 
        System.debug('Request ::: ' + finalReqMap); 

        Map<String, Object> respMap = breadwinner_ns.BreadwinnerNetSuiteAPI.call(finalReqMap);
        System.debug('Response ::: ' + respMap);

        return resToBeReturnedList;
    }

    public class Requests{
        
      @InvocableVariable(label='Internal Id' description='Internal Id')
      public String internalId;
        
      @InvocableVariable(label='Order Status' description='Order Status')
      public String orderStatus;

      //Sales Order Line items
      @InvocableVariable(label='Sales Order Line Items' description='Sales Order Line Items') 
      public List<SObject> soLines;

      @InvocableVariable(label='Line Description' description='Line Description')
      public String lineDescription;
       
      @InvocableVariable(label='Line Number' description='Line Number')
       public String Line;
        
      @InvocableVariable(label='isClosed' description='Is Closed')
       public String isClosed;


  }
    public class Response{
        @InvocableVariable(label='status Code' description='Status of the request')
        public string statusCode;

        @InvocableVariable(label='SF Record Id' description='SF Record Id')
        public Id recordId;

        @InvocableVariable(label='Error' description='Error')
        public String error;
    }

    public static Map<String, Object> generateNetSuiteSalesOrderMap(Requests req){
        Map<String, Object> netSuiteSalesOrderMap = new Map<String, Object>(); 
        // Assign values from the Request to NetSuite Sales Order
       
     If(req.internalId != NULL)
        netSuiteSalesOrderMap.put('internalId',req.internalId);
     
     If(req.orderStatus != NULL)
        netSuiteSalesOrderMap.put('orderStatus',req.orderStatus);

         if(req.soLines != null){
             // Initializing the Sales Order Line Items 
             List<Object> lineItemList = new List<Object>(); 
             for(SObject sobj : req.soLines){ 
                 Map<String, Object> lineItemMap = new  Map<String, Object>();  
               
                 if(req.lineDescription != null)
                     lineItemMap.put('description', sobj.get(req.lineDescription));

                 if(req.Line != null)
                    lineItemMap.put('line',sobj.get(req.Line));
                 
                 if(req.isClosed != null)
                    lineItemMap.put('isClosed',sobj.get(req.isClosed));
               
                 lineItemList.add(lineItemMap);
             }
             // Adding the Line Items to Sales Order 
             Map<String, Object> LineItemObjMap  = new Map<String, Object>(); 
             LineItemObjMap.put('item',lineItemList);
             LineItemObjMap.put('replaceAll',false);
             netSuiteSalesOrderMap.put('itemList',LineItemObjMap);

         }
         return netSuiteSalesOrderMap;
     }
 }
```

Apex Test

```apex
@isTest
public class editNSSalesOrderRunAsyncTest {
    // Start Apex Test Class
    @isTest
    public static void BW_editSalesOrder(){
        List<editNSSalesOrderRunAsync.Requests> requestList = new List<editNSSalesOrderRunAsync.Requests>(); 
        editNSSalesOrderRunAsync.Requests req = new editNSSalesOrderRunAsync.Requests(); 
        List<SObject> soLines = new List<SObject>();
        System.debug(req);
        OpportunityLineItem opp = new OpportunityLineItem();
        opp.Description = 'Qualification';
        opp.UnitPrice = 1;
        opp.Quantity = 1;
        soLines.add(opp);
        req.soLines = soLines;
        req.internalId = '12056';
        req.lineDescription='Description';
        req.orderStatus = '_pending_fulfillment';       
        requestList.add(req); 
        editNSSalesOrderRunAsync.editNetSuiteSalesOrder(requestList);
    }    
}
```
:::

