Seitenhistorie
Inhalt | ||
---|---|---|
|
Allgemein
Regeln des Typs "DatasourceRule
...
" dienen zur Bereitstellung von Daten für eine Datenquelle vom Typ "Dynamische Taskliste" oder "Report & Formular" durch die Implementierung des Interfaces org.nuclos.api.rule.DatasourceRule
.
Innerhalb des Baums mit der Regelbibliothek werden sie dem Knoten "DatasourceRule" zugeschrieben.
Struktur
Quellcode einer Klasse des Typs "Aktualisieren":
Codeblock | ||
---|---|---|
|
...
package |
...
example. |
...
rest; |
...
import org.nuclos.api.rule.DatasourceRule; import org.nuclos.api.UID; import org.nuclos.api. |
...
datasource. |
...
DatasourceColumn; |
...
import |
...
org.nuclos.api.datasource.DatasourceResult; import org.nuclos.api. |
...
provider. |
...
DatasourceProvider; |
...
import org.nuclos.api |
...
.provider.QueryProvider; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Locale; import java.util.Map; public class DynamicArticleTasklistDatasourceRule implements DatasourceRule { /** * Diese Methode liefert die Daten für die Datenquelle in Form eines Objekts vom Type "DatasourceResult" zurück * und muss als einzige des Interfaces implementiert werden. * Zur Einschränkung der Ergebnisse können die Parameter ausgewertet werden, die wie üblich in Form einer "Map<String, Object>" übergeben werden. * Das zurückgegebene Objekt beinhaltet die Spaltendefinitionen als "List<DatasourceColumn>" und die Menge der Zeilen als "List<Object[]>". * Objekte vom Typ "DatasourceColumn" beinhalten die Information über den Namen der Spalte und den Datentyp und * können über den Aufruf von "DatasourceProvider.createResultColumn(name, type)" erzeugt werden. * **/ @Override public DatasourceResult getData(Map<String, Object> params) { List<DatasourceColumn> columns = Arrays.asList( DatasourceProvider.createResultColumn("number", Integer.class), DatasourceProvider.createResultColumn("name", String.class), DatasourceProvider.createResultColumn("active", Boolean.class), DatasourceProvider.createResultColumn("intid", Long.class) ); List<Object[]> rows = new ArrayList<>(); List<Article> lstArticles = QueryProvider.execute(QueryProvider.create(Article.class).where(Article.Active.eq(true))); for (Article article : lstArticles) { rows.add(new Object[] {article.getArticleNumber(), article.getName(), article.getActive(), article.getId()}); } return DatasourceProvider.createResult(rows, columns); } /** * Die nachfolgenden Methoden können implementiert werden, haben allerdings eine Standardimplementierung im Interface. Diese ist in * dieser exemplarischen Implementierung der Klasse angegeben. **/ /** * Liefert die Anzahl der Datensätze aus der Datenquelle unter Berücksichtigung der Suchbedingung und der Parameter. **/ @Override public Long count(SearchExpression |
...
se, Map<String, Object> params) { return (long)this.getData(params).getRows().size(); } /** * Liefert alle Datensätze aus der Datenquelle unter Berücksichtigung der Suchbedingung und der Parameter. **/ @Override public DatasourceResult getAll(SearchExpression se, |
...
Map<String, Object> params) {
return this.getData(params);
}
/**
* Liefert die IDs aller Datensätze aus der Datenquelle unter Berücksichtigung der Suchbedingung und der Parameter.
**/
@Override
public List<Long> getAllIds(SearchExpression se, Map<String, Object> params) {
DatasourceResult data = this.getData(params);
int i;
for(i = 0; i < data.getColumns().size(); ++i) {
DatasourceColumn column = (DatasourceColumn)data.getColumns().get(i);
if ("INTID".equals(column.getName())) {
break;
}
}
return (List)data.getRows().stream().map((row) -> {
return (Long)row[i];
}).collect(Collectors.toList());
}
/**
* Liefert einen Datensatz mit einer bestimmten ID. Diese ID wird als Parameter "INTID" in der Map übergeben.
**/
@Override
public DatasourceResult getById(Map<String, Object> params) {
DatasourceResult data = this.getData(params);
int i;
for(i = 0; i < data.getColumns().size(); ++i) {
DatasourceColumn column = (DatasourceColumn)data.getColumns().get(i);
if ("INTID".equals(column.getName().toUpperCase())) {
break;
}
}
return (DatasourceResult)data.getRows().stream().filter((row) -> {
return row[i] != null && row[i].equals(params.get("INTID"));
}).map((row) -> {
List<Object[]> rows = new ArrayList();
rows.add(row);
return DatasourceProvider.createResult(rows, data.getColumns());
}).findFirst().orElse(DatasourceProvider.createResult(new ArrayList(), data.getColumns()));
}
/**
* Liefert eine Menge von Datensätzen mit bestimmten IDs. Diese IDs werden als "List<Long>" im Parameter "INTID" in der Map übergeben.
**/
@Override
public DatasourceResult getByIds(Map<String, Object> params) {
DatasourceResult data = this.getData(params);
int i;
for(i = 0; i < data.getColumns().size(); ++i) {
DatasourceColumn column = (DatasourceColumn)data.getColumns().get(i);
if ("INTID".equals(column.getName().toUpperCase())) {
break;
}
}
return DatasourceProvider.createResult((List)data.getRows().stream().filter((row) -> {
return ((List)params.get("INTID")).contains(row[i]);
}).collect(Collectors.toList()), data.getColumns());
} } |
Überblick
Inhalte