2017-02-22 2 views
1

J'ai créé this il y a quelques jours dans lequel j'avais besoin d'aide pour ajouter des propriétés personnalisées à un document.(API JavaScript 1.3 pour Office) Propriétés personnalisées GetItemOrNull

Tout d'abord, je cours Word 1701 (7766.2047). Disons que j'ai une méthode dans laquelle je retourne une dite propriété personnalisée. D'abord, je vérifierais si la propriété personnalisée a déjà été créée. Je ferais cela avec un simple getItemOrNullObject (clé) et ..

  • Si retourne NULL Ensuite, créez simplement et le retourner
  • retour Sinon, il

Il est de ma compréhension que j'ai besoin faire un retour context.sync(). alors pour que l'objet soit réellement chargé avec des données? Est-ce que je fais trop de retour context.sync() appelle pour rien?

Word.run(function(context) { 
 
    var customDocProps = context.document.properties.customProperties; 
 
    context.load(customDocProps); 
 
    return context.sync() 
 
    .then(function() { 
 
     var temp = customDocProps.getItemOrNullObject("X"); 
 
     return context.sync() 
 
     .then(function() { 
 
      if (!temp) { 
 
      context.document.properties.customProperties.add("X", 1234); 
 
      temp = customDocProps.getItemOrNullObject("X"); 
 
      return context.sync() 
 
       .then(function() { 
 
       return temp; 
 
       }); 
 
      } else { 
 
      return temp; 
 
      } 
 
     }); 
 
    }); 
 
});

Le code suivant me lance un 'ReferenceError: 'Parole' est indéfini' au début, mais si je le débugger il fonctionne avant qu'il ne casse

var customDocProps = context.document.properties.customProperties; context.load(customDocProps); return context.sync().{....}


J'ai également une autre question. Dire que je veux mettre à jour ma propriété personnalisée, serait:

Word.run(function (context) { 
 
     context.document.properties.customProperties.add("X", 56789); 
 
     return context.sync(); 
 
    });

override la valeur ancienne avec la nouvelle?

Si vous lisez jusqu'ici merci! Toute aide est appréciée. À la votre!

Répondre

3

Merci d'avoir posé cette question.

Votre code est correct sauf pour un petit détail: Toutes les * méthodes de getItemOrNullObject ne PAS un retour null JavaScript, votre « si (temp!) » Déclaration ne fonctionnera pas comme prévu. Si vous voulez valider l'existence, vous devez appeler if (temp.isNullObject) à la place.

également quelques suggestions:

  1. sémantique customProperties.add() est que si la propriété existe, il sera remplacé. Donc, si vous voulez créer ou modifier la propriété, vous n'avez pas besoin de vérifier si elle existe ou non. Si vous voulez lire sa valeur actuelle, vous le faites. Cela répond à votre 2ème question.
  2. J'ai une proposition simplifiée et plus efficace pour votre code, si vous êtes intéressé par le chargement d'une seule propriété.

Word.run(function (context) { 
 
    var myProperty = context.document.properties.customProperties.getItemOrNullObject("X"); 
 
    context.load(myProperty); 
 
    return context.sync() 
 
     .then(function() { 
 
     if (myProperty.isNullObject) { 
 
      //this means the Custom Property does not exist.... 
 
      context.document.properties.customProperties.add("X", 1234); 
 
      console.log("Property Created"); 
 
      return context.sync(); 
 
     } 
 
     else 
 
      console.log("The property already exists, value:" + myProperty.value); 
 
     }) 
 
    }) 
 
    .catch(function (e) { 
 
     console.log(e.message); 
 
    })

Nous mettrons à jour la documentation que cela semble être source de confusion.

Merci!

+0

il est de ma compréhension que Word.run() s'exécute async donc si je veux stocker sa valeur de retour, je devrais essayer d'utiliser un rappel. Est-ce possible avec Word.run()? –

+0

Si vous voulez retourner la valeur de la propriété il suffit de retourner ce qui est sur myProperty.value de mon échantillon. –

+0

en utilisant votre échantillon. Lorsque la balise est nulle, j'obtiens toujours une exception générale après context.sync() C'est verbatum comme vous l'avez écrit, donc je ne peux pas voir ce qui ne va pas. Devrais-je ouvrir une nouvelle question? http://imgur.com/a/TKujx –