Complementos de Office con el manifiesto de aplicación unificado para Microsoft 365 (versión preliminar)

En este artículo se presenta el manifiesto de aplicación unificada para Microsoft 365 en versión preliminar. Se supone que está familiarizado con el manifiesto de complementos de Office.

Sugerencia

Microsoft está realizando una serie de mejoras en la plataforma para desarrolladores de Microsoft 365. Estas mejoras proporcionan más coherencia en el desarrollo, la implementación, la instalación y la administración de todos los tipos de extensiones de Microsoft 365, incluidos los complementos de Office. Estos cambios son compatibles con los complementos existentes.

Una mejora importante en la que estamos trabajando es la capacidad de crear una única unidad de distribución para todas las extensiones de Microsoft 365 (aplicaciones de Teams) mediante el mismo formato de manifiesto y esquema, en función del manifiesto de aplicación unificada con formato JSON para Microsoft 365.

Nota:

Cualquier extensión de cualquier parte de la plataforma de Microsoft 365 ahora se denomina "Aplicación de Teams" aunque no extienda la propia aplicación de Teams.

Hemos dado un primer paso importante hacia estos objetivos, ya que permite crear complementos de Outlook, que solo se ejecutan en Windows, con un manifiesto unificado para Microsoft 365.

Nota:

  • El manifiesto unificado está disponible para la versión preliminar y está sujeto a cambios en función de los comentarios. Animamos a los desarrolladores de complementos con experiencia a experimentar con él. El manifiesto unificado no debe usarse en complementos de producción.
  • La versión preliminar del manifiesto unificado solo admite complementos de Outlook y solo en Office descargado desde una suscripción de Microsoft 365 e instalado en Windows. Estamos trabajando en ampliar la compatibilidad con Excel, PowerPoint y Word, así como con otras plataformas.
  • El manifiesto unificado requiere office versión 2304 (compilación 16320.00000) o posterior. El canal de suscripción de Microsoft 365 debe ser "Beta".

Sugerencia

¿Está listo para empezar a trabajar con el manifiesto unificado de versión preliminar? Comience por Compilar un complemento de Outlook con el manifiesto unificado para Microsoft 365 (versión preliminar).

Propiedades clave del manifiesto unificado

La documentación de referencia principal para la versión preliminar del manifiesto de aplicación unificada se encuentra en Esquema de manifiesto de aplicación de versión preliminar para desarrolladores públicos para Teams. En ese artículo se proporciona información sobre las propiedades de manifiesto base críticas, pero es posible que no incluya ninguna documentación de la propiedad "extensiones", que es la propiedad donde los complementos de Office están configurados en el manifiesto unificado. Por lo tanto, en este artículo, proporcionamos una breve descripción del significado de las propiedades base cuando la aplicación de Teams es (o incluye) un complemento de Office. Esto va seguido de alguna documentación básica para la propiedad "extensiones" y sus propiedades descendientes. Hay un manifiesto de ejemplo completo para un complemento en El manifiesto unificado de la versión preliminar de ejemplo.

Propiedades base

Cada una de las propiedades base enumeradas en la tabla siguiente tiene documentación más amplia en Esquema de manifiesto de aplicación de versión preliminar para desarrolladores públicos para Teams. Las propiedades base no incluidas en esta tabla no tienen ningún significado para los complementos de Office.

Propiedad JSON Objetivo
“$schema” Identifica el esquema del manifiesto.
“manifestVersion” Versión del esquema del manifiesto.
“id” GUID de la aplicación o complemento de Teams.
“version” Versión de la aplicación o complemento de Teams.
“name” Nombres cortos y largos públicos de la aplicación o complemento de Teams. El nombre corto aparece en la parte superior del panel de tareas de un complemento.
“description” Descripciones cortas y largas públicas de la aplicación o complemento de Teams.
"developer" Información sobre el desarrollador de la aplicación o complemento de Teams.
“localizationInfo” Configura la configuración regional predeterminada y otras configuraciones regionales admitidas.
"validDomains" Consulte Especificar dominios seguros.
“webApplicationInfo” Identifica la aplicación web de la aplicación o complemento de Teams como se conoce en Azure Active Directory.
“authorization” Identifica los permisos de Microsoft Graph que necesita el complemento.

Propiedad "extensiones"

