允许保存新项目并继续在SharePoint NewForm.aspx中

时间:2015-04-02 16:16:20

标签: javascript sharepoint sharepoint-2013

简短:如何制作默认的SharePoint NewForm.aspx添加项目并保留在输入页面上而不是返回到列表视图AllItems?
长:
我被要求允许SharePoint用户在SharePoint列表中输入许多新项目,而不必在每次保存时返回AllItems。
此要求适用于许多列表,因此我不想为每种可能的内容类型开发特定代码 我虽然可以写一个简短的js文件,但只要用户想要保存并继续使用它 到目前为止,我试图添加"保存并继续"内容编辑器Web部件(CEWP)中的行为 我的第一种方法是更改​​ Source = 参数但没有成功(取消也返回到新源,或者在preSaveAction()中设置时忽略了源。
然后我尝试在preSaveAction中设置表单操作:

<script type="text/javascript">
JSRequest.EnsureSetup();
var src      = JSRequest.QueryString["Source"];
var exit     = JSRequest.QueryString["exit"];
var isDialog = JSRequest.QueryString["IsDlg"];
var dlgParam = "";
if (isDialog)
    dlgParam = "&IsDlg="+isDialog;
//If exit is defined its keeping default source parameter
if (exit) {
    document.forms.aspnetForm.action= location.pathname+"?Source="+exit+dlgParam;
}
function PreSaveAction(){
    //before saving the original source is saved in exit
    exit=JSRequest.QueryString["Source"];
    src=escapeProperly(window.location.protocol + '//' + window.location.host + _spPageContextInfo.serverRequestPath);
    document.forms.aspnetForm.action=location.pathname+"?Source="+src+"&exit="+exit+dlgParam;
return true;

操作按预期更新,但在保存新项目时,用户仍会重定向到AllItems.aspx。

另一种尝试是添加一个特定按钮,重用功能区和页面按钮中使用的SharePoint javascript操作

<script type="text/javascript">
function adressePage() {
    return window.location.protocol + '//' + window.location.host + _spPageContextInfo.serverRequestPath;
}

function saveContinue() {
    document.getElementById("cmdSaveContinue").disabled=true;

    if (!PreSaveItem()) return false;
    if (SPClientForms.ClientFormManager.SubmitClientForm("WPQ2")) {
        SP.UI.Notify.addNotification("Saving ...", false);
        window.location = adressePage();
    } else {
        WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("cmdSaveContinue", "", true, "", adressePage(), false, true));
    }
    document.getElementById("cmdSaveContinue").disabled=false;      
}
</script>
<input id="cmdSaveContinue" onclick="javascript:return saveContinue();" type="button" value="Enregistrer et continuer" style="top: -5.5em; position: relative;"/> 

这样,处理表单验证并保存项目 如果返回错误消息,表单将保留在NewItem上,但执行window.location=...后错误消息将丢失。
当一切正常时,项目将被保存,用户将使用新的空NewForm.aspx 但SharePoint SPClientForms.ClientFormManager.SubmitClientForm("WPQ2")是异步执行的,有时(并非总是)重定向 AllItems在重定向结束后发生。

我陷入困境,担心每当添加一个列表时,都会被迫在SPDesigner中编辑每个NewForm页面...
信息:SharePoint Server 2013内部部署,SPDesigner可能

3 个答案:

答案 0 :(得分:2)

您可以通过InfoPath执行此操作,如果您拥有SP on prem和SPDesigner访问权限,则应该可以使用它。如果您转到InfoPath并自定义表单,则可以转到数据&gt;提交选项&gt; (高级&gt;&gt;)&gt;提交后&gt;新表格。

您可以google'InfoPath Save and New'或转到Microsoft网站并查看this演练。他们的演练建议使用两个按钮,其中一个打开一个新表单,另一个打开表单。

答案 1 :(得分:1)

创建自定义NewForm.aspx并添加新按钮并在重定向中提及{}。

<input type="button" class="contact-button" value="Submit and Create New Request" name="btnSaven" onclick="javascript: {ddwrt:GenFireServerEvent('__commit;__redirect={}')}" />

答案 2 :(得分:0)

将脚本编辑器 Web 部件添加到视图

<input type="button" value="Add items in continuity" onclick="openNewItemDialog()"/>
<script>
    function openNewItemDialog() {
        var options = {
            url: 'http://sp/sites/dev/Lists/<yourList>/NewForm.aspx',
            dialogReturnValueCallback: function(result, returnValue) {
                if(result== SP.UI.DialogResult.OK)
                { 
                    openNewItemDialog()
                }
            }
        }
     SP.UI.ModalDialog.showModalDialog(options);
}