Suplementos do Office com o manifesto de aplicação unificada para o Microsoft 365

Este artigo apresenta o manifesto da aplicação unificada para o Microsoft 365. Pressupõe que está familiarizado com o manifesto de Suplementos do Office.

Dica

A Microsoft está fazendo várias melhorias na plataforma de desenvolvedor do Microsoft 365. Essas melhorias fornecem mais consistência no desenvolvimento, implantação, instalação e administração de todos os tipos de extensões do Microsoft 365, incluindo os suplementos do Office. Essas alterações são compatíveis com os suplementos existentes.

Uma melhoria importante é a capacidade de criar uma única unidade de distribuição para todas as extensões do Microsoft 365 com o mesmo formato e esquema de manifesto.

Demos um primeiro passo importante rumo a estes objetivos ao permitir-lhe criar suplementos do Outlook com um manifesto unificado para o Microsoft 365.

Observação

  • Atualmente, o manifesto unificado só suporta suplementos do Outlook e apenas no Office associados a uma subscrição do Microsoft 365 e instalados no Windows, num dispositivo móvel ou em Outlook na Web. Estamos a trabalhar para expandir o suporte para o Excel, PowerPoint e Word, bem como para o Outlook para Mac e para versões perpétuas do Office.
  • O manifesto unificado requer a Versão 2304 do Office (Compilação 16320.00000) ou posterior.

Dica

Está pronto para começar a utilizar o manifesto unificado? Comece por Criar um suplemento do Outlook com o manifesto unificado do Microsoft 365.

Propriedades principais do manifesto unificado

A documentação de referência main para a versão do manifesto da aplicação unificada está em Referência do manifesto unificado. (Para obter a referência de manifesto que inclui todas as funcionalidades de pré-visualização mais recentes, veja Pré-visualização do programador público para o manifesto unificado.) Neste artigo, fornecemos uma breve descrição do significado das propriedades base quando a Aplicação Teams é (ou inclui) um Suplemento do Office. Segue-se alguma documentação básica para a propriedade "extensions" e as respetivas propriedades descendentes. Existe um manifesto de exemplo completo para um suplemento em Manifesto unificado de exemplo.

Propriedades base

Cada uma das propriedades base listadas na tabela seguinte tem documentação mais extensa em Esquema de manifesto. As propriedades base não incluídas nesta tabela não têm qualquer significado para suplementos do Office.

Propriedade JSON Objetivo
"$schema" Identifica o esquema do manifesto.
"manifestVersion" Versão do esquema do manifesto.
"id" GUID da aplicação/suplemento do Teams.
"versão" Versão da aplicação/suplemento do Teams. O formato tem de estar n.n.n onde cada um n não pode ter mais de cinco dígitos.
"nome" Nomes públicos curtos e longos da aplicação/suplemento do Teams. O nome abreviado é apresentado na parte superior do painel de tarefas de um suplemento.
"descrição" Descrições curtas e longas públicas da aplicação/suplemento do Teams.
"developer" Informações sobre o programador da aplicação/suplemento do Teams.
"localizationInfo" Configura a localidade padrão e outras localidades com suporte.
"validDomains" Veja Especificar domínios seguros.
"webApplicationInfo" Identifica a aplicação Web da aplicação/suplemento do Teams como é conhecida no Azure Active Directory.
"autorização" Identifica todas as permissões do Microsoft Graph que o suplemento precisa.

Propriedade "extensões"

Estamos a trabalhar arduamente para concluir a documentação de referência para a propriedade "extensões" e as respetivas propriedades descendentes. Entretanto, o seguinte fornece alguma documentação básica. A maioria, mas não todas, das propriedades tem um elemento (ou atributo) equivalente no manifesto apenas do suplemento para suplementos. Na maior parte das vezes, a descrição e as restrições que se aplicam ao elemento ou atributo XML também se aplicam à respetiva propriedade JSON equivalente no manifesto unificado. As tabelas na secção "extensões" da secção Comparar o manifesto apenas do suplemento com o manifesto unificado do Microsoft 365 podem ajudá-lo a determinar o equivalente XML de uma propriedade JSON.

Observação

