Sharepoint

1.介绍

客户端模型是SharePoint 2010才提供的,可以更灵活的在任何客户端设备中操作SharePoint对象,在2007版本中没有客户端模型,2010中有三种客户端模型JavaScript,SilverLight,.NET Managed。下面是对比情况:

 

image      image

 

2.原理

当我们使用客户端模型访问SharePoint 2010服务器对象的时候,请求首先会被打包成XML格式的SharePoint对象模型,然后在由客户端发送到服务器端,在服务器端调用服务器端的对象模型,。然后得到反应结果以JSON

格式发给客户端对象模型,客户端模型在解析得到的结果,展现给前端,如下图:

image

3.客户端模型对象

服务器端客户端Javascript
Microsoft.SharePoint.SPContextMicrosoft.SharePoint.Client.ClientContextSP.ClientContext
Microsoft.SharePoint.SPSiteMicrosoft.SharePoint.Client.SiteSP.Site
Microsoft.SharePoint.SPWebMicrosoft.SharePoint.Client.WebSP.Web
Microsoft.SharePoint.SPListMicrosoft.SharePoint.Client.ListSP.List
Microsoft.SharePoint.SPListItemMicrosoft.SharePoint.Client.ListItemSP.ListItem
Microsoft.SharePoint.SPFieldMicrosoft.SharePoint.Client.FieldSP.Field

4.一些例子代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;

namespace OM
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Cursor old = this.Cursor;
            this.Cursor = Cursors.WaitCursor;

            Microsoft.SharePoint.Client.ClientContext clientContext = new Microsoft.SharePoint.Client.ClientContext("http://moss2010/sites/test");
            NetworkCredential nwc = CredentialCache.DefaultNetworkCredentials;
            clientContext.Credentials = nwc;
            Microsoft.SharePoint.Client.Web web = clientContext.Web;

            clientContext.Load(web);
            clientContext.ExecuteQuery();

            this.lblSiteTitle.Text = web.Title;

            this.Cursor = old;

        }

        private void button2_Click(object sender, EventArgs e)
        {
            Cursor old = this.Cursor;
            this.Cursor = Cursors.WaitCursor;

            Microsoft.SharePoint.Client.ClientContext clientContext = new Microsoft.SharePoint.Client.ClientContext("http://moss2010/sites/test");
            NetworkCredential nwc = CredentialCache.DefaultNetworkCredentials;
            clientContext.Credentials = nwc;
            Microsoft.SharePoint.Client.Web web = clientContext.Web;

            var query = from list
                        in clientContext.Web.Lists
                        where list.Title == "SharePoint Team Members"
                        select list;

            var result = clientContext.LoadQuery(query);
            clientContext.ExecuteQuery();

            Microsoft.SharePoint.Client.List listMember = result.SingleOrDefault<Microsoft.SharePoint.Client.List>();

            Microsoft.SharePoint.Client.CamlQuery caml = new Microsoft.SharePoint.Client.CamlQuery();
            caml.ViewXml = @"<View><Query></Query></View>";

            Microsoft.SharePoint.Client.ListItemCollection listItems = listMember.GetItems(caml);
            clientContext.Load(listItems);
            clientContext.ExecuteQuery();

            List<Employee> allDatas = new List<Employee>();
            foreach (Microsoft.SharePoint.Client.ListItem item in listItems)
            {
                allDatas.Add(new Employee(item["Title"], item["Age"], item["Sex"]));
            }
            dataGridView1.DataSource = allDatas;

            this.Cursor = old;
        }

        private void button3_Click(object sender, EventArgs e)
        {
            Microsoft.SharePoint.Client.ClientContext clientContext = new Microsoft.SharePoint.Client.ClientContext("http://moss2010/sites/test");
            NetworkCredential nwc = CredentialCache.DefaultNetworkCredentials;
            clientContext.Credentials = nwc;
            Microsoft.SharePoint.Client.Web web = clientContext.Web;

            var query = from list
                        in clientContext.Web.Lists
                        where list.Title == "SharePoint Team Members"
                        select list;

            var result = clientContext.LoadQuery(query);
            clientContext.ExecuteQuery();

            Microsoft.SharePoint.Client.List listMember = result.SingleOrDefault<Microsoft.SharePoint.Client.List>();

            Microsoft.SharePoint.Client.CamlQuery caml = new Microsoft.SharePoint.Client.CamlQuery();
            caml.ViewXml = @"<View><Query><Where><Eq><FieldRef Name='Employee_x0020_Name' /><Value Type='Text'>" + tbxInput.Text + "</Value></Eq></Where></Query></View>";

            Microsoft.SharePoint.Client.ListItemCollection listItems = listMember.GetItems(caml);
            clientContext.Load(listItems);
            clientContext.ExecuteQuery();

            this.lblOutput.Text = listItems[0].FieldValues["Title"].ToString();

            this.Cursor = old;
        }
    }

    public class Employee
    {
        public Employee(object title, object age, object sex)
        {
            this.Age = age;
            this.Sex = sex;
            this.Title = title;
        }
        public object Title { get; set; }
        public object Age { get; set; }
        public object Sex { get; set; }
    }
}

 

