自定义sharepoint文档集

时间:2015-06-30 12:11:39

标签: sharepoint

我必须自定义sharepoint 2013文档集欢迎页面(文档集属性Web部件)和

  1. 我无法找到文件集home aspx page
  2. 我可以使用任何客户端上下文模型来获取数据并显示文档集属性。

1 个答案:

答案 0 :(得分:1)

只需创建一个继承自文档集的新内容类型,添加额外的列,并在编辑内容类型时通过文档集设置链接设置需要在欢迎页面上显示的内容。同样在文档集设置页面下,您可以单击“自定义欢迎页面”,这样您就可以像编辑任何其他Web部件页一样编辑页面。

在第二点上,客户端上下文需要连接到包含您所访问的列表和特定文档集的Web,用于连接的身份将需要文档集的权限。

编辑:

要通过注入JavaScript / CSS来自定义外观,您需要使用ScriptLink自定义操作。 这使您可以将自定义JavaScript注入所有页面。在脚本中,您需要逻辑来确定是否应该应用自定义CSS,如果是,则注入它。

通过ScriptLink自定义操作注入脚本块的C#:

    public void AddJsLink(ClientContext ctx, Web web)
    {
        string scenarioUrl = String.Format("{0}://{1}:{2}/Scripts", this.Request.Url.Scheme,
                                            this.Request.Url.DnsSafeHost, this.Request.Url.Port);
        string revision = Guid.NewGuid().ToString().Replace("-", "");
        string jsLink = string.Format("{0}/{1}?rev={2}", scenarioUrl, "injectStyles.js", revision);

        StringBuilder scripts = new StringBuilder(@"
            var headID = document.getElementsByTagName('head')[0]; 
            var");

        scripts.AppendFormat(@"
            newScript = document.createElement('script');
            newScript.type = 'text/javascript';
            newScript.src = '{0}';
            headID.appendChild(newScript);", jsLink);
        string scriptBlock = scripts.ToString();

        var existingActions = web.UserCustomActions;
        ctx.Load(existingActions);
        ctx.ExecuteQuery();
        var actions = existingActions.ToArray();
        foreach (var action in actions)
        {
            if (action.Description == "injectnavigation" &&
                action.Location == "ScriptLink")
            {
                action.DeleteObject();
                ctx.ExecuteQuery();
            }
        }

        var newAction = existingActions.Add();
        newAction.Description = "injectnavigation";
        newAction.Location = "ScriptLink";

        newAction.ScriptBlock = scriptBlock;
        newAction.Update();
        ctx.Load(web, s => s.UserCustomActions);
        ctx.ExecuteQuery();
    }

然后你的JavaScript会有类似的东西:

if(window.location.href.indexOf(patternToMatchToDocSetpage)>-1) {
    var link = document.createElement("link");
    link.href = "http://example.com/mystyle.css";
    link.type = "text/css";
    link.rel = "stylesheet";
    document.getElementsByTagName("head")[0].appendChild(link);
}

我建议你看看relevant PnP sample on script link injection