Коллеги, всем доброго времени суток!

В мобильном приложении необходимо логировать некоторые данные. В приложении есть свой логгер -  http://prntscr.com/noti8j

Подскажите где смотреть логи если назначение будет Terrasoft.LogDestination.Analytics?

 

Нравится

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

Логи Terrasoft.LogDestination.Analytics не предназначены для просмотра пользователем. Можно посмотреть только Terrasoft.LogDestination.File, сформировав письмо с отчётом для отправки.

 

Зверев Александр,

 Благодарю.

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

Всем доброго времени суток.

Столкнулся с проблемой фильтрации в разделе активностей в списочном представлении.

Создал ModuleConfig, прописал в нем фильтрацию, название модуля добавил в манифест, но при отработке вываливается ошибка - http://prntscr.com/nns86h

 

Terrasoft.sdk.Module.addFilter("Activity", Ext.create("Terrasoft.Filter", {
	property: "Owner",
	value: Terrasoft.CurrentUserInfo.contactId
}));

так же не работает сортировка - http://prntscr.com/nns8sc

 

Terrasoft.sdk.GridPage.setOrderByColumns("Activity", {
	column: "StartDate",
	orderType: Terrasoft.OrderTypes.DESC
});

В чем может быть проблема?

Нравится

1 комментарий

Судя по тексту сообщения, код пытается сделать вставку (push) элемента в массив, а массив равен null. Где именно и почему это происходит, можно увидеть, открыв скрипты filter.js, sdk-utils.js и module-sdk.js в указанных на экране номерах строк.

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

Всем доброго времени суток!

Кто нибудь сталкивался с такой проблемой:

Сайт развернут локально. Создаем деталь мобильного приложения через мастер, схемы создались - https://prnt.sc/n6surw

Фиксирую в СВН  - http://prntscr.com/n6svs3

Фиксация проходит успешно - http://prntscr.com/n6svyk

Результат в Svn зафиксировались только метаданные - http://prntscr.com/n6swjg 

http://prntscr.com/n6sx1x 

http://prntscr.com/n6sx6r

 

Нравится

1 комментарий
Лучший ответ

Попробуйте так. Фиксируйте в свн 2 раза подряд. Перый раз уедут метаданные, второй раз - все остальное. Мы с этим сталкиваемся регулярно, но решения пока нет...

Попробуйте так. Фиксируйте в свн 2 раза подряд. Перый раз уедут метаданные, второй раз - все остальное. Мы с этим сталкиваемся регулярно, но решения пока нет...

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

Добрый день! 



Может ли кто-нибудь подсказать, данные каких таблиц нужно переносить для полного переноса настроек мобильного приложения через SVN на разные среды?



Требуется перенести только наполнение таблицы SysMobileWorkplace?

Нравится

1 комментарий

Если речь о доработанных в мастере или вручную мобильных карточках: новых и изменённых полях, деталях и подобном, то нужно смотреть, были ли изменения у схем, которые могут к этому разделу относиться. Например, для контрагента: MobileAccountGridPage, MobileAccountGridPageSettingsDefaultWorkplace, MobileAccountModelConfig, MobileAccountModuleConfig, аналогично по каждой детали. И переносить на другую базу нужные схемы.

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

Здравствуйте! Подскажите как можно реализовать обновление карточки мобильного приложения? Кейс следующий делаю апдейт заказа и после обновления полей в success обновлять страницу.

Код примерно следующий:

 

setDiscount: function(config){
		var orderProductRecord = Ext.clone(config.model);
		if(config.discountType==="legal"){
			var discountByContract = config.contract.data.Discount;
			var totalAmount = config.model.data.TotalAmount;
			var discountPrice = this.calculateAmountWithDiscount(totalAmount, discountByContract);
			var totalDiscount = totalAmount-discountPrice;
			orderProductRecord.set("WaDiscountAccount", discountByContract, true);
			orderProductRecord.set("WaTotalDiscount", totalDiscount, true);
			orderProductRecord.save({
				success: function(){
					window.console.log("Update was success");
					Terrasoft.Router.back();
				},
				failure: function(exception) {
					Terrasoft.MessageBox.showMessage(Ext.String.format(Terrasoft.LS.WaErrorExecutionMessage, exception));
				},
				queryConfig: Ext.create('Terrasoft.QueryConfig', {
					modelName: orderProductRecord.self.modelName,
					columns: ["WaDiscountAccount", "WaTotalDiscount"]
				})
			}, this);
		} else if (config.discountType ==="personal") {
			//orderProductRecord.set("WaDiscountContact", config.DiscountContact, true);
		}
	},

 

