Доброго времени суток коллеги. Имею проблему. Есть филиалы(подразделы) и в зависимости, какой сотрудник создает контакт, в контакте в поле "Подразделения" нужно поставить "Подразделения" этого сотрудника. У меня несколько вопросов на счет этого. 

Уточнения  некоторых моментов:
      Во-первых) Чтобы сотруднику указать филиал где он работает. Я создал контакт, после создал сотрудника через этот контакт. Далее сделал справочное поле подразделения, и указал пару филиалов выбрал скажем "Новосибирск". 
     Во-вторых) Но я в демо версии видел, что такие филиалы существуют и в пользователи и администрирование в  "функциональные роли" и там создают эти филиалы как подразделения. 
Теперь вопрос: 
1) В первом случае этого достаточно чтобы у сотрудника выделялся филиал как "Новосибирск"? Если да, то   какой код прописать чтобы решить данную задачу или  схему БП.
2) Если нужно чтобы как во втором случае, прощу описать более подробно чтобы в дальнейшем не возникло проблем.
p.s(у меня версия 7.13 finance services) Спасибо.

Нравится

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

Доброго времени суток коллеги. Имею справочник "Тип документа", при выборе определенного значения в логическом поле "Резидент" нужно автоматический проставляться галочка.

 Попробовал через this.set("UsrTypeDoc").value, не получается. Прощу направить на верный путь. Спасибо

Нравится

6 комментариев
Лучший ответ
Если я вас правильно понял, вы хотите при изменении значения в поле "Тип документа" == "Биом паспорт"
Установить в поле Резидент = true, в противном случае false
 
Если так, то решение для вас будет такое:
 
В атрибутах:
UsrTypeDoc: {
	dataValueType: Terrasoft.DataValueType.LOOKUP,
	dependencies: [
		{
			columns: ["UsrTypeDoc"],
			methodName: "onChangeUsrTypeDoc"
		}
	]
},
 
в методах:
 
onChangeUsrTypeDoc: function() {
	var type = this.get("UsrTypeDoc");
	if (type && type.value === "уникальнынй идентификатор из БД равный значению Биом паспорта")
	{
		this.set("Резидент(указать на англ)", true);
	}
	else
	{
		this.set("Резидент(указать на англ)", false);
	}
}
 
 
Если же вы хотите при установке в поле Резидент галочки, изменить поле "Тип документа".
 
То решение будет аналогичным, но в обратном виде:
Резидент(указать на англ): {
	dataValueType: Terrasoft.DataValueType.BOOLEAN,
	dependencies: [
		{
			columns: ["Резидент(указать на англ)"],
			methodName: "onChangeResident"
		}
	]
},
 
в методах:
 
onChangeResident: function() {
	var resident = this.get("Resident");
	if (resident)
	{
		this.set("UsrTypeDoc", {value: "здесь ID из БД которое равно Биом паспорту", displayValue: "а здесь значение поля Name из БД"});
	}
	else
	{
		//очистить или установить другое значение, смотря что нужно в данном случае
	}
}

 

Если я вас правильно понял, вы хотите при изменении значения в поле "Тип документа" == "Биом паспорт"
Установить в поле Резидент = true, в противном случае false
 
Если так, то решение для вас будет такое:
 
В атрибутах:
UsrTypeDoc: {
	dataValueType: Terrasoft.DataValueType.LOOKUP,
	dependencies: [
		{
			columns: ["UsrTypeDoc"],
			methodName: "onChangeUsrTypeDoc"
		}
	]
},
 
в методах:
 
onChangeUsrTypeDoc: function() {
	var type = this.get("UsrTypeDoc");
	if (type && type.value === "уникальнынй идентификатор из БД равный значению Биом паспорта")
	{
		this.set("Резидент(указать на англ)", true);
	}
	else
	{
		this.set("Резидент(указать на англ)", false);
	}
}
 
 
Если же вы хотите при установке в поле Резидент галочки, изменить поле "Тип документа".
 
