не появились
новые поля
пропали
Технические вопросы
7.x

Добавил с десяток разных полей в карточку контакта и сохранил, обновил - все хорошо отобразилось.
Добавил 2 поля на деталь адреса, сохранил - показало ошибку(к сожалению не заскриншотил).
После ошибки начало выбивать ошибку из одним из новосозданных полей в карточке, решил убрать его, открыл мастера(через реестр), а там ни одного нового поля!!!

Первым делом посмотрел в конфигурации - все на месте:

Скомпилировал, вышел, почистил кеш Цклинером, зашол, открываю карточку но поля не появились.
База ондеманд 7.х
Спасибо за помощь

Нравится

2 комментария

Если поля есть в объекте, значит их уже будет видеть мастер раздела как существующие, попробуйте снова добавить их в карточку через следующее контекстное меню:


Если при сохранении снова возникнет консольная ошибка, сделайте скриншот. А так же приложите код схемы.

Проблему решил, немного по другому. У меня было два поля Город(хотя один назывался - City, а другой - UstCity). Подумал в этом ошибка, удалил поле из объекта и вручную удалил поле из страницы редактирования - все поля появились. Странно что ошибки не выбило никакой...

Показать все комментарии

Здравствуйте.
Почему-то не создается активность при создании нового лида.

Но когда запустить вручную - создается.

И тут проблема не в сигнале, ибо вот тут сигнал срабвтывает и БП работает.

В чем может быть проблема?
Спасибо.

Нравится

2 комментария

Добрый день!

Добавьте журналирование в свойствах процесса и в свойствах всех элементов.
Уберите стартовый сигнал для ручного запуска процесса.
Добавьте лид. Проверьте, что процесс запускается, что элементы процесса и сам процесс находятся в состоянии “Завершен”.

Возможно администрирование по записям настроено таким образом, что у вас нет доступа к созданным активностям.
Для детального анализа обратитесь в службу технической поддержки.

Сегодня утром еще раз запустил - все работает. Видимо нужно было одну ночь подождать)

Показать все комментарии
автозаполнение
динамическое изменение
Технические вопросы
7.x

Задаю довольно таки распространенный вопрос, как ни странно, я не нашел подобной темы.
Допустим есть поле статус, при его изменении должно автозаполняться другое поле - дата(возможно текстовое или даже справочник). И сразу усложню задание, изменения должны вступить в силу когда поле статус меняет одно конкретное значение в другое(например из "В работе" в "Выполнено").
BPMonline 7.x
Заранее спасибо.

Нравится

5 комментариев

Есть кто живой и знающий?

Здравствуйте, данный кейс решается стандартной подпиской на событие. И выполнением интересующей Вас логики по событию.

Подписка на событие в том или ином виде проскакивала на форуме, к примеру:
http://www.community.terrasoft.ua/forum/topic/13908

А по скольку Вы говорите про статусы "В работе", "Выполнено" могу предположить что речь идет про карточку активности, а в ней уже есть, если посмотреть исходный код, в родительских схемах, атрибут:

"Status": {
  "isRequired": true,
  lookupListConfig: {
    columns: ["Finish"]
  },
  dependencies: [
    {
      columns: ["Status"],
      methodName: "onStatusChanged"
    }
  ]
},

В котором задан метод "onStatusChanged" на изменение данной колонки, и метод этот уже написан, достаточно его переопределить, и дописать недостающей логики.

К примеру:

define("ActivityPageV2", ["ActivityPageV2Resources", "GeneralDetails"],
function(resources, GeneralDetails) {
	return {
		entitySchemaName: "Activity",
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		diff: /**SCHEMA_DIFF*/[
		]/**SCHEMA_DIFF*/,
		attributes: {
			"StatusValue": {
				dataValueType: this.Terrasoft.DataValueType.TEXT
			}
		},
		methods: {
			onEntityInitialized: function() {
				this.callParent(arguments);
				var statusValue = this.get("Status");
				this.set("StatusValue", statusValue);
			},
			onStatusChanged: function() {
				this.callParent(arguments);
				var oldStatus = this.get("StatusValue");
				var statusValue = this.get("Status");
 
				console.log("был: " + oldStatus.displayValue + ", стал: " + statusValue.displayValue);
				// тут любая логика проверки, и установки
				if (oldStatus.displayValue === "Не начата" && statusValue.displayValue === "В работе") {
					this.set("DetailedResult", "Взята в работу");
				}
 
				this.set("StatusValue", statusValue);
			}
		},
		rules: {},
		userCode: {}
	};
});

