<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Lab QBRgroup.it</title>
	<atom:link href="http://lab.qbrgroup.it/feed/" rel="self" type="application/rss+xml" />
	<link>http://lab.qbrgroup.it</link>
	<description>Blog tecnico</description>
	<lastBuildDate>Tue, 16 Apr 2013 09:36:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Liferay Portlet JSR286</title>
		<link>http://lab.qbrgroup.it/liferay-portlet-jsr286/</link>
		<comments>http://lab.qbrgroup.it/liferay-portlet-jsr286/#comments</comments>
		<pubDate>Wed, 29 Aug 2012 11:12:40 +0000</pubDate>
		<dc:creator>giuseppe.cavallo</dc:creator>
				<category><![CDATA[Liferay]]></category>
		<category><![CDATA[Portlet]]></category>

		<guid isPermaLink="false">http://lab.qbrgroup.it/?p=579</guid>
		<description><![CDATA[Il seguente articolo ha lo scopo di definire le basi per lo sviluppo di una portlet (JSR286) pluggabile in Liferay Portal. Per qualunque tipologia di sviluppo, siano esse portlet, Hook, Temi, Layout o Extension Environment il migliore strumento di lavoro &#8230; <a href="http://lab.qbrgroup.it/liferay-portlet-jsr286/">Continua a leggere<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Il seguente articolo ha lo scopo di definire le basi per lo sviluppo di una portlet (JSR286) pluggabile in Liferay Portal. Per qualunque tipologia di sviluppo, siano esse portlet, Hook, Temi, Layout o Extension Environment il migliore strumento di lavoro è senza dubbio Liferay IDE. La <a title="Guida Installazione IDE Liferay" href="http://www.liferay.com/community/wiki/-/wiki/Main/Liferay+IDE+Getting+Started+Tutorial#section-Liferay+IDE+Getting+Started+Tutorial-Requirements+before+getting+started">guida di installazione</a> è reperibile online.</p>
<p><a href="http://lab.qbrgroup.it/liferay-portlet-jsr286/portlettree/" rel="attachment wp-att-586"><img class="size-medium wp-image-586 alignleft" src="http://lab.qbrgroup.it/wp-content/uploads/2012/07/PortletTree-297x300.png" alt="" width="297" height="300" /></a>La guida descrive anche come creare un Liferay Plug-in Project. Sono avviabili tre tipologie di progetto: <a title="Portlet" href="http://lab.qbrgroup.it/portlet/" target="_blank">Portlet</a>, Hook (plugin per la customizzazione ed estensione delle funzionalità base), Ext (plugin che permette una completa customizzazione di Liferay). Nell&#8217;immagine a lato una rappresentazione dell&#8217;alberatura di un progetto di tipo Portlet.</p>
<p>Questo articolo si limiterà a descrivervi come creare gli oggetti dell&#8217;area di configurazione della Portlet e quelli responsabili del rendering dei contenuti dinamici.</p>
<p><em><strong>Area di Configurazione</strong></em></p>
<p>In liferay-portlet.xml aggiungere la riga</p>
<pre class="brush: xml; title: ; notranslate">
&lt;liferay-portlet-app&gt;
   ...
   &lt;portlet&gt;
      ...
      &lt;configuration-action-class&gt;it.qbr.jsp.action.ConfigurationActionImpl&lt;/configuration-action-class&gt;
      ...
   &lt;/portlet&gt;
   ...
&lt;/liferay-portlet-app&gt;
</pre>
<p>Creare in src la classe it.qbr.jsp.action.ConfigurationActionImpl che implementa com.liferay.portal.kernel.portlet.ConfigurationAction</p>
<pre class="brush: java; title: ; notranslate">

@Override
public void processAction(PortletConfig portletConfig,
ActionRequest actionRequest, ActionResponse actionResponse)
throws Exception {

   String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
   if (!cmd.equals(Constants.UPDATE)) {
      return;
   }

   String stringParameter = ParamUtil.getString(actionRequest, &quot;stringParameter&quot;);
   long longParameter = ParamUtil.getLong(actionRequest, &quot;longParameter&quot;);
   int intParameter = ParamUtil.getInteger(actionRequest, &quot;intParameter&quot;);

   String portletResource = ParamUtil.getString(actionRequest,&quot;portletResource&quot;);
   PortletPreferences preferences = PortletPreferencesFactoryUtil.getPortletSetup(actionRequest, portletResource);

   preferences.setValue(&quot;stringParameter&quot;, stringParameter);
   preferences.setValue(&quot;longParameter&quot;, String.valueOf(longParameter));
   preferences.setValue(&quot;intParameter&quot;, String.valueOf(intParameter));
   preferences.store();

   SessionMessages.add(actionRequest, portletConfig.getPortletName()+ &quot;.doConfigure&quot;);
}

@Override
public String render(PortletConfig portletConfig,
RenderRequest renderRequest, RenderResponse renderResponse)
throws Exception {
   return &quot;/configuration.jsp&quot;;
}
</pre>
<p>Creare init.jsp in modo da centralizzare il caricamento delle impostazioni della portlet.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;%@ taglib uri=&quot;http://java.sun.com/portlet&quot; prefix=&quot;portlet&quot; %&gt;

&lt;%@ taglib uri=&quot;http://liferay.com/tld/portlet&quot; prefix=&quot;liferay-portlet&quot; %&gt;
&lt;%@ taglib uri=&quot;http://liferay.com/tld/theme&quot; prefix=&quot;liferay-theme&quot; %&gt;
&lt;%@ taglib uri=&quot;http://liferay.com/tld/ui&quot; prefix=&quot;liferay-ui&quot; %&gt;
&lt;%@ taglib uri=&quot;http://liferay.com/tld/aui&quot; prefix=&quot;aui&quot; %&gt;

&lt;%@ page import=&quot;com.liferay.portal.util.PortalUtil&quot; %&gt;
&lt;%@ page import=&quot;com.liferay.portal.kernel.util.Constants&quot; %&gt;
&lt;%@ page import=&quot;com.liferay.portal.kernel.util.Validator&quot; %&gt;
&lt;%@ page import=&quot;com.liferay.portlet.PortletPreferencesFactoryUtil&quot; %&gt;
&lt;%@ page import=&quot;javax.portlet.PortletPreferences&quot; %&gt;
&lt;%@ page import=&quot;com.liferay.portal.kernel.util.ParamUtil&quot; %&gt;
&lt;%@ page import=&quot;com.liferay.portal.kernel.util.PrefsParamUtil&quot; %&gt;
&lt;%@ page import=&quot;com.liferay.portal.kernel.util.StringPool&quot; %&gt;

&lt;liferay-theme:defineObjects /&gt;
&lt;portlet:defineObjects /&gt;

&lt;%
String currentURL = PortalUtil.getCurrentURL(request);

PortletPreferences preferences = renderRequest.getPreferences();

String portletResource = ParamUtil.getString(request, &quot;portletResource&quot;);

if (Validator.isNotNull(portletResource)) {
   preferences = PortletPreferencesFactoryUtil.getPortletSetup(request, portletResource);
}

String stringParameter = preferences.getValue(&quot;stringParameter&quot;, StringPool.BLANK);
long longParameter = Long.valueOf(preferences.getValue(&quot;longParameter&quot;, &quot;0&quot;));
int intParameter = Integer.valueOf(preferences.getValue(&quot;intParameter&quot;, &quot;0&quot;));
%&gt;
</pre>
<p>A questo punto è possibile includere init.jsp in qualsiasi altra jsp per poter utilizzare le configurazioni.</p>
<p>Creare configuration.jsp, la pagina che renderizza il pannello di configurazione della portlet.</p>
<p>NOTA: il nome della jsp deve essere lo stesso del metodo render di ConfigurationActionImpl.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;%@include file=&quot;/init.jsp&quot; %&gt;
&lt;liferay-portlet:actionURL portletConfiguration=&quot;true&quot; var=&quot;configurationActionURL&quot; /&gt;
&lt;liferay-portlet:renderURL portletConfiguration=&quot;true&quot; varImpl=&quot;configurationRenderURL&quot; /&gt;
&lt;aui:form action=&quot;&lt;%= configurationActionURL %&gt;&quot; method=&quot;post&quot; name=&quot;&lt;portlet:namespace /&gt;fm&quot;&gt;
   &lt;aui:input name=&quot;&lt;%= Constants.CMD %&gt;&quot; type=&quot;hidden&quot; value=&quot;&lt;%= Constants.UPDATE %&gt;&quot; /&gt;
   &lt;aui:input name=&quot;redirect&quot; type=&quot;hidden&quot; value=&quot;&lt;%= configurationRenderURL.toString() %&gt;&quot; /&gt;
   &lt;liferay-ui:panel collapsible=&quot;&lt;%= true %&gt;&quot; extended=&quot;&lt;%= true %&gt;&quot; id=&quot;ap-abstract&quot; persistState=&quot;&lt;%= true %&gt;&quot; title=&quot;configuration&quot;&gt;
      &lt;aui:fieldset&gt;
         &lt;aui:input type=&quot;text&quot; name=&quot;stringParameter&quot; value=&quot;&lt;%=stringParameter %&gt;&quot; /&gt;
         &lt;aui:input type=&quot;text&quot; name=&quot;longParameter&quot; value=&quot;&lt;%=longParameter %&gt;&quot; /&gt;
         &lt;aui:input type=&quot;text&quot; name=&quot;intParameter&quot; value=&quot;&lt;%=intParameter %&gt;&quot; /&gt;
      &lt;/aui:fieldset&gt;
   &lt;/liferay-ui:panel&gt;
   &lt;aui:button-row&gt;
      &lt;aui:button type=&quot;submit&quot; value=&quot;Save&quot; /&gt;
   &lt;/aui:button-row&gt;
&lt;/aui:form&gt;
</pre>
<p><em><strong>Rendering dei contenuti dinamici</strong></em></p>
<p>In portlet.xml aggiungere</p>
<pre class="brush: xml; title: ; notranslate">
&lt;portlet&gt;
   ...
   &lt;portlet-class&gt;it.qbr.jsp.action.ApPortletAction&lt;/portlet-class&gt;
   &lt;init-param&gt;
      &lt;name&gt;view-template&lt;/name&gt;
      &lt;value&gt;/view.jsp&lt;/value&gt;
   &lt;/init-param&gt;
   ...
&lt;/portlet&gt;
</pre>
<p>Creare in src la classe it.qbr.jsp.action.ApPortletAction che estende com.liferay.util.bridges.mvc.MVCPortlet. Questo vuol dire che la nostra Portlet utilizzerà l&#8217;MVC di Liferay, ma naturalmente è possibile realizzare portlet utilizzando MVC di Struts piuttosto che Spring MVC.</p>
<pre class="brush: java; title: ; notranslate">

public class ApPortletAction extends MVCPortlet {

@Override
public void render(RenderRequest request, RenderResponse response)
throws PortletException, IOException {

   HttpServletRequest httpRequest = (HttpServletRequest) request.getAttribute(PortletServlet.PORTLET_SERVLET_REQUEST);
   ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY);
   Locale locale = themeDisplay.getLocale();

   PortletPreferences preferences = request.getPreferences();
   String portletResource = ParamUtil.getString(request, &quot;portletResource&quot;);
   if (Validator.isNotNull(portletResource)) {
      try {
         preferences = PortletPreferencesFactoryUtil.getPortletSetup(request, portletResource);
      } catch (PortalException e) {
         e.printStackTrace();
      } catch (SystemException e) {
      e.printStackTrace();
      }
   }

   //Recupero parametri da portalResource
   String stringParameter = preferences.getValue(&quot;stringParameter&quot;, &quot;&quot;);
   long longParameter = Long.valueOf(preferences.getValue(&quot;longParameter&quot;, &quot;0&quot;));
   int intParameter = Integer.valueOf(preferences.getValue(&quot;area&quot;, &quot;0&quot;);

   String viewString = stringParameter + &quot; è pari a &quot; + longParameter*intParameter;
   request.setAttribute(&quot;viewString&quot;, viewString);
   super.render(request, response);
}
</pre>
<p>Modificare la view.jsp</p>
<pre class="brush: xml; title: ; notranslate">

&lt;%@include file=&quot;/init.jsp&quot; %&gt;

&lt;% String viewString = (String)renderRequest.getAttribute(&quot;viewString&quot;); %&gt;

&lt;h3&gt;&lt;%=viewString %&gt;&lt;/h3&gt;
</pre>
<p>Finito. Supponendo di aver configurato la Portlet con i seguenti parametri:</p>
<p>stringParameter: &#8220;Il valore della moltiplicazione tra longParameter e intParameter&#8221;</p>
<p>longParameter: 3</p>
<p>intParameter: 4</p>
<p>la Portelet renderizzerà un frammento di codice che come quello che segue:</p>
<p>&lt;h3&gt;Il valore della moltiplicazione tra longParameter e intParameter è pari a 12&lt;/h3&gt;</p>
<p><strong>Ambiente di sviluppo e requisiti:</strong></p>
<p>Eclipse Indigo Release (Build id: 20110319-2305)</p>
<p>Liferay IDE plugin per Eclipse v1.5.3.x o superiore</p>
<p>Sun jdk1.6.0_23 o superiore</p>
<p>Liferay: liferay-portal-6.1.0-ce-ga1, liferay-plugins-sdk-6.1.0</p>
]]></content:encoded>
			<wfw:commentRss>http://lab.qbrgroup.it/liferay-portlet-jsr286/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Portlet</title>
		<link>http://lab.qbrgroup.it/portlet/</link>
		<comments>http://lab.qbrgroup.it/portlet/#comments</comments>
		<pubDate>Wed, 29 Aug 2012 11:12:27 +0000</pubDate>
		<dc:creator>giuseppe.cavallo</dc:creator>
				<category><![CDATA[Portlet]]></category>

		<guid isPermaLink="false">http://lab.qbrgroup.it/?p=571</guid>
		<description><![CDATA[Le Portlet sono componenti software, gestite da un portlet container (Portale), che processano le richieste ricevute e generano come risposta contenuti dinamici. Esse vengono usate come componenti d&#8217;interfaccia utente pluggabili per fornire un livello di presentazione ai sistemi informativi. Le portlet generano &#8230; <a href="http://lab.qbrgroup.it/portlet/">Continua a leggere<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Le Portlet sono componenti software, gestite da un portlet container (Portale), che processano le richieste ricevute e generano come risposta contenuti dinamici. Esse vengono usate come componenti d&#8217;interfaccia utente pluggabili per fornire un livello di presentazione ai sistemi informativi. Le portlet generano frammenti di markup(HTML, XHTML), non pagine complete; i frammenti generati dalle varie portlet vengono aggregati per formare pagine del portale; le portlet generano contenuti diversi a seconda del singolo utente o del gruppo di cui fa parte.</p>
<p>Gli Standard <a title="Java Portlet Specification" href="http://en.wikipedia.org/wiki/Java_Portlet_Specification">Java Portlet Specification (JSR168, JSR286)</a> definiscono una convenzione tra il portlet container e le portlet e forniscono un modello pratico di programmazione per gli sviluppatori. Inoltre garantisce l&#8217;interoperabilità di portlet per diversi portali web. Questa specifica definisce un insieme di API per l&#8217;interazione tra il portlet container e la portlet in riferimento alle aree di personalizzazione, la presentazione e la sicurezza.</p>
]]></content:encoded>
			<wfw:commentRss>http://lab.qbrgroup.it/portlet/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Liferay Portal</title>
		<link>http://lab.qbrgroup.it/liferay-portal/</link>
		<comments>http://lab.qbrgroup.it/liferay-portal/#comments</comments>
		<pubDate>Wed, 29 Aug 2012 11:12:12 +0000</pubDate>
		<dc:creator>giuseppe.cavallo</dc:creator>
				<category><![CDATA[Liferay]]></category>

		<guid isPermaLink="false">http://lab.qbrgroup.it/?p=559</guid>
		<description><![CDATA[Un portale viene solitamente definito come una piattaforma software per la realizzazione di siti e applicazioni web. Uno degli primi utilizzi del Portale è stato quello di integrare le diverse applicazioni esistenti in un&#8217;unica interfaccia per gli utenti. I Portali hanno &#8230; <a href="http://lab.qbrgroup.it/liferay-portal/">Continua a leggere<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Un portale viene solitamente definito come una piattaforma software per la realizzazione di siti e applicazioni web. Uno degli primi utilizzi del Portale è stato quello di integrare le diverse applicazioni esistenti in un&#8217;unica interfaccia per gli utenti. I Portali hanno permesso alle aziende di mettere assieme le informazioni e le applicazioni in un unico sito dove gli utenti, in base al ruolo, possono avere rapido accesso a tutti i contenuti specifici per il proprio ruolo. Inoltre, i portali sono in grado di integrare diversi siti web in un unico sito web unificato.</p>
<p><a title="Liferay Portal Home" href="http://www.liferay.com/" target="_blank">Liferay Portal</a> aggiunge alla definizione di Portale una serie di caratteristiche che lo rendono unico:</p>
<div>
<ul>
<li><span style="font-size: small">strato centralizzato di accesso ai dati che consente ad utenti, amministratori e sviluppatori di integrare servizi di contenuti e applicazioni e backend legacy. Liferay fornisce metodi di integrazione multiple tra cui SOAP, REST, RSS e API proprietarie.</span></li>
<li><span style="font-size: small">integrare contenuti e applicazioni in un&#8217;unica piattaforma, senza autenticarsi più volte, consentendo l&#8217;accesso ad essi da una singola sessione, grazie ai molteplici meccanismi di integrazione con Single Sign-On sicuri.</span></li>
<li><span style="font-size: small">supporto multi-lingua (più di 30), ma potete ovviamente aggiungere la vostra se non fosse supportata.</span></li>
<li><span style="font-size: small">accesso al sito web e di visualizzare una pagina personalizzata in base a ruoli, gruppi, organizzazioni o preferenze personali. Liferay Portal consente agli amministratori di impostare la politica aziendale di accesso a contenuti e funzionalità, specificando chi può modificare e pubblicare contenuti, file, community, file e applicazioni da un funzionale interfaccia centralizzata.</span></li>
<li><span style="font-size: small">openSocial, gli utenti possono gestire e utilizzare gadget social web-based direttamente sulle loro pagine e nei loro siti.</span></li>
<li><span style="font-size: small">motore di workflow che consente di definire i processi di pubblicazione e approvazione in base ai vincoli di business e gestionali che questi devono avere.</span></li>
<li><span style="font-size: small"><span style="font-size: small">strumenti per una discussione produttiva riguardante tutta la vostra conoscenza collettiva: Wikis, Blogs, Sondaggi, RSS, Tag, Categorie e altro ancora</span></span></li>
</ul>
<p>Liferay è fondamentalmente costruita con unità funzionali chiamate <a title="Portlet" href="http://lab.qbrgroup.it/portlet/">Portlet</a>. L&#8217;installazione del pacchetto Liferay Portal include più di ogni altro portale disponibili sul mercato, con oltre 60 portlet disponibili per personalizzare il vostro ambiente di lavoro. Tra questi, Liferay CMS e le Liferay Collaboration offrono le funzionalità per la gestione dei contenuti web, la collaborazione e l&#8217;interazione attraverso i social network.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://lab.qbrgroup.it/liferay-portal/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Integrazione Alfresco &#8211; eMail</title>
		<link>http://lab.qbrgroup.it/integrazione-alfresco-email/</link>
		<comments>http://lab.qbrgroup.it/integrazione-alfresco-email/#comments</comments>
		<pubDate>Tue, 01 May 2012 16:07:29 +0000</pubDate>
		<dc:creator>mirco.leo</dc:creator>
				<category><![CDATA[Senza categoria]]></category>

		<guid isPermaLink="false">http://lab.qbrgroup.it/?p=74</guid>
		<description><![CDATA[ALFRESCO EMAIL CONFIGURATION Alfresco permette la gestione delle email secondo due modalità: – Outbound email – Inbound email Outbound email Con questa modalità è possibile inviare email di notifica ad utenti registrati su Alfresco. Per tale operazione bisogna accedere con &#8230; <a href="http://lab.qbrgroup.it/integrazione-alfresco-email/">Continua a leggere<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><strong> ALFRESCO EMAIL CONFIGURATION</strong></p>
<p>Alfresco permette la gestione delle email secondo due modalità:</p>
<p>– Outbound email – Inbound email</p>
<p><strong>Outbound email</strong></p>
<p>Con questa modalità è possibile inviare email di notifica ad utenti registrati su Alfresco. Per tale operazione bisogna accedere con utenza di amministratore.</p>
<p>Per configurare Alfresco nella modalità Outbound è necessario modificare il file repository.properties posto nella directory seguente:</p>
<p>Alfresco_Home/tomcat/webapps/alfresco/WEBINF/classes/alfresco</p>
<p>Impostare le credenziali per l&#8217;accesso all&#8217;SMTP Server esterno, per esempio:</p>
<p>mail.host=out.alice.it mail.port=25 mail.username=anonymous mail.password=</p>
<p><strong>Inbuound email</strong></p>
<p>Con questa modalità è possibile configurare Alfresco come repository di email direttamente su un nodo. I test sono stati effettuati per email in ingresso, in un ambiente in cui è stato installato JAMES SMTPPOP3 Server e il modulo EmailCollector1.2 per Alfresco. Per configurare Alfresco in modalità Outbound procedere come segue:</p>
<p>– installare il modulo emailCollector ( http://forge.alfresco.com/frs/?group_id=166&amp;release_id=380 ) utilizzando l&#8217;utility amp fornita in Alfresco</p>
<p>– abilitare il Servizio SMTP di Alfresco in ALFRESCO_HOME/tomcat/webapps/alfresco/WEBINF/classes/alfresco/emailse/emailserver.properties</p>
<p>– impostare:</p>
<p>mail.inbound.enabled=true email.inbound.unknownUser=anonymous</p>
<p>– copiare il file email.collector.properties fornito con il modulo emailCollector nella</p>
<p>directory seguente: ALFRESCO_HOME/tomcat/shared/classes/alfresco/extension</p>
<p>– impostare gli account POP dei vari utenti</p>
<p>– configurare gli utenti in Alfresco:</p>
<p>creazione account utenti</p>
<p>creazione utente anonymous</p>
<p>aggiunta degli utenti nel gruppo EMAL_CONTRIBUTORS</p>
<p>creazione degli space inbox “emailed” per tutti gli utenti</p>
<p>accesso in scrittura agli space per l&#8217;utente anonymous</p>
<p>– nel caso di problemi su “email alias” vedi http://forums.alfresco.com/en/viewtopic.php?f=9&amp;t=13860</p>
]]></content:encoded>
			<wfw:commentRss>http://lab.qbrgroup.it/integrazione-alfresco-email/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Integrare Liferay &amp; Alfresco</title>
		<link>http://lab.qbrgroup.it/integrare-liferay-alfresco/</link>
		<comments>http://lab.qbrgroup.it/integrare-liferay-alfresco/#comments</comments>
		<pubDate>Thu, 26 Apr 2012 09:59:58 +0000</pubDate>
		<dc:creator>andrea.sponziello</dc:creator>
				<category><![CDATA[Senza categoria]]></category>

		<guid isPermaLink="false">http://lab.qbrgroup.it/?p=535</guid>
		<description><![CDATA[by Andrea Sponziello Liferay Portal dispone di molte portlet per la gestione integrata dei documenti e in generale di tutto il digital asset aziendale nei formati più conosciuti (testo, HTML, PDF, immagini, e altri media) Nonostante questo supporto nativo alla gestione documentale &#8230; <a href="http://lab.qbrgroup.it/integrare-liferay-alfresco/">Continua a leggere<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>by <em>Andrea Sponziello</em></p>
<p><a title="Liferay Inc." href="http://liferay.com/" target="_blank">Liferay Portal</a> dispone di molte <em>portlet</em> per la gestione integrata dei documenti e in generale di tutto il <em>digital asset</em> aziendale nei formati più conosciuti (testo, HTML, PDF, immagini, e altri media)</p>
<p>Nonostante questo supporto nativo alla gestione documentale sia fornito in modo eccellente dalla piattaforma, è spesso necessario pubblicare sul portale aziendale contenuti provenienti da altri <a title="Definizione di ECM su Wikipedia" href="http://it.wikipedia.org/wiki/Enterprise_Content_Management" target="_blank">ECM</a>s (Enterprise Content Management System) esterni. E&#8217; facile immaginare infatti che sul lungo periodo il portale Aziendale non si configuri sicuramente come l’unico strumento in cui i documenti sono prodotti (mentre probabilmente rimarrà il principale strumento di pubblicazione e fruizione degli stessi).</p>
<p>Ad esempio, il modello di riferimento in architetture <a title="Enterprise 2.0 on Wikipedia" href="http://en.wikipedia.org/wiki/Enterprise_2.0" target="_blank">Enterprise 2.0</a> per la gestione dei contenuti consiste nell’utilizzare internamente all’Azienda una piattaforma di <em>Collaboration</em> (come <a title="Alfresco Share" href="http://www.alfresco.com/it/products/collaboration/" target="_blank">Alfresco Share</a> o <a title="Microsoft SharePoint" href="http://sharepoint.microsoft.com/" target="_blank">MS SharePoint</a>) per organizzare i workflow di produzione dell’asset digitale. Tale produzione non dipende in genere dallo specifico canale di pubblicazione del contenuto. I documenti finalizzati dai vari workflow saranno ad esempio destinati all’archiviazione (inviati all’<em>archivio corrente</em>, al <em>protocollo</em> o in <em>conservazione sostitutiva/legale</em>) oppure alla pubblicazione su uno o più portali aziendali, in un’area pubblica o privata degli stessi, al fine di consentire ai documenti di essere facilmente accessibili attraverso un canale web (o <em>mobile</em> o comunque diretto ad un pubblico più ampio rispetto a quello accessibile dall&#8217;ambiente di Collaboration interno).</p>
<p>Al fine di semplificare l’interazione tra Area collaborativa interna e Liferay alcuni prodotti ECM come <a title="Alfresco Inc." href="http://alfresco.com/" target="_blank">Alfresco</a> forniscono <a title="Alfresco support for Liferay" href="http://www.alfresco.com/products/integrations/liferay/" target="_blank">alcune portlet</a> che, opportunamente configurate, consentono di fruire dal portale Liferay dei documenti depositati sulla piattaforma ECM.</p>
<p>Nonostante questo supporto all’integrazione attraverso portlet sia supportato direttamente da Alfresco, spesso risulta insufficiente alle esigenze di verticalizzazione del Cliente finale che richiede forti personalizzazioni delle funzioni di comunicazione Portale-ECM. Tali spinte obbligano spesso ad abbandonare le soluzioni di integrazione fornite nativamente e procedere ad uno sviluppo “from scratch”. E’ questo il momento in cui si affronta la classica decisione <a title="Buy vs. build: Six steps to making the right decision" href="http://www.techrepublic.com/article/buy-vs-build-six-steps-to-making-the-right-decision/1038857" target="_blank">buy vs build</a>.</p>
<p><strong>Buy</strong></p>
<p>In passato, la mancanza di un protocollo di comunicazione standard, flessibile ed affidabile verso gli ambienti ECM rendeva questa decisione molto onerosa. Decidere verso il <em>buy</em> significava in genere utilizzare i componenti forniti e limitare le loro funzioni a quelle derivanti dalle possibilità di configurazione direttamente supportate. Questo naturalmente ha il grande svantaggio di non offrire al Cliente la flessibilità richiesta nel raggiungimento delle specifiche di integrazione percepite. Ha invece il grande vantaggio di fornire velocemente e a basso costo una soluzione usabile (utile sicuramente nelle iterazioni iniziali del processo di sviluppo).</p>
<p><strong>Build</strong></p>
<p>Decidere verso il <em>build</em> significava, in passato, addentrarsi in un campo oscuro in cui protocolli e standard di comunicazione non erano definiti ed ogni scelta aveva ricadute enormi sui costi di sviluppo e manutenzione della soluzione di integrazione ECM/WCM con ricadute dirette sia sulla Qualità percepita dal Cliente, sia sul tasso di riuso del codice sviluppato e sui relativi costi di manutenzione (e quindi in generale su tutta l’economia del progetto).</p>
<p><strong>Decidere per il <em>build</em></strong></p>
<p>Oggi, grazie allo sviluppo e all’adozione da parte dei più diffusi ECM del protocollo di comunicazione <a title="CMIS on Wikipedia" href="http://en.wikipedia.org/wiki/Content_Management_Interoperability_Services" target="_blank">CMIS</a> (Content Management Interoperability Services) venire incontro alle esigenze di verticalizzazione del Cliente si rivela un compito molto economico e dai frutti sorprendenti.</p>
<p>Rimandiamo a questo <a title="Realizzare una Portlet CMIS per Liferay" href="http://sponziello.wordpress.com/2012/04/24/portlet-cmis-per-navigazione-di-un-repository/" target="_blank">articolo</a> (<strong><a title="Developing a CMIS portlet for Liferay" href="http://sponziello.wordpress.com/2012/04/27/developing-a-cmis-portlet-for-liferay/" target="_blank">english version</a></strong>) in cui si mostra in dettaglio come è stata realizzata una semplice portlet Liferay per l&#8217;integrazione con Alfresco utilizzando il protocollo CMIS. Nella versione completa questa portlet è uno dei componenti di integrazione della piattaforma <a title="Beefly" href="http://beefly.it/" target="_blank">Beefly</a>.</p>
<p>Tra le funzioni offerte dal prototipo descritto nell&#8217;articolo evidenziamo:</p>
<ol>
<li>Facile navigazione di un repository CMIS remoto</li>
<li>Impostazione della modalità di autenticazione</li>
<li>Impostazione del sub-tree di navigazione del repository</li>
<li>Supporto completo della profilazione dei contenuti</li>
<li>Navigazione dell&#8217;albero dei contenuti in modalità AJAX</li>
<li>Download dei contenuti selezionati, direttamente sul repository o tramite proxy</li>
<li>Multi-istanza. Più portlet possono essere configurate, anche sulla stessa pagina, per navigare porzioni diverse del repository</li>
</ol>
<p>Dall&#8217;<a title="Realizzare una Portlet CMIS per Liferay" href="http://sponziello.wordpress.com/2012/04/24/portlet-cmis-per-navigazione-di-un-repository/" target="_blank">articolo</a> (<strong><em>also available in the <a title="Developing a CMIS portlet for Liferay" href="http://sponziello.wordpress.com/2012/04/27/developing-a-cmis-portlet-for-liferay/" target="_blank">english</a> version</em></strong>) è anche possibile scaricare il codice sorgente della portlet.</p>
<p>Buona lettura.</p>
]]></content:encoded>
			<wfw:commentRss>http://lab.qbrgroup.it/integrare-liferay-alfresco/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Integrazione CUPS Alfresco Spring-Camel</title>
		<link>http://lab.qbrgroup.it/integrazione-cups-alfresco-spring-camel/</link>
		<comments>http://lab.qbrgroup.it/integrazione-cups-alfresco-spring-camel/#comments</comments>
		<pubDate>Wed, 04 Apr 2012 17:21:05 +0000</pubDate>
		<dc:creator>alessandro.leo</dc:creator>
				<category><![CDATA[Senza categoria]]></category>

		<guid isPermaLink="false">http://lab.qbrgroup.it/?p=502</guid>
		<description><![CDATA[  L&#8217;integrazione di applicativi eterogenei nell&#8217;ambito dei flussi documentali ed informativi aziendali è da sempre uno degli argomenti più complessi che un System Integrator deve affrontare. Gli utenti dei vari applicativi aziendali sono spesso obbligati ad elaborare lo stesso documento &#8230; <a href="http://lab.qbrgroup.it/integrazione-cups-alfresco-spring-camel/">Continua a leggere<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://lab.qbrgroup.it/integrazione-cups-alfresco-spring-camel/alfresco_logo_transparent/" rel="attachment wp-att-513"><img class="alignnone  wp-image-513" src="http://lab.qbrgroup.it/wp-content/uploads/2012/04/Alfresco_logo_transparent.png" alt="" width="92" height="92" /></a><a href="http://lab.qbrgroup.it/integrazione-cups-alfresco-spring-camel/apache-camel-7/" rel="attachment wp-att-512"><img class="alignnone  wp-image-512" src="http://lab.qbrgroup.it/wp-content/uploads/2012/04/apache-camel-7.png" alt="" width="210" height="86" /></a> <a href="http://lab.qbrgroup.it/integrazione-cups-alfresco-spring-camel/cupslogo/" rel="attachment wp-att-517"><img class="alignnone  wp-image-517" src="http://lab.qbrgroup.it/wp-content/uploads/2012/04/CUPSlogo.jpg" alt="" width="106" height="125" /></a></p>
<p>L&#8217;integrazione di applicativi eterogenei nell&#8217;ambito dei flussi documentali ed informativi aziendali è da sempre uno degli argomenti più complessi che un <em>System Integrator</em> deve affrontare.</p>
<p>Gli utenti dei vari applicativi aziendali sono spesso obbligati ad elaborare lo stesso documento tramite diverse applicazioni che purtroppo non sempre sono in grado di comunicare in modo &#8220;nativo&#8221;.</p>
<p>Nel caso dei sistemi di gestione dei contenuti, la comunicazione tra i sistemi potrebbebbe avvenire attraverso quello che è ormai divenuto uno standard consolidato, vale a dire il protocollo CMIS. Purtroppo utilizzare questo protocollo pretende, per quanto detto prima, il completo supporto da parte di tutti gli applicativi coinvolti in un workflow documentale.</p>
<p>Spesso l&#8217;integrazione tra applicativi che non &#8220;parlano&#8221; la stessa lingua (CMIS in questo caso) può avvenire attraverso l&#8217;integrazione con lo <strong>Spooler di stampa</strong>. L&#8217;idea è quella di convincere l&#8217;applicativo a &#8220;stampare&#8221; il documento su una stampante di rete condivisa. Tale stampante in realtà è virtuale e la stampa produce in realtà la spedizione del documento verso un&#8217;altro applicativo. Per integrare un tale tipo di funzionalità all&#8217;interno del nostro prodotto di gestione documentale Beefly abbiamo utilizzato il protocollo <em>IPP</em> (Internet Printing Protocol) e sviluppato l&#8217;integrazione tramite <strong>CUPS</strong> e <strong>Apache-Camel</strong>.</p>
<p>CUPS (Common Unix Printing System) è un <em>Print Spooler</em> modulare per sistemi operativi di tipo Unix che permette ad un computer di funzionare come un efficace <em>print server</em>.<br />
Un computer con CUPS in esecuzione è in grado di accettare stampe da altri computer client, elaborarle ed inviarle alla stampante richiesta.</p>
<p>Il modulo realizzato è costituito da uno spooler/scheduler, un <strong>filtro</strong> che converte i dati di stampa ricevuti in un formato accettato dalla stampante ed un modulo che invia i dati elaborati al dispositivo di stampa.<br />
CUPS si basa sull&#8217;Internet printing protocol (IPP) per gestire l&#8217;invio dei dati e le code di<br />
stampa.<br />
L&#8217;interfacciamento con i driver si basa sul formato PostScript printer description (PPD).<br />
La gestione e configurazione di CUPS può essere effettuata attraverso l&#8217;interfaccia web<br />
integrata.</p>
<p>Apache-Camel è un potente framework open-source d&#8217;integrazione che implementa i più noti <em>Enterprise Application Patterns</em>.<br />
Questo framework permette di creare sistemi d&#8217;integrazione in ambienti distribuiti  permettendo di realizzare regole di routing e di mediazione sia in Domain Specific Language di tipo Java based sia tramite Spring e quindi in modo dichiarativo tramite XML.</p>
<p>Tecnicamente il modulo prevede linstallazione sul server su cui risiede CUPS di una stampante PDF virtuale. CUPS permette di realizzare ciò tramite l&#8217;installazione di un backend chiamato &#8220;cups-pdf&#8221;. Tale backend permetterà al sistema su cui è installato il server CUPS di installare una stampante virtuale PDF &#8220;CUPS-compliance&#8221;.<br />
CUPS gestirà lo spool scheduler di tale stampante ed inoltre renderà disponibile via rete la stampante a tutti gli altri client che ne vorranno fare uso.</p>
<p>I client dovranno aggiungere una stampante di rete tramite una stringa di connessione di questo tipo:<br />
<strong>http://{IP-CUPS-SERVER}:631/printers/{PDF-VIRTUAL-PRINTER-NAME}</strong><br />
dove:<br />
<strong>- IP-CUPS-SERVER</strong> è l&#8217;indirizzo IP del servfer su cui è in esecuzione CUPS<br />
<strong>- 631</strong> è la porta sulla quale risponde il protocollo IPP<br />
<strong>- PDF-VIRTUAL-PRINTER-NAME</strong> è il nome asseganto alla stampante pdf virtuale deciso in fase d&#8217;installazione sul server su cui risiede CUPS</p>
<p>I clients devono inoltre fornire alla stampante delle credenziali di accesso tramite le quali potersi autenticare sul sistema linux su cui è installato CUPS. Questo permetterà in seguito di classificare i documenti pervenuti a CUPS.</p>
<p>Una volta configurata la stampante sul client sarà possibile inviare un documento, da qualunque applicativo che permetta di stampare, al server CUPS ed ottenere quindi una versione PDF dello stesso.</p>
<p>Il backend cups-pdf permette di inviare tutti i documenti convertiti in PDF in una determinata cartella (/home/{LINUX USER}/PDF ad esempio)<br />
in funzione dell&#8217;utente con il quale il client si è collegato al server CUPS. Una volta ottenuto tale documento questo sarà mandato in pasto al framework Apache-camel.<br />
Apache-camel è configurato per essere in ascolto su i documenti pervenuti nella cartella di destinazione di cups-pdf e per ogni documento pervenuto apache-camel chiama un processo che tramite delle API CMIS caricano il file sul ECM alfresco.<br />
Il seguente workflow descrive brevemente i passi previsti per il capturing tramite spool di stampa:</p>
<p style="text-align: center;">CLIENT<br />
|<br />
SERVER CUPS<br />
|<br />
CUPS-PDF<br />
|<br />
SERVER FOLDER<br />
|<br />
JAVA CAMEL PROCESSOR<br />
|<br />
ALFRESCO</p>
<p style="text-align: left;">Elenchiamo i passi uno ad uno:</p>
<p><strong>===============================</strong><br />
<strong> 2.1 INSTALLARE CUPS &amp; CUPS-PDF</strong><br />
<strong> ===============================</strong><br />
1) sudo apt-get install cups<br />
2) sudo apt-get install cups-pdf</p>
<p><strong>===============================</strong><br />
<strong> 2.2 CONFIGURARE CUPS &amp; CUPS-PDF</strong><br />
<strong> ===============================</strong><br />
I file di configurazione per CUPS e CUPS-PDF sono rispettivamente in &#8220;/etc/cups/cupsd.conf&#8221; e &#8220;/etc/cups/cups-pdf.conf&#8221;;<br />
I file per i log per cups e cups-pdf sono in &#8220;/var/log/cups/error_log&#8221; e &#8220;/var/log/cups/cups-pdf_log&#8221; rispettivamnte.</p>
<p>Per la configurazione di tutti e 2 procedere come segue:</p>
<p>1) Sovrascrivere il primo file con questo:</p>
<p>## Livello di debug messo a &#8220;debug&#8221; per farci stampare piu&#8217; log<br />
LogLevel debug<br />
MaxLogSize 1m<br />
SystemGroup lpadmin<br />
# Allow remote access<br />
Port 631<br />
Listen /var/run/cups/cups.sock<br />
# Enable printer sharing and shared printers.<br />
Browsing On<br />
BrowseOrder allow,deny<br />
BrowseAllow all<br />
BrowseRemoteProtocols CUPS<br />
BrowseAddress @LOCAL<br />
BrowseLocalProtocols cups</p>
<p>## Tipo di autorizzazione LINUX<br />
DefaultAuthType Basic<br />
## Necessario per far funzionare l&#8217;autenticazione con i clients WINDOWS<br />
DefaultEncryption IfRequested</p>
<p>## Per accettare alias di qualunque tipo<br />
ServerAlias *</p>
<p>###########################<br />
# L O C A T I O N S<br />
###########################<br />
&lt;Location /&gt;<br />
# Allow shared printing and remote administration&#8230;<br />
Order allow,deny<br />
Allow all<br />
&lt;/Location&gt;<br />
&lt;Location /admin&gt;<br />
# Allow remote administration&#8230;<br />
Order allow,deny<br />
Allow all<br />
&lt;/Location&gt;<br />
&lt;Location /admin/conf&gt;<br />
# AuthType Default<br />
# Require user @SYSTEM<br />
# Allow remote access to the configuration files&#8230;<br />
Order allow,deny<br />
Allow all<br />
&lt;/Location&gt;</p>
<p>#############################<br />
# P O L I C I E S<br />
#############################<br />
## &#8212;&#8212;&#8212;&gt; D E F A U L T<br />
#############################</p>
<p>&lt;Policy default&gt;<br />
&lt;Limit Print-Job Send-Document Send-URI Hold-Job Release-Job Restart-Job Purge-Jobs Set-Job-Attributes Create-Job-Subscription Renew-Subscription Cancel-Subscription Get-Notifications Reprocess-Job Cancel-Current-Job Suspend-Current-Job Resume-Job CUPS-Move-Job CUPS-Get-Document&gt;<br />
## &#8220;Print Job&#8221; rappresenta la direttiva IPP per l&#8217;invio della stampa<br />
## Stiamo dicendo di sottoporre tutte le diretive elencate<br />
## sopra ad un autenticazione che richiede username e password con un utente che appartenga al<br />
## sistema server<br />
AuthClass User<br />
AuthType Basic<br />
Require user @SYSTEM<br />
Order deny,allow<br />
&lt;/Limit&gt;<br />
&lt;Limit CUPS-Add-Modify-Printer CUPS-Delete-Printer CUPS-Add-Modify-Class CUPS-Delete-Class CUPS-Set-Default CUPS-Get-Devices&gt;<br />
AuthType None<br />
# Require user @SYSTEM<br />
Order deny,allow<br />
&lt;/Limit&gt;<br />
&lt;Limit Pause-Printer Resume-Printer Enable-Printer Disable-Printer Pause-Printer-After-Current-Job Hold-New-Jobs Release-Held-New-Jobs Deactivate-Printer Activate-Printer Restart-Printer Shutdown-Printer Startup-Printer Promote-Job Schedule-Job-After CUPS-Accept-Jobs CUPS-Reject-Jobs&gt;<br />
AuthType None<br />
Require user @SYSTEM<br />
Order deny,allow<br />
&lt;/Limit&gt;<br />
&lt;Limit Cancel-Job CUPS-Authenticate-Job&gt;<br />
Require user @OWNER @SYSTEM<br />
Order deny,allow<br />
&lt;/Limit&gt;<br />
&lt;Limit All&gt;<br />
Order deny,allow<br />
&lt;/Limit&gt;<br />
&lt;/Policy&gt;</p>
<p>2) Lasciare il file &#8220;/etc/cups/cups-pdf.conf&#8221; invariato e modficare soltanto la riga:</p>
<p>#UserUMask 0077<br />
con<br />
UserUMask 0002</p>
<p>Questo permette ai file pdf creati da cups-pdf nelle cartelle {$USER_HOME}/PDF del server di poter essere processati da Camel.</p>
<p>3) Lanciare il comando &#8220;sudo /etc/init.d/cups restart&#8221; per rendere effettive le modifiche del CUPS server</p>
<p><strong>===============================</strong><br />
<strong> 3 CONFIGURAZIONE SISTEMA LINUX</strong><br />
<strong> ===============================</strong><br />
1) Vogliamo prevedere la presenza di un utente che abbia la possibilita di stampare e quindi autenticarsi con cups dal proprio client. Avendo scelto come tipo di autorizzazione quella di tipo Basic (LINUX authentication) dobbiamo creare un utente sulla macchina server: &#8220;spooluser&#8221;;<br />
Eseguiamo:<br />
sudo adduser spooluser</p>
<p>2) Se l&#8217;utente amministratore del server (cioè colui che avvia l&#8217;applicazione) è l&#8217;utente &#8220;my_user&#8221; appartenente al gruppo &#8220;my_user&#8221; allora per permettere la scrittura e lettura all&#8217;interno della cartella {$USER_HOME}/PDF dell&#8217;utente appena creato(spooluser) dobbiamo aggiungere l&#8217;utente &#8220;my_user&#8221; al gruppo &#8220;spooluser&#8221; che è stato creato automaticamente dal sistema al momento della creazione dell&#8217;utente in questione.<br />
Eseguiamo:<br />
sudo usermod -aG spooluser my_user</p>
<p>3) CUPS viene eseguito solo con utenti che appartengono al gruppo &#8220;lpadmin&#8221; quindi dobbiamo aggiungere tutti gli utenti che vogliamo usino cups a questo gruppo.<br />
Eseguiamo:<br />
sudo usermod -aG lpadmin my_user<br />
sudo usermod -aG lpadmin spooluser</p>
<p>5) Riavviare la sessione della macchina per rendere effettive le modifiche.</p>
<p><strong>=================================================</strong><br />
<strong> 4 CONFIGURAZIONE E AGGIUNTA STAMPANTE DAL PANNELLO DI CONTROLLO DI CUPS</strong><br />
<strong> =================================================</strong><br />
1 &#8211; Accedera alla console di ammnistrazione di CUPS: &#8220;http://{CUPS_SERVER_URL}:631/admin&#8221;<br />
2 &#8211; Nella pagina di amministrazione sotto la voce &#8220;Impostazioni server&#8221; attivare le checkbox relative a:</p>
<ul>
<li>Condividi stampanti connesse al sistema</li>
<li>Consenti la stampa da Internet</li>
<li>Consenti amministrazione remota</li>
</ul>
<p>3 &#8211; Sotto la voce &#8220;Stampanti&#8221; in alto a sinistra premere su &#8220;aggiungi stampante&#8221;<br />
4 &#8211; Sotto la voce &#8220;Stampanti locali&#8221; dovrebbe essere presente una checkbox &#8220;CUPS-PDF (Virtual PDF Printer)&#8221; selezionare la checkbox e premere su &#8220;avanti&#8221;<br />
5 &#8211; Nel campo &#8220;Nome&#8221; inserire il nome che si vuole dare alla stampante che si sta aggiungendo, ad es.: &#8220;ToAlfresco&#8221;<br />
6 &#8211; Rendere attivo la chekbox &#8220;Condividi la stampante&#8221; e premere su &#8220;continua&#8221;<br />
7 &#8211; Nella lista denominata &#8220;Crea&#8221; selezionare &#8220;Generic&#8221; e poi &#8220;continua&#8221;<br />
8 &#8211; Nella seconda lista denominata &#8220;Modello&#8221; selezionare esattamente &#8220;Generic PostScript Printer(en)&#8221; e premere su &#8220;add printer&#8221;<br />
9 &#8211; Lasciare invariati i campi &#8220;General&#8221; e premere su &#8220;Imposta opzioni predefinite&#8221;</p>
<p><strong>===============================</strong><br />
<strong> 5 CONFIGUARAZIONE CAMEL</strong><br />
<strong> ===============================</strong><br />
Camel CUPS viene configurato tramite il file di context spring:<br />
&#8220;src/main/resources/META-INF/applicationContext.xml&#8221;<br />
e dal file di properties;<br />
&#8220;src/main/resources/META-INF/cupsCamelAlfresco.properties&#8221;</p>
<p>Di seguito riporto i 2 file correttamente configurati per il caso che stiamo prendendo in considerazione:</p>
<p>1) applicationContext.xml</p>
<p>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;UTF-8&#8243;?&gt;<br />
&lt;beans xmlns=&#8221;http://www.springframework.org/schema/beans&#8221;<br />
xmlns:tx=&#8221;http://www.springframework.org/schema/tx&#8221;<br />
xmlns:p=&#8221;http://www.springframework.org/schema/p&#8221;<br />
xmlns:util=&#8221;http://www.springframework.org/schema/util&#8221;<br />
xmlns:xsi=&#8221;http://www.w3.org/2001/XMLSchema-instance&#8221;<br />
xmlns:aop=&#8221;http://www.springframework.org/schema/aop&#8221;<br />
xmlns:context=&#8221;http://www.springframework.org/schema/context&#8221;<br />
xmlns:camel=&#8221;http://camel.apache.org/schema/spring&#8221;<br />
xsi:schemaLocation=&#8221;http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd<br />
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd<br />
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd<br />
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd<br />
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd<br />
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring-2.3.0.xsd&#8221;<br />
default-autowire=&#8221;byName&#8221;&gt;</p>
<p>&lt;!&#8211; ********************* C O N F I G U R E R ********************* &#8211;&gt;<br />
&lt;bean id=&#8221;aldoCamelConfigurer&#8221; class=&#8221;org.springframework.beans.factory.config.PropertyPlaceholderConfigurer&#8221;&gt;<br />
&lt;property name=&#8221;placeholderPrefix&#8221; value=&#8221;$props{&#8221; /&gt;<br />
&lt;property name=&#8221;placeholderSuffix&#8221; value=&#8221;}&#8221; /&gt;<br />
&lt;property name=&#8221;locations&#8221;&gt;<br />
&lt;value&gt;classpath:/META-INF/cupsCamelAlfresco.properties<br />
&lt;/value&gt;<br />
&lt;/property&gt;<br />
&lt;/bean&gt;</p>
<p>&lt;!&#8211; ********************* C A M E L C O N T E X T ********************* &#8211;&gt;<br />
&lt;camel:camelContext&gt;</p>
<p>&lt;!&#8211;<br />
======================= E N D P O I N T S =======================<br />
&#8211;&gt;<br />
&lt;camel:endpoint id=&#8221;fileFromSpooluserDir&#8221; uri=&#8221;$props{camel.cups.endpoint.spooluser.cups.uri}&#8221; /&gt;</p>
<p>&lt;!&#8211;<br />
======================= R O U T E S =======================<br />
&#8211;&gt;<br />
&lt;camel:route id=&#8221;toAlfrescoSpooluserDir&#8221;&gt;<br />
&lt;camel:from ref=&#8221;fileFromSpooluserDir&#8221; /&gt;<br />
&lt;camel:to uri=&#8221;bean:cupsSpooluserProcessor&#8221; /&gt;<br />
&lt;/camel:route&gt;<br />
&lt;/camel:camelContext&gt;</p>
<p>&lt;!&#8211;<br />
======================= P R O C E S S O R S =======================<br />
&#8211;&gt;<br />
&lt;bean id=&#8221;cupsSpooluserProcessor&#8221; class=&#8221;it.qbreng.cups.processors.CUPSToAlfrescoProcessor&#8221;&gt;<br />
&lt;property name=&#8221;fromCUPSFolder&#8221; value=&#8221;$props{camel.cups.alfrescoFolder.spooluser.alfresco.uri}&#8221; /&gt;<br />
&lt;property name=&#8221;alfrescoUserUsername&#8221; value=&#8221;$props{camel.user.username}&#8221; /&gt;<br />
&lt;property name=&#8221;alfrescoUserPassword&#8221; value=&#8221;$props{camel.user.password}&#8221; /&gt;<br />
&lt;property name=&#8221;alfrescoUrl&#8221; value=&#8221;$props{camel.alfresco.repourl}&#8221; /&gt;<br />
&lt;property name=&#8221;alfrescoSpooluserFolderPath&#8221; value=&#8221;$props{camel.cups.alfrescoFolder.spooluser.alfresco.uri}&#8221; /&gt;<br />
&lt;/bean&gt;<br />
&lt;/beans&gt;<br />
2) cupsCamelAlfresco.properties</p>
<p>camel.alfresco.repourl=http://{ALFRESCO_SERVER_URL}:8080/alfresco/s/cmis<br />
camel.user.username=spooluser<br />
camel.user.password=spooluser</p>
<p>## C U P S P A T H S E T T I N G S<br />
camel.cups.endpoint.spooluser.cups.uri=file\:///home/spooluser/PDF?readLock=changed</p>
<p>## A L F R E S C O P A T H S E T T I N G S<br />
camel.cups.alfrescoFolder.spooluser.alfresco.uri=/User Homes/spooluser</p>
<p><strong>===============================</strong><br />
<strong> 6 PROCESSOR</strong><br />
<strong> ===============================</strong><br />
Il progetto che implementa il processor è fromato dalle seguenti classi:<br />
it.qbreng.cups.processors.CUPSToAlfrescoProcessor.java &#8211;&gt; PROCESSOR<br />
it.qbreng.cups.App.java &#8211;&gt; MAIN</p>
<p>1) CUPSToAlfrescoProcessor.java</p>
<pre class="brush: java; title: ; notranslate">package it.qbreng.cups.processors;