То решение будет аналогичным, но в обратном виде:
Резидент(указать на англ): {
	dataValueType: Terrasoft.DataValueType.BOOLEAN,
	dependencies: [
		{
			columns: ["Резидент(указать на англ)"],
			methodName: "onChangeResident"
		}
	]
},
 
в методах:
 
onChangeResident: function() {
	var resident = this.get("Resident");
	if (resident)
	{
		this.set("UsrTypeDoc", {value: "здесь ID из БД которое равно Биом паспорту", displayValue: "а здесь значение поля Name из БД"});
	}
	else
	{
		//очистить или установить другое значение, смотря что нужно в данном случае
	}
}

 

С точки зрения дальнейшей поддержки правильнее сделать в справочнике "тип документа" логическое поле "резидент". Затем создать БП (в 7.17 такое уже есть). Пример тут. У меня поля "Комплект" - логическое.

Литвинко Павел,

Спасибо

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

У меня версия 7.13

Трефилов Павел Сергеевич,Где  можно посмотреть пример?

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

Доброго времени суток коллеги. Как поставить значение по умолчанию в справочнике, так чтобы можно было поменять вручную. Имею контакт "Должность" - "Разработчик".

Мне нужно чтобы во всех случаях стояло "Маркетолог". И менять этот параметр когда будет надобно, то есть чтобы он был не заблокирован.  Тут  описан способ, но я не понял куда нужно вписать  "Reserved" . Прощу помощи, спасибо

Нравится

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

Установить константу. И выбираешь из списка.

Значение по умолчанию

Установить константу. И выбираешь из списка.

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

Доброго времени суток коллеги. Столкнулся со следующей проблемой. При добавлении справочного поля в раздел "Обращении", возникает следующая ошибка(рис.1)

                                                             рис.1

При этом ошибка возникает, и с помощью мастера раздела и через конфигурационным(замещающим) способом. Прощу помощи, так как не смог найти ответа в интернете. Спасибо

Нравится

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

Хороший вопрос и что вы предлагаете анализировать? Приложите хотя бы код карточки.

та же самая ошибка при попытке публикации замещающего объекта "Case" (добавил логическое поле и пытаюсь публиковать но наверху красным цветом пишется этот же текст ошибки красным цветом)

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

Код карточки обращений. Если не получается через мастер, добавьте руками в код карточки.

Полозюков Евгений Петрович пишет:
Если не получается через мастер добавьте руками в код карточки. 

 Так и там не могу добавить объект при публикации появляется ошибка "Invalid parameter binding"

Ислам Ибрагимжанов,

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

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

Ислам Ибрагимжанов,

Пишите в поддержку.

Полозюков Евгений Петрович,

Благодарю за уделенное время.

Ислам Ибрагимжанов,

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

 

Я так понимаю Вы используйте Oracle.
Такие проблемы могут быть при использовании 12-й версии ODAC.

 

Обходное решение - использовать ODAC v.11 :
1) Удалить ODAC v.12 
2) Установить ODAC v.11 x64
3) Если ошибка сохранится, установить ODAC v.11 x32, в свойствах пула приложения установить "Enable 32-bit applications" в "true", проверить кейс.

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

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

Но как создать на C# (не в бизнес процессе) уведомление без этой ссылки, как это реализовано например у уведомлений об синхронизации с LDAP?

Нравится

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

Создаете в с# в таблице Remindings запись, вот и будет вам текст без ссылки. Откройте таблицу Remindings и посмотрите запись у которой дата 24.02.2021 в 17:57 и увидите какие поля должны быть заполнены чтобы получить такое уведомление.

Именно туда и ложил, потому что все уведомления там лежат только с указанием разных типов. Пробовал и такой способ   и такой . Смотрел в таблице "Reminding" как реализовано уведомление что на скрине, но без указания раздела его пользователь просто не видит, а с указанием делает гиперссылкой 

