зависает база на детали описание в контрагентах
Технические вопросы
Разработка

Добрый день!
Может у кого была подобная проблема и есть решение?

У нас стала часто возникать проблема с зависанием БД Террасофт

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

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

Как устранять эту проблему?
Возможно есть реестр описаний где можно отфильтровать по размеру и удалить подозрительные?

PS Чистка КЭШа не помогает.

Нравится

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

Здравствуйте, Алексей!

Специального реестра описаний в базовой версии нет.

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

Причины описанной Вами проблемы могут быть самые разные. Для генерации решения нужно определить её источник (база данных, аппаратное обеспечение сервера или клиентские места). В момент возникновения замедлений проверить у всех ли пользователей это происходит одновременно. Если «да», то обратить внимание на сервер, в частности, на загрузку ЦП и оперативной памяти. Если там всё в порядке, тогда нужно моделировать ситуацию и в это время с помощью утилиты «SQL Server Profiler» пробовать отследить проблемные запросы к базе для возможности их оптимизации. Следующий этап – это проанализировать зависит ли замедление от пользователя, админ\не админ (играют ли роль права доступа). На скорость работы (время отклика системы), также, может влиять количество колонок, которые отображаются в реестре записей (желательно лишние спрятать), наличие сортировки по каким-то из полей реестра (убрать сортировку можно зажав Ctrl и кликнув по полю).

Со временем может быть нарушена структура индексов базы данных (создаются для ускорения выборки данных). Их можно перестроить при помощи скрипта Reindex.rar (во вложении). Рекомендации по выполнению скрипта – во вложении. После выполнения скрипта создаётся хранимая процедура «sp_reindex_all_tables». Её нужно запустить на выполнение. В зависимости от количества индексов, размера базы данных и ресурсов сервера выполнение данной процедуры может занять достаточно продолжительное время при этом нагружая сервер. В связи с этим, если вы будете пересоздавать индексы, рекомендую запускать процесс, когда пользователи не работают с системой. Перед этим обязательно создайте резервную копию базы данных.

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

Здравствуйте, Алла!
Спасибо за ответ!
От пользователя не зависит и у админа и у менеджеров база зависает при попытке отобразить описание на конкретных клиентах, причем зависает безвозвратно.
Реиндексацию делали - не помогло, попробуем еще раз.

Появилась идея удалить последнюю запись обновления из Журнала изменений, но не знаем как это сделать.

"Пушкарев Алексей" написал:Реиндексацию делали

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

Просто sql запрос на сервере select * from tbl_Account where Name = 'Как_там_называется_проблемный_клиент' работает?

Если работает - как, время профайлером гляньте, долго-долго?

Сегодня сделали поиск проблемных клиентов с изменениями за последние 3 месяца. все клиенты одного менеджера причем последняя дата изменения у всех после перевода менеджера с Windows 7 на 8 версию. И ошибки лишь на 8 контрагентах, но так как они периодически становятся первыми в общем списке и у всех по умолчанию открыта деталь описание то страдают все.

Наверное пока не стоит связывать переход пользователя с Windows 7 на Windows 8.

Из Вашего сообщения сделал выводы, что на детали [Описание] хранится много информации, где размер поля может превышать более 10 мб. В таком случае рекомендую изменить логику работы приложения, а именно:

  • Использовать FILESTREAM
  • Использовать таблицы FileTable
  • Создать новую деталь, где будет использоваться RTF файл, который размещается на файловой системе
Показать все комментарии

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

Добавил деталь Продажи в новый раздел

details: /**SCHEMA_DETAILS*/{
        Opportunities: {
                schemaName: "OpportunityDetailV2",
                entitySchemaName: "Opportunity",
                filter: {
                        masterColumn: "Id",
                        detailColumn: "UsrCar"
                }
        }
}/**SCHEMA_DETAILS*/,
diff: /**SCHEMA_DIFF*/[
        {
                "operation": "insert",
                "parentName": "HistoryTabContainer",
                "propertyName": "items",
                "name": "Opportunities",
                "values": {
                        "itemType": Terrasoft.ViewItemType.DETAIL
                }
        }
]/**SCHEMA_DIFF*/

При добавление или изменение записи из детали, страница редактирования не открывается, в консоли ошибка: "Cannot read property 'name' of undefined" в методе BasePageV2.getDefaultTabName на строчке:

defaultTabName = this.getDefaultValueByName("DefaultTabName");

Подскажите чем может быть вызвана проблема? В разделе контрагенты например все нормально.

Нравится

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

Самое банальное - скомпилировать конфигурацию и почистить после этого redis.

Не помогло.

Здравствуйте,
А вы деталь мастером добавляли в новый раздел, или вручную, может у вас нет закладки HistoryTabContainer
Вот к примеру, в конфигурации создал мастером новый раздел «NesCar».
В Opportunity добавил колонку справочник NesCar ссылкой на новый раздел.
Мастером разделов добавил на страницу нового раздела деталь «Продажи».

В итоге деталь отображается.

Код сгенерированный мастером:

[javascript]
define('NesCarPage', ['NesCarPageResources', 'GeneralDetails'],
function(resources, GeneralDetails) {
return {
entitySchemaName: 'NesCar',
details: /**SCHEMA_DETAILS*/{
"Opportunity14547f8203f8": {
"schemaName": "OpportunityDetailV2",
"entitySchemaName": "Opportunity",
"filter": {
"detailColumn": "NesCar",
"masterColumn": "Id"
}
}
}/**SCHEMA_DETAILS*/,
diff: /**SCHEMA_DIFF*/[
{
"operation": "insert",
"name": "NesName",
"values": {
"layout": {
"column": 0,
"row": 0,
"colSpan": 24,
"rowSpan": 1
}
},
"parentName": "Header",
"propertyName": "items",
"index": 0
},
{
"operation": "insert",
"name": "NesTestd95734f67c80",
"values": {
"layout": {
"column": 0,
"row": 1,
"colSpan": 12,
"rowSpan": 1
},
"bindTo": "NesTest",
"caption": {
"bindTo": "Resources.Strings.NesTestCaption"
},
"textSize": 0,
"contentType": 1,
"labelConfig": {
"visible": true
},
"enabled": true
},
"parentName": "Header",
"propertyName": "items",
"index": 1
},
{
"operation": "insert",
"name": "GeneralInfoTab",
"values": {
"caption": {
"bindTo": "Resources.Strings.GeneralInfoTabCaption"
},
"items": []
},
"parentName": "Tabs",
"propertyName": "tabs",
"index": 0
},
{
"operation": "insert",
"name": "Opportunity14547f8203f8",
"values": {
"itemType": 2
},
"parentName": "GeneralInfoTab",
"propertyName": "items",
"index": 0
}
]/**SCHEMA_DIFF*/,
attributes: {},
methods: {},
rules: {},
userCode: {}
};
});
[/javascript]

Показать все комментарии
authorization
connection
JAVA
Технические вопросы
7.x

Здравствуйте, коллеги.
В ходе реализации задачи переноса данных из firebird-а в облачную 7-ю bpm'online столкнулся с проблемой авторизации. Сервис для отбора данных из firebirdа написал на Jave. Для того, чтобы засетить данные необходимо вызвать веб-сервис реализованый на C# в bpm'online по ссылке. Сервис на стороне bpm'online работает правильно. Не могу пройти авторизацию сайта.
Подключил библиотеку jerse. Такой код не проходит авторизацию.

Client client = Client.create();
client.addFilter(new HTTPBasicAuthFilter(username, password));
WebResource webResource = client.resource("https://test.bpmonline.com/0/rest/CustomConfigurationService/SetContact/ttteeest/123/12463");
ClientResponse clientResponce = webResource.post(ClientResponse.class);

Подскажите пожалуйста что не так. Есть ли другой способ пройти авторизацию в bpm'online с помощью Java.
Заранее благодарен.

Нравится

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

Обычно авторизацию делают через AuthService.

У кого-нибудь есть пример реализации authService на Джаве?

Уважаемые коллеги, никак не получается пробиться через авторизацию.
URL url = new URL("https://test.bpmonline.com/ServiceModel/AuthServ..");
CookieManager manager = new CookieManager();
HttpURLConnection http = (HttpURLConnection) url.openConnection();
http.setDoOutput(true);
http.setRequestMethod("POST");
http.setRequestProperty("Content-Type","application/json");
CookieHandler.setDefault(this.manager);

Проблема с куками, т.к. в managere пустое множество. Подскажите пожалуйста где поправить. Заранее благодарен