Нравится

1 комментарий

См. тут. Возможно, подойдут функции:

markPreviousPagesAsDirty(operationConfig)

Метод отмечает все предыдущие страницы как неактуальные. После возврата к предыдущим страницам для каждой из них вызовется метод refreshDirtyData(), который выполняет повторную загрузку данных или актуализирует данные на основании объекта operationConfig.

refreshPreviousPages(operationConfig, currentPageHistoryItem)

Метод выполняет для всех предыдущих страниц повторную загрузку данных или актуализирует данные на основании operationConfig. Если установлено значение для параметра currentPageHistoryItem, метод выполняет те же действия для предшествующих страниц.

refreshAllPages(operationConfig, excludedPageHistoryItems)

Метод выполняет для всех страниц повторную загрузку данных или актуализирует данные на основании operationConfig. Если установлен параметр excludedPageHistoryItems, метод исключает из актуализации указанные страницы.

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

Всем доброго времени суток!

Подскажите как можно передать в карточку редактирования нового заказа некоторых параметров - http://prntscr.com/n0jpjt ?

Для открытия карточки редактирования использую:

 

var config = {
			isStartRecord: true,
			pageSchemaName: "MobileOrderEditPage"
		};
		Terrasoft.util.openEditPage("Order", config);

 

Нравится

1 комментарий

См. в MobilePhoneCallLogPage:

 onSaveButtonButtonTap: function() {
  var modelConfig = Terrasoft.ApplicationConfig.getModelConfig("Activity");
  var requiredModels = modelConfig.RequiredModels;
  Terrasoft.StructureLoader.loadModels({
   modelNames: requiredModels,
   success: function() {
    this.createCallActivity(function() {
     var arrangeActivityToggle = this.getArrangeActivityToggle();
     var toArrange = arrangeActivityToggle.getValue();
     var record = this.record;
     this.back();
     if (toArrange) {
      setTimeout(function() {
       var config = {
        defaultRecordData: {}
       };
       if (Ext.isString(this.activityLinkColumnNames)) {
        config.defaultRecordData[this.activityLinkColumnNames] = record;
       } else {
        for (var i = 0, ln = this.activityLinkColumnNames.length; i < ln; i++) {
         var linkColumnNameConfig = this.activityLinkColumnNames[i];
         var columnName = linkColumnNameConfig.activityColumnName;
         var columnValue = record.get(linkColumnNameConfig.parentColumnName);
         config.defaultRecordData[columnName] = columnValue;
        }
       }
       Terrasoft.util.openEditPage("Activity", config);
      }.bind(this), 500);
     }
    }.bind(this));
   },
   scope: this
  });
 },

 

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

Всем доброго времени суток!

Есть задача при изменении кол-ва продуктов или же изменении продукта в детали Продукт в заказе просчитывать Amount и TotalAmount. Реализую данную задачу через пользовательское бизнес правило:

 

Terrasoft.sdk.Model.addBusinessRule("OrderProduct", {
	name: "WaOrderProductAmountValidatorRule",
	ruleType: Terrasoft.RuleTypes.Custom,
	triggeredByColumns: ["Quantity", "Product"],
	events: [Terrasoft.BusinessRuleEvents.ValueChanged, Terrasoft.BusinessRuleEvents.Save],
	executeFn: function(model, rule, column, customData, callbackConfig) {
		window.console.info(model);
		debugger;
		var product = model.get("Product");
		if ((!product) || Ext.isEmpty(product)) {
			model.set("Price", 0, true);
			model.set("TotalAmount", 0, true);
			model.set("Amount", 0, true);
		} else {
			var quantity = model.get("Quantity");
			var price = product.get("Price");
			var amount = quantity * price;
			model.set("Amount", amount, true);
			model.set("TotalAmount", amount, true);
		}
		Ext.callback(callbackConfig.success, callbackConfig.scope);
	}
});

