Hi,
I have this code in a picture control:
Office365Users.UserPhoto(Office365Users.MyProfile().Id)
But, if an user does not have an image, the following error is returned:
The service returned an error: Office365Users!UserPhoto: The server returned an 404 error (NotFound).
Is there any way to validate if an user has an image before calling the respective method?
Thanks,
Rui Barbosa
Solved! Go to Solution.
I expect this error has got something to do with your connections.
As this formula uses O365 users, you need a valid (and authenticated) connection "Office 365 Users".
In some cases your credentials expire. Have you verified this?
There are multiple options that make Images appear i am finding the issue is just errors on using the app for photos even though they are showing .
I have used if no photo then sample image but still errors persist
If(Office365Users.UserPhotoMetadata(ThisItem.RecipientEmail).HasPhoto=false,SampleImage,
Office365Users.UserPhoto(ThisItem.RecipientEmail))
If anyone has managed to stop these errors from showing , would be so greatful for the trick.
Again this isn't effecting the functionality , more so the user experience.
Thanks in advance
I checked my formula for setting the Image property, and mine is slightly different:
If(!IsBlank(ThisItem.UserPrincipalName),
If(Office365Users.UserPhotoMetadata(ThisItem.UserPrincipalName).HasPhoto=false,SampleImage,Office365Users.UserPhoto(ThisItem.UserPrincipalName)))
So try using an extra If-statement to validate it's not blank and use the UserPrincipalName property from ThisItem.
Hope this helps
Yea have tried that also, is quite odd that it works but can bring an error on running the app that can be x'd and the app works fine.
I can use any photo formula in a few areas and works fine no errors however using it for a different part of the app brings errors.
I will use it where i can for now and just use sample image for the other areas as the red error that comes up is just a bad user experience.
Not sure if there is a way to get rid of certain errors showing that would be great, because functionality wise it's all fine .
I'm facing exactly the same error you mentioned. Did you find any solution ?
If you're having trouble with this in a gallery, try ClearCollecting the Office365Users.SearchUser results into a collection, and then only searching for the user photo in the gallery if the collection is not empty.
For example, collect the results first (either in OnVisible or OnChange or OnSelect, depending on your scenario)
ClearCollect(UserSearchResults, Office365Users.SearchUser({searchText: <searchTextInput> }) )
Then set the Items property of the gallery control to UserSearchResults
Then in the Image property of the Image control in the gallery would only check for an Image if the collection UserSearchResults is not empty
If(!IsBlank(UserSearchResults),If(Office365Users.UserPhotoMetaDate(ThisItem.Id).HasPhoto=true, Office365Users.UserPhoto(ThisItem.Id) ))
I'm allowed to use e-mail as a parameter to UserPhotoMetaData, but regardless I still get the error message because this basic function fails for some users (those without photos). I still need a working solution to stop the red banner from displaying across the top of my app!
I think I figured it out! try this code!
If(Office365Users.UserPhotoMetadata(Office365Users.MyProfile().Id).HasPhoto=false,SampleImage,Office365Users.UserPhoto(Office365Users.MyProfile().Id))
Hi All,
It's never too late.
I think I found how to walk-around "red-banner-problem" and why adding "not IsBlank(ThisItem.UserPrincipalName)" into the IF statement solves the problem.
This code will cause "red-banner":
If(Office365Users.UserPhotoMetadata(ThisItem.UserPrincipalName).HasPhoto,
Office365Users.UserPhoto(ThisItem.UserPrincipalName),
'profilepic-generic-user')
This code will not:
If(not IsBlank(ThisItem.UserPrincipalName), If(Office365Users.UserPhotoMetadata(ThisItem.UserPrincipalName).HasPhoto, Office365Users.UserPhoto(ThisItem.UserPrincipalName), 'profilepic-generic-user'), 'profilepic-generic-user')
Why?
IMHO, everything is explained by the syntacsis of the IF and how "engine" (or what's under the hood) resolves it.
If( Condition1, ThenResult1 [, Condition2, ThenResult2, ... [ , DefaultResult ] ] )
When the "engine" starts evaluating IF statement, it calculates ALL "Condition" statements, then the "Result" statement of the first TRUE "Condition" statement.
That means, when you put "Office365Users.UserPhotoMetadata(...).HasPhoto" into the "Condition" statement - it will be always calculated no metter what condition statement it is, first, second, tenth - and it will show red banner. The first example illustrates it.
When you put ".HasPhoto" into the "Result" statement, it will be calculated ONLY WHEN preceding "Condition" statement produces the TRUE value. Secong example is exactly about it.
So, be carefull using IF statement - it does matter where you put your code in question - into the "Condition" or "Result" statement.
Thank you.
thanks, this help me solved one thing. how to know whether a user has or not a photo.