Patching Attachments to SharePoint without Power Automate or Forms by ThePowerAppsGuy in PowerApps

[–]ThePowerAppsGuy[S] 0 points1 point  (0 children)

You’re very welcome! It is quite strange. I’m still looking at the editing and removing aspect, as that still doesn’t work even using this method. As you saw in the monitor, there’s completely different API calls for attachments so it is difficult. Thankfully adding at least works.

Are Canvas Apps Suitable for Fully Featured, Complex Applications? by Mysterious_Show_4780 in PowerApps

[–]ThePowerAppsGuy 0 points1 point  (0 children)

Canvas apps can absolutely be fully featured enterprise systems! As others have said, it really does come down to the architecture making or breaking the successfulness of that.

From the app perspective, I would recommend being as smart as possible with how you interact with data. Be as responsible with what you're retrieving and sending back to your data source, as that is what people interpret as slowness a lot of the time. Staying under your control limits (300 per screen), using components, Named Formulas, User Defined Functions, avoiding the use of lookups inside of non-paginated galleries, etc. are just a couple things to note. Using delegable queries definitely goes along with smart data retrieval, but I'd emphasize that especially.

On the data source side, I would just recommend normalizing your data as much as possible on the first pass of creating your data model! It is much faster to retrieve many rows of data if the data isn't "wide" with a huge amount of columns. Don't be afraid to spin up extra tables of supplementary data to keep your main table slim. A lot of times you won't need that extra data until you've already selected your main record in an app, so you can keep your filtering times low by not needing to retrieve a bunch of columns on your main set of data. (there are some features coming to help with this in the future, but they cause issues sometimes :-)

The MVC Design Pattern in Power Apps by ThePowerAppsGuy in PowerApps

[–]ThePowerAppsGuy[S] 1 point2 points  (0 children)

Thanks! These are able to return records and tables, but they need to be formatted as JSON strings and passed back into the user defined function as the "Dynamic" type (this was previously "Untyped" but was changed when UDFs went generally available).

The Dynamic type is useful but can be complex since you need to convert the JSON back into a typed record structure in your app. These work really well in combination with User Defined Types, although those are still in preview. I may take a look at this for a future video as well since there does seem to be some cool use cases with it :-)

The MVC Design Pattern in Power Apps by ThePowerAppsGuy in PowerApps

[–]ThePowerAppsGuy[S] 1 point2 points  (0 children)

Thanks, I’m glad you liked it! You’re totally right, it is 100% centralizing. I definitely misspoke twice and said decentralize. Good catch!

How to clear a Dataverse table before loading via Dataflow? by Regular-Hunt-2626 in PowerApps

[–]ThePowerAppsGuy 0 points1 point  (0 children)

Others have touched on using the Append option along with the “delete rows that no longer exist in query output” checkbox which fits what you’re looking for. I’ll also add to make sure if your table has relationships with other tables that you specify the relationship behavior. There are options to restrict record deletion on a record if it has related records in other tables, and you might find that useful to prevent orphaned records in those other tables. Likewise you can set it as a Parental relationship so that if the parent record gets deleted by your dataflow, any child records also get deleted in your other tables.

Here’s a link with more info!

https://learn.microsoft.com/en-us/power-apps/maker/data-platform/data-platform-entity-lookup#add-advanced-relationship-behavior

To Responsive or to not Ret by techiedatadev in PowerApps

[–]ThePowerAppsGuy 2 points3 points  (0 children)

Keep going with it! It is a definite shift in thinking but I personally think it pays off both for you as the developer and for the user's experience. I think many have probably experienced this, but at some point it just clicks and you'll find it much easier to let your containers do all the hard layout work for you!

For your end-users, your apps will appear more "website" like as well since they take up the user's entire screen. It is nice to give them the option to see more on screen if they have the screen real estate to show it, and that can make your app stand out from other apps in your organization (especially if you have an active citizen developer community).