Показать все комментарии
7.5
обновление билда
Технические вопросы
7.x

После обновления с 7.5.0.1007 на 7.5.0.1328 при логине появилась ошибка:
Метод не найден: "Common.Logging.ILog Common.Logging.LogManager.GetLogger(System.Type)".
Сама библиотека (Common.Logging.dll) в папке Terrasoft.WebApp\bin имеется.
Файлы сайта скопировал с новой сборки, конфигурацию компилировал, структуру бд обновлял, исходные коды генерировал. Подскажите как исправить.

UPD: Разобрался. Конфигурация не компилировалась из-за бп, для которого нужно было сгенерировать исходный код. Кстати почему исходные коды не генерируются там где нужно при действии "Сгенерировать для требующих генерации", а структура БД в свою очередь не обновляется там где нужно при действии "Обновить для требующих обновления" - для меня загадка.

Нравится

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

Здравствуйте.
Скорее всего, это особенность конкретной версии. Насколько мне известно, в более поздних релизах такого уже не было.

Поэтому я как правило пользуюсь "Сгенерировать для всех" и т.д :smile:

"Александр Кудряшов" написал:

Поэтому я как правило пользуюсь "Сгенерировать для всех" и т.д :smile:


А возможно каким-то способом обновить структуру БД для всех объектов? Можно конечно отфильтровать и делать постранично. Но вдруг есть способ проще.

Показать все комментарии
Технические вопросы
7.x

Здравствуйте, коллеги.
В ходе реализации задачи переноса данных из firebirdа в облачную 7ю бпм столкнулся с проблемой авторизации. Сервис для отбора данных из firebirdа написал на Jave. Для того, чтобы засетить данные необходимо дернуть сервис в бпм по ссылочке.
Подключил библиотеку jerse. Такой код не проходит авторизацию.

Client client = Client.create();
client.addFilter(new HTTPBasicAuthFilter(username, password));
WebResource webResource = client.resource("https://test.bpmonline.com/0/rest/CustomConfigurationService/SetContact/ttteeest/123/12463");
ClientResponse clientResponce = webResource.post(ClientResponse.class);

Подскажите пожалуйста что не так. Заранее благодарен.

Нравится

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

Базовая http аутентификация в версии 7.8 не поддерживается. Можно использовать сервис аутентификации
Подробности смотрите здесь
https://academy.terrasoft.ru/documents/technic-sdk/7-8-0/autentifikaciy…

Статья, сожалению, содержит информацию о Basic-аутентификации, но в ближайшее время будет актуализирована

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

Доброго времени суток.
Подскажите ответ на такую задачу:
Есть маркетинговая кампания "Приглашение на мероприятие"
Аудитория на основе группы.
Вопрос - каким елементом кампании подтвердить участие контакта в мероприятии (изменить его статус).
Можно ли ввобще это сделать кампанией или надо делать БП.
Буду очень благодарен за примеры.

Нравится

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

"Мотков Илья" написал:

Здесь почитайте - https://academy.terrasoft.ru/documents/marketing/7-8-0/kak-sozdat-kampan...


Там читал в первую очередь.
Там нет ответа на мой вопрос, и возникает еще куча дополнительных:
1. Из первого мейла поток с уловием "Переход по ссылке". А если в письме несколько ссылок, как отследить по которой именно перешел?
2. Допустим я отправив письмо з кнопкой "Потвердите участие". Как поменять отклик учасника уже в мероприятии на "Подтверждено участие"
3. В какой момент начнет заполнятся пкладка аудитория у мероприятия?

Добрый день!

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

Более подробную информацию о бизнесс-процессах Вы можете просмотреть тут:
https://academy.terrasoft.ru/documents/technic-bpms/7-8-0/obzor-vozmozh…

"Мария Ватулина" написал:

Добрый день!

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

Более подробную информацию о бизнесс-процессах Вы можете просмотреть тут:

https://academy.terrasoft.ru/documents/technic-bpms/7-8-0/obzor-vozmozhn...


Подскажите, а в какой таблице лежит информация по какой именно ссилке перешел клиент.
Нашел таблицу откликов e-mail - там просто есть окклити типа открыл, hard bounce, перешел по ссылке.
А вот по какой именно ссылке - найти не могу.