Esta tabela contém apenas algumas propriedades representativas descendentes selecionadas de "extensões". Não é uma lista exaustiva de todas as propriedades subordinadas de "extensões". Para obter a referência completa do manifesto unificado, veja Manifesto unificado do Microsoft 365. Para obter a referência de manifesto que inclui todas as funcionalidades de pré-visualização mais recentes, consulte Pré-visualização do programador público para o manifesto unificado do Microsoft 365.

Propriedade JSON Objetivo
"requirements.capabilities" Identifica os conjuntos de requisitos que o suplemento precisa de ser instalável.
"requirements.scopes" Identifica os aplicativos do Office nos quais o suplemento pode ser instalado. Por exemplo, "correio" significa que o suplemento pode ser instalado no Outlook.
"faixas de opções" As faixas de opções que o suplemento personaliza.
"ribbons.contexts" Especifica as superfícies de comando que o suplemento personaliza. Por exemplo, "mailRead" ou "mailCompose".
"ribbons.fixedControls" (pré-visualização do programador) Configura e adiciona o botão de um suplemento integrado de relatórios de spam ao friso do Outlook.
"ribbons.spamPreProcessingDialog" (pré-visualização do programador) Configura a caixa de diálogo de pré-processamento apresentada após a seleção do botão de um suplemento de relatório de spam no friso do Outlook.
"ribbons.tabs" Configura guias personalizadas da faixa de opções.
"alternativas" Especifica a compatibilidade de versões anteriores com um suplemento COM equivalente, XLL ou ambos. Também especifica os ícones de main que são utilizados para representar o suplemento em versões mais antigas do Office.
"runtimes" Configura os runtimes incorporados que o suplemento utiliza, incluindo vários tipos de suplementos que têm pouca ou nenhuma IU, como suplementos só de função personalizados e comandos de função.
"autoRunEvents" Remove um manipulador de eventos de um evento especificado.

Especificar domínios seguros

Existe uma matriz "validDomains" no ficheiro de manifesto que é utilizada para indicar ao Office quais os domínios para os quais o seu suplemento deve ser autorizado a navegar. Conforme indicado em Especificar domínios que pretende abrir na janela do suplemento, ao executar no Office na Web, o painel de tarefas pode ser navegado para qualquer URL. No entanto, nas plataformas de ambiente de trabalho, se o seu suplemento tentar aceder a um URL num domínio diferente do domínio que aloja a página inicial, esse URL é aberto numa nova janela do browser fora do painel de suplementos da aplicação do Office.

Para substituir este comportamento em plataformas de ambiente de trabalho, adicione cada domínio que pretende abrir na janela do suplemento à lista de domínios especificados na matriz "validDomains". Se o suplemento tentar ir para uma URL em um domínio que está na lista, ela então abre no painel de tarefas do Office para desktop e no Office Online. Se tentar aceder a um URL que não está na lista, no Office no ambiente de trabalho, esse URL é aberto numa nova janela do browser (fora do painel de tarefas do suplemento).

Manifesto unificado de exemplo

Segue-se um exemplo de um manifesto de aplicação unificado para um suplemento. Não contém todas as propriedades de manifesto possíveis.

{
  "$schema": "https://developer.microsoft.com/json-schemas/teams/vDevPreview/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"
                    }
                  ]
                }
              ],
              "customMobileRibbonGroups" [
                {
                  "id": "myMobileGroup",
                  "label": "Contoso Actions",
                  "controls": [
                    {
                      "id": "msgReadFunctionButton",
                      "type": "mobileButton",
                      "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"
                    }
                  ]
                }
              ]
              "customMobileRibbonGroups": [
                {
                  "id": "mobileDashboard",
                  "label": "Controls",
                  "controls": [
                    {
                      "id": "control1",
                      "type": "mobileButton",
                      "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"
            }
          },
          "alternateIcons": {
            "icon": {
              "size": 64,
              "url": "https://contoso.com/assets/icon64x64.jpg"
            },
            "highResolutionIcon": {
              "size": 64,
              "url": "https://contoso.com/assets/icon128x128.jpg"
            }
          }
        }
      ]
    }
  ]
}

Confira também