SPFx Как получить данные из подборщика? - PullRequest
0 голосов
/ 16 апреля 2019

Я работал с SPFx, который содержит несколько элементов управления.Большая часть из них работает, но я плохо провожу время с подборщиком.Я использую элемент управления подборкой людей из pnp.Проблема в том, что он ничего не экономит и вместо этого сбрасывает ошибку 400.Я следовал примеру в Интернете, но, похоже, этот пример тоже не работает.

Вот как я поступаю:

В состоянии, которое у меня есть:

export interface IPeopleState {
    salesmanager: string;
    salesManagerId: number[];
}

В конструкторе у меня есть это:

constructor(props: IPeoplepickerProps) {
    super(props);

    this.state={
      salesmanager: "",
      salesManagerId: [],
    }

    this._getManager = this._getManager.bind(this);
  }

Компонент Peoplepicker не имеет никакого странного кода и выглядит так:

<PeoplePicker
              context={this.props.context}
              titleText="Sales Manager"
              personSelectionLimit={1}
              groupName={""} // Leave this blank in case you want to filter from all users
              showtooltip={true}
              isRequired={false}
              disabled={false}
              selectedItems={this._getManager}
 />

И метод _getManagerтот, который должен обновить состояние с именем выбранного пользователя:

private _getManager(items: any[]) {
    this.state.salesManagerId.length = 0;
    let tempuserMngArr = [];
    for (let item in items) {
      tempuserMngArr.push(items[item].text);
    }
    this.setState({ salesmanager: tempuserMngArr[0].toString() });
    console.log(this.state.salesmanager); // log empty
    console.log(tempuserMngArr[0].toString()); // log full name
  }

Во втором журнале консоли я получаю значение, которое я хочу, например, Джон Доу, но когда я запускаю консоль, войдите в систему this.state.manager показывает, что он пуст.Я не знаю, почему состояние не получает значение из tempuserMangArr?

Что не так?

ОБНОВЛЕНИЕ: Я обнаружил это, обновив метод _getManagers, например:это:

private async _getManager(items: any[]) {
    await this.setState({ salesmanager: items[0].text });
   console.log(this.state.salesmanager);
  }

Я могу получить полное имя из штата.Теперь у меня есть другая проблема, и именно в методе, который фактически создает новый элемент в списке.Вот оно:

private _createItem(): void {
    pnp.sp.web.lists.getByTitle("people").items.add({
      salesmanager: this.state.salesmanager
    });
  }

Проблема в том, что консоль говорит следующее:

При попытке прочитать значение был найден узел 'PrimitiveValue' с ненулевым значениемсвойства навигации;однако ожидался узел 'StartArray', узел 'StartObject' или узел 'PrimitiveValue' с нулевым значением.

И я не знаю, что это значит!Конечно, из-за этого не создается новый элемент.

ОБНОВЛЕНИЕ 2 Теперь я знаю, почему на консоли появляется сообщение об ошибке.Это связано с тем, как я сохраняю менеджера по продажам в списке.Я протестировал сохранение менеджера по продажам в обычном текстовом столбце, и он работает, поэтому я подозреваю, что это как-то связано с тем, что столбцы людей работают так:как сохранить менеджера по продажам в колонке людей?

С уважением, Американо

...