> For the complete documentation index, see [llms.txt](https://docs-ru.testmace.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs-ru.testmace.com/node-types/link.md).

# Link

## Принцип действия&#x20;

После выбора вызываемого узла, **Link** узел предоставляет возможность переопределить значения его переменных. **Link** узел вызывает исполнение другого узла, передавая ему заданные пользователем переменные. После выполнения, динамические переменные вызванного узла, устанавливаются как динамические переменные родительской группы **Link** узла. Таким образом результат выполнения доступен из любого соседствующего узла **Link**.

#### Из Link узла можно сослаться на:

* [RequestStep](/node-types/requeststep.md) узел
* [Folder](/node-types/folder.md) узел

#### Нельзя сослаться на:

* Другой **Link** узел (в том числе на самого себя)
* На любого предка **Link** узла (т.к. это вызовет при запуске бесконечный цикл)

{% hint style="info" %}
&#x20;Link узел предоставляет возможность переопределить значения переменных узла родителя.
{% endhint %}

{% hint style="warning" %}
При удалении узла, на который ссылается Link узел, ссылка будет считаться потерянной и запуск будет невозможен пока не будет указана корректная ссылка.
{% endhint %}

## Узел родитель

Создайте узел родитель, на который нужно ссылаться, и задайте ему необходимые [статически определяемые переменные](/variables/user-variables/static-variables.md), например `postID`. Значение переменной можно не указывать.

![Создание переменных для узла родителя](/files/-LiMrUP_I2wt8JRAOTIo)

## Узел Link

Создайте **Link** узел и укажите родителя, после этого отобразятся все созданные переменные родителя. В качестве переопределяемого значения можно использовать любые переменные или статическое значение.&#x20;

![Создание Link узла и выбор родителя](/files/-LiMrYUzKPma0ErHXhNj)

## Пример сценария

Рассмотрим пример, в котором, в качестве **Link** узла будем вызывать [RequestStep](/node-types/requeststep.md) узел для удаления записи.

### Создание узла родителя

1. Создайте [RequestStep](/node-types/requeststep.md) узел с именем **deletePost**
2. Тип запроса DELETE
3. В качестве URL используйте[ https://testmace-stage.herokuapp.com/posts/${id}](< https://testmace-stage.herokuapp.com/posts/${id}>)
4. Создайте для этого узла [статически определяемую переменную](/variables/user-variables/static-variables.md) `id` с пустым значением

![](/files/-LiMrbQNUc1uEfXxWXb-)

### Создание сценария

* Создайте [Folder](/node-types/folder.md) узел с именем **scenario**
* Добавьте в scenario[ RequestStep](/node-types/requeststep.md) узел с именем **createPost**:&#x20;
  * тип запроса: POST
  * URL: [https://testmace-stage.herokuapp.com/posts/](< https://testmace-stage.herokuapp.com/posts/${id}>)
  * body запрос JSON `{"title":"will delete with link node"}`
  * Выполняем запрос и присваиваем `id` созданной записи [динамической переменной](/variables/user-variables/dynamic-variables.md) postId для узла **Scenario**.

![](/files/-LiMrcoO2XM6ONc0CZsH)

* Далее создаем **Link** узел с именем **deleteLink**
  * В качества родителя указываем узел **project/deletePost**
  * Для переменной `id` родителя **deletePost** в Link узле указываем Overridden Value `${$dynamicVar.postId}`
* Создадим [RequestStep](/node-types/requeststep.md) узел **checkIfExists** для проверки удаления записи
  * Тип запроса: GET
  * URL: <https://testmace-stage.herokuapp.com/posts/${$dynamicVar.postId}>
  * Ожидаемый ответ сервера 404.

![](/files/-LiMrduTdT4bc9kgalMN)

## Пример проект для импорта [через URL](/other/import/shared.md)

{% file src="/files/-LiMr55F1c6QspuvzbcH" %}

### Файловое представление

**Link** узел представляет из себя папку с названием узла, внутри которой содержится файл index.yml, имеющий следующий формат.

```javascript
{
  "type": "object",
  "properties": {
    "type": {
      "description": "Type of Link node",
      "const": "Link",
      "type": "string"
    },
    "linkedNode": {
      "$ref": "#/definitions/NodeReference",
      "description": "Link to node"
    },
    "children": {
      "description": "List of children names",
      "type": "array",
      "items": {
        "type": "string"
      },
      "default": []
    },
    "variables": {
      "$ref": "#/definitions/NodeVariables",
      "description": "Node variables dictionary"
    },
    "name": {
      "description": "Node name",
      "type": "string"
    }
  },
  "required": [
    "children",
    "linkedNode",
    "name",
    "type",
    "variables"
  ],
  "definitions": {
    "NodeReference": {
      "type": "object",
      "properties": {
        "refNodePath": {
          "description": "Absolute path to node",
          "type": "string"
        },
        "type": {
          "description": "Marker of reference entity",
          "const": "reference",
          "type": "string",
          "default": "reference"
        }
      },
      "required": [
        "refNodePath",
        "type"
      ]
    },
    "NodeVariables": {
      "type": "object",
      "additionalProperties": {
        "type": "string"
      }
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}
```
