Wpis z mikrobloga

Koledzy, dajcie mi jakąś wskazówkę, co robię źle, bo już nie wiem.
Tworzę sobię aplikację w MS PowerApps. Chcę, by w formularzu, przy wybraniu z listy rozwijalnej określonego człowieka, aplikacja sama uzupełniała wartość w kolumnie na Sharepoincie, sformatowanej jako choice, gdzie są do wyboru adresy mailowe. Napisałem coś takiego, funkcja UpdateIf.

UpdateIf(

'NazwaListy',

KolumnaZCzlowiekiem = "Jan Nowak"

{
KolumnaZMailemCzlowieka: jannowak@mail.com
}
)

Co robię źle? #naukaprogramowania #microsoftpowerapps #powerapps
  • 39
@DerMirker: Okej, jeszcze raz. Masz kontrolkę, która zawiera imiona i nazwiska osób. Co to za kontrolka? Dropdown czy combo box? Skąd pobierasz itemy do tej kontrolki? Masz je wpisane po prostu w Items czy za pomocą jakiejś funkcji wyciągasz te informacje z innego miejsca w SharePoint/AAD? Drugi błąd wskazuje, że masz wstawioną funkcję UpdateIf nie tam, gdzie trzeba. Gdzie ją zakodowałeś?
@jakis_login:
1. Mam combo box z imionami i nazwiskami ludzi
2. Ten combo bo czerpie dane ze zdefiniowanej jako Choice kolumny w tabeli na sharepoincie.
3. W Items mam wpisane Choices([@'Nazwa listy'].KolumnaZCzłowiekiem
4. UpdateIf zakodowałem w DefaultSelectedItems
@DerMirker: No to w punkcie 4 masz błąd. UpdateIf nie może być w DefaultSelectedItems bo ten parametr służy do informowania kontrolki, co ma wyświetlić. Wstaw UpdateIf na OnChange ComboBoxa lub na OnSelect przycisku.
@DerMirker: tak, i jest błąd w formule. Kolumna typu Choice nie może aktualizowana tekstem, tylko wartością typu record. Tylko zastanawia mnie jeszcze jedna kwestia - updateIf na OnChange z warunkiem sprawdzającym, czy kolumna z człowiekiem ma wartość Jan Nowak sprawi, że przy KAŻDEJ zmianie nastąpi UpdateIf, co z punktu widzenia wydajności jest... durne ;) Możesz zastosować dodatkowego ifa wcześniej który sprawdza, czy wartość Twojego combo boxa to Jan Kowalski i wtedy
@DerMirker:

Całość kodu w sytuacji jak powyżej może wyglądać tak:

If(
ComboBox1.Selected.Value = "Jan Kowalski";
UpdateIf(
Test;
Nazwisko = "Jan Kowalski";
{
Email: {
'@odata.type': "#microsoft.Azure.Connectors.SharePoint.SPListExpandedReference";
Value: "jankowalski@gmail.com"
}
}
)
)

Oczywiście nie jest to najbardziej optymalne rozwiązanie, bo dla każdego case musisz robić osobnego IFa, co strasznie zwiększa ilość kodu, a przez to spada wydajność.

EDIT:

Test to nazwa mojej listy, Email to nazwa kolumny typu choice gdzie
@jakis_login: odezwę się na dniach, raczej w poniedziałek, teraz będę chwilę niedostępny.

Zasadniczo zrozumialem, że dopóki nie zasubmituję forma w PowerApps, to przeciez się nie będzie zapisywać do SharePointa. Dopiero po kliknięciu w przycisk Submit, który mam na formie, tworzy się rekord na SharePoincie.
@jakis_login: Rozwiązałem problem w sposób następujący:

1. W dropdownie do wyboru człowieka dałem If(czlowiek.selected.value = "jan kowalski, set(myVar, "jankowalski@op.pl"), czyli skorzystałem ze zmiennej
2. Następnie dodałem pod tym dropdownem card kolumny ze sharepointa typu Text, a w polu text input, w funkcji default = myVar. Trzeba było w card, w ustawieniach advanced zmienić Update na myVar
3. Ukryłem ten cały card z mailem.

Działa! Dzięki Ci za pomoc :)
@jakis_login: Hej mam jeszcze jedno pytanko:
Próbuję sobie w PowerApps wyfiltrować w SharePoincie same rekordy, gdzie jedno pole nie jest uzupełnione (puste pole w tabeli). Używam tego polecenia, jednak nie zwraca wyników. Na czym polega mój błąd?

Filter(

'Przeszukiwana tabela ABC',

NazwaPolaTextInput.Text in "Nazwa kolumny'.Value = ""

)