基于当前用户的组sharepoint 2013

时间:2016-12-05 07:18:29

标签: javascript asp.net sharepoint sharepoint-2013

我正在尝试根据当前用户的组名生成视图。我从自定义列表中收集的组名。

我的问题是如何将收集的组名称应用于“组名”列作为视图参数。

screenshot

我认为唯一的解决方案:

我创建了一个带参数的视图。

我已将HTML表单Web部件添加到同一页面并将其连接到列表视图(通过Web部件连接将值发送到参数)。然后使用window.onload函数,我收集当前用户的组名,并通过Form Postback函数传递此值。但由于Postback功能会触发整页重新加载,因此它会进入表单提交的无限循环>页面重新加载。

我尝试过的另一种方法是将一个点击事件监听器附加到BY MY GROUPS选项卡,它运行正常,但唯一的缺点是每次用户点击此选项卡时页面都会重新加载,我想避免这种情况。 / p>

所以我需要的解决方案是在没有页面重新加载的情况下发布表单。

这里建议的另一个选择是使用CSR(客户端渲染),但这有其自身的问题:

  1. 此代码无法正常工作。在控制台中,它向我显示正确的项目,但视图似乎无法触及。

  2. 即使有效,其他列值仍可在列过滤器中查看,如此屏幕截图所示:screenshot

  3. 因此,似乎CSR只是隐藏了视图中的项目(并且它们仍然可用)。换句话说,它的行为与例如CAML查询不同。

    或者我弄错了,我的代码出了问题?

    您可以在下面找到我的CSR代码:

    <script type='text/javascript'>
    (function() {
        function listPreRender(renderCtx) {
            SP.SOD.executeFunc('sp.js', 'SP.ClientContext', function() {
                var currUserID = _spPageContextInfo.userId;
                var cx = new SP.ClientContext('/sites/support');
                var list = cx.get_web().get_lists().getByTitle('Group Members');
                var items = list.getItems(SP.CamlQuery.createAllItemsQuery());
                cx.load(items, 'Include(_x006e_x50,DepID)');
                cx.executeQueryAsync(
                    function() {
                        var i = items.get_count();
                        while (i--) {
                            var item = items.getItemAtIndex(i);
                            var userID = item.get_item('_x006e_x50').get_lookupId();
                            var group = item.get_item('DepID').get_lookupValue();
                            if (currUserID === userID) {
                                var rows = renderCtx.ListData.Row;
                                var customView = [];
                                var i = rows.length;
                                while (i--) {
                                    var show = rows[i]['Group_x0020_Name'] === group;
                                    if (show) {
                                        customView.push(rows[i]);
                                    }
                                }
                                renderCtx.ListData.Row = customView;
                                renderCtx.ListData.LastRow = customView.length;
                                console.log(JSON.stringify(renderCtx.ListData.Row));
                                break;
                            }
                        }
                    },
                    function() {
                        alert('Something went wrong. Please contact developer')
                    }
                );
            });
        }
        function registerListRenderer() {
            var context = {};
            context.Templates = {};
            context.OnPreRender = listPreRender;
            SPClientTemplates.TemplateManager.RegisterTemplateOverrides(context);
        }
        ExecuteOrDelayUntilScriptLoaded(registerListRenderer, 'clienttemplates.js');
    })();
    </script>
    

0 个答案:

没有答案