Как убрать кнопку в виде планеты "отправить сообщение на портал самооблуживания"Изображение удалено.

Нравится

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

В вашем случае надо разбирать код SectionActionsDashboard и смотреть как формируются табы, чтобы убрать один из них. Открываете схемы и смотрите все что связано со словом Tab.

Жмете правой кнопкой Просмотреть код, разбираетесь по названия к какой схеме он принадлежит и какая у него name, после этого делаете поиск по всему коду и находите в каком схеме в каком diff он добавлен. А то так и будете каждый кейс писать, учитесь сами делать.

 

Полозюков Евгений Петрович,Спасибо, примерную схему поиска я знаю, где-то есть описание как формирует id элемента для поиска в diff массиве?

Видно, что в id добавляет название схемы раздела CaseSection

Денис Суров,

Описания как формируется id нет, но можно понять что в начале идет название схемы потом имя элемента потом суффикс с типом элемента.

В вашем случае надо разбирать код SectionActionsDashboard и смотреть как формируются табы, чтобы убрать один из них. Открываете схемы и смотрите все что связано со словом Tab.

Полозюков Евгений Петрович,Спасибо, посмотрю

мне подошло скрыть контейнер Tabs

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

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

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

Нравится

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

Еще меньше надо было скриншот сделать, чтобы вообще ничего непонятно было.

 

Кнопка действия добавлена в BaseDataView c name - CombinedModeActionsButton и SeparateModeActionsButton. В вашем случае надо в CaseSection в diff описать remove этих двух кнопок.

Еще меньше надо было скриншот сделать, чтобы вообще ничего непонятно было.

 

Кнопка действия добавлена в BaseDataView c name - CombinedModeActionsButton и SeparateModeActionsButton. В вашем случае надо в CaseSection в diff описать remove этих двух кнопок.

Полозюков Евгений Петрович,Спасибо, а тег?

Часть нашел,CombinedModeTagsButton

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

Добрый день, Денис!

Подскажите, удалось ли найти наименование кнопки Тег для её удаления? По CombinedModeTagsButton у меня remove не отрабатывает, кнопка как была, так и есть (в DOM-модели также по классам прошлась и не нашла подходящего наименования)

Ирина Кузина,

Для решения задачи в атрибуте UseTagModule установите значение false.

Например,

 define("PortalCaseSection", [],

    function () {

        return {

            entitySchemaName: "Case",

        details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,

        attributes: {

            "UseTagModule": {

                dataValueType: Terrasoft.DataValueType.BOOLEAN,

                value: false

            }

        },

        methods: {},

        diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/

    };

});

 

Алёна Доля,

Благодарю! Вы очень помогли!

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

Добрый день!

 

Создал замещающую схему PortalPage сделал ComplainButton Visible=false , но кнопка осталась на странице

Нравится

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

Спасибо, нашел, кнопка в PortalCaseSection

"operation": "remove",

                    "name": "ComplainButton",

Денис Суров,

Добрый день, Денис!



Можете ли чуть более детально рассказать как именно произвели удаление кнопки со страницы?



Правильно ли я понимаю, что достаточно в diff указать следующее:

diff: /**SCHEMA_DIFF*/[
			{
				"operation": "remove",
				"name": "НазваниеКнопки"
			}
		]/**SCHEMA_DIFF*/

Название кнопки мы берём из локализуемых строк, что определены на странице? Или откуда?

 

 

 

Ирина Кузина,

Добрый день, Ирина.

Да, код, который Вы прикрепили успешно удалит кнопку.



Название кнопки можно посмотреть разметке странице(ПКМ на кнопку -> Inspect) в id кнопки полное название, пример "ContactSectionV2CloseButtonButton". Нужно убрать сначала название схемы "ContactSectionV2" и с конца слово "Button". Остальное и есть название кнопки, то есть CloseButton.



Также название кнопки можно посмотреть в схеме, где она добавляется:

 

diff: /**SCHEMA_DIFF*/[
			{
				"operation": "insert",
				"name": "НазваниеКнопки"
               // Другие свойства
			}
		]/**SCHEMA_DIFF*/

 

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