Но почему то значение цены продукта возвращает null:

 

{
	"modified":{
		"Id":"fbfb2d62-4439-486b-ae2f-b360f9e899f8"
	},
	"raw":{},
	"stores":[],
	"data":{
		"Id":"1fd85496-4cc0-485c-ad37-bb91857e65df",
		"Name":"Гидрогелевая маска для лица WOW Mask",
		"ProcessListeners":null,
		"Price":null,
		"Active":false,
		"IsArchive":false
	},
	"_data":{
		"Id":"1fd85496-4cc0-485c-ad37-bb91857e65df",
		"Name":"Гидрогелевая маска для лица WOW Mask",
		"ProcessListeners":null,
		"Price":null,
		"Active":false,
		"IsArchive":false
	},
	"id":"fbfb2d62-4439-486b-ae2f-b360f9e899f8",
	"internalId":"fbfb2d62-4439-486b-ae2f-b360f9e899f8",
	"phantom":true,
	"dirty":true
}

Хотя значение цены есть - http://prntscr.com/my9x2o

Нравится

3 комментария
Лучший ответ

Нигрескул Алексей,

Такое происходит из-за того, что в конфиг запроса для справочной колонки никоим образом не была добавлена нужная колонка. Можно в явном виде добавить таким кодом где-нибудь в ModuleConfig:

    var additionalProductColumns = ["Price", /*прочие колонки*/];
    var productQueryConfig = Terrasoft.sdk.LookupGridPage.getQueryConfig("Product");
    Terrasoft.sdk.LookupGridPage.updateQueryConfigColumns(null, {columns: additionalProductColumns}, productQueryConfig);

Либо можно для converFuction первичной или вторичной колонки добавить её в LookupGridPage.

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

var controller = Terrasoft.app.getControllerInstances()["MyController"];
//Можно задебажиться и посмотреть, какие экземпляры контроллеров есть, среди них должен быть нужный
var control = controller.getFieldByName("MyColumn", record);
control.setValue(value);

Или ещё вариант:

var control = Ext.getCmp("{ViewId}_{PageType}_{ColumnName}_Column");
// {ViewId} - id представления, {PageType} - тип страницы Edit или Preview, {ColumnName} - название колонки, например AccountPage_Edit_AlternativeName_Column
control.setValue(value);

 

Бершеда Д. Н.,

 Здравствуйте! Я настроил кастомное правило и все хорошо изменяется, в данном случае сумма в зависимости от цены и кол-ва товаров. Вопрос в другом, не видит значение цены продукта, вот пример:

Есть заказ с продуктами -

http://prntscr.com/mz1088, меняю кол- во продукта срабатывает правило - http://prntscr.com/mz10kr

Мне возвращает цену продукта null - http://prntscr.com/mz10vd

Почему так происходит? В манифест зависимости добавил.

Нигрескул Алексей,

Такое происходит из-за того, что в конфиг запроса для справочной колонки никоим образом не была добавлена нужная колонка. Можно в явном виде добавить таким кодом где-нибудь в ModuleConfig:

    var additionalProductColumns = ["Price", /*прочие колонки*/];
    var productQueryConfig = Terrasoft.sdk.LookupGridPage.getQueryConfig("Product");
    Terrasoft.sdk.LookupGridPage.updateQueryConfigColumns(null, {columns: additionalProductColumns}, productQueryConfig);

Либо можно для converFuction первичной или вторичной колонки добавить её в LookupGridPage.

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

Здравствуйте! Столкнулся с такой проблемой, есть деталь она прикреплена к Активности, в активности и в данной детали есть поля ссылающиеся на контакт, необходимо при добавлении записи в детали передавать в поле контакт контакт из активности. Пробовал через обработку событий перед сохранением записи на детали  не помогло:

Terrasoft.sdk.Model.setModelEventHandler("WaRecordClientToEventInVisit", 
	Terrasoft.ModelEvents[Terrasoft.ModelEventKinds.Before].insert,
	function(config) {
		debugger;
		var record = config.scope.eventConfig.records[0];
		window.console.log(record);
		var contact = record.data.Activity.data.Contact;
		record.data.Contact = contact;
		window.console.log(record);
		Ext.callback(config.success, config.scope);
});