import java.io.File;
import java.io.FileInputStream;
import java.util.HashMap;
import java.util.Map;

import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.apache.camel.Processor;
import org.apache.chemistry.opencmis.client.api.CmisObject;
import org.apache.chemistry.opencmis.client.api.Folder;
import org.apache.chemistry.opencmis.client.api.Repository;
import org.apache.chemistry.opencmis.client.api.Session;
import org.apache.chemistry.opencmis.client.api.SessionFactory;
import org.apache.chemistry.opencmis.client.runtime.SessionFactoryImpl;
import org.apache.chemistry.opencmis.commons.SessionParameter;
import org.apache.chemistry.opencmis.commons.data.ContentStream;
import org.apache.chemistry.opencmis.commons.enums.BindingType;
import org.apache.chemistry.opencmis.commons.enums.VersioningState;
import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.context.support.ApplicationObjectSupport;

public class CUPSToAlfrescoProcessor extends ApplicationObjectSupport implements Processor
{
   private String fromCUPSFolder;
   private String alfrescoUserUsername;
   private String alfrescoUserPassword;
   private String alfrescoUrl;
   private String alfrescoSpooluserFolderPath;

   private final String mimetype = &quot;application/pdf&quot;;

   private Map&amp;lt;String, Object&amp;gt; nodeProperties;

