如何根据在Infopath表单中选择的用户过滤Sharepoint中的视图?

时间:2015-04-28 13:49:00

标签: sharepoint sharepoint-2013 caml

我有一个Infopath表单,发布到Sharepoint 2013,用户可以使用人员选择器选择一个人。在表单之外我有列DisplayName和AccountID。我希望正在查看列表的用户只能看到由他修改,由他创建的对象,或者他是否在表单中被选中的对象。

尝试限制基于浏览器的视图创建者的视图很可能是不可能的,因为外部可用的列都不是User类型。然后我转到Sharepoint Designer 2013,潜入CAML。这也没有帮助。

如果当前登录的用户与表单中选择的用户是同一个用户,如何检查?我尝试使用CAML,但没有效果(最后FieldRef是对列的引用,在此示例中为AccountID)。

  <Where>
        <Or>
            <Or>
                <Eq>
                    <FieldRef Name="Editor"/>
                    <Value Type="Integer">
                        <UserID Type="Integer"/>
                    </Value>
                </Eq>
                <Eq>
                    <FieldRef Name="Author"/>
                    <Value Type="Integer">
                        <UserID Type="Integer"/>
                    </Value>
                </Eq>   
            </Or>
            <Eq>
                <FieldRef Name="_638fe3aa_9161_4aa5_8bd1_862678d9fc06"/>
                <Value Type="Integer">
                        <UserID Type="Integer"/>
                </Value>
            </Eq>
        </Or>
    </Where>

如果可以通过Infopath中的代码或任何其他方式实现,答案将被接受 - 我不想要完全基于CAML的答案,我希望对我的问题有任何可行的答案:)

1 个答案:

答案 0 :(得分:0)

在视图中,您希望在设置为[Me]时过滤的每个列的简单过滤器应该仅向登录用户显示与其自身相同的人员选择器值。

如果表单中的字段是人员选择器,那么您必须将用户数据存储在某个列的某个位置,除非您在使用规则更新其他字段处理数据后丢弃数据。如果是这种情况,我不明白为什么你不能将人员选择器数据保存在你未在视图中显示的列中。您不必将过滤器从正在显示的字段中移除,以使其正常工作,并且您已使用正确的控件类型来获取所需的数据。

Created By和Modified By列始终是用户值。