Microsoft PowerApps | How to get calendar events from o365 connection? - outlook

I'm currently testing some stuff with Microsoft PowerApps. My aim is to create an app, which shows the calendar events of my office 365 account. I've applied the connection to office 365, and was able to get emails. But I don't know how to get the events, because nothing is documented. In the PowerAppStudio environment I can see that functions such as Office365.CalendarGetItem(... are available but the syntax is unclear. Please, can someone explain to me how to use it correctly.

My experience as follows;
You need to use
Office365Outlook.CalendarGetTables()
to get the Calendar object.Names and
Office365Outlook.CalendarGetItems()
To get the Calendar items for that object.
To demonstrate:
Add your Office365 outlook connector
Create a dropdown and take note of the name, or give it a new name
Set the Items value of the dropdown to Office365.CalendarGetTables().value
This gives you a your reference to get calendar items from - which you can now do with a gallery;
Add a gallery (I just pick a layout template I like and reconfigure)
Set the Items value of the gallery to Office365.CalendarGetItems(YourDropDownName.Selected.Name).value
where YourDropDownName is the name of the dropdown you created.
It will, by default, list from today's meetings onwards.
There are some filter options with CalendarGetItems, the syntax is as follows;
Office365Outlook.CalendarGetItems (string table, [advanced][Optional]string $filter, [advanced][Optional]string $orderby, [advanced][Optional]integer $skip, [advanced][Optional]integer $top)
I use this great reference as well PowerApps reference

You need to select a calendar where the items will be read.
Office365.CalendarGetItems(name of your calendar).value

Add the Office 365 connector as a connection
Create blank form
Add a listbox
Set ListBox>Items = Office365.CalendarGetTables().value.DisplayName
Add a gallery
Change gallery style to be Title and subtitle on Data tab
Dry gallery>Items = Office365.CalendarGetTables().value
You can now see your calendars and their names.
I'm going to futz around further with this...

In the "My experience" answer, I had to change "Office365." to "Office365Outlook.". I suspect content errors as the example of advanced options used "Office365Outlook.CalendarGetItems".
So
Office365.CalendarGetTables().value
Office365.CalendarGetItems(YourDropDownName.Selected.Name).value
became
Office365Outlook.CalendarGetTables().value
Office365Outlook.CalendarGetItems(YourDropDownName.Selected.Name).value
My Power Apps data source was "Office365Outlook" and my own email account at https://outlook.office.com/mail/inbox .
These worked for me.

Related

How to click a button in email to save a file Power Automate

I receive monthly around 200 e-mail like the image in attach, and would like to use power automate to:
Receive an e-mail from a specific sender;
The subject contains specific words "ex: invoice";
Click in a button (link);
Save the file from that link inside a sharepoint file:
If possible I would like to save file name as a part of the e-mail subject for example the bold part (XXX Invoice - R1234/12AA2226-10-22 - )
I tried some flows without success.
Appreciate if someone can help me :)
I tried some flows in the internet but without success
You won't need to click a button. You can trigger a power flow with 'When an email is received' then add a condition - has attachment and subject or body contains = 'invoice'. Use then add step Get Attachments.
Here's a similar flow - but add a condition after step 2 to filter only these types of emails.

Some kind of Dashboard in FullCalendar

yeah what more to describe
I have no clue how to do that. Setup fullcalendar, fetsch data and enter data works fine.
The last thing I needit is a Dashboard under the Calendar witch get the selected week that visible in the Calendar (would be great when act also with the prev and next Arrow Buttons form the Calendar), and get the summary Events from selected Week witch holds already the durration of the single Events.
Do you know what a mean? and shy asking would you be ma hero?
Maby i found the Solution
main.js
weekNumberClassNames: function(view, element){ $('#card-title').html(calWeek); }
Let the magic happen by every view change, it also the WeekNumber change
A big part is solved.

Xamarin.Forms Accessibilty VoiceReader

