Idea Details

Generating an automated meeting invitation on Outlook Calendar|アウトルックスケジュール自動生成方法

Last activity 11-03-2020 00:35
Takashi Satoh's profile image
06-01-2020 22:03

日本語後述 ☺
Need your idea and insight to generate meeting invitations for specific group or person.  There is no need to check available time slot, just sending invitations at certain time slots.
I believe it can be done by comprehensive windows spy mode, but Is there any VBO or ready solution available?
--------------------------------
Blue Prism から所定のユーザーあるいはグループに対してミーティング招集を行う簡便な方法があるでしょうか?受信者側の空き状況を勘案する必要はなく、所定の時間で一方的に送り付けるだけで構いません。
アウトルック自体を Windows アプリケーションとしてスパイして実行させれば可能かとは思いますが、Mail のような VBO で処理できないかな、という意図です。


Comments

08-06-2020 10:13

Try
            If System.IO.File.Exists(ICSFileFullPath) Then
                Throw New System.Exception("ICS file already exists in given path: " & ICSFileFullPath)
            End If

            Dim SBuilder2 As New System.Text.StringBuilder()
            SBuilder2.AppendLine("BEGIN:VCALENDAR")
            SBuilder2.AppendLine("PRODID:-//Microsoft Corporation//Outlook 16.0 MIMEDIR//EN")
            SBuilder2.AppendLine("VERSION:2.0")
            SBuilder2.AppendLine("METHOD:PUBLISH")
            SBuilder2.AppendLine("X-MS-OLK-FORCEINSPECTOROPEN:TRUE")
            ''Timezone Details
            SBuilder2.AppendLine("BEGIN:VTIMEZONE")
            Dim TZID As String
            If TimeZone = "EST" Then
                TZID = "Eastern Standard Time"
                SBuilder2.AppendLine("TZID:Eastern Standard Time")
                SBuilder2.AppendLine("BEGIN:STANDARD")
                SBuilder2.AppendLine("DTSTART:16011104T020000")
                SBuilder2.AppendLine("RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11")
                SBuilder2.AppendLine("TZOFFSETFROM:-0400")
                SBuilder2.AppendLine("TZOFFSETTO:-0500")
                SBuilder2.AppendLine("END:STANDARD")
                SBuilder2.AppendLine("BEGIN:DAYLIGHT")
                SBuilder2.AppendLine("DTSTART:16010311T020000")
                SBuilder2.AppendLine("RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3")
                SBuilder2.AppendLine("TZOFFSETFROM:-0500")
                SBuilder2.AppendLine("TZOFFSETTO:-0400")
            ElseIf TimeZone = "MT" Then
                TZID = "Mountain Standard Time"
                SBuilder2.AppendLine("TZID:Mountain Standard Time")
                SBuilder2.AppendLine("BEGIN:STANDARD")
                SBuilder2.AppendLine("DTSTART:16011104T020000")
                SBuilder2.AppendLine("RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11")
                SBuilder2.AppendLine("TZOFFSETFROM:-0600")
                SBuilder2.AppendLine("TZOFFSETTO:-0700")
                SBuilder2.AppendLine("END:STANDARD")
                SBuilder2.AppendLine("BEGIN:DAYLIGHT")
                SBuilder2.AppendLine("DTSTART:16010311T020000")
                SBuilder2.AppendLine("RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3")
                SBuilder2.AppendLine("TZOFFSETFROM:-0700")
                SBuilder2.AppendLine("TZOFFSETTO:-0600")
            ElseIf TimeZone = "AT" Then
                TZID = "Atlantic Standard Time"
                SBuilder2.AppendLine("TZID:Atlantic Standard Time")
                SBuilder2.AppendLine("BEGIN:STANDARD")
                SBuilder2.AppendLine("DTSTART:16011104T020000")
                SBuilder2.AppendLine("RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11")
                SBuilder2.AppendLine("TZOFFSETFROM:-0300")
                SBuilder2.AppendLine("TZOFFSETTO:-0400")
                SBuilder2.AppendLine("END:STANDARD")
                SBuilder2.AppendLine("BEGIN:DAYLIGHT")
                SBuilder2.AppendLine("DTSTART:16010311T020000")
                SBuilder2.AppendLine("RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3")
                SBuilder2.AppendLine("TZOFFSETFROM:-0400")
                SBuilder2.AppendLine("TZOFFSETTO:-0300")
			ElseIf TimeZone = "PT" Then
                TZID = "Pacific Standard Time"
                SBuilder2.AppendLine("TZID:Pacific Standard Time")
                SBuilder2.AppendLine("BEGIN:STANDARD")
                SBuilder2.AppendLine("DTSTART:16011104T020000")
                SBuilder2.AppendLine("RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11")
                SBuilder2.AppendLine("TZOFFSETFROM:-0700")
                SBuilder2.AppendLine("TZOFFSETTO:-0800")
                SBuilder2.AppendLine("END:STANDARD")
                SBuilder2.AppendLine("BEGIN:DAYLIGHT")
                SBuilder2.AppendLine("DTSTART:16010311T020000")
                SBuilder2.AppendLine("RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3")
                SBuilder2.AppendLine("TZOFFSETFROM:-0800")
                SBuilder2.AppendLine("TZOFFSETTO:-0700")
			ElseIf TimeZone = "CT" Then
                TZID = "Central Standard Time"
                SBuilder2.AppendLine("TZID:Central Standard Time")
                SBuilder2.AppendLine("BEGIN:STANDARD")
                SBuilder2.AppendLine("DTSTART:16011104T020000")
                SBuilder2.AppendLine("RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11")
                SBuilder2.AppendLine("TZOFFSETFROM:-0500")
                SBuilder2.AppendLine("TZOFFSETTO:-0600")
                SBuilder2.AppendLine("END:STANDARD")
                SBuilder2.AppendLine("BEGIN:DAYLIGHT")
                SBuilder2.AppendLine("DTSTART:16010311T020000")
                SBuilder2.AppendLine("RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3")
                SBuilder2.AppendLine("TZOFFSETFROM:-0600")
                SBuilder2.AppendLine("TZOFFSETTO:-0500")
            Else
                Throw New System.Exception("Unsupproted Timezone")
            End If
            SBuilder2.AppendLine("END:DAYLIGHT")
            SBuilder2.AppendLine("END:VTIMEZONE")
            ''End of Timezone logic
            ''Begin Event
            SBuilder2.AppendLine("BEGIN:VEVENT")
            For Each DR As Object In EmailList.Rows
                SBuilder2.AppendLine(String.Format("ATTENDEE;RSVP=TRUE:mailto:{0}", DR("EmailId")))
            Next

            Dim utcDateTime As DateTime = DateTime.UtcNow
            SBuilder2.AppendLine("CLASS:PUBLIC")
            SBuilder2.AppendLine(String.Format("CREATED:{0:yyyyMMddTHHmmssZ}", utcDateTime))
            SBuilder2.AppendLine(String.Format("DESCRIPTION:{0}", Description))
            SBuilder2.AppendLine("DTEND;TZID=" & Chr(34) & TZID & Chr(34) & ":" & String.Format("{0:yyyyMMddTHHmmss}", endtime))
            SBuilder2.AppendLine(String.Format("DTSTAMP:{0:yyyyMMddTHHmmssZ}", utcDateTime))
            SBuilder2.AppendLine("DTSTART;TZID=" & Chr(34) & TZID & Chr(34) & ":" & String.Format("{0:yyyyMMddTHHmmss}", starttime))
            SBuilder2.AppendLine(String.Format("LAST-MODIFIED:{0:yyyyMMddTHHmmssZ}", utcDateTime))
            SBuilder2.AppendLine(String.Format("ORGANIZER;mailto:{0}", OrganizerMail))
            SBuilder2.AppendLine("PRIORITY:5")
            SBuilder2.AppendLine("SEQUENCE:0")
            SBuilder2.AppendLine(String.Format("SUMMARY;LANGUAGE=en-us:{0}", Subject))
            SBuilder2.AppendLine("TRANSP:OPAQUE")
            SBuilder2.AppendLine(String.Format("X-ALT-DESC;FMTTYPE=text/html:{0}", HtmlBody))
            SBuilder2.AppendLine("X-MICROSOFT-CDO-BUSYSTATUS:BUSY")
            SBuilder2.AppendLine("X-MICROSOFT-CDO-IMPORTANCE:1")
            SBuilder2.AppendLine("X-MICROSOFT-DISALLOW-COUNTER:FALSE")
            SBuilder2.AppendLine("X-MS-OLK-AUTOFILLLOCATION:TRUE")
            SBuilder2.AppendLine("X-MS-OLK-CONFTYPE:0")
            SBuilder2.AppendLine("BEGIN:VALARM")
            SBuilder2.AppendLine("TRIGGER:-PT15M")
            SBuilder2.AppendLine("ACTION:DISPLAY")
            SBuilder2.AppendLine("DESCRIPTION:Reminder")
            SBuilder2.AppendLine("END:VALARM")
            SBuilder2.AppendLine("END:VEVENT")
            SBuilder2.AppendLine("END:VCALENDAR")

            Using sw As New System.IO.StreamWriter(System.IO.File.Open(ICSFileFullPath, System.IO.FileMode.OpenOrCreate))
                sw.WriteLine(SBuilder2.ToString())
            End Using
            Success = True

        Catch
            ErrorMsg = Err.Description
            Success = False

