You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否通过代码在SharePoint Online创建Enterprise Keyword(优先JavaScript)?

在SharePoint中通过代码创建Enterprise Keyword(优先JavaScript实现)

Enterprise Keyword本质是Managed Metadata Service(MMS)中「Keywords」术语集下的Term。要通过代码创建并分配给文件,优先用JavaScript+SharePoint REST API实现,以下是具体方案:

一、JavaScript + REST API 实现(适用于SharePoint Online/2019+)

步骤说明

  1. 定位到「Keywords」术语集的ID;
  2. 向该术语集添加新的Term(即Enterprise Keyword);
  3. 可选:将新创建的关键字分配给指定文件。

代码示例

// 获取当前站点对应的Keywords术语集ID
fetch(`${_spPageContextInfo.webAbsoluteUrl}/_api/v2.1/termStore/sets?$filter=name eq 'Keywords'`, {
  headers: {
    'Accept': 'application/json;odata=nometadata'
  }
})
.then(res => res.json())
.then(data => {
  if (!data.value || data.value.length === 0) {
    console.error('未找到Keywords术语集');
    return;
  }
  const keywordSetId = data.value[0].id;
  // 创建新关键字,替换为你需要的名称
  addNewKeyword(keywordSetId, "项目迭代v1");
})
.catch(err => console.error('获取术语集失败:', err));

// 向Keywords术语集添加新关键字
function addNewKeyword(setId, keywordName) {
  fetch(`${_spPageContextInfo.webAbsoluteUrl}/_api/v2.1/termStore/sets(${setId})/terms`, {
    method: 'POST',
    headers: {
      'Accept': 'application/json;odata=nometadata',
      'Content-Type': 'application/json',
      'X-RequestDigest': document.getElementById('__REQUESTDIGEST').value
    },
    body: JSON.stringify({
      labels: [
        {
          name: keywordName,
          languageTag: 'zh-CN', // 按实际语言调整,英文用'en-US'
          isDefault: true
        }
      ]
    })
  })
  .then(res => res.json())
  .then(newTerm => {
    console.log('关键字创建成功:', newTerm);
    // 可选:将关键字分配给指定文件,替换为你的文件路径
    assignKeywordToFile(newTerm.id, keywordName, "/sites/TeamSite/Shared Documents/需求文档.docx");
  })
  .catch(err => console.error('创建关键字失败:', err));
}

// 将关键字分配给目标文件
function assignKeywordToFile(termId, keywordName, fileUrl) {
  fetch(`${_spPageContextInfo.webAbsoluteUrl}/_api/web/getfilebyserverrelativeurl('${fileUrl}')/listitemallfields`, {
    method: 'POST',
    headers: {
      'Accept': 'application/json;odata=nometadata',
      'Content-Type': 'application/json;odata=nometadata',
      'X-RequestDigest': document.getElementById('__REQUESTDIGEST').value,
      'IF-MATCH': '*',
      'X-HTTP-Method': 'MERGE'
    },
    body: JSON.stringify({
      // Enterprise Keyword字段的内部名称固定为TaxKeyword
      TaxKeyword: {
        __metadata: { type: 'SP.Taxonomy.TaxonomyFieldValue' },
        Label: keywordName,
        TermGuid: termId,
        WssId: -1
      }
    })
  })
  .then(res => {
    res.ok ? console.log('关键字已分配给文件') : console.error('分配失败');
  })
  .catch(err => console.error('分配关键字出错:', err));
}

注意事项

  • 执行代码的用户必须拥有Term Store Contributor权限,否则无法创建新术语;
  • REST API v2.1仅支持SharePoint Online及2019以上版本,旧版本需改用CSOM;
  • 语言标签需与Term Store的默认语言匹配,避免出现显示异常。

二、备选方案:C# CSOM 实现(适用于全版本SharePoint)

如果无法使用JavaScript/REST API,可采用C# CSOM方案:

using Microsoft.SharePoint.Client;
using Microsoft.SharePoint.Client.Taxonomy;
using System;
using System.Security;

public static void CreateAndAssignEnterpriseKeyword()
{
    string siteUrl = "https://yourtenant.sharepoint.com/sites/TeamSite";
    string keywordName = "项目迭代v1";
    string fileRelativeUrl = "/sites/TeamSite/Shared Documents/需求文档.docx";
    string username = "user@tenant.onmicrosoft.com";
    string password = "yourpassword";

    using (var ctx = new ClientContext(siteUrl))
    {
        // SharePoint Online认证,本地环境可改用NetworkCredential
        ctx.Credentials = new SharePointOnlineCredentials(username, ConvertToSecureString(password));

        // 获取默认Term Store及Keywords术语集
        var taxonomySession = TaxonomySession.GetTaxonomySession(ctx);
        var termStore = taxonomySession.GetDefaultSiteCollectionTermStore();
        var keywordSet = termStore.GetTermSet("Keywords"); // 也可直接用术语集ID

        // 创建新关键字(2052是中文LCID,英文用1033)
        var newKeyword = keywordSet.CreateTerm(keywordName, 2052, Guid.NewGuid());
        ctx.Load(newKeyword);
        ctx.ExecuteQuery();

        Console.WriteLine($"关键字创建完成,ID: {newKeyword.Id}");

        // 分配关键字到文件
        AssignKeywordToFile(ctx, newKeyword, fileRelativeUrl);
    }
}

private static void AssignKeywordToFile(ClientContext ctx, Term keyword, string fileUrl)
{
    var file = ctx.Web.GetFileByServerRelativeUrl(fileUrl);
    var listItem = file.ListItemAllFields;
    ctx.Load(listItem);
    ctx.ExecuteQuery();

    var taxFieldValue = new TaxonomyFieldValue
    {
        Label = keyword.Name,
        TermGuid = keyword.Id.ToString(),
        WssId = -1
    };

    listItem["TaxKeyword"] = taxFieldValue;
    listItem.Update();
    ctx.ExecuteQuery();

    Console.WriteLine("关键字已分配给目标文件");
}

private static SecureString ConvertToSecureString(string password)
{
    var securePwd = new SecureString();
    foreach (char c in password) securePwd.AppendChar(c);
    return securePwd;
}

注意事项

  • 需安装NuGet包Microsoft.SharePointOnline.CSOM或对应版本的CSOM库;
  • 用户需同时拥有Term Store编辑权限和文件所在列表的编辑权限。

内容的提问来源于stack exchange,提问作者martirodm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 23:15:08