Коллеги, как реализовать redirect на preview страницу после синхронизации приложения?
реализовал событие после обновления заказа
Terrasoft.sdk.Model.setModelEventHandler("Order",
Terrasoft.ModelEvents[Terrasoft.ModelEventKinds.After].update,function(config){
var model = "Order";
var record = config.scope.eventConfig.records[0];
var pageConfig = {
recordId: record.data.Id
};
Terrasoft.Configuration.WaSync(model, pageConfig, false);
});
Terrasoft.Configuration.WaSync = function(model, pageConfig, toMainPage = true) {
Terrasoft.MobileSettingsPageControllerSyncManager.synchronize({
exportOnly: false ,
checkForPredefinedDatabase: false,
redirect: function() {
debugger;
if(toMainPage) {
Terrasoft.core.redirectToMainPage();
} else {
Terrasoft.Application.close(() => {
});
}
}
});
};нашел функцию Terrasoft.util.redirectToPage:
Terrasoft.util.redirectToPage = function(to, hash) {
Terrasoft.Application.close(() => {
to += location.search;
if (hash) {
to += "#" + hash;
}
location.href = to;
});
};я та понимаю в hash нужно передавать данные по странице заказа, подскажите что можно вообще тут сделать? Не хочется редиректится на главную страницу.
Нравится
Опишите подробней свою бизнес задачу.
Довольно странное поведение - открывать страницы после полной синхронизации. К тому же во время полной синхронизации может может изменится структура объектов
Для открытия страницы просмотра обычно используется такой метод:
Terrasoft.util.openPreviewPage("Contact", {
recordId: contact.getId()
});P.S. Метод Terrasoft.MobileSettingsPageControllerSyncManager.synchronize является @internal его нельзя использовать!
P.S.S. Класс Terrasoft.MobileSettingsPageControllerSyncManager является устаревшим, сейчас используют Terrasoft.SyncUtils
Наверное вам подойдет метод
Terrasoft.SyncUtils.synchronizeData
Кривонос Максим,
здравствуйте, после сохранения изменения заказа, а именно изменения состояния заказа необходимо осуществлять синхронизацию приложения, что бы заказа сразу уходил в основную БД. После синхронизации нужно открыть этот же заказ на PreviewPage что бы было возможным осуществлять действия - http://prntscr.com/o9nbjt. Сразу скажу онлайн режим не подходит. Уже использую Terrasoft.SyncUtils.synchronizeData
Terrasoft.sdk.Model.setModelEventHandler("Order",
Terrasoft.ModelEvents[Terrasoft.ModelEventKinds.After].update,
function(config) {
var record = config.scope.eventConfig.records[0];
if(record.modified.hasOwnProperty("Status")) {
Terrasoft.util.Sync.synchronizeData({
exportOnly: false ,
isCancelable: true,
checkIfSyncStarted: true,
checkForPredefinedDatabase: false,
ignoreNotifications: true,
runType: Terrasoft.Sync.RunTypes.Background,
redirect: true
});
}
}
);
Возможно ли делать синхронизацию данных в фоновом режиме без перезагрузки приложения отправить измененный заказ в основную БД? Какие методы использовать?
Фоновая синхронизация доступна пока что только для Android. Чтоб она работала нужно включить системную настройку RunMobileSyncInService.
Запускать в фоне можно вот так:
Terrasoft.SyncUtils.synchronizeData({
redirect: false,
isCancelable: true,
ignoreNotifications: true,
checkForPredefinedDatabase: false
});
Вам нужно дожидаться каких-то данных с сервера?
Кривонос Максим,
нужно понимать что синхронизация прошла успешно и выводить сообщение пользователю
Смотрите какое поведение системы(делаю на эмуляторе):
подставил код который Вы написали выше - http://prntscr.com/o9ze1c
Синхронизация проходит без редиректа на основную страницу, но затем после сохранения записи не отрабатывают события, перехожу в другой раздел и затем обратно в раздел заказы и наблюдаю следующее - http://prntscr.com/o9zg5s
Как быть с таким поведением видимо что то где то перезатирается?
1) При подписке на события модели нужно в конце вызывать config.success
2) Если вы хотите что-то отображать пользователю то логику нужно реализовывать на карточке а не на объекте
3) у synchronizeData есть метод finish по идее он должен вызываться в конце