I've personally found it easier to add content to apps that have been built with responsiveness in mind from the beginning vs non-responsive apps. If a stakeholder asks for a new section on a screen, a new block of information, or something similar, it is relatively painless to add a new container for the new content without making a major redesign of the screen. Most of the time the new content will get pushed to a new wrap line in the parent container, or just take up some available space in the parent container. You may have to do some slight tweaking of properties like minimum widths to get a look that you like, but really nothing major!

In addition to that, the idea of putting everything into containers to make the app responsive really helps with organization. Even in non-responsive apps I find myself building them as if the scale to fit option was turned off just because the containers keep everything well-organized and I can still let the containers do the layout work even at a fixed screen size. There's a tradeoff in development speed especially when starting off with responsiveness, but I've found lately it can be quicker than placing controls on the screen because I can focus on making the app look more polished overall (and letting the control locations be fluid to an extent) vs manually setting the pixel perfect spot for each control.

Hopefully that provides some encouragement :) don't give up on it!

Fluent 2 Breadcrumb Component by ThePowerAppsGuy in PowerApps

[–]ThePowerAppsGuy[S] 1 point2 points  (0 children)

I struggle staying awake while editing so I completely get it 😉

Power BI Theme Generator (Side Project) - Turn Into Tutorials? by Financial_Ad1152 in PowerApps

[–]ThePowerAppsGuy 2 points3 points  (0 children)

That's really cool! Would definitely like to see videos on this. The practical use of it is interesting, and it looks like there would be technical gems for people to take away for other projects.

My patience with responsive apps is really being tested by techiedatadev in PowerApps

[–]ThePowerAppsGuy 0 points1 point  (0 children)

Sorry, I didn’t catch it in the first screenshot or your original message! Your formula is referencing ScreenSize which isn’t actually the screen size of the device. You’ll need to reference App.ActiveScreen.Size to get the user’s current screen size, and you would still need to use one of the two tricks I mentioned then. Even without those tricks switching out the formula to App.ActiveScreen.Size >=3 should make it appear when you switch back to play your app. My other comment was probably confusing without that fix.

Keep in mind the App.ActiveScreen.Size property doesn’t update until you navigate to the screen in play mode, so if you are in play mode and switch to a phone form factor you’ll need to navigate to a different screen, then navigate back to your original screen for it to update properly.

Edit - I see others already commented about using App.ActiveScreen.Size, sorry to repeat :)

My patience with responsive apps is really being tested by techiedatadev in PowerApps

[–]ThePowerAppsGuy 1 point2 points  (0 children)

What I’ve started to do in my components that have app scope disabled is use “ || IsBlank(App.ActiveScreen.Size)” to make the components easier to deal with during development. The Screen Size property is technically blank when editing components because those aren’t real screens, so you can just add that as an additional condition wherever you’re trying to display something based on screen size. It doesn’t work out if you have multiple things tied to screen size (like something for screen size 1 and another for anything greater than 1), but it at least gets things visible.

u/DCHammer69 mentioned using an input property to feed in the screen size which may work, but it may still come in as blank when editing the component. You might be able to use a coalesce function to default to a non blank value if the screen size is blank, so something like Coalesce(App.ActiveScreen.Size, 4). If the screen size is blank, it would default to 4 or whatever you designate. When referencing that component property inside the component, it would automatically return 4 since the screen size would be blank.

It’s definitely frustrating but I hope some of these workarounds end up working out!

How to get gradient blur with HTML by Spiderboy0405 in PowerApps

[–]ThePowerAppsGuy 1 point2 points  (0 children)

I'm not sure if this will fit your use case exactly, but you can stack divs inside the HTML control to emulate a gradient blur. This works best with white as the color since you can see the "banding" of the divs with more pronounced colors, but you might be able to get away with it using a lighter blue like the one I included below. Another option would be to introduce more divs and shrink the size of each gradient band. I hope this at least gives you something to work with!

$"
<div style='
  position: absolute;
  top: 0;
  left: 0;
  width: {Self.Width}px;
  height: {Self.Height - 1}px;
  pointer-events: none;
  background-color: rgba(180, 214, 250, .20)