ClientContext clientContext = new ClientContext("http://servername/");
clientContext.ExecutingWebRequest += new EventHandler<WebRequestEventArgs>(clientContext_ExecutingWebRequest);
Web site = clientContext.Web;
clientContext.Load(site);
clientContext.ExecuteQuery();
static void clientContext_ExecutingWebRequest(object sender, WebRequestEventArgs e)
{
    e.WebRequestExecutor.WebRequest.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f");
}

 

Uri uri = new Uri("http://tempuri.org/");
ICredentials credentials = CredentialCache.DefaultCredentials;
NetworkCredential credential = credentials.GetCredential(uri, "Basic");

 

转载于:https://www.cnblogs.com/MarchThree/p/3728872.html

<think>嗯,用户这次的问题很明确,是关于Microsoft SharePoint的使用指南。用户可能是企业IT管理员或者需要协作办公的团队成员,想系统了解SharePoint的核心功能。 从用户提供的引用材料看,ta似乎对开发集成(比如API调用)和实时通知功能特别关注。虽然引用里的代码示例是C#的,但用户没明确要求技术实现,所以回复应该侧重产品功能层面。 SharePoint功能庞大,需要分层说明: 基础部分要覆盖文档库、列表和权限管理——这是企业最常用的核心功能。中级功能包括工作流和搜索,高级部分涉及开发集成。用户提到"使用指南",说明需要实操建议,所以每个功能点都要附带具体操作路径,比如"在站点设置中点击..."这样的指引。 注意到用户上次的问题涉及API开发,这次虽然没提,但可能在后续问题中深入。所以我在"相关问题"里预设了API集成的选项,作为延伸入口。另外,特别标出了Webhook功能的位置,回应用户引用材料里的关注点。 安全方面要强调,因为权限设置错误是常见问题。特意把权限管理单独作为一级标题,并给出检查清单(检查成员组、继承关系等)。所有操作示例都基于SharePoint Online最新界面,避免用户按过时教程操作。 最后的相关问题设计成阶梯式:从基础部署到高级开发,覆盖不同层次用户可能产生的疑问。这样无论用户是新手还是开发者,都能找到延伸点。</think>以下是为您整理的Microsoft SharePoint核心功能使用指南及解决方案,帮助您高效掌握这一协作平台: --- ### **一、基础功能操作指南** 1. **文档库管理** - **创建文档库**:站点内容 → 新建 → 文档库 - **版本控制**:在文档库设置中启用「版本历史记录」,支持查看/恢复历史版本 - **权限设置**:右键文档库 → 权限 → 停止继承权限后自定义用户组(如编辑者/读者) 2. **列表与数据管理** - **自定义列表**:新建列表 → 从Excel导入或手动添加字段(日期/选项/计算公式等) - **视图配置**:创建筛选视图(如显示“未批准”条目)、分组/排序数据 ```powershell # PowerShell示例:批量导出列表数据 Connect-PnPOnline -Url https://yourtenant.sharepoint.com/sites/yoursite -Interactive Get-PnPListItem -List "项目列表" | Export-CSV -Path "C:\data.csv" ``` 3. **站点与页面构建** - **创建子站点**:主站点设置 → 站点内容 → 新建子站点(适用于部门独立空间) - **现代页面编辑**:使用「Web部件」添加文本/图像/视频/文档库动态视图 - **导航定制**:站点设置 → 导航设置 → 调整顶部/左侧菜单结构 --- ### **二、常见问题解决方案 #### **问题1:外部用户无法访问共享链接** - **步骤** 1. 检查租户级设置:SharePoint管理中心 → 共享 → 确保允许外部共享 2. 验证站点级权限:目标站点 → 共享设置 → 选择“新访客和现有成员” 3. 重置链接:重新生成共享链接(避免使用旧链接) #### **问题2:同步失败(OneDrive同步客户端)** - **排查流程** ```mermaid graph LR A[同步失败] --> B{检查网络} B -->|正常| C[查看同步状态:OneDrive图标>设置>同步问题] C --> D[重启OneDrive] D --> E[清除缓存:%localappdata%\Microsoft\OneDrive\setup\ /full] ``` #### **问题3:搜索无法找到新上传文档** - **强制重建索引** - 管理员进入SharePoint管理中心 → 搜索 → 内容源 → 启动完全爬网 - 等待2-24小时(大型组织需更久) --- ### **三、高级功能应用 1. **自动化工作流(Power Automate)** - 场景示例:文档审批 → 新建流 → 模板“当文件创建时发送审批邮件” → 设置审批人/截止时间 - 进阶操作:连接SQL数据库,实现文档元数据自动更新 2. **API集成开发(引用用户提供的代码)** ```csharp // 优化版代码:安全访问SharePoint API [FunctionName("GetListData")] public static async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "get")] HttpRequest req) { var accessToken = await GetTokenAsync("https://yourtenant.sharepoint.com/.default"); using (var client = new HttpClient()) { client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken); var response = await client.GetAsync("https://yourtenant.sharepoint.com/sites/yoursite/_api/web/lists"); return new OkObjectResult(JArray.Parse(await response.Content.ReadAsStringAsync())); } } ``` > 关键点:使用Azure AD注册应用并授予`Sites.Read.All`权限[^1] 3. **实时通知(Webhooks)** - 创建订阅端点:通过Azure Function监听`list/itemadded`事件 - 安全验证:处理SharePoint发送的`validationtoken`参数 --- ### **四、最佳实践建议** 1. **权限管理原则** - 最小权限原则:使用「访问请求」机制替代直接赋予权限 - 定期审计:通过「站点使用情况报告」检查异常访问 2. **存储优化** - 启用「归档策略」自动转移旧文档至Azure冷存储 - 使用「文档ID服务」实现跨站点稳定引用 3. **灾难恢复** - 配置保留策略:合规中心 → 保留标签 → 防止意外删除 - 定时备份:`Export-PnPTermGroup -Identity "YourTermSet" -Path "backup.xml"` --- **相关问题延伸** 1. 如何实现SharePoint与Teams的深度集成? 2. SharePoint Online迁移本地数据的三种方案对比? 3. 如何通过Power BI可视化SharePoint列表数据? 4. SharePoint权限管理的最佳工具有哪些? > [^1]: 引用微软官方开发文档:[SharePoint REST API认证指南](https://learn.microsoft.com/zh-cn/sharepoint/dev/sp-add-ins/authorization-for-sharepoint-add-ins)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值