在创建外部列表过程中,往往需要添加筛选参数,而较多开发用户,会关心如何在外部列表中,只显示当前用户相关的行。本例子中,我们以任务数据表来做例子,看看如何实现这个需求。

1)数据表tbl_task:

tbl_task数据:

数据表中,userid即为我们在sharepoint访问外部列表时,对当前用户筛选的字段。它的格式为hostname\username。大家按你们自己的实际情况填写即可。

2)创建外部列表

  • 打开sharepoint designer,登陆sharepoint site
  • 选择外部内容类型(External content type)
  • 点击工具栏,外部内容列表,选择刚才创建的tbl_task表,右击创建操作类型。

   

    注意:以上需要注意的是,要创建外部列表前,如果只是读取数据库的内容,必须同时创建“读取项” 和 “读取列表”操作。

  • 创建“读取项”操作

   在创建读取项操作过程中,我们可以添加筛选器,类型选择User Context (用户上下文)

   需要注意的是,userid必须得勾选映射到标识符选项,不然后续添加的筛选器不能正常保存。

     

  • 添加筛选器

   选择新建筛选器,筛选器类型选择“用户上下文”

   

  • 返回参数中,userid勾选映射到标识符

   

  • 创建“读取列表”操作

   在创建读取列表操作过程中,我们发现筛选器选项缺少“用户上下文”(如下图),没关系,后面通过其他方法添加这个筛选器。在创建过程中,无需添加筛选器,只需勾选id 和 userid的映射标识符选项即可,然后保存。

   

   

   

  • 导出BDC模型

   

  • 导出BDC模型将会保存为后缀为**.bdcm的xml文件,此处名称填写文件名即可,设置选择默认。

   

  

3) 编辑BDCM文件。

   打开上一个步骤导出的BDCM文件,格式大概如下:

   

  • 查找Method name=“tbl_task读取项”下的,FilterDescriptors节点,
  • <FilterDescriptors>
    <FilterDescriptor Type="UserContext" Name="筛选器">
    <Properties>
    <Property Name="UsedForDisambiguation" Type="System.Boolean">false</Property>
    <Property Name="IsDefault" Type="System.Boolean">false</Property>
    <Property Name="CaseSensitive" Type="System.Boolean">false</Property>
    </Properties>
    </FilterDescriptor>
    </FilterDescriptors>

    复制整段FilterDescriptors

  • 查找Method name="tbl_task读取列表"节点,把上面拷贝的FilterDescriptors粘贴在Method节点下。注意FilterDescriptors与Properties,AccessControlList节点同为Method节点的子节点。所以粘贴的时候,应该和它们在同一层。粘贴后的代码如下:

   

  • 复制Parameter节点

   复制完了FilterDescriptor节点后,就需要复制Parameter节点。同样查找Method Name="tbl_task读取项"的节点,找到如下的Parameter节点:

   注意,同时拷贝Parameter Name="@id"的节点和Parameter Name="@userid"节点(下图蓝色筛选部分)。

   

  • 在Method name=“读取列表”节点的Parameters节点中插入刚才拷贝的两个Parameter节点。

   

  • 修改RdbCommandText中的Select语句

   “读取项”的RdbCommandText的内容

  • <Property Name="RdbCommandText" Type="System.String">SELECT [id] , [userid] , [task_name] , [assign_date] FROM [dbo].[tbl_task] WHERE [id] = @id AND [userid] = @userid</Property>

    参照上面的语句,把“读取列表”的RdbCommandText的内容修改为

  • <Property Name="RdbCommandText" Type="System.String">SELECT [id] , [userid] , [task_name] , [assign_date] FROM [dbo].[tbl_task] WHERE [userid] = @userid</Property>

    注意:读取列表无需[id]参数,而读取项则必须保留[id]参数。因为读取列表的时候,我们是需要列出当前用户对应的记录,而在读取项的时候,就需要指定记录的id,不然,在后面的外部列表中,查看每项记录的属性的时候,会一直指向同一条记录。

  • 修改Entity version版本
    <Entity Namespace="http://localhost" Version="1.0.0.0" EstimatedInstanceCount="10000" Name="Task" DefaultDisplayName="Task">

    修改为1.1.0.0

  • <Entity Namespace="http://localhost" Version="1.1.0.0" EstimatedInstanceCount="10000" Name="Task" DefaultDisplayName="Task">

    保存退出。

4) 导入BDC模型

   完成了bdcm文件的修改后,接下来的步骤就是把该文件重新导回Sharepoint中。

  • 打开SharePoint 2010 Central Administration -> Business Data Connectivity Service

   

  • 点击Import,选择刚才保存的bdcm文件task.bdcm, 然后点击Import
  • 如果顺利完成,就会显示BDC Model was successfully imported.

5) 创建外部列表

完成了外部内容类型的修改后,现在就可以根据外部内容类型,创建外部列表。具体步骤,不再赘述。如果不出意外,现在查看新建的外部列表的时候,就可以成功过滤不属于当前用户的记录。

参考:

[The End]

