SharePoint 2010 禁用列表或文档库新建文件夹命令的三种方法

本文介绍如何在SharePoint环境中禁用新建文件夹功能,包括通过Feature定义、C#代码及直接在库或列表设置中操作的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 前面的文章里分别介绍了如何通过TrimById及Css来隐藏Ribbon菜单命令项或Ribbon菜单,文章链接如下:

http://blog.youkuaiyun.com/sygwin_net/article/details/6789973

http://blog.youkuaiyun.com/sygwin_net/article/details/6790381

本文将介绍如何快速隐藏列表或文档库的新建文件夹命令项:

操作环境:Windows Server 2008 r2+ SharePoint 2010

1.通过Feature来实现

1.1如果你想针对列表来隐藏新建文件夹命令,Feature代码如下:

 <CustomAction Id="Remove.ListItem.NewFolder" Location="CommandUI.Ribbon">     
  <CommandUIExtension>       
  <CommandUIDefinitions>         
  <CommandUIDefinition Location="Ribbon.ListItem.New.NewFolder" />       
  </CommandUIDefinitions>     
  </CommandUIExtension> 
</CustomAction> 
1.2如果你想针对文档库来隐藏新建文件夹命令,Feature如下:
<CustomAction Id="Remove.Document.NewFolderButton" Location="CommandUI.Ribbon" RegistrationId="0x0101" RegistrationType="ContentType"> 
<CommandUIExtension>       
<CommandUIDefinitions> 
<CommandUIDefinition Location="Ribbon.Documents.New.NewFolder" />       
</CommandUIDefinitions>     
</CommandUIExtension> 
</CustomAction> 
1.3如果你想同时针对列表和文档库 来隐藏新建文件夹命令,Feature如下:
<?xmlversion="1.0"encoding="utf-8"?>
<Elementsxmlns="http://schemas.microsoft.com/sharepoint/">
  <CustomAction
    Id="Remove.ListItem.NewFolder"
    Location="CommandUI.Ribbon">
    <CommandUIExtension>
      <CommandUIDefinitions>
        <CommandUIDefinition
          Location="Ribbon.ListItem.New.NewFolder"/> 
      </CommandUIDefinitions>
    </CommandUIExtension>
  </CustomAction>
  <CustomAction
    Id="Remove.Document.NewFolderButton"
    Location="CommandUI.Ribbon"RegistrationId="0x0101" 
    RegistrationType="ContentType">
    <CommandUIExtension>
      <CommandUIDefinitions>
        <CommandUIDefinition
          Location="Ribbon.Documents.New.NewFolder"/> 
      </CommandUIDefinitions>
    </CommandUIExtension>
  </CustomAction>
</Elements>



2.通过c#代码来实现:

无论是列表还是文档库都有一个.EnableFolderCreation 属性,它可以控制是否启用新建文件夹命令。

SPSite spSite = new SPSite("http://sp2010vm");
            foreach (SPWeb spWeb in spSite.AllWebs)
            {
                spWeb.AllowUnsafeUpdates = true;

                SPListCollection lists = spWeb.Lists;
                for (int i = 0; i < lists.Count; i++)
                {
                    if (lists[i] is SPDocumentLibrary)
                    {
                        if (((SPDocumentLibrary)lists[i]).IsCatalog == false)
                        {
                            SPDocumentLibrary spList = (SPDocumentLibrary)lists[i];
                            if (spList.Title == "Classified Documents")
                            {
                                ////Update the list properties
                                spList.EnableFolderCreation = false;
                                spList.Update();
                            }
                        }
                    }
                }

                spWeb.AllowUnsafeUpdates = false;
                spWeb.Dispose();                   
            }

            spSite.Dispose();


3.库设置--高级设置--     是否提供“新建文件夹”命令

列表设置--高级设置--     是否提供“新建文件夹”命令

 
原文:http://www.jonathanpmast.com/blog/post/2011/01/03/How-To-Disable-e2809cNew-Foldere2809d-button-in-the-SharePoint-2010-Ribbon-via-Feature.aspx