Есть ли какие-нибудь стандартные методы реализации постраничного вывода записей на детали? Или придется создавать свои?

Нравится

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

Тимофей, насколько понимаю, готовых решений для реализации такого нет. Заведена идея иметь несколько страниц с записями на детали вместо бесконечного скрола записей, но пока она без конкретных планов по реализации.

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

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

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

На раздел портала добавлена деталь. Все необходимые права на объект деталь розданы. Записи детали создаются и сохраняются нормально.

 

Есть проблема с переходом на карточку детали. В консоли ошибка

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

 

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

 

Для указанного объекта детали не подгружается страница. Подскажите, какие доработки нужно сделать, чтоб страница подгрузилась?

Нравится

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

Если вы не можете получить editPage для детали значит у вас неправильно зарегистрированы связи между деталью и карточкой детали. Здесь написано как регистрируются эти связи в таблицах пункт 5 https://academy.terrasoft.ru/documents/technic-sdk/7-15/detal-so-strani…

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

Если вы не можете получить editPage для детали значит у вас неправильно зарегистрированы связи между деталью и карточкой детали. Здесь написано как регистрируются эти связи в таблицах пункт 5 https://academy.terrasoft.ru/documents/technic-sdk/7-15/detal-so-strani…

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

Добрый день! Перерабатываю синхронизацию с LDAP. Заказчик требует выполнять раз в сутки полную синхронизацию и чуть ли не каждые 15 мин частичную. То есть при частичной только добавление новых пользователей и обновление измененных в течении последних 15 мин. После синхронизации в штатной реализации выполняется процедура актуализации ролей. Эта процедура вызывает хранимую процедуру tsp_ActualizeAdminUnitInRole, которая в свою очередь вызывает хранимую процедуру tsp_GetAdminUnitList. На 50000 пользователях эта хранимая процедура выполняется слишком долго (перекрывает 15 минут). Хотелось бы понять, что делает tsp_ActualizeAdminUnitInRole, в чем ее назначение? Если пользователи просто добавляются в группу "All Employees" и еще в одну, вложенную в "All Employees", возможно ли отключить вызов ХП tsp_ActualizeAdminUnitInRole при частичной синхронизации и вызывать только обновление кэша SysAdminUtilities.ReloadSysAdminUnitsCache?

Нравится

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

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

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

Они рекомендуют обновиться до версии 7.17.1+.

Учтите только при разработке своей интеграции, что новая логика уже не использует эти хранимки, то есть их прямой запуск Вам не подойдёт.

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

Всем доброго дня. Версия 7.15.

 

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

 

foreach (var groupItem in groupCollection)
	{		
		//Создадим запись
		try {
		    var entity = new Terrasoft.Configuration.WSObject(userConnection);
		    entity.SetDefColumnValues();
		    //...
		    entity.Save();
		} catch (Exception exc) {
			//return false;
		} 
}

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

 

К примеру, в JavaScript на клиенте аналогичное действие можно выполнить следующий образом:

var bq = this.Ext.create("Terrasoft.BatchQuery");
 
arr.forEach(function(item, i, arr) {
        var insert = Ext.create("Terrasoft.InsertQuery", {
        		rootSchemaName: "WSObject"
        });				                    
        insert.setParameterValue("WSComment", item.comment, Terrasoft.DataValueType.TEXT); 
        //прочие колонки
        bq.add(insert);
});
 
bq.execute(function(addresponse){});

Тогда в базу уйдёт один запрос. Как сделать аналогичное действие на c#?

Нравится

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

У вас в batchQuery несколько insert каждый из которых выполняется в отдельности, он не отличается от c# варианта который вы описали. 

В c# коде описан нормальный цикл для создания каждой записи по отдельности, так и делается нормальное создание нескольких записей.

Если вы хотите выполнить вариант sql в котором один insert с несколькими values, вам надо использовать либо CustomQuery в котором прописан sql. Либо попробовать обертку для insert в виде класса Insert.

Entity можно добавлять в EntityCollection, а потом вызывать entityCollection.Save

Николай, спасибо.

А есть пример добавления записей в такую коллекцию?