"Щиголь Максим" написал:А по скольку Вы говорите про статусы "В работе", "Выполнено" могу предположить что речь идет про карточку активности

Это карточка заказа, нужно поставить дату окончания(текущую дату) в определенное поле когда статус стает определенным значением. Не знаю как это работает но у меня выбивает ошибку, с помощью вывода данных в консоль определил что выбивает на
"Щиголь Максим" написал:this.set("StatusValue", statusValue);

подумал раз это поле то и тип должен быть не DataValueType.TEXT а DataValueType.LOOKUP, но ничего не помогло, этот код: var statusValue = this.get("Status"); срабатывает(вывожу в консоль данные из statusValue)

this.set("StatusValue", statusValue);

В данном месте ошибка может быть только по двум причинам:

1) неправильный контекст выполнения.
2) проблемы с аттрибутом StatusValue.

Предоставте скриншот ошибки в консоли браузера и, по возможности, код вашей реализации данной схемы для более детального анализа причин ошибки.

Получилось, поменял местами немного, написал так:
this.set("StatusValue", statusValue.displayValue);
а в остальных местах пользовался просто statusValue и oldStatus

Показать все комментарии

Версия BPMOnline 7.2

Простая задача: в зависимости от чекбокса на основной карточке разрешить или запретить добавление элементов в деталь.

1. В коде основной карточки:

добавим чекбокс на страницу

{
                                        type: Terrasoft.core.enums.ViewModelSchemaItem.ATTRIBUTE,
                                        name: 'IsProductChoose',
                                        columnPath: 'IsProductChoose',
                                        dataValueType: Terrasoft.DataValueType.BOOLEAN,
                                        visible: true,
                                        customConfig: {
                                                click: {
                                                        bindTo: "IsProductChooseClicked"
                                                }
                                        }
                                }

обработчик изменения чекбокса

this.methods.IsProductChooseClicked = function() {
                       
                        var args = {
                                param: this.get("IsProductChoose")
                        };
                        sandbox.publish(
                                "IsProductChooseChanged",
                                args,
                                [sandbox.id]
                        );
                };

2. В коде детали:

изменим конфиг выпадающего меню

this.modifyUtilsButton = function(utilsButton) {
                        var utilsMenuItems = utilsButton.menu.items;
                       
                        utilsMenuItems[1].caption = "Выбрать продукты";
                        utilsMenuItems[1].enabled = {bindTo: "isProductChooseForSelection"};
                        return utilsButton;
                };

обработчик "включить/выключить пункт меню"

this.methods.isProductChooseForSelection = function() {                
                        this.sandbox.subscribe("IsProductChooseChanged", function(arg) {
                                console.log(arg);
                        }, this, [this.getSenderSandboxId()]);
                };
               
                this.methods.getSenderSandboxId = function() {
                        return this.sandbox.id.replace('_detail_SynchronizedProduct', '');
                };

Однако при открытии карточки получаю ошибку в консоли браузера:
Uncaught Terrasoft.UnsupportedTypeException: Message IsProductChooseChanged is not defined in undefined module

К сожалению в документации не описано как работать с событиями через sandbox.

Буду благодарен за консультацию.

Нравится

5 комментариев

как раз недавно обсуждались сообщения: http://www.community.terrasoft.ru/forum/topic/15210
по версиям, насколько я знаю, отличий нет

К сожалению, отличия есть. В 7.2 как минимум нет такого объекта Terrasoft.MessageMode.PTP

Для BPM'Online 7.2 Вы можете воспользоваться уже существующими месседжами, к примеру "UpdateDetail".