Добрый день, Ярослав!

В БД есть таблица "MandrillClicks", в которую пишется информация какой контакт открывал конкретную ссылку.
Также есть вьюха "VwBulkEmailClickedLink", которая на основании таблицы "MandrillClicks" показывает информацию.

Отдельно есть таблица "BulkEmailHyperlink", которая показывает Caption гиперссылки и ее Url.

Показать все комментарии
curl
slack
экспорт
Технические вопросы
7.x

Приветствую.
Хочу сделать интеграцию с внешней системой, в частности мессенджером Slack, он позволяет сделать WebHook, и обращаться к нему посредством POST запроса, например:

curl -X POST --data-urlencode 'payload={"channel": "#general", "username": "BPM-bot", "text": "This is posted to #general and comes from a bot named webhookbot.", "icon_emoji": ":ghost:"}' https://hooks.slack.com/services/XXXXXXXXXXXXXXXXXXXXXX

Это запостит в канал #general от имени BPM-bot сообщение text и смайл, https://hooks.slack.com/services/XXXXXXXXXXXXXXXXXXXXXX уникальный адрес webhook`а для моего инстанса Slack.

Как в BPM реализовать отправку этого сообщения? Т.е. как сделать бизнес-процесс мне понятно, а вот с отправкой сложности...

Нравится

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

[csharp]
public class RequestUtils: IDisposable {

#region Methods: Private

private async Task SendRequest(WebRequest request) {
var response = await request.GetResponseAsync();
return (HttpWebResponse)response;
}

#endregion

#region Methods: Public

public void Dispose() {
}

public void DoPostRequest(string requestUri, string user, string pwd, string text) {
/* data sample
{
"userName": "user1",
"password": "password",
"data": "Hello"
}
*/
/* Преобразовываем в json */
string jsonData = JsonConvert.SerializeObject(new {
userName = user,
paswword = pwd,
data = text
});
/* uri sample: http://localhost/MyApp/bla.svc/Login */
WebRequest request = WebRequest.Create(requestUri);
byte[] dataArray = Encoding.UTF8.GetBytes(jsonData);
request.Method = "POST";
request.ContentType = "application/json";
request.ContentLength = dataArray.Length;
Stream stream = request.GetRequestStream();
stream.Write(dataArray, 0, dataArray.Length);
/* send request */

/* async */
var response = SendRequest(request);

/* or sync*/
var response = request.GetResponse();
}

#endregion
}

[/csharp]

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

Ошибка при импорте: "Индекс и длина должны указывать на позицию в строке. Имя параметра: length."

Нравится

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

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

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

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

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

7.6

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

Для решения рекомендую написать на support@terrasoft.ru, предоставив обезличенную базу, пример загружаемого файла и настройки импорта.

спасибо.

Показать все комментарии
Технические вопросы
Разработка

Здравствуйте. Помогите пожалуйста разобраться со следующей задачей:

В запросе sq, для определенной колонки грида, создала SQL Text Column и использую scalar-valued sql function, которая возвращает имена через запятую. Тип возвращаемого значения sql функции - returns nvarchar(max). В sql редакторе ответ нормальный, а в террасофт - ??????,??????,???

Тип поля в датасете - строковое поле, кодировка - DEFAULT_CHARSET

Спасибо.

Нравится

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

Какая у Вас версия Terrasoft?

Может как-то можно преобразовать возвращаемое значение в теле sql функции, чтобы террасофт смог прочесть ?

Попробуйте явно указать Collation.

Павел, явно указала collation базы данных не помогло.
Нашла ссылку http://www.community.terrasoft.ru/forum/topic/14248,
здесь похожая проблема была, но и эта статья не помогла

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

В статье, ссылку на которую Вы привели выше, рекомендуется обновление до версии не ниже 3.4.0.
Вы обновились до этой версии, а проблема всё также осталась?

В качестве решения проблемы попробуйте вместо колонки в Select Query добавить вычисляемую колонку в Dataset, на обработчик события OnDatasetCalcFields программного выполнять вызов вашей функции и устанавливать возвращаемое значение для вычисляемого поля.

К сожалению, невозможно обновить версию.

var CategoriesIDs = Dataset.Values('CategoryIDs');
var sSQL = " select dbo.fn_GetIncidentCategoriesNames('" + CategoriesIDs + "') ";
var array = GetSimpleSQLResult(sSQL);
Dataset.Values('CategoriesNames') = Trim(array[0]);

