Развернутая веб-часть показывает ошибки в консоли, но не для нелокальной рабочей среды

Я развернул веб-часть в семействе веб-сайтов (где веб-часть предназначена для работы), и я получаю ошибки для трех конкретных функций в форме. Для этих функций я использую sp.web.

  1. Я создал «Hello User», который использует эту функцию:
public _getUser() { 
    sp.web.currentUser.get().then((user) => {

      this.setState({
        CurrentUserTitle: user.Title,
        FullName: user.Title,
        CurrentUser: user.LoginName,
        CurrentUserID: user.Id,
        CurrentUserEmail: user.Email,

      }

  1. Выпадающий список отделов, который заполняется списком SP.
public _getDepartments() {
  sp.web.lists.getByTitle("Departments").items.get().then((items: any[]) => {
    let returnedDepts: IDropdownOption[] = items.map((item) => { return { key: item.Title, text: item.Title }; });
    this.setState({ DepartmentsList: returnedDepts });
  });
}

  1. Кнопка "Отправить". Функция:
private _onSubmit() {

      sp.web.lists.getByTitle('Data and Report Form').items.add({

        FullName: this.state.FullName,
        UniId: this.state.UniId,
        Email: this.state.UserEmail,
        Phone: this.state.PhoneNo,
        Department: this.state.SelectedDept,
        SubDepartment: this.state.SubDepartment,
        StartDate: this.state.StartDate,
        DiscoveryDate: this.state.DateOfDiscovery,
        Details: this.state.IncidentDetails,
        PersonalData: this.state.PersonalData

      }).then((iar: ItemAddResult) => {
        console.log(iar);
        let list = sp.web.lists.getByTitle('Data and Report Form');
        list.items.getById(iar.data.Id).update({
            Title: 'DIBR'+iar.data.Id, 
        });
        this.setState({
          JobRef: iar.data.Id,
        });
      });
    }


Форма отлично работает в нелокальной рабочей среде SharePoint, обслуживаемой на фактическом сайте, на котором она предназначена для развертывания. При развертывании в виде пакета на самом сайте и добавлении в качестве веб-части теперь отображаются следующие ошибки:

HTTP404: NOT FOUND - сервер не нашел ничего, соответствующего запрошенному URI (унифицированный идентификатор ресурса). (Получить) GET - https://myDomain.sharepoint.com/sites/IncidentReporting/SitePages/_api/web/currentuser

HTTP404: NOT FOUND - сервер не нашел ничего, соответствующего запрошенному URI (унифицированный идентификатор ресурса). (Получить) GET - https://myDomain.sharepoint.com/sites/IncidentReporting/SitePages/_api/web/lists/getByTitle ("Отделы") / items

Я получаю подобное сообщение при попытке отправить. Я сказал, что все это работает на нелокальном верстаке.

Дополнительные детали:

Если я добавлю веб-часть на домашнюю страницу современного сайта в качестве веб-части, я получаю эту ошибку (отличную от тех, которые возникают при добавлении веб-части на страницу):

HTTP404: NOT FOUND - сервер не нашел ничего, соответствующего запрошенному URI (унифицированный идентификатор ресурса). (Получить) GET - https://MyDomain.sharepoint.com/sites/_api/web/lists/getByTitle ("Отделы") / items

HTTP404: NOT FOUND - сервер не нашел ничего, соответствующего запрошенному URI (унифицированный идентификатор ресурса). (Получить) GET - https://MyDomain.sharepoint.com/sites/_api/web/currentuser

как вы можете видеть, в URL-адресе отсутствует фактический сайт. В чем разница?

У кого-нибудь есть идея, почему он по-другому ведет себя при развертывании? И почему отображается другая ошибка, если я помещаю веб-часть в разные области семейства сайтов.

Обновление: я пытался использовать это:

import pnp from "sp-pnp-js";



public onInit(): Promise<void> {

  return super.onInit().then(_ => {

    pnp.setup({
      spfxContext: this.context
    });

  });
}

Но я не знаю, как это реализовать, ведь onInit - это Angular, не так ли?

ПОМОЩЬ!

T


person NightTom    schedule 29.11.2019    source источник


Ответы (2)


Догадаться.....

ОБЯЗАТЕЛЬНО ПОСТАВЬТЕ:

https://github.com/SharePoint/PnP-JS-Core/wiki/Using-sp-pnp-js-in-SharePoint-Framework

импортировать pnp из "sp-pnp-js";

// ...

public onInit (): Promise {

вернуть super.onInit (). then (_ => {

pnp.setup({
  spfxContext: this.context
});

}); В вашем корне .ts файл !!!!!

Это было у меня на несколько дней!

person NightTom    schedule 02.12.2019

Эта проблема возникает из-за того, что API-интерфейс PnP JS не получает контекст SharePoint. Чтобы получить контекст, требуется SITEURL + '/ SitePages'. Итак, что вам нужно сделать, это добавить в файл props новое свойство siteUrl.

export interface IDemoWebPartProps{  
  description: string;  
  siteUrl: string;  
}  

а затем в файле Webpart.ts инициализируйте это свойство этим значением.

public render(): void {  
    const element: React.ReactElement<IDemoWebPartProps> = React.createElement(  
      Demo,  
      {  
        description: this.properties.description,  
        siteUrl: this.context.pageContext.web.absoluteUrl  
      }  
    );

Наконец, в файле .tsx инициализируйте веб-параметр, используя это свойство.

let web = new Web(this.props.siteUrl);

и используйте это для получения данных из требуемых списков с помощью pnp-js.

person Sahil Jhamb    schedule 03.12.2019
comment
Хм, не является общедоступным onInit (): Promise ‹void› {return super.onInit (). Then (_ = ›{// может присутствовать другой код инициализации pnpSetup ({spfxContext: this.context});}); } достаточно положить в файл webpart.ts? - person NightTom; 04.12.2019
comment
Также как бы вы использовали Интернет в sp.web.lists ?? - person NightTom; 04.12.2019
comment
Да, метод OnInit должен работать нормально. Но основная причина возникновения этой ошибки заключается в том, что URL-адрес, по которому выполняется поиск контекста, неверен. Так что исправление URL-адреса сделает свою работу. Кроме того, не рекомендуется определять весь контекст в файле webpart.ts bcoz, это повлияет на производительность. Лучший способ - явно загрузить контекстные части. - person Sahil Jhamb; 05.12.2019
comment
Я использовал Интернет, как будто убрав часть «sp». Пример - web.lists.getListbytitle ('x') ... попробуйте, это сработает. - person Sahil Jhamb; 05.12.2019
comment
Значит, добавление публичного метода onInit () выше в мой комментарий снижает производительность? - person NightTom; 06.12.2019