# 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#"
}
```


---

# 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://docs-ru.testmace.com/node-types/link.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.