End Try

Please find the VB.NET code for creating the file attachment above. Below is object action snippet

This has logic to support the Canadian Time zones. You can change this part of code according to your requirement.

08-06-2020 09:37

Hi Faiyaz,
Sorry for delayed response, Please find the details in the following links for generating the ics file through code stage in blue prism.

https://www.webdavsystem.com/server/creating_caldav_carddav/calendar_ics_file_structure/

https://www.codeproject.com/Questions/827812/sending-ICS-files-as-an-attachment-using-Csharp

07-26-2020 08:34

Hi Naresh,

Good Day!
Hope you are doing well 

Thanks your for the comments and if I May, Can I ask for the the Code which you have created for this .ics text file. It would so much helpful if you share. 

Thanks in Advance

06-05-2020 09:28

Hi Satoh,
ICS file will be sent as an attachment to meeting participants.  When the participant open the ics file attachment, it will be opened in outlook meeting window.

06-04-2020 22:46

Hi Naresh-san

Thank you for your feedback and I will ask my developer to make it happen.
Can I assume that BluePrism will send email to the participants with ICS attachment, or send comprehensive ​outlook meeting invitation directly?

06-04-2020 09:50

Hi Satoh,
I had the similar requirement to create the invites and sent to the meeting participants. I used the ICS (.ics) file concept to achieve it in outlook. ICS file is text file with all the required details of the meeting. Outlook application can understands the .ics file and opens it in outlook meeting window. I had created custom vbo with code stage in C# to create the .ics text file. But it would be better if there is an out of box solution in existing outlook VBO from Blue prism.

