Tillad en brugerdefineret værdi som input i Power Apps
Power Apps respekterer ikke “Allow Fill-in values” på en valgkolonne i SharePoint. Datakortets Update-egenskab kan bruge søgeteksten, når intet er valgt. Med flervalg, opslagskolonner og den moderne Combo box.
Har man en valgkolonne i SharePoint, hvor man har slået “Allow Fill-in values” til, så respekterer Power Apps ikke den indstilling. For at det skal virke, skal man opdatere datakortet for kolonnen, så det bruger søgeteksten som input, hvis intet andet er valgt i valglisten.
For at få det til at virke skal man:
- Gå til appen og finde datakortet for sin Choice-kolonne. Her skal Update-egenskaben sættes til: (I min demo hedder kortet “DataCardValue2”)
If(!IsBlank(DataCardValue2.SearchText),{Value:DataCardValue2.SearchText},DataCardValue2.Selected)
Indstillingen i SharePoint#
Indstillingen sidder på selve valgkolonnen. I den moderne kolonneopsætning hedder den Can add values manually, og i den klassiske taler Microsoft om “fill-in” choices. Microsofts egen forklaring er, at den lader folk skrive en værdi, der ikke står på listen over valg, og at den er en god idé, hvis man ikke kender alle de værdier, folk skal bruge (List and library column types and options). I kolonnens definition er det attributten FillInChoice (Field element (Field)).
Hvorfor Power Apps ikke følger med#
Når Power Apps laver en formular over listen, får valgkolonnen et datakort med en Combo box. Valgene i boksen kommer fra funktionen Choices, som returnerer kolonnens mulige værdier (Choices function), og boksen lader kun brugeren vælge blandt dem. Skriver brugeren noget, der ikke står på listen, bliver teksten stående i søgefeltet, og så sker der ikke mere.
Det, formularen gemmer, er kortets Update-egenskab: “The value to write back to the data source for a field” (Card control). Peger Update kun på det, der er valgt i boksen, når den skrevne tekst aldrig frem til SharePoint. Formlen ovenfor ændrer netop det.
Én ting i min gamle tekst skal lige rettes: DataCardValue2 er ikke selve kortet, men kontrollen inde i kortet, altså den Combo box, brugeren skriver i. Update sidder på kortet og læser fra DataCardValue2. Før Update kan ændres, skal kortet låses op under Advanced i egenskabsruden (Understand data cards in canvas apps). Kan man slet ikke skrive i boksen, er IsSearchable slået fra (Combo box control).
Formlen, linje for linje#
If(vælger mellem to værdier: den skrevne tekst eller det valgte punkt.!IsBlank(DataCardValue2.SearchText),spørger, om der står noget i søgefeltet.SearchTexter den tekst, brugeren har skrevet. Den er beskrevet for den moderne Combo box (Combo box modern control); siden om den klassiske kontrol nævner den ikke, men det er den, formlen her bruger.{Value:DataCardValue2.SearchText},bygger en post med ét felt,Value, og lægger teksten i det. Det er den form, en valgkolonne fra SharePoint har i Power Apps: SharePoint-forbindelsen gør Choice til en sammensat type (Connect to SharePoint from a canvas app), og teksten står iValue, som i Microsofts eksempel'Issue Status'.Value = "Active"(Integrate SharePoint Online into Power Apps overview).DataCardValue2.Selecteder ellers det punkt, brugeren har valgt på listen.)lukkerIf.
Det, man skal passe på#
- Den skrevne tekst vinder. Det er det rigtige, når et eksisterende element rettes: her står den gamle værdi allerede som valgt, så en ny tekst skal kunne tage over. Men skriver brugeren “Lag” for at finde “Lager” og vælger så “Lager”, afhænger resultatet af, om kontrollen tømmer søgefeltet ved valget. Den opdaterede moderne Combo box gør (“When an item is selected, the search text automatically clears”). For den klassiske står der intet om det. Bliver teksten stående, gemmes “Lag”.
- Værdien kommer ikke på listen.
Choiceshenter de valg, kolonnen er defineret med. En skrevet værdi gemmes på elementet, men næste bruger ser den ikke i boksen, medmindre nogen tilføjer den til kolonnen. - Indstillingen skal være slået til. Formlen er skrevet til en kolonne, der tillader egne værdier. Uden indstillingen skal man ikke regne med, at SharePoint tager imod teksten.
Når kolonnen tillader flere valg#
Er Allow multiple selections slået til, er kolonnens værdi en tabel af poster, og kortet gemmer SelectedItems, listen over alt det valgte (Combo box control). Så skal den skrevne tekst lægges til tabellen i stedet for at erstatte den. Her hedder kontrollen DataCardValue3:
If(
IsBlank(DataCardValue3.SearchText),
DataCardValue3.SelectedItems,
Ungroup(
Table(
{Valg: DataCardValue3.SelectedItems},
{Valg: Table({Value: DataCardValue3.SearchText})}
),
Valg
)
)
Table laver en tabel med to rækker, hvor hver række holder en tabel i kolonnen Valg: de valgte punkter og en ny tabel med den skrevne tekst. Ungroup folder dem ud til én tabel af poster med Value (GroupBy and Ungroup functions). Formlen er ikke afprøvet, og der er to ting at se efter: at Power Apps godtager, at de to indre tabeller har samme form, og at der kun kommer én skrevet værdi med pr. gemning, fordi søgefeltet kun holder én tekst ad gangen. Skal brugerne kunne skrive flere, er et separat tekstfelt nok en bedre vej.
Opslagskolonner har ingen fill-in#
En opslagskolonne lader folk vælge værdier, der allerede findes i en anden liste på webstedet (List and library column types and options). Der er ingen indstilling for egne værdier, og det giver mening: en opslagsværdi er en henvisning til et element i den anden liste, med elementets Id og Value. En ny værdi betyder derfor et nyt element i den anden liste. Hvordan posten skal se ud, har jeg skrevet om i Gem valg fra en combobox i en opslagskolonne med Patch.
Elementet kan ikke oprettes fra Update, for Patch og Set hører hjemme i en handling som knappens OnSelect. En måde er at oprette det i gem-knappen, før formularen sendes. Her er opslagslisten Kunder, opslaget viser Title, kontrollen hedder DataCardValue4, og formularen EditForm1:
If(
IsBlank(DataCardValue4.Selected) &&
!IsBlank(DataCardValue4.SearchText) &&
IsBlank(LookUp(Kunder, Title = DataCardValue4.SearchText)),
Set(varNyKunde, Patch(Kunder, Defaults(Kunder), {Title: DataCardValue4.SearchText}))
);
SubmitForm(EditForm1)
Patch returnerer det element, den har oprettet, med de værdier, listen selv har sat, også ID (Patch function). LookUp sørger for, at et navn, der allerede står i listen, ikke oprettes igen, bare fordi brugeren skrev det i stedet for at vælge det. Kortets Update peger så på det nye element, når der er et:
If(
!IsBlank(varNyKunde),
{
'@odata.type': "#Microsoft.Azure.Connectors.SharePoint.SPListExpandedReference",
Id: varNyKunde.ID,
Value: varNyKunde.Title
},
DataCardValue4.Selected
)
Til sidst tømmes variablen i formularens OnSuccess med Set(varNyKunde, Blank()), så den ikke hænger ved til næste element. Heller ikke det her er afprøvet. Det er skrevet til nye elementer, for på et eksisterende står den gamle værdi som valgt, og så oprettes der intet. Brugeren skal desuden have lov til at oprette elementer i Kunder, ellers fejler Patch.
Den moderne Combo box#
Den moderne Combo box har SearchText som dokumenteret egenskab, så formlerne kan bruges med den. Et par ting er anderledes (Combo box modern control):
SelectMultipleer som standardtrue. Til en kolonne med ét valg skal den sættes tilfalse, ellers giverSelectedbare det første af de valgte punkter.- Søgefeltet tømmes, når et punkt vælges, i den opdaterede version. Det fjerner fælden med “Lag” og “Lager” ovenfor.
DelayOutputbestemmer, omSearchTextopdateres for hvert tastetryk eller først, når brugeren holder en pause.Reset()tømmer både valget og søgefeltet.ItemDisplayTextafløserFields, når man vælger, hvad der vises for hvert punkt.
Kilder#
- Microsoft Support: List and library column types and options
- Microsoft Learn: Field element (Field)
- Microsoft Learn: Combo box control in Power Apps
- Microsoft Learn: Combo box modern control in canvas apps
- Microsoft Learn: Understand data cards in canvas apps
- Microsoft Learn: Card control in Power Apps
- Microsoft Learn: Connect to SharePoint from a canvas app
- Microsoft Learn: Integrate SharePoint Online into Power Apps overview
- Microsoft Learn: Choices function
- Microsoft Learn: GroupBy and Ungroup functions
- Microsoft Learn: Patch function
Sidst opdateret