1

我已将 Web 部件部署到网站集(Web 部件的设计目标),但我收到了表单上 3 个特定功能的错误。我将 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 工作台中完美运行。当作为包部署到站点本身并作为 Web 部件添加时,它现在显示以下错误:

HTTP404: NOT FOUND - 服务器没有找到与请求的 URI(统一资源标识符)匹配的任何内容。(获取)GET - https://myDomain.sharepoint.com/sites/IncidentReporting/SitePages/_api/web/currentuser

HTTP404: NOT FOUND - 服务器没有找到与请求的 URI(统一资源标识符)匹配的任何内容。(Fetch)GET - https://myDomain.sharepoint.com/sites/IncidentReporting/SitePages/_api/web/lists/getByTitle ('Departments')/items

尝试提交时收到类似的消息。AI 说,这些都在非本地工作台上工作。

额外细节:

如果我将 web 部件作为 web 部件添加到现代网站的主页,我会收到这些错误(与将 web 部件添加到页面时的错误不同):

HTTP404: NOT FOUND - 服务器没有找到与请求的 URI(统一资源标识符)匹配的任何内容。(Fetch)GET - https://MyDomain.sharepoint.com/sites/_api/web/lists/getByTitle ('Departments')/items

HTTP404: NOT FOUND - 服务器没有找到与请求的 URI(统一资源标识符)匹配的任何内容。(获取)GET - https://MyDomain.sharepoint.com/sites/_api/web/currentuser

如您所见,它缺少 URL 中的实际站点。为什么有区别?

有没有人知道为什么它在部署时表现不同?如果我将 Web 部件放在网站集的不同区域,为什么会显示不同的错误。

更新:我试图使用这个:

import pnp from "sp-pnp-js";



public onInit(): Promise<void> {

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

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

  });
}

但我不知道如何实现它,因为 onInit 是 Angular 不是吗?

帮助!

4

2 回答 2

1

弄清楚了.....

确保放置:

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

从“sp-pnp-js”导入 pnp;

// ...

公共 onInit(): 承诺 {

返回 super.onInit().then(_ => {

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

}); 在你的根 .ts 文件中!!!!!!

这让我好几天!

于 2019-12-02T13:37:39.730 回答
1

出现此问题的原因是 PnP JS API 未获取 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 文件中使用此属性初始化 Web 参数。

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

并使用它使用 pnp-js 从所需列表中获取数据。

于 2019-12-03T15:22:38.987 回答