Страница 1 из 1

Пользовательские функции

Добавлено: 20 фев 2014, 14:26
kavit
Добрый день.

Существует возможность добавления собственных функций в отчеты? Например: число 23 нужно отображать как "двадцать три" или "зонт" => "зонты"

Re: Пользовательские функции

Добавлено: 20 фев 2014, 16:53
HighAley
Здравствуйте.

Для перевода чисел в строку вы можете использовать функцию Strings - ToWords - ToWordsRu()
Вы можете добавить свои функции перед вызовон дезайнера с помощью следующего статического метода:

Код: Выделить всё

public static StiFunction AddFunction(string category, string groupFunctionName, string functionName, string description, Type typeOfFunction, Type returnType, string returnDescription, Type []argumentTypes, string []argumentNames, string []argumentDescriptions)
Спасибо.

Re: Пользовательские функции

Добавлено: 21 фев 2014, 11:58
kavit
Получилось зарегистрировать функцию, но при открытии "Просмотра" в "Дизайнере", "Дизайнер" подвисает и ничего не показывает.

Регистрация функции выполняется следующим образом:

Код: Выделить всё

Type typeOfFunction = this.GetType();
Type returnType = typeof (string);
Type[] argumentTypes = { typeof (int) };
string[] argumentNames = { "value" };
string[] argumentDescriptions = { "Число для преобразования" };

StiFunctions.AddFunction(
    "User", 
    "Group", 
    "MyConvert", 
    "Пользовательская функция", 
    typeOfFunction, 
    returnType,
    "Строка с приставкой 'Ex: '",
    argumentTypes,
    argumentNames,
    argumentDescriptions
);
Вызов регистрации выполняется так:

Код: Выделить всё

var report = new StiReport();

report.Load(@"Data\Report.mrt");
report.RegBusinessObject("Item", list);
report.Dictionary.SynchronizeBusinessObjects(7);

AddFunction();

report.Design();
Какие еще моменты нужно учесть при регистрации и вызове собственной функции?


Пример проекта прикрепляют. Прикрепить видео пример не могу: "расширение swf запрещено администратором"

Re: Пользовательские функции

Добавлено: 25 фев 2014, 02:40
Ivan
Здравствуйте.
kavit писал(а):Получилось зарегистрировать функцию, но при открытии "Просмотра" в "Дизайнере", "Дизайнер" подвисает и ничего не показывает.
Проблема решена.
Патч будет включен в следующий предрелизный билд в пятницу.

Также вам надо сделать вашу функцию статической, т.е.

Код: Выделить всё

public static string MyConvert(int value)
        {
            return "Ex: " + value;
        }
Если не хотите ждать следующего билда, то в своём коде при вызове метода AddFunction замените имя группы на имя функции:

Код: Выделить всё

StiFunctions.AddFunction(
    "User", 
    "MyConvert",    // <---
    "MyConvert", 
    "Пользовательская функция", 
    typeOfFunction, 
    returnType,
    "Строка с приставкой 'Ex: '",
    argumentTypes,
    argumentNames,
    argumentDescriptions
);
Спасибо.

Re: Пользовательские функции

Добавлено: 25 фев 2014, 11:07
HighAley
Здравствуйте.

Ваша функция должны быть статической.
Ещё мы поправили небольшой баг. На данный момент название группы должно быть такое же как и название функции.
Данный баг уже исправлен. Исправление будет доступно в нашем следующем предрелизном билде.

Спасибо.