> ## Documentation Index
> Fetch the complete documentation index at: https://developer.box.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Box Doc Gen Toolkit

export const MultiRelatedLinks = ({sections = []}) => {
  if (!sections || sections.length === 0) {
    return null;
  }
  return <div className="space-y-8">
      {sections.map((section, index) => <RelatedLinks key={index} title={section.title} items={section.items} />)}
    </div>;
};

export const RelatedLinks = ({title, items = []}) => {
  const getBadgeClass = badge => {
    if (!badge) return "badge-default";
    const badgeType = badge.toLowerCase().replace(/\s+/g, "-");
    return `badge-${badge === "ガイド" ? "guide" : badgeType}`;
  };
  if (!items || items.length === 0) {
    return null;
  }
  return <div className="my-8">
      {}
      <h3 className="text-sm font-bold uppercase tracking-wider mb-4">{title}</h3>

      {}
      <div className="flex flex-col gap-3">
        {items.map((item, index) => <a key={index} href={item.href} className="py-2 px-3 rounded related_link hover:bg-[#f2f2f2] dark:hover:bg-[#111827] flex items-center gap-3 group no-underline hover:no-underline border-b-0">
            {}
            <span className={`px-2 py-1 rounded-full text-xs font-semibold uppercase tracking-wide flex-shrink-0 ${getBadgeClass(item.badge)}`}>
              {item.badge}
            </span>

            {}
            <span className="text-base">{item.label}</span>
          </a>)}
      </div>
    </div>;
};

The `DocGenToolkit` class provides a comprehensive interface for Box Document Generation operations within the Salesforce managed package. This class handles document generation requests, template management, and batch processing for creating documents from templates.

## Class signature

```
Global with sharing class DocGenToolkit
```

## Constructor

### `DocGenToolkit()`

Default constructor for creating a new instance of the `DocGenToolkit`.

```
DocGenToolkit toolkit = new DocGenToolkit();
```

## Document generation methods

### `submitDocGenBatch`

Submits a document generation batch request to Box.

| Parameter       | Type            | Description                                                                |
| --------------- | --------------- | -------------------------------------------------------------------------- |
| `docGenRequest` | `DocGenRequest` | The request object containing all necessary parameters for doc generation. |

Returns:

* `DocGenResponse` - The response containing batch information and status.

Example:

```
DocGenToolkit toolkit = new DocGenToolkit();
DocGenRequest request = new DocGenRequest();
request.file.Id = '123456789';
request.destination_Folder.Id = '987654321';
request.output_type = 'pdf';
DocGenResponse response = toolkit.submitDocGenBatch(request);
System.debug('Batch ID: ' + response.id);
```

### `GenerateDocGenForRecords` with template code

Generates documents for multiple records using a template by ID and template code.

| Parameter      | Type           | Description                                         |
| -------------- | -------------- | --------------------------------------------------- |
| `recordIds`    | `List<String>` | List of Salesforce record IDs to generate docs for. |
| `templateId`   | `String`       | The ID of the `DocGen_Template__c` record.          |
| `templateCode` | `String`       | The code identifier for the template.               |

Returns:

* `List<DocGenResponse>` - List of responses for each document generation request.

Example:

```
DocGenToolkit toolkit = new DocGenToolkit();
List<String> recordIds = new List<String>{'001XXXXXXXXXXXXXXX', '001YYYYYYYYYYYYYYY'};
String templateId = 'a0XXXXXXXXXXXXXXX';
String templateCode = 'INVOICE_TEMPLATE';
List<DocGenResponse> responses = toolkit.GenerateDocGenForRecords(recordIds, templateId, templateCode);
for (DocGenResponse response : responses) {
    System.debug('Generated document: ' + response.id);
}
```

### `GenerateDocGenForRecords`

Generates documents for multiple records using a template by ID only.

| Parameter    | Type           | Description                                         |
| ------------ | -------------- | --------------------------------------------------- |
| `recordIds`  | `List<String>` | List of Salesforce record IDs to generate docs for. |
| `templateId` | `String`       | The ID of the `DocGen_Template__c` record.          |

Returns:

* `List<DocGenResponse>` - List of responses for each document generation request.

Example:

```
DocGenToolkit toolkit = new DocGenToolkit();
List<String> recordIds = new List<String>{'001XXXXXXXXXXXXXXX'};
String templateId = 'a0XXXXXXXXXXXXXXX';
List<DocGenResponse> responses = toolkit.GenerateDocGenForRecords(recordIds, templateId);
System.debug('Generated ' + responses.size() + ' documents');
```

### `GenerateDocGenForRecords` with folder override

Generates documents for multiple records with an optional folder override.

