Контекст выполнения - это набор данных, отражающий текущий статус и состояние, а также содержащий данные текущего объекта. Доступ к контексту осуществляется посредством свойств объекта api.context доступного только для чтения. Контекст делится на три типа:
- Глобальный контекст
- Расширенный контекст
- Пользовательский контекст
Глобальный контекст
Под глобальным контекстом подразумевают данные, определенные в каждой точке расширения. Однако, само значение соответствующих полей может различаться в зависимости от используемого URI. Например, свойство идентификатора торговой точки хранит значение в отчетах торговой точки, но содержит "0" в расширениях на маршруте, и т.д.
- currencySymbol [String] - Символ валюты
- distributorCoId [ID] - Идентификатор дистрибьютора Центрального офиса
- distributorId [ID] - Идентификатор дистрибьютора
- docId [ID] - Идентификатор документа
- docIdList [IDList] - Список идентификаторов документов
- docRowItemCode [String] - Код элемента строки документа
- employeeId [ID] - Идентификатор сотрудника
- idQuestion [ID] - Идентификатор вопроса опросного листа
- idTemplate [ID] - Идентификатор шаблона опросного листа
- isContinueScriptMode [Boolean] - Признак продолжения завершенного ранее события
- isPrint [Boolean] - Признак печати документа
- isSilentScriptMode [Boolean] - Признак автоматического срабатывания выполнения скрипта
- metaConfig [Object] - Конфигурация из манифеста
// Манифест:
{
"uri": "stmobile://report/routereports/test",
"type": "report",
"title": "qsTr(Test)",
"datascript": {
"script_file": "test.js"
},
"template": {
"template_file": "test.html"
},
"config": {
"testNumber": 12345,
"testString": "Hello, World!",
"testObject": {
"field1": "some text",
"field2": 42
}
},
"group": {
"group_title": "Test"
}
}
// Data-скрипт
mapper.greetings = api.context.metaConfig.testString;
mapper.text = api.context.metaConfig.testObject.field1;
mapper.sumOfNumbers = api.context.metaConfig.testNumber + api.context.metaConfig.testObject.field2;
- outletId [ID] - Идентификатор торговой точки
- planVisitId [ID] - Идентификатор запланированного визита
- positionId [ID] - Идентификатор позиции
- promoParams [PromoParams] - Параметры акции
- routeId [ID] - Идентификатор маршрута
- rowItemId [ID] - Идентификатор строки документа
- rowItemIdList [IDList] - Список идентификаторов строк документа
- skuId [ID] - Идентификатор товара
- storeId [ID] - Идентификатор склада
- taskId [ID] - Идентификатор задачи
- visitId [ID] - Идентификатор визита
- Предупреждения
- Данные визита из контекста могут быть не актуальны - рекомендуется использовать api.visits.currentVisit().factId
Расширенный контекст
Расширенный контекст - это дополнительные данные, предоставляемые обычно в специальных точках расширения для получения полных данных, недоступных по умолчанию в глобальном контексте.
stmobile://action/recomendedorder
stmobile://action/recomendedskurequest
- idTenantOutlet [ID] - Идентификатор торговой точки Центрального офиса
stmobile://action/*/skumerchcalculation
- lastIdDoc [ID] - Идентификатор последнего сохраненного документа Мерчандайзинг
stmobile://action/<Документ>/itemchange
- DocRowItemValue [*] - Новое введенное значение
stmobile://action/<Документ>/postgroupdiscount
- discountValue [Number] - Значение скидки
stmobile://action/<Документ>/postclose
stmobile://action/<Документ>/preclose
- isDraft [Boolean] - Признак того, что документ является черновиком
stmobile://action/<Документ>/pregroupincrease
- incraseValue [Number] - Значение наценки
stmobile://action/exchange/begin
stmobile://action/exchange/end
- exchange_result [Result] - Результат обмена
stmobile://action/exchange/postsave
- exchange_type [ExchangeType] - Тип обмена
stmobile://action/exchange/postsave
- tables [Table[] ] - Таблицы, участвовавшие в обмене
stmobile://action/survey/itempostsave
stmobile://action/survey/itempresave
- newValue [*] - Новое введенное значение
- templateRowId [ID] - Идентификатор строки шаблона опросного листа
stmobile://action/survey/itempresave
- oldValue [*] - Предыдущее значение (при наличии)
stmobile://action/survey/preopen
stmobile://action/visit/preopen
- date [String] - Актуальная дата
stmobile://action/smcamera/*
- smvisit [SmVisit] - Информация о визите для sm
stmobile://action/workflow/filter
- workflow [Step[]] - Список шагов сценария
- date [String] - Актуальная дата
stmobile://document/posm/snedit
- needDeleteRow [Boolean] - Признак удаления записи
- posmId [ID] - Идентификатор оборудования
stmobile://exchange/cmd/uploaddataspec
- exchange_cmd [DexCmd] - Команда обмена
- exchange_type [ExchangeType] - Тип обмена
stmobile://globalmenu/items
- config [MenuItem[] ] - Список пунктов глобального меню
stmobile://outlet/attributes
- config [OutletAttrData[] ] - Список атрибутов торговой точки подробнее тут
stmobile://action/uri/preopen
- uri [String] - Путь uri, в рамках которого вызывается данная точка расширений
stmobile://report/outletreports/outletcard
- contextDistrId [ID] - Идентификатор дистрибьютора, формируется в соответствии со следующей логикой:
- Если ТТ заведена только под одним дистрибьютором и не имеет сопоставленных ТТ КБ Д, то передается дистрибьютор этой ТТ.
- В остальных случаях передается дистрибьютор ЦО.
stmobile://action/deeplink/request
- requestUrl [String] - Полный url, с параметрами
Пользовательский контекст
Пользовательский контекст является удобным инструментом взаимосвязи расширений, благодаря ему возможна передача параметров из одного расширения в другой. Для передачи значения нужно объявить его в виде GET-параметра при открытии следующего расширения:
api.launcher.open("stmobile://reports/routereports/some_report?parameter=42");
// Дополнительный параметр будет доступен в контексте data-скрипта открываемого расширения
api.context.parameter == 42;
При объявлении пользовательского параметра, затеняющего стандартный контекст, новое значение перепишет изначальное.
api.launcher.open("stmobile://reports/ouletreports/such_report?outletId=1337");
// Открываемый отчет:
api.context.outletId == 1337;