Author: admin

  • RichText prvek s dynamickou výškou

    RichText editor je prvek, který v Power Apps umožňuje zapisovat formátovaný text.

    Má zatím jednu nepříjemné omezení. Pokud je text kratší nebo delší, prvek se tomu neumí automaticky přizpůsobit. Takže buď zabírá nevyužitou plochu, nebo není vidět co má být vidět.

    Takže co s tím?

    Dá se to řešit zajímavý workaroundem. Ten vychází z toho, že RichText sice nemá dynamickou výšku, ale má jí HtmlText (což je podobný prvek, ale formátovaný text jen čte – nezapisuje).

    Takže stačí:

    Zobrazit v HtmlTextu obsah RichTextu

    Dát HtmlTextu automatickou výšku

    Nastavit RichText aby si přebíral výšku z HtmlTextu

    Drobná nevýhoda tohoto postupu je, že aby to celé fungovalo, nemůže mít HtmlText nastaveno visible=false, což by se hodilo. Řešením ale může být posunout ho někam dozadu, takže stejně není vidět, ale přitom funguje.

  • Kontrola nesrovnalostí ve dvou listech

    Můžete mít dva SharePoint listy pro jednu aplikaci – např. jeden pro vývojové prostředí a druhý pro produkční.

    V průběhu času se ale může stát, že listy nejsou konzistentní – např. v jednom přidáte nebo přejmenujete sloupec a ve druhém ne.

    Může se to stát snadno, hlavně při dodatečných opravách, a situace je komplikovanější s v tom, že v SharePointu jsou jiné názvy interní a jiné viditelné.

    Jak si tedy být pořád jistý, že jsou oba seznamy stejné? Ideální cestou je Power Query.

    Prostě se do obou seznamů připojíte a necháte najít rozdíly. Napoprvé to zabere jen pár minut, a při další kontrole už jen pár zrefreshujete.

    Dotaz si můžete naklikat nebo vám ho vytvoří AI, ale v principu budete potřebovat připojení do prvního listu a vytáhnout názvy sloupců:

    • let
      Source = SharePoint.Tables(“https://vyukaexcelu.sharepoint.com/sites/Cheesecake/“, [ApiVersion = 15]),
      Data = Source{[Id=”b069b7b8-77bf-44e3-bbf8-23939b5f6808“]}[Items],
      ColumnNames = Table.ColumnNames(Data), //získání seznamu sloupců,
      Result = Table.FromList(ColumnNames, Splitter.SplitByNothing(), {“ColumnName”})
      in
      Result

    analogicky pak z druhého, a pak listy zmergujete tak, aby se ukázaly jen rozdílné položky:

    Výstupem bude seznam, který obsahuje jen položky chybějící nebo jinak pojmenované v jednom listu.

    Skvělé je, že Power Query pracuje s interními názvy, stejně jako vaše aplikace.

  • Live monitor v Power Apps – velmi užitečný pomocník

    Moc uživatelů Live monitor v Power Apps nepoužívá, a přitom vám někdy může zachránit život (nebo aspoň reputaci nebo pár hodin vývoje).

    Funguje tak, že:

    – Spustíte ho pro konkrétní appku a otevře se prázdný.

    – Kliknutím na Copy Live monitor link vygenerujete link, ve kterém appku otevřete.

    – Jak appka běží, v live monitoru se ukazují všechny procesy, které v ní probíhají. Včetně toho, jestli skončily úspěšně, a délky trvání.

    Poznámky:

    – Je samozřejmě ideální mít na jednom monitoru appku, na druhém Live monitor

    – Pokud v appkce přicházíte ke kritickému místu které řešíte, klikněte na Clear data a pokračujte v aplikaci. Tím zajistíte že ve výstupu uvidíte jen relevantní data.

    – Výstupy můžete procházet sami, ale mnohem rychlejší často bude stáhnout si sjetinu jako JSON a ten předhodit Claudovi a spol. a nechat je sjetinu vyhodnotit.

    – Není problém sledovat i provoz v mobilu, Live monitor vám vygeneruje QR code.

  • Problém s interními názvy sloupců v SharePoint Lists

    Podívejte se na obrázek a zkuste odpovědět.

    Jak se jmenuje zobrazený sloupec v SharePoint listu?

    Pokud si myslíte, že přece “Fialova_zabicka”, tak se podivejte pořádně. Resp. podívejte se nahoru. Tento sloupec se ve skutečnosti interně jmenuje “Ruzova_zabicka” a Power Platform s ním takto v pozadí pracuje. I když to tak většinou nevypadá.

    Tento problém vzniká většinou dodatečným přejmenováním, kdy sloupec si drží původní název, i když ho přejmenujete.

    V čem je problém? Většinou v ničem. Power BI, exporty do CSV… vám zobrazují ten “viditelný název”.

    U Power Apps je to složitější. Tam se vám zobrazuje ve vzorečku viditelný název, ale Power Appka se ve skutečnosti odkazuje na původní název.

    Což mě nedávno vzalo pár hodin života.

    Přidal jsem nový sloupec do DEV SP listu a do PROD SP listu. V PROD jsem udělal překlep, tak jsem ho opravil. Zdánlivě žádný problém, jenomže interní název se nezměnil.

    Chyba se pak projevova tak, že některé funkce fungovaly jen v DEV, ale ne v PROD. Zdánlivě bezdůvodně – protože viditené názvy v obou SP listech odpovídaly vzorečku v Power Apps.

    To je přesně typ chyby, která se hledá fakt blbě, a pomohlo mi až použití Live Monitoru v Power Apps a jeho vyhodnocení Claudem.

    Náprava pak byla triviální.

    Tak jen abyste s tímhle počítali a byli příště chytřejší než jsem byl já 🙂

  • Galerie – řádky, sloupce, responzivita

    Galerie – řádky, sloupce, responzivita

    Galerie – řádky a sloupce. Věděli jste že je to tak jednoduché?

    Vertikální galerie je v Power Apps první volbou pokud chcete zobrazit seznam něčeho. Oproti “Table” se sice tvoří trochu pomaleji, ale má úžasné možnosti grafické úpravy, zobrazení obrázků a tak.

    Jak je to ale s počtem sloupců ve vertikální galerii? Defaultně je jeden, vy si je ale můžete přidat. Slouží k tomu vlastnost Wrap count. Ta je defaultně jedna, ale jde zvýšit (i když mnoho uživatelů asi ani neví že to jde).

    Klíčové je, že tuto vlastnost můžete odvodit i od aktuální šířky appky – takže např. na telefonu to budou jen dva sloupečky, na velkém displeji pět. To je samozřejmě super při tvorbě responzivních appek.

  • Power Apps – jak aplikace rozliší v jakém prostředí je

    Power Apps – jak aplikace rozliší v jakém prostředí je

    Při práci v Power Apps může být dobré vědět, v jakém jste prostředí. Typicky v situaci, kdy chcete aby se aplikace chovala mírně jinak v DEV a v PROD.

    Standardní jazyk Fx toto ale nezjistí, a současně v neprémiovém účtu nemáme přístup k Dataverse kde bychom to mohli zjistit.

    Takže jak na to?

    Využijeme toho, že Power Automate, na rozdíl od Power Apps, má přímý konektor.

    Jak na to?

    Vytvoříme proměnnou prostředí a naplníme jí. Např. v DEV prostředí hodnotou „DEV“.

    Pak můžeme z aplikace volat toto flow, které se umí na proměnnou snadno dotázat. Typicky tak, že při spuštění aplikace flow zavoláme a výsledek uložíme do proměnné.

    Výstup pak vrátíme do aplikace.

  • Power Apps – řádek tabulky v proměnné

    Power Apps – řádek tabulky v proměnné

    Do proměnné se nemusí ukládat jedna hodnota, ani celá tabulka (do kolekce). Je možné uložit konkrétní řádek tabulky.

    Jak na to?

    Např. takto:

    • Set(
          var_employee, //tabulka
          LookUp(
              zamestnanci,
              ‚Jméno a příjmení‘ = „Bart“ //řádek
          )
      )

    Nebo takto:

    • Set(
          var_employee, 
          First(zamestnanci)
      )

    K čemu je to dobré?

    Zjednodušení práce

    1. Můžete tím dost ušetřit práci. Protože můžete mít v jedné proměnné celý řádek a pak se na konkrétní hodnoty dotazovat třeba takto:
    • var_employee.’Jméno a příjmení‘

    Kopírování položek

    Ale hlavně – tuto proměnnou můžete vložit do Item formuláře. Formulář pak upravíte a uložíte, např. takto:

    • Patch(
          zamestnanci,
          Defaults(zamestnanci),
          Form1.Updates
      )

    Je to dost šikovné pokud potřebujete vzít stávající položku s tabulky, upravit ji a uložit jako nový záznam.

    S tímto tématem se setkáte na našich kurzech ExcelTown.
    Aktuálně: kurzy můžete absolvovat jak online, tak prezenčně.

    Pokud vás zajímá více informací o konzultacích, které nabízíme, a vývoji aplikací, který děláme pro naše klienty, stačí kliknout.

  • Power Apps – dva hlavní způsoby načítání čárových a QR kódů

    Power Apps – dva hlavní způsoby načítání čárových a QR kódů

    Čtečky kódů jsou v Power Apps skvěle podporované.

    Máte dvě cesty (vzájemně se nevylučující) jak s nimi pracovat:

    • můžete použít komponentu BarcodeReader (hlavně pro použití na mobilech),
    • nebo externí čtečku, která čte text a zapisuje ho do textového pole.

    Problém nastává v něčem, kde byste ho možná nečekali. Když totiž kód načtete, nic se nestane. Jenomže vy často potřebujete udělat něco jako “když se kód načte, tak ho někam ulož, někam jdi atd.”

    • U BarcodeReaderu je to v pohodě. Ten má vlastnost OnScan, a tam můžete definovat jakoukoliv akci.
    • Externí čtečka tohle ale neumí. Ta vám kód zapíše do běžného TextInputu, ale dál se nic nestane. Jasně, můžete textovému vstupu nadefinovat OnChange, ale to si pomůžete jen trochu – uživatel pak bude muset po načtení kódu ještě kliknout někam mimo políčko, aby se akce stala. A to je pro uživatele nepříjemné.

    Takže jak zařídit, aby se nějaká akce stala hned po vyplnění textového pole, bez nutnosti jakékoliv další interakce?

    Použijete Timer, který bude sledovat hodnoty v poli, ukládat je do proměnné, a při změně spustí akci.

    Jak ho nastavit?

    • AutoStart: =true
    • Duration: =1000
    • OnTimerStart: =Set(my_var,TextInput1.Text)
    • OnTimerEnd: =If(my_var<>TextInput1.Text,here is your action)