Александр Тыра,

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

Полозюков Евгений Петрович, скрин всех полей не поместятся. Я так понимаю Вам нужны какие-то определенные поля что бы посмотреть?

Александр Тыра,

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

А исходные данные мне нужны чтобы понять куда вы смотрите и почему разницу не видите.

Данные из бд можно работая в SQL Server Management Studio  выгрузить в csv, можно выделить и скопировать в excel.

Выгрузите записи таблицы Reminding в файл, удалите все строки кроме двух, одна с правильным уведомлением, вторая с созданным вами.

И приложите свой c# код создания уведомления и файл с двумя записями из Reminding.

От

Полозюков Евгений Петрович,

Ответ простой - в 7.13 нельзя создать уведомление без ссылки, потому это поправили в более поздних версиях

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

Есть анонимный веб сервис(разработанный мной). Спустя примерно пол часа после последнего обращения к нему новый запрос обрабатывается 30+ секунд а последующие запросы обрабатываются менее одной секунды. 

Такое ощущение, что веб сервис переходит в спящий режим 

 

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

Нравится

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

Да, приложение при простое засыпает.
В iis в ApplicationPools есть пул вашего приложения в AdvancedSettings есть настройка Idle Time-out(minutes) в ней укажите 0 и приложение не будет засыпать.

Да, приложение при простое засыпает.
В iis в ApplicationPools есть пул вашего приложения в AdvancedSettings есть настройка Idle Time-out(minutes) в ней укажите 0 и приложение не будет засыпать.

Полозюков Евгений Петрович, Благодарю

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

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

 

Логика Terrasoft.controls.mixins.Bindable.callModelMethod вызывает привязанный метод ExperimentVisibility к элементу страницы из раздела diff в параметре bindTo

 

{
  "operation": "merge",
  "name": "ConsumptionDetailcc99e44c",
  "values": {
     "visible": {
        "bindTo": "ExperimentVisibility"
     }
  }
},

Метод ExperimentVisibility проверяет установлено ли значение в схеме объекта страницы. На момент когда Bindable.callModelMethod вызывается, данные схемы объекта страницы еще не загружены логикой. Значение которое проверяется методом = undefined. 

Каким способом возможно мне проверить значение из схемы?

 

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

Нравится

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

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

А когда нужно изменить видимость, в своей логике вызывать функцию, которая меняет значение атрибута. Пример можно увидеть в схеме SocialMessageHistoryItemPageV2, где:

"CommentsVisible": {
	"dataValueType": this.Terrasoft.DataValueType.BOOLEAN,
	"type": this.Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
	"value": false
},
...
/**
 * Toggle comments block visibility and load first portion of comments if it is visible and empty.
 * @protected
 */
toggleCommentsVisibility: function() {
	if (this.get("CommentCount") < 1) {
		return;
	}
	var newVisibilityState = !this.get("CommentsVisible");
	this.set("CommentsVisible", newVisibilityState);
	if (newVisibilityState && this.get("ShownCommentMessagesCount") === 0) {
		this.onLoadNextComment();
	}
},
...
{
	"operation": "insert",
	"name": "ESNCommentsContainer",
	"parentName": "HistoryV2MessageFooterContainer",
	"propertyName": "items",
	"values": {
		"itemType": this.Terrasoft.ViewItemType.CONTAINER,
		"wrapClass": ["esn-comments-container"],
		"visible": {"bindTo": "CommentsVisible"},
		"items": []
	},
	"index": 1
},

 

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

Я сделал булев метод в methods:{ }, тот вычитывает атрибут entity и возвращает результат - равенство текста из свойства объекта моей подстроке.

Два метода: ExperimentVisible, ExperimentNonVisible, - проверяют результат что отдает первый метод и также возвращают булев результат.

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

 

Две кнопки были помещены в верхний контейнер страницы, там где есть зеленая базовая кнопка "Сохранить".

 