   public CUPSToAlfrescoProcessor()
   {
      System.out.println( &quot;App constructor&quot; );
      //Endpoint initialize test
      logger.info(&quot;CUPS monitor instance started... &quot; + this);
   }

   public void process(Exchange exchange) throws Exception {
      Message message = exchange.getIn();
      logger.info(&quot;new document to process... &quot; + exchange.getExchangeId() + &quot; !&quot;);

       File f= message.getBody(File.class);
       String filename=f.getName();

       nodeProperties = new HashMap&amp;lt;String,Object&amp;gt;();
       nodeProperties.put(&quot;cmis:name&quot;, filename);
       nodeProperties.put(&quot;cmis:objectTypeId&quot;, &quot;cmis:document&quot;);

       //CMIS Session
       Session session = null;
       SessionFactory sessionFactory = SessionFactoryImpl.newInstance();
       Map&amp;lt;String, String&amp;gt; parameter = new HashMap&amp;lt;String, String&amp;gt;();

       // User credentials
       parameter.put(SessionParameter.USER, alfrescoUserUsername);
       parameter.put(SessionParameter.PASSWORD, alfrescoUserPassword);

       // Connection settings.
       parameter.put(SessionParameter.ATOMPUB_URL, alfrescoUrl);
       parameter.put(SessionParameter.BINDING_TYPE, BindingType.ATOMPUB.value());

       // Create session
       try {
          Repository soleRepository = sessionFactory.getRepositories(parameter).get(0);
          session = soleRepository.createSession();
       } catch (Exception e) {
          e.printStackTrace();
       }

       //Parent Folder
       CmisObject oCObject = null;
       try {
          oCObject = (CmisObject) session.getObjectByPath(alfrescoSpooluserFolderPath);
       } catch (CmisObjectNotFoundException e) {
          e.printStackTrace();
       }
       Folder parentFolder = (Folder) oCObject;

       //Content Stream
       ContentStream contentStream = session.getObjectFactory()
       .createContentStream(filename, f.length(), mimetype, new FileInputStream(f));

       //Create document into parent folder
       parentFolder.createDocument(nodeProperties, contentStream, VersioningState.NONE);
    }

