# invokeBatchSerially Method

Performs multiple batch operations (one after another) on a set of records.

It executes a number of Integration Procedures-based batch jobs in succession. It also supports the pre and post-processing steps on every batch.

For example, you could use it for various group-level (Quote/Order Group) actions to perform different sequential batch jobs on a set of quotes and orders.

1. Validate and Price:

   - Validation

   - Pricing (gets fired once the validation batch-job is finished)

2. Create and Submit Order:

   - Create Order (Quote checkout with price:false)

   - Price Sub-Orders

   - Submit Order (checkout the orders created in the initial batch)

For other uses, see [invokeBatchSerially Method](/docs/industries/cme/guide/comms-t-invokebatchserially-method.md).

## Class

## Input Parameters

`batchInput` expects the list of objects as input. Every individual object represents a single batch job to execute.

| Parameter                   | Required | Description                                                                                                                                                            |
| --------------------------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| batchOperationTypeindicates | Required | The name of the batch process.                                                                                                                                         |
| batchSize                   | Required | Batch-size configuration for the batch job to run.                                                                                                                     |
| className                   | Required | The corresponding Apex class to invoke for the batch job. This class should extend MSInvokeVIPInBatch and can override start, execute, and finish methods if required. |
| classParams                 | Required | The Integration Procedures to execute at different stages of the batch job. <ul>                                                                                       |

```
 <li>`vipName` listed in `startVIP` is executed at the start of the batch.</li>

 <li>`executeVIP` is called as part of the execution process.</li>

 <li>`finishVIP` runs during the finish process of the batch.</li>

 <li>Additional VIP-level inputs can be provided in `vipParams`.</li>
```

  </ul> Also, `classParams` can contain an additional set of class-level inputs.|

## Output Parameters

| Parameter    | Description                                    |
| ------------ | ---------------------------------------------- |
| isJobStarted | True — The batch job has started successfully. |

## Example Input Data

```

"batchInput": [
  {
    "batchOperationType": "Validate",
    "batchSize": 1,
    "className": "vlocity_cmt.MSInvokeCartValidationBatch",
    "classParams": {
      "startVIP": {
        "vipName": "",
        "vipParams": {}
      },
      "executeVIP": {
        "vipName": "MultiService_RunCartValidation",
        "vipParams": {}
      },
      "finishVIP": {
        "vipName": "MultiService_FinishCartValidation",
        "vipParams": {}
      }
    }
  },
  {
    "batchOperationType": "Price",
    "batchSize": 1,
    "className": "vlocity_cmt.MSInvokeCartPricingBatch",
    "classParams": {
      "startVIP": {
        "vipName": "",
        "vipParams": {}
      },
      "executeVIP": {
        "vipName": "MultiService_RunCartPricing",
        "vipParams": {}
      },
      "finishVIP": {
        "vipName": "MultiService_FinishCartPricing",
        "vipParams": {}
      }
    }
  }
]

```

## Example Output Data

```

{
  "isJobStarted": "false",
  "error": "OK",
  "errorLabel" : "Batch Job Failed to Start",
  "message": "Batch job cannot be started as salesforce limit exceeded. Please contact administrator."
}

```

## Process Different Records

This remote action can also support the scenario where the next batch is expected to process a different set of records than the previous one.

For example, in the Create and Submit Order batch, the finish stage of Create-Order and the whole Price and Submit-Order batches should process the new orders created by the previous batch. This is possible by splitting the finish of the Create-Order process into three steps:

1. Run `beforeCtxSwitchFinishVIP`.

2. Perform context switch.

3. Run `afterCtxSwitchFinishVIP`.

The corresponding batch-object of the input is shown in the following example.

```nolang
 {
  "batchOperationType": "CreateOrder",
  "batchSize": 1,
  "className": "vlocity_cmt.MSInvokeCreateOrderBatch",
  "classParams": {
    "startVIP": {
      "vipName": "MultiService_StartCheckoutQuote",
      "vipParams": {}
    },
    "executeVIP": {
      "vipName": "MultiService_CheckoutQuote",
      "vipParams": {}
    },
    "beforeCtxSwitchFinishVIP": {
      "vipName": "",
      "vipParams": {}
    },
    "afterCtxSwitchFinishVIP": {
      "vipName": "MultiService_FinishCheckoutQuote",
      "vipParams": {}
    }
  }
}
```