sSQL = " select dbo.fn_GetIncidentCategoriesNames('{AB95C3C8-707D-440C-BB95-66E43227815F},{2BB56227-FF73-4B51-A8F9-E3A94035ADD9},{DAD3CD74-9CBC-40A5-805D-12DBDA781217}') "

Выдает следующую ошибку:
[16/07/18 18/39/14.354] (W) Invalid object name 'FN_GETINCIDENTCATEGORIESNAMES'

функция точно существует. Рисунок вычесляемого поля прикреплен.

Если функция точно есть, но её не видно из кода, то дело может быть в правах на неё на уровне SQL-сервера. Посмотрите, какие выданы права на другие функции. См. тут, тут и тут.

включила доступ:
GRANT EXECUTE ON fn_GetIncidentCategoriesNames TO public

результат:
fn_GetIncidentCategoriesNames public

выдает ошибку:
[16/07/19 10/44/43.241] (W) Invalid object name 'FN_GETINCIDENTCATEGORIESNAMES'

Странно, что с коде написано
var sSQL = " select dbo.fn_GetIncidentCategoriesNames ('" + CategoriesIDs + "') ";
через dbo., а в ошибке нет dbo.

Марина,

Проверьте, какой запрос уходит в базу данных.

поймала через профайлер

declare @p3 varchar(8000)
set @p3=NULL
exec sp_executesql N' select top 1 @P1 = DBO.FN_GETINCIDENTCATEGORIESNAMES (''{AB95C3C8-707D-440C-BB95-66E43227815F}, {2BB56227-FF73-4B51-A8F9-E3A94035ADD9}, :P2 = {DAD3CD74-9CBC-40A5-805D-12DBDA781217}'') FROM FN_GETINCIDENTCATEGORIESNAMES (''{AB95C3C8-707D-440C-BB95-66E43227815F},{2BB56227-FF73-4B51-A8F9-E3A94035ADD9},{DAD3CD74-9CBC-40A5-805D-12DBDA781217}'')',N'@P1 varchar(8000) OUTPUT',@p3 output
select @p3
go

в SQL редакторе та же ошибка, что и в террасофт
Msg 208, Level 16, State 3, Line 1
Invalid object name 'FN_GETINCIDENTCATEGORIESNAMES'.

нашла ссылку: http://www.community.terrasoft.ru/blogs/2171
и реализовала эту часть:

CREATE FUNCTION tsf_TestScalar(@a int, @b int)
returns int
AS
begin
RETURN 5 + @a + @b
end

код в Террасофте:

var sSQL = " select dbo.tsf_TestScalar(1, 2) " ;
var array = GetSimpleSQLResult(sSQL);

GRANT EXECUTE ON tsf_TestScalar TO public

профайлер:
declare @p3 varchar(8000)
set @p3=NULL
exec sp_executesql N' select top 1 @P1 = DBO.TSF_TESTSCALAR(1, 2) FROM TSF_TESTSCALAR(1, 2)',N'@P1 varchar(8000) OUTPUT',@p3 output
select @p3

Msg 208, Level 16, State 3, Line 1
Invalid object name 'TSF_TESTSCALAR'.

(1 row(s) affected)

Разобралась, все дело было в том, что GetSimpleSQLResult не совсем корректно отрабатывала sql текст, я поменяля тело функции GetSimpleSQLResult на код, который был написан в http://www.community.terrasoft.ru/blogs/2171 и запрос заработал.
Но, к сожалению, изначальная проблема языка осталась, снова читает ?????? знаки.

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

Хорошо. Спасибо большое !

Показать все комментарии
Microsoft Outlook
Технические вопросы
Разработка

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

На одном компьютере выпадает ошибка "OLE error 80020102" (скрин в приложение) при попытке отправить письмо, когда Outlook запущен. Когда Outlook закрыт ошибка нет, открывается окно отправки и письмо отправляеться.

Под администратором пробовал: выключать, затем включать интеграцию (TSMSOfficeLibraryConfigurator); перерегистрировать библиотеки TS; установить другой Outlook.
Не помогло. Подскажите что еще можно сделать? Кроме переустановки Windows.

Нравится

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