Вопрос

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

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

Сайт развернут локально. Создаем деталь мобильного приложения через мастер, схемы создались - 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,
поэтому и задал вопрос тут.
 

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

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

При настройке раздела "Активности" основного рабочего места в мобильном приложении получаю ошибку при попытке открыть активность на просмотр в мобильном приложении. Когда там было 27 полей тогда выдавало ошибку что в сегменте не может быть больше 21 поля, после изменения до 21 поля пишет что не больше 13. так все же сколько можно использовать молей для активности (при этом в других разделах указывает ограничение 15 полей и с 15 полями все работает без ошибок). При этом в рабочем месте "Полевый продажи" мобильного приложения такого ограничения нет и там без ошибок отображается 27 полей.

 

У меня такой же вопрос

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

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

Данное сообщение означает что на карточку выведено 13 и более справочных полей.

К сожалению, протокол ODATA который используется для обмена данными между мобильным приложением и bpm'online накладывает такое ограничение.

Необходимо уменьшить количество справочных полей на карточке до 12. 

 

Гриценко Игорь,

А как реализовано это в полевых продажах? Если зайти на рабочее место полевых продаж в мобильном приложении - там все поля (больше 15) отображаются без ошибки.

Уменьшил до 12 полей - ошибка та же, при этом только в разделе "Активности" такая ошибка

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

Коллеги нужна помощь.

Хочу сделать деталь только читаемой и редактируемой, делаю следующим образом:
Создал модуль WaMobileRemoveDeleteActionModuleConfig
 

Terrasoft.sdk.Details.setChangeModes("OpportunityContact", "OpportunityContactDetailV2StandardDetail", 
		[Terrasoft.ChangeModes.Create, Terrasoft.ChangeModes.Update]);

В манифест добавил: http://prntscr.com/mkivke
Но при выполнении кода почему то не находит конфиг детали: http://prntscr.com/mkiwpg
Что делаю не так?

 

У меня такой же вопрос

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

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

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

Войдите или зарегистрируйтесь, чтобы комментировать