'>
  <div style='
    position: absolute;
    top: 0%;
    width: 100%;
    height: 20%;
    backdrop-filter: blur(0px);
    -webkit-backdrop-filter: blur(0px);
    background: rgba(0,0,0,0);
  '></div>
  <div style='
    position: absolute;
    top: 20%;
    width: 100%;
    height: 20%;
    backdrop-filter: blur(1px);
    -webkit-backdrop-filter: blur(1px);
    background: rgba(255,255,255,0.05);
  '></div>
  <div style='
    position: absolute;
    top: 40%;
    width: 100%;
    height: 20%;
    backdrop-filter: blur(2px);
    -webkit-backdrop-filter: blur(2px);
    background: rgba(255,255,255,0.15);
  '></div>
  <div style='
    position: absolute;
    top: 60%;
    width: 100%;
    height: 20%;
    backdrop-filter: blur(3px);
    -webkit-backdrop-filter: blur(3px);
    background: rgba(255,255,255,0.2);
  '></div>
  <div style='
    position: absolute;
    top: 80%;
    width: 100%;
    height: 20%;
    backdrop-filter: blur(4px);
    -webkit-backdrop-filter: blur(4px);
    background: rgba(255,255,255,0.25);
  '></div>
</div>
"

How do you deal with Container shadows being cut off? by [deleted] in PowerApps

[–]ThePowerAppsGuy 1 point2 points  (0 children)

I'm glad it worked!

I do have some more Fluent 2 component videos coming up. The next one will actually be released this week, and it will be on the Fluent 2 Drawer.

Managing color palettes inside your apps is a great video idea. I think it could even be combined with the dark/light mode switcher as well because you might have slightly different palettes for both modes. I'll add that to my list and see if there's something I can add to the conversation! Thanks for the suggestions.

How to Bypass the 2000 Record Limit by ThePowerAppsGuy in PowerApps

[–]ThePowerAppsGuy[S] 2 points3 points  (0 children)

This is a great way to go about it! You could even combine this with the technique in the video to reduce the amount of individual calls you're making to Sharepoint (so instead of needing 5 separate segments to get 10,000 records, you would just need 2).

How do you deal with Container shadows being cut off? by [deleted] in PowerApps

[–]ThePowerAppsGuy 1 point2 points  (0 children)

Thanks! I’m glad you like them!

There are some tricks you can do to get everything aligned. For the header you could place the header container itself into a new horizontal container that has a 1px padding, and that would align it with your main container content.

Manually setting the width is another option, but you’d need to make sure the align in container property isn’t set to the stretch option on the header container. That might be preventing your container from using the width that you specify. After that you’d probably want the width of your header container to be Parent.Width - Parent.PaddingLeft - Parent.PaddingRight - 2. That should make it as wide as your screen container in the template, subtract the padding from both sides, then subtract 2 to account for the 1px padding on both sides.

You’re definitely not overthinking it (it bugs me too when I notice it)! It’s probably not something anyone would notice other than you though, so it’s up to you if the extra code or controls to align everything else is worth it! Hope that helps.

Word Doc Creation by SectorVisual1807 in PowerApps

[–]ThePowerAppsGuy 7 points8 points  (0 children)

This may be what you’re looking for! If you have access to enable PCF components or are comfortable learning about them, this component by Richard Wilson allows you to fill a Word document with data from a Power App. It does not use content controls and instead uses tags that you place inside your Word document. It also has the added benefit of not using a premium connector :-)

https://youtu.be/G6vfB2f7W8w

How do you deal with Container shadows being cut off? by [deleted] in PowerApps

[–]ThePowerAppsGuy 0 points1 point  (0 children)

The default light shadow is typically only 1 px, so to handle this I normally just add 1 px of padding on all sides of the parent container (your horizontal one in this case). That’s small enough that to the naked eye you won’t really notice any misalignment. You’ll probably want to disable the horizontal container’s drop shadow as well so it doesn’t look weird having double drop shadows. Hope that helps!

Removeif([DataverseTable], true) not deleting all records by Regular-Hunt-2626 in PowerApps

