Надстройка Word - Как прочитать пользовательское свойство и вернуть значение? - PullRequest
0 голосов
/ 21 апреля 2020

Мне удалось прочитать пользовательское свойство из документа Word с помощью этой функции:

getPropertyValue() {
  Word.run(function(context) {
    var someProperty = context.document.properties.customProperties.getItemOrNullObject("SomeProperty");
    context.load(someProperty);
    return context.sync()
      .then(function () {
        if (someProperty.isNullObject) {
          console.log("someProperty not found");
        }
        else {
          console.log("+++++ someProperty is " + someProperty.value);
          return someProperty.value;
        }
      })
    });
  return '';
}

render() {
  var someProp = this.getPropertyValue();
  return (
    <Button className='ms-welcome__action' buttonType={ButtonType.hero}
            iconProps={{ iconName: 'ChevronRight' }}
            onClick={ () => {
              if (someProp) {
                this.setState({ name: 'John', address: 'NYC', someProperty: someProp });
              } else {
                this.setState({ name: 'John', address: 'NYC' }); 
                                        }
             }}>Save</Button>
  )
}

Она выводит правильное значение свойства в консоль JavaScript. Однако функция всегда возвращает пустую строку. Он никогда не возвращает значение свойства.

Как мне изменить функцию, чтобы она возвращала значение свойства?

Ответы [ 2 ]

0 голосов
/ 21 апреля 2020

Я нашел решение. Я использую self.setState({ someProperty: someProperty.value }); для передачи значения свойства, чтобы я мог использовать его в this.state.someProperty.

getPropertyValue() {
  var self = this;
  Word.run(function(context) {
    var someProperty = context.document.properties.customProperties.getItemOrNullObject("SomeProperty");
    context.load(someProperty);
    return context.sync()
      .then(function () {
        if (someProperty.isNullObject) {
          console.log("someProperty not found");
        }
        else {
          console.log("+++++ someProperty is " + someProperty.value);
          self.setState({ someProperty: someProperty.value });
          return someProperty.value;
        }
      })
    });
  return '';
}

render() {
  this.getPropertyValue();
  return (
    <Button className='ms-welcome__action' buttonType={ButtonType.hero}
            iconProps={{ iconName: 'ChevronRight' }}
            onClick={ () => {
              if (this.state.someProperty) {
                this.setState({ name: 'John', address: 'NYC' });
              } else {
                this.setState({ name: 'John', address: 'NYC' }); 
              }
             }}>Save</Button>
  )
}
0 голосов
/ 21 апреля 2020

Я думаю, что проблема от context.load(someProperty). это может сработать, если вы измените его на

someProperty.load("key, value");

Вы можете найти мою суть в https://gist.github.com/lumine2008/4fc0b40b9b5798d9df93712fbe7fd8f3

...