Forums

angle-left Back

RE: PreviewUrl nelle notifiche di workflow

MA
Marco Azzalini, modified 1 Year ago.

PreviewUrl nelle notifiche di workflow

Regular Member Posts: 107 Join Date: 11/18/14 Recent Posts
Ciao, da uno script di workflow devo inviare delle email ad un gruppo di redattori e desideravo inserire il link che permettesse a chi riceve l'email di accedere direttamente al documento oggetto del workflow. Pensavo fosse una cosa ovvia, e quindi semplice da fare, ma mi sono accorto che nel workflow context ci sono un sacco di variabili che posso inserire nel mio email template ma nessuna veramente utile per raggiungere il mio scopo.
Ho tentato di usare la maggior potenza degli script Groovy per poter usare il metodo DLUtil#getPreviewURL() ma il problema è che non è possibile accedere all'oggetto themeDisplay (io almeno non ci sono riuscito) da uno script Groovy; in particolare dalla variabile workflowContext si riesce ad arrivare al themeDisplay:
ServiceContext serviceContext = (ServiceContext) workflowContext.get(WorkflowConstants.CONTEXT_SERVICE_CONTEXT);
ThemeDisplay themeDisplay = serviceContext.getThemeDisplay();

ma solo per scoprire che è null :-(
Ho cercato allora di costruire l'url a mano, cercando di invocare correttamente la struts action "/document_library/view_file_entry" passandogli il parametro fileEntryId ma evidentemente sbaglio qualcosa perchè mi fa arrivare solo sulla root folder della Document Library

Possibile che sia così difficile fare una cosa tanto ovvia (e comoda) ?? Dove sto sbagliando??

ciao e grazie
Marco
Daniele Baggio, modified 1 Year ago.

RE: PreviewUrl nelle notifiche di workflow

Expert Posts: 294 Join Date: 12/5/08 Recent Posts
ciao Marco,

confermo che quello che vorresti fare è molto legittimo, ma lo strumento ha dei limiti e non è facile costruire quella url.

Io non ricordo bene l'argomento ma ci si può arrivare all'obiettivo, avviso chi può aiutarti a rispondere.

@baxtheman
Marco Mancini, modified 1 Year ago.

RE: PreviewUrl nelle notifiche di workflow

New Member Posts: 5 Join Date: 9/4/12 Recent Posts
Ciao Marco
Che versione di liferay stai utilizzando?
Con il codice sorgente che ho sotto occhio (6.2 CE ga3 e 6.2 EE sp10) se utilizzi DLUtil.getPreviewURL puoi passare anche il themedisplay con valore null.
In questo caso non ti mette parametri di sessione utente e l'url del portale, che puoi comunque ricavare tramite variabili e util di portale come PortalUtil.getPortalURL.

Hai provato in questo modo?

P.S.
E' normale che il themeDisplay sia vuoto a livello di workflow perchè visto che i task sono eseguiti in modo asincrono rispetto al portale le informazioni che potresti trovare all'interno del themedisplay potrebbero non essere più valide al momento dell'utilizzo. Devi tener conto che dentro il workflow o qualsiasi processo asincrono del portale non hai la request e tutti i componenti, come il themedisplay, che la compongono e quindi trovare modi alternativi di fare l cose, sempre che liferay con i suoi util non ci aiuti.
MA
Marco Azzalini, modified 1 Year ago.

RE: PreviewUrl nelle notifiche di workflow

Regular Member Posts: 107 Join Date: 11/18/14 Recent Posts
Marco Mancini:
Ciao Marco
Che versione di liferay stai utilizzando?
Con il codice sorgente che ho sotto occhio (6.2 CE ga3 e 6.2 EE sp10) se utilizzi DLUtil.getPreviewURL puoi passare anche il themedisplay con valore null.

Ciao Marco, grazie e ben ritrovato ;-) La versione è proprio la 6.2 CE GA3. Non avevo proprio preso in considerazione l'ipotesi di passare null come themeDisplay ma avevo direttamente guardato come veniva generato l'url e l'avevo sostanzialmente replicato ;-) In effetti passando 'null' la chiamata funziona e mi restituisce:
getPreviewURL(fileEntry, fileVersion, null, "")=/documents/10182/127888/titolo/a9271389-b871-49f1-b134-0ddf36ef6857?version=1.0&t=1479891575144

privo del portalURL e del pathContext ma sostanzialmente identico a quello creato da me:
Il problema è che con questi url dopo l'autenticazione mi mostra solo una pagina bianca con una piccola iconcina in alto a sinistra....
Ad ogni modo ho abbandonato questa strada anche perché mi sono reso conto che quello che mi serve realmente è accedere alla pagina con la scheda del documento. Per questo motivo ora sto attaccando il problema utilizzando la struts_action '/document_library/view_file_entry'.

ciao
Marco
MA
Marco Azzalini, modified 1 Year ago.

RE: PreviewUrl nelle notifiche di workflow (Answer)

Regular Member Posts: 107 Join Date: 11/18/14 Recent Posts
Bene, concludiamo felicemente questo thread perché alla fine con l'aiuto di Marco Mancini ho risolto entrambi i problemi emoticon
Il download url era sostanzialmente corretto, è sufficiente aggiungere alla fine un altro parametro &download=true per forzare l'effettivo download da parte del browser.
Per quanto riguarda invece Il link per accedere direttamente alla pagina del documento, che risulta infinitamente più comodo, dopo vari tentativi e raffinamenti successivi, sono riuscito a creare una template in freemarker che può essere inclusa in un qualunque workflow per inviare una email ai destinatari del task:
<#assign dlFileEntryLocalService = serviceLocator.findService("com.liferay.portlet.documentlibrary.service.DLFileEntryLocalService") />
<#assign dlFileVersionLocalService = serviceLocator.findService("com.liferay.portlet.documentlibrary.service.DLFileVersionLocalService") />

<#assign portalURL = serviceContext.portalURL!"">
<#assign id = entryClassPK?number>
<#assign fileVersion=dlFileVersionLocalService.getDLFileVersion(id) >
<#assign fileEntryId=fileVersion.getFileEntry().getFileEntryId()!"" >

<#assign ppid = staticUtil["com.liferay.portal.util.PortletKeys"].DOCUMENT_LIBRARY>
<#assign myUrl = portalURL +  "/web/guest/documents?" +"p_p_id="+ ppid + "&p_p_lifecycle=0&p_p_state=normal&p_p_mode=view&" +"_"+ppid+"_struts_action=/document_library/view_file_entry&_"+ppid+"_"+"fileEntryId=${fileEntryId}">

<!-- email body -->
<p> E' presente un nuovo documento da redigere </p>
<BR>
<p> Click <a href="${myUrl}">qui</a> per accedere al documento. </p>


Fatene libero uso! :-)
Magari con questo post altri si risparmieranno una giornata di prove ed incavolature :-) e forse anche di chiedersi (come ho fatto io) perché il team di Kaleo non abbia pensato di inserire tra le tante variabili che ci sono nel workflow context anche questo url (!)

ciao