Estamos trabajando duro para completar la documentación de referencia de la propiedad "extensiones" y sus propiedades descendientes. Mientras tanto, a continuación se proporciona documentación básica. La mayoría de las propiedades, pero no todas, tienen un elemento (o atributo) equivalente en el manifiesto XML para los complementos. En su mayor parte, la descripción y las restricciones que se aplican al elemento o atributo XML también se aplican a su propiedad JSON equivalente en el manifiesto unificado. Las tablas de la sección "extensiones" (propiedad) de Compare the XML manifest with the unified manifest for Microsoft 365 (Comparar el manifiesto XML con el manifiesto unificado de Microsoft 365 ) pueden ayudarle a determinar el equivalente XML de una propiedad JSON.

Propiedad JSON Objetivo
“requirements.capabilities” Identifica los conjuntos de requisitos que debe instalar el complemento.
“requirements.scopes” Identifica las aplicaciones Office en las que se puede instalar el complemento. Por ejemplo, "mail" significa que el complemento se puede instalar en Outlook.
“cintas de opciones” Las cintas de opciones que personaliza el complemento.
"ribbons.contexts" Especifica las superficies de comandos que personaliza el complemento. Por ejemplo, "mailRead" o "mailCompose".
"ribbons.tabs" Configura pestañas personalizadas de la cinta de opciones.
“alternatives” Especifica la compatibilidad con versiones anteriores con un complemento COM equivalente, XLL o ambos.
“runtimes” Configura los tiempos de ejecución incrustados que usa el complemento, incluidos varios tipos de complementos que tienen poca o ninguna interfaz de usuario, como complementos personalizados de solo función y comandos de función.
“autoRunEvents” Este punto de extensión agrega un controlador de eventos para un evento especificado.

Especificar dominios seguros

Hay una matriz "validDomains" en el archivo de manifiesto que se usa para indicar a Office a qué dominios debe poder navegar el complemento. Como se indica en Especificar dominios que desea abrir en la ventana del complemento, al ejecutarse en Office en la Web, el panel de tareas se puede navegar a cualquier dirección URL. Sin embargo, en las plataformas de escritorio, si el complemento intenta ir a una dirección URL de un dominio distinto del dominio que hospeda la página de inicio, esa dirección URL se abre en una nueva ventana del explorador fuera del panel de complementos de la aplicación de Office.

Para invalidar este comportamiento en las plataformas de escritorio, agregue cada dominio que quiera abrir en la ventana del complemento a la lista de dominios especificados en la matriz "validDomains". Si el complemento intenta ir a una dirección URL en un dominio que está en la lista, se abrirá en el panel de tareas de Office de escritorio y Office en la web. Si intenta ir a una dirección URL que no está en la lista, en Office en el escritorio, esa dirección URL se abre en una nueva ventana del explorador (fuera del panel de tareas del complemento).

Ejemplo de manifiesto unificado de versión preliminar

A continuación se muestra un ejemplo de un manifiesto de aplicación unificada de versión preliminar para un complemento.