Quick question.
When it comes to Xamarin Forms, I noticed that if there is an alert called from the ViewModel
e.g:
DisplayAlertAsync("Title","Message", "Ok");
That the voice assistant only auto reads the first parameter of DisplayAlertAsync ("title") and does not auto-advance to the following parameters.
So, a temporary solution I did was concatenate the 1st and 2nd parameters into the 2nd parameter, so that VoiceReader auto reads both the title and message for accessibility users.
e.g:
DisplayAlertAsync("" ,"Title"+ "\n"+ Message", "Ok");
Is there a way to keep the traditional DisplayAlertAsync("Title","Message", "Ok"); parameter assignment, and have VoiceReader auto advance to the following parameters?
What you are looking at is expected behavior. Since Xamarin Forms uses Native APIs, so the alert dialog in the native platforms also does the same thing- Whenever you open a new page/alert, it should read the Title of that view.
For the most part, what you want to keep an eye out for is images & icons, you have to override the description of those items.
Q. Is there a way to keep the traditional DisplayAlertAsync("Title","Message", "Ok"); parameter assignment, and have VoiceOver/TalkBack auto advance to the following parameters?
A. No there isn't, you would have to create your own custom renderer if you want the reader to read everything.

Handle Appointment drag'n'drop, subject change on calendar, and change through ICS file in Outlook

I'm developing an Outlook AddIn using the NetOffice library, but I guess the problem is similar for VSTO.
I want to handle following events in Outlook regarding appointments:
The user drag'n'drops appointments to change the date of the appoinment
The user double clicks the appointment subject and edits it directly on the calendar
The user gets an ICS file by email which updates some data on the appointment
So that's pretty easy:
var exp = App.Session.GetDefaultFolder(OlDefaultFolders.olFolderCalendar);
(exp.Items as Items).ItemChangeEvent += Addin_ItemChangeEvent;
So now on each case I need, my event handler fires up. However the problem is, that I need to recognize, if the change on the appointment is because of user action on the calendar or an ICS file received.
I really stuck on that one, any tips?
You can use marks for that. I try to explain my solution. In each outlook item (it can be AppointmentItem and MailItem) you have a property UserProperties, you can create mark variable like a string public const string ICSMark = "ICSMark"and add new user property with this mark appointmentItem.UserProperties.Add(ICSMark, OlUserPropertyType.olText);. When you event is occurs you can check your item for this mark UserProperty mark = appointmentItem.UserProperties.Find(ICSMark);, if mark is not null, it was updated from ICS file.

"Read" Event for Mailitem in Outlook 2007 VSTO VB.NET

Okay, this is a bit of a tricky one...
I am programming an add-in for MS Outlook 2007, using VS 2010 and VSTO, and VB.NET. My goal is to prompt the user to print off emails that they receive from certain email addresses. (This would be done with a simple MsgBox.)
Specifically, I would like the prompt the user when they are done reading the email. My concept is that it should work similarly to the "Read Receipt" functionality in Outlook. (You know, those annoying things..."The sender has requested a receipt that you have read this email blah blah")
So, the user reads the email, and then when they go to close the Inspector (or change focus to a different item if they are in Explorer view) the MsgBox pops up. I have noticed that the timing on this matches when the email becomes "read".
I have been chasing this across Google and MSDN and tutorial websites for a few days, here's what I've found:
Round 1:
The Mailitem object has an UnRead property, and it also has a PropertyChange event. I can use AddHandler for PropertyChange on every Mailitem in the Inbox, tying them into a single Subroutine that checks the argument of the PropertyChange event to make sure it's UnRead. Seems fairly workable, except that PropertyChange doesn't pass the calling object's identity, so I have no way of knowing what email in the Inbox just lost "unread" status.
In fact, none of the Mailitem events seem to pass their identity, probably because someone (MS I guess) assumes that you have a direct pointer to the Mailitem object in the first place. So this route doesn't seem to work.
Round 2:
I can grab all of the Mailitems in the Inbox into a collection, then restrict them to just the Unread ones.
Dim inbox As Outlook.MAPIFolder = Nothing
Dim WithEvents unreadItems As Outlook.Items
inbox = Me.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox)
unreadItems = inbox.Items.Restrict("[Unread]=true")
Since unreadItems was Dimmed WithEvents, I could write a Sub to Handle unreadItems.ItemRemove, which would work fine. But the ItemRemove event has no object argument! Doh!
Round 3:
Let's say I do the opposite: I get the inbox contents and restrict to [Unread]=false, then use the .ItemAdd event. This would work to a degree, except that it would theoretically call whenever an "[Unread]=false" item was dumped into the Inbox by the user from any folder, not just a change from the Unread to Read group within the Inbox. So, unless I'm misunderstanding something here, also not an option.
Round 4:
Now, something I also thought of was simply Dimming the Inbox items collection WithEvents and going off the .ItemChange event, but this event doesn't really specify what changed about the object, so no dice.
In closing, I'm pretty darn stumped with this. I am very close to backing down from my goal. A lame alternative is to alert the user when they receive an email from one of the designated addresses (because I believe the Application.NewMail event won't give me any hassle). But then, I will have to simply alert the user--I won't prompt them to print an email they haven't even read yet.
This alternative is undesirable and I figured that I would present my problem for inspection and suggestion.
-Matt
P.S. I'm coming from making iPad apps with Objective-C, where I'm building most of the object hierarchy myself...it's weird to have to deal with COM objects that have such limitations.
I'm not quite sure how you want your UI to behave, because it's not quite clear when the user is done reading their email. One way to look at it is that they are done when they have looked at it, meaning that the inspector window has shown the mail and the user is switching to another one. To catch that, you would probably be best off watching events from the inspector, not the mail items.
The other way to look at it is that a mail is read whenever it is marked as Read. Be aware that the user may actually turn off the option to mark items as read automatically! This can be done in Tools->Options->Other->Reading pane, like this:
Also, the user may select items and mark them as read manually, so you need to think about what you want do in that case.
If you want to watch for the change in "read" property of the MailItem, you are very close in round 1. The thing you need to add is that you shouldn't tie all of your handlers to a single subroutine in a single object instance. Instead, you can create your own class, something like this (C# code):
class ItemWatcher
{
// The Outlook mailitem to watch for
private Microsoft.Office.Interop.Outlook.MailItem itemBeingWatched = null;
public ItemWatcher(Microsoft.Office.Interop.Outlook.MailItem item, Form1 parentForm)
{
itemBeingWatched = item;
itemBeingWatched.PropertyChange += new Microsoft.Office.Interop.Outlook.ItemEvents_10_PropertyChangeEventHandler(itemBeingWatched_PropertyChange);
}
void itemBeingWatched_PropertyChange(string Name)
{
// Respond to property <Name> in the object itemBeingWatched having changed
}
}
Then you need to create a collection of your ItemWatcher classes and set them to watch your emails.
Note that you will also need to watch for items you need to add/remove from your collection of watched items, when a new mail arrives or an old mail is deleted/moved.

Resources