Главная

Руководство: Объединение

Объединение

Расширения данного типа предназначены для объединения нескольких расширений с заданными правилами и вызова нескольких скриптов на одну точку расширения. На данный момент объединению доступны расширения типа action.
Метафайл расширения типа union:

{
    "uri": String,
    "type": "union",

    "union": {
        "list": [
            {
                "uri": String,
                "condition": String // Опциональный параметр, по-умолчанию "none". Доступные значения: "none", "prev_success", "prev_failed"
            },
            ...
        ]
    }
}

union - структура содержащая информацию и правила объеденения, на данный момент имеет одно свойство - list
union.list - список, содержащий элементы (union item) объединения, порядок вызова определяется порядком в списке; если по указанному URI расширение отсутствует, то элемент будет проигнорирован
union.list[i] (union item) - элемент, определяющий расширение и условия (condition) вызова
union.list[i].condition - условие вызова, где "none" - без условий, "prev_success" - вызвать, если предыдущее расширение завершилось успешно, "prev_failed" - вызвать, если предыдущее расширение завершилось неуспешно
Предположим, у нас есть три расширения, которые нужно вызвать в определённом порядке при открытии документа. Очевидно, что у всех одинаковый URI (например, stmobile://action/preorder/preopen). Если положить все три расширения в папку расширений МТ, то все они будут вызваны, но порядок их вызова не определён.
Чтобы иметь возможность определять порядок вызова и условия вызова, необходимо:

  1. Назначить расширениям разные URI, чтобы отличать их друг от друга, удобно добавить к URI ещё один ключ, например:

    stmobile://action/preorder/preopen/checkdoc
    stmobile://action/preorder/preopen/addrestcolumn
    stmobile://action/preorder/preopen/updaterest

  2. Создать метафайл для расширения union

{
    "uri": "stmobile://action/preorder/preopen",
    "type": "union",

    "union": {
        "list": [
            { "uri": "stmobile://action/preorder/preopen/checkdoc" },
            { "uri": "stmobile://action/preorder/preopen/addrestcolumn" },
            { "uri": "stmobile://action/preorder/preopen/updaterest" }
        ]
    }
}

Порядок в списке определяет прядок вызова. Если стоит задача управления цепочкой вызова, то можно добавить условия, при которых конкретный action-скрипт будет вызываться

{
    "uri": "stmobile://action/preorder/preopen",
    "type": "union",

    "union": {
        "list": [
            {
                "uri": "stmobile://action/preorder/preopen/checkdoc"
            },
            {
                "uri": "stmobile://action/preorder/preopen/addrestcolumn",
                "condition": "prev_success"
            },
            {
                "uri": "stmobile://action/preorder/preopen/updaterest",
                "condition": "prev_success"
            }
        ]
    }
}

Внимание! Если какое-то из расширений является асинхронным (async), то оно не влияет на условие для нижестоящих расширений.