diff --git a/content/altinn-studio/designer/resourcemanagement/_index.en.md b/content/altinn-studio/designer/resourcemanagement/_index.en.md
index bfe69ebe4f9..3ed090c63ba 100644
--- a/content/altinn-studio/designer/resourcemanagement/_index.en.md
+++ b/content/altinn-studio/designer/resourcemanagement/_index.en.md
@@ -18,7 +18,7 @@ The resource document contains the title, description, and other relevant metada
In Altinn Studio the service owners can do the following for standalone Resource
- List their resources.
-- Create new and update existing resources and register all relevant [attributes](/authorization/modules/resourceregistry/#resource-attributes) for that resource.
+- Create new and update existing resources and register all relevant [attributes](/authorization/what-do-you-get/resourceregistry/#resource-attributes) for that resource.
- Set and update the authorization policy with the various required rules for each resource
- Validate resources metadata and authorization policy if they follow the required standards
- Publish new resources to TT02 or the production environment
@@ -26,7 +26,7 @@ In Altinn Studio the service owners can do the following for standalone Resource
## Functionality in Altinn Studio Designer for Resource metadata for App created in Altinn Studio
-- Create new and update existing all relevant [attributes](/authorization/modules/resourceregistry/#resource-attributes) for that resource.
+- Create new and update existing all relevant [attributes](/authorization/what-do-you-get/resourceregistry/#resource-attributes) for that resource.
- Set and update the authorization policy with the various required rules for each resource
- Validate resources metadata and authorization policy if they follow the required standards
- Publish new resources to TT02 or the production environment
diff --git a/content/altinn-studio/designer/resourcemanagement/_index.nb.md b/content/altinn-studio/designer/resourcemanagement/_index.nb.md
index d5159de167c..ba630479094 100644
--- a/content/altinn-studio/designer/resourcemanagement/_index.nb.md
+++ b/content/altinn-studio/designer/resourcemanagement/_index.nb.md
@@ -17,7 +17,7 @@ En ressurs i denne sammenhengen er et JSON-dokument som beskriver en typisk tjen
I Altinn Studio kan tjenesteeiere gjøre følgende for selvstendige ressurser:
- Liste opp ressursene sine.
-- Opprette nye og oppdatere eksisterende ressurser og registrere alle relevante [attributter](/authorization/modules/resourceregistry/#resource-attributes) for den ressursen.
+- Opprette nye og oppdatere eksisterende ressurser og registrere alle relevante [attributter](/authorization/what-do-you-get/resourceregistry/#resource-attributes) for den ressursen.
- Sette og oppdatere autorisasjonspolicyen med de ulike nødvendige reglene for hver ressurs.
- Validere metadata for ressurser og autorisasjonspolicy for å sikre at de følger de nødvendige standardene.
- Publisere nye ressurser til TT02 eller produksjonsmiljøet.
@@ -25,7 +25,7 @@ I Altinn Studio kan tjenesteeiere gjøre følgende for selvstendige ressurser:
## Funksjonalitet i Altinn Studio Designer for metadata for app-ressurser opprettet i Altinn Studio
-- Opprette nye og oppdatere eksisterende alle relevante [attributter](/authorization/modules/resourceregistry/#resource-attributes) for den ressursen.
+- Opprette nye og oppdatere eksisterende alle relevante [attributter](/authorization/what-do-you-get/resourceregistry/#resource-attributes) for den ressursen.
- Sette og oppdatere autorisasjonspolicyen med de ulike nødvendige reglene for hver ressurs.
- Validere metadata for ressurser og autorisasjonspolicy for å sikre at de følger de nødvendige standardene.
- Publisere nye ressurser til TT02 eller produksjonsmiljøet.
diff --git a/content/altinn-studio/guides/options/_index.en.md b/content/altinn-studio/guides/options/_index.en.md
index 38c14165ba9..f619dd3fcd3 100644
--- a/content/altinn-studio/guides/options/_index.en.md
+++ b/content/altinn-studio/guides/options/_index.en.md
@@ -141,7 +141,7 @@ For nested groups follows the same pattern but with an additional index indicato
},
```
-For a complete example on how this is setup see our [demo app.](https://altinn.studio/repos/ttd/dynamic-options-rep)
+For a complete example of how this is setup see our [demo app.](https://altinn.studio/repos/ttd/dynamic-options-rep)
{{%notice warning%}}
diff --git a/content/altinn-studio/repos/structure/application-metadata/_index.md b/content/altinn-studio/repos/structure/application-metadata/_index.md
index eb703a6c65a..5184110fb0b 100644
--- a/content/altinn-studio/repos/structure/application-metadata/_index.md
+++ b/content/altinn-studio/repos/structure/application-metadata/_index.md
@@ -15,7 +15,7 @@ This is located at `/App/config/applicationmetadata.json` in the app repo.
## Application Metadata Format
-Below is an example of application metadata json format
+Below is an example of application metadata in json format
```json
{
diff --git a/content/altinn-studio/repos/structure/form-layout/_index.md b/content/altinn-studio/repos/structure/form-layout/_index.md
index 62fd34678a0..a30dfaddb16 100644
--- a/content/altinn-studio/repos/structure/form-layout/_index.md
+++ b/content/altinn-studio/repos/structure/form-layout/_index.md
@@ -16,9 +16,9 @@ tags: [app-structure, todo]
- *Containers*: describes the layout containers used in the schema and the configurations connected to them. E.g if the container is a repeating group
- *Order*: this object specify the order of the containers and components in the schema.
-## Eksempel
+## Example
-Here is an example on how the form layout file could look like:
+Here is an example of what the form layout file could look like:
```json
"components": {
diff --git a/content/api/apps/process/_index.en.md b/content/api/apps/process/_index.en.md
index 93a67eb1aac..c2ce526fcd6 100644
--- a/content/api/apps/process/_index.en.md
+++ b/content/api/apps/process/_index.en.md
@@ -33,9 +33,14 @@ Returns the bpmn file defining the process.
Flow_1
-
+ Flow_1Flow_2
+
+
+ data
+
+ Flow_2
@@ -47,7 +52,7 @@ Returns the bpmn file defining the process.
## Altinn specific task types
-Application developers can in their BPMN Definition specify some altinn specific task types, see `altinn:tasktype`,
+Application developers can in their BPMN Definition specify some altinn specific task types, see `altinn:taskType`,
which signify the behaviour of the task. So far we have defined the following:
- *data* - user is asked to fill inn one or more data elements, e.g. upload data or fill in forms
diff --git a/content/api/apps/process/_index.nb.md b/content/api/apps/process/_index.nb.md
index 4baadc3dcd1..88cfca422f1 100644
--- a/content/api/apps/process/_index.nb.md
+++ b/content/api/apps/process/_index.nb.md
@@ -14,7 +14,7 @@ creates a current task object to hold the process state.
![Flowchart for process](mvp-process.png "Process")
-A process is represented by an process modell in BPMN/XML notation. Each task has an unique id, which is used to refer to the task in the api.
+A process is represented by an process model in BPMN/XML notation. Each task has an unique id, which is used to refer to the task in the api.
### Process model
@@ -31,9 +31,14 @@ Returns the bpmn file defining the process.
Flow_1
-
+ Flow_1Flow_2
+
+
+ data
+
+ Flow_2
@@ -45,8 +50,8 @@ Returns the bpmn file defining the process.
## Altinn specific task types
-Application developers can in their BPMN Definition specify some altinn specific task types, see `altinn:tasktype`,
-which signify the behaviour of the task. So far we have defined the following:
+Application developers can in their BPMN Definition specify some altinn specific task types, see `altinn:taskType`,
+which signify the behavior of the task. So far we have defined the following:
- *data* - user is asked to fill inn one or more data elements, e.g. upload data or fill in forms
- *confirmation* - user is asked to confirm the correctness of the information which has been filled in on previous tasks
diff --git a/content/api/resourceregistry/resource/_index.en.md b/content/api/resourceregistry/resource/_index.en.md
index f787561b62d..3fbfb5b0976 100644
--- a/content/api/resourceregistry/resource/_index.en.md
+++ b/content/api/resourceregistry/resource/_index.en.md
@@ -143,7 +143,7 @@ The below shows a complete resource from [production](https://platform.altinn.no
}
```
-See more functional descriptions [here](/authorization/modules/resourceregistry/)
+See more functional descriptions [here](/authorization/what-do-you-get/resourceregistry/)
#### Resource Policy M
diff --git a/content/api/resourceregistry/resource/_index.nb.md b/content/api/resourceregistry/resource/_index.nb.md
index 8954606e082..c9629f9a442 100644
--- a/content/api/resourceregistry/resource/_index.nb.md
+++ b/content/api/resourceregistry/resource/_index.nb.md
@@ -139,7 +139,7 @@ The below shows a complete resource from [production](https://platform.altinn.no
}
```
-See more functional descriptions [here](/authorization/modules/resourceregistry/)
+See more functional descriptions [here](/authorization/what-do-you-get/resourceregistry/)
#### Resource Policy M
diff --git a/content/app/app-dev-course/modul5/_index.en.md b/content/app/app-dev-course/modul5/_index.en.md
index 67474dfa36e..81aa355a206 100644
--- a/content/app/app-dev-course/modul5/_index.en.md
+++ b/content/app/app-dev-course/modul5/_index.en.md
@@ -55,7 +55,7 @@ If you're up for an extra challenge, you can manually edit the process flow or u
### Knowledge check
{{% expandsmall id="m5t1q1" header="What Altinn-specific properties are set on each process task?" %}}
-`altinn:tasktype` is defined for each task.
+`altinn:taskType` is defined for each task.
{{% /expandsmall %}}
{{% expandsmall id="m5t1q2" header="What limitations would an external BPMN editing tool have when editing the process description of an Altinn app?" %}}
@@ -88,7 +88,7 @@ The policy file for your application is tailored to the standard process flow an
### Knowledge check
{{% expandsmall id="m5t2q1" header="What will happen when the process flow proceeds to the confirmation step without the authorization rules being updated?" %}}
-The application will display an "Unknown error" when the user presses the "submit" button.
+The application will display the confirmation step, but the submit button will be disabled.
{{% /expandsmall %}}
{{% expandsmall id="m5t2q2" header="What happens if you do not specify which roles are allowed to perform an action in an authorization rule?" %}}
diff --git a/content/app/app-dev-course/modul5/_index.nb.md b/content/app/app-dev-course/modul5/_index.nb.md
index 79454e172c1..254bd00b7fb 100644
--- a/content/app/app-dev-course/modul5/_index.nb.md
+++ b/content/app/app-dev-course/modul5/_index.nb.md
@@ -55,7 +55,7 @@ Du kan da bruke malen som fasit.
### Forståelsessjekk
{{% expandsmall id="m5t1q1" header="Hvilke Altinn-spesifikke egenskaper er satt på hver prosessoppgave?" %}}
-`altinn:tasktype` er definert for hver oppgave.
+`altinn:taskType` er definert for hver oppgave.
{{% /expandsmall %}}
{{% expandsmall id="m5t1q2" header="Hvilke begrensninger vil et eksternt BPMN-redigeringsverktøy ha når man skal redigere prosessbeskrivelsen til en Altinn-app?" %}}
@@ -91,7 +91,7 @@ Policy-filen til applikasjonen din er tilpasset standard prosessflyt og må oppd
### Forståelsessjekk
{{% expandsmall id="m5t2q1" header="Hva vil skje når prosessflyten går videre til bekreftelsessteget uten at autoriasjonsreglene er blitt oppdatert?" %}}
-Applikasjonen vil vise "Ukjent feil" når brukeren trykker på "send inn"-knappen.
+Applikasjonen vil vise bekreftelsessteget, men knappen for å sende inn skjemaet er deaktivert.
{{% /expandsmall %}}
{{% expandsmall id="m5t2q2" header="Hva skjer dersom du ikke spesifiserer hvilke roller som har lov til å utføre en aksjon i en autorisasjonsregel?" %}}
diff --git a/content/app/app-dev-course/modul7/_index.en.md b/content/app/app-dev-course/modul7/_index.en.md
index 75b5b1f3d3a..b5c1c0f2da6 100644
--- a/content/app/app-dev-course/modul7/_index.en.md
+++ b/content/app/app-dev-course/modul7/_index.en.md
@@ -37,7 +37,7 @@ The municipality of Sogndal wants to use the categories **Personalia** for the u
- [Categories in summary](/app/development/ux/pages/summary/#categories)
### Knowledge check
-- Why should the summary page be ignore in the PDF generation?
+- Why should the summary page be ignored in the PDF generation?
{{% /expandlarge %}}
diff --git a/content/app/deployment/_index.en.md b/content/app/deployment/_index.en.md
index bb26eeae61d..b67a7e538c2 100644
--- a/content/app/deployment/_index.en.md
+++ b/content/app/deployment/_index.en.md
@@ -21,6 +21,9 @@ This routine just needs to be followed once. When the cluster is set up, the sol
## Deployment of app
Deploy of an application to production is done in [the same way as for test environments](/app/testing/deploy).
+The user that will deploy an application to production must be a member of the `Deploy-Production` group in Altinn Studio.
+Access to groups in Altinn Studio is administrated by each organization in Altinn Studio.
+[Read more about access in Altinn Studio](../guides/access-management/studio/).
## Order "About form"-page on altinn.no
diff --git a/content/app/deployment/_index.nb.md b/content/app/deployment/_index.nb.md
index ac18d5746f8..4fe76085cef 100644
--- a/content/app/deployment/_index.nb.md
+++ b/content/app/deployment/_index.nb.md
@@ -19,6 +19,9 @@ Denne rutinen trenger bare å følges en gang. Når clusteret er satt opp, er l
## Produksjonssette en app
Produksjonssetting av applikasjonen gjøres på [samme måte som for testmiljøer](/nb/app/testing/deploy).
+Den som skal produksjonssette app'en må være medlem av gruppen `Deploy-Production` for sin organisasjon i Altinn Studio.
+Tilgang til grupper i Altinn Studio administreres av hver enkelt organisasjon i Altinn Studio.
+[Les mer om tilganger i Altinn Studio](../guides/access-management/studio/).
## Bestille Om skjema-side
diff --git a/content/app/development/configuration/authorization/guidelines_authorization/roles_and_rights/roles_ER/_index.nb.md b/content/app/development/configuration/authorization/guidelines_authorization/roles_and_rights/roles_ER/_index.nb.md
index 06c5c9d39b5..9f54d35d64a 100644
--- a/content/app/development/configuration/authorization/guidelines_authorization/roles_and_rights/roles_ER/_index.nb.md
+++ b/content/app/development/configuration/authorization/guidelines_authorization/roles_and_rights/roles_ER/_index.nb.md
@@ -10,7 +10,7 @@ I Enhetsregisteret er det offisielle registeret over virksomheter i Norge. I reg
Når man velger roller er det derfor viktig å vurdere hvilke typer organisasjoner som skal benytte tjenesten og med det hvilke roller man må knytte til tjenesten for å gi disse tilgang
-Fullstendig oversikt over organisasjonsformer og roller som leses inn fra Enhetsregisteret finner du på [Fullmakter fra Enhetsregisteret](/authorization/modules/accessgroups/register_er/)
+Fullstendig oversikt over organisasjonsformer og roller som leses inn fra Enhetsregisteret finner du på [Fullmakter fra Enhetsregisteret](/authorization/what-do-you-get/accessgroups/register_er/)
## Nøkkelroller
diff --git a/content/app/development/configuration/process/Data_Confirmation_Process.bpmn b/content/app/development/configuration/process/Data_Confirmation_Process.bpmn
index 46ad6dc3cf7..336b7649a63 100644
--- a/content/app/development/configuration/process/Data_Confirmation_Process.bpmn
+++ b/content/app/development/configuration/process/Data_Confirmation_Process.bpmn
@@ -5,20 +5,32 @@
xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"
xmlns:di="http://www.omg.org/spec/DD/20100524/DI"
- xmlns:altinn="http://altinn.no"
+ xmlns:altinn="http://altinn.no/process"
xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd"
targetNamespace="http://bpmn.io/schema/bpmn" >
SequenceFlow_1
-
+ SequenceFlow_1SequenceFlow_2
+
+
+ data
+
+
-
+
+ SequenceFlow_2SequenceFlow_3
+
+ confirmation
+
+ confirm
+
+ SequenceFlow_3
diff --git a/content/app/development/configuration/process/Data_Data_Data_Process.bpmn b/content/app/development/configuration/process/Data_Data_Data_Process.bpmn
index 13b0b4f7d84..7e7dedb61dd 100644
--- a/content/app/development/configuration/process/Data_Data_Data_Process.bpmn
+++ b/content/app/development/configuration/process/Data_Data_Data_Process.bpmn
@@ -12,17 +12,32 @@
SequenceFlow_1
-
+ SequenceFlow_1SequenceFlow_2
+
+
+ data
+
+
-
+ SequenceFlow_2SequenceFlow_3
+
+
+ data
+
+
-
+ SequenceFlow_3SequenceFlow_4
+
+
+ data
+
+ SequenceFlow_4
diff --git a/content/app/development/configuration/process/Data_Process.bpmn b/content/app/development/configuration/process/Data_Process.bpmn
index 9e8467491fe..630ffd20565 100644
--- a/content/app/development/configuration/process/Data_Process.bpmn
+++ b/content/app/development/configuration/process/Data_Process.bpmn
@@ -11,9 +11,14 @@ targetNamespace="http://bpmn.io/schema/bpmn" >
SequenceFlow_1
-
+ SequenceFlow_1SequenceFlow_2
+
+
+ data
+
+ SequenceFlow_2
diff --git a/content/app/development/configuration/process/exclusive-gateways/_index.en.md b/content/app/development/configuration/process/exclusive-gateways/_index.en.md
index 91a1e0eb464..c06e584d5c2 100644
--- a/content/app/development/configuration/process/exclusive-gateways/_index.en.md
+++ b/content/app/development/configuration/process/exclusive-gateways/_index.en.md
@@ -12,6 +12,64 @@ tags: [gateways,bpmn,process]
## Example process with exclusive gateways
+{{}}
+
+{{}}
+```xml
+
+
+
+
+ Flow_s_t1
+
+
+
+ Flow_s_t1
+ Flow_t1_g1
+
+
+ data
+
+
+
+
+
+ Flow_t1_g1
+ Flow_g1_g2
+ Flow_g1_t2
+
+
+
+
+ Flow_g1_t2
+ Flow_t2_g2
+
+
+
+ confirm
+
+ confirmation
+
+
+
+
+
+ Flow_g1_g2
+ Flow_t2_g2
+ Flow_g2_end
+
+
+
+ Flow_g2_end
+
+
+
+
+```
+
+{{}}
+
+{{}}
```xml
@@ -51,6 +109,11 @@ tags: [gateways,bpmn,process]
```
+{{}}
+
+{{}}
+
+
Visual representation of the bpmn definition
![BPMN definition diagram](process-definition.svg "BPMN definition diagram")
diff --git a/content/app/development/configuration/process/exclusive-gateways/_index.nb.md b/content/app/development/configuration/process/exclusive-gateways/_index.nb.md
index 2d1b84c93d3..7836b862315 100644
--- a/content/app/development/configuration/process/exclusive-gateways/_index.nb.md
+++ b/content/app/development/configuration/process/exclusive-gateways/_index.nb.md
@@ -16,6 +16,64 @@ Funksjonaliteten beskrevet på denne siden krever minimum version 7.1.0 av Altin
## Eksempel prosess med exclusive gateways
+{{}}
+
+{{}}
+```xml
+
+
+
+
+ Flow_s_t1
+
+
+
+ Flow_s_t1
+ Flow_t1_g1
+
+
+ data
+
+
+
+
+
+ Flow_t1_g1
+ Flow_g1_g2
+ Flow_g1_t2
+
+
+
+
+ Flow_g1_t2
+ Flow_t2_g2
+
+
+
+ confirm
+
+ confirmation
+
+
+
+
+
+ Flow_g1_g2
+ Flow_t2_g2
+ Flow_g2_end
+
+
+
+ Flow_g2_end
+
+
+
+
+```
+
+{{}}
+
+{{}}
```xml
@@ -55,6 +113,11 @@ Funksjonaliteten beskrevet på denne siden krever minimum version 7.1.0 av Altin
```
+{{}}
+
+{{}}
+
+
Visuell representasjon av bpmn definisjonen over
![BPMN definition diagram](process-definition.svg "BPMN definition diagram")
diff --git a/content/app/development/data/options/_index.en.md b/content/app/development/data/options/_index.en.md
index c2ae516ffb3..6c55237c118 100644
--- a/content/app/development/data/options/_index.en.md
+++ b/content/app/development/data/options/_index.en.md
@@ -123,7 +123,7 @@ For nested groups follows the same pattern but with an additional index indicato
},
```
-For a complete example on how this is setup see our [demo app.](https://altinn.studio/repos/ttd/dynamic-options-rep)
+For a complete example of how this is setup see our [demo app.](https://altinn.studio/repos/ttd/dynamic-options-rep)
{{%notice warning%}}
diff --git a/content/app/development/logic/dataprocessing/_index.en.md b/content/app/development/logic/dataprocessing/_index.en.md
index 2deab514874..cc772ed7cfb 100644
--- a/content/app/development/logic/dataprocessing/_index.en.md
+++ b/content/app/development/logic/dataprocessing/_index.en.md
@@ -15,81 +15,151 @@ To ensure optimal experience and control, the application template has two diffe
- ProcessDataRead runs when data is read from the database
{{%notice info%}}
-IMPORTANT: When a data processing that has updated the data on the server has been run, the front-end must be notified so that the updated data can be loaded.
-To do this, the ProcessdataWrite method must return true if any of the data has been updated.
-If this is not done, the updated data won't be visible for the user until they refresh the page.
+**IMPORTANT**
+
+For versions 4-7, when data processing that updates the data on the server runs, the front-end must be notified so the updated data can be loaded.
+To achieve this, the `ProcessDataWrite` method needs to return `true` if any data is updated.
+If this is not done, the updated data is not visible to the user until they refresh the page.
+
+
+Starting from v8, you do not need to return anything from `ProcessDataWrite`. To update the data, simply modify the incoming data object as before.
{{% /notice%}}
-
{{}}
-{{}}
-In version 7 the way to do custom code instantiation has changed. We now use an dependency injection based approach insted of overriding methods. If you previously used to place your custom code in the _ProcessDataWrite_ and ProcessDataWrite_ methods in the _DataProcessingHandler.cs_ class you will see that it's mostly the same.
+{{}}
1. Create a class that implements the `IDataProcessor` interface found in the `Altinn.App.Core.Features.DataProcessing` namespace.
You can name and place the file in any folder you like within your project, but we suggest you use meaningful namespaces like in any other .Net project.
- Example on code from app that processes and populates different data while saving.
- ```C#
- public async Task ProcessDataWrite(
- Instance instance, Guid? dataId, object data)
- {
- bool edited = false;
-
- if (data is SoknadUnntakKaranteneHotellVelferd model)
- {
- string org = instance.Org;
- string app = instance.AppId.Split("/")[1];
- int partyId = int.Parse(instance.InstanceOwner.PartyId);
- Guid instanceGuid = Guid.Parse(instance.Id.Split("/")[1]);
-
- // handling mapping of multiple choice velferdsgrunner
- if (!string.IsNullOrEmpty(model.velferdsgrunner?.sammenstilling))
- {
- model.velferdsgrunner.helseproblemer = model.velferdsgrunner.sammenstilling.Contains("helseproblemer");
- model.velferdsgrunner.barnefodsel = model.velferdsgrunner.sammenstilling.Contains("barnefodsel");
- model.velferdsgrunner.begravelse = model.velferdsgrunner.sammenstilling.Contains("begravelse");
- model.velferdsgrunner.naerstaaende = model.velferdsgrunner.sammenstilling.Contains("naerstaaende");
- model.velferdsgrunner.adopsjon = model.velferdsgrunner.sammenstilling.Contains("adopsjon");
- model.velferdsgrunner.sarligeOmsorg = model.velferdsgrunner.sammenstilling.Contains("sarligeOmsorg");
- model.velferdsgrunner.barnAlene = model.velferdsgrunner.sammenstilling.Contains("barnAlene");
- model.velferdsgrunner.hjemmeeksamen = model.velferdsgrunner.sammenstilling.Contains("hjemmeeksamen");
- model.velferdsgrunner.arbeidunntak = model.velferdsgrunner.sammenstilling.Contains("arbeidunntak");
- model.velferdsgrunner.andreVelferdshensyn = model.velferdsgrunner.sammenstilling.Contains("annet");
- model.velferdsgrunner.andreVelferdshensynBeskrivelse = model.velferdsgrunner.sammenstilling.Contains("annet") ? model.velferdsgrunner.andreVelferdshensynBeskrivelse : null;
-
- edited = true;
- }
- else
- {
- model.velferdsgrunner = null;
- }
-
- // set data for receipt if not set
- if (string.IsNullOrEmpty(model.applogic?.altinnRef))
- {
- model.applogic ??= new Applogic();
-
- Party party = await _registerService.GetParty(
- int.Parse(instance.InstanceOwner.PartyId));
- model.applogic.avsender =
- $"{instance.InstanceOwner.PersonNumber}-{party.Name}";
- model.applogic.altinnRef = instance.Id.Split("-")[4];
- }
- }
+ Example code from app that processes and populates different data while saving.
+
+ ```C#
+ public async Task ProcessDataWrite(Instance instance, Guid? dataId, object data, object? previousData, string? language)
+ {
+ if (data is SoknadUnntakKaranteneHotellVelferd model)
+ {
+ string org = instance.Org;
+ string app = instance.AppId.Split("/")[1];
+ int partyId = int.Parse(instance.InstanceOwner.PartyId);
+ Guid instanceGuid = Guid.Parse(instance.Id.Split("/")[1]);
+
+ // handling mapping of multiple choice velferdsgrunner
+ if (!string.IsNullOrEmpty(model.velferdsgrunner?.sammenstilling))
+ {
+ model.velferdsgrunner.helseproblemer = model.velferdsgrunner.sammenstilling.Contains("helseproblemer");
+ model.velferdsgrunner.barnefodsel = model.velferdsgrunner.sammenstilling.Contains("barnefodsel");
+ model.velferdsgrunner.begravelse = model.velferdsgrunner.sammenstilling.Contains("begravelse");
+ model.velferdsgrunner.naerstaaende = model.velferdsgrunner.sammenstilling.Contains("naerstaaende");
+ model.velferdsgrunner.adopsjon = model.velferdsgrunner.sammenstilling.Contains("adopsjon");
+ model.velferdsgrunner.sarligeOmsorg = model.velferdsgrunner.sammenstilling.Contains("sarligeOmsorg");
+ model.velferdsgrunner.barnAlene = model.velferdsgrunner.sammenstilling.Contains("barnAlene");
+ model.velferdsgrunner.hjemmeeksamen = model.velferdsgrunner.sammenstilling.Contains("hjemmeeksamen");
+ model.velferdsgrunner.arbeidunntak = model.velferdsgrunner.sammenstilling.Contains("arbeidunntak");
+ model.velferdsgrunner.andreVelferdshensyn = model.velferdsgrunner.sammenstilling.Contains("annet");
+ model.velferdsgrunner.andreVelferdshensynBeskrivelse = model.velferdsgrunner.sammenstilling.Contains("annet") ? model.velferdsgrunner.andreVelferdshensynBeskrivelse : null;
+ }
+ else
+ {
+ model.velferdsgrunner = null;
+ }
+
+ // set data for receipt if not set
+ if (string.IsNullOrEmpty(model.applogic?.altinnRef))
+ {
+ model.applogic ??= new Applogic();
+
+ Party party = await _registerService.GetParty(
+ int.Parse(instance.InstanceOwner.PartyId));
+ model.applogic.avsender =
+ $"{instance.InstanceOwner.PersonNumber}-{party.Name}";
+ model.applogic.altinnRef = instance.Id.Split("-")[4];
+ }
+ }
+ }
+ ```
- return await Task.FromResult(edited);
- }
- ```
2. Register you custom implementation in the _Program.cs_ class
- ```C#
- services.AddTransient();
- ```
- This ensures your custom code is known to the application and that it will be executed.
+
+ ```C#
+ services.AddTransient();
+ ```
+
+ This ensures your custom code is known to the application and that it will be executed.
+
{{}}
-{{}}
-Data processing is coded in C#, in the file `DataProcessingHandler.cs`. This file can easily be edited by downloading the source code to the app and editing on your own computer, e.g. in Visual Studio Code.
-The data model with form data is available and can be edited/updated when needed.
-Example on code from app that processes and populates different data while saving.
+{{}}
+
+In version 7 the way to do custom code instantiation has changed. We now use an dependency injection based approach insted of overriding methods. If you previously used to place your custom code in the _ProcessDataWrite_ and ProcessDataWrite* methods in the \_DataProcessingHandler.cs* class you will see that it's mostly the same.
+
+1. Create a class that implements the `IDataProcessor` interface found in the `Altinn.App.Core.Features.DataProcessing` namespace.
+ You can name and place the file in any folder you like within your project, but we suggest you use meaningful namespaces like in any other .Net project.
+ Example on code from app that processes and populates different data while saving.
+
+ ```C#
+ public async Task ProcessDataWrite(
+ Instance instance, Guid? dataId, object data)
+ {
+ bool edited = false;
+
+ if (data is SoknadUnntakKaranteneHotellVelferd model)
+ {
+ string org = instance.Org;
+ string app = instance.AppId.Split("/")[1];
+ int partyId = int.Parse(instance.InstanceOwner.PartyId);
+ Guid instanceGuid = Guid.Parse(instance.Id.Split("/")[1]);
+
+ // handling mapping of multiple choice velferdsgrunner
+ if (!string.IsNullOrEmpty(model.velferdsgrunner?.sammenstilling))
+ {
+ model.velferdsgrunner.helseproblemer = model.velferdsgrunner.sammenstilling.Contains("helseproblemer");
+ model.velferdsgrunner.barnefodsel = model.velferdsgrunner.sammenstilling.Contains("barnefodsel");
+ model.velferdsgrunner.begravelse = model.velferdsgrunner.sammenstilling.Contains("begravelse");
+ model.velferdsgrunner.naerstaaende = model.velferdsgrunner.sammenstilling.Contains("naerstaaende");
+ model.velferdsgrunner.adopsjon = model.velferdsgrunner.sammenstilling.Contains("adopsjon");
+ model.velferdsgrunner.sarligeOmsorg = model.velferdsgrunner.sammenstilling.Contains("sarligeOmsorg");
+ model.velferdsgrunner.barnAlene = model.velferdsgrunner.sammenstilling.Contains("barnAlene");
+ model.velferdsgrunner.hjemmeeksamen = model.velferdsgrunner.sammenstilling.Contains("hjemmeeksamen");
+ model.velferdsgrunner.arbeidunntak = model.velferdsgrunner.sammenstilling.Contains("arbeidunntak");
+ model.velferdsgrunner.andreVelferdshensyn = model.velferdsgrunner.sammenstilling.Contains("annet");
+ model.velferdsgrunner.andreVelferdshensynBeskrivelse = model.velferdsgrunner.sammenstilling.Contains("annet") ? model.velferdsgrunner.andreVelferdshensynBeskrivelse : null;
+
+ edited = true;
+ }
+ else
+ {
+ model.velferdsgrunner = null;
+ }
+
+ // set data for receipt if not set
+ if (string.IsNullOrEmpty(model.applogic?.altinnRef))
+ {
+ model.applogic ??= new Applogic();
+
+ Party party = await _registerService.GetParty(
+ int.Parse(instance.InstanceOwner.PartyId));
+ model.applogic.avsender =
+ $"{instance.InstanceOwner.PersonNumber}-{party.Name}";
+ model.applogic.altinnRef = instance.Id.Split("-")[4];
+ }
+ }
+ return await Task.FromResult(edited);
+ }
+ ```
+
+2. Register you custom implementation in the _Program.cs_ class
+
+ ```C#
+ services.AddTransient();
+ ```
+
+ This ensures your custom code is known to the application and that it will be executed.
+
+ {{}}
+ {{}}
+ Data processing is coded in C#, in the file `DataProcessingHandler.cs`. This file can easily be edited by downloading the source code to the app and editing on your own computer, e.g. in Visual Studio Code.
+ The data model with form data is available and can be edited/updated when needed.
+
+Example code from app that processes and populates various data while saving.
```C#
public async Task ProcessDataWrite(
@@ -133,7 +203,7 @@ public async Task ProcessDataWrite(
Party party = await _registerService.GetParty(
int.Parse(instance.InstanceOwner.PartyId));
- model.applogic.avsender =
+ model.applogic.avsender =
$"{instance.InstanceOwner.PersonNumber}-{party.Name}";
model.applogic.altinnRef = instance.Id.Split("-")[4];
}
@@ -142,6 +212,7 @@ public async Task ProcessDataWrite(
return await Task.FromResult(edited);
}
```
+
{{}}
-{{}}
\ No newline at end of file
+{{}}
diff --git a/content/app/development/logic/dataprocessing/_index.nb.md b/content/app/development/logic/dataprocessing/_index.nb.md
index cf4a2b483a6..107fec2e8fd 100644
--- a/content/app/development/logic/dataprocessing/_index.nb.md
+++ b/content/app/development/logic/dataprocessing/_index.nb.md
@@ -5,7 +5,7 @@ toc: true
---
Dataprosessering kjøres på serveren, og er basert på input fra sluttbruker/skjemadata.
-Dataprosessering kan være kan være rent matematiske kalkuleringer, det kan også være å overføre verdier mellom felter, resultater av API-kall, osv.
+Dataprosessering kan være kan være rent matematiske kalkuleringer, det kan også være å overføre verdier mellom felter, resultater av API-kall, osv.
Dataprosessering kjøres hver gang data lagres, og dermed hver gang en bruker har gjort en endring.
@@ -15,25 +15,27 @@ For å sikre optimal opplevelse og kontroll er applikasjonstemplaten to forskjel
- ProcessDataRead kjøres når data leses fra databasen
{{%notice info%}}
-VIKTIG: Når en dataprosessering er kjørt som har oppdatert dataene på server, må front-end få beskjed om dette, sånn at de oppdaterte dataene kan lastes inn.
-For å gjøre dette, må `ProcessDataWrite`-metoden returnere `true` om det er noen av dataene som har blitt oppdatert.
+**VIKTIG**
+
+For versjon 4-7: Når en dataprosessering som har oppdatert dataene på server er kjørt, må front-end få beskjed om dette sånn at de oppdaterte dataene kan lastes inn.
+For at det skal skje, må `ProcessDataWrite`-metoden returnere `true` om det er noen av dataene som har blitt oppdatert.
Hvis dette ikke gjøres, vil de oppdaterte dataen ikke være synlig for sluttbruker før de ev. laster inn siden på nytt.
+
+
+Fra og med versjon 8 trenger du ikke returnere noe fra `ProcessDataWrite`. For å oppdatere dataen trenger du bare å endre på dataen som kommer inn til metoden, som før.
{{% /notice%}}
{{}}
-{{}}
-I versjon 7 har vi endret måten preutfylling med egendefinert kode gjøres på. Vi benytter nå _dependency injection_ i stedet for overstyring av metoder. Hvis du tidligere plasserte koden din i _ProcessDataRead_ og _ProcessDataWrite_ metodene in _DataProcessingHandler.cs_ klassen så vil du erfare at det er mer eller mindre det samme som nå gjøres.
+{{}}
-1. Opprett en klasse som implementerer `IDataProcessor` grensesnittet som ligger i `Altinn.App.Core.Features.DateProcessing` navnerommet.
- Du kan navngi og plassere filene i den mappestrukturen du selv ønsker i prosjektet ditt. Men vi anbefaler at du benytter meningsfulle navnerom som i et hvilket som helst annet .Net prosjekt.
+1. Opprett en klasse som implementerer `IDataProcessor` grensesnittet som ligger i `Altinn.App.Core.Features.DateProcessing` navnerommet.
+ Du kan navngi og plassere filene i den mappestrukturen du selv ønsker i prosjektet ditt. Men vi anbefaler at du benytter meningsfulle navnerom som i et hvilket som helst annet .Net prosjekt.
Eksempel på kode fra app som prosesserer og populerer forskjellige data under lagring.
+
```C#
- public async Task ProcessDataWrite(
- Instance instance, Guid? dataId, object data)
+ public async Task ProcessDataWrite(Instance instance, Guid? dataId, object data, object? previousData, string? language)
{
- bool edited = false;
-
if (data is SoknadUnntakKaranteneHotellVelferd model)
{
string org = instance.Org;
@@ -55,8 +57,6 @@ I versjon 7 har vi endret måten preutfylling med egendefinert kode gjøres på.
model.velferdsgrunner.arbeidunntak = model.velferdsgrunner.sammenstilling.Contains("arbeidunntak");
model.velferdsgrunner.andreVelferdshensyn = model.velferdsgrunner.sammenstilling.Contains("annet");
model.velferdsgrunner.andreVelferdshensynBeskrivelse = model.velferdsgrunner.sammenstilling.Contains("annet") ? model.velferdsgrunner.andreVelferdshensynBeskrivelse : null;
-
- edited = true;
}
else
{
@@ -70,21 +70,89 @@ I versjon 7 har vi endret måten preutfylling med egendefinert kode gjøres på.
Party party = await _registerService.GetParty(
int.Parse(instance.InstanceOwner.PartyId));
- model.applogic.avsender =
+ model.applogic.avsender =
$"{instance.InstanceOwner.PersonNumber}-{party.Name}";
model.applogic.altinnRef = instance.Id.Split("-")[4];
}
}
-
- return await Task.FromResult(edited);
}
```
-2. Registrer din implementering i _Program.cs_ klassen
+
+2. Registrer din implementering i _Program.cs_ klassen
```C#
services.AddTransient();
```
Dette sørger for at din kode er kjent for applikasjonen og at koden blir kjørt når den skal.
+
{{}}
+
+{{}}
+I versjon 7 har vi endret måten preutfylling med egendefinert kode gjøres på. Vi benytter nå _dependency injection_ i stedet for overstyring av metoder. Hvis du tidligere plasserte koden din i _ProcessDataRead_ og _ProcessDataWrite_ metodene in _DataProcessingHandler.cs_ klassen så vil du erfare at det er mer eller mindre det samme som nå gjøres.
+
+1. Opprett en klasse som implementerer `IDataProcessor` grensesnittet som ligger i `Altinn.App.Core.Features.DateProcessing` navnerommet.
+ Du kan navngi og plassere filene i den mappestrukturen du selv ønsker i prosjektet ditt. Men vi anbefaler at du benytter meningsfulle navnerom som i et hvilket som helst annet .Net prosjekt.
+ Eksempel på kode fra app som prosesserer og populerer forskjellige data under lagring.
+
+ ```C#
+ public async Task ProcessDataWrite(
+ Instance instance, Guid? dataId, object data)
+ {
+ bool edited = false;
+
+ if (data is SoknadUnntakKaranteneHotellVelferd model)
+ {
+ string org = instance.Org;
+ string app = instance.AppId.Split("/")[1];
+ int partyId = int.Parse(instance.InstanceOwner.PartyId);
+ Guid instanceGuid = Guid.Parse(instance.Id.Split("/")[1]);
+
+ // handling mapping of multiple choice velferdsgrunner
+ if (!string.IsNullOrEmpty(model.velferdsgrunner?.sammenstilling))
+ {
+ model.velferdsgrunner.helseproblemer = model.velferdsgrunner.sammenstilling.Contains("helseproblemer");
+ model.velferdsgrunner.barnefodsel = model.velferdsgrunner.sammenstilling.Contains("barnefodsel");
+ model.velferdsgrunner.begravelse = model.velferdsgrunner.sammenstilling.Contains("begravelse");
+ model.velferdsgrunner.naerstaaende = model.velferdsgrunner.sammenstilling.Contains("naerstaaende");
+ model.velferdsgrunner.adopsjon = model.velferdsgrunner.sammenstilling.Contains("adopsjon");
+ model.velferdsgrunner.sarligeOmsorg = model.velferdsgrunner.sammenstilling.Contains("sarligeOmsorg");
+ model.velferdsgrunner.barnAlene = model.velferdsgrunner.sammenstilling.Contains("barnAlene");
+ model.velferdsgrunner.hjemmeeksamen = model.velferdsgrunner.sammenstilling.Contains("hjemmeeksamen");
+ model.velferdsgrunner.arbeidunntak = model.velferdsgrunner.sammenstilling.Contains("arbeidunntak");
+ model.velferdsgrunner.andreVelferdshensyn = model.velferdsgrunner.sammenstilling.Contains("annet");
+ model.velferdsgrunner.andreVelferdshensynBeskrivelse = model.velferdsgrunner.sammenstilling.Contains("annet") ? model.velferdsgrunner.andreVelferdshensynBeskrivelse : null;
+
+ edited = true;
+ }
+ else
+ {
+ model.velferdsgrunner = null;
+ }
+
+ // set data for receipt if not set
+ if (string.IsNullOrEmpty(model.applogic?.altinnRef))
+ {
+ model.applogic ??= new Applogic();
+
+ Party party = await _registerService.GetParty(
+ int.Parse(instance.InstanceOwner.PartyId));
+ model.applogic.avsender =
+ $"{instance.InstanceOwner.PersonNumber}-{party.Name}";
+ model.applogic.altinnRef = instance.Id.Split("-")[4];
+ }
+ }
+
+ return await Task.FromResult(edited);
+ }
+ ```
+
+2. Registrer din implementering i _Program.cs_ klassen
+ ```C#
+ services.AddTransient();
+ ```
+ Dette sørger for at din kode er kjent for applikasjonen og at koden blir kjørt når den skal.
+
+{{}}
+
{{}}
Dataprosessering kodes i C#, i filen `DataProsessingHandler.cs`. Denne filen kan redigeres enklest ved å laste ned kildekoden til app'en og redigere på egen maskin, f.eks. i Visual Studio Code.
Datamodellen med skjemadata er tilgjengelig og kan redigeres/oppdateres etter ønske/behov.
@@ -133,7 +201,7 @@ public async Task ProcessDataWrite(
Party party = await _registerService.GetParty(
int.Parse(instance.InstanceOwner.PartyId));
- model.applogic.avsender =
+ model.applogic.avsender =
$"{instance.InstanceOwner.PersonNumber}-{party.Name}";
model.applogic.altinnRef = instance.Id.Split("-")[4];
}
@@ -142,6 +210,7 @@ public async Task ProcessDataWrite(
return await Task.FromResult(edited);
}
```
+
{{}}
-{{}}
\ No newline at end of file
+{{}}
diff --git a/content/app/development/logic/validation/_index.en.md b/content/app/development/logic/validation/_index.en.md
index e20b1bf233e..a7bfe24a304 100644
--- a/content/app/development/logic/validation/_index.en.md
+++ b/content/app/development/logic/validation/_index.en.md
@@ -14,7 +14,7 @@ Validations can also be set up to [trigger on page navigation](/app/development/
## Client-side validation
-This is validation that is run in the browser, before data is sent to server for saving. This makes it possible to give quick feedback to
+This validation is run in the browser before data is sent to server for saving. This makes it possible to give quick feedback to
the user during the process of filling out the form.
Client-side validation is based on the data model of the form, and uses this to determine what is valid input in a
@@ -541,11 +541,11 @@ public async Task ValidateData(object data, ModelStateDictionary modelState)
Examples on display of different validations below:
-!["Information message"](info-message.jpeg "Example on information message (*INFO* - prefix)" )
+!["Information message"](info-message.jpeg "Example of a information message (*INFO* - prefix)")
-!["Success message"](success-message.jpeg "Example on success message (*SUCCESS* - prefix)")
+!["Success message"](success-message.jpeg "Example of a success message (*SUCCESS* - prefix)")
-!["Warning message"](warning-message.jpeg "Example on warning message (*WARNING* - prefix)" )
+!["Warning message"](warning-message.jpeg "Example of a warning message (*WARNING* - prefix)")
## Group validation
diff --git a/content/app/development/process/flowcontrol/_index.en.md b/content/app/development/process/flowcontrol/_index.en.md
index f236e1cdd8b..6dbd4ac22ba 100644
--- a/content/app/development/process/flowcontrol/_index.en.md
+++ b/content/app/development/process/flowcontrol/_index.en.md
@@ -125,7 +125,7 @@ If the requirements for your gateway cannot be done through expressions you have
{{}}
-{{}}
+{{}}
```xml
@@ -134,9 +134,14 @@ If the requirements for your gateway cannot be done through expressions you have
Flow_s_t1
-
+ Flow_s_t1Flow_t1_g1
+
+
+ data
+
+
@@ -146,9 +151,14 @@ If the requirements for your gateway cannot be done through expressions you have
-
+ Flow_g1_t2Flow_t2_g2
+
+
+ confirmation
+
+
@@ -161,12 +171,13 @@ If the requirements for your gateway cannot be done through expressions you have
Flow_g2_end
-
+
```
+
{{}}
-{{}}
+{{}}
```xml
@@ -175,14 +186,9 @@ If the requirements for your gateway cannot be done through expressions you have
Flow_s_t1
-
+ Flow_s_t1Flow_t1_g1
-
-
- data
-
-
@@ -192,14 +198,9 @@ If the requirements for your gateway cannot be done through expressions you have
-
+ Flow_g1_t2Flow_t2_g2
-
-
- confirmation
-
-
@@ -215,8 +216,8 @@ If the requirements for your gateway cannot be done through expressions you have
```
-
{{}}
+
{{}}
Visual representation of the bpmn definition
diff --git a/content/app/development/process/flowcontrol/_index.nb.md b/content/app/development/process/flowcontrol/_index.nb.md
index 3962b9ce98b..551b2c31666 100644
--- a/content/app/development/process/flowcontrol/_index.nb.md
+++ b/content/app/development/process/flowcontrol/_index.nb.md
@@ -175,7 +175,7 @@ Hvis kravene for gatewayen din ikke kan oppfylles gjennom uttrykk, har du muligh
{{}}
-{{}}
+{{}}
```xml
@@ -184,9 +184,14 @@ Hvis kravene for gatewayen din ikke kan oppfylles gjennom uttrykk, har du muligh
Flow_s_t1
-
+ Flow_s_t1Flow_t1_g1
+
+
+ data
+
+
@@ -196,9 +201,14 @@ Hvis kravene for gatewayen din ikke kan oppfylles gjennom uttrykk, har du muligh
-
+ Flow_g1_t2Flow_t2_g2
+
+
+ confirmation
+
+
@@ -214,9 +224,10 @@ Hvis kravene for gatewayen din ikke kan oppfylles gjennom uttrykk, har du muligh
```
+
{{}}
-{{}}
+{{}}
```xml
@@ -225,14 +236,9 @@ Hvis kravene for gatewayen din ikke kan oppfylles gjennom uttrykk, har du muligh
Flow_s_t1
-
+ Flow_s_t1Flow_t1_g1
-
-
- data
-
-
@@ -242,14 +248,9 @@ Hvis kravene for gatewayen din ikke kan oppfylles gjennom uttrykk, har du muligh
-
+ Flow_g1_t2Flow_t2_g2
-
-
- confirmation
-
-
@@ -262,11 +263,11 @@ Hvis kravene for gatewayen din ikke kan oppfylles gjennom uttrykk, har du muligh
Flow_g2_end
-
+
```
-
{{}}
+
{{}}
Visuell representasjon av BPMN-definisjonen
diff --git a/content/app/development/ux/components/Checkboxes/_index.nb.md b/content/app/development/ux/components/Checkboxes/_index.nb.md
index 2cf447bebbd..a63f1b513fd 100644
--- a/content/app/development/ux/components/Checkboxes/_index.nb.md
+++ b/content/app/development/ux/components/Checkboxes/_index.nb.md
@@ -100,13 +100,7 @@ App/ui/layouts/{page}.json
"data": {
"layout": [
{
- "id": "Image-id",
- "type": "Image",
- "image": {
- "src": {},
- "width": "100%",
- "align": "center"
- }
+ // Basic component (required properties)
}
]
}
diff --git a/content/app/development/ux/components/likert/_index.en.md b/content/app/development/ux/components/likert/_index.en.md
index 982f6869183..f1a3c075710 100644
--- a/content/app/development/ux/components/likert/_index.en.md
+++ b/content/app/development/ux/components/likert/_index.en.md
@@ -25,7 +25,7 @@ Likert uses the same concept as repeating groups.
## Example
The Likert component requires that you have a data model with a list. This list must contain objects with questions and answers.
-Example on setup of data model in App/logic/InstantiationHandler.cs:
+Example of setup of data model in App/logic/InstantiationHandler.cs:
```c#
public async Task DataCreation(Instance instance, object data)
@@ -55,7 +55,7 @@ public async Task DataCreation(Instance instance, object data)
}
```
-Example on definition of likert component in layout.json:
+Example of a definition of a likert component in layout.json:
{{}}
{{}}
diff --git a/content/app/development/ux/components/listComponent/_index.en.md b/content/app/development/ux/components/listComponent/_index.en.md
index c13792f3f7a..29cd8ffeaab 100644
--- a/content/app/development/ux/components/listComponent/_index.en.md
+++ b/content/app/development/ux/components/listComponent/_index.en.md
@@ -14,7 +14,7 @@ The setup must be done manually as of today. Support for setup through Altinn St
![ListComponent](listComponent.png "Eksempel på hvordan listekomponenten ser ut")
## How to define the component in code
-The component is of type `List`. One example on definition of list component in layout.json:
+The component is of type `List`. An example of a list component definition in layout.json:
```json
{
"id": "list-component",
diff --git a/content/app/development/ux/fields/grouping/repeating/attachments/_index.en.md b/content/app/development/ux/fields/grouping/repeating/attachments/_index.en.md
index a78d22a6cc5..39ff4a9ac83 100644
--- a/content/app/development/ux/fields/grouping/repeating/attachments/_index.en.md
+++ b/content/app/development/ux/fields/grouping/repeating/attachments/_index.en.md
@@ -20,7 +20,7 @@ that belongs to each file attachment and send this together with the rest of the
The ability to place a reference to the file attachment in the data model can also be used outside of repeating groups if you
want a reference to a file attachment together with the form data on the receivers end.
-![Example on file attachment in repeating group with attached data model](attachments-demo.gif "Example on file attachment in repeating group with attached data model")
+![Example of a file attachment in repeating group with attached data model](attachments-demo.gif "Example of a file attachment in repeating group with attached data model")
The following is an example of a data model expecting a reference to an uploaded file attachment.
diff --git a/content/app/development/ux/pages/summary/_index.en.md b/content/app/development/ux/pages/summary/_index.en.md
index 722185a1943..3d0e3c4bc38 100644
--- a/content/app/development/ux/pages/summary/_index.en.md
+++ b/content/app/development/ux/pages/summary/_index.en.md
@@ -9,11 +9,11 @@ weight: 30
{{%notice warning%}}
Setup must be done manually as of today. Support for setup through Altinn Studio will be available at a later point in time.
-**NOTE**: The PDF generation, as of today, does not support the summary component. For PDF generating to work, either all the summary components or the whole summary-page(s) must be excluded from PDF. This is done in the `Settings.json`-file attached to the layout-files.
+**NOTE**: The PDF generation, as of today, does not support the summary component. For PDF generation to work, either all the summary components or the whole summary-page(s) must be excluded from PDF. This is done in the `Settings.json`-file attached to the layout-files.
{{%/notice%}}
## Setup
-Display of summary is set up in the same manner as the other form components in a form.
+The summary display is set up in the same manner as the other form components in a form.
You can choose to have the summary on it's own page, or on the same page as other form components.
The summary component is very simple, and refers to the _component_ that is to be summarized. Example:
@@ -69,7 +69,6 @@ However, the following text resources set in the reference component will not be
}
```
-
### Simple form component
These are components that are only connected to one field in the data model. E.g. Input, Dropdown, Checkbox/Radio, etc.
@@ -255,7 +254,7 @@ the group component. See the example below.
}
```
-## Example on summary page
+## A summary page example
Below is an example of a summary page, with setup in the layout file. Since the summary is set up
in the layout files in the same way as other components, you can also include other form components as texts
when needed.
diff --git a/content/app/development/ux/pdf/_index.en.md b/content/app/development/ux/pdf/_index.en.md
index b013cd3f32e..3a1a1d0153c 100644
--- a/content/app/development/ux/pdf/_index.en.md
+++ b/content/app/development/ux/pdf/_index.en.md
@@ -4,8 +4,11 @@ description: How to configure the generation of PDF
weight: 50
---
-{{%notice warning%}}
-## New PDF generation
+{{}}
+{{}}
+In version 8 of the nuget packages (Altinn.App.Api and Altinn.App.Core) only the new setup for pdf generation is avalilble.
+{{}}
+{{}}
### Enable feature
As of version 7.5 of the nuget packages (Altinn.App.Api and Altinn.App.Core) a new way of generating PDFs launched as a preview. This feature can be toggled on/off by adding the following section and feature toggle in _appsettings.json_.
@@ -17,21 +20,8 @@ As of version 7.5 of the nuget packages (Altinn.App.Api and Altinn.App.Core) a n
This will call the new PDF service which accepts a URL pointing back to an automatic generated page in the app. The rendered page is then used as the foundation for the PDF. The `IPdfFormatter` as documented below is still relevant if you need custom logic for excluding components/pages from PDF.
-### Settings
-While the default settings for the new service should be enough for most applications they can be overridden by adding a PdfGeneratorSettings section in _appsettings.json_ (default settings shown below).
-
-```json
- "PdfGeneratorSettings": {
- "ServiceEndpointUri": "https://{org}.apps.{hostName}/{appId}/#/instance/{instanceId}",
- "AppPdfPageUriTemplate": "https://{org}.apps.{hostName}/{appId}/#/instance/{instanceId}?pdf=1",
- "WaitForSelector": "#readyForPrint",
- "WaitForTime": 5000
- }
-```
-
-If the WaitForSelector is set, the WaitForTime will be ignored. The WaitForSelector ensures that the page will be completely rendered before the PDF is generated.
-
-{{% /notice%}}
+{{}}
+{{}}
There are two different methods of configuring the generation of PDFs:
@@ -295,7 +285,7 @@ It is possible to exclude child components from a group by using the `excludedCh
{{%notice warning%}}
-This preview is only applicable to the new PDF generation method (v7.5+). See [above](#new-pdf-generation) for more information.
+This preview is only applicable to the new PDF generation method (v7.5+).
{{% /notice%}}
@@ -310,3 +300,17 @@ It is possible to get a preview of what the generated PDF will look like in the
4. Click the `Forhåndsvis PDF` (Preview PDF) button in the developer tools panel.