{
  "$schema": "https://raw.githubusercontent.com/OfficeDev/microsoft-teams-app-schema/op/extensions/MicrosoftTeams.schema.json",
  "id": "00000000-0000-0000-0000-000000000000",
  "version": "1.0.0",
  "manifestVersion": "devPreview",
  "name": {
    "short": "Name of your app (<=30 chars)",
    "full": "Full name of app, if longer than 30 characters (<=100 chars)"
  },
  "description": {
    "short": "Short description of your app (<= 80 chars)",
    "full": "Full description of your app (<= 4000 chars)"
  },
  "icons": {
    "outline": "outline.png",
    "color": "color.png"
  },
  "accentColor": "#230201",
  "developer": {
    "name": "Contoso",
    "websiteUrl": "https://www.contoso.com",
    "privacyUrl": "https://www.contoso.com/privacy",
    "termsOfUseUrl": "https://www.contoso.com/servicesagreement"
  },
  "localizationInfo": {
    "defaultLanguageTag": "en-us",
    "additionalLanguages": [
      {
        "languageTag": "es-es",
        "file": "es-es.json"
      }
    ]
  },
  "webApplicationInfo": {
    "id": "00000000-0000-0000-0000-000000000000",
    "resource": "api://www.contoso.com/prodapp"
  },
  "authorization": {
    "permissions": {
      "resourceSpecific": [
        {
          "name": "Mailbox.ReadWrite.User",
          "type": "Delegated"
        }
      ]
    }
  },
  "extensions": [
    {
      "requirements": {
        "scopes": [ "mail" ],
        "capabilities": [
          {
            "name": "Mailbox", "minVersion": "1.1"
          }
        ]
      },
      "runtimes": [
        {
          "requirements": {
            "capabilities": [
              {
                "name": "MailBox", "minVersion": "1.10"
              }
            ]
          },
          "id": "eventsRuntime",
          "type": "general",
          "code": {
            "page": "https://contoso.com/events.html",
            "script": "https://contoso.com/events.js"
          },
          "lifetime": "short",
          "actions": [
            {
              "id": "onMessageSending",
              "type": "executeFunction"
            },
            {
              "id": "onNewMessageComposeCreated",
              "type": "executeFunction"
            }
          ]
        },
        {
          "requirements": {
            "capabilities": [
              {
                "name": "MailBox", "minVersion": "1.1"
              }
            ]
          },
          "id": "commandsRuntime",
          "type": "general",
          "code": {
            "page": "https://contoso.com/commands.html",
            "script": "https://contoso.com/commands.js"
          },
          "lifetime": "short",
          "actions": [
            {
              "id": "action1",
              "type": "executeFunction"
            },
            {
              "id": "action2",
              "type": "executeFunction"
            },
            {
              "id": "action3",
              "type": "executeFunction"
            }
          ]
        }
      ],
      "ribbons": [
        {
          "contexts": [
            "mailCompose"
          ],
          "tabs": [
            {
              "builtInTabId": "TabDefault",
              "groups": [
                {
                  "id": "dashboard",
                  "label": "Controls",
                  "controls": [
                    {
                      "id": "control1",
                      "type": "button",
                      "label": "Action 1",
                      "icons": [
                        {
                          "size": 16,
                          "url": "test_16.png"
                        },
                        {
                          "size": 32,
                          "url": "test_32.png"
                        },
                        {
                          "size": 80,
                          "url": "test_80.png"
                        }
                      ],
                      "supertip": {
                        "title": "Action 1 Title",
                        "description": "Action 1 Description"
                      },
                      "actionId": "action1"
                    },
                    {
                      "id": "menu1",
                      "type": "menu",
                      "label": "My Menu",
                      "icons": [
                        {
                          "size": 16,
                          "url": "test_16.png"
                        },
                        {
                          "size": 32,
                          "url": "test_32.png"
                        },
                        {
                          "size": 80,
                          "url": "test_80.png"
                        }
                      ],
                      "supertip": {
                        "title": "My Menu",
                        "description": "Menu with 2 actions"
                      },
                      "items": [
                        {
                          "id": "menuItem1",
                          "type": "menuItem",
                          "label": "Action 2",
                          "supertip": {
                            "title": "Action 2 Title",
                            "description": "Action 2 Description"
                          },
                          "actionId": "action2"
                        },
                        {
                          "id": "menuItem2",
                          "type": "menuItem",
                          "label": "Action 3",
                          "icons": [
                            {
                              "size": 16,
                              "url": "test_16.png"
                            },
                            {
                              "size": 32,
                              "url": "test_32.png"
                            },
                            {
                              "size": 80,
                              "url": "test_80.png"
                            }
                          ],
                          "supertip": {
                            "title": "Action 3 Title",
                            "description": "Action 3 Description"
                          },
                          "actionId": "action3"
                        }
                      ]
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "contexts": [ "mailRead" ],
          "tabs": [
            {
              "builtInTabId": "TabDefault",
              "groups": [
                {
                  "id": "dashboard",
                  "label": "Controls",
                  "controls": [
                    {
                      "id": "control1",
                      "type": "button",
                      "label": "Action 1",
                      "icons": [
                        {
                          "size": 16,
                          "url": "test_16.png"
                        },
                        {
                          "size": 32,
                          "url": "test_32.png"
                        },
                        {
                          "size": 80,
                          "url": "test_80.png"
                        }
                      ],
                      "supertip": {
                        "title": "Action 1 Title",
                        "description": "Action 1 Description"
                      },
                      "actionId": "action1"
                    }
                  ]
                }
              ]
            }
          ]
        }
      ],
      "autoRunEvents": [
        {
          "requirements": {
            "capabilities": [
              {
                "name": "MailBox", "minVersion": "1.10"
              }
            ]
          },
          "events": [
            {
              "type": "newMessageComposeCreated",
              "actionId": "onNewMessageComposeCreated"
            },
            {
              "type": "messageSending",
              "actionId": "onMessageSending",
              "options": {
                "sendMode": "promptUser"
              }
            }
          ]
        }
      ],
      "alternates": [
        {
          "requirements": {
            "scopes": [ "mail" ]
          },
          "prefer": {
            "comAddin": {
              "progId": "ContosoExtension"
            }
          },
          "hide": {
            "storeOfficeAddin": {
              "officeAddinId": "00000000-0000-0000-0000-000000000000",
              "assetId": "WA000000000"
            }
          }
        }
      ]
    }
  ]
}

Vea también