Zum Hauptinhalt springen
Version: 4.1 (2026 H2)

CodeDataProvider


Der CodeDataProvider liefert die Daten eines Object bzw. einer ObjectCollection über ein JavaScript-Snippet, anstatt sie aus einer externen Quelle (CSV, Excel, SQL, HTTP) zu laden. Er eignet sich, um Einträge berechnet, aus den eingegebenen Suchparametern oder aus dem Connect-Datenkontext bereitzustellen.

Der CodeDataProvider nutzt denselben Mechanismus wie die übrigen DataProvider und steht sowohl im primedocs Desktop Client als auch in primedocs Web zur Verfügung.

Konfiguration

<ObjectCollection Id="Positions" Label="Positionen">
<Schema>
<Text Id="Article" Label="Artikel" />
<Text Id="Amount" Label="Betrag" />
</Schema>
<DataProviders>
<CodeDataProvider DisplayName="Aus Connect-Daten">
<SearchParameters>
<Text Id="Category" Label="Kategorie" field-Value="Data.Category" />
</SearchParameters>
<Code>
var category = $("Category");
[
{ Article: "Beispiel " + category, Amount: "100.00" }
]
</Code>
</CodeDataProvider>
</DataProviders>
</ObjectCollection>
hinweis

Im Gegensatz zu den dateibasierten oder HTTP-Providern benötigt der CodeDataProvider kein Mapping: Die Eigenschaften der vom Snippet zurückgegebenen Objekte werden direkt anhand ihres Namens den Schema-Feldern zugeordnet. Verschachtelte Objekte werden mit Punktnotation abgeflacht (z.B. Address.City).

Attribute

AttributBeschreibung
DisplayName / translate-DisplayName (optional)Anzeigename des Providers in der Oberfläche.
ReadOnly (optional)Wenn true: Die über diesen Provider geladenen Felder sind schreibgeschützt.
AutoAddAllEntries (optional)Wenn true: Alle vom Snippet gelieferten Einträge werden automatisch zur Sammlung hinzugefügt.

Elemente

ElementBeschreibung
Code (erforderlich)JavaScript-Ausdruck, dessen Wert die Einträge liefert: ein Array von Objekten (bei ObjectCollection) bzw. ein einzelnes Objekt (bei Object). Jedes Objekt entspricht einem Eintrag; seine Eigenschaften werden zu Feldern. Der Ausdruck darf mehrzeilig sein (vorangestellte var-Deklarationen usw.), massgebend ist der Wert des letzten Ausdrucks. Kein main()- oder return-Rahmen nötig.
SearchParameters (optional)Suchmaske mit Text, Date, YesNo, Choice (wie in Forms). Mit field-Value (Wert aus dem Connect-Datenkontext) bzw. parent-Value (Feld des übergeordneten Objekts) lassen sich Parameter vorbelegen.

JavaScript-API

Innerhalb des Code-Snippets steht das $-Objekt zur Verfügung:

AufrufBeschreibung
$.parameter("Id") bzw. $("Id")Wert eines konfigurierten Suchparameters.
$("Data.Key")Wert aus dem Connect-Datenkontext.
$.parent("FeldId")Wert eines Feldes des übergeordneten Objekts (in verschachtelten Object-/ObjectCollection-Strukturen).
hinweis

Der CodeDataProvider nimmt nicht am Loading-Pfad der ProviderPipeline teil, da er keinen flachen Such-Schritt besitzt, der beim Laden neu zugeordnet werden könnte.

Beispiel: Suche in mitgelieferten Connect-Daten

Dieses Beispiel durchsucht Daten, die mit dem Connect-Aufruf mitgeliefert werden, und stellt sie als gefilterte Auswahlliste bereit. Die Datenquelle bleibt massgebend: ReadOnly="true" setzt die übernommenen Felder schreibgeschützt und DisableManualCreate="true" verhindert das manuelle Anlegen eigener Einträge.

<FormsConfiguration>
<Elements>
<ObjectCollection Id="SelectedLocations" Label="Standorte">
<Schema>
<Text Id="Company" Label="Firma" />
<Text Id="Street" Label="Strasse" />
<Text Id="PostalCode" Label="PLZ" />
<Text Id="City" Label="Ort" />
<Text Id="Country" Label="Land" />
</Schema>
<DataProviders DisableManualCreate="true">
<CodeDataProvider DisplayName="Standort suchen" ReadOnly="true" AutoAddAllEntries="false">
<SearchParameters>
<Text Id="query" Label="Firma, Ort oder PLZ" />
<Text Id="country" Label="Ländercode" field-Value="Data.DefaultCountry" />
</SearchParameters>
<Code><![CDATA[
$('Data.Locations')
.filter(function (location) {
var query = $('query').toLowerCase();
var country = $('country').toUpperCase();

var text = (
location.Company + ' ' +
location.PostalCode + ' ' +
location.City
).toLowerCase();

return (query === '' || text.indexOf(query) >= 0)
&& (country === '' || location.Country === country);
})
]]></Code>
</CodeDataProvider>
</DataProviders>
</ObjectCollection>
</Elements>
</FormsConfiguration>
tipp

Der Code-Ausdruck steht in einem <![CDATA[ … ]]>-Block, damit Zeichen wie <, > und & (z.B. in >= oder &&) nicht als XML interpretiert werden.

Der Suchparameter country wird über field-Value="Data.DefaultCountry" aus dem Connect-Datenkontext vorbelegt. Über $('Data.Locations') liest das Snippet die mitgelieferte Objektsammlung, filtert sie anhand der eingegebenen Suchparameter ($('query'), $('country')) und gibt die gefilterten Objekte direkt zurück. Deren Eigenschaften (Company, Street usw.) werden anhand ihres Namens den Schema-Feldern zugeordnet — ein manuelles Ummappen ist nicht nötig.

Ein passender Connect-Aufruf, der DefaultCountry und die Sammlung Locations mitliefert:

<primedocsConnect>
<Data>
<Value Key="DefaultCountry">CH</Value>

<ObjectCollection Key="Locations">
<Item>
<Value Key="Company">PrimeSoft AG</Value>
<Value Key="Street">Bahnhofstrasse 4</Value>
<Value Key="PostalCode">8630</Value>
<Value Key="City">Baar</Value>
<Value Key="Country">CH</Value>
</Item>

<Item>
<Value Key="Company">Alpine Legal AG</Value>
<Value Key="Street">Bundesplatz 1</Value>
<Value Key="PostalCode">3011</Value>
<Value Key="City">Bern</Value>
<Value Key="Country">CH</Value>
</Item>

<Item>
<Value Key="Company">Acme Deutschland GmbH</Value>
<Value Key="Street">Leopoldstrasse 10</Value>
<Value Key="PostalCode">80802</Value>
<Value Key="City">München</Value>
<Value Key="Country">DE</Value>
</Item>
</ObjectCollection>
</Data>
</primedocsConnect>

Eine Suche nach Prime liefert damit genau einen Treffer:

Suchresultat des CodeDataProviders im Dokumenterstellungs-Dialog

Suche nach «Prime» in den mitgelieferten Connect-Standortdaten — ein Treffer, schreibgeschützt übernommen.