| Parameter          | Type           | Description                                                                             |
| ------------------ | -------------- | --------------------------------------------------------------------------------------- |
| `recordIds`        | `List<String>` | List of Salesforce record IDs to generate docs for.                                     |
| `templateId`       | `String`       | The ID of the `DocGen_Template__c` record. Can be `null` if `templateCode` is provided. |
| `templateCode`     | `String`       | The code identifier for the template. Can be `null` if `templateId` is provided.        |
| `folderIdOverride` | `String`       | Optional folder ID to override the default destination folder.                          |

Returns:

* `List<DocGenResponse>` - List of responses for each document generation request.

Example:

```
DocGenToolkit toolkit = new DocGenToolkit();
List<String> recordIds = new List<String>{'001XXXXXXXXXXXXXXX', '001YYYYYYYYYYYYYYY'};
String templateId = 'a0XXXXXXXXXXXXXXX';
String folderOverride = '123456789';
List<DocGenResponse> responses = toolkit.GenerateDocGenForRecords(recordIds, templateId, null, folderOverride);
for (DocGenResponse response : responses) {
    System.debug('Document generated in folder: ' + response.id);
}
```

## Utility methods

### `generateFileName`

Generates a file name by replacing template variables with actual data values.

| Parameter  | Type                  | Description                                                                 |
| ---------- | --------------------- | --------------------------------------------------------------------------- |
| `fileName` | `String`              | The template file name containing variables in `{{field.subfield}}` format. |
| `data`     | `Map<String, Object>` | Map containing the data to substitute into the file name.                   |

Returns:

* `String` - The generated file name with variables replaced.

Template variable format:

* Use `{{Object.Field}}` syntax to reference Salesforce object fields.
* Supports nested object references like `{{Account.Name}}`.

Example:

```
String templateFileName = 'Invoice_{{Account.Name}}_{{Opportunity.StageName}}.pdf';
Map<String, Object> data = new Map<String, Object>{
    'Account' => new Map<String, Object>{'Name' => 'Acme Corp'},
    'Opportunity' => new Map<String, Object>{'StageName' => 'Closed Won'}
};
String generatedFileName = DocGenToolkit.generateFileName(templateFileName, data);
// Result: 'Invoice_Acme Corp_Closed Won.pdf'
```

## Batch management methods

### `getDocGenBatch`

Retrieves information about a document generation batch by its ID.

| Parameter | Type     | Description                               |
| --------- | -------- | ----------------------------------------- |
| `batchId` | `String` | The ID of the batch to retrieve info for. |

Returns:

* `DocGenResponse` - The response containing batch status and details.

Example:

```
DocGenToolkit toolkit = new DocGenToolkit();
String batchId = 'batch_123456789';
DocGenResponse batchInfo = toolkit.getDocGenBatch(batchId);
System.debug('Batch status: ' + batchInfo.status);
System.debug('Total documents: ' + batchInfo.total_count);
```

### `getDocGenBatchByURL`

Retrieves document generation batch information by URL endpoint.

| Parameter  | Type     | Description                                          |
| ---------- | -------- | ---------------------------------------------------- |
| `endpoint` | `String` | The URL endpoint to retrieve batch information from. |

Returns:

* `DocGenResponse` - The response containing batch information.

Example:

```
DocGenToolkit toolkit = new DocGenToolkit();
String endpoint = 'https://api.box.com/2.0/document_generation_batches/batch_123456789';
DocGenResponse batchInfo = toolkit.getDocGenBatchByURL(endpoint);
System.debug('Batch status: ' + batchInfo.status);
```

## Template management methods

### `createTemplate` from file ID

Creates a template from a Box file by its ID.

| Parameter | Type     | Description                            |
| --------- | -------- | -------------------------------------- |
| `fileId`  | `String` | The Box file ID to mark as a template. |

Returns:

* `DocGenTemplateResponse` - The response containing template information.

Example:

```
DocGenToolkit toolkit = new DocGenToolkit();
String fileId = '123456789';
DocGenTemplateResponse templateResponse = toolkit.createTemplate(fileId);
System.debug('Template created with ID: ' + templateResponse.id);
```

### `createTemplate` from request object

Creates a template from a Box file using a custom template request.

| Parameter         | Type                    | Description                                           |
| ----------------- | ----------------------- | ----------------------------------------------------- |
| `templateRequest` | `DocGenTemplateRequest` | The request object containing template configuration. |

Returns:

* `DocGenTemplateResponse` - The response containing template information.

Example:

```
DocGenToolkit toolkit = new DocGenToolkit();
DocGenTemplateRequest request = new DocGenTemplateRequest('123456789');
request.name = 'Invoice Template';
request.description = 'Template for generating invoices';
DocGenTemplateResponse response = toolkit.createTemplate(request);
System.debug('Template created: ' + response.id);
```

### `deleteTemplate`

Deletes a template from Box by its file ID.

| Parameter | Type     | Description                                |
| --------- | -------- | ------------------------------------------ |
| `fileId`  | `String` | The Box file ID of the template to delete. |