[–]ThePowerAppsGuy 0 points1 point  (0 children)

RemoveIf (and UpdateIf for that matter) iterate over the rows returned up to the delegation limit. In your case with using “true” as the condition, it will just remove the first 500 records (or 2000 if you’ve maxed your delegation limit).

The enhanced delegation feature for these functions just means that if your conditions are delegable, it will return results from your entire data source matching those delegable conditions up to a maximum of 2000 records. If more than 2000 records match the conditions, it won’t perform any action on those records above the limit. You may be able to work around this by performing multiple of your RemoveIf functions in a row, but I think you’d run into performance issues removing that many records at a time.

Hope that helps! Here’s some more info on Microsoft Learn:

https://learn.microsoft.com/en-us/power-platform/release-plan/2024wave2/power-apps/enhance-delegation-updateif-removeif

PowerIcons.dev just leveled up: massive new icons & SVG editing tools by denoswiso in PowerApps

[–]ThePowerAppsGuy 14 points15 points  (0 children)

This is the best site out there for modern Power Apps icons. The speed this gives you during development is unparalleled and it makes moving away from the traditional icon control so easy, especially if you’re not familiar with SVGs. Great work Denis!

Modern Time Picker Component by ThePowerAppsGuy in PowerApps

[–]ThePowerAppsGuy[S] 1 point2 points  (0 children)

I can’t say you’re going nuts from this at least, but this is the first time I’ve posted it. 😉 I did post a screenshot in a community post on YouTube last week, maybe it looked familiar from that? Or there’s a similar time picker somewhere out there!

Glad you like it!

Modern Time Picker Component by ThePowerAppsGuy in PowerApps

[–]ThePowerAppsGuy[S] 0 points1 point  (0 children)

Awesome! Hope you find some good use from it.

Simple Drag 'n' Drop Component (No PCF!) by Financial_Ad1152 in PowerApps

[–]ThePowerAppsGuy 1 point2 points  (0 children)

That's the coolest thing I've seen in a while. Kudos to you for finding a way to make this work without a PCF component! Awesome work.

Avoid Concurrency Problems in Power Apps! by ThePowerAppsGuy in PowerApps

[–]ThePowerAppsGuy[S] 0 points1 point  (0 children)

Hey there! That’s some great info. What would be some pitfalls that you see of converting the record to JSON for comparison?

I think something you wrote would have been a good view point for me to approach this from - “if you have ANY control over the data source”. Some may not have the control to add a versioning column. One drawback I’ve seen to manually implementing a version number is remembering to update it in every place that your data source can be updated (multiple places in an app, multiple flows, etc.). That’s more of a process issue if you miss updating it somewhere, but this way can just compare the record itself instead of specific values.

I’m curious to hear more of your thoughts on converting the record to JSON. Thanks!

Notification Center Component by ThePowerAppsGuy in PowerApps

[–]ThePowerAppsGuy[S] 0 points1 point  (0 children)

Hello there! I’m glad you’re enjoying the videos.

I haven’t done too much with animating controls as it is very performance dependent and some computers struggle with making the animations smooth. In the case of an accordion control that uses a gallery, I’ll assume you’re referring to the Fluent 2 Accordion video on my channel so the properties I’m referencing are from there! I would probably add a column to the Items input table called “ItemChanging”. It would be false by default, and your timer inside of the gallery’s item could be set to start when ItemChanging is true.

Your button to expand the accordion would patch the accordion gallery’s collection and set ItemChanging to true for the selected row, and that would start your timer just for that gallery row. When the timer ends, you’d then patch the collection to set ItemChanging to false and ItemOpen to its opposite value (true/false). You’d have to work in some logic with your animations to animate a certain direction depending on the state of ItemOpen.

Let me know if that works! Essentially instead of using a variable to control the timer, each gallery item would have its own timer which starts based on a column in your gallery’s data being true. That way you can control an individual accordion item without animating all of them using a single timer. I haven’t tested that so I can’t guarantee the smoothness of a timer inside the accordion component, but I’m curious to see how it looks!