    //SETTER
    public void setFromCUPSFolder(String fromCUPSFolder) {
       this.fromCUPSFolder = fromCUPSFolder;
    }
    public void setAlfrescoUserUsername(String alfrescoUserUsername) {
       this.alfrescoUserUsername = alfrescoUserUsername;
    }
    public void setAlfrescoUserPassword(String alfrescoUserPassword) {
       this.alfrescoUserPassword = alfrescoUserPassword;
    }
    public void setAlfrescoUrl(String alfrescoUrl) {
       this.alfrescoUrl = alfrescoUrl;
    }
    public void setAlfrescoSpooluserFolderPath(String alfrescoSpooluserFolderPath) {
       this.alfrescoSpooluserFolderPath = alfrescoSpooluserFolderPath;
    }
}
</pre>
<p>2) App.java</p>
<pre class="brush: java; title: ; notranslate">
package it.qbreng.cups;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App
{
   public static void main( String[] args )
   {
      ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext(&quot;META-INF/applicationContext.xml&quot;);
      try {
          // Camel processor listening for 60 sec
          Thread.sleep(60000);
          System.out.println(&quot;Stop monitor...&quot;);
      } catch (InterruptedException e) {
          e.printStackTrace();
      }
   }
}
</pre>
<p>Queste invece sono le dipendenze del progetto (definite nel pom.xml)</p>
<p>3) pom.xml</p>
<p>&lt;project xmlns=&#8221;http://maven.apache.org/POM/4.0.0&#8243; xmlns:xsi=&#8221;http://www.w3.org/2001/XMLSchema-instance&#8221;<br />
xsi:schemaLocation=&#8221;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd&#8221;&gt;<br />
&lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;</p>
<p>&lt;groupId&gt;it.qbreng.cups&lt;/groupId&gt;<br />
&lt;artifactId&gt;cups-camel-alfresco&lt;/artifactId&gt;<br />
&lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;<br />
&lt;packaging&gt;jar&lt;/packaging&gt;</p>
<p>&lt;name&gt;cups-camel-alfresco&lt;/name&gt;<br />
&lt;url&gt;http://maven.apache.org&lt;/url&gt;</p>
<p>&lt;properties&gt;<br />
&lt;project.build.sourceEncoding&gt;UTF-8&lt;/project.build.sourceEncoding&gt;<br />
&lt;/properties&gt;</p>
<p>&lt;dependencies&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;junit&lt;/groupId&gt;<br />
&lt;artifactId&gt;junit&lt;/artifactId&gt;<br />
&lt;version&gt;3.8.1&lt;/version&gt;<br />
&lt;scope&gt;test&lt;/scope&gt;<br />
&lt;/dependency&gt;</p>
<p>&lt;!&#8211; CAMEL DEPENDENCIES &#8211;&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;org.apache.camel&lt;/groupId&gt;<br />
&lt;artifactId&gt;camel-spring&lt;/artifactId&gt;<br />
&lt;version&gt;2.3.0&lt;/version&gt;<br />
&lt;/dependency&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;org.apache.camel&lt;/groupId&gt;<br />
&lt;artifactId&gt;camel-mail&lt;/artifactId&gt;<br />
&lt;version&gt;2.3.0&lt;/version&gt;<br />
&lt;/dependency&gt;</p>
<p>&lt;!&#8211; OPEN CMIS DEPENDENCIES &#8211;&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;org.apache.chemistry.opencmis&lt;/groupId&gt;<br />
&lt;artifactId&gt;chemistry-opencmis-client-api&lt;/artifactId&gt;<br />
&lt;version&gt;0.5.0&lt;/version&gt;<br />
&lt;/dependency&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;org.apache.chemistry.opencmis&lt;/groupId&gt;<br />
&lt;artifactId&gt;chemistry-opencmis-client-impl&lt;/artifactId&gt;<br />
&lt;version&gt;0.5.0&lt;/version&gt;<br />
&lt;/dependency&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;org.apache.chemistry.opencmis&lt;/groupId&gt;<br />
&lt;artifactId&gt;chemistry-opencmis-commons-api&lt;/artifactId&gt;<br />
&lt;version&gt;0.5.0&lt;/version&gt;<br />
&lt;/dependency&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;org.apache.chemistry.opencmis&lt;/groupId&gt;<br />
&lt;artifactId&gt;chemistry-opencmis-commons-impl&lt;/artifactId&gt;<br />
&lt;version&gt;0.5.0&lt;/version&gt;<br />
&lt;/dependency&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;org.apache.chemistry.opencmis&lt;/groupId&gt;<br />
&lt;artifactId&gt;chemistry-opencmis-client-bindings&lt;/artifactId&gt;<br />
&lt;version&gt;0.5.0&lt;/version&gt;<br />
&lt;/dependency&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;org.apache.chemistry.opencmis&lt;/groupId&gt;<br />
&lt;artifactId&gt;chemistry-opencmis-test-util&lt;/artifactId&gt;<br />
&lt;version&gt;0.5.0&lt;/version&gt;<br />
&lt;/dependency&gt;<br />
&lt;/dependencies&gt;</p>
<p>&lt;build&gt;<br />
&lt;resources&gt;<br />
&lt;resource&gt;<br />
&lt;directory&gt;src/resources&lt;/directory&gt;<br />
&lt;/resource&gt;<br />
&lt;/resources&gt;<br />
&lt;/build&gt;<br />
&lt;/project&gt;</p>
<p><strong>===============================<br />
7 CONFIGURAZIONE ALFRESCO SHARE<br />
===============================</strong><br />
Bisogna creare un utente da share &#8220;spooluser&#8221; con la propria user home in:<br />
/Company Home/User Homes/spooluser<br />
L&#8217;utente avrà le seguenti credenziali d&#8217;accesso:<br />
username: spooluser<br />
password: spooluser</p>
<p><strong>================================<br />
8 CONFIGURAZIONE CLIENTS WINDOWS<br />
================================</strong><br />
1) Aggiungere una stampante di rete con indirizzo: &#8220;http://{CUPS_SERVER_URL}:631/printers/ToAlfresco&#8221;<br />
2) Nella finestra &#8220;Add printer wizard&#8221; appena aperta selezionare dalla lista &#8220;Manifacturer&#8221; &#8220;General&#8221; e dalla<br />
lista &#8220;Printers&#8221; &#8220;MS publisher Color Printer&#8221; e cliccare su ok<br />
3) Selezionare &#8220;Printer properties&#8221; della stampante appena creata<br />
4) Selezionare il tab &#8220;Ports&#8221;<br />
5) Premere sul tasto &#8220;Configure Port&#8230;&#8221;<br />
6) Attivare &#8220;Use the specified user account&#8221; ed inserire l&#8217;utente creato con il quale ci si vuole<br />
autenticare, quindi &#8220;spooluser&#8221;.</p>
<p><strong>================================<br />
9 RISULTATI CUPS<br />
================================</strong><br />
Provare, da uno dei clients configurati, a stampare un file inviandolo alla stampante &#8220;ToAlfresco&#8221;.<br />
Se la stampante era configurata ad autenticarsi come &#8220;beeflycapture&#8221; dovrebbe, dopo pochi secondi, comparire<br />
lo stesso file dentro la cartella &#8220;/Company Home/User Homes/spooluser&#8221; di alfresco.</p>
]]></content:encoded>
			<wfw:commentRss>http://lab.qbrgroup.it/integrazione-cups-alfresco-spring-camel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Beefly, Aspects di Alfresco e protocollo CMIS</title>
		<link>http://lab.qbrgroup.it/beefly-aspects-di-alfresco-e-protocollo-cmis/</link>
		<comments>http://lab.qbrgroup.it/beefly-aspects-di-alfresco-e-protocollo-cmis/#comments</comments>
		<pubDate>Fri, 24 Feb 2012 10:11:34 +0000</pubDate>
		<dc:creator>federico.tarantino</dc:creator>
				<category><![CDATA[Senza categoria]]></category>

		<guid isPermaLink="false">http://lab.qbrgroup.it/?p=466</guid>
		<description><![CDATA[Nello sviluppo della libreria Java per l&#8217;integrazione con l&#8217;ECM Alfresco tramite protocollo CMIS (Content Management Interoperability Services), abbiamo riscontrato fin da subito la necessità di integrare l&#8217;utilizzo degli Aspetti al fine di implementare alcune funzioni fondamentali della nostra suite Documentale Beefly. Gli &#8230; <a href="http://lab.qbrgroup.it/beefly-aspects-di-alfresco-e-protocollo-cmis/">Continua a leggere<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Nello sviluppo della libreria Java per l&#8217;integrazione con l&#8217;ECM <a title="Alfresco website" href="http://alfresco.com/">Alfresco</a> tramite protocollo <a title="CMIS" href="http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=cmis">CMIS</a> (Content Management Interoperability Services), abbiamo riscontrato fin da subito la necessità di integrare l&#8217;utilizzo degli <em>Aspetti</em> al fine di implementare alcune funzioni fondamentali della nostra suite Documentale <a title="Funzionalità di Beefly ECM" href="http://beefly.it/interfacce-beefly/funzionalita/">Beefly</a>.</p>
<p>Gli <a title="Alfresco Aspects" href="http://wiki.alfresco.com/wiki/Aspect" target="_blank">Aspetti</a> di Alfresco sono una caratteristica nativa della piattaforma che non è prevista dalle specifiche 1.0 del protocollo CMIS.</p>
<p>Tuttavia essi rappresentano uno strumento fondamentale per la gestione avanzata dei tipi documentali all&#8217;interno dell&#8217;ECM. Per questo motivo Alfresco ha fornito una libreria java che estende le funzioni CMIS utilizzando la più importante implementazione java per CMIS: <a title="opencmis" href="http://chemistry.apache.org/java/opencmis.html" target="_blank">opencmis</a>.</p>
<p>La libreria è denominata <em>Alfresco OpenCMIS Extension</em>, ed è rilasciata con licenza Apache 2.0. La trovate <a title="alf-opencmis-ext" href="http://code.google.com/a/apache-extras.org/p/alfresco-opencmis-extension/" target="_blank">qui</a>.</p>
<p>In <em>opencmis</em> tutti gli oggetti, di qualunque tipo, possiedono il concetto di &#8220;extensions&#8221;. Questa soluzione è stata adottata per poter aggiungere all&#8217;occorrenza delle <strong>funzionalità non previste dallo standard</strong>. Alfresco utilizza proprio queste &#8220;extensions&#8221; per lavorare con gli aspetti tramite CMIS.</p>
<p>Lavorare con questa libreria è piuttosto semplice. Il primo passo è aggiungere il  parametro <em>SessionParameter.OBJECT_FACTORY_CLASS</em> in fase di creazione della sessione CMIS, in modo da &#8220;racchiudere&#8221; (wrapping) gli oggetti CMIS in un oggetto più grande che permette l&#8217;integrazione degli aspetti.</p>
<pre class="brush: java; title: ; notranslate">

Map&lt;String, String&gt; parameter = new HashMap&lt;String, String&gt;();

// Set the user credentials
parameter.put(SessionParameter.USER, &quot;admin&quot;);
parameter.put(SessionParameter.PASSWORD, &quot;admin&quot;);

// Specify the connection settings
parameter.put(SessionParameter.ATOMPUB_URL, &quot;http://localhost:8080/alfresco/service/cmis&quot;);
parameter.put(SessionParameter.BINDING_TYPE, BindingType.ATOMPUB.value());

// Set the alfresco object factory
parameter.put(SessionParameter.OBJECT_FACTORY_CLASS, &quot;org.alfresco.cmis.client.impl.AlfrescoObjectFactoryImpl&quot;);

// Create a session
SessionFactory factory = SessionFactoryImpl.newInstance();
Session session = factory.getRepositories(parameter).get(0).createSession();
</pre>
<p>Eseguendo questo codice abbiamo già conluso la fase di &#8220;impostazione&#8221; di opencmis per lavorare con gli aspetti.</p>
<p>Esempio:</p>
<pre class="brush: java; title: ; notranslate">

Document doc = (Document) session.getObject(...);

AlfrescoDocument alfDoc = (AlfrescoDocument) doc;
alfDoc.addAspect(&quot;P:cm:taggable&quot;);

if(alfDoc.hasAspect(&quot;P:cm:titled&quot;)) {
Map&lt;String, Object&gt; properties = new HashMap&lt;String, Object&gt;();
properties.put(&quot;cm:description&quot;, &quot;My taggable document&quot;);
alfDoc.updateProperties(properties);
}
</pre>
<p>Come si vede dal codice appena scritto, per poter utilizzare i metodi implementati dalla libreria, si deve effettuare un cast esplicito ad un tipo di oggetto della libreria stessa. Se vogliamo lavorare con i documenti, il tipo &#8220;Document&#8221; di opencmis deve essere convertito in &#8220;AlfrescoDocument&#8221;, mentre il tipo &#8220;Folder&#8221; in &#8220;AlfrescoFolder&#8221;. Il nuovo oggetto permetterà di richiamare su se stesso tutti i metodi per utilizzare gli aspetti ed erediterà quelli del tipo originale.</p>
<p>A seguire, l&#8217;elenco dei metodi aggiunti dalla libreria &#8220;Alfresco OpenCMIS Extensions&#8221;.</p>
<p>Per controllare se un oggetto/tipo ha un aspetto:</p>
<pre class="brush: java; title: ; toolbar: false; notranslate">

boolean hasAspect(String id);
boolean hasAspect(ObjectType type);
</pre>
<p>Per farsi restituire tutti gli aspetti di un determinato oggetto</p>
<pre class="brush: java; title: ; toolbar: false; notranslate">

Collection&lt;ObjectType&gt; getAspects();
</pre>
<p>Per cercare un aspetto</p>
<pre class="brush: java; title: ; toolbar: false; notranslate">

ObjectType findAspect(String propertyId);
</pre>
<p>Per aggiungere e rimuovere aspetti</p>
<pre class="brush: java; title: ; toolbar: false; notranslate">

void addAspect(String... id);
void addAspect(ObjectType... type);
void removeAspect(String... id);
void removeAspect(ObjectType... type);
</pre>
<p>Si possono trovare dei frammenti di codice di esempio sul sito della libreria <a title="Alfresco OpenCMIS Extension" href="http://code.google.com/a/apache-extras.org/p/alfresco-opencmis-extension/">Alfresco OpenCMIS Extension</a>.</p>
<p>Quello che invece non è riportato, ma che è di fondamentale importanza, è il modo in cui cambia la ricerca tramite CMIS quando si vogliono utilizzare gli aspetti. Cmis usa un suo linguaggio (CMIS QL) per eseguire le query, ed è basato sullo standard SQL-92 (trovate <a title="CmisQL" href="http://wiki.alfresco.com/wiki/CMIS_Query_Language" target="_blank">qui</a> una panoramica).</p>
<p>Supponiamo di avere un aspetto di nome &#8220;qbr:SampleAspect&#8221; che possiede una proprietà &#8220;qbr:SampleProp&#8221;. Per poter eseguire query che tengano conto degli aspetti si deve effettuare un join tra il tipo di documento e l&#8217;aspetto che vogliamo gestire.</p>
<pre class="brush: sql; title: ; notranslate">

SELECT D.*, O.* FROM cmis:document AS D JOIN qbr:SampleAspect AS O ON D.cmis:objectId = O.cmis:objectId
</pre>
<p>In questo modo ci vengono restituiti tutti i documenti di tipo &#8220;cmis:document&#8221; che possiedono l&#8217;aspetto &#8220;qbr:SampleAspect&#8221;. Se vogliamo aggiungere la clausola WHERE per gestire anche la proprietà dell&#8217;aspetto dobbiamo scrivere</p>
<pre class="brush: sql; title: ; notranslate">

SELECT D.*, O.* FROM cmis:document AS D JOIN qbr:SampleAspect AS O ON D.cmis:objectId = O.cmis:objectId WHERE O.qbr:SampleProp = 'test'
</pre>
<p>In questo modo filtriamo ulteriormente la ricerca sfruttando il valore di una proprietà. Come si vede dalla query, quando vogliamo usare qualsiasi proprietà relativa all&#8217;aspetto, nella query è necessario specificare la &#8220;tabella&#8221; (in questo caso &#8220;O&#8221;).</p>
]]></content:encoded>
			<wfw:commentRss>http://lab.qbrgroup.it/beefly-aspects-di-alfresco-e-protocollo-cmis/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Beefly Touch &#8211; Touch Screen Document Management System developed on Alfresco</title>
		<link>http://lab.qbrgroup.it/beefly-touch-touch-screen-document-management-system-developed-on-alfresco/</link>
		<comments>http://lab.qbrgroup.it/beefly-touch-touch-screen-document-management-system-developed-on-alfresco/#comments</comments>
		<pubDate>Wed, 15 Feb 2012 12:28:41 +0000</pubDate>
		<dc:creator>andrea.leo</dc:creator>
				<category><![CDATA[Beefly]]></category>
		<category><![CDATA[alfresco]]></category>
		<category><![CDATA[archive]]></category>
		<category><![CDATA[ecm]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[ocr]]></category>
		<category><![CDATA[scan]]></category>
		<category><![CDATA[search]]></category>
		<category><![CDATA[touch]]></category>

		<guid isPermaLink="false">http://lab.qbrgroup.it/?p=375</guid>
		<description><![CDATA[BEEFLY is an innovative Document Management system, developed on the Alfresco platform that includes a very intuitive touch screen user interface, called BEEFLY TOUCH. BEEFLY uses CMIS protocol to communicate with the Alfresco platform. BEEFLY allows users to store digital &#8230; <a href="http://lab.qbrgroup.it/beefly-touch-touch-screen-document-management-system-developed-on-alfresco/">Continua a leggere<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><strong><a href="http://lab.qbrgroup.it/beefly-touch-touch-screen-document-management-system-developed-on-alfresco/touch-150x150/" rel="attachment wp-att-379"><img class="alignleft size-full wp-image-379" title="Beefly/touch" src="http://lab.qbrgroup.it/wp-content/uploads/2012/02/touch-150x150.jpg" alt="Beefly Touch" width="150" height="150" /></a>BEEFLY</strong> is an innovative Document Management system, developed on the Alfresco platform that includes a very intuitive touch screen user interface, called <strong>BEEFLY TOUCH</strong>.</p>
<p>BEEFLY uses <strong>CMIS</strong> protocol to communicate with the Alfresco platform. BEEFLY allows users to store digital documents in the Alfresco repository, by simply using a <strong>TWAIN</strong> compatible scanner. Users can also index, share, version, number and search for different kinds of documents and contents (images, videos, e-mails, faxes, etc…).</p>
<p><span id="more-375"></span></p>
<p><strong>Solution Details</strong></p>
<p align="JUSTIFY">Beefly Touch is a Rich Internet Application, available in a user-friendly touch screen interface.</p>
<p lang="en-GB" align="JUSTIFY">The intuitive touch screen interface enables users to index and store documents by following a few simple steps. It has been developed by using <strong>Flash/Flex</strong> and <strong>Java Technologies</strong>.</p>
<p lang="en-GB" align="JUSTIFY">The system administrator can use an intuitive web-based interface, called <a title="Adamo - Alfresco data model" href="http://sourceforge.net/projects/adamo-project/" target="_blank">ADAMO</a> (Alfresco.DAta MOdel), to create ad hoc custom models and to customize the related metadata.</p>
<p align="JUSTIFY">The main features of Beefly Touch are:</p>
<ul>
<li>
<p align="JUSTIFY">Integrated document preview (available for the following file formats: pdf, MS Office, Open Office, images, xml e txt).</p>
</li>
<li>
<p align="JUSTIFY">Document properties preview.</p>
</li>
<li>
<p align="JUSTIFY">Remote scanning, by using a TWAIN compatible scanner. Multi-document scanning with <em>Barcode Page Separator</em>.</p>
</li>
<li>
<p align="JUSTIFY">Document upload from file system.</p>
</li>
<li>
<p align="JUSTIFY"><strong>Electronic Document Numbering</strong> (“<em>Digital Protocol</em>”), complying with the Italian records management standards (<strong>DigitPA</strong>).</p>
</li>
<li>
<p align="JUSTIFY">Full-text search.</p>
</li>
<li>
<p align="JUSTIFY">Advanced search: search by custom type and by metadata.</p>
</li>
<li>
<p align="JUSTIFY">Cut, move, copy, paste and delete.</p>
</li>
<li>
<p align="JUSTIFY">Search results preview.</p>
</li>
<li>
<p align="JUSTIFY">Alphanumeric touch screen keyboard.</p>
</li>
<li>
<p align="JUSTIFY">Ad hoc metadata attributes, characterizing files and folders.</p>
</li>
<li>
<p align="JUSTIFY">Advanced file and folder search.</p>
</li>
<li>
<p align="JUSTIFY">Easy scanner configuration through the following parameters: resolution, scanning pixel types (colours/black and white), file format selection (Tiff, Pdf, Jpeg). OCR support.</p>
</li>
<li>
<p align="JUSTIFY">Integrated address book, to provide an integrated collection of addressing information.</p>
</li>
<li>
<p align="JUSTIFY">Multi-language user interface (supported languages: English, French, Italian and other languages).</p>
</li>
<li>
<p align="JUSTIFY"><strong>OCR</strong> scanning software (<a title="Tesseract OCR" href="http://code.google.com/p/tesseract-ocr/" target="_blank">Tesseract-OCR</a> and <a title="Abbyy OCR" href="http://www.abbyy.com/" target="_blank">Abbyy</a> ).</p>
</li>
</ul>
<p lang="en-GB" align="JUSTIFY">Beefly can be easily installed on a virtual machine. Application modules are handled through Apache Maven.</p>
<p lang="en-GB" align="JUSTIFY"><strong>Product Features</strong></p>
<ul>
<li>
<p lang="en-GB" align="JUSTIFY">Touch screen user interface: intuitive and user-friendly front-end interface, enabling users to easily store and search for business documents.</p>
</li>
<li>
<p align="JUSTIFY">Remote scanning: documents can be scanned, indexed, stored and accessed through any web client. Multi-document scanning with Barcode Page Separator. OCR support.</p>
</li>
<li>
<p lang="en-GB" align="JUSTIFY">Electronic document numbering (“Digital protocol”), compling with the Italian records management standards (DigitPA)</p>
</li>
<li>
<p lang="en-GB" align="JUSTIFY">Integrated address book</p>
</li>
<li>
<p lang="en-GB" align="JUSTIFY">Custom Type Management: users can index different kinds of documents by simply using ad hoc Custom models and their related metadata. Only the system administrator is allowed to create and manage Custom models by using an intuitive web-based interface.</p>
</li>
</ul>
<ul>
<li>
<p lang="en-GB" align="JUSTIFY">Full-text and advanced search: documents can be searched by custom type or by metadata, directly by using the touch screen interface.</p>
</li>
<li>
<p lang="en-GB" align="JUSTIFY">Electronic Folder Management: folders can be characterized by ad hoc metadata, which enable users to quickly view and search for folder contents.</p>
</li>
<li>
<p align="JUSTIFY">BEE<em>FLY</em> uses <strong>CMIS</strong> protocol to communicate with the Alfresco platform.</p>
</li>
</ul>
<p><strong>Screenshots</strong></p>

<div class="ngg-galleryoverview" id="ngg-gallery-1-375">


	
	<!-- Thumbnails -->
		
	<div id="ngg-image-21" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://lab.qbrgroup.it/wp-content/gallery/beefly-touch/consulta.png" title=" " class="shutterset_set_1" >
								<img title="consulta" alt="consulta" src="http://lab.qbrgroup.it/wp-content/gallery/beefly-touch/thumbs/thumbs_consulta.png" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-20" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://lab.qbrgroup.it/wp-content/gallery/beefly-touch/archiviaproprieta.png" title=" " class="shutterset_set_1" >
								<img title="archiviaproprieta" alt="archiviaproprieta" src="http://lab.qbrgroup.it/wp-content/gallery/beefly-touch/thumbs/thumbs_archiviaproprieta.png" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-22" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://lab.qbrgroup.it/wp-content/gallery/beefly-touch/previewer.png" title=" " class="shutterset_set_1" >
								<img title="previewer" alt="previewer" src="http://lab.qbrgroup.it/wp-content/gallery/beefly-touch/thumbs/thumbs_previewer.png" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-23" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://lab.qbrgroup.it/wp-content/gallery/beefly-touch/search_result.png" title=" " class="shutterset_set_1" >
								<img title="search_result" alt="search_result" src="http://lab.qbrgroup.it/wp-content/gallery/beefly-touch/thumbs/thumbs_search_result.png" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-18" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://lab.qbrgroup.it/wp-content/gallery/beefly-touch/login_0.png" title=" " class="shutterset_set_1" >
								<img title="login" alt="login" src="http://lab.qbrgroup.it/wp-content/gallery/beefly-touch/thumbs/thumbs_login_0.png" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-9" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://lab.qbrgroup.it/wp-content/gallery/beefly-touch/archiviaconsulta.png" title=" " class="shutterset_set_1" >
								<img title="archiviaconsulta" alt="archiviaconsulta" src="http://lab.qbrgroup.it/wp-content/gallery/beefly-touch/thumbs/thumbs_archiviaconsulta.png" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-8" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://lab.qbrgroup.it/wp-content/gallery/beefly-touch/archivia.png" title=" " class="shutterset_set_1" >
								<img title="archivia" alt="archivia" src="http://lab.qbrgroup.it/wp-content/gallery/beefly-touch/thumbs/thumbs_archivia.png" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-19" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://lab.qbrgroup.it/wp-content/gallery/beefly-touch/protocollo_0.png" title=" " class="shutterset_set_1" >
								<img title="protocollo" alt="protocollo" src="http://lab.qbrgroup.it/wp-content/gallery/beefly-touch/thumbs/thumbs_protocollo_0.png" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-13" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://lab.qbrgroup.it/wp-content/gallery/beefly-touch/nodebrowser.png" title=" " class="shutterset_set_1" >
								<img title="nodebrowser" alt="nodebrowser" src="http://lab.qbrgroup.it/wp-content/gallery/beefly-touch/thumbs/thumbs_nodebrowser.png" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-17" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://lab.qbrgroup.it/wp-content/gallery/beefly-touch/upload.png" title=" " class="shutterset_set_1" >
								<img title="upload" alt="upload" src="http://lab.qbrgroup.it/wp-content/gallery/beefly-touch/thumbs/thumbs_upload.png" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-16" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://lab.qbrgroup.it/wp-content/gallery/beefly-touch/scan.png" title=" " class="shutterset_set_1" >
								<img title="scan" alt="scan" src="http://lab.qbrgroup.it/wp-content/gallery/beefly-touch/thumbs/thumbs_scan.png" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-10" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://lab.qbrgroup.it/wp-content/gallery/beefly-touch/infonode.png" title=" " class="shutterset_set_1" >
								<img title="infonode" alt="infonode" src="http://lab.qbrgroup.it/wp-content/gallery/beefly-touch/thumbs/thumbs_infonode.png" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-11" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://lab.qbrgroup.it/wp-content/gallery/beefly-touch/keyboard.png" title=" " class="shutterset_set_1" >
								<img title="keyboard" alt="keyboard" src="http://lab.qbrgroup.it/wp-content/gallery/beefly-touch/thumbs/thumbs_keyboard.png" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-14" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://lab.qbrgroup.it/wp-content/gallery/beefly-touch/numerickeyboard.png" title=" " class="shutterset_set_1" >
								<img title="numerickeyboard" alt="numerickeyboard" src="http://lab.qbrgroup.it/wp-content/gallery/beefly-touch/thumbs/thumbs_numerickeyboard.png" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 	 	
	<!-- Pagination -->
 	<div class='ngg-clear'></div>
 	
</div>


<p>Visit <a title="Beefly" href="http://www.beefly.it" target="_blank">Beefly</a> website.</p>
]]></content:encoded>
			<wfw:commentRss>http://lab.qbrgroup.it/beefly-touch-touch-screen-document-management-system-developed-on-alfresco/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Funzionalità di Beefly Protocol</title>
		<link>http://lab.qbrgroup.it/funzionalita-di-beefly-protocol/</link>
		<comments>http://lab.qbrgroup.it/funzionalita-di-beefly-protocol/#comments</comments>
		<pubDate>Sun, 12 Feb 2012 12:21:37 +0000</pubDate>
		<dc:creator>mirco.leo</dc:creator>
				<category><![CDATA[Beefly]]></category>
		<category><![CDATA[Senza categoria]]></category>
		<category><![CDATA[alfresco]]></category>
		<category><![CDATA[beefly]]></category>
		<category><![CDATA[cnipa]]></category>
		<category><![CDATA[digitpa]]></category>
		<category><![CDATA[gestione documentale]]></category>
		<category><![CDATA[protocollo]]></category>

		<guid isPermaLink="false">http://lab.qbrgroup.it/?p=205</guid>
		<description><![CDATA[Le principali funzionalità di Beefly Protocol sono: &#160; Registrazione di protocollo sia di documenti analogici che digitali Classificazione della registrazione Gestione del titolario di classificazione Stampa della segnatura di protocollo contenente le informazioni della registrazione Stampa del giornale di protocollo &#8230; <a href="http://lab.qbrgroup.it/funzionalita-di-beefly-protocol/">Continua a leggere<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Le principali funzionalità di Beefly Protocol sono:</p>

<a href='http://lab.qbrgroup.it/funzionalita-di-beefly-protocol/giornale/' title='stampa registro di protocollo'><img width="150" height="150" src="http://lab.qbrgroup.it/wp-content/uploads/2012/02/giornale-150x150.png" class="attachment-thumbnail" alt="stampa registro di protocollo" title="stampa registro di protocollo" /></a>
<a href='http://lab.qbrgroup.it/funzionalita-di-beefly-protocol/registro-protocollo-2/' title='registro protocollo'><img width="150" height="150" src="http://lab.qbrgroup.it/wp-content/uploads/2012/02/registro-protocollo1-150x150.png" class="attachment-thumbnail" alt="registro protocollo" title="registro protocollo" /></a>

<p>&nbsp;</p>
<ul>
<li>Registrazione di protocollo sia di documenti analogici che digitali</li>
<li>Classificazione della registrazione</li>
<li>Gestione del titolario di classificazione</li>
<li>Stampa della segnatura di protocollo contenente le informazioni della registrazione</li>
<li>Stampa del giornale di protocollo con le registrazioni di protocollo effettuate nella giornata o in un intervallo temporale selezionato</li>
<li>Annullamento della registrazione di protocollo con inserimento della motivazione</li>
<li>Ri-classificazione di una registrazione di protocollo</li>
<li>Gestione dei dati relativi all&#8217;AOO</li>
<li>Rubrica dei Mittenti e dei Destinatari associati alle registrazioni di protocollo</li>
<li>Ricerche delle registrazioni di protocollo e dei fascicoli sia in modalità full-text che sulla base degli attributi specifici</li>
<li>Apertura o chiusura di un fascicolo</li>
<li>Associazione di un documento scansionato ad una registrazione di protocollo effettuata</li>
<li>Invio della ricevuta di protocollo tramite email PEC al mittente</li>
<li>Assegnazione ad un ufficio (UOR) o ad una persona (RPA) di una registrazione di protocollo per competenza o per conoscenza</li>
<li>Presa in carico della registrazione di protocollo assegnata</li>
<li>Rifiuto di una registrazione di protocollo assegnata con inserimento della motivazione</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://lab.qbrgroup.it/funzionalita-di-beefly-protocol/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Beefly Protocol &#8211; il Protocollo Informatico a norma CNIPA per Alfresco</title>
		<link>http://lab.qbrgroup.it/beefly-protocol-il-protocollo-informatico-a-norma-cnipa-per-alfresco/</link>
		<comments>http://lab.qbrgroup.it/beefly-protocol-il-protocollo-informatico-a-norma-cnipa-per-alfresco/#comments</comments>
		<pubDate>Fri, 10 Feb 2012 17:41:49 +0000</pubDate>
		<dc:creator>mirco.leo</dc:creator>
				<category><![CDATA[Beefly]]></category>
		<category><![CDATA[Senza categoria]]></category>
		<category><![CDATA[alfresco]]></category>
		<category><![CDATA[beefly]]></category>
		<category><![CDATA[ecm]]></category>
		<category><![CDATA[firma elettronica]]></category>
		<category><![CDATA[marcatura temporale]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[protocol]]></category>
		<category><![CDATA[protocollo]]></category>
		<category><![CDATA[remote scanning]]></category>
		<category><![CDATA[share]]></category>

		<guid isPermaLink="false">http://lab.qbrgroup.it/?p=115</guid>
		<description><![CDATA[QBR Engineering ha recentemente rilasciato Beefly Protocol, la soluzione per la gestione del Protocollo Informatico basata sulla piattaforma ECM Open Source Alfresco e pienamente integrata nella propria suite di gestione documentale Beefly. L&#8217;obiettivo principale che ci siamo posti all&#8217;avvio del progetto è &#8230; <a href="http://lab.qbrgroup.it/beefly-protocol-il-protocollo-informatico-a-norma-cnipa-per-alfresco/">Continua a leggere<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>QBR Engineering ha recentemente rilasciato <strong>Beefly Protocol</strong>, la soluzione per la gestione del <em>Protocollo Informatico</em> basata sulla piattaforma ECM Open Source <a href="http://www.alfresco.com">Alfresco</a> e pienamente integrata nella propria suite di gestione documentale <a title="Beefly Platform" href="http://www.beefly.it">Beefly</a>.</p>
<p>L&#8217;obiettivo principale che ci siamo posti all&#8217;avvio del progetto è stato quello di realizzare un software per la gestione del Protocollo Informatico che rispondesse ai seguenti requisiti:</p>
<ul>
<li>Completa conformità alla normativa CNIPA (ora <a title="DigitPA" href="http://www.digitpa.gov.it/">DIGITPA</a>)</li>
<li>Installabile sulla piattaforma documentale Alfresco</li>
<li><em>Multi Organizzazione</em>, in modo da consentire, con un&#8217;unica installazione del prodotto, la creazione di molteplici sistemi di protocollo all&#8217;interno di un Ente della P.A.  (ad esempio diversi protocolli per differenti A.O.O.)</li>
<li>Integrabile con gli altri sistemi informatici adottati dall&#8217;Ente (es. sistemi di Enterprise Content Mangement, Business Process Management, Portali Internet etc.)</li>
</ul>
<p>Il risultato ottenuto è stata la realizzazione di un nuovo modulo applicativo nella suite Beefly denominato <strong>Beefly Protocol</strong>. Tale modulo applicativo, una volta installato sulla piattaforma Beefly (o direttamente su Alfresco Share) permette di usufruire di un sistema di gestione del protocollo informatico che risponde pienamente alle disposizioni sul protocollo informatico emanate dal <a title="DigitPA" href="http://www.digitpa.it" target="_blank">DigitPA</a> per la Pubblica Amministrazione Centrale e Locale.</p>
<p>L&#8217;adozione di Beefly Protocol permette all&#8217;Ente di usufruire, oltre che delle cosiddette funzionalità minime o &#8220;<strong>nucleo minimo</strong>&#8221; per la gestione informatica dei documenti, anche di tutte le <strong>funzionalità aggiuntive </strong>necessarie alla gestione dei flussi documentali, alla conservazione e all&#8217;accessibilità dei documenti archiviati.</p>
<div id="attachment_194" class="wp-caption aligncenter" style="width: 310px"><a href="http://lab.qbrgroup.it/wp-content/uploads/2012/02/piramide.png"><img class="size-medium wp-image-194" src="http://lab.qbrgroup.it/wp-content/uploads/2012/02/piramide-300x225.png" alt="Architettura sistema di protocollo a norma CNIPA" width="300" height="225" /></a><p class="wp-caption-text">Architettura sistema di protocollo a norma CNIPA</p></div>
<p>Come è evidente dal diagramma precedente, Beefly Protocol, posizionandosi al livello più elevato della piramide documentale, è in grado di usufruire delle funzionalità di gestione documentale e <em>workflow management</em> erogate dalle piattaforme sottostanti.</p>
<p>Il DigitPA infatti classifica le applicazioni di protocollo informatico in tre macro livelli realizzativi (scenari) di complessità crescente:</p>
<p>1. Modalità base del protocollo informatico &#8211; Nucleo minimo di protocollo<br />
2. Gestione informatica dei documenti e notifica<br />
3. Flussi documentali &#8211; Esecuzione dei workflow</p>
<p>Il software che abbiamo sviluppato permette all&#8217;Ente di implementare la gestione del protocollo informatico che soddisfa tutti e tre i livelli necessari per usufruire della piena integrazione delle funzioni di Protocollo con le funzioni ECM necesarie all&#8217;erogazione dei servizi documentali.</p>
<p>1. <span style="text-decoration: underline;">Nucleo minimo di protocollo</span> (rif. Testo unico DPR 445/2000 e s.m.i): Beefly Protocol fornisce le funzionalità di registrazione dei documenti in ingresso, in uscita e interni, oltre che la classificazione, la fascicolazione e l&#8217;archiviazione  degli stessi all&#8217;interno del <strong>titolario di classificazione</strong> adottato dall&#8217;Ente.</p>
<p>2. <span style="text-decoration: underline;">Gestione Documentale</span>: Beefly Protocol, avvalendosi, oltre che della piattaforma Alfresco anche delle funzionalità aggiuntive fornite dalla piattaforma Beefly, offre una serie di funzionalità aggiuntive fra cui, la dematerializzazione dei documenti cartacei, anche massiva, l&#8217;archiviazione delle email provenienti dalle caselle di posta certificata dell&#8217;ente, la firma digitale e marcatura temporale dei documenti elettronici, l&#8217;integrazione con lo Spooler di stampa etc.</p>
<p>3. <span style="text-decoration: underline;">Flussi documentali</span>: Beefly Protocol supporta le funzionalità di notifica delle registrazioni di protocollo sulla<em> scrivania di lavoro</em> e sull&#8217;email dell&#8217;utente. Grazie alla forte integrazione fra il software di protocollo e Beefly (o Alfresco Share) l&#8217;utente riceve sulla propria <em>Dashboard</em> o sulla propria email la notifica di nuove assegnazioni di protocollo.</p>
<p><strong>Funzionalità di Beefly Protocol</strong></p>
<p>Beefly Protocol è dotato delle seguenti caratteristiche principali:</p>
<ul>
<li>Archiviazione e registrazione di protocollo dei documenti rispondente alla normativa CNIPA con la possibilità di registrare un documento, classificarlo all&#8217;interno del titolario di classificazione adottato dall&#8217;Ente e assegnarlo ad un Ufficio (UOR) o al responsabile del procedimento (RPA).</li>
<li>Scansione dei documenti da scanner direttamente dall&#8217;applicativo (Remote Scanning).</li>
<li>Gestione del Titolario di classificazione dell&#8217;Ente con la possibilità di creare <del></del>tipologie di fascicoli elettronici e documenti personalizzati (Fascicoli estesi e Documenti estesi). Possibilità di chiudere un fascicolo relativo ad un procedimento terminato.</li>
<li>Gestione con un sistema di Access Control List (ACL) dei criteri di accesso ad un documento o ad un Fascicolo.</li>
<li>Gestione del flusso di lavoro con l&#8217;assegnazione dei documenti protocollati agli uffici (UOR) o direttamente ai responsabili del procedimento amministrativo (RPA).</li>
<li>Possibilità di notificare per conoscenza i documenti protocollati ad Uffici e singoli Responsabili.</li>
<li>Possibilità di creare più sistemi di protocollo in base alle Aree Organizzative Omogenee (AOO) presenti nell&#8217;Ente o in base alle funzioni individuate nell&#8217;organizzazione aziendale (es. Organigramma, divisioni aziendali, più aziende appartenenti allo stesso gruppo etc.).</li>
<li>Apposizione da parte dell&#8217;utente, tramite la propria SmartCard, della Firma digitale a norma direttamente ai documenti archiviati sul gestore documentale Beefly.</li>
<li>Archiviazione automatica e protocollazione sul gestore documentale delle email scaricate dagli account email istituzionali, anche da account di Posta Elettronica (PEC).</li>
<li>Funzionalità di Audit che permette di tracciare tramite log tutte le attività effettuate dagli utenti sul sistema.</li>
<li>Cloud Compliat. Pieno supporto al modello di distribuzione dell&#8217;applicativo in modalità Software as a Service (SaaS).</li>
</ul>
<p>Le funzionalità in dettaglio di Beefly Protocol sono riportate <a title="Funzionalità Beefly Protocol" href="http://lab.qbrgroup.it/?p=205" target="_blank">qui</a>.</p>
<p><strong>Caratteristiche Tecniche</strong></p>
<p>Beefly Protocol si basa sulla piattaforma Open Source di Alfresco Share di cui eredita le funzionalità di social collaboration, gestione documentale ed esecuzione dei workflow personalizzati, nonché di integrazione con Microsoft Office.</p>
<p>Il modulo espone un insieme di RESTful Web Service API che gli permettono di comunicare con le funzionalità del repository documentale di Alfresco (json) e con eventuali applicazioni esterne. I dati vengono scambiati utilizzando formati standard, quali JSON, Atom/RSS etc. (vedi fig. seguente).</p>
<div id="attachment_212" class="wp-caption aligncenter" style="width: 310px"><a href="http://lab.qbrgroup.it/wp-content/uploads/2012/02/Beefly-Protocollo-Componenti.png"><img class="size-medium wp-image-212" src="http://lab.qbrgroup.it/wp-content/uploads/2012/02/Beefly-Protocollo-Componenti-300x225.png" alt="Beefly Protocollo Componenti" width="300" height="225" /></a><p class="wp-caption-text">Beefly Protocollo Componenti</p></div>
<p>Il modulo di protocollo è costituito da due componenti (vedi fig. seguente):</p>
<ul>
<li><em>Cnipa Protocol Share</em>: Presentation layer – E&#8217; stato implementato un nuovo tipo di site (custom site) in Alfresco Share.</li>
<li><em>Cnipa Protocol Alfresco</em>: Business Layer &#8211; Logica di back-end del modulo di protocollo.</li>
</ul>
<div id="attachment_218" class="wp-caption aligncenter" style="width: 310px"><a href="http://lab.qbrgroup.it/wp-content/uploads/2012/02/Beefly-Protocollo-architettura11.png"><img class="size-medium wp-image-218" src="http://lab.qbrgroup.it/wp-content/uploads/2012/02/Beefly-Protocollo-architettura11-300x225.png" alt="Beefly Protocollo architettura" width="300" height="225" /></a><p class="wp-caption-text">Beefly Protocollo architettura</p></div>
<div id="__ss_11544459" style="width: 425px;"><strong style="display: block; margin: 12px 0 4px;"><a title="Beefly protocollo CNIPA" href="http://www.slideshare.net/Qbrgroup/beefly-protocollo-cnipa" target="_blank">Beefly protocollo CNIPA</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/11544459" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" width="425" height="355"></iframe></p>
<div style="padding: 5px 0 12px;">Visualizza tutte le presentazioni di <a href="http://www.slideshare.net/Qbrgroup" target="_blank">Qbrgroup</a> su <em><a title="Slideshare" href="http://www.slideshare.net">slideshare.net</a></em></div>
</div>
<p>Scarica la presentazione completa del prodotto <strong>Beefly Protocol</strong> da questo <a title="qui" href="http://lab.qbrgroup.it/wp-content/uploads/2012/02/Beefly-Protocollo-Cnipa.pdf">link</a>.</p>
<p>Per ulteriori informazioni visita <a title="Beefly" href="http://www.beefly.it">www.beefly.it</a></p>
]]></content:encoded>
			<wfw:commentRss>http://lab.qbrgroup.it/beefly-protocol-il-protocollo-informatico-a-norma-cnipa-per-alfresco/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>