Вот пример кода для общения страницы "Контакт" с деталью "Средства связи". Код для страницы контакта в методе "init":

var moduleId = sandbox.id + '_detail_communications';
            this.on("change:Name", function(){
                if(this.get("Name") === "Some name"){
                    sandbox.publish('UpdateDetail', null, [moduleId]);
                }
            });

Код в методе "init" детали:

var moduleId = sandbox.id;
            sandbox.subscribe("UpdateDetail", function() {
                alert("GOAL!")
            }, [moduleId]);

Данный код тестировался для версий 720 и 722. Основное условие работоспособности - идентичность содержания переменной moduleId как для модуля так и для страницы редактирования.

Спасибо большое, все получилось. А не подскажете - для того, чтобы использовать свои месседжи - необходимо писать свой модуль?

Да, в версии 7.2 создавать месседжи можно только в модулях.

Показать все комментарии
Технические вопросы
7.x

Добрый день
Подскажите, пожалуйста, как лучше сделать логику заполнения поля в карточке КЕ:
нужно, чтобы поле содержало строго 10 символов (или цифр?), при заполнении этого поля должна быть проверка на уникальность (значения этого поля не должны повторяться).
Примеры заполнения поля: 0000000001, 0000000002, ..., 0000000011, ....

Заранее спасибо

Нравится

3 комментария

Татьяна! Может Вам подойдет настроить автонумерацию для поля? Для этого необходимо создать две системные настроки [название объекта][LastNubmber] и [название объекта][CodeMask] во втором в случае ввиде маски указать необходимые Вам 10 цифр как {0000000000}, затем добавить код генераци в код страницы для этого поля в метод init по типу:
if (this.action === ConfigurationEnums.CardState.Add ||
this.action === ConfigurationEnums.CardState.Copy) {
this.getIncrementCode(this.entitySchema.name, function(response) {
this.set('Number', response);
});
}
Тогда при содании поля новой КЕ автоматом будет присваиваться номер. Или вы хотите чтобы пользователь заполнял все сам, но реалиизовать проверку на 10 цифр? и чтобы таких номеров в бд не было?

Добрый день.
Я ошиблась с версией системы - у нас 5-ка, а не 7-ка. Подойдет ли Ваш ответ к нашей системе?

Здравствуйте!

С примером настройки автонумерации в 5.x вы можете ознакомиться в этом посте - ссылка.

Показать все комментарии

Здравствуйте.

Версия 7.7.0.2325

