Переопределение действия/пути (Начиная с версии 4.4.2)
stmobile://action/uri/preopen Событие перед открытием любого URIНовая точка расширения вызывается по дефолту при открытии любого расширения. Она необходима, чтобы реализовать переопределение действий (фактически редирект на другой uri), например, при открытии операций в ТТ. На входе в точку расширения передается параметр uri (api.context.uri), например "stmobile://document/merchandise/create?outletId=0". На выходе точка расширения через api.result отдает новое URI, где могут быть заменены как Тип документа, так и значение какого-либо из переданных параметров.
В файле manifest в раздел launch добавлен параметр uriMask, который регулирует, какие расширения могут модифицироваться через stmobile://action/uri/preopen. Маска задается в стандартном виде для путей точек расширений: stmobile://// - где это любой раздел. Пример: stmobile://document// или stmobile://document/order/*
Tочка расширения для редактирования путей uri визуальных расширений:
- @param uri {String} - путь uri, доступный для редактирования.
- @result {Result} - data - ["resultUri"] - отредактированный путь uri.
- @note Если точка расширения Uri_PreOpen возвращает в качестве resultUri пустую строку, то исходный путь, переданный в uri, не будет изменен.
- @note Если в манифесте точки расширения Uri_PreOpen указать маску uriMask, то точка расширения Uri_PreOpen вызовется только для расширений, соответствующих указанной маске.
Пример manifest-а:
{
"uri": "stmobile://action/uri/preopen",
"type": "action",
"datascript": {
"script_file": "test.js"
},
"launch": {
"uriMask": "stmobile://document/*/*"
}
}Пример скрипта:
function doAction () {
var uriToChange = api.context.uri; // входная строка
var matchUriPart = "stmobile://document/order"; // что заменяем
var newUriPart = "stmobile://document/merchandise"; // чем заменяем
var newUri = changeUriString(uriToChange, matchUriPart, newUriPart); // итоговая строка
if (newUri) {
api.result.setData("resultUri", newUri);
}
};
function changeUriString (sourceString, matchString, newString) {
var match = sourceString.match(matchString);
if (!match) {
return sourceString;
}
var matchLen = match[0].length;
if (matchLen) {
var tempString = sourceString.slice(matchLen);
return newString + tempString;
}
return sourceString;
}