Добрый день!

 

Подскажите пожста, можно ли получить айди пользователя, который пытается удалить запись?

 

Хочу сделать логгирование, используя событийный слой. Можно ли с Entity вытянуть пользователя, что вызывает событие?

 

Спасибо!

Нравится

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

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

Как сделать так, чтобы переключение вкладок тоже происходило автоматически вместе со сменой статусов (шагов кейса)?

Нравится

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

Добрый день!

Подскажите, пожалуйста, можно ли каким-то образом включать и отключать бизнес-правила на странице через механизм Feature Toggle?

Попробовал вот так, не работает:

businessRules: /**SCHEMA_BUSINESS_RULES*/{
"vsDirectCalc": {
              	//Прямой расчет: Показывать элемент на странице
				"b9d8b16c-d477-45cc-acc6-5b0954b609cd": {
					"uId": "b9d8b16c-d477-45cc-acc6-5b0954b609cd",
					"enabled": {"bindTo": "Terrasoft.Features.getIsEnabled('vsTMA1418')"},	
					"removed": false,
					"ruleType": 0,
					"property": 0,
					"logical": 0,
					"conditions": [
						{
							"comparisonType": 3,
							"leftExpression": {
								"type": 1,
								"attribute": "ScTmaMechanic"
... и т. д.

 

Нравится

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

Добрый день.

 

Подобный подход не сработает, свойство enabled принимает только true или false, байндинги для него не работают (только если вопрос касается бизнес-правил).

 

К сожалению, на текущий момент, подобный подход через механизм Feature Toggle отсутствует.

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

Коллеги, добрый день
Есть потребность привязать старт Бизнес-Процесса к окончанию процедуры Импорта данных
С учетом того, что импорт может производиться в разные разделы (Контакты/Контрагенты/...) — нужно понимать, какой именно объект служил конечной точкой

Вопрос:
Подскажите, пожалуйста, можно ли на уровне Бизнес-процесса получить информацию о том, куда был совершен импорт файла? Есть ли в БД таблица, содержащая поле, в котором бы хранилось подобное значение?

Нравится

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

Всем доброго дня! 

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

Прикрепленные файлы

Нравится

4 комментария
              var activeViewName = this.getActiveViewName();
              if (activeViewName === this.get("AnalyticsDataViewName")) {
                this.sandbox.publish("SectionUpdateFilter",
                                     null, [this.getQuickFilterModuleId()]);
              }

Пробуйте запустить такой код после применения ваших фильтров

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

Можете отправить полный код, где делаете фильтр?

Трефилов Павел Сергеевич,

define("OrderSectionV2", ["ProcessModuleUtilities","BaseFiltersGenerateModule","css!UsrStylesOrderSectionV2"], function(ProcessModuleUtilities,BaseFiltersGenerateModule) {
	return {
		entitySchemaName: "Order",
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		attributes: {
            "UsrPPNumberFilter": {
                "dataValueType": Terrasoft.DataValueType.TEXT
            },
            "UsrPPNumbers": {
                "dataValueType": Terrasoft.DataValueType.TEXT,
                "values": ""
            },
			"UsrMyNumberFilter": {
                "dataValueType": Terrasoft.DataValueType.TEXT
            },
            "UsrMyNumbers": {
                "dataValueType": Terrasoft.DataValueType.TEXT,
                "values": ""
            },
			"UsrContrFilter": {
                "dataValueType": Terrasoft.DataValueType.TEXT
            },
            "UsrContr": {
                "dataValueType": Terrasoft.DataValueType.TEXT,
                "values": ""
            },
			"UsrNameFilter": {
                "dataValueType": Terrasoft.DataValueType.TEXT
            },
            "UsrMyName": {
                "dataValueType": Terrasoft.DataValueType.TEXT,
                "values": ""
            },
			"UsrQua": {
                "dataValueType": Terrasoft.DataValueType.INTEGER,
                "values": ""
            },
        },
		diff: /**SCHEMA_DIFF*/[	
			{
                "operation": "insert",
                "name": "MyFilterContainer",
                "parentName": "LeftGridUtilsContainer",
                "propertyName": "items",
                "index": 3,
                "values": {
                    "id": "MyFilterContainer",
                    "itemType": this.Terrasoft.ViewItemType.CONTAINER,
                    "items": [],
 
                }
            },
 
 
			{
                "operation": "insert",
                "parentName": "MyFilterContainer",
                "propertyName": "items",
                "name": "PP_Number",
				"index": 1,
                "values": {
                    "bindTo": "UsrPPNumberFilter",
                    "caption": {"bindTo": "Resources.Strings.UsrPPNumberCaption"},
 
					"controlConfig": {
                        "change": {
                            "bindTo": "ppNumChanged"
                        }
                    }
 
                }
            },
 
			{
					"operation": "insert",
					"parentName": "MyFilterContainer",
					"propertyName": "items",
					"name": "DeleteButton1",
					"index": 2,
					"values": {
						"itemType": Terrasoft.ViewItemType.BUTTON,
						"caption": "",
						"imageConfig": {"bindTo": "Resources.Images.del_but"},
						"controlConfig": {
						},
						"layout": {
							"column": 0,
							"row": 2,
							"colSpan": 1
						},
						"click": { "bindTo": "onDel" },
					}
			},
			{
                "operation": "insert",
                "parentName": "MyFilterContainer",
                "propertyName": "items",
                "name": "my_Number",
				"index": 3,
                "values": {
                    "bindTo": "UsrMyNumberFilter",
                    "caption": {"bindTo": "Resources.Strings.myNumber"},
 
					"controlConfig": {
                        "change": {
                            "bindTo": "myNumberChanged"
                        }
                    }
 
                }
            },
			{
					"operation": "insert",
					"parentName": "MyFilterContainer",
					"propertyName": "items",
					"name": "DeleteButton2",
					"index": 4,
					"values": {
						"itemType": Terrasoft.ViewItemType.BUTTON,
						"caption": "",
						"imageConfig": {"bindTo": "Resources.Images.del_but"},
						"controlConfig": {
						},
						"layout": {
							"column": 0,
							"row": 2,
							"colSpan": 1
						},
						"click": { "bindTo": "onDel2" },
					}
			},
			{
                "operation": "insert",
                "parentName": "MyFilterContainer",
                "propertyName": "items",
                "name": "my_Contr",
				"index": 5,
                "values": {
                    "bindTo": "UsrContrFilter",
                    "caption": {"bindTo": "Resources.Strings.myContr"},
 
					"controlConfig": {
                        "change": {
                            "bindTo": "myContrChanged"
                        }
                    }
 
                }
            },
			{
					"operation": "insert",
					"parentName": "MyFilterContainer",
					"propertyName": "items",
					"name": "DeleteButton3",
					"index": 6,
					"values": {
						"itemType": Terrasoft.ViewItemType.BUTTON,
						"caption": "",
						"imageConfig": {"bindTo": "Resources.Images.del_but"},
						"controlConfig": {
						},
						"layout": {
							"column": 0,
							"row": 2,
							"colSpan": 1
						},
						"click": { "bindTo": "onDel3" },
					}
			},
			{
					"operation": "insert",
					"parentName": "MyFilterContainer",
					"propertyName": "items",
					"name": "PeriodSelectButton",
					"index": 7,
					"values": {
						"itemType": Terrasoft.ViewItemType.BUTTON,
						"caption": "",
						"imageConfig": {"bindTo": "Resources.Images.LookupIcon"},
						"controlConfig": {
						},
						"layout": {
							"column": 0,
							"row": 2,
							"colSpan": 1
						},
						"click": { "bindTo": "openMyLook" },
					}
			},
			{
                "operation": "insert",
                "parentName": "MyFilterContainer",
                "propertyName": "items",
                "name": "my_Name",
				"index": 8,
                "values": {
                    "bindTo": "UsrNameFilter",
                    "caption": {"bindTo": "Resources.Strings.myName"},
 
					"controlConfig": {
                        "change": {
                            "bindTo": "myNameChanged"
                        }
                    }
 
                }
            },
			{
					"operation": "insert",
					"parentName": "MyFilterContainer",
					"propertyName": "items",
					"name": "DeleteButton4",
					"index": 9,
					"values": {
						"itemType": Terrasoft.ViewItemType.BUTTON,
						"caption": "",
						"imageConfig": {"bindTo": "Resources.Images.del_but"},
						"controlConfig": {
						},
						"layout": {
							"column": 0,
							"row": 2,
							"colSpan": 1
						},
						"click": { "bindTo": "onDel4" },
					}
			},
 
        ]/**SCHEMA_DIFF*/,
 
		methods: {
 
		clearFilter: function() {
			this.set("UsrPPNumberFilter", "");
			this.onUsrFilterChanged();
		},
 
		onUsrFilterChanged: function() {
			this.reloadGridData();
		},
 
		initQueryFilters: function(esq) {
			this.callParent(arguments);
			//номер в пп
			var usrEmailFilter = this.get("UsrPPNumbers");
			if (usrEmailFilter) {
				esq.filters.add("UsrPPNumberFilter", this.Terrasoft.createColumnFilterWithParameter(
					this.Terrasoft.ComparisonType.CONTAIN, "UsrNumberInPP".substring(), usrEmailFilter));
			} else {
				esq.filters.removeByKey("UsrPPNumberFilter");
			}		
 
			//Номер
			var usrMyFilter = this.get("UsrMyNumbers");
			if (usrMyFilter) {
				esq.filters.add("UsrMyNumberFilter", this.Terrasoft.createColumnFilterWithParameter(
					this.Terrasoft.ComparisonType.CONTAIN, "Number".substring(), usrMyFilter));
			} else {
				esq.filters.removeByKey("UsrMyNumberFilter");
			}
			//Контрагент
			var usrContrFilter = this.get("UsrContr");
			if (usrContrFilter) {
				esq.filters.add("UsrContrFilter", this.Terrasoft.createColumnFilterWithParameter(
					this.Terrasoft.ComparisonType.CONTAIN, "Account.Name".substring(), usrContrFilter));
			} else {
				esq.filters.removeByKey("UsrContrFilter");
			}
			//Название
			var usrNameFilter = this.get("UsrMyName");
			if (usrNameFilter) {
				esq.filters.add("UsrNameFilter", this.Terrasoft.createColumnFilterWithParameter(
					this.Terrasoft.ComparisonType.CONTAIN, "UsrName".substring(), usrNameFilter));
			} else {
				esq.filters.removeByKey("UsrNameFilter");
			}
 
 
		},
 
		ppNumChanged: function(a, b, c) {
			this.set("UsrPPNumbers", a);
			this.onUsrFilterChanged();
 
		},
 
		myNumberChanged: function(a, b, c) {
			this.set("UsrMyNumbers", a);
			this.onUsrFilterChanged();
		},
 
		myContrChanged: function(a, b, c) {
			this.set("UsrContr", a);
			this.onUsrFilterChanged();
		},
 
		myNameChanged: function(a, b, c) {
			this.set("UsrMyName", a);
			this.onUsrFilterChanged();	
		},
 
		addCallBack: function(args) {
		  this.selectedRows = args.selectedRows.getItems();
 
			var ids = [];
			var names = [];
			this.selectedRows.forEach(function(item) {
				ids.push(item.Id);
				names.push(item.Name);
		   });
			this.set("UsrContr",names);
			document.getElementById('OrderSectionV2my_ContrTextEdit-el').value = names;
			document.getElementById('OrderSectionV2my_ContrTextEdit-el').focus();
			document.getElementById('OrderSectionV2my_ContrTextEdit-el').blur();
		},
 
 		openMyLook: function(){
			var config = {
				entitySchemaName: "Account",
				columns: ["Name"]
			};
			this.openLookup(config, this.addCallBack, this);
		},
		onDel: function(){
			document.getElementById('OrderSectionV2PP_NumberTextEdit-el').value = null;
			this.set("UsrPPNumberFilter", "");
			this.onUsrFilterChanged();
		},
		onDel2: function(){
			document.getElementById('OrderSectionV2my_NumberTextEdit-el').value = null;
			this.set("UsrMyNumberFilter", "");
			this.onUsrFilterChanged();
		},
		onDel3: function(){
			document.getElementById('OrderSectionV2my_ContrTextEdit-el').value = null;
			this.set("UsrContrFilter", "");
			this.onUsrFilterChanged();
		},
		onDel4: function(){
			document.getElementById('OrderSectionV2my_NameTextEdit-el').value = null;
			this.set("UsrNameFilter", "");
			this.onUsrFilterChanged();
		},
 
		}
	};
});

 

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

Привет!
 

При синхронизации в оффлайн режиме не импортируются значения колонок одного из объектов. При чем данная проблема воспроизводится только при синхронизации непосредственно из самого мобильного устройства (версия приложения на устройстве 7.17.3). 
При синхронизации с эмулятора все работает корректно.

Колонки объекта и их настройка синхронизации в манифесте:

Ловлю запрос в профайлере при синхронизации с эмулятора:

Ловлю запрос при синхронизации с приложения на мобильном устройстве:

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

Нравится

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

Привет!

 

Мы сталкивались с подобным кейсом. Проблема была в том, что был задублированный в одном из манифестов  объект импорта. В итоге, при слиянии манифестов в результирующем конфиге присутствовали две настройки импорта для одного объекта. Один с дополнительными колонками, второй - нет. Брался второй конфиг при формировании запроса к серверу.

 

Привет!

 

Мы сталкивались с подобным кейсом. Проблема была в том, что был задублированный в одном из манифестов  объект импорта. В итоге, при слиянии манифестов в результирующем конфиге присутствовали две настройки импорта для одного объекта. Один с дополнительными колонками, второй - нет. Брался второй конфиг при формировании запроса к серверу.

 

Зезюков Сергей Aлександрович,

Спасибо, действительно в одном из пакетов в манифесте был дубль объекта SupplyPaymentTemplate

Показать все комментарии
Работаю с FastReport (Создание провайдера данных отчета) и возник вопрос. 
Как найти Guid entitySchemaUId? 
В примере который есть (Знаменательные события контакта(пример)) указано 
private readonly Guid _contactEntitySchemaUId = new Guid("41af89e9-750b-4ebb-8cac-ff39b64841e");

Когда, создаю по примеру, то требуется поменять Guid, то откуда беру (из объекта к прим.: (0/ClientApp/#/EntitySchemaDesigner/41af89e9-750b-4ebb-8cac-ff39b64841ec) не правильно, т.к. при попытке печати отчета выходит ошибка неполадки сервера

Нравится

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

Добрый день.

 

Получить UId схемы можно запросом из таблицы:

select UId
from SysSchema
where Caption = N'<Заголовок схемы>'

 

Добрый день.

 

Получить UId схемы можно запросом из таблицы:

select UId
from SysSchema
where Caption = N'<Заголовок схемы>'

 

SQL:

select UId
from SysSchema
where Name = 'Contact' and ExtendParent = 0

C#:

UserConnection.EntitySchemaManager.GetInstanceByName("Contact").UId

 

Алла Савельева, 

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

Владислав Литвинчук,
привет , а что будет самым базовым объектом для Lead , я перебирал буквально каждый , но не с одним фаст репорт не заработал, просто выдает ошибку загрузки и все, хотя в примере из академии на объекте контакта все норм

Где ExtendParent = 0, как в моем запросе выше.

Владислав Литвинчук,

проставила вместо 0 false, иначе выдавал ошибку 
Он выдал две записи, какую все же из них следует выбрать?

Анастасия Демидова,

0 - MS, false - Postgre скорее всего.
Данный запрос не может выдать 2 записи. В системе сожет быть только 1 схема объекта без наследования.
Можно скриншот запроса и результата выборки?

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

Добрый день!

Подскажите название таблицы в базе данных в которой сохраняются e-mail сообщения (тема, текст письма и прикрепленные файлы).

Нравится

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

таблица Activity, а прикрепленные файлы - соответственно в таблице ActivityFile

таблица Activity, а прикрепленные файлы - соответственно в таблице ActivityFile

Спасибо!

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

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

 

Столкнулся с проблемой при настройке синхронизации с почтой. У меня продукт ServiceEnterprise. Сервис ExchangeListener настроен согласно инструкции на академии (все необходимые фичи включены, почтовый сервер настроен). На версии 7.17.1 все отлично работает, как IMAP/SMTP, так и Exhange сервера. Проблема в том, что на версии 7.17.2, 7.17.3 при настройке почтового ящика получаю ошибку 

 

 

В логах приложения следующее: 

2021-04-07 09:54:53,829 [255] WARN IIS APPPOOL\SE_7173 IsServerValid - Mailbox ********* didn't pass validation with these credentials, info: Sending test message: The remote server returned an error: (404) Not Found.

 

Перепробовал разные почтовые ящики - ошибка одинаковая. Может на этих версиях приложения нужно выполнить дополнительные настройки? Подскажите куда копать, что проверить. Спасибо.

 

Нравится

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

Паламарчук Максим Олегович,

Попробуйте, пожалуйста, поставить новую версию сервиса ("переразвернуть" helm-пакет). Сейчас версия 0.8.26.

У вас слишком она старая.

У нас была похожая ситуация (на почте zimbra). Помогло сменить порт SMTP на 465 в настройках почтовых провайдеров

Владимир Соколов, спасибо за ответ, но проблема не в этом.

проверил настройки - 465-й порт уже был выбран,

 

 

Максим, здравствуйте! 

 

Ваше приложение находится в облаке или расположен на ваших серверах (on-site)?

Пробовали ли добавить ukr.net почту с такими параметрами, например, Outlook или The Bat?

 

Проблема с любым почтовым провайдером или только ukr.net? Пробовали добавить Gmail?

 

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

Дмитрий, здравствуйте!

 

Приложение он-сайт.

 

У меня есть несколько почт - ukr.net(провайдер imap) и корпоративная(провайдер exchange). Все работают на версии 7.17.1. На версиях 7.17.2 и 3 с идентичними настройками провайдеров и ящиков ни одна не работает.

 

Я пинговал подписки листенеров микросервиса (адрес сервера)/api/listeners/status - там есть подписки от сайта 7.17.1, а от более новых версий - нет.

 

Также открывал страницу диагностики - там все верно настроено

 

Паламарчук Максим Олегович,

Попробуйте, пожалуйста, поставить новую версию сервиса ("переразвернуть" helm-пакет). Сейчас версия 0.8.26.

У вас слишком она старая.

Дмитрий,

 

спасибо попробую

Дмитрий,

 

действительно на новом сервисе все взлетело. Спасибо большое!

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

Всем доброго дня! Подскажите можно ли как-то отфитровать список  в "Фильтры/группы" - "Добавить условие" ? Изменение поведения в Объекте на режим "Никогда" не подходит(нужно видеть фильтры в расширенном режиме). 

Нравится

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

Анастасия, в каждом разделе системы отображение первого поля при быстром поиске заложено в параметре PRIMARY_DISPLAY_COLUMN (Отображаемое значение). Например, для раздела Контакты это поле [ФИО].
В быстром фильтре указывать приоритетность отображения полей нет возможности. Перечень заложен на уровне конфигурации приложения и пользовательскими средствами решить задачу нет возможности.
На практике для фиксирования определенных полей для фильтрации используются быстрые фильтры - это фильтр, который внедряется на страницу раздела средствами разработкой и помогает закрепить несколько полей в шапке раздела для удобного указания параметров фильтрации.
Однако данный вариант также предполагает использование средств разработки. Более детальнее описано в статье по ссылке: https://academy.terrasoft.ua/docs/developer/elements_and_components/bas…

Алёна Доля,

Хотелось бы отредактировать значения именно в базовом списке, 

в "Фильтры/группы" - "Добавить условие" и повыкидывать оттуда не нужные поля. 

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