自定义"添加新项目"在Sharepoint 2013 List中形成从查询字符串中提取参数的形式

时间:2014-08-07 20:11:50

标签: sharepoint sharepoint-2013 sharepoint-designer

我想在sharepoint列表中自定义添加新项目表单以提取查询字符串参数并自动将其设置为新项目中的查找字段之一。我在Sharepoint 2010中的Sharepoint Designer 2010中找到了一个完美的教程(http://www.codeproject.com/Articles/194253/How-to-Customize-the-New-Item-form-to-take-paramet),但在2013年删除了设计模式,因此教程没有多大用处。

所以基本上我要问的是如何在Sharepoint Designer 2013中提取查询字符串值?

2 个答案:

答案 0 :(得分:3)

除了自定义列表视图&通过XSLT表单,SharePoint 2013引入了客户端呈现(CSR)技术。作为介绍,请点击这篇文章Introduction to Client Side Rendering in SharePoint 2013

由于CSR是SharePoint 2013中的默认呈现模式,因此我建议使用此方法来自定义新表单页面。

解决方案

假设一个包含Task Category查找字段的任务列表。

然后,可以使用以下呈现模板来设置从名为TaskCategory的查询字符串参数中检索的cat查找字段值。

(function () {
    var ctx = {};
    ctx.Templates = {};
    ctx.Templates.Fields = {
        'TaskCategory': {
            'NewForm': renderTaskCategory
        }
    };
    SPClientTemplates.TemplateManager.RegisterTemplateOverrides(ctx);
})();


function renderTaskCategory(ctx) {
    var catId = GetUrlKeyValue('cat'); //extract cat parameter from a query string 
    ctx.CurrentFieldValue =  catId; //set lookup field value 
    return SPFieldLookup_Edit(ctx); //default template for rendering Lookup field control
}

关键点:

  • 查找字段值的格式为:LookupId
  • GetUrlKeyValue是一个适用于SharePoint的特定功能 从查询字符串中提取参数

如何应用更改

为了应用更改,我们需要设置XLV Web部件的JSLink属性:

  • 首先,让我们保存这个JS模板,并将其命名为Tasks.js。然后将指定的内容上传到SharePoint Site Assets
  • 在“编辑”模式下打开“新建表单”页面,然后转到“Web部件属性”
  • MiscellaneousJSLink属性下找到并指定其值: ~sitecollection/SiteAssets/Task.js如下图所示 enter image description here

结果

enter image description here

答案 1 :(得分:0)

你应该能够轻松地做到这一点,但使用javascript。在新表单中添加js引用。

function getParameterByName(name) {
name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
    results = regex.exec(location.search);
return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));}




$(document).ready(function(){
var paramVal = getParameterByName('ParamName');
$(".ms-formbody input[title='Title']").val(paramVal);

});