Funkcje Update i UpdateIf

Dotyczy: aplikacje kanwy aplikacje oparte na modelu

Te funkcje umożliwiają aktualizowanie rekordów w źródle danych.

Popis

Funkcja Update

Funkcja Update umożliwia zastąpienie całego rekordu w źródle danych. Z kolei funkcje UpdateIf i Patch umożliwiają zmodyfikowanie jednej lub wielu wartości w rekordzie, pozostawiając inne wartości bez zmian.

W przypadku kolekcji cały rekord musi pasować. Kolekcje obsługują zduplikowane rekordy, więc wiele rekordów może pasować. Możesz użyć argumentu RemoveFlags.All, aby zaktualizować wszystkie kopie rekordu. W przeciwnym razie zostanie zaktualizowana tylko jedna kopia rekordu.

Jeśli źródło danych generuje wartość kolumny automatycznie, wartość tej kolumny należy potwierdzić.

Funkcja UpdateIf

Użyj funkcji UpdateIf, aby zmodyfikować co najmniej jedną wartość w co najmniej jednym rekordzie zgodnym z co najmniej jednym warunkiem. Warunek może być dowolną formułą dającą wynik prawda lub fałsz i może przywoływać kolumny w źródle danych według nazwy. Funkcja oblicza warunek dla każdego rekordu i modyfikuje każdy rekord, dla którego wynik to prawda.

Aby określić modyfikację, użyj rekordu zmiany zawierającego nowe wartości właściwości. Jeśli podasz rekord zmiany w postaci wbudowanej za pomocą nawiasów klamrowych, formuły właściwości mogą przywoływać właściwości modyfikowanego rekordu. To zachowanie umożliwia modyfikowanie rekordów na podstawie formuły.

Podobnie jak w przypadku funkcji UpdateIf, funkcji Patch można użyć do zmiany konkretnych kolumn rekordu bez wpływania na inne kolumny.

Zarówno funkcja Update, jak i UpdateIf zwracają zmodyfikowane źródło danych w postaci tabeli. Należy użyć jednej z tych funkcji w formule zachowania.

Delegowanie

Tych funkcji nie można delegować, gdy są używane ze źródłem danych. Zostanie pobrana tylko pierwsza część źródła danych, a następnie zostanie zastosowana funkcja. To może nie odpowiadać pełnym informacjom. Podczas tworzenia może zostać wyświetlone ostrzeżenie, aby przypominać o tym ograniczeniu.

Obsługa delegowania (eksperymentalna)

Obsługa delegowania funkcji UpdateIf jest teraz w eksperymentalnej wersji zapoznawczej (domyślne WYŁĄCZONA) dla źródeł danych, które je obsługują. Jeśli źródło danych nie obsługuje tej funkcji, Power Apps wyśle do serwera zapytanie i pobierze wszystkie dane dopasowania do wyrażenia filtrowego do maksymalnej wartości 500, 2000 lub rozmiaru strony danych. Następnie należy zaktualizować te rekordy i wysłać je z powrotem na serwer, który ma zostać zaktualizowany.

Składnia

Update( DataSource, OldRecord, NewRecord [, RemoveFlags.All ] )

  • DataSource – wymagane. Źródło danych zawierające rekord, który ma zostać zastąpiony.
  • OldRecord – wartość wymagana. Rekord, który ma zostać zastąpiony.
  • NewRecord – wartość wymagana. Rekord zastępujący. To nie jest rekord zmiany. Zastępowany jest cały rekord, a brakujące właściwości będą zawierać wartość pustą.
  • RemoveFlags.All — opcjonalnie. W kolekcji ten sam rekord może występować więcej niż raz. Należy podać argument RemoveFlags.All, aby aktualizować wszystkie kopie rekordu.

UpdateIf( DataSource, Condition1, ChangeRecord1 [, Condition2, ChangeRecord2, ... ] )

  • DataSource – wymagane. Źródło danych zawierające co najmniej jeden rekord, który ma zostać zmodyfikowany.
  • Condition(s) – wymagane. Formuła, której obliczenie daje wartość prawda dla rekordu lub rekordów, które chcesz zmodyfikować. Możesz użyć nazw kolumn z tabeli DataSource w formule.
  • ChangeRecord(s) – wymagane. Dla każdego odpowiadającego warunku jest to rekord zmiany nowych wartości właściwości do zastosowania dla rekordów tabeli DataSource, które spełniają warunek. Jeśli rekord zostanie podany w postaci wbudowanej za pomocą nawiasów klamrowych, można użyć wartości właściwości istniejącego rekordu w formułach właściwości.

Przykłady

W tych przykładach przedstawiono zastępowanie lub modyfikowanie rekordów w źródle danych o nazwie IceCream, którego początkowe dane przedstawia następująca tabela:

Przykład Icecream.

Formuła Opis Wynik
Update( IceCream,
First( Filter( IceCream, Flavor="Chocolate" ) ), { ID: 1, Flavor: "Mint Chocolate", Quantity:150 } )
Zastępuje rekord ze źródła danych. Zastąp rekord.

Źródło danych IceCream zostało zmodyfikowane.
UpdateIf( IceCream, Quantity > 175, { Quantity: Quantity + 10 } ) Modyfikuje rekordy, które mają wartość Ilość większą niż 175. Pole Ilość jest zwiększane o 10, a żadne inne pola nie są modyfikowane. Modyfikowanie rekordów.

Źródło danych IceCream zostało zmodyfikowane.
Update( IceCream,
First( Filter( IceCream, Flavor="Strawberry" ) ),
{ ID: 3, Flavor: "Strawberry Swirl"} )
Zastępuje rekord ze źródła danych. Właściwość Quantity nie została określona w rekordzie zastępującym, więc w wyniku ta właściwość będzie miała wartość pustą. Zamień rekord w przypadku, gdy ilość nie jest dostarczana.

Źródło danych IceCream zostało zmodyfikowane.
UpdateIf( IceCream, true, { Quantity: 0 } ) Ustawia wartość właściwości Quantity dla wszystkich rekordów w źródle danych na 0. Ustaw ilość dla wszystkich na 0.

Źródło danych IceCream zostało zmodyfikowane.

Krok po kroku

  1. Zaimportuj lub utwórz kolekcję o nazwie Zapasy, a następnie wyświetl ją w galerii zgodnie z opisem w temacie dotyczącym wyświetlania danych w galerii.

  2. Nadaj galerii nazwę ProductGallery.

  3. Dodaj suwak o nazwie UnitsSold i ustaw dla jego właściwości Max następujące wyrażenie:
    ProductGallery.Selected.UnitsInStock

  4. Dodaj przycisk i ustaw dla jego właściwości OnSelect następującą formułę:
    UpdateIf(Inventory, ProductName = ProductGallery.Selected.ProductName, {UnitsInStock:UnitsInStock-UnitsSold.Value})

  5. Naciśnij klawisz F5, wybierz produkt w galerii, określ wartość za pomocą suwaka, a następnie wybierz przycisk.

    Liczba jednostek dla zapasu magazynowego produktu zostanie zmniejszona o określoną wartość.