Foros de discusión

PreviewUrl nelle notifiche di workflow

thumbnail
Marco Azzalini, modificado hace 7 años.

PreviewUrl nelle notifiche di workflow

Regular Member Mensajes: 146 Fecha de incorporación: 18/11/14 Mensajes recientes
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
thumbnail
Daniele Baggio, modificado hace 7 años.

RE: PreviewUrl nelle notifiche di workflow

Expert Mensajes: 336 Fecha de incorporación: 5/12/08 Mensajes recientes
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
thumbnail
Marco Mancini, modificado hace 7 años.

RE: PreviewUrl nelle notifiche di workflow

New Member Mensajes: 5 Fecha de incorporación: 4/09/12 Mensajes recientes
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.
thumbnail
Marco Azzalini, modificado hace 7 años.

RE: PreviewUrl nelle notifiche di workflow

Regular Member Mensajes: 146 Fecha de incorporación: 18/11/14 Mensajes recientes
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
thumbnail
Marco Azzalini, modificado hace 7 años.

RE: PreviewUrl nelle notifiche di workflow (Respuesta)

Regular Member Mensajes: 146 Fecha de incorporación: 18/11/14 Mensajes recientes
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