Versionen im Vergleich

Schlüssel

  • Diese Zeile wurde hinzugefügt.
  • Diese Zeile wurde entfernt.
  • Formatierung wurde geändert.
Auszug
hiddentrue

Nuclos DatasourceProvider: run, DatasourceResult, rows, columns, Datenquelle, callDBFunction, Oracle, Map Parameter.

globe with meridians Sprache: Deutsch · English

open book DatasourceProvider

Datenquellen aus Regeln ausführen – run(), DatasourceResult, rows/columns und Datenbankfunktionen.

Status
colourGrey
titleReferenz
Status
colourBlue
titleEntwickler
Status
colourGreen
titleStand: Jul 2026
Status
colourGrey
titlegilt fuer Nuclos 4.2026.x

Panel
bgColor#F4F5F7

Auf dieser Seite

Inhalt
maxLevel2
minLevel2

Wozu dient der DatasourceProvider?

Der DatasourceProvider führt eine Datenquelle (aus Report und Formular) programmatisch aus.

run(datasourceClass[, params])

Führt die Datenquelle aus und liefert ein DatasourceResult mit Zeilen (rows) und Spalten (columns). Parameter werden optional als Map übergeben.

Allgemein

Der DatasourceProvider ist eine Hilfsklasse, die alle notwendigen Methoden zur Ausführung eines Datenquellen-Abfrage beinhaltet.

Funktionsumfang

 

...

Diese Methode ermöglicht die Ausführung einer Datenbankabfrage. Im Methodenaufruf muss die Datenquelle aus "Report und Formular" angegeben werden.

Der Rückgabewert der Methode ist ein DatasourceResult-Objekt, das die gefundenen Treffer (rows) und die abfragbaren Spalten (columns) beinhaltet.

...

Codeblock
languagejava
public DatasourceResult run(Class<? extends Datasource> datasourceClass) throws BusinessException;

...

Für eine Datenabfrage können u.U. Parameter zur Präzisierung der Abfrage notwendig sein. In diesem Fall gibt es eine zweite run-Methode(), die eine Map mit den Werten an die Abfrage weiterleiten kann:

...


public DatasourceResult run(Class<? extends Datasource> datasourceClass, Map<String, Object> params) throws BusinessException;
Warnung

 

Das DatasourceResult - Objekt stellt das Suchergebnis der Datenbankabfrage dar. Hauptbestandteile sind:

  • rows (Gefundene Zeilen/Treffer der angegebenen Datenbankabfrage; Jede Zeile wird als Object[] -Array dargestellt, wobei jedes Object in diesem Array den Inhalt der entsprechenden Spalte aufnimmt)
  • cols (Spalten vom Typ DatasourceColumn, welches die Metainformationen Spaltenname und Spalten-Datentyp beinhaltet; Jede gefundene Zeile/row besitzt die hier hinterlegten Spalten)

Die Abfrage der Ergebnisse basiert auf folgendem Prinzip: Iteriert werden die Ergebnisse mittels getRow(Zeilenindex). Jede Zeile wird als Object[] Array zurückgeliefert. Möchte man auf einen bestimmten Spaltenwert in diesem Object[] typisiert zugreifen, erhält man mittels Aufruf getColumns().get(Spaltenindex) die Metainformation der gewünschten Spalte und kann den Wert getRow(Zeilenindex)[Spaltenindex] dem Klassentyp entsprechend casten oder mit dem Spaltennamen beschriften.

Ein Beispiel finden Sie hier.

titleOracle

Unter Oracle funktioniert dies nur für Datenquellen, die keine Daten schreiben – innerhalb eines SELECT dürfen dort keine Daten verändert werden.

Ergebnis auswerten

rows ist eine Liste von Object[]; über getColumns() erhält man Name und Datentyp je Spalte und kann typgerecht casten.

Codeblock
languagejava
public class AuftragAbschliessen implements UpdateFinalRule {
    public void updateFinal(UpdateContext context) throws BusinessException { 
        // Als Parameter geben wir die ID mit
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("intid", er.getId().intValue());
        
		DatasourceResult run = DatasourceProvider.run(AuftragDS.class, map);
        
        for (Object[] rowWithColumns : run.getRows()) {
            for (int idx=0; idx < run.getColumns().size(); idx++) {
                DatasourceColumn datasourceColumn = run.getColumns().get(idx);
                ctx.log("Feld: " + datasourceColumn.getName() + " hat den Wert: " + 
                        run.getColumns().get(idx).getType().cast(rowWithColumns[idx]).toString());
            }            
        }
}

Datenbankfunktion aufrufen

Der Provider ersetzt das alte callDBFunction: Die Funktion wird in einer Datenquelle gekapselt und indirekt aufgerufen.

Codeblock
languagesql
SELECT CA_MYDBFUNCTION('$parameter')::numeric(9,2) "result"
Codeblock
languagejava
package org.nuclet.test;
 
import org.nuclos.api.exception.BusinessException;
import org.nuclos.api.provider.DatasourceProvider;
import org.nuclos.api.datasource.DatasourceResult;
  
@Rule(name="Test", description="Test")
public class Test {
    public static Double callFunction() throws BusinessException {
        DatasourceResult ds = DatasourceProvider.run(MyDatasourceDS.class);
        Double result = (Double)(ds.getRows().iterator().next()[0]);
        return result;
    }
}

Verwandte Seiten

file cabinet Datenquellen


Datenquellen.

Öffnen →

gear QueryProvider


Daten laden.

Öffnen →

gear BusinessObjectProvider


BOs schreiben.

Öffnen →

 

...