Переопределение действия/пути (Начиная с версии 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;
}