Returns:

* `DocGenTemplateResponse` - The response confirming the deletion.

Example:

```
DocGenToolkit toolkit = new DocGenToolkit();
String fileId = '123456789';
DocGenTemplateResponse response = toolkit.deleteTemplate(fileId);
System.debug('Template deleted successfully');
```

### `getJobsForTemplate`

Retrieves all jobs associated with a template record.

| Parameter          | Type | Description                                           |
| ------------------ | ---- | ----------------------------------------------------- |
| `templateRecordId` | `Id` | The Salesforce ID of the `DocGen_Template__c` record. |

Returns:

* `DocGenResponse` - The response containing job information for the template.

Example:

```
DocGenToolkit toolkit = new DocGenToolkit();
Id templateRecordId = 'a0XXXXXXXXXXXXXXX';
DocGenResponse jobsResponse = toolkit.getJobsForTemplate(templateRecordId);
System.debug('Found ' + jobsResponse.total_count + ' jobs for template');
```

## Tag management methods

### `getTags`

Retrieves available tags for a template by its ID.

| Parameter    | Type     | Description                          |
| ------------ | -------- | ------------------------------------ |
| `templateId` | `String` | The Box template ID to get tags for. |

Returns:

* `DocGenTagsResponse` - The response containing available tags.

Example:

```
DocGenToolkit toolkit = new DocGenToolkit();
String templateId = 'template_123456789';
DocGenTagsResponse tagsResponse = toolkit.getTags(templateId);
System.debug('Available tags: ' + tagsResponse.tags);
```

### `getTagsByURL`

Retrieves available tags for a template by URL endpoint.

| Parameter  | Type     | Description                             |
| ---------- | -------- | --------------------------------------- |
| `endpoint` | `String` | The URL endpoint to retrieve tags from. |

Returns:

* `DocGenTagsResponse` - The response containing available tags.

Example:

```
DocGenToolkit toolkit = new DocGenToolkit();
String endpoint = 'https://api.box.com/2.0/document_generation_templates/template_123456789/tags';
DocGenTagsResponse tagsResponse = toolkit.getTagsByURL(endpoint);
System.debug('Available tags: ' + tagsResponse.tags);
```

## Common usage patterns

### Basic document generation

```
// Initialize the toolkit
DocGenToolkit toolkit = new DocGenToolkit();

// Generate documents for multiple records
List<String> recordIds = new List<String>{'001XXXXXXXXXXXXXXX', '001YYYYYYYYYYYYYYY'};
String templateId = 'a0XXXXXXXXXXXXXXX';
List<DocGenResponse> responses = toolkit.GenerateDocGenForRecords(recordIds, templateId);

// Process the responses
for (DocGenResponse response : responses) {
    if (response.status == 'success') {
        System.debug('Document generated successfully: ' + response.id);
    } else {
        System.debug('Document generation failed: ' + response.error);
    }
}
```

### Template creation and management

```
DocGenToolkit toolkit = new DocGenToolkit();

// Create a template
String fileId = '123456789';
DocGenTemplateResponse templateResponse = toolkit.createTemplate(fileId);

// Get jobs for the template
Id templateRecordId = 'a0XXXXXXXXXXXXXXX';
DocGenResponse jobsResponse = toolkit.getJobsForTemplate(templateRecordId);

// Delete the template when no longer needed
DocGenTemplateResponse deleteResponse = toolkit.deleteTemplate(fileId);
```

### Batch monitoring

```
DocGenToolkit toolkit = new DocGenToolkit();

// Submit a batch
DocGenRequest request = new DocGenRequest();
// ... configure request ...
DocGenResponse response = toolkit.submitDocGenBatch(request);

// Monitor the batch
String batchId = response.id;
DocGenResponse batchInfo = toolkit.getDocGenBatch(batchId);

// Check status
if (batchInfo.status == 'completed') {
    System.debug('Batch completed successfully');
} else if (batchInfo.status == 'failed') {
    System.debug('Batch failed: ' + batchInfo.error);
}
```

## Error handling

When using the `DocGenToolkit`, handle potential errors as shown below:

```
try {
    DocGenToolkit toolkit = new DocGenToolkit();
    List<DocGenResponse> responses = toolkit.GenerateDocGenForRecords(recordIds, templateId);
    for (DocGenResponse response : responses) {
        if (response.error != null) {
            System.debug('Error: ' + response.error);
        }
    }
} catch (Exception e) {
    System.debug('Exception occurred: ' + e.getMessage());
}
```

## Related classes

* `DocGenRequest` - Request object for document generation.
* `DocGenResponse` - Response object containing batch information.
* `DocGenTemplateRequest` - Request object for template creation.
* `DocGenTemplateResponse` - Response object for template operations.
* `DocGenTagsResponse` - Response object for tag operations.
* `DocGen_Template__c` - Custom object for storing template metadata.
