【问题标题】:How to set a SharePoint list field using a pnp.sp People Picker如何使用 pnp.sp 人员选取器设置 SharePoint 列表字段
【发布时间】:2019-12-24 20:18:19
【问题描述】:

我不知道添加用户的代码,从 pnp.sp 库的人员选取器中选择。

我已经尝试了下面的代码示例(通过使用 State),但我知道这并没有保存用户的选择。

private _getPeoplePickerItems() {
    pnp.sp.web.siteUsers.get().then((data) =>{
      this.setState({
        DeptContact: data
      });
    });
}

渲染中的人物选择器:

<PeoplePicker
            context={this.props.context}
            titleText="People Picker"
            personSelectionLimit={3}
            groupName={''} 
            showtooltip={false}
            isRequired={false}
            disabled={false}
            selectedItems={this._getPeoplePickerItems}
            showHiddenInUI={false}
            principalTypes={[PrincipalType.User]}
            resolveDelay={1000} 
            />  
          </div>
          </div>


我希望用户能够将用户输入到人员选择器中并解决它,然后提交它。然后将此用户添加到共享点列表中的“人员”列中。

【问题讨论】:

    标签: sharepoint-online spfx


    【解决方案1】:

    我的测试代码供你参考(react 框架)。

    import * as React from 'react';
    import styles from './PnpReact.module.scss';
    import { IPnpReactProps } from './IPnpReactProps';
    import { escape } from '@microsoft/sp-lodash-subset';
    import pnp from "@pnp/pnpjs";
    
    import { PeoplePicker, PrincipalType } from "@pnp/spfx-controls-react/lib/PeoplePicker";
    
    
    export interface IDefaultData{ 
      PeoplePickerDefaultItems:string[];
    }
    export default class PnpReact extends React.Component<IPnpReactProps, IDefaultData> {
    
      public constructor(props: IPnpReactProps,state: IDefaultData){ 
        super(props); 
        this.state = { 
          PeoplePickerDefaultItems:[] 
        }; 
      }
    
      //get users from peoplepicker
      private _getPeoplePickerItems(items: any[]) {      
        console.log(items);      
    }
    
    public componentDidMount(){
      this.GetDefaultUsers();  
    }
    private GetDefaultUsers() {    
      pnp.sp.web.siteUsers.get().then((items: any[]) =>{        
        var defaultUsers:string[]=[];
        //get last 2 users    
        for(var i=items.length-1;i>items.length-3;i--){      
          defaultUsers.push(items[i].Email);
        }    
        this.setState({ 
          PeoplePickerDefaultItems:defaultUsers
        });     
      });  
    }
    
      public render(): React.ReactElement<IPnpReactProps> {
    
        return (
          <div className={ styles.pnpReact }>
            <div className={ styles.container }>
              <div className={ styles.row }>
              <PeoplePicker
                context={this.props.context}
                titleText="People Picker"
                personSelectionLimit={3}
                groupName={''} 
                showtooltip={false}
                isRequired={false}
                disabled={false}
                selectedItems={this._getPeoplePickerItems}   
                defaultSelectedUsers={this.state.PeoplePickerDefaultItems}          
                showHiddenInUI={false}
                principalTypes={[PrincipalType.User]}
                resolveDelay={1000} 
                />  
                <div className={ styles.column }>
                  <span className={ styles.title }>Welcome to SharePoint!</span>
                  <p className={ styles.subTitle }>Customize SharePoint experiences using Web Parts.</p>
                  <p className={ styles.description }>{escape(this.props.description)}</p>
                  <a href="https://aka.ms/spfx" className={ styles.button }>
                    <span className={ styles.label }>Learn more</span>
                  </a>
                </div>
              </div>
            </div>
          </div>
        );
      }
    }
    

    【讨论】:

    • GetDefaultUsers() 似乎引入了网站集或租户中的所有用户(我对此表示怀疑,但无论如何......)。我想要一种将人员选择器中选择的单个选定用户保存到列表中的字段的方法。上面提供的代码没有这样做。我知道如何将存储在状态中的值提交给字段,但首先需要知道如何将该单个值放入状态。谢谢。
    • 嗨 - 在帮助下了解如何做到这一点: private _getPeoplePickerItems(items) { console.log(items); this.setState({ DeptContact:items[0].id });对于提交:DeptContactId:this.state.DeptContact 这里的关键是从保存到 DeptContact 状态的对象数组中获取 ID。 pnp.sp 是 REST 的包装器......所以获取 Id 的唯一方法是使用关键字 DeptContactId(Id 在末尾)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-25
    • 2014-07-03
    相关资源
    最近更新 更多