2009-08-19 5 views
1

Я создаю отчет, который должен содержать столбец «оценка», который основан на данных, недоступных в наборе данных.Отображение вычисленных данных с внешними зависимостями

В идеале я хотел бы иметь возможность определить интерфейс Java

public int getEstimate(int foo_id, int bar_id, int quantity); 

где foo_id, bar_id и quantity доступны в строке я хочу оценка представлены.

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

Глядя на документы BIRT, я думаю, что, возможно, я должен использовать механизмы обработчика событий, но это только позволяет определить класс для использования, и я хотел бы как-то добавить настроенную оценку.

Непринужденный пример может означать, что у меня есть набор данных, который включает столбец IP-адреса, и я хотел бы иметь возможность использовать некоторую службу GeoIP для разрешения страны с IP-адреса. В этом случае у меня будет интерфейс public String getCountryName(String address), и фактические реализации могут использовать MaxMind, локальный кеш или другую систему.

Как бы я это сделал?

Или .. было бы лучше, если бы я написал сценарий источника данных, который может интегрировать вычисленные данные перед их доставкой в ​​BIRT?

Или .. какой-то сценарий источника данных, который затем используется для создания набора данных соединения?

ответ

0

Я думаю, что источник данных с Scripted Data будет работать нормально, но обработчик событий на Java будет более простым. Вы можете реализовать его как простой POJO и получить доступ к любым и всем сложным объектам и инструментам, которые позволят вам рассчитать вашу оценку. Простейшим решением для всех может быть просто добавление вычисленного поля в набор данных.

При создании вычисленного поля вы можете получить довольно сложную с точки зрения логики сценариев, которую вы можете использовать, чтобы получить результирующее значение. Самое приятное в этом маршруте состоит в том, что все остальные значения столбца в строке (которые, как я полагаю, вам нужно рассчитать) доступны в редакторе Expression. Вы можете использовать сложные объекты (POJO), чтобы помочь в ваших расчетах здесь, используя объект «Пакеты» (т. Е. var red = new Packages.redwood.HelloWorld())

Если вы хотите создать класс обработчика событий, вот что я буду делать. Я бы создал текстовый объект и привязал onCreate даже к вашему POJO (расширив TextItemEventAdapter) и переопределив метод onCreate. Там вы можете сделать любую работу, которую хотите, и в конце просто назовите 'text.setText(theEstimateResult);', чтобы сделать оценку видимой. Что касается доступа к значениям данных для выполнения ваших вычислений, вы можете добраться до тех, кто находится в POJO. Я предполагаю, что оценка будет частью большей таблицы значений. Вы можете получить доступ к любому определенному значению строки через reportContext.

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

+0

Я пытаюсь понять, как в вашем примере экземпляр redwood.HelloWord сможет иметь предварительно сконфигурированные свойства не из сценария BIRT. Например, мой контекст Spring, в котором я пытаюсь запустить BIRT, может иметь реализацию интерфейса службы, которую должен использовать мой оценщик.Игнорирование HelloWorld напрямую означает, что он нуждается в настройке. Возможно, мне нужно взглянуть на Spring AOP для динамического ввода, но я подозреваю, что бит BIRT OSGI может мешать. Обработчики событий выглядят красиво, но я просто не знаю, как получить ссылку на ранее существовавший экземпляр external-to-birt. – ptomli

+0

В примере обработчика событий, если вам нужно захватить ранее существовавший экземпляр чего-либо (и вы работаете в той же виртуальной машине), вам, скорее всего, понадобится «что-то» для реализации шаблона Singleton. Частный конструктор и общедоступный метод getInstance(). Это позволит вам легко схватить его с POJO. – MystikSpiral

+0

ОК, я собираюсь попробовать пару вариантов и посмотреть, что выпадет. Я думаю, что источник данных обеспечит лучшие механизмы контроля в Spring (я могу ввести экземпляр, избегая Singleton), хотя обработчик событий имеет хорошее «чувство» к нему (конкретные классы для определенных целей). благодаря – ptomli