Menus personnalisés pour les modules complémentaires d'éditeurs

Les modules complémentaires d'éditeur publiés peuvent créer des éléments de menu personnalisés sous le menu Extensions de leur éditeur. Insérez un menu de modules complémentaires à l'aide de Ui.createAddonMenu et ajoutez-y des éléments avec Menu.addItem. Les menus sont généralement créés dans la méthode onOpen du module complémentaire.

Créez des menus dynamiques qui changent en fonction des interactions de l'utilisateur ou de l'état du module complémentaire. Toutefois, les modules complémentaires doivent créer un menu initial avant d'être autorisés par l'utilisateur. Pour cette raison, vérifiez le mode d'autorisation du module complémentaire avant de créer des menus dans onOpen. N'effectuez aucune action nécessitant une autorisation (comme la vérification du script Properties) lorsque le module complémentaire est en mode ScriptApp.AuthMode.NONE. Pour en savoir plus sur les modes et le cycle de vie de l'autorisation, consultez Cycle de vie de l'autorisation.

Si vous tentez d'effectuer des actions nécessitant une autorisation lorsque le mode d'autorisation est défini sur ScriptApp.AuthMode.NONE, une erreur se produit. Cela peut empêcher l'affichage des menus de vos modules complémentaires.

L'exemple suivant montre comment créer un menu de module complémentaire dynamique pour différents modes d'autorisation :

function onOpen(e) {
  // Or DocumentApp, SlidesApp, or FormApp.
  var menu = SpreadsheetApp.getUi().createAddonMenu();
  if (e && e.authMode == ScriptApp.AuthMode.NONE) {
    // Add a normal menu item (works in all authorization modes).
    menu.addItem('Start workflow', 'startWorkflow');
  } else {
    // Add a menu item based on properties (doesn't work in AuthMode.NONE).
    var properties = PropertiesService.getDocumentProperties();
    var workflowStarted = properties.getProperty('workflowStarted');
    if (workflowStarted) {
      menu.addItem('Check workflow status', 'checkWorkflow');
    } else {
      menu.addItem('Start workflow', 'startWorkflow');
    }
    // Record analytics.
    UrlFetchApp.fetch('http://www.example.com/analytics?event=open');
  }
  menu.addToUi();
}