How to override the NewDocSet.aspx redirect
June 2, 2015 Leave a comment
If you are opening the NewDocSet.aspx page in a dialog, similarly to this:
options.url = L_Menu_BaseUrl + "/_layouts/15/NewDocSet.aspx?List=" + {listGuid} + "&ContentTypeId=" + {CT} + "&RootFolder=" + L_Menu_BaseUrl + "/Lists/YourList"; options.title = "New Document Set"; options.autoSize = true; // Show dialog SP.SOD.execute('sp.ui.dialog.js', 'SP.UI.ModalDialog.showModalDialog', options);
you may have noticed that after creation of the docset, the dialog redirects your page to the welcome page of the newly created doc set. If you are opening this dialog from some kind of a dashboard, this is usually an undesired behavior.
I have taken a look at the NewDocSet.aspx backend with ILSpy and I have determined that when the new Document Set is provisioned, the code end with a calls to this function – ‘window.frameElement.navigateParent’. Turns out this is a function defined by SharePoint, when you open a dialog. It basically redirects the parent window to a new URL. And NewDocSet.aspx uses this function to redirect the window to the Welcome page of the new doc set.
So, to override this behavior, we simply override the dialog’s window frame function (make sure you execute this AFTER the dialog is opened):
// Override the redirect behavior of NewDocSet.aspx
for (var i = 0; i < frames.length; i++) {
// Find the frame of the dialog
var frmWindow = frames[i];
if (frames[i].location.href.indexOf(‘/_layouts/15/NewDocSet.aspx’) > -1) {
// Override the function
var prxy = frmWindow.frameElement.navigateParent;
frmWindow.frameElement.navigateParent = function () {
// Disregard the original function’s URL, refresh the page we are currently on
prxy.apply(this, [window.location.href]);
};
}
}
The patter is called proxy pattern, by the way. This code will refresh the page that opened the NewDocSet.aspx dialog, instead of redirecting to the doc set’s welcome page.
Good luck (with SharePoint, you need it).