Zum Hauptinhalt springen
Version: 4.1 (2026 H2)

ProviderPipeline


Über die DataProvider in primedocs kann eine Suche ausgeführt werden, und die Daten werden anschliessend dem Benutzer präsentiert.
Für Endpunkte, bei denen über eine Suchanfrage bereits alle Daten übermittelt werden, ist dieses Vorgehen ausreichend.
Für den Fall, dass eine Suchanfrage zwar wesentliche, aber nicht alle Daten zurückliefert, kann die ProviderPipeline eingesetzt werden.

Die ProviderPipeline ermöglicht es, für die Suche einen eigenen DataProvider zu hinterlegen. Wenn der Benutzer den entsprechenden Datensatz selektiert, wird ein Nachladen weiterer Details über einen zusätzlichen DataProvider ausgelöst.

Searching & Loading​

Die ProviderPipeline verhält sich wie ein gewöhnlicher DataProvider, ist jedoch in zwei “Phasen” unterteilt:

<ProviderPipeline DisplayName="Zefix">
<Searching>
...
</Searching>
<Loading>
...
</Loading>
</ProviderPipeline>

In beiden Phasen können DataProvider konfiguriert werden — ausser dem ExistingListDataProvider und der ProviderPipeline selbst. Es ist auch erlaubt, im Searching-Schritt einen anderen DataProvider zu verwenden als im Loading-Schritt.

Die beiden Phasen unterscheiden sich in den erlaubten Einstellungen:

  • Searching: Der eigentliche Suchschritt. SearchParameters können hier definiert werden; fehlen sie, wird ohne Eingabemaske automatisch über den gesamten Bestand gesucht.
  • Loading: Hier dürfen keine SearchParameters definiert werden. Der CodeDataProvider nimmt zudem nicht an der Loading-Phase teil, da er keinen flachen Suchschritt besitzt, der beim Laden neu zugeordnet werden könnte.

Der DisplayName wird ausschliesslich auf dem ProviderPipeline-Element gesetzt, nicht auf den Providern innerhalb von Searching/Loading.

Suchparameter & Datennachladen​

Im Searching-Schritt können SearchParameters für die Suche angegeben werden. Fehlen sie, wird ohne Eingabemaske automatisch über den gesamten Bestand gesucht.
Das Suchresultat muss auf dem Schema des Objects bzw. der ObjectCollection basieren.

Im Loading-Schritt kann dann auf die Felder des Suchresultats zugegriffen werden, um z. B. mit einer ID weitere Details nachzuladen.
Im Loading dürfen darüber hinaus keine SearchParameters definiert werden.

Suchresultat im Loading-Mapping (SearchResultMappingPrefix)​

Im Request des Loading-Schritts stehen die Felder des ausgewählten Suchresultats direkt als {Placeholder} zur Verfügung (z. B. {uid} im Beispiel unten). Im Mapping des Loading-Schritts werden dagegen standardmässig nur die Daten der Detailantwort gelesen.

Liefert die Detailantwort ein benötigtes Feld nicht, lässt sich das Suchresultat über das optionale Attribut SearchResultMappingPrefix am Loading-Element auch im Mapping erschliessen:

<Loading SearchResultMappingPrefix="Searching.">
...
<Mapping>
<!-- aus dem Suchresultat -->
<Map Source="Searching.uid" Target="uid" />
<!-- aus der Detailantwort -->
<Map Source="name" Target="name" />
</Mapping>
...
</Loading>
EigenschaftBeschreibung
SearchResultMappingPrefix (optional)Präfix, unter dem die Felder des ausgewählten Suchresultats im Mapping des Loading-Schritts sichtbar werden.

Verhalten:

  • Der Präfix wird vollständig angegeben, inklusive Trennzeichen — Searching. führt zu Searching.uid. Ein Punkt wird nicht automatisch ergänzt. Der Präfix ist frei wählbar, um Namenskollisionen mit den Feldern der Detailantwort zu vermeiden.
  • Adressiert werden die Target-Namen des Searching-Mappings, nicht die Rohfelder des Suchendpunkts.
  • Der Präfix wirkt sowohl im Source-Attribut als auch in der source()-Funktion einer SourceExpression oder When-Bedingung.
  • Beginnt ein Source-Wert mit dem Präfix, wird ausschliesslich im Suchresultat gesucht. Fehlt das Feld dort, bleibt der Wert leer — es wird nicht auf die Detailantwort zurückgefallen.
  • Ohne das Attribut sieht das Loading-Mapping nur die Detailantwort.

Beispiel​

Im Beispiel werden Firmendaten über den Zefix Dienst abgefragt.

Hierbei bekommt man den Namen und die Identifikationsnummer als Suchresultat geliefert. Wählt der Benutzer die Suchresultate aus, werden automatisch die Adressdaten nachgeladen.

<ProviderPipeline DisplayName="Zefix">
<Searching>
<HttpDataProvider>
<SearchParameters>
<Text Id="Query" Label="Query" />
</SearchParameters>
<Configuration>
<Step>
<Request Method="Post">
<Url>https://www.zefix.admin.ch/ZefixPublicREST/api/v1/company/search</Url>
<Header Name="Authorization" Value="Basic [ZEFIX-AUTH-KEY]" />
<Header Name="Content-Type" Value="application/json" />
<Header Name="accept" Value="application/json" />
<Body>{
"name": "{Query}",
"activeOnly": true
}</Body>
</Request>
<Response>
<Data JsonPath="$.[*]">
<Mapping>
<Map Source="uid" Target="uid" />
<Map Source="name" Target="name" />
</Mapping>
</Data>
</Response>
</Step>
</Configuration>
</HttpDataProvider>
</Searching>
<Loading>
<HttpDataProvider>
<Configuration>
<Step>
<Request Method="Get">
<Url>https://www.zefix.admin.ch/ZefixPublicREST/api/v1/company/uid/{uid}</Url>
<Header Name="Authorization" Value="Basic [ZEFIX-AUTH-KEY]" />
<Header Name="Content-Type" Value="application/json" />
<Header Name="accept" Value="application/json" />
</Request>
<Response>
<Data JsonPath="$.[*]">
<Mapping>
<Map Source="uid" Target="uid" />
<Map Source="name" Target="name" />
<Map Source="address.street" Target="street" />
<Map Source="address.houseNumber" Target="houseNumber" />
<Map Source="address.city" Target="city" />
<Map Source="address.swissZipCode" Target="swissZipCode" />
</Mapping>
</Data>
</Response>
</Step>
</Configuration>
</HttpDataProvider>
</Loading>
</ProviderPipeline>