Ideas Portal

• If you like this idea – vote! Ideas with a higher score are more likely to be supported by the product review teams.
• Discussion is healthy! If you have a question or comment, don’t be afraid to jump in and start a discussion in the comments section below.
• Community collaboration is key!
New
This idea is new to the community and hasn’t been reviewed yet. While in the New stage, an idea is open for voting and comments to further the discussion around this idea.
Duplicate
This idea already exists! A change to the Duplicate status will always include a comment linking to the existing idea, so all voting and feedback can be collected in one place.
Need More Info
We’ve reviewed this idea, and determined we need a bit more info before deciding on how to move forward. An update to the Need More Info status will always be accompanied by a comment explaining which additional details are needed. Ideas are still open for voting and comments while in the Need More Info stage.
Under Consideration
We have all the info we need and are currently considering the feasibility of implementing this idea. Ideas in the Under Consideration status are still open to community voting and discussion.
Not Planned
We’ve reviewed this idea, and determined that it’s not feasible to implement right now. Ideas in the Not Planned status are no longer open for voting.
Coming Soon!
We’ve reviewed this idea and have determined that it will be delivered in the near future. Ideas in the Coming Soon! status are not attached to a binding timeline, but there is a concrete plan to implement this idea. Therefore we will have status does not allow for voting.
Delivered
Congrats! Your idea has been accepted by the team and is now in production! Give yourself a pat on the back – you contributed to the improvement of one of Blue Prism’s products or services!