Во время загрузки страницы получаю всегда разный результат моих методов. Так как кнопки расположены в верхнем контейнере, привязанный к видимости кнопки метод проверяется прежде всего. Иногда в схему, доступную через this , Креатио загружает атрибут entity для проверки, иногда еще нет. Зафиксировал что иногда он еще и кэширует состояние схемы (тогда в this присутствуют данные не корректные а соответствуют схеме прежде открытой в браузере страницы).

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

 

Я пытался сделать более просто  - вместо чтения атрибута из this в моем методе написал загрузку объекта через EntitySchemaQuery и проверял мое свойство. Данные получались, но не были доступны через this страницы, они остались в scope запроса ESQ.

Мне надо понять как использовать принцип загрузки страницы правильно при проверке привязанных свойств. Мои кнопки поместить в другой контейнер нельзя.

 

Нравится

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

А у Вас дело случайно не в том же, что и в недавней теме? Там в одних случаях работает логика для совмещённого режима, в других — для отдельной карточки. Если не в этом, то по изложению не очень понятно, что происходит, нужно производить в браузере отладку.

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

Доброго времени суток. Возникла необходимость в настройке глобального поиска версии 2.0. Выполнил все действия по инструкции https://academy.terrasoft.ru/documents/administration/7-16/nastroyka-se…

В ходе настройки ошибок не возникло, но поиск не работает. Решил запустить переиндексацию сайта PUT запросом вида:

http://[GS-WEB-API]:81/indexation/{siteName}/reindex/full

и получил ошибку:

