установка
ошибка
sales_enterprise

При запуске приложения всплывает такая ошибка. Собственно, как это фиксить? (установка была выполнена согласно туториалу по установке приложения on-site)Изображение удалено.

Нравится

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

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

Судя по ошибке проблема с redis, либо указаны некорректно параметры подключения, либо нет доступа к нему.

Рекомендую обратиться в тех. поддержку Террасофт - support@terrasoft.ru

 

Показать все комментарии
бизнес-процесс
7.11
sales_enterprise

Можно ли как-то продолжить двигаться по процессу после ошибки? В автоматическом или ручном режимах (в журнале процессов)?

Например, не сохранились данные в элементе "добавить данные", допустим, это не критично, можно ли продолжить процесс?

Нравится

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

Добрый день, Алексей!



В момент возникновения ошибки экземпляр процесса фиксирует текущее состояние.



Если устранить источник проблемы и повторно выполнить элемент с ошибкой в журнале процессов - БП продолжит выполнение.



Если ошибка возникает на уровне БД (блокировка транзакции, дедлок) возможен риск потери служебных данных. В таком случае продолжить экземпляр процесса не представляется возможным.



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

Показать все комментарии
7.11
sales_enterprise
День добрый!
Подскажите, пожалуйста, способ которым можно получить пароль пользователя.
Именно ту строку, которую вводит пользователь при входе в систему, а не хэш.

 

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

Нравится

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

Здравствуйте, Юрий!

Получить не хэшированный пароль нельзя.

Можно выгрузить хэша пароля, но раскодировать его нельзя.

Добавить комментарий

Shevchenko Andrey,

Спасибо

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

Коллеги, интересует можно ли ограничить доступ к bpm только по внутренней сети и вывести field sales в открытый доступ?

 

Нравится

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

Если приложение не будет доступно по внешнему адресу, мобильное приложение не сможет синхронизироваться с БД.

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

Добрый день!

Есть БП с текстовым параметром (TextResult), целочисленным параметром (IntResult), идентификатор (AccountId). В БП я задаю им определенные значения, явно отличные от пустой строки, нуля и пустого Guid. После выполнения БП я хочу получить результирующее значение любого параметра.

Пробовал как указано на академии Get запрос делать прямо в строке браузера http://localhost:8082/0/ServiceModel/ProcessEngineService.svc/TestProce…

ответ: http://schemas.microsoft.com/2003/10/Serialization/">null     ---- null, вместо текста который должен был быть результатом.

на запрос http://localhost:8082/0/ServiceModel/ProcessEngineService.svc/TestProce…получаю ответ http://schemas.microsoft.com/2003/10/Serialization/">0   ---- опять ноль, хотя указывал разные целые числа

ну и для Guid ответ http://schemas.microsoft.com/2003/10/Serialization/">"00000000-0000-0000-0000-000000000000"  --- снова ноль.

НО входящие значения параметров БП применяются и всё отлично.

Что за ньюанс такой, кто ведает прошу поделиться знаниями.

Может "Параметр процесса, который хранит результат выполнения процесса" (взято из академии) как-то нужно пометить в БП?

Изображение удалено.

 

Изображение удалено.

 

Нравится

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

Добрый день, 

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

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

Tsopa,

Все верно спасибо.

Tsopa,

а что делать если процесс не компилируется (7.15.3) и в процессе не используется элемент задание-сценарий?

Сейчас используют интерпретируемые процессы, компилируемые остались только старые. А в интерпретируемых возврат значения не предусмотрен. Для обмена информацией либо писать в какую-то таблицу, а потом извне читать по OData, либо вызывать в самом БП веб-сервис системы, с которой идёт интеграция.

Показать все комментарии
Бизнес-процессы
7.11
sales_enterprise

Всем привет, подскажите как сделать цикл в бизнес процессе?

Задача пробежаться по всем лидам и на каждой итерации выполнить некую логику

Нравится

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

Ну, не знаю что конкретно Вы хотите сделать, но можно создать булевое поле, Читать количество записей, где это поле = false, если такие записи найдены, то выполняете свою логику и ставите в это поле true. Опять идет читка данных из лидов, если опять найдены такие лиды где false - отрабатывает та же логика. Если записей не найдено. завершаете процесс. Надеюсь чем-то помог.

 

Можно сделать блок БП «скрипт» и в С#-коде написать GetEntityCollection, а затем по результату foreach-циклом, как в примере №4 тут.

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

Товарищи спасибо

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

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

Нравится

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

Bind Visible по условию чем плох?

Добрый вечер.

Создаете Ext класс, например, "Terrasoft. TextEdit"

Ext.create("Terrasoft. TextEdit", {...})

 – примеры можно поискать в коробке. Потом находите компонент, в который хотите добавить новый элемент

var cmp = Ext.getCmp()

