Добавление данных в карточку в мобильном приложении
Здравствуйте. Столкнулся с проблемой получения дополнительных данных.
Например, создал активность в мобильном приложении, указав контрагента. На карточке просмотра активности есть необходимость скрывать некоторые поля, в зависимости от типа контрагента. Но на карточку просмотра активности о контрагенте загрузилась минимальная информация в виде Id и Name, а мне необходимо ещё значение Type.
Пробовал решить двумя способами.
В первом добавил бизнес правило на событие загрузки записи и внутри метода обработчика сделал следующий вызов:
var modelName = "Account"; var model = Ext.ClassManager.get(modelName); var queryConfig = Ext.create("Terrasoft.QueryConfig", { modelName: modelName, columns: ["Id", "Name", "Type"] }); model.load(account.get("Id"), { queryConfig: queryConfig, success: function(record) { // ??? }, failure: function(record, operation) { // ??? }, scope: this });
Но метод выполняется асинхронно, как из него вернуть данные и продолжить дальнейшее выполнение, учитывая, что в конце бизнес-правила необходимо вызвать
Ext.callback(callbackConfig.success, callbackConfig.scope, [true]);
Вторым способом заместил View и Controller и в Controller-классе в методе onLoadRecord попытался вызвать безрезультатно Account.Store.getById.
Хотя, при прочих равных в файле PharmaMobileActionScheduleVisit пакета PharmaMobile аналогичная строка с "волшебным" Store работает.
var type = ActivityType.Store.getById(Terrasoft.Configuration.ActivityTypes.Visit);
Может код из первого варинта поместить в замещенный onLoadRecord? Или есть другие варианты? Прошу помощи в решении задачи.
Нравится
Отвечу сам на вопрос решением. Оно оказалось простым.
При добавлении custom-правила вызовом
Terrasoft.sdk.Model.addBusinessRule
(функция executeFn), в месте возврата данных model.load (success) необходимо вставить Ext.callback. Полным решение выглядит примерно следующим образом:
var modelName = "Account"; var model = Ext.ClassManager.get(modelName); var queryConfig = Ext.create("Terrasoft.QueryConfig", { modelName: modelName, columns: ["Id", "Name", "Type"] }); var failureFn = function(exception) { Ext.callback(callbackConfig.failure, callbackConfig.scope, [exception]); }; model.load(account.get("Id"), { queryConfig: queryConfig, success: function(rec) { var type = rec.get("Type"); record.changeProperty("FIELD-NAME", { hidden: type === "TYPE-VALUE" }); Ext.callback(callbackConfig.success, callbackConfig.scope, [true]); }, failure: failureFn, scope: this });
Также, для загрузки данных, вместо model.load можно использовать и другую функцию
Terrasoft.DataUtils.loadRecords