{"code":500,"status":"error","message":"System.ArgumentException: Format of the initialization string does not conform to specification starting at index 66.\n  

at System.Data.Common.DbConnectionOptions.GetKeyValuePair(String connectionString, Int32 currentPosition, StringBuilder buffer, Boolean useOdbcRules, String& keyname, String& keyvalue)\n  

at System.Data.Common.DbConnectionOptions.ParseInternal(Dictionary`2 parsetable, String connectionString, Boolean buildChain, Dictionary`2 synonyms, Boolean firstKey)\n  

at System.Data.Common.DbConnectionOptions..ctor(String connectionString, Dictionary`2 synonyms)\n  

at System.Data.SqlClient.SqlConnectionString..ctor(String connectionString)\n  

at System.Data.SqlClient.SqlConnectionFactory.CreateConnectionOptions(String connectionString, DbConnectionOptions previous)\n  

at System.Data.ProviderBase.DbConnectionFactory.GetConnectionPoolGroup(DbConnectionPoolKey key, DbConnectionPoolGroupOptions poolOptions, DbConnectionOptions& userConnectionOptions)\n  

at System.Data.SqlClient.SqlConnection.ConnectionString_Set(DbConnectionPoolKey key)\n  

at System.Data.SqlClient.SqlConnection.set_ConnectionString(String value)\n  

at ServiceStack.OrmLite.SqlServer.SqlServerOrmLiteDialectProvider.CreateConnection(String connectionString, Dictionary`2 options)\n  

at ServiceStack.OrmLite.OrmLiteConnection.get_DbConnection()\n  

at ServiceStack.OrmLite.OrmLiteConnection.Open()\n  

at ServiceStack.OrmLite.OrmLiteConnectionFactory.OpenDbConnection()\n  

at GlobalSearch.WebApp.HealthCheck.BaseChecker.GetFeatures(List`1 featuresCodes, String dbConnectionString, String dbType) in /src/Src/GlobalSearch.WebApp/HealthCheck/BaseChecker.cs:line 89\n  

at GlobalSearch.WebApp.HealthCheck.FeaturesChecker.Check(Site site) in /src/Src/GlobalSearch.WebApp/HealthCheck/FeaturesChecker.cs:line 24\n  

at GlobalSearch.WebApp.HealthCheck.SiteHealthChecker.CheckSite(Site site, ICollection`1 checkList) in /src/Src/GlobalSearch.WebApp/HealthCheck/SiteHealthChecker.cs:line 53\n  

at GlobalSearch.WebApp.ServiceModel.Requests.Handlers.SearchManagement.GetSearchStateRequestHandler.GetCheckResult(GetSearchStateRequest request) in /src/Src/GlobalSearch.WebApp/ServiceModel/Requests.Handlers/SearchManagement/GetSearchStateRequestHandler.cs:line 34\n  

at GlobalSearch.WebApp.ServiceModel.Requests.Handlers.SearchManagement.GetSearchStateRequestHandler.InternalHandle(GetSearchStateRequest request) in /src/Src/GlobalSearch.WebApp/ServiceModel/Requests.Handlers/SearchManagement/GetSearchStateRequestHandler.cs:line 46\n  

at GlobalSearch.WebApp.ServiceModel.Requests.Handlers.BaseRequestHandler`1.Handle(TRequest request) in /src/Src/GlobalSearch.WebApp/ServiceModel/Requests.Handlers/BaseRequestHandler.cs:line 38"}

 

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

 

Нравится

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

Кирилл, похоже, ошибка происходит при попытке работать с базой, причём, не сайта 7.Х, а сайта глобального поиска. Проверьте правильность databaseConnectionString, который посылают через curl при регистрации сайта в глобальном поиске.

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

Спасибо за ответ. Есть подозрение, что проблема в том, что для подключения к БД в databaseConnectionString я прописал  учетку с указанием домена (т.е. domain\user)  и судя по всему знак "\" недопустим. Подскажите, пожалуйста, какой командой удалить сайт глобального поиска , чтобы передобавить его с корректными реквизитами ?

Кирилл, имеете в виду это?

Важно

Чтобы изменить шаблон поиска, выполните DELETE запрос на /sites/{siteName}/search и  действие AddSearch, описанное выше, после чего будет выполнена полная переиндексация сайта.

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

да, с api разобрался)  , спасибо

 

Kirill Polushin,

Кирилл, здравствуйте. А у вас Глобальный поиск развернут в одной локальной сети с SQL севером creatio?
при выполнении команды: 

curl -v -X POST -d '{"templateName": "[TEMPLATE_NAME]"}' -H "Content-Type: application/json" http://[SERVER2_IP_ADDRESS]:81/sites/[SITE_NAME]/search
Я получаю ответ: "code":500,"status":"error","message":"System.Exception: Could not check index 'hi7z0wyxvi3leufyv8rlaa5aeokhyvharozf3hqlxn1zh8xzthuyawswuw0dcdmn' exists
Показать все комментарии

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

Вопрос не о том, как исправить эту ошибку. Интересно бы повторить логику элемента Визирование на основе базовых элементов чтения/записи.

Элемент визирования работает так:

  • В системе создается новая виза. Вся информация по визе, например, визирующий, результат визирования, комментарии и т. д., отображается на вкладке [ Визы ] записи раздела, по которой запущен кейс. 
  • Email-уведомление о необходимости визирования отправляется в момент создания визы сотруднику или группе сотрудников, которые назначены визирующими.
  • После утверждения или отклонения визы выбранному сотруднику, который заинтересован в результате визирования, отправляется email-уведомление и выполняется переход на следующую стадию кейса.

Где посмотреть в коде механизм логики работы элемента визирования? Может быть логика у вас есть в виде какой-нибудь диаграммы? Может быть базовый элемент визирования кто-нибудь успешно дублировал сам?

Нравится

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

Там очень странная логика - надо указать роль или конкретного пользователя.   В элементе визирования тип Approver'а важен (хотя, данные в любом случае берутся из System Administration Object) и самого пользователя надо читать из Users (view)

Мы в итоге сделали так:

Там очень странная логика - надо указать роль или конкретного пользователя.   В элементе визирования тип Approver'а важен (хотя, данные в любом случае берутся из System Administration Object) и самого пользователя надо читать из Users (view)

Мы в итоге сделали так:

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