нужно передавать либо фильтровать контакты. Подскажите как можно реализовать данный кейс?

Заранее благодарен.

Нравится

1 комментарий

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

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

Всем доброго времени суток!

Добавляю деталь в мобильное приложение - http://prntscr.com/mx7ioh

добавлял следующим образом:

 

Terrasoft.sdk.Details.add("Activity", {
	name: "WaConsultationSubjectInVisitDetail",
	title: "WaConsultationSubjectInVisitCaption",
	model: "WaConsultationSubjectInVisit",
	parentColumnName: "Activity",
	masterColumnName: "Id",
	position: 0
});

Модуль зарегистрировал в манифесте.

так же добавил отображение грида для детали:

 

Terrasoft.sdk.GridPage.setTitle("WaConsultationSubjectInVisit", "WaConsultationSubjectInVisitGridTitle");
 
Terrasoft.sdk.GridPage.setPrimaryColumn("WaConsultationSubjectInVisit", "WaConsultationSubject");
Terrasoft.sdk.GridPage.setSubtitleColumns("WaConsultationSubjectInVisit", ["WaLoyalty","WaPotential"]);

При переходе на деталь вываливаются ошибки - http://prntscr.com/mx7jtz

Подскажите что делаю не так?

Через мастер мобильного не вариант добавлять. он рушит всю предыдущую логику что была разработана ранее.

Нравится

1 комментарий

Такое сообщение говорит о попытке писать в поле типа boolean неподходящее значение. Вероятно, в этой новой детали что-то не так сделали с одним из логических полей. Более точно узнать причину можно, изучив саму добавляемую деталь или посмотреть в Fiddler, какой запрос идёт к веб-сервису OData. 

Показать все комментарии
Вопрос: как правильно настраивается отображение справочных полей из связанных таблиц?
На карточке заключения заявки отображаю собственника заявки, указав
"columnName": "MSPApplication.Owner":

{
   "operation": "insert",
   "name": "settings",
   "values": {
      "entitySchemaName": "MSPApplicationConclusion",
      "items": [],
      "subtitleItems": [],
      "groupItems": [],
      "settingsType": "GridPage",
      "operation": "insert"
   }
},
{
   "operation": "insert",
   "name": "Owner",
   "values": {
      "row": 2,
      "content": "Ответственный",
      "columnName": "MSPApplication.Owner",
      "dataValueType": Terrasoft.DataValueType.Lookup,
      "operation": "insert"
   },
   "parentName": "settings",
   "propertyName": "groupItems",
   "index": 2
}

И внешне колонка отобржается корректно, однако она некликабельна(не открывает
карточку физ. лица по нажатию).

Проблема в том, что в base-preview-page-controller.js выдает ошибку в базовом методе

onPreview: function(recordId, field) {
        var columnName = field.getName();
        var parentComponent = field.getParent();
        var parentModel;
        if (parentComponent && parentComponent.isDecorator) {
            parentComponent = parentComponent.getComponent();
            parentModel = (parentComponent && parentComponent instanceof Terrasoft.ViewField) ?
                parentComponent.getRecord().self : null;
        } else {
            parentModel = (parentComponent && parentComponent instanceof Terrasoft.ViewEmbeddedDetailItem) ?
                parentComponent.getRecord().self : null;
        }
        var model = parentModel || this.self.Model;
        var columnConfig = model.ColumnConfigs.get(columnName);
        Terrasoft.util.openPreviewPage(columnConfig.modelName, {recordId: recordId});
    },
из-за того, что columnConfig undefined.

Как настроить columnConfig? 

Нравится

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

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

scr_mobile_wizard_new_column.png

Зверев Александр,

     Александр, приведенный Вами пример относится к "встроенной детали"(через пункт меню "Настроить страницу" - добавить встроенную деталь)

     Мне же нужно добавить деталь в мастере, используя меню "Настроить детали". И в мастере можно  настроить только колонки для связи схем.

Поэтому gridPage и recordPage детали нужно настраивать программно.



 

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

я не нашел ни одного такого примера в базовом пакете Mobile,

поэтому и задал вопрос тут.

 

По ссылке была вообще статья по редактированию основной карточки раздела. По деталям, встроенным и обычным, есть соседняя статья.

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