> For the complete documentation index, see [llms.txt](https://docs.devolutions.net/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.devolutions.net/powershell-universal/da/apps/components/inputs/form.md).

# Formular

Byg formularer i PowerShell Universal-apps, der indsamler, validerer og indsender data fra tekstfelter, afkrydsningsfelter, valglister og andre inputkontrolelementer.

{% embed url="<https://youtu.be/o8Bl1NsCc2Y>" %}

Formularer giver en måde at indsamle data fra brugere på.

Formularer kan indeholde enhver type kontrolelement, De ønsker. Dette giver Dem mulighed for at tilpasse udseendet og funktionaliteten og bruge alle inputkontrolelementer.

Data, der angives via inputkontrolelementerne, sendes tilbage til scriptblokken `OnSubmit`, når formularen indsendes. I hændelseshandleren `OnSubmit` har De adgang til variablen `$EventData`, som indeholder egenskaber for hvert af felterne i formularen.

Hvis De for eksempel har to felter, vil De have to egenskaber på `$EventData`.

```powershell
New-UDForm -Content {
    New-UDTextbox -Id 'txtTextField'
    New-UDCheckbox -Id 'chkCheckbox'
} -OnSubmit {
    Show-UDToast -Message $EventData.txtTextField
    Show-UDToast -Message $EventData.chkCheckbox
}
```

## Understøttede kontrolelementer

Følgende inputkontrolelementer integreres automatisk med en formular. Værdierne, der er angivet i disse kontrolelementer, sendes under validering og i hændelseshandleren `OnSubmit`.

* [Autofuldførelse](/powershell-universal/da/apps/components/inputs/automcomplete.md)
* [Afkrydsningsfelt](/powershell-universal/da/apps/components/inputs/checkbox.md)
* [Datovælger](/powershell-universal/da/apps/components/inputs/date-picker.md)
* [Radioknap](/powershell-universal/da/apps/components/inputs/radio.md)
* [Select](/powershell-universal/da/apps/components/inputs/select.md)
* [Skyder](/powershell-universal/da/apps/components/inputs/slider.md)
* [Til/fra-kontakt](/powershell-universal/da/apps/components/inputs/switch.md)
* [Tekstfelt](/powershell-universal/da/apps/components/inputs/textbox.md)
* [Tidsvælger](/powershell-universal/da/apps/components/inputs/time-picker.md)
* [Transferliste](/powershell-universal/da/apps/components/inputs/transfer-list.md)
* [Upload](/powershell-universal/da/apps/components/inputs/upload.md)

## Simpel formular

Enkle formularer kan bruge input som tekstfelter og afkrydsningsfelter.

```powershell
New-UDForm -Content {
    New-UDTextbox -Id 'txtTextfield'
    New-UDCheckbox -Id 'chkCheckbox'
} -OnSubmit {
    Show-UDToast -Message $EventData.txtTextfield
    Show-UDToast -Message $EventData.chkCheckbox
}
```

## Formatering af en formular

Da formularer kan bruge enhver komponent, kan De bruge standardformateringskomponenter i formularen.

```powershell
New-UDForm -Content {

    New-UDRow -Columns {
        New-UDColumn -SmallSize 6 -LargeSize 6 -Content {
            New-UDTextbox -Id 'txtFirstName' -Label 'First Name' 
        }
        New-UDColumn -SmallSize 6 -LargeSize 6 -Content {
            New-UDTextbox -Id 'txtLastName' -Label 'Last Name'
        }
    }

    New-UDTextbox -Id 'txtAddress' -Label 'Address'

    New-UDRow -Columns {
        New-UDColumn -SmallSize 6 -LargeSize 6  -Content {
            New-UDTextbox -Id 'txtState' -Label 'State'
        }
        New-UDColumn -SmallSize 6 -LargeSize 6  -Content {
            New-UDTextbox -Id 'txtZipCode' -Label 'ZIP Code'
        }
    }

} -OnSubmit {
    Show-UDToast -Message $EventData.txtFirstName
    Show-UDToast -Message $EventData.txtLastName
}
```

## Returnering af komponenter

Når en formular indsendes, kan De valgfrit returnere en anden komponent, der erstatter formularen på siden. De kan returnere enhver Universal Dashboard-komponent. De skal blot sikre, at komponenten skrives til pipelinen i hændelseshandleren `OnSubmit`.

```powershell
New-UDForm -Content {
    New-UDTextbox -Id 'txtTextfield'
} -OnSubmit {
    New-UDTypography -Text $EventData.txtTextfield
}
```

## Validering af en formular

Formularvalidering kan udføres ved hjælp af scriptblokparameteren OnValidate.

```powershell
New-UDForm -Content {
    New-UDTextbox -Id 'txtValidateForm'
} -OnValidate {
    $FormContent = $EventData

    if ($FormContent.txtValidateForm -eq $null -or $FormContent.txtValidateForm -eq '') {
        New-UDFormValidationResult -ValidationError "txtValidateForm is required"
    } else {
        New-UDFormValidationResult -Valid
    }
} -OnSubmit {
    Show-UDToast -Message $Body
}
```

## Annullering af en formular

De kan definere en `-OnCancel`-hændelseshandler, der kaldes, når der trykkes på knappen Annuller. Den kan bruges til at udføre handlinger som at lukke en modal.

```powershell
New-UDButton -Text 'On Form' -OnClick {
    Show-UDModal -Content {
        New-UDForm -Content {
            New-UDTextbox -Label 'Hello'
        } -OnSubmit {
            Show-UDToast -Message 'Submitted!'
            Hide-UDModal
        } -OnCancel {
            Hide-UDModal
        }
    }
}
```

## Visning af output uden at erstatte formularen

Selv om De kan returnere komponenter direkte fra en formular, vil De måske beholde formularen, så brugerne kan indtaste data igen. Det kan De gøre med `Set-UDElement` og et pladsholderelement, hvis indhold De kan angive.

I dette eksempel har vi en tom formular, der, når den indsendes, opdaterer elementet `results` med et UDCard.

```powershell
New-UDForm -Content {

} -OnSubmit {
   Set-UDElement -Id 'results' -Content {
      New-UDCard -Content { "Hello " + (Get-Date) }
   }
}

New-UDElement -Id 'results' -Tag 'div'
```

## Skemaformularer

I stedet for at definere hele layoutet og logikken for formularer ved hjælp af cmdlets kan De også definere en formular baseret på en hashtable med skema. Denne version af formularer er baseret på [react-jsonschema-form](https://rjsf-team.github.io/react-jsonschema-form/docs/).

### Felter

De definerer felter, der accepterer typerne string, number, integer, enum og boolean. Dette ændrer den type input, der vises.

```powershell
New-UDForm -Schema @{
   title = "Test Form"
   type = "object"
   properties = @{
       name = @{
           type = "string"
       }
       age = @{
           type = "number"
       }
   }
} -OnSubmit {
   # $EventData.name
   # $EventData.age
}
```

### Påkrævede egenskaber

De kan bruge egenskaben `required` til at angive en liste over påkrævede egenskaber.

```powershell
New-UDForm -Schema @{
   title = "Test Form"
   type = "object"
   properties = @{
       name = @{
           type = "string"
       }
       age = @{
           type = "number"
       }
   }
   required = @('name')
} -OnSubmit {
   # $EventData.name
   # $EventData.age
}
```

{% hint style="warning" %}
Bemærk, at egenskaberne skal være med små bogstaver! De skal f.eks. sikre, at nøglerne i Deres egenskabs-hashtable er med små bogstaver, og at listen over påkrævede egenskaber også er med små bogstaver.
{% endhint %}

### Rækkefølge

De kan bruge egenskaben `schemaUI` til at ændre rækkefølgen af felterne.

```powershell
New-UDForm -Schema @{
        title = "Test"
        type = "object"
        properties = @{
            hostname = @{
                title = "Hostname"
                type = "string"
                }
            ipaddress= @{
                title = "IP Address"
                type = "string"
                format = "ipv4"
                }
            description = @{
                title = "Server Description"
                type = "string"
                }
            servertype = @{
                title = "Server Type"
                type = "string"                            
                enum = "App","DB"
                }
            environment = @{
                title = "Environment"
                type = "string"
                enum = "Prod", "Dev" , "QA"
                }
            }
		required = @('hostname','ipaddress','description','servertype','environment')                    
	} -uiSchema @{
		"ui:order" = @('environment','hostname','ipaddress','description')
	} -OnSubmit {
		Show-UDModal -Content {                        
			New-UDTypography -Text $EventData
		} -Footer {
			New-UDButton -Text "Close" -OnClick {Hide-UDModal}
		} -Persistent
	}
```

### Arrays

De kan oprette formularer, der accepterer 0 til mange objekter. Brugeren vil kunne tilføje og fjerne objekter i formularen.

```powershell
New-UDForm -Schema @{
   title = "Test Form"
   type = "array"
   items = @{
      type = "object" 
       properties = @{
           name = @{
               type = "string"
           }
           age = @{
               type = "number"
           }
       }
   }
} -OnSubmit {
   # $EventData[0].name
   # $EventData[0].age
}
```

## Scriptformularer

De kan automatisk generere formularer baseret på scripts i Deres PowerShell Universal-miljø. Scriptformularer genererer inputkomponenter baseret på `param`-blokken. Scriptformularer understøtter automatisk forløb og feedback.

Scriptformularer understøtter også visning af outputtet som tekst eller en tabel.

```powershell
New-UDForm -Script "Script.ps1" -OutputType 'text'
```

## API

* [New-UDForm](/powershell-universal/da/powershell-kommandoer/new-udform.md)
* [New-UDFormValidationResult](/powershell-universal/da/powershell-kommandoer/new-udvalidationresult.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.devolutions.net/powershell-universal/da/apps/components/inputs/form.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
