Skip to content

Введение в пользовательские функции

1. Обзор

1.1 Сценарии применения

FineBI предоставляет большое количество автономных функций, в обычных условиях достаточно для удовлетворения потребностей пользователя в производстве шаблонов, но в некоторых специальных областях, вам могут понадобиться некоторые специальные функции, в этом случае FineBI предоставляет пользовательские функции, могут быть использованы пользователем в соответствии с потребностями бизнеса, чтобы определить свои собственные функции, но эти функции должны соответствовать правилам определения функций FineBI.

Примечание: Поддерживаются только извлеченные данные.

1.2 Область применения

1.3 Правила определения

Правила определения функций FineBI: Functionname(Para,Para,...)где Functionname - имя функции, а Para - параметр.

В FineBI каждая функция определяется как класс, который должен реализовывать интерфейс Function, и при вычислениях вы сначала получаете класс, отражаясь на имени функции, а затем вызываете ее метод run(Object[] agrs).

Возьмем в качестве примера функцию SUM. Класс SUM, который используется для вычисления функции SUM, наследует класс AbstractFunction, который реализует интерфейс Function.

Когда выполняется операция функции, сначала по имени функции получаем операцию функции класса, например SUM(2,4,true) эта функция сначала по имени функции получает класс SUM, а затем вызывает метод класса SUM run(Object[] args), args хранится в функции SUM в виде параметра, операция параметров из args может быть получена из args для выполнения операции. Если результат SUM(2,4,true)=2+4+1=7.

Код, используемый функцией SUM:

  
  
  
package com.fr.report.script; import com.fr.general.FArray; import com.fr.script.AbstractFunction; public class&  
  
nbsp;CSUM extends AbstractFunction { public Object run(Object[] args) { double result =  
  
0; for (int i = 0; i < args.length; i++) { if (args[i] == null)  
  
  
  
  
  
  
{ continue; } result += parseObject(args[i]); } return result; } private double parseObject(Object  
  
  
 obj) { if (obj instanceof Number) { return ((Number) obj).doubleValue(); } else if  
(obj instanceof Boolean) { return ((Boolean) obj).booleanValue() ?  
  
1 : 0; } else if (obj instanceof FArray) { FArray array = (FArray)&nbsp  
  
  
;obj; double sum = 0; for (int i = 0; i < array.length(); i++) { sum&  
  
  
 nbsp;+= parseObject(array.elementAt(i)); } return sum; } else if (obj !  
  
  
= null) { try { return Double.parseDouble(obj.toString()); } catch (NumberFormatException exp)&  
  
  
  
  
  
 nbsp;{ return 0; } } return 0; } }

1.4 Подготовка среды компиляции

Дополнительную информацию см. в разделе: Компиляция программ Java

2. Примеры

Для иллюстрации использования пользовательских функций используется пример простой пользовательской функции.

Определите функцию StringCat, которая объединяет все аргументы в виде строк.

Дополнительные сведения см. в разделе: Пользовательские функции для сращивания строк

3. условия

1) Имя пользовательской функции основано на имени файла класса.

(2) имя файла пользовательской функции поддерживает только английский язык, включая чистый верхний регистр, чистый нижний регистр, смешанный регистр.

3) Добавленная функция отображается в разделе "Другие функции".

4) Ввод в смешанном регистре в настоящее время не поддерживается.