Domanda

Attualmente quando faccio clic su un'azione personalizzata per eseguire un flusso di lavoro su un'elemento selezionato, Browswer naviga dalla pagina corrente per visualizzare il modulo di avvio. Questo non sarebbe un problema del genere tranne che quando faccio clic su Start o Annulla per spostarsi sul browser naviga nella libreria associata non nella pagina Il browser è stato visualizzato originariamente prima di avviare il flusso di lavoro.

Questo comportamento è scortese. Ho bisogno del browser per tornare alla pagina originale dopo aver iniziato / annullando il flusso di lavoro. Sarebbe anche accettabile per il modulo di avvio da aprire in una finestra di dialogo modale purché torna alla pagina originale quando è chiusa.

Ho l'accesso amministratore al sito che sto modificando e posso apportare modifiche con SPDesigner 2010. Recentemente ho anche installato InfoPath2010 e se c'è un modo per farlo lì sarei più suscettibile della soluzione. Ho seturato i file (* .xml, * .xoml, * .xsn, * .xom.rules) nella directory del flusso di lavoro in "Tutti i file" nel browser del sito SPD2010 ma non hanno trovato nemmeno opzioni XML / ASPX Assomigliare vagamente proprietà che potrebbero dire SharePoint come aprire il modulo.

Qualsiasi aiuto che potresti condividere sarebbe apprezzato.

È stato utile?

Soluzione

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a sharepoint.stackexchange
scroll top