Skip to content

Commit

Permalink
📝 [#3573] Make example more verbose and translate to Dutch
Browse files Browse the repository at this point in the history
  • Loading branch information
sergei-maertens committed Nov 16, 2023
1 parent e310595 commit a92259d
Showing 1 changed file with 81 additions and 61 deletions.
142 changes: 81 additions & 61 deletions docs/manual/forms/examples/form_with_geometry.rst
Original file line number Diff line number Diff line change
@@ -1,95 +1,115 @@
.. _example_form_with_geometry:

==============================================
Form with geometry and registration attributes
==============================================
================================================
Kaartmateriaal en registratie in de Objecten API
================================================

When adding a component to a form, it is possible to have the value filled in by
the user set as a specific field on the selected registration backend.
In dit formulier maken we gebruik van de "Kaart"-component om coördinaten van een
locatie uit te vragen en te registreren. Het formulier wordt gekoppeld met de
`Objecten API`_ voor het registreren van de inzendingsgegevens.

In this example, we will use the `Objects API`_ as a registration backend.
We gaan er van uit dat de koppeling met de Objecten API
:ref:`geconfigureerd <configuration_registration_objects>` is, en gebruiken als
objecttype-URL ``https://objecttype-example.nl/api/v2/objecttype/123``.

.. note::
Formulier maken
===============

Depending on the selected backend, the supported registration attributes might differ.
In the case of `Objects API`_, only the *Location > Coordinate* attribute is supported.
We bouwen een formulier met twee kaarten - één kaart wordt gebruikt voor "dé" geometrie
van het hele Object in de Objecten API en de andere kaart wordt als extra/vrije-vorm
attribuut meegestuurd.

#. Maak een formulier aan met de volgende gegevens:

Creating the form
=================
* **Naam**: Kaartgegevens registreren in de Objecten API

1. Create an empty form and add a first step.
2. Add a new map component: *Speciale velden > Kaart*.
3. Under the **Registratie** tab, select the value *Location > Coordinate* in the **Registratie-attribuut** dropdown.
4. Save the component, and go under the **Registration** tab of the current form.
5. Add one of your configured Objects API backends (see :ref:`configuration_registration_objects` for more details on how to configure the backend).
#. Klik op het tabblad **Stappen en velden**.
#. Klik aan de linkerkant op **Stap toevoegen** en selecteer **Maak een nieuwe
formulierdefinitie**.
#. Onder de sectie **(Herbruikbare) stapgegevens** vul het volgende in:

Registration process
====================
* **Naam**: Kaarten

When a new submission for this form is created, it will be registered in the selected backend (in our case, Objects API).
#. Scrol naar beneden en klik de sectie **Speciale velden** aan.
#. Sleep een **Kaart** component op het witte vlak en vul de volgende
gegevens in:

Internally, Open Forms will look into each component to see if a registration attribute is set. If this is the case,
the submitted value for this component will be set to a fixed JSON path (this path differs depending on the registration backend).
* **Label**: Hoofdgeometrie

In the case of `Objects API`_, the service supports a geometry attribute set to ``record.geometry``. In our case,
the JSON data sent to the Objects API will look like the following:
#. Klik vervolgens de **Registratie** tab aan en vul de volgende gegevens in:

.. code-block:: json
* **Registratie-attribuut**: Locatie > Coördinaten

{
"type": "https://objecttype-example.nl/api/v2/objecttype/123",
"record": {
"typeVersion": "1",
"data": {},
"startAt": "2023-01-01",
"geometry": {"type": "Point", "coordinates": [1.0, 2.0]}
}
}
#. Druk daarna op **Opslaan**.

Dealing with multiple geometry components
=========================================
#. Sleep een tweede **Kaart** component op het witte vlak, vul de volgende
gegevens in en druk daarna op **Opslaan**:

When configuring registration attributes, having multiple components with the same attribute set will result in
the last one overridding the others. With the Objects API registration, you can circumvent this issue by tweaking
the JSON content template.
* **Label**: Extra geometrie

.. seealso::
#. Klik op het tabblad **Registratie**.
#. Klik op **Registratiepluginoptie toevoegen** en vul de volgende gegevens in:

For more details on how to work with the JSON content template, see :ref:`objecten_api_registratie`.
* **Naam**: Objecten API
* **Registratiemethode**: Objecten API registratie
* **Objecttype**: ``https://objecttype-example.nl/api/v2/objecttype/123``
* **JSON-inhoud sjabloon**:

If we have two map components with the following Eigenschapnaam: ``map1`` and ``map2``; and ``map1`` is using the location registration attribute,
we can use the following JSON content template to set ``map2`` to the custom data attribute ``map2_result``:
.. code-block:: django
.. code-block:: django
{
"extraGeometrie": {% as_geo_json variables.extraGeometrie %}
}
#. Druk daarna op **Opslaan en opnieuw bewerken**. Het formulier kan nu ingevuld en
ingestuurd worden.

{
"data": {% json_summary %},
"type": "{{ productaanvraag_type }}",
"bsn": "{{ variables.auth_bsn }}",
"pdf_url": "{{ submission.pdf_url }}",
attachments": {% uploaded_attachment_urls %},
"submission_id": "{{ submission.kenmerk }}",
"language_code": "{{ submission.language_code }}",
"map2_result": : {% as_geo_json variables.map2 %}
}

The resulting JSON data sent to the Objects API will look like:
.. note:: Het inrichten van het Objecttype en de Objecten API is geen onderdeel van
dit voorbeeld, maar wel essentieel om zonder fouten formulierinzendingen te kunnen
verwerken.


Toelichting
===========

De eerste kaart is ingesteld via de "Registratie" tab op het component. Dit zorgt ervoor
dat de Objecten API-registratieplugin dit veld gebruikt voor "de" geometrie van het object
in de Objecten API. Deze kent hiervoor namelijk één vast attribuut.

Echter, we kunnen extra geometrieën alsnog meesturen (als het objecttype dit modelleert),
dit doen we door het als ``GeoJSON`` te formatteren met de ``{% as_geo_json ... %}``
sjablooncode.

.. note:: Het is niet de bedoeling dat meerdere kaarten via de "Registratie" tab gekoppeld
worden aan het Locatie-attribuut - als je dit wel doet, dan zal er slechts één component
meegestuurd worden.

Het resulterende object wat naar de Objecten API gestuurd wordt ziet er uit als:

.. code-block:: json
{
"type": "<configured_objecttype>",
"type": "https://objecttype-example.nl/api/v2/objecttype/123",
"record": {
"typeVersion": "<configured_version>",
"typeVersion": "1",
"data": {
"data": "...",
"...": "...",
"map2_result": {"type": "Point", "coordinates": [3.0, 4.0]}
"extraGeometrie": {
"type": "Point",
"coordinates": [52.37403, 4.88969]
}
},
"startAt": "2023-01-01",
"geometry": {"type": "Point", "coordinates": [1.0, 2.0]}
"geometry": {
"type": "Point",
"coordinates": [51.9225, 4.47917]
}
}
}
.. _`Objects API`: https://objects-and-objecttypes-api.readthedocs.io/
.. seealso::

De :ref:`sjabloondocumentatie <manual_templates>` heeft een referentie van beschikbare
template tags, met details voor de :ref:`objecten_api_registratie`.

.. _Objecten API: https://objects-and-objecttypes-api.readthedocs.io/

0 comments on commit a92259d

Please sign in to comment.