如何使用PnP.js访问子站点并操作SharePoint列表项?
用PnP.js访问子站点列表的实现方法
要访问子站点的列表或在子站点创建列表项,核心是先构造对应子站点的Web实例,再基于这个实例操作列表。下面是两种常用的实现方式:
方法一:直接指定子站点相对路径创建Web实例
如果已经知道子站点的服务器相对路径,可以直接用getWeb()方法构造子站点的Web对象,后续所有操作都基于这个对象执行:
// 替换为你的子站点服务器相对路径,比如当前站点的直接子站点路径为 "/subsite" const subsiteWeb = pnp.sp.web.getWeb("/sites/parentSite/subsite"); // 后续操作和原代码逻辑一致,只是把pnp.sp.web换成subsiteWeb subsiteWeb.lists.getByTitle("t").reserveListItemId().then(v => { subsiteWeb.lists.getByTitle("t").items.add({ ID: v, Title: v.toString(), }).then(function (Data) { // 这里写你的后续处理代码 }); });
方法二:通过当前站点获取子站点对象
如果不知道子站点的具体路径,但知道标题等标识,可以先从当前站点的子站点集合中筛选出目标站点,再构造Web实例:
// 通过子站点标题筛选(也可以用其他属性比如Url) pnp.sp.web.webs.filter("Title eq '目标子站点标题'").get().then(subsites => { if (subsites.length > 0) { // 获取子站点的服务器相对路径,构造Web对象 const subsiteWeb = pnp.sp.web.getWeb(subsites[0].ServerRelativeUrl); // 执行列表操作 subsiteWeb.lists.getByTitle("t").reserveListItemId().then(v => { subsiteWeb.lists.getByTitle("t").items.add({ ID: v, Title: v.toString(), }).then(function (Data) { // 后续处理代码 }); }); } });
注意事项
- 确保当前用户对目标子站点拥有对应的权限(比如读取列表、添加项的权限),否则会返回权限错误
- 子站点的服务器相对路径要准确,比如根站点下的子站点路径一般是
/sites/根站点名/子站点名,当前站点的直接子站点路径是/当前站点相对路径/子站点名 - 可以将构造好的
subsiteWeb实例缓存起来,避免重复创建,提升代码效率
内容的提问来源于stack exchange,提问作者javad daryabari
相关产品推荐
相关产品推荐

