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

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

 

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]

 

 

转载于:https://www.cnblogs.com/enixyu/p/3421488.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
sharepoint是一款由微软公司推出的企业级协同平台,在企业中得到了广泛的应用。sharepoint与其他文件共享平台的不同之处在于,它提供了批量处理文件的能力。在sharepoint中,可以使用folder.addsubfolder方法创建子目录,在目录中添加文件等。 folder.addsubfolder方法是sharepoint中一个常用的方法之一,它可以通过调用该方法来创建新的子目录。使用该方法,我们可以在sharepoint中更加方便地存储和组织文件。 在使用folder.addsubfolder方法之前,我们需要先定义一个Folder对象并且指定它的路径。例如,我们可以使用下面的代码创建一个名为“myFolder”的文件夹: var context = SP.ClientContext.get_current(); var web = context.get_web(); var folder = web.getFolderByServerRelativeUrl('/Shared Documents/myFolder'); context.load(folder); 接下来,我们可以通过以下代码创建一个子目录: var newFolder = folder.get_folders().add('mySubFolder'); context.load(newFolder); 创建子目录后,我们可以使用以下代码在新的子目录中添加文件: var fileCreationInformation = new SP.FileCreationInformation(); fileCreationInformation.set_url('myFile.txt'); fileCreationInformation.set_content(new SP.Base64EncodedByteArray()); fileCreationInformation.set_overwrite(true); var newFile = newFolder.get_files().add(fileCreationInformation); context.load(newFile); 通过使用这些方法,我们可以更加方便地进行批量操作,实现文件的自动化管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值