В полученном компоненте в свойство items добавляете его

cmp.items.add(«новий компонент»)

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

cmp.reRender()

 

VladKapitanchyk,

Добрый день. Мне надо после загрузки вкладки добавить.

Пример.

{
		"operation": "insert",
		"name": "Tab4040b433TabLabelGridLayoutef7de6d2",
		"values": {
			"itemType": 0,
			"items": [],
			"afterrender": {
				"bindTo": "loadWidgetModule"
			},
			"afterrerender": {
				"bindTo": "loadWidgetModule"
			}
		},
		"parentName": "Tab4040b433TabLabelGroup9e196572",
		"propertyName": "items",
		"index": 0
	},
loadWidgetModule: function (config) {
				debugger;
 
				var cmp =Ext.getCmp("UsrUsrVwSysAccountLog1PageTab4040b433TabLabelGridLayoutef7de6d2GridLayout");// Ext.getCmp("Tab4040b433TabLabelGridLayoutef7de6d2");
				// this.addFields();
				var labelConfig = Ext.create("Terrasoft.Container", {
					id: "headerContainer",
					items: [
						{
							className: "Terrasoft.Label",
							id: "headerLabel",
							selectors: {
								wrapEl: "#headerLabel"
							},
							caption: "Изменение полей",
 
						}
					]
				});
				 cmp.items.add(labelConfig);
				 cmp.reRender();
			},

но при добавлении элемента (items.add) ошибка  message: Uncaught Terrasoft.ArgumentNullOrEmptyException: Несуществующий или пустой аргумент  в render

Евгений Волоцкой,

В контейнер нужно тоже передавать объект Ext -Ext.create("Terrasoft.Label"…)

Показать все комментарии
Открытие страницы раздела
Загрузка модуля
7.11
sales_enterprise

Добрый день.

Есть задача добавлять в продукт сопряженные продукты (нечто вроде матрицы). При этом есть требование, чтобы при добавлении сопряженных продуктов были доступны все способы фильтрации и поиска - как в разделе Продукты (в том числе, Группы и Каталог). В связи с этим было принято решение создать страницу CrossProductSectionV2, унаследованную от ProductSectionV2. Эта страница открывается при нажатии нужной копки на странице ProductPageV2. Пробовали два подхода к открытию, но оба сопряжены с определенными проблемами. 

1. Через this.sandbox.loadModule

			addProductsExtended: function() {
				/// <summary>Открывает раздел продуктов для выбора и добавления в матрицу.</summary>
				var parameters = {
					viewModelConfig: {
						NrbBaseProduct: this.getBaseProduct()
					}
				};
 
				var instanceConfig = {
					schemaName: "CrossProductSectionV2",
				    isSchemaConfigInitialized: true,
				    entitySchemaName: "Product",
				    useHistoryState: true,
				    isSeparateMode: true,
				    isInChain: true
				};
				var config = {
					renderTo: "centerPanel",
				    id: this.getCrossProductSectionModuleId(),
				    instanceConfig: instanceConfig,
				    parameters: parameters,
				    keepAlive: true
				};
 
				this.sandbox.loadModule("SectionModuleV2", config); 
 
			},
 
			getCrossProductSectionModuleId: function() {
				/// <summary>Формирует идентификатор модуля для добавления продуктов в матрицу.</summary>
				return this.sandbox.id + "_CrossProductSectionV2";
			},
 
			getBaseProduct: function() {
				/// <summary>Вовзращает идентиификатор базового продукта для матрицы.</summary>
				var value = this.get("Id") || this.get("PrimaryColumnValue");
				var displayValue = this.get(this.primaryDisplayColumnName);
				var baseProduct = {
					value: value,
					displayValue: displayValue
				};
				return baseProduct;
			}

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

Немного некорректно отображается содержимое GridUtilsContainer (съедена верхняя часть), также показан какой-то toggle при нажатии на который - чистый лист (хеш при этом сменяется на что-то невразумительное - без имени страницы ProductPageV2)

Изображение удалено.

 

 

Изображение удалено.

 

Ровно то же самое происходит и при нажатии кнопки Закрыть - разве что toggle также исчезает

Изображение удалено.

На кнопку Закрыть в CrossProductSectionV2 повешен простой обработчик

			onCloseButtonCustomClick: function() {
				/// <summary>Обработчки нажатия на кнопку Закрыть.</summary>
 
				this.sandbox.publish("BackHistoryState");
			},

 