Например, в схеме MLPredictionSaver:

MLResultListSchemaConfig resultListSchemaConfig = GetResultListSchemaConfig(modelConfig);
var entityCollection = new EntityCollection(_userConnection, resultListSchemaConfig.EntitySchema);
foreach (RecommendationOutput output in predictionResult.Outputs) {
	foreach (RecommendedItem item in output.Items) {
		Entity entity = resultListSchemaConfig.EntitySchema.CreateEntity(_userConnection);
		entity.UseAdminRights = UseAdminRights;
		entity.SetColumnValue("Id", Guid.NewGuid());
		entity.SetColumnValue(resultListSchemaConfig.SubjectColumn, output.UserId);
		entity.SetColumnValue(resultListSchemaConfig.ObjectColumn, item.ItemId);
		if (resultListSchemaConfig.ValueColumn != null) {
entity.SetColumnValue(resultListSchemaConfig.ValueColumn, item.Score);
		}
		if (resultListSchemaConfig.ModelColumn != null) {
entity.SetColumnValue(resultListSchemaConfig.ModelColumn, modelConfig.Id);
		}
		if (resultListSchemaConfig.DateColumn != null) {
entity.SetColumnValue(resultListSchemaConfig.DateColumn, DateTime.UtcNow);
		}
		entityCollection.Add(entity);
	}
}
entityCollection.Save();

Уже заведена идея дать возможность сохранять несколько entity в одной транзакции.

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

Я так и не поняла из этого поста, можно ли использовать BatchQuery на стороне сервера?

Если да, то хотелось бы увидеть примеры такой реализации.

У вас в batchQuery несколько insert каждый из которых выполняется в отдельности, он не отличается от c# варианта который вы описали. 

В c# коде описан нормальный цикл для создания каждой записи по отдельности, так и делается нормальное создание нескольких записей.

Если вы хотите выполнить вариант sql в котором один insert с несколькими values, вам надо использовать либо CustomQuery в котором прописан sql. Либо попробовать обертку для insert в виде класса Insert.

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

Добрый день!

Версия 7.14

Могу ли я отображать в конкретной своей детали даты ровно в том часовом поясе, в котором они записаны в БД? Какая утилита отвечает за получение из БД дат со смещением на часовой пояс текущего пользователя?



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

Нравится

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

Ап. Пожалуйста откликнитесь

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

 Terrasoft.Core.DateTimeDataValueType.Serialize(object value, TimeZoneInfo timeZoneInfo)

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

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

Доброго времени суток. Возникла необходимость в настройке глобального поиска версии 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"}

 

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

 

Нравится

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

Кирилл, похоже, ошибка происходит при попытке работать с базой, причём, не сайта 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

Не понял с индексацией. Куда вводить PUT запрос? 

curl -v -X POST -d '{"templateName": "default.json"}' -H "Content-Type: application/json" http://[SERVER2_IP_ADDRESS]:81/sites/my-test-site/search  - это я понял, а вот DELETE запрос без примера и действие AddSearch не описано, что куда. Не подскажите по подробнее   

Максим, вводить PUT запрос необходимо на втором сервере в консоли. 

Пример DELETE запроса можно найти в документации curl:

curl -X DELETE http://localhost:8080/user/100 

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

Его пример в документации:

curl -v -X POST -d '{"templateName": "default.json"}' -H "Content-Type: application/json" http://[SERVER2_IP_ADDRESS]:81/sites/my-test-site/search

Рекомендую также ознакомится с более новой версией этой документации тут.

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

надо сделать нормализацию телефонного номера в стандартный формат для

- текущей базы телефонов

- для новых добавляемых телефонов

как это грамотно сделать?

Нравится

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

Для текущей БД я бы сделал прямым исправлением в БД. Для новых - создание кастомной валидации на поле телефон с регулярным выражением.

Для текущей БД я бы сделал прямым исправлением в БД. Для новых - создание кастомной валидации на поле телефон с регулярным выражением.

Алексей - а как сделать для текущей БД без прямого исправления БД?

Например, написанием и единоразовым ручным запукском БП, который это делает в скрипте или ещё как-то.

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