SharePoint利用command set 扩展定制化LIST

653 阅读2分钟

这是我参与11月更文挑战的第5天,活动详情查看:11月更文挑战

主要用途:启动外部进程+选择按钮时执行自定义脚本

1.生成SharePoint Framework 框架

yo @microsoft/sharepoint

Use the following to complete the prompt that is displayed (if additional options are presented, accept the default answer) :

  • Which type of client-side component to create? : Extension
  • What type of client-side extension to create? : ListView Command Set
  • What is your Command Set name? : CommandSetDemo

2.定义命令集按钮

manifest.json 这个文件决定什么能显示出来

"items": {
  "ONE_ITEM_SELECTED": {
    "title": { "default": "One Item Selected" },
    "iconImageUrl": "icons/request.png",
    "type": "command"
  },
  "TWO_ITEM_SELECTED": {
    "title": { "default": "Two Items Selected" },
    "iconImageUrl": "icons/cancel.png",
    "type": "command"
  },
  "ALWAYS_ON": {
    "title": { "default": "Always On" },
    "iconImageUrl": "icons/cancel.png",
    "type": "command"
  }
}

./src/extensions/commandSetDemo/CommandSetDemoCommandSet.ts

接口ICommandSetDemoCommandSetProperties 更新成员变量:

messagePrefix: string;

onListViewUpdated() in the CommandSetDemoCommandSet.

const one_item_selected: Command = this.tryGetCommand('ONE_ITEM_SELECTED');
if (one_item_selected) {
  one_item_selected.visible = event.selectedRows.length === 1;
}
const two_item_selected: Command = this.tryGetCommand('TWO_ITEM_SELECTED');
if (two_item_selected) {
  two_item_selected.visible = event.selectedRows.length === 2;
}

onExecute()CommandSetDemoCommandSet

switch (event.itemId) {
  case 'ONE_ITEM_SELECTED':
    Dialog.alert(`${this.properties.messagePrefix} ONE_ITEM_SELECTED command checked; Title = ${event.selectedRows[0].getValueByName('Title')}`);
    break;
  case 'TWO_ITEM_SELECTED':
    Dialog.alert(`${this.properties.messagePrefix} TWO_ITEM_SELECTED command checked; Title = ${event.selectedRows[event.selectedRows.length-1].getValueByName('Title')}`);
    break;
  case 'ALWAYS_ON':
    Dialog.alert(`${this.properties.messagePrefix} ALWAYS_ON command checked. Total selected: ${event.selectedRows.length}`);
    break;
  default:
    throw new Error('Unknown command');
}

onInit()方法返回一个Promise对象,可用于执行任何需要在呈现命令集之前完成的初始化代码。

接下来,执行onListViewUpdated()事件。当命令集按钮首次呈现在页面上以及列表视图状态更改时,将调用此方法。页面上呈现的每个按钮都会调用此方法,因此如果您在组件的清单中注册了三个按钮,则每次列表视图状态更改时都会调用此方法三次。

最后一步是实现onExecute()用户选择按钮时调用的事件。与onListViewUpdated()事件类似,这是在组件清单中注册的所有按钮之间共享的方法。您可以使用传递给itemIdIListViewCommandSetExecuteEventParameters对象上的属性onExecute()来确定哪个按钮触发了单击事件。

  • 在页面上加载 SharePoint 框架(如果尚不存在)
  • 来自本地 Web 服务器的manifest.js文件的位置,该文件告诉 SharePoint 可以在页面上放置哪些自定义组件
  • SharePoint 框架应加载并放置在页面上的哪个组件
  • 特定于每个组件的附加属性

3.更新部署配置

./sharepoint/assets/elements.xml

ClientSideComponentProperties="{"messagePrefix":"[command_set_prefix]"}"

这还是相当于xml写JSON

4.测试Command Set

打开 ./config/serve.json文件。

复制列表属性的完整 URL(包括AllItems.aspxserveConfigurations.default.pageUrl

找到serveConfigurations.default.customActions.properties对象。

properties对象的值更改为以下 JSON:

"properties": {
  "messagePrefix": "[command_set_prefix]"
}

通过执行以下命令运行项目:

gulp serve

image.png

image.png 选一个选两个会引起显示的不一样,点击Always on 会弹窗,创建了一个 SharePoint 框架 (SPFx) 命令集扩展,用于在 SharePoint 列表中显示自定义按钮。主要用途:启动外部进程+选择按钮时执行自定义脚本 还是有一点点用处的,不至于太没用