2. Другой способ открытия - через PushHistoryState

			addProductsExtended: function() {
				/// <summary>Открывает раздел продуктов для выбора и добавления в матрицу.</summary>
				var parameters = {
					viewModelConfig: {
						NrbBaseProduct: this.getBaseProduct()
					}
				};
				var stateObj;
				var requestUrl;
		  		var params = this.sandbox.publish("GetHistoryState");
				stateObj = {
					schemaName: "CrossProductSectionV2",
				    isSchemaConfigInitialized: true,
				    entitySchemaName: "Product",
				    useHistoryState: true,
				    isSeparateMode: true,
				    isInChain: true,
				    parameters: parameters,
				    id: this.getCrossProductSectionModuleId()
				};
				requestUrl = "SectionModuleV2/CrossProductSectionV2";
 
				this.sandbox.publish("PushHistoryState", {
					hash: requestUrl,
					stateObj: stateObj
				});
			},

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

Также Закрытие, в случае если, открывались и закрывались Группы и/или Расширенная фильтрация произойдет только после n-го нажатия на кнопку Закрыть, где n - число раз когда открывали Группы или Расширенную фильтрацию.

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

Нравится

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

Что в это время отображается в консоли и на панели Network? Все запросы корректны? Ошибок никаких нет?

Да, все запросы корректны, ошибок в консоли не наблюдается. Есть только предупреждения при открытии CrossProductSection, что на скрине

Можно ещё третий подход: сделать в разделе продуктов действие «Сопрячь» с выбором нескольких записей. Выбираете два продукта, пользуясь группами, каталогом и прочим, затем запускаете действие, а оно создаёт запись в объекте детали связи многих ко многим одного продукта с другим.

Александр, спасибо за ответ. Эту задачу на текущий момент решили способом 2, устранив вот этот момент

Также Закрытие, в случае если, открывались и закрывались Группы и/или Расширенная фильтрация произойдет только после n-го нажатия на кнопку Закрыть, где n - число раз когда открывали Группы или Расширенную фильтрацию.

Устранили путем переопределения пары методов на пустые

			removeCardHistoryState: Terrasoft.emptyFn,
 
			setInitialHistoryState: Terrasoft.emptyFn,

Но дальше  - больше. Теперь хотят, чтобы во всех местах, где есть lookup поля Продукт - была возможность поиска по группам и Каталогу. А если пойти еще далее, то, пожалуй, во всех справочниках, по которым в системе зарегистрирован раздел, чтобы была возможность отображать группы с возможностью управления через lookupListConfig - по аналогии с действиями, которые можно скрыть, указав hideActions: true. Но это уже, пожалуй, идея для будущих улучшений продукта.

Орленко Андрей Николаевич пишет:

Теперь хотят, чтобы во всех местах, где есть lookup поля Продукт - была возможность поиска по группам и Каталогу. А если пойти еще далее, то, пожалуй, во всех справочниках, по которым в системе зарегистрирован раздел, чтобы была возможность отображать группы с возможностью управления через lookupListConfig - по аналогии с действиями, которые можно скрыть, указав hideActions: true. Но это уже, пожалуй, идея для будущих улучшений продукта.

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

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

Добрый день! Интересует вопрос, можно ли как-то скрыть всплывающее окно\заменить текст сообщения в случае, если при выполнении чек-ина координаты представителя превышают допустимый радиус. В противном случае представитель будет знать, что его геопозиция фиксируется, а этого хотелось бы избежать.

Нравится

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

Иван, здравствуйте!

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

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

Либо вариант, сделать действие "Чек-ин" обязательное (делается через справочник "Правила полевых продаж" - http://prntscr.com/jjhv8n.

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

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

Столкнулся с такой проблемой:

Формируем запрос к БД через ESQ - http://prntscr.com/jj0e03

далее делаем выборку из сформированной коллекции - http://prntscr.com/jj0efz

Однако при выборке вылетает ошибка - http://prntscr.com/jj0et9

Смотрим как сформировался SQL  - http://prntscr.com/jj0fa1

При этом var esqSmsStatus = esq.AddColumn("SmsStatus").Name; равно http://prntscr.com/jj0ka4

Кто с таким сталкивался? Прошу помочь.

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

Нравится

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

Недавно вроде отвечал на подобный вопрос. Попробуйте esq.AddColumn("SmsStatus.Id").Name. 

Чисто опытным путём было выяснено, что простые колонки и колонки, до которых можно просто добраться (пример: колонка Status, справочная. добавляем в запрос - esq.AddColumn("Status"). берём в результатах - p.GetTypedColumnValue<Guid>("StatusId") или p.GetTypedColumnValue<string>("StatusName")). Грубо говоря имеет смысл обозначать через Name только сложные пути, а-ля "Lead.QualifiedContact.Department.Name"

Варфоломеев Данила,

Благодарю!

В серверном коде при работе с этой функцией перед Id нет точки:

Page.DataSource.ActiveRow.GetTypedColumnValue&lt;Guid&gt;("AccountId"));

Отображаемое значение справочного поля тоже получается без точки:

entity.GetTypedColumnValue&lt;string&gt;("FacilityName");

 

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