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

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

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

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

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

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 ссылкой на новый раздел.
Мастером разделов добавил на страницу нового раздела деталь «Продажи».

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

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

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: {}
	};
});
Показать все комментарии

Здравствуйте, коллеги.
В ходе реализации задачи переноса данных из 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.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:


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

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

Здравствуйте, коллеги.
В ходе реализации задачи переноса данных из 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.

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

Приветствую.
Хочу сделать интеграцию с внешней системой, в частности мессенджером 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 комментарий
public class RequestUtils: IDisposable {
 
    #region Methods: Private
 
    private async Task<HttpWebResponse> 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
}
Показать все комментарии

Ошибка при импорте: "Индекс и длина должны указывать на позицию в строке. Имя параметра: 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 и запрос заработал.
Но, к сожалению, изначальная проблема языка осталась, снова читает ?????? знаки.

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

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

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

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

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

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

Нравится

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