Здравствуйте!
Код из стандартного скрипта scr_DB:
CheckAssigned(FiltersNode, 'Filter');
if (FiltersNode.Code == FilterCode) {
FiltersNode.IsEnabled = Enabled;
// Enable all included filters
EnableAllFilters(FiltersNode, Enabled);
return true;
}
var Result = false;
if (FiltersNode.FilterType == ftFilters) {
for (var i = 0; (i FiltersNode.Count) && (!Result); i++) {
Result = EnableFilter(FiltersNode.Items(i), FilterCode, Enabled);
}
if (Result && Enabled) {
FiltersNode.IsEnabled = true;
}
} else
if ((Assigned(FiltersNode.TestExpression)) &&
(FiltersNode.TestExpression.ExpressionType == fetSelect)) {
EnableSelectQueryFilters(
FiltersNode.TestExpression.ExpressionSelectQuery, Enabled,
new Array(FilterCode));
}
return Result;
}
Здесь, FiltersNode - это набор фильтров с типом IFilters
Тем не менее, из скрипта возможно обращение вида
На С# подобное обращение невозможно, поскольку при явном указании типа IFilters у FiltersNode отсутствует свойство Code. Привести же FiltersNode к типу IFilter тоже не получается, поскольку интерфейс IFilter не поддерживается, что логично, поскольку это все же коллекция ( что подтверждает вызов FiltersNode.Items(i))
Разъясните пожалуйста, как я могу переписать указанную функцию на С#.
Нравится
Pavel, JScript - нетипизированный язык, поэтому в скрипте можно прописать:
FiltersNode.Code == FilterCode
В случае С# необходимо проверять тип FiltersNode. Если FiltersNode соответсвует фильтру (а не группе фильтров) - выполнять требуемую логику.
Прокомментируйте, пожалуйста, почему вот этот код http://www.community.terrasoft.ru/blogs/6354 не работает в моей версии Террасофта 3.4.0.134.
Ошибка
Для типа "TSObjectLibrary.ConnectorClass" не определен конструктор
Если заглянуть в описание библиотеки, то TSObjectLibrary.ConnectorClass.ConnectorClass() (конструктор?) присутствует.
Спасибо.
Павел, код работает в 3.4.0.
Если класс не определен, значит некорректно импортирован в проект C# reference TSObjectLibrary.dll либо что-то не так со сгенерированным wrapper’ом.
Попробуйте использовать пример из вложения (загрузка валют с сайта ЦБР), созданный и протестированный Алексеем Агутиным. В примере для подключения используется DSKConnector.
Наталья, спасибо большое за помощь, во всем разобрался.
Касательно конструктора - неверно были настроены references.
Если говорить вот об этом
FiltersNode.Code == FilterCode
То да, необходима проверка вида
if (FiltersNode is IFilter)