Коллеги, как реализовать 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 по идее он должен вызываться в конце