# The Components Set JsonC file

A Components Set is a `JsonC` file, which is a Json file that allows <mark style="color:orange;">**C**</mark>omments.

{% hint style="info" %}
If you followed the recommended [Installation and Setup](/boomi-console/installation.md) procedure,\
you will find two example *JsonC* in your Workspace:

<img src="/files/2w4WgbNDzzQgq4Y4TnQD" alt="" data-size="original">
{% endhint %}

A Package consists of three main parts:

{% hint style="warning" %}
***Dependencies*****&#x20;are not supported right now, as of v 4.2.0**
{% endhint %}

1. 1 Header
2. 1..n Components
3. 0..n Dependencies

```json
{
  "header"      : { },
  "components"  : [ ],
  "dependencies": [ ]
}
```

### Header

Not much to say about the `Header`. Just: it is for your information, only. The intention of the header is descriptive and whatever you put there, it is ok!

```json
 "header": { 
   "name": "April 21 - Sprint 03 Updates",
    "descriptionA": [
      "Service Request clone documents",
      "https://<JIRAUrl>/browse/DS-<ticketNo>"
    ],
   "packageVersions": [
      { "date": "2021-04-22", "author": "msc", "changes": [ "Created" ] }
    ]
  }
```

{% hint style="info" %}
Don't use line breaks in any string. Quotes should be on the same line, always!
{% endhint %}

`descriptionA` stands for *Description Array* to support multiple lines in a description. (JSON does not support multi line strings.)

### Components

This is the main section where you refer to the components you want to use in the Package. The component is referenced by its `ComponentId`. Optional, but recommended, is the component's name as the `Hint`, for better readability.

```json
"components": [
  {
    "hint": "Database Basics: Insert into Multiple Tables with Commit Options",
    "id": "6f09acfa-5226-471c-b241-f180bffea9a4"
  },
  {
    "hint": "Database Basics: Simple Insert, Update Examples",
    "id": "d1226373-3719-49bb-9eb3-81d3613c6c2d"
  }
]
```

#### Nested Components in a Package

During run-time AtomShpere Components may require other Components to run properly, like *process routes* or *API Components.*

<figure><img src="/files/D5yXIngDI6VRDhAV7jDV" alt=""><figcaption><p>API Component with required processes</p></figcaption></figure>

If you deploy an API Component, all referenced process must be deployed and versioned separately. This can be a pain, to ensure that all referenced processes are always deployed properly when the API changes.

The good thing is, a Component Package supports nested /child packages that inherit the settings of its parent.

```json
"components": [
{
  // API Component
  "hint": "APIDemo - /ws/rest/Demo",
  "id": "1df76799-7eec-43b9-a9d0-965e3c38ba82",
  
  "components": 
  [    // Children: implementing processes
    {
      "hint": "Test.POST",
      "id": "a02a5a71-b72e-4664-90b6-1cb92a4de5de"
    },
    {
      "hint": "Test 2.GET",
      "id": "a02a5a71-...-1cb92a4de5de"
    },
    { ...  }
  ]
}]
```

#### Component Properties

A component supports multiple properties. A parent component inherits its properties to its children, unless a child overrides it.

```json
"components": [
    { "hint": "ws/rest/Demo",
      "id": "1df76799-7eec-43b9-a9d0-965e3c38ba82",
      
      "getChildren" : "none", "deploy": false
    },
```

<table><thead><tr><th width="167.33333333333331">Property Name</th><th width="102">Value</th><th>Description</th></tr></thead><tbody><tr><td><strong>deploy</strong></td><td>boolean</td><td>If set to <em>true</em> the component (and all its children) will be deployed - recognized by DEPLOY EXEC command. Default: true.</td></tr><tr><td><strong>getChildren</strong></td><td>enum</td><td>see <a href="/pages/rOYytkDG01p9HuCliYFg#children">/children argument</a><br>Default: dependent</td></tr></tbody></table>

Please notice, child components inherit the properties from their parent component, unless they explicitly specify their own property.

```json
{ 
  "hint": "Parent Component",
  
  // The parent component does not specify a component ID
  // and it simply server as a 'control' component to define 
  // properties for all its children.
  
  "deploy": false,        // do not deploy any child component
  "getChildren": "none",  // do not retrieve any from service      
  
  "components":   // Children components
  [
    {
      "hint": "FLOW.ServiceRequest/FetchMO",
      "id": "6f09acfa-5226-471c-b241-f180bffea9a4"
      // inherits parent properties
    },
    {
      "hint": "FLOW.Load Middle Office Users",
      "id": "d1226373-3719-49bb-9eb3-81d3613c6c2d",
      // Override parent settings
      "deploy": true,             // deploy this component
      "getChildren": "dependent", // COMP GET component incl all references
    },
    ...
```

### Dependencies

Dependencies refer to other Packages. Dependencies are useful if you want to use library packages or if you want to create one deployment package at the end of the Sprint, for example, that references multiple other Packages, one from each developer - consolidate work packages.

```json
"dependencies": [
{
  "packageFileName": "lib\ErrorHandler\iPack.jsonc",
  "getAction": "skip",
  "delpoy": false
}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://boomi.markusschmidt.pro/boomi-console/library/packages/a-package-file.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
