Saltar a contenido

Integración con Office 365

Office 365

Para poder realizar llamadas a Microsoft Graph, una API REST que permite acceder a los recursos de Microsoft Cloud, es necesario registrar tu aplicación y obtener tokens de autenticación para un usuario o servicio.
Si deseas desarrollar una integración con Office desde la plataforma flexygo, tienes dos opciones:

Desarrollo de la integración

Opción recomendada

Registra tu aplicación usando el Azure portal:
Otro ejemplo.

Además de registrar la aplicación en Azure, asegúrate de habilitar permisos de acceso a Contacts y Calendars.

Indica la URL base de tu aplicación + /Webhooks/OfficeToken.aspx como Redirect URL.
Rellena los campos de configuración de Office con tu client id, tenant id y el secret generado.

Opción obsoleta

(Esta opción fue retirada por Microsoft)

Aprovechar la app flexygo ya registrada en Azure.

Ejemplo de obtención de contactos

En este ejemplo se obtiene una colección de contactos desde la carpeta de contactos por defecto del usuario autenticado.

  1. Obtén y guarda el token necesario: Conseguir token de Office

  2. Recupera los contactos: Conseguir contacto de Office

Text Only
Response:

Insert, Update And Delete contact

Ejemplo de obtención de eventos del calendario

En este ejemplo se recupera una lista de eventos del calendario del usuario autenticado.

  1. Obtén y guarda el token necesario: Conseguir token de Office

  2. Recupera los eventos: Conseguir contacto de Office

Response:

Insertar, actualizar y borrar evento

VB.net
Imports FLEXYGO.Objects
Imports FLEXYGO.Processing.ProcessManager
Imports RestSharp
Imports Newtonsoft.Json

Imports FLEXYGO.Utilities.General
Imports FLEXYGO.OfficeResourceTypes

Namespace Samples
    Class Samples365


        ''' <summary>
        ''' Sample Create, update and delete contact in office 365
        ''' </summary>
        ''' <param name="Entity">The entity.</param>
        ''' <param name="Ret">The ret.</param>
        ''' <returns><c>true</c> if ok, <c>false</c> otherwise.</returns>
        Public Shared Function SampleContactsOffice365(Entity As EntityObject, ByRef Ret As ProcessHelper) As Boolean


            Try
                Dim contactsOffice = New List(Of Contact)
                Dim infoJson As Newtonsoft.Json.Linq.JArray


                '1) Creamos el objeto contact con los datos necesarios
                Dim contactOffice As Contact = New Contact With {
                                        .id = Nothing, 'Nothing para nuevo, valor del office id para actualizar el contacto.
                                        .givenName = "Contacto prueba",
                                        .businessAddress = New PhysicalAddress With {.city = "Alboraya", .countryOrRegion = "España", .postalCode = "46120", .state = "Valencia", .street = "Ceramistes,19"},
                                        .jobTitle = "Programador",
                                        .businessPhones = New List(Of String) From {"96123123", "622622622"},
                                        .homePhones = New List(Of String) From {"96154789654"},
                                        .emailAddresses = New List(Of EmailAddress) From {New EmailAddress With {.address = "prueba@prueba.com", .name = "Contacto prueba"}}
                                    }

                '2) Lo añadmos a la lista de contactar, máximo 4 por envio
                contactsOffice.Add(contactOffice)
                Dim response As IRestResponse = Nothing

                '3) Envio de contactos a office 365 del usuario, antes debe haber sido identificado en azure mediante el proceso: FLEXYGO.Office.GetConsent(Entity, Ret, "contacts")
                If FLEXYGO.Office.SendOfficeContacts(contactsOffice, Ret, response, Ret.ConfToken.UserSecurity.UserId) Then
                    '4) Recogemos la respuesta
                    infoJson = JsonConvert.DeserializeObject(Of Dictionary(Of String, Object))(response.Content)("responses")
                    For Each info In infoJson
                        If info("status").ToString = "201" OrElse info("status").ToString = "200" Then

                            '5)Codigo del contacto en office para poder borrarlo. Guardarlo en la ficha del contacto para actualizar o borrar.
                            Dim officeId = info("body")("id").ToString

                            contactOffice.id = officeId
                            contactOffice.givenName = "Contacto actualizado"
                            response = Nothing
                            Ret.Data = New BaseCollection
                            '6) Actualizamos el contacto.
                            If Not FLEXYGO.Office.SendOfficeContacts(contactsOffice, Ret, response, Ret.ConfToken.UserSecurity.UserId) Then
                                Throw Ret.LastException
                            End If

                            '7) Cargamos el contacto en la lista de contactos a borrar
                            Dim contactsOfficeDelete = New List(Of Contact)
                            Dim contactOfficeDelete = New Contact With {.id = officeId}
                            contactsOfficeDelete.Add(contactOfficeDelete)

                            '8) Borrado de contactos a office 365 del usuario.
                            response = Nothing
                            Ret.Data = New BaseCollection
                            If Not FLEXYGO.Office.DeleteOfficeContacts(contactsOfficeDelete, Ret, response, Ret.ConfToken.UserSecurity.UserId) Then
                                Throw Ret.LastException
                            End If


                        End If
                    Next
                Else
                    Throw Ret.LastException
                End If

                Ret.Success = True
                Return True

            Catch ex As Exception
                Ret.Success = False
                Ret.LastException = ex
                Return False
            End Try
        End Function

    End Class

