Коллеги всем доброго времени суток! Подскажите как сгенерировать Terrasoft.Exception.

Необходимо преред добавлением записи проверять заполнение детали если пусто выкидывать Exception и сообщение, что заполните деталь

Terrasoft.sdk.Model.setModelEventHandler("Contact", 
	Terrasoft.ModelEvents[Terrasoft.ModelEventKinds.Before].insert,
	function(config, operation) {
		debugger;
		var record = config.scope.eventConfig.records[0];
		window.console.log(config);
		window.console.log(record);
		var addresses = record.ContactAddressDetailV2EmbeddedDetailStore.getData();
		if(addresses.all.length === 0) {
			var exceptionConfig = {
				message: "Сообщение",
			};		
			Ext.callback(config.failure,config.scope,Terrasoft.Exception(exceptionConfig);
		} else {
			Ext.callback(config.success, config.scope, [true]);
		}		
});

Как реализовать что бы работало, может кто то сталкивался?

Вылазит следующие ошибки  -http://prntscr.com/ocnz86

не читает - http://prntscr.com/ocnzgz

Заранее благодарен.

Нравится

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

разобрался

Terrasoft.sdk.Model.setModelEventHandler("Contact", 
	Terrasoft.ModelEvents[Terrasoft.ModelEventKinds.Before].insert,
	function(config, operation) {
		debugger;
		var record = config.scope.eventConfig.records[0];
		window.console.log(config);
		window.console.log(record);
		var addresses = record.ContactAddressDetailV2EmbeddedDetailStore.getData();
		if(addresses.all.length === 0) {
			var exception = new Terrasoft.Exception();
			exception.config.message = "Сообщение";
 
			Ext.callback(config.succes, config.scope, [false]);
		} else {
			Ext.callback(config.success, config.scope, [true]);
		}
		Ext.callback(config.success, config.scope, [true]);
});

 

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

Salud, amigos!

Версия: 3.3.2.222
Класс исключения: EOleException
Сообщение об ошибке: OLE error 80020102
Прошу объяснить мне не образованному человеку причину этой ошибки
Возникает на коде:

...
Dataset('SomeName') = 0;    // (*)
...

Поле 'SomeName' - типа Boolean. Исключение выбрасывается не всегда, а только на некоторых записях.
При том перед присвоением:
Вывод -
MessageBox(Dataset.ValAsStr('SomeName'));

Отрабатывает корректно, но повторюсь иногда - после строчки кода (*) выбрасывает исключение [Object Error].

Буду очень признателен за руку помощи.

Нравится

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

Чтобы увидеть настоящую причину ошибки, надо установить отладчик.

Исключение выбрасывает строка *.

function RecalcPartableDiscounts(){  
    if (Self.State == dstEdit){               
        var UpdateQuery = GetSingleItemByCode('uq_SetOrderPartableParams');
        var Parameters = UpdateQuery.Parameters;
        Parameters('ID').Value = Self('ID');    
        Parameters('HasClientCard').Value = Self('HasClientCard');
        Parameters('SourceID').Value = Self('SourceID');
        Parameters('IsComplaintDiscount').Value = Self('IsComplaintDiscount');
        UpdateQuery.Execute(); (*)
        RecalcOrderPartableDiscounts(Self('ID'));
        CalcOrderLotsAmount(Self);
	}
}

А как выглядит uq_SetOrderPartableParams? И что именно пишет при возникновении исключения?

Исключение в принципе, всё то же, что и в названии темы. После установки отладчика, проследил стек вызовов, и дошёл до этого метода.

Егор, предоставьте, пожалуйста, более подробную информацию по uq_SetOrderPartableParams

Что выполняется в пользовательском запросе?

Напрашивается вопрос.
С каким Dataset взаимодействует UpdateQuery, и как можно определить тот самый Dataset? (По логике все Наборы данных которые могут иметь отношение к Запросу на обновление (в моём случае) отмечены CheckBox'ом Генерировать запрос на обновление.)
Вывод Assigned(Dataset.UpdateQuery.Caption) выдаёт false.
Прошу пояснить механизм работы конвейера, и прядок и принципы обработки данных.
С уважением
Ваш коллега.

"Резвов Роман" написал:Егор, предоставьте, пожалуйста, более подробную информацию по uq_SetOrderPartableParams

Что именно необходимо?
Я человек новый, пока всех тонкостей и особенностей сервисов не знаю, буду благодарен за более исчерпывающую информацию.

Егор, доброго времени суток.

UQ - это сервис который отсылает UPDATE запрос к базе, без всяких там датасетов и так далее.
По поводу ошибки, значение параметров нужно устанавливать так:

SetParameterValue(Parameters, 'ID', ID);

а

GetSingleItemByCode('uq_SetOrderPartableParams');

лучше заменить на

Services.GetNewItemByUSI('uq_SetOrderPartableParams');

И проверьте чтобы совпадал тип параметра с типом колонки в БД.

Удачи!

Дмитрий, и все участники обсуждения, выражаю огромную благодарность. Вы мне очень помогли. Проблема выявлена.
И заключалась в неверных типах значений сервиса UpdateQuery, которые не совпадали с типами в таблице БД.
Буду дальше выравнивать ситуацию после своих предшественников, и совершенствовать своё понимание системы, ещё раз всем огромное спасибо.
P.S.

"Олейник Дмитрий" написал:GetSingleItemByCode('uq_SetOrderPartableParams');
лучше заменить на

Services.GetNewItemByUSI('uq_SetOrderPartableParams');


У меня дилетантский вопрос:
До этого момента ломал голову и думал что лучше. Пришёл к выводу что как раз первый вариант с тем аргументированием что функция более гибкая, и позволяет, при использовании единого кода (второй параметр) каждый раз не создавать новый экземпляр сервиса, а ссылаться на уже созданный.
Возможно моё недопонимание двух методов связано с отсутствием опыта использования в соответствующих особых ситуациях.
Так в общем собственно вопрос =)
Почему лучше?

Это совет из опыта. Так будет большая вероятность избежать утечек памяти.

Учту на будущее, благодарю!

С уважением,
Ваш коллега

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