Sharepoint 问题集锦 - 外部列表(external list) - 读取当前用户上下文或用户名作为筛选参数的更多相关文章

  1. 如何:在 SharePoint 中创建外部列表

    在创建外部内容类型后创建外部列表是一项非常简单的任务,有如下4种方式进行: 可使用 Microsoft SharePoint Designer 2010 浏览器来完成 VS2010的列表实例 采用代码 ...

  2. SharePoint 2010 讨论板列表内容的读取细节处理

    list.Folder表示subject,属于特殊列表,使用list.Folder遍历项,而不是使用list.Items;list.Items表示reply;list.Items[0]["P ...

  3. sharepoint 2013创建外部内容类型并创建外部列表

    步骤: 1.如何:基于 SQL Server 表创建外部内容类型 How to: Create an External Content Type Based on a SQL Server Table ...

  4. SharePoint 2010 BCS - 简单实例(二)外部列表创建

    博客地址 http://blog.csdn.net/foxdave 接上篇 由于图片稍多篇幅过长影响阅读,所以分段来写. 添加完数据源之后,我们需要为我们要放到SharePoint上的数据表定义操作, ...

  5. BCS--使用SharePoint Designer创建外部内容类型

    使用SharePoint Designer创建外部列表(也可以在浏览器中创建列表) http://www.cnblogs.com/haogj/archive/2011/05/01/2033845.ht ...

  6. Sharepoint 问题集锦 - external list (外部列表)

    使用Sharepoint开发过程中遇到的问题总结. 错误1: Unable to display this Web Part. To troubleshoot the problem, open th ...

  7. 【解决】SharePoint外部列表保存的日期/时间值不正确

    [问题描述]: 在SharePoint中创建一个外部列表后,通过工作流或直接通过外部列表中的新增向外部列表添加数据项.通过外部列表或数据库查看添加的数据项时发现日期类型字段的值都不正确,像是差了若干个 ...

  8. 如何基于OM模型使用C#在程序中给SharePoint的BCS外部数据类型的字段赋值

    概述: 外部内容类型和数据,SharePoint从2010这个版本开始就对BCS提供非常强大的支持,点点鼠标就可以取代以前直接编辑XML的方式来设置SharePoint到SQL数据库的连接.非常方便地 ...

  9. SharePoint 2010 修改默认列表样式

    SharePoint 2010  修改默认列表样式 :可以通过修改 下面两个全局配置进行修改.(未完..更新中...)  C:\Program Files\Common Files\Microsoft ...

随机推荐

  1. CentOS源码安装搭建LNMP全过程(包括nginx,mysql,php,svn)【转】

    转自:http://blog.csdn.net/yanzi1225627/article/details/49123659 服务器环境为:CentOS6.5 64位 目标:搭建LNMP(Linux + ...

  2. Java反射_JDBC操作数据

    </pre><p>使用反射 来操作  这里是练习反射的使用</p><p>链接数据库工具类</p><p><pre name= ...

  3. JSON和JAVA的POJO的相互转换【转载】

    该类中用用到的jar包:参加文章<使用json-lib进行Java和JSON之间的转换[转载]> import java.util.Collection; import java.util ...

  4. FASTDFS 5X安装

    FASTDFS 5X安装 http://www.wingdevops.com/?p=603 流行的开源分布式文件系统有很多,FastDFS 是国人在mogileFS的基础上进行改进的key-value ...

  5. Android开发之适配器-ListView适配器的重复数据

    适配器是Android中的数据与View视图的桥梁,作用就是将数据通过适配器显示到对应的View视图上. 工作中,在用ListView做适配器数据时候,有些人肯定碰见过,如何优化效率,但是又出现重复数 ...

  6. mac os 终端提示 you have new mail

    这里的信息可能是由于所做的什么操作触发了发邮件的事件, 系统发送的邮件提醒. 我遇到的原因是由于运行 cron , 由于权限所导致了发邮件的事件提醒. Last login: Tue Apr 26 0 ...

  7. 逻辑回归应用之Kaggle泰坦尼克之灾(转)

    正文:14pt 代码:15px 1 初探数据 先看看我们的数据,长什么样吧.在Data下我们train.csv和test.csv两个文件,分别存着官方给的训练和测试数据. import pandas ...

  8. Oracle存储过程中不支持DML语言的解决方法(针对遇见的DROP关键字)

    ---存储过程中的原语句: ---删除表 DROP TABLE A_NEWTDDATA; --报错 经查询:存储过程不支持DML语言: 解决方法: execute immediate 'DROP TA ...

  9. sqlserver 自定义字符串分割函数.

    --SQL Server Split函数 --Author: sq --说明:被分割后的字段为:short_str --支持分割符多字节 --使用方法 --Select * FROM splits(' ...

  10. Ubuntu Server下建立VPN服务器 pptp 模式的方法

    对于想要在外部访问内部的网络,除了在防火墙上开启相应服务器所对应的端口,最好的方法应该是建立VPN-Server,使得用户可以在外网任何一台计算机上拨入到内网中进行操作,而且VPN可以记录详细的日志, ...