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

Allow Save new item and continue in SharePoint NewForm.aspx

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

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

我被困在这一点上,害怕在添加列表时被迫编辑 SPDesigner 中的每个 NewForm 页面...
信息:本地 SharePoint Server 2013,可能使用 SPDesigner

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

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

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

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

将脚本编辑器 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);
}