http://social.msdn.microsoft.com/Forums/zh-CN/sharepoint2010programming/thread/4ff1a83b-a800-4eff-8cd2-23ae7193e72e

 
 
 

                
<think>好的,用户之前问过如何用VSTO在Word中做一个文件上传功能,并且搭建一个WebAPI来接收文件。我之前已经给出了详细的步骤和代码示例。现在用户的新请求是希望得到在Visual Studio 2022中的具体步骤。这意味着用户可能已经按照之前的指导尝试过,但需要更详细的VS操作指南,者他们刚开始接触VS2022,需要更明确的步骤。 首先,我需要确定用户的具体需求。他们可能对Visual Studio的环境不熟悉,特别是VSTO和ASP.NET Core项目的创建步骤。需要分两部分回答:VSTO插件开发和WebAPI服务端开发,每个部分在VS2022中的具体操作。 接下来,要回忆在VS2022中创建VSTO项目的流程。VSTO项目模板可能不在默认安装中,需要确保用户安装了Office开发工具。因此,第一步应该检查Visual Studio安装器中的相关组件是否已安装。这可能会影响用户能否找到项目模板,所以需要提醒用户如何检查和安装。 然后,关于创建VSTO项目的步骤,需要详细说明新建项目时选择哪个模板,项目类型的位置(如Visual C#VB.NET下的Office/SharePoint),以及如何选择Word外接程序。还要注意.NET Framework版本的选择,因为VSTO可能有版本限制,推荐使用较新的版本如4.8。 在添加Ribbon按钮的部分,需要说明如何通过添加新项来选择Ribbon(Visual Designer)模板,者使用XML方式。考虑到用户可能更倾向于可视化设计,使用Visual Designer会更友好,但也要提到XML方式的存在。代码示例需要与之前的一致,但可能需要更详细的步骤,比如如何在设计器中拖放按钮,设置属性和事件处理程序。 文件选择对话框部分,需要确认在VSTO中使用OpenFileDialog是否正确,是否存在权限问题,特别是在Word插件中运行时。需要提醒用户注意文件路径的获取和异常处理,比如文件被占用的情况。 文件上传的HTTP客户端部分,要确保使用HttpClient的正确方式,异步方法的使用,以及处理可能出现的异常,比如网络问题API不可用。需要提醒用户添加必要的NuGet包,比如System.Net.Http,并处理异步操作,避免阻塞UI线程。 然后是WebAPI部分,创建ASP.NET Core Web API项目的步骤,选择正确的模板,配置CORS中间件的顺序(在ConfigureServices中添加服务,在Configure中启用),以及控制器的创建。需要详细说明如何在Startup.csProgram.cs中配置CORS,确保允许所有来源仅用于测试环境,并提醒用户在生产环境中应限制来源。 文件上传控制器的部分,需要解释IWebHostEnvironment的作用,如何获取上传路径,处理多文件上传的情况(虽然用户示例中用了Files[0],但可能需要更健壮的检查,比如文件是否存在,大小是否合法)。还要注意设置请求大小限制,避免大文件上传失败,并建议使用异步方法以提高性能。 注意事项方面,安全措施非常重要,特别是用户上传文件可能带来的风险。需要强调验证文件类型、扫描病毒、权限控制等。性能优化部分,分块上传和进度反馈可以提升用户体验,尤其是大文件上传时。错误处理需要涵盖客户端和服务端的日志记录,以及友好的错误提示。 测试步骤部分,建议用户先测试WebAPI,使用Postman发送POST请求,验证是否能正确接收文件。然后再在VSTO插件中集成上传功能,调试插件的响应和错误处理。可能还需要指导用户如何调试VSTO插件,附加到Word进程,查看输出信息。 扩展建议部分,可以提到云存储集成,这样用户不需要自己管理文件存储,提高可扩展性和可靠性。版本控制对于文档管理很有用,特别是如果用户需要维护不同版本的上传文件。元数据管理可以帮助用户跟踪文件的附加信息,比如上传时间、用户信息等。 最后,常见问题解答需要预见到用户可能遇到的问题,比如项目模板找不到,需要安装相应的工作负载;文件上传失败的原因可能有权限问题、路径错误大小限制;以及调试插件时的注意事项,比如启用Office开发工具,处理加载项被禁用的情况。 整个思考过程中,需要确保步骤清晰,语言简洁,避免专业术语过多,适合不同层次的用户理解。同时,代码示例要准确,符合VS2022的环境设置,比如ASP.NET Core 67的启动程序结构可能使用顶级语句,而不是传统的Startup类,这需要注意调整代码示例。此外,需要提醒用户替换示例中的URL和路径为实际部署的环境,避免直接复制代码导致的运行错误。</think>在Visual Studio 2022中实现Word文件上传到WebAPI的具体步骤如下: 一、VSTO插件开发(客户端) 1. 安装准备 - 打开VS安装程序 → 勾选`.NET桌面开发`和`Office/SharePoint开发`工作负载 - 确保已安装`Microsoft.Office.Tools`相关组件 2. 创建项目 - 文件 → 新建 → 项目 → 搜索`Word VSTO` → 选择`Word 2019 和更高版本的外接程序` - 目标框架选择`.NET Framework 4.8` - 项目名称示例:`WordFileUploadAddin` 3. 添加Ribbon按钮 ```csharp // 右键项目 → 添加 → 新建项 → Office → Ribbon (可视化设计器) public partial class Ribbon1 { private void Ribbon1_Load(object sender, RibbonUIEventArgs e) { } private void button1_Click(object sender, RibbonControlEventArgs e) { // 上传逻辑 } } ``` 4. 实现文件选择 ```csharp var openFileDialog = new OpenFileDialog { Filter = "Word文件|*.docx;*.doc", Title = "选择要上传的Word文档" }; if (openFileDialog.ShowDialog() == DialogResult.OK) { string selectedFilePath = openFileDialog.FileName; await UploadFile(selectedFilePath); } ``` 5. 配置HttpClient(NuGet安装`Microsoft.AspNet.WebApi.Client`) ```csharp private async Task UploadFile(string filePath) { using (var client = new HttpClient()) { client.Timeout = TimeSpan.FromMinutes(5); var content = new MultipartFormDataContent(); var fileStream = File.OpenRead(filePath); content.Add(new StreamContent(fileStream), "file", Path.GetFileName(filePath)); try { var response = await client.PostAsync("http://localhost:5000/api/upload", content); response.EnsureSuccessStatusCode(); MessageBox.Show("上传成功"); } catch (Exception ex) { MessageBox.Show($"上传失败: {ex.Message}"); } } } ``` 二、WebAPI服务端开发 1. 创建项目 - 文件 → 新建 → 项目 → 搜索`ASP.NET Core Web API` → 选择模板 - 项目名称示例:`FileUploadWebAPI` - 取消勾选`Use controllers` → 后续手动添加控制器 2. 配置CORS(Program.cs) ```csharp builder.Services.AddCors(options => { options.AddPolicy("AllowVSTO", policy => { policy.WithOrigins("http://localhost") // 根据实际地址修改 .AllowAnyHeader() .AllowAnyMethod(); }); }); app.UseCors("AllowVSTO"); ``` 3. 添加文件上传端点 ```csharp var builder = WebApplication.CreateBuilder(args); var app = builder.Build(); app.MapPost("/api/upload", async (HttpRequest request) => { if (!request.HasFormContentType) return Results.BadRequest("Invalid form content"); var file = request.Form.Files[0]; if (file.Length == 0) return Results.BadRequest("Empty file"); var uploads = Path.Combine(app.Environment.ContentRootPath, "Uploads"); Directory.CreateDirectory(uploads); var filePath = Path.Combine(uploads, file.FileName); using (var stream = new FileStream(filePath, FileMode.Create)) { await file.CopyToAsync(stream); } return Results.Ok(new { FileSize = file.Length, SavedPath = filePath }); }); app.Run(); ``` 三、调试配置 1. 同时运行两个项目: - 解决方案资源管理器 → 右键解决方案 → 属性 → 启动项目 → 选择`多启动项目` - 设置两个项目的操作都为`启动` 2. 设置Word插件权限: - 项目属性 → 安全性 → 启用"ClickOnce安全设置" - 选择"这是完全可信的应用程序" 四、常见问题处理 1. 插件未加载问题: - 打开Word → 文件 → 选项 → 加载项 → 管理COM加载项 → 勾选已安装的插件 2. 文件上传大小限制: ```csharp // 在WebAPI的Program.cs中添加 builder.WebHost.ConfigureKestrel(serverOptions => { serverOptions.Limits.MaxRequestBodySize = 100_000_000; // 100MB }); ``` 3. 调试技巧: - 在插件代码中设置断点 → 按F5启动 → VS会自动附加到Word进程 - 使用`Debug.WriteLine()`输出调试信息到输出窗口 五、部署步骤 1. 发布VSTO插件: - 右键插件项目 → 发布 → 选择发布位置 - 生成的`setup.exe`用于客户端安装 2. 部署WebAPI: - 右键API项目 → 发布 → 选择发布到文件夹 - 将生成文件部署到IIS云服务器 建议测试流程: 1. 先用Postman测试API接口 2. 在Word中测试插件按钮功能 3. 检查服务器Uploads目录是否生成文件 4. 查看调试控制台输出信息 完整项目结构应包含: ``` 解决方案 ├── WordFileUploadAddin (VSTO) │ ├─ Ribbon1.cs │ └─ ThisAddIn.cs └── FileUploadWebAPI (WebAPI) ├─ Program.cs └─ Uploads/ 目录 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值