End Namespace
VB.net
Imports FLEXYGO.Objects
Imports FLEXYGO.Processing.ProcessManager
Imports RestSharp
Imports Newtonsoft.Json

Imports FLEXYGO.Utilities.General
Imports FLEXYGO.OfficeResourceTypes

Namespace Samples
    Class Samples365

        ''' <summary>
        ''' Sample Create, update and delete events in office 365
        ''' </summary>
        ''' <param name="Entity">The entity.</param>
        ''' <param name="Ret">The ret.</param>
        ''' <returns><c>true</c> if ok, <c>false</c> otherwise.</returns>
        Public Shared Function SampleEventsOffice365(Entity As EntityObject, ByRef Ret As ProcessHelper) As Boolean

            Try
                Dim eventsOffice = New List(Of OfficeEvent)
                Dim infoJson As Newtonsoft.Json.Linq.JArray


                '1) Creamos el objeto eventOffice con los datos necesarios

                Dim eventOffice As New OfficeEvent
                eventOffice.subject = "Asunto"
                eventOffice.body = New ItemBody With {
                                    .content = "<p style='margin-top:10px'>Cuerpo del evento</p>",
                                    .contentType = "html"
                                }
                eventOffice.categories = New List(Of String) From {"Categoria evento"}
                Dim dateIni As DateTime = DateTime.Parse(Format(DateTime.Parse(Now), "yyyy-MM-dd"))
                eventOffice.start = New DateTimeTimeZone With {.dateTime = Now.ToString("s"), .timeZone = "Romance Standard Time"}
                eventOffice.end = New DateTimeTimeZone With {.dateTime = Now.AddMinutes(30).ToString("s"), .timeZone = "Romance Standard Time"}
                eventOffice.importance = "high" ' "normal" "low"
                eventOffice.organizer = New Recipient With {
                                    .emailAddress = New EmailAddress With {
                                        .address = "info@correo.com",
                                        .name = "organizador"
                                    }
                                }
                eventOffice.reminderMinutesBeforeStart = 15
                eventOffice.isReminderOn = True


                '2) Lo añadmos a la lista de eventos, máximo 4 por envio
                eventsOffice.Add(eventOffice)
                Dim response As IRestResponse = Nothing

                '3) Envio de eventos a office 365 del usuario, antes debe haber sido identificado en azure mediante el proceso: FLEXYGO.Office.GetConsent(Entity, Ret, "calendar")
                If FLEXYGO.Office.SendOfficeEvents(eventsOffice, Ret, response, Ret.ConfToken.UserSecurity.UserId) Then
                    '4) Recogemos la respuesta
                    infoJson = JsonConvert.DeserializeObject(Of Dictionary(Of String, Object))(response.Content)("responses")
                    For Each info In infoJson
                        If info("status").ToString = "201" OrElse info("status").ToString = "200" Then

                            '5)Codigo del evento en office para poder borrarlo. Guardarlo en la ficha del evento para actualizar o borrar.
                            Dim officeId = info("body")("id").ToString

                            eventOffice.id = officeId
                            eventOffice.subject = "Asunto actualizado"
                            response = Nothing
                            Ret.Data = New BaseCollection
                            '6) Actualizamos el evento.
                            If Not FLEXYGO.Office.SendOfficeEvents(eventsOffice, Ret, response, Ret.ConfToken.UserSecurity.UserId) Then
                                Throw Ret.LastException
                            End If

                            '7) Cargamos el evento en la lista de eventos a borrar
                            Dim eventsOfficeDelete As New List(Of OfficeEvent)
                            Dim eventOfficeDelete As New OfficeEvent With {.id = officeId}
                            eventsOfficeDelete.Add(eventOfficeDelete)

                            '8) Borrado de eventos a office 365 del usuario.
                            response = Nothing
                            Ret.Data = New BaseCollection
                            If Not FLEXYGO.Office.DeleteOfficeEvents(eventsOfficeDelete, Ret, response, Ret.ConfToken.UserSecurity.UserId) Then
                                Throw Ret.LastException
                            End If


                        End If
                    Next
                Else
                    Throw Ret.LastException
                End If

                Ret.Success = True
                Return True

            Catch ex As Exception
                Ret.Success = False
                Ret.LastException = ex
                Return False
            End Try
        End Function

    End Class

End Namespace