Нужно реализовать дополнительный реестр, с сохранением всех функций раздела (вариант из https://community.terrasoft.ru/blogs/12682 не подходит). Принцип работы такой же как в разделе активности, только место расписания должны отображаться отфильтрованные данные, также для пользователя должен сохраняться выбор реестра с которым он закончил работать, т.е. стандартный функционал - если зашел в аналитику раздела, следующий раз при переходе в раздел из основного меню попадаешь не в реестр а в аналитику.

Создал новый раздел и работаю в нем(код раздела в приложении).
Переход между представлениями работает нормально, скрывается стандартное GridDataView и отображаеться новое WarehouseDataView и наоборот(одноименные скриншоты в приложении).

При переходе в новое представления данные не загружаются в грид, подскажите пожалуйста что нужно добавить\изменить что бы загружались данные?
Насколько я понял WarehouseDataGrid хоть и добавляется но не инициализируеться полностью, т.к. у элемента не хватает классов в отличие от стандартного грида (видно на скринах).

Для нового представления через Вид-Настроить колонки - вынес нужные колонки, для нового они сохраняются отдельно, но это тоже не помогло.

Нравится

8 комментариев

Здравствуйте!

Попробуйте переопределить в своём разделе метод getCurrentGrid таким образом, чтобы он возвращал корректный реестр (по примеру аналогичного метода в SysAdminUnitSectionV2).

Также необходимо решить проблему получения всех нужных данных из профиля при генерации схемы раздела. Базовый метод getProfileKey из SectionModuleV2 возвращает ключ только для профиля представления GridDataView:

getProfileKey: function() {
	var parentKey = this.callParent(arguments);
	return parentKey + "GridSettingsGridDataView";
}

Если просто заменить возвращаемое значение на ключ своего профиля, то потеряется профиль для базового представления. Поэтому необходимо добиться, чтобы при инициализации профиля в SchemaBuilderV2 свойство profile схемы содержало все необходимые профили (например, путём переопределения метода initSchemaProfile в SchemaBuilderV2).

Олег, спасибо.
После переопределения getCurrentGrid и настройки колонок на второй вкладке информация отобразилась. Единственное настройки колонок, для второй вкладки, сбрасываеться при обновлении страницы. Не могли бы вы подробней расписать что нужно сделать, вторую часть вашего сообщения плохо понимаю. Возможно в системе есть пример того что мне нужно?

Здравствуйте, примеров, к сожалению, в системе нет. Но вы можете попробовать пойти обходным путем. Создать схему раздела на основании базовой схемы, по аналогию с основным разделом.
Тогда в ней по умолчанию будут работать настройка колонок.
И, к примеру, заходя по ссылке:
…/0/Nui/ViewModule.aspx#SectionModuleV2/UsrContactSectionV2Type2

Все будет обрабатывать схема UsrContactSectionV2Type2, и хранить настройку колонок в подвязке под это имя.

А заходя по ссылке:
…/0/Nui/ViewModule.aspx#SectionModuleV2/ContactSectionV2
Будет работать настройка колонок стандартной, собственно ContactSectionV2, и обрабатываться все будет ей.

В разных схемах вы сможете реализовать разное поведение.
Единственное что, вам необходимо будет сделать, что бы кнопки(иконки) “представлений” вели к нужной вам схеме, первая к основной, и ваша, к UsrContactSectionV2Type2, или как вы там назовете схему.

Илья, ваш способ пробовал, есть тема с этим способом, но у него есть недостатки, он не походит.

Хотелось бы добить способом который предложил Олег.
Сейчас поведение такое: при переходе на новую вкладку информация не отображаеться, если зайти в настройку колонок и просто сохранить(в мастере уже добавлены текущие колонки т.е. профиль закладки сохраняется по своему ключу), данные появляются, при новой загрузке пропадают.

Подскажите? что такого происходит при открытии и сохранении настроек колонок. Возможно получиться это повторить.

Также подскажите пожалуйста, где найти место, в которое можно было бы подставить свой(вручную созданный или скопированный) профиль для новой вкладки, грубо говоря не разбираться текущей проблемой, а задать фиксированный профиль.

Также интересует, как можно получить профиль по ключу аналогично его получению в SchemaBuilderV2, в разделе сделать это не получилось, возвращает undefined.

Еще один момент:
Путем переопределения SchemaBuilderV2 и подстановкой нужного ключа профиля:

initSchemaProfile: function(callback, config) {
	var profileKey = config.profileKey;
	if (profileKey == "UsrImplSectionGridSettingsGridDataView") {
		profileKey = "UsrImplSectionGridSettingsWarehouseDataView";
		config.profileKey = profileKey;
	}
	this.getProfile(profileKey, function(profile) {
		config.schemaResponse.profile = profile;
		callback(config);
	}, this);
},

колонки начали отображаться нормально. Что нужно сделать что бы при инициализации в config передавался ключ активного профиля?

Актуальный скрипт раздела в приложении.

Данный ключ генерируется в "SectionModuleV2" в методе getProfileKey :

getProfileKey: function() {
      var parentKey = this.callParent(arguments);
      return parentKey + "GridSettingsGridDataView";
},

Родительский метод же объявлен следующим образом:

getProfileKey: function() {
      return this.schemaName;
},

Илья, этот метод переопределен(также пробовал фиксированно задавать ключ нового представления), и с помощью точке останова установил что SchemaBuilderV2.initSchemaProfile вызывается раньше SectionModuleV2.getProfileKey

initSchemaProfile вызывается раньше именно потому что использует getProfileKey в своей работе. Я не совсем понимаю, почему не получается использовать getProfileKey, для получения ключа как предложил Илья
getProfileKey: function() {
var currentTabName = this.getActiveViewName();
var schemaName = this.name;
return schemaName + this.entitySchemaName + "GridSettings" + currentTabName;
}

Показать все комментарии
Автоматическая синхронизация
Мобильное приложение
7.x

Здравствуйте!

BPMonline 7.7.0.2326

Возможно ли в мобильном приложении настроить автоматическую синхронизацию?
И как это реализовать?

Нравится

8 комментариев

Виктория здравсвуйте.
Что значит "автоматическую синхронизацию"?
Опишите пожалуйста функционал который Вы бы хотели видеть и чем не подходят текущие настройки.

Здравствуйте!
Руководитель компании хочет, чтобы после входа в приложение каждые 5 минут происходила синхронизация без нажатия на кнопку, сама по себе.
Возможно ли такое?
И в каком модуле нужно прописывать код?

В етом случае рекомендуется использовать Online синхронизацию - так все данные сразу же будут попадать в систему.

Все-таки Online синхронизация не подходит, потому что без доступа к интернету не будет возможности создавать и просматривать записи. А нам этот вариант не подходит.

Все-таки возможно ли реализовать автоматическую синхронизацию?
И в какой схеме нужно прописать код?

Пример рассмотрен здесь:
http://www.community.terrasoft.ru/forum/topic/15331

А правильно ли я понимаю, что для реализации автоматической синхронизации, мне необходимо использовать setInterval и clearInterval?
При чем при загрузке приложения стартовая страница это раздел Лиды.
То есть можно при инициализации страницы реестра вызвать setInterval?
А нужно ли вызывать clearInterval или после выхода из системы он сам автоматически завершится?
И получается мне нужно переопределить страницу грида?
Или автоматическую синхронизацию можно реализовать по-другому?

1. Да, для того, чтобы синхронизация запускалась через какой-то период, можно использовать setInterval().
2. Да, можно сделать этот запуск на инициализации страницы реестра Лида, если у Вас гарантированно эта страница открывается при старте.
3. clearInterval() вызывать не обязательно.
4. Да, как вариант, можно реализовать подобное на инициализации реестра Лида. Контроллер будет выглядеть примерно так:

Ext.define('LeadGridPage.Controller', {
	extend: 'Terrasoft.controller.BaseGridPage',
	statics: {
		Model: Lead
	},
	config: {
		refs: {
			view: '#LeadGridPage'
		}
	},
 
	initializeView: function(view) {
		this.callParent(arguments);
		Terrasoft.MobileSettingsPageControllerSyncManager.synchronize({
			exportOnly: false,
			checkForPredefinedDatabase: false,
			redirect: function(){
				Terrasoft.core.redirectToMainPage();
			},
		});
	}
});

Но нужно понимать следующее:
- Поскольку Javascript - однопоточный, то и синхронизация будет выполняться в основном потоке приложения. Это может привести к тому, что в случае обращения к одному и тому же объекту приложение будет "тупить". Т.е. если пользователь пытается найти Контакта и в этот же момент синхронизация тоже будет обращаться к Контактам (например, будет добавлять новые записи в этот объект), то UI приложения будет тормозить\зависать, пока сохранение не завершится.

- В приведенном выше коде после выполнения синхронизации осуществляется рестарт приложения (Terrasoft.core.redirectToMainPage();). Обычно мы это делаем для того, чтобы конфигурационные изменения, загруженные в ходе синхронизации, применились (например, Вы добавили новую колонку в карточку редактирования и хотите, чтобы у всех пользователей это изменение появилось). Но в Вашем случае, возможно, этого делать не нужно (пользователям вряд ли понравится, что приложение вдруг взяло и перегрузилось).

- Если Вам нужно просто передавать данные в bpm'online, то достаточно указать свойство exportOnly

С учетом вышеизложенного код немного поменяется:

Terrasoft.MobileSettingsPageControllerSyncManager.synchronize({
	exportOnly: true,
	checkForPredefinedDatabase: false,
	redirect: function(){
		//Terrasoft.core.redirectToMainPage();
	},
});

Попробуйте, может такой вариант Вам подойдет.

Спасибо большое!!!

Показать все комментарии
Синхронизация при сохранении в мобильном приложении
Мобильное приложение
7.x

Здравствуйте!

BPMonline 7.7.0.2326

Возможно ли в мобильном приложении при сохранении новой записи раздела Лиды осуществлять синхронизацию? И как это реализовать?

Нравится

8 комментариев

Возможно Вам будет удобней включить online-режим для мобильного приложении?
Тогда все изменения будут моментально отображаться/передаваться на сервер.
(Правда для его работы на устройсвах необходим будет постоянно интернет)

А где включается online-режим для мобильного приложения?
А если интернет пропадет и в этот момент добавят 2 записи, а после того, как интеренет появится, добавят 3-ю запись, что произойдет с первыми 2?
Или если не добавят 3-ю запись, а просто появится интернет, 2 записи будут переданы на сервер?

Включается в системной настройке "режим работы мобильного приложения"
Если нет интернета вы не сможете создать ни одной записи. впрочем как и прочитать.

Тогда нам такой режим не подходит.

А возможно ли при сохранении записи Лида сразу начинать синхронизацию?
И как это реализовать?

Примерно так

Terrasoft.MessageBox.showConfirmation({
   message: LocalizableStrings["PharmaMobileActivityPreviewPageSyncConfirm"],
   htmlEncode: false,
   yesCallback: function() {
      Terrasoft.MobileSettingsPageControllerSyncManager.synchronize({
         exportOnly: false,
         checkForPredefinedDatabase: false,
         redirect: function(){
            Terrasoft.core.redirectToMainPage();
         },
      });
   },
   noCallback: function() {},
   scope: this
});

Правильно ли я понимаю, что для того, чтобы синхронизация происходила после сохранения записи, мне нужно переопределить страницу редактирования Лида и на onSaved написать вызов синхронизации?
Или это делается по-другому?

Подобное можно реализовать как минимум двумя способами.
1. Как Вы о писали, можно переопределить страницу редактирования Лида и в контроллере на обработчике onDataSavedSuccessfully() реализовать запуск синхронизации. Этот обработчик срабатывает как-раз после того, как данные сохранены.

2. Второй способ - подписаться на события самой модели и уже там реализовать нужную Вам функциональность. Плюс этого подхода - код будет срабатывать всегда на соотв. событие, вне зависимости от того, открывали Вы вообще страницу редактирования Лида или нет. Пример подобной реализации можно подсмотреть в схеме MobileActivityModelConfig. Такая подписка будет выглядеть примерно так:

Terrasoft.Configuration.sync = function() {
      Terrasoft.MobileSettingsPageControllerSyncManager.synchronize({
         exportOnly: false,
         checkForPredefinedDatabase: false,
         redirect: function(){
            Terrasoft.core.redirectToMainPage();
         },
      });
};
 
Terrasoft.sdk.Model.setModelEventHandler("Lead", Terrasoft.ModelEvents[Terrasoft.ModelEventKinds.After].insert, Terrasoft.Configuration.sync);
Terrasoft.sdk.Model.setModelEventHandler("Lead", Terrasoft.ModelEvents[Terrasoft.ModelEventKinds.After].update, Terrasoft.Configuration.sync);

Спасибо большое! Получилось!
Второй способ работает лучше!
Спасибо!!!

Показать все комментарии
7.6
редактируемый реестр
Технические вопросы
7.x

На карточке раздела "Заявки на товары и услуги" есть деталь "Товары/услуги", которая работает с развязочной таблицей. Реестр в детали редактируемый.
Если открыть карточку, обновить страницу с очисткой кеша, и перейти в другой раздел, или просто по ссылке из справочного поля - карточки других разделов загружаются с пустыми полями. Выдает ошибку: "Элемент коллекции с именем SxProdDemand не найден". Если я правильно понимаю, в запрос почему-то добавляются колонки из детали.
Если обновить страницу с очисткой кеша в другом разделе - все разделы и ссылки работают.
Если отключить редактируемый реестр - все работает.
Деталь в базе зарегистрирована. Карточки редактирования у детали нет.
В чем дело и как это исправить?

Нравится

2 комментария

Добавил страницы редактирования - проблема исчезла. Есть ли возможность не добавлять страницы, т.к. они не будут использоваться?

Здравствуйте, Олег!

Рекомендую Вам обратиться в службу технической поддержки bpm'online.
Т.к. данный вопрос требует доступа к БД и Сайту для анализа вопроса.

Показать все комментарии
Скрыть журнал синхронизации
Мобильное приложение
7.x

Здравствуйте!

BPMonline 7.7.0.2326

Скажите, как скрыть журнал синхронизации в разделе Настройки?

Нравится

10 комментариев

Здравствуйте!
Рекомендую посмотреть в сторону схемы "SystemDesigner" пакета UIv2.
Так находятся элементы [Дизайнера системы]

Извините, забыла указать, что в мобильном приложении в разделе настройки надо скрыть журнал синхронизации.
Как его скрыть?

Данная опция является базовой для мобильного приложения.
Уточните пожалуйста - для чего необходимо его скрывать?

Так захотел руководитель компании.
Хочет, чтобы в мобильном приложении в настройках остались только кнопки синхронизация и очистить кеш.
Скажите, такое возможно? И как это реализовать?

Есть такой вариант:
Создайте отдельный модуль для общих настроек UsrMobileUtilitiesCustom

Ext.define("Ext.MobileSettingsPageOverride", {
    override: "Terrasoft.controller.MobileSettingsPage",
 
    updateValues: function() {
		this.callParent(arguments);
		var syncLogPageButton = this.getSyncLogPageButton();
		syncLogPageButton.setHidden(true);
    }
 
});

подключите ее в манифесте в блоке CustomSchemas

{
	...
	"CustomSchemas": [
		"UsrMobileUtilitiesCustom"
	],
	...
}

Эттот вариант не очень хорош/надежен т.к. метод updateValues приватный

второй вариант, скрыть стилями

Terrasoft.util.writeStyles(
"#MobileSettingsPage_syncLogPageContainer {display: none}"
)

теоретически, тоже может перестать работать в будущем.

Здравствуйте!

Спасибо большое! Получилось скрыть журнал синхронизации первым способом.

Но непонятно, по какой функции обращаться к адресу, логину, паролю, рабочему месту.
Схему MobileSettingsPage я не нашла.

Скажите, где можно посмотреть, как к ним обратиться, чтобы их скрыть?

Это ядровые компоненты мобильного приложения.
Теоретически их можно извлечь из .apk файла
(можно поискать инструкции в интеренте как это сделать)

Хорошо, спасибо, сейчас попробую.
Вы можете подсказать, как скрыть все в разделе настройки, кроме кнопок синхронизация и очистить кеш или это займет у Вас много времени?

список основных элементов:
view: "#MobileSettingsPage",
navigationPanel: "#MobileSettingsPage_NavigationPanel",
loginField: "#MobileSettingsPage_login",
passwordField: "#MobileSettingsPage_password",
serverField: "#MobileSettingsPage_server",
isSecureConnection: "#MobileSettingsPage_isSecureConnection",
workspaceField: "#MobileSettingsPage_workspace",
workplaceCombobox: "#MobileSettingsPage_workplaceCombobox",
backgroundSyncCombobox: "#MobileSettingsPage_backgroundSyncCombobox",
syncButton: "#MobileSettingsPage_syncButton",
clearDatabaseButton: "#MobileSettingsPage_clearSqlDatabaseButton",
versionLabel: "#MobileSettingsPage_version",
additionalColumnSet: "#MobileSettingsPage_additionalSettingsColumnSet",
demoLoginButton: "#MobileSettingsPage_demoLoginButton",
exportOnly: "#MobileSettingsPage_exportOnly",
demoPage: "#MobileDemoLoginPage",
syncLogPageButton: "#MobileSettingsPage_syncLogPageContainer",
sendUsageStatisticsButton: "#MobileSettingsPage_sendUsageStatisticsButton"

Пример обращения:
this.getLoginField()

Спасибо большое!!! Получилось!

Показать все комментарии