Frage

Derzeit, wenn ich auf eine benutzerdefinierte Aktion klicke, um einen Workflow auf einem ausgewählten Artikel auszuführen, navigiert der Browser von der aktuellen Seite, um das Initiierungsformular anzuzeigen. Dies wäre kein so ein Problem, mit der Ausnahme, dass, wenn ich auf den Browser, um sich auf dem Browser zu starten, in die zugehörige Bibliothek zurückzukehren, nicht die Seite, die der Browser ursprünglich angezeigt wird, bevor der Workflow starten.

Dieses Verhalten ist unfreundlich. Ich brauche den Browser, um auf die ursprüngliche Seite zurückzukehren, nachdem Sie den Workflow gestartet / stornieren. Es wäre auch für das Initiationsformular akzeptabel, um in einem modalen Dialog zu öffnen, solange er auf die ursprüngliche Seite zurückgeht, wenn sie geschlossen wird.

Ich habe Administratorzugriff auf die Website, die ich bearbeiten kann, und ich kann Änderungen mit dem SPDESIGNER 2010 vornehmen. Ich habe kürzlich auch InfoPath2010 installiert, und wenn es einen Weg gibt, wäre ich die Lösung am besten an der Lösung. .

Ich habe die Dateien (* .xml, * .xoml, * .xsn, *. vage ähnliche Eigenschaften, die den SharePoint erkennen könnten, wie man das Formular öffnet.

Jede Hilfe, die Sie teilen könnten, würde geschätzt werden.

War es hilfreich?

Lösung

Inspired by the page Custom SharePoint Context Action links and Modal Dialogs I will now proceed to answer my own question.

Using these pages as references:

SharePoint Javascript: Create a modal dialog
SharePoint current site base URL
Start a Workflow from item column
Get ID of Selected Item

The solution requires some sleuthing.

You'll need to know:

  1. The List or Library Guid. This can be found in the list properties area when viewing the list or library in SharePoint Designer. Also it's found in workflow initiation form URLs.
  2. The Workflow Guid. Again, this can be tricky to find. It's not listed anywhere in SharePoint Designer. I found mine by accident. It's often displayed in the workflow initiation URL.

To find these:

Make a custom action to initiate the workflow (hint: make sure it can be manually started), then click/select the ribbon/menu item to perform the custom action.

The URL appears in the browser's URL text box at the top.

Example workflow intiation URL:

http://<site url>/_layouts/IniWrkflIP.aspx?List={11449cc0-e482-4971-9ec7-f12e812f4489}&ID=56&TemplateID={c810bee8-8799-40ac-a8db-d564a12c668d}  

Notice in the middle of this URL there's a parameter passing the selected item's ID to the workflow. Without this the workflow will fail to start.

The List/Library GUID is here:

List={11449cc0-e482-4971-9ec7-f12e812f4489}&

And the Workflow ID is here at the end

TemplateID={c810bee8-8799-40ac-a8db-d564a12c668d}

Notice in the middle of this URL there's a parameter passing the selected item's ID to the workflow. Without this the workflow will fail to start.

ID=56&

SharePoint generates all three of these parameters internally when you click the custom action. We're going to use the List and Workflow IDs, and because the user will select any item in the list, we'll use Javascript to determine this ID.

The JavaScript:

Here is the bit of Javascript that will open a modal dialog displaying a workflow initation form for the currently selected item. Place this code into the "Navigate To Url" field of your custom action:

javascript:OpenPopUpPageWithTitle(L_Menu_BaseUrl + "/_layouts/IniWrkflIP.aspx?List={11449cc0-e482-4971-9ec7-f12e812f4489}&ID=" + SP.ListOperation.Selection.getSelectedItems(SP.ClientContext.get_current())[0].id + "&TemplateID={c810bee8-8799-40ac-a8db-d564a12c668d}", RefreshOnDialogClose, 600, 400, 'Assign To')  

Let's look at the code Piece by Piece

The first part should be obvious, this allows us to run chunk of javascript code. In this case we're using the OpenPopUpPageWithTitle method which seems to be SharePoint specific. See the 1st reference URL for more info on this method.

javascript:OpenPopUpPageWithTitle(  

Next the constant at the start of the first paratemeter, "L_Menu_BaseUrl", returns the site, or subsite base URL. This is an internal JavaScript constant that SharePoint creates. See the 2nd reference URL for more info.

L_Menu_BaseUrl +  

In the next part we're telling the method where within this site/subsite is the aspx page we want to display, and the parameters it needs to initiate a workflow for the selected item. The question mark denotes we're going to pass some parameters to the ASPX page.

"/_layouts/IniWrkflIP.aspx?  

The first URL parameter is the List or Library GUID.

List={11449cc0-e482-4971-9ec7-f12e812f4489}&  

The next URL parameter is the ID of the first selected list item. We interrupt the string literal so we can use some javascript to return the first selected item. See The 4th reference URL to learn a little bit more about this.

&ID=" + SP.ListOperation.Selection.getSelectedItems(SP.ClientContext.get_current())[0].id + "&  

The last URL parameter refers to the workflow itself. Make sure to close the string literal before we pass off the next OpenPopUpPageWithTitle parameter.

TemplateID={c810bee8-8799-40ac-a8db-d564a12c668d}",  

Afterwards there are four more parameters:

RefreshOnDialogClose, 600, 400, 'Assign To')  

The first part is the action we want the site to perform when the dialog is closed. There are likely many of these actions it just so happened that the site I found used the one I want as well.

RefreshOnDialogclose

The following two parameters give the width and height, in pixels, of the resultant modal dialog window.

600, 400,

The last one is the page title. I just used the title of the workflow.

"Assign To")

Summary

Now, when we select a list or library item and choose to perform a custom action (wherever it's configured to be) the workflow initiation displays in a user-friendly modal dialog window.

It's unfortunate that the only way to have the workflow initiate in a model dialog is by using this custom action 'hack' (as far as I know).

This helpful tip took me some hours of learning and investigating so I hope you find it useful. Enjoy.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit sharepoint.stackexchange
scroll top