Добрый день, коллеги. Развертываю на локальной машине копию продуктивного стенда. При нажатии на кнопку входа ничего не происходит, а запрос возвращает код 500 с исключением Terrasoft.UnauthorizedException. Как фиксить данную проблему?

Нравится

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

Коллеги, добрый день!

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

1. Создается объект UsrVwTest , который наследуется от базового, в нем не добавляется ни одного поля (в view будет 1 колонка с идентификаторами контакта), у него устанавливается признак, что это представление в базе, он сохраняется и публикуется.

2. После этого, через расширение SqlExecutor выполняется что-то в духе

create view UsrVwTest as select top 1 Id as 'Id' from Contact

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

var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", { rootSchemaName: "UsrVwTest" });
esq.addColumn("Id");
esq.getEntityCollection(function (result) {
	if (!result.success) {
		// обработка/логирование ошибки, например
		this.showInformationDialog("Ошибка запроса данных");
		return;
	}
	console.info(result.collection.getCount());
}, this);

Консоль выдает мне 1, то есть проблем с доступом к view нет, там одна строка, как и должно быть.

После этого я повторяю тот же алгоритм на on-site проекте 7.11, в том же порядке. После этого я на аналогичное обращение к view из консоли получаю 500 (InvalidObjectStateException). Запрос в Network падает также с кодом "ErrorCode":"InvalidObjectStateException". Обработка результата падает в ветку с !result.success. Пробовал дополнительно компилировать конфигурацию на разных этапах алгоритма, создавать view различными способами (напрямую в базе, через установку скрипта в конфигурации и т.д.), получаю тот же ответ. Названия view в базе и в конфигурации совпадают, название и количество колонок тоже.  Кроме того, на проекте уже есть view, реализованные ранее, с которыми ведется работа, они реагируют по-разному. Некоторые так же выдают 500, некоторые послушно пишут количество записей внутри себя. 

Резюмируя, мог бы кто-то подсказать, в чем может быть проблема или какой единственно верный алгоритм реализации такой связки? Поиск по статьям привел меня именно к тому алгоритму, который заработал на демо-стенде, но упорно не хочет работать на on-site площадке. 

Нравится

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

Поправка:

По всей видимости, все уже существующие представления ошибок не вызывают. Случаи, когда запрос к ним из консоли выдает 500 - превышение 20 000 записей на выгрузку. 

 

Все получилось. Оказалось, что view нужно создавать именно как dbo.ViewName, а не просто ViewName, иначе InvalidObjectName

 

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

Добрый день.
Занимаюсь реализацией интеграции с BPM'Online 7.10 через DataService.

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

Код примерно такой

var list = new Dictionarystring, ColumnExpression>();
foreach(....)
{

        list.Add(c1.Attribute.FieldName, new ColumnExpression()
        {
                ExpressionType = EntitySchemaQueryExpressionType.Parameter,
                Parameter = new Parameter()
                {
                        Value = value,
                        DataValueType = c1.Attribute.DataType
                }
        });
}

var insertQuery = new InsertQuery()
{
        RootSchemaName = EntityName,
        ColumnValues = new ColumnValues()
};
insertQuery.ColumnValues.Items = new Dictionarystring, ColumnExpression>(list);

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

Позже я пытался вместо объекта DataTime передавать строку с форматированием которое указано в https://community.terrasoft.ru/forum/topic/24597 , но это так же не помогло.

1) Подскажите, пожалуйста, как работать с полями дата и время?
2) Есть ли способ чтобы DataService выдавал более UserFrendly ошибку чем "Удаленный сервер возвратил ошибку: (500) Внутренняя ошибка сервера."? Т.к. выяснение того, что ошибка связана именно с типом DataTime заняло много времени, причем формат запроса корректен и "вроде бы" DataService не должен ругаться на него 500 ошибкой...

Нравится

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

Добрый день!

Для передачи даты через DataService формат должен быть следующий : [""\""2000-12-31T09:41:59\""""""""]. Например:

[quote="Мотков Илья"]

Добрый день!

Для передачи даты через DataService формат должен быть следующий : [""\""2000-12-31T09:41:59\""""""""]. Например:

"Габбазов Искандер Рустемович" написал:На сколько я понимаю ваш пример это кусок "правильного" JSON'а.

нет, JSON тут совсем не при чем.
Это текстовое представление формата TimeStamp,
Оператор @ - интерпритирует строку без управляющих последовательностей, ну и двойные кавычки "схлопываются" по две в одну, на выходе имеем

const string startDate = @"""\""2000-12-31T09:41:59\"""""""""";

Добрый день, Илья!

Другим Ильей :) формат указан правильный:
[quote="Мотков Илья"]
const string startDate = @"""\""2000-12-31T09:41:59\"""""""""";

значение

@"""\""2000-12-31T09:41:59\"""""""""";

Илья, нет, формат все же верный, то есть тайм-стамп в экранированных кавычках, и в кавычках. Я не имел ввиду, что это должен быть валидный json, это просто формат, в виде которого по определенным архтиктурным причинам передается дата в приложении.

"Кот Владимир Владимирович" написал:то есть тайм-стамп в экранированных кавычках, и в кавычках.

вот, смысл прояснился :) понятно, спасибо за пояснения.

На данный момент сделал так:

switch (t.Name)
{
	...
 
	case "DateTime":
		value = @"""\""2000-12-31T09:41:59\"""""""""";

Те кто все-таки забрел в эту тему, достаточно передать DateTime обернутым в экранированные кавычки.

var date = DateTime.Now;
 
insertQuery.ColumnValues.Items.Add("....", new ColumnExpression()
{
	ExpressionType = EntitySchemaQueryExpressionType.Parameter,
	Parameter = new Parameter()
	{
		Value = "\""+date+ ""\""""
Показать все комментарии

День добрый, Коллеги!

После обновления BMPonline 7 (бинарники и пакеты через консоль) с 138 версии на 206, при попытке зайти на сайт CRM вылазит ошибка:

"Ошибка сервера
500 - внутренняя ошибка сервера.
Проблема с запрашиваемым ресурсом; ресурс не может быть отображен."

Судя по описанию ошибки в инете проблема скорей всего с правами на сервере или настройками IIS, но пока устранить не получилось...

Может кто сталкивался? или сможет подсказать куда копать хотя бы?
Самое странное что это произошло после обновления террасофта (настройки iis не менялись, папка тоже =\ просто тупо заменили файлы в старой папке на новые и отредактировали файлы Web.config и ConnectionString в корне и после накатили пакеты через консоль)
*возможно кроме Web.config'а и ConnectionString'а в корневой папке нужно править еще какие-нить файлы?

Буду раз за любую информации по данному вопросу!

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

Нравится

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

Добрый день!
давайте по порядку.

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

1) Пул приложений

2) Handler Mappings

3) Authentication

4) проверить привязки сайта, ссылаются ли они в нужные места:

кажется все.
Перепроверьте, проблема должна уйти, если нет - жду скрин-шот :)

Тему можно закрывать
Спасибо за ответ Сергей, но мы как оказалось сами накосячили...
когда файл новой версии редактировали с настройками Web.config в Notepade++ сохранили его не посмотрев КАК он его сохранил ) в итоге сохранение файла прошло в ANSI, вместо Unicode и строчка

<add name="UserNameMask" value="Пользователь {0}" />

превратилась в

<add name="UserNameMask" value="???????? {0}" />

и сервер воспринимал это как ошибку в структуре xml =\ о чем и написал нам при попытке посмотреть настройки приложения в IIS

отлично! приятной работы ;)

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