openwork®: primi passi

openwork® è un framework che offre funzionalità per la gestione delle Organizzazioni, dei Dati & Documenti che vengono scambiate all’interno di una organizzazione e del loro ciclo di vita, dei Processi ovvero delle regole logiche e temporali con cui le informazioni vengono scambiate.

openwork® è la risposta a un fabbisogno sempre più pressante: rappresentare l'organizzazione, i dati, i documenti e i processi, per poterli così studiare, ottimizzare e condividere con la possibilità di ottenere applicazioni software web-based per l'esecuzione operativa dei processi e la gestione di dati e documenti, esattamente come rappresentati.
Questo approccio unico, riduce sensibilmente le attività di natura strettamente tecnologica con complessità prive di valore aggiunto per il business.

Intro01 - Delivering-Analysis


La visione di openwork®

Il framework si presta a diversi utilizzi, può essere:

· integrato in altre applicazioni che ne sfruttano alcune delle sue funzionalità;
· utilizzato in ambienti di sviluppo per creare nuove applicazioni;
· utilizzato per orchestrare persone e sistemi in una logica di processo;
· utilizzato come ambiente di sviluppo per creare rapidamente applicazioni web finite.

Le differenti modalità di utilizzo possono essere riassunte considerando i diversi moduli funzionali del framework o i diversi livelli software architetturali.

L'originalità della suite consiste nella capacità di affrontare il tema della produzione e distribuzione di applicazioni software tramite un paradigma del tutto nuovo che ha tra i vantaggi principali quello di ridurre notevolmente i tempi di deployment.

In openwork® si procede attraverso due momenti:

· model
· execute

Durante il modeling, facendo uso di metodologia e terminologia vicina a quella di un consulente di organizzazione e comunque comprensibile agli utenti finali delle applicazioni, si procede a rappresentare graficamente nell'ambiente le tematiche oggetto dell'applicazione. Tutto ciò si realizza con strumenti di disegno disponibili in openwork® BPM Tools.

Il cuore della suite, l'openwork® engine, è in grado di eseguire direttamente i modelli rappresentati producendo una applicazione che funziona esattamente secondo le regole modellate.

Il passaggio dal model e l'execute è senza soluzione di continuità. Questo modo di procedere, che spesso vede i due momenti descritti sovrapporsi in un crescendo implementativo, è chiamato, nella metodologia openwork®, analisi realizzativa.

Il risultato è una visione olistica della propria organizzazione e dell'ICT funzionale ad essa i cui evidenti benefici implementativi diventano ancora più apprezzati durante la manutenzione evolutiva di quanto realizzato.


Il punto di vista funzionale

Gli assi funzionali del framework sono tre:

· Organizzazione
· Dati & documenti
· Processi

A seconda dell'uso che ne viene fatto è possibile realizzare applicazioni di:

· Authorization Management: Definizione di autorizzazioni in base alla combinazione di elementi dell'organigramma e dei gruppi.
· Information management: Gestione del ciclo di vita di informazioni strutturate e/o destrutturate, indicizzazione, retrivial.
· Document management: Gestione documentale e processi ad essa correlati.
· Process Automation: Automazione di processi in cui sono coinvolti sistemi.
· Workflow Automation: Automazione di processi in cui sono coinvolte persone
· Business Activity Monitoring: Analisi delle informazioni e/o delle attività di processo

e infine …

applicazioni di BPM, che rappresentano la totalità di quanto indicato.


Il punto di vista architetturale

Il framework mette a disposizione tre livelli software:

· openwork® business components

Le openwork® business components espongono interfaccie di tipo webservices e COM+.

I web services espongono tutta la logica del framework openwork® secondo standard WSDL, garantendone il riuso da parte di qualsiasi applicativo o ambiente di sviluppo su qualsiasi piattaforma.

Con l'utilizzo dei webservices è possibile per esempio dotare facilmente di una logica di workflow un applicativo verticale a logica cablata o fornire a un applicativo il profilo delle autorizzazioni di un operatore in funzione della sua posizione nell'organizzazione.

I componenti COM+ permettono l'utilizzo della logica del framework tramite linguaggio si scripting eseguito al verificarsi di specifici eventi all'interno della piattaforma.

· Applicazione Web

L'applicazione Web di openwork® è una delle possibili applicazioni realizzabili con i web services di openwork®. E' stata progettata seguendo rigorosamente il criterio della separazione dei dati dalla presentazione: i dati, strutture XML, possono essere renderizzati in diversi formati (Word, HTML, PDF, SVG) applicando trasformazioni XSL lato client o lato server.

L'applicazione Web fornita può essere estesa realizzando nuove pagine derivate dalla pagina base che espone funzionalità per la gestione delle chiamate ai web services, per la gestione della sessione, etc.

Sono gestite diverse modalità di autenticazione per poter integrare l'applicazione in applicazioni o infrastrutture preesistenti.

· Thick client

L'applicazione Web lato client permette la visualizzazione, modifica e salvataggio delle informazioni. Realizzata interamente tramite librerie javascript, template xsl e CSS può essere totalmente customizzata modificandone il layout grafico e il comportamento.

Esiste un'altra applicazione client dei web services: openwork® BPM Tools.

openwork® BPM Tools rende disponibili tutti gli strumenti per la modellazione grafica dell'organizzazione (Organization Manager), della struttura delle informazioni (form designer) e dei processi (workflow designer).

Gli implementatori possono utilizzare la suite a qualsiasi livello sfruttando al meglio, secondo le loro specifiche esigenze, le peculiarità che ciascuno di essi mette a disposizione.


Elementi fondamentali di openwork®

L'universo openwork® è uno spazio tridimensionale in cui i tre cardini della suite rappresentano gli assi: ogni applicazione descritta occupa un punto diverso nello spazio a seconda della diversa intensità con cui si utilizzano le funzionalità tipiche di ogni dimensione.

Nella seguente sezione è possibile analizzare informazioni relative agli elementi fondamentali di openwork®.

· Organizzazione
· Dati & Documenti
· Processi

Intro02 - 3DSpace


Organizzazione

L'organizzazione è l'insieme di operatori, ruoli, unità organizzative che concorrono alla gestione delle informazioni e all'avanzamento dei processi.

E' possibile definire relazioni gerarchiche tra i vari elementi dell'organizzazione, ovvero definire l'organigramma.

E' possibile raggruppare i diversi elementi dell'organizzazione in base a competenze, abilità, autorizzazioni specifiche, ovvero definire gruppi o insiemi di operatori, ruoli e unità organizzative.

Combinando elementi dell'organigramma e gruppi è possibile definire regole organizzative (formule) che dipendono da come un operatore è posizionato nella gerarchia (ruolo) e/o dalla sua appartenenza a un determinato gruppo (regole a matrice).

Intro03 - organization

I risultati delle formule possono essere utilizzati da altre applicazioni per la risoluzione di autorizzazioni oppure per stabilire l'accesso alle informazioni e assegnare le attività all'interno della piattaforma openwork®.

Un operatore è identificato da un individuo (o risorsa) interno all'organizzazione aziendale e definito nell'anagrafica degli operatori; ad ogni operatore possono essere assegnati uno o più ruoli.


Organigramma

L'organigramma è una gerarchia di aree organizzative, ruoli e operatori.

Gli operatori vengono definiti nell'anagrafica degli operatori. Un operatore non può accedere alla piattaforma se non gli viene assegnato almeno un ruolo nell'organigramma. Ad ogni operatore (elemento dell'anagrafica degli operatori) possono essere assegnati uno o più ruoli: ad un operatore di anagrafica possono corrispondere uno o più operatori di organigramma.

Lo strumento concepito per il disegno e la gestione dell'organigramma è l'Organization Manager.

L'organigramma può essere consultato/modificato tramite :

Web Services

Il Web Service WSOrganization (http://localhost/wsopenwork/wsorganization.asmx) contiene le diverse funzioni utilizzate per consultare e modificare l'organigramma.

Ad esempio se vogliamo ottenere l'organigramma di una configurazione openwork® in formato XML è sufficiente effettuare una chiamata SOAP ed utilizzare il metodo OpenOrgDiagram

Applicazioni Client (browser Internet, BPM Tools)

1. Richiamando una pagina organizationtree.aspx dal browser, ad esempiohttp://localhost/openwork/organizationtree.aspx?selection=25 è possibile consultare l'organigramma, la cui visualizzazione dipende dalle regole definite nel foglio di stile associato. Utilizzando questa modalità è possibile solo consultare l'organigramma.
2. Scegliendo nel BPM Tools la voce di menù Organizzazione -> Organigramma, al codice XML restituito dal Web Service, viene applicato un apposito foglio di stile che consente di visualizzare l'organigramma in due parti: nella parte sinistra l'organigramma viene rappresentato come un grafo, mentre nella parte destra si ottiene una rappresentazione ad albero. Utilizzando questa modalità è possibile sia consultare, sia modificare l'organigramma.

Oggetti della libreria di openwork®

Esistono tre diverse tipologie di oggetti all'interno della libreria di openwork® che si possono utilizzare per poter interrogare l'organigramma:

· classe Office
· classe Role
· classe User

Esistono inoltre diversi metodi per la modifica dell'organigramma. Classi e relativi metodi possono essere utilizzati per realizzare ad esempio processi di modifica automatici.


Gruppi

Un gruppo in openwork® è un insieme di operatori/ruoli/aree-organizzative.

In molti casi definire un gruppo risulta il metodo migliore per assegnare determinati privilegi ad operatori che possono avere ruoli molto differenti all'interno dell'organizzazione; si parla infatti di assegnazione trasversale in contrapposizione con quella verticale definita nell'organigramma.

Per esempio si potrebbe definire un gruppo di lavoro che comprenda i componenti di un Team di progetto appartenenti alle diverse aree organizzative dell'organigramma (Addetto Ufficio Acquisti, Responsabile Logistica, Sviluppatore Area Tecnica, etc.)


Autorizzazioni

L'autorizzazione consente all'operatore di eseguire specifiche operazioni.
Il valore dell'autorizzazione (vero/falso) viene risolto in base a formule.

I diversi tipi di autorizzazioni e restrizioni di accesso possono essere raggruppati nelle seguenti categorie:

Autorizzazioni

· Autorizzazioni sulle funzionalità proprietarie di piattaforma

Le autorizzazioni sulle funzionalità proprietarie di piattaforma stabiliscono se un operatore è in grado di eseguire operazioni specifiche disponibili in piattaforma, come ad esempio l'operazione di creazione di un documento. Ogni autorizzazione di questo tipo è identificata da un identificativo numerico.

Scegliendo nel BPM Tools la voce di menù Organizzazione -> Gestione delle Autorizzazioni è possibile impostare e verificare le autorizzazioni sulle funzionalità proprietarie di piattaforma (cfr. Autorizzazioni proprietarie e custom).

· Autorizzazioni Custom

Scegliendo nel BPM Tools la voce di menù Organizzazione -> Definizione di funzioni personalizzate, si possono impostare questo tipo di autorizzazioni rappresentate da un identificativo numerico; ad esse non è associata alcuna funzionalità specifica, ma possono essere utilizzate per implementare logiche custom in quanto risolte nel profilo utente (cfr. Autorizzazioni proprietarie e custom).

Restrizioni di accesso

· Restrizioni di accesso definite da profilo utente

Stabiliscono se un operatore può accedere all'elenco e/o al dettaglio degli archivi documentali openwork®. Ad esempio attraverso queste restrizioni si può stabilire se un operatore può accedere all'elenco di tutti i protocolli in entrata (cfr. Restrizioni di accesso definite da profilo utente). A questo tipo di restrizioni di accesso appartengono anche le proprietà specifiche di operatore come ad esempio la lingua del sistema di default o la sua disattivazione.

· Restrizioni di accesso definite da piano di classificazione

Sono visualizzabili attraverso la voce di menù contestuale Proprietà sulle singole voci del Piano di Classificazione; tali restrizioni servono a definire le regole di accesso sulle singole voci del piano di classificazione. Ad esempio attraverso queste restrizioni si può stabilire se un operatore può accedere in lettura/scrittura a tutti i protocolli in entrata di tipo Ordine. (cfr. Restrizioni di accesso definite da piano di classificazione).

· Restrizioni periodiche di accesso

Stabiliscono una restrizione temporale per un operatore che può accedere all'elenco e/o al dettaglio degli archivi documentali openwork®. Ad esempio attraverso queste restrizioni si può stabilire se un operatore può accedere solo all'elenco di tutti i protocolli in entrata disponibili nel sistema a partire dagli ultimi due mesi (cfr. Restrizioni periodiche).

Autorizzazioni legate ai singoli controlli inseriti in una form openwork®

L'insieme delle proprietà di accesso definibili su un controllo inserito in una form openwork®, detto anche Contesto del controllo, è identificato dagli attributi changeable, visible, invalidable, secret,required, locked del controllo (cfr. owk:visibile - owk:changeable - owk:invalidable - owk:secret, owk:required - owk:locked).

Il contesto di un controllo inserito in una form openwork® può essere impostato a livello di:

· Modello di form

tramite il tab Permessi disponibile dal menù contestuale di un singolo controllo inserito nel modello di form (cfr. owk:visibile - owk:changeable - owk:invalidable - owk:secret, owk:required - owk:locked). Ad esempio il controllo Approvazione è impostato non visibile per tutta l'organizzazione nel modello di form.

· Istanza di form

tramite la funzione AddContext disponibile come metodo nella libreria delle classi openwork®. Ad esempio il controllo Approvazione è impostato a visibile per tutta l'organizzazione dopo l'esecuzione l'attività "Approvazione della richiesta ferie e permessi".

· Attività di processo

tramite la funzione AddConfig disponibile come metodo nella libreria delle classi openwork®. fissano i criteri di accesso sui singoli campi di una istanza di form legata a una attività. Ad esempio il controllo Approvazione è impostato a visibile per tutta l'organizzazione solo durante l'esecuzione l'attività "Approvazione della richiesta ferie e permessi", successivamente alla quale, ritorna ad essere non visibile.

Le autorizzazioni definite a livello di attività di processo hanno prevalenza su quelle definite a livello di istanza di form, che a loro volta hanno prevalenza su quelle definite a livello di modello di form.

nota

Nota

Quando il motore di Workflow innesca un'attività nell'istanza di processo, le eventuali autorizzazioni settate sulla Form associata all'attività diventano predominanti rispetto a quelle settate sulla Form.

Si consiglia, a meno di esigenze particolari, di impostare le autorizzazioni di openwork® come segue:

1. Definire i gruppi che includeranno le autorizzazioni principali, come ad esempio:

· creazione/modifica di Protocolli e/o creazione/modifica di Documenti;
· consultazione dei Protocolli/Documenti di tipologia A
· consultazione dei Protocolli/Documenti di tipologia B
· consultazione dei Protocolli/Documenti di tipologia C
· gestione dei Fascicoli in openwork®

2. Assegnare ai gruppi le relative autorizzazioni proprietarie di piattaforma. freccia

3. Impostare nel Piano di Classificazione le relative autorizzazioni per tipologia. freccia

4. Eventuali ulteriori autorizzazioni a livello di singoli campi della Form. freccia

5. Modificare le autorizzazioni già impostate, in virtù di esigenze particolari a livello di Istanza di Processo. freccia


Formule

In openwork® per definire chi può eseguire un'attività, chi può visualizzare un documento, a chi deve essere indirizzato un documento, etc. vengono utilizzate stringhe opportunamente formate denominate formule.

Le formule processate all'occorrenza da specifiche funzioni restituiscono elenchi di operatori (formule di organigramma) o elenchi di anagrafica (formule di anagrafica).

Una formula è costituita da una concatenazione di stringhe separate da un punto e virgola, nella forma:

;stringa1;stringa2;stringa3;

In una formula di organigramma ogni stringa N-esima è costituita da un prefisso di 3 caratteri e un argomento numerico che assume diversi significati a seconda del prefisso, per esempio:

;R 1;BNU1;RA 8;

In una formula di anagrafica ogni stringa N-esima può essere un codice di operatore, come nel caso precedente, o un codice di anagrafica, per esempio:

;000003;SPI;AS 2;

Di seguito si riporta l'elenco dei prefissi; se l'argomento numerico non è previsto viene riportata la dicitura n.p. Ogni prefisso può essere richiamato all'interno degli script tramite un alias.

Descrizione prefisso | Alias | Codice | Argomento numerico | Categoria
Tutta l'organizzazione | preAll | "ALL" |  |
Utenti da definire | preCustomPartecipants | "CUS" |  |
Utente | preUser | "U " |  |
Ufficio | preOffice | "N " |  |
Gruppo | preGroup | "G " |  |
Ruolo | preRole | "R " |  |
Ufficio di competenza del fascicolo | preFolderOffice | "FO " |  | 1
Responsabile dell'ufficio di competenza del fascicolo | preBossFolderOffice | "BFO" |  | 1
Responsabile del fascicolo | preBoss | "B " |  | 1
Ufficio del responsabile del fascicolo | preBossOffice | "BO " |  | 1
Utenti addetti alla elaborazione del fascicolo | preElaborationUsers | "EU " |  | 1
Utente di una attività | preActivityUser | "AU " |  | 2
Responsabile dell'utente di una attività | preBossActivityUser | "BAU" |  | 2
Ufficio dell'utente di una attività | preOfficeActivityUser | "OAU" |  | 2
Utente dell'attività precedente | prePrecedentUser | "PU " |  | 2
Responsabile dell'utente dell'attività precedente | preBossPrecedentUser | "BPU" |  | 2
Ufficio dell'utente dell'attività precedente | preOfficePrecedentUser | "OPU" |  | 2
Utente che ha protocollato il documento che ha attivato il processo | preProtocolUser | "NU " |  | 1
Ufficio dell utente che ha protocollato il documento che ha attivato il processo | preOfficeProtocolUser | "ONU" |  | 1
Responsabile dell'ufficio dell'utente che ha protocollato il documento che ha attivato il processo | preBossProtocolUser | "BNU" |  | 1
Ruolo dell'utente dell'attività precedente | prerolePrecedentUser | "RPU" |  | 2
Ruolo dell'utente di una attività | preroleActivity | "RA " |  |
Responsabile del documento | preDocumentBoss | "DB " |  | 3
Responsabile dell'ufficio di competenza del documento | preBossHolderOffice | "BHO" |  | 3
Responsabile dell'ufficio di protocollazione del documento | preBossProtocolOffice | "PBO" |  | 4
Utenti dell'ufficio di competenza del documento | preAllHolderUsers | "AHU" |  | 3
Utenti dell'ufficio che protocolla il documento | preAllProtocolUser | "APU" |  | 4
Utenti in lista di distribuzione | preDistributionList | "DL " |  | 3
Utenti partecipanti alle attività su di un documento | preAllPartecipants | "AP " |  | 5
Utenti esterni | preExternalUser | "EXU" |  | 6
Autore del documento | preDocumentAuthor | "DU " |  |
Ufficio dell'autore del documento | preDocumentAuthorOffice | "UDU" |  |
Ufficio di livello n di riferimento dell'autore del documento | preDocumentAuthorLevelOffice | "LDU" |  |
Destinatario di un documento | preActivityAddressee | "AA " |  | anagrafica
Mittente di un documento | preActivitySender | "AS " |  | anagrafica
Mittente del documento che ha attivato il processo | preSenderProtocolIn | "SPI" |  | anagrafica

Gli operatori possono essere assoluti o relativi: un operatore assoluto è un operatore che fa riferimento a un preciso elemento dell'organizzazione o dell'anagrafica (per esempio un gruppo, un ruolo, etc.), un operatore relativo è un operatore che fa riferimento al contesto in cui viene risolto (un'attività, un'istanza di processo, un particolare documento, etc.). Se una formula contiene operatori relativi verrà denominata formula relativa diversamente formula assoluta.


Dati & Documenti

openwork® è in grado di gestire informazioni strutturate (metadati) e/o destrutturate (file o documenti). I file possono essere memorizzati all'interno del repository di openwork® oppure in altri repository (tramite DM connector).

Le informazioni strutturate sono organizzate in record su un DBMS. I record possono essere classificati o tipizzati. Ogni campo può essere valorizzato con dati scalari (testo, data, numero, etc.) o strutture complesse (liste di operatori, liste di anagrafica, elementi di organigramma, tabelle, etc.) alimentate dall'organigramma, da altre informazioni, da sistemi esterni.

Intro04 - information

E' possibile definire criteri di accesso dipendenti dall'organizzazione per tipologia di record e per ogni singolo campo. I criteri di accesso possono essere definiti su un tipo di record, una sua istanza e/o possono dipendere dal ciclo di vita dell'informazione e dal contesto in cui viene utilizzata (chi sta facendo cosa quando).

Ad ogni record possono essere associati uno o più file. I file possono essere collegati o inclusi. I file possono risiedere nel repository di openwork® o su sistemi documentali esterni.

Intro05 - repositoryStructure

Per la gestione dei file sono presenti tutte le funzionalità tipiche di un sistema di gestione documentale: checkin/out, versioning, acquisizione scanner, autocomposizione da modelli word, firma digitale, riconoscimento barcode, OCR, conservazione sostitutiva, protocollo informatico a normativa CNIPA etc.


Modelli e istanze di form

La struttura dei metadati nel DBMS e le regole con cui questi vengono inseriti, modificati e visualizzati prendono il nome di modello di form. E' possibile definire diversi modelli di form: ogni modello definisce una tipologia, le diverse tipologie sono organizzate in un piano di classificazione.

Ogni record nel DBMS viene quindi creato secondo la struttura e le regole definite in un modello di form.

L'insieme dei metadati di un singolo record e delle regole di accesso a questi prende il nome di istanza di form o più semplicemente form: ogni record o form viene creato in base a un modello di form, le regole di accesso alla form possono essere modificate sovrascrivendo quelle ereditate dal modello.

La modalità standard di renderizzazione dei metadati è l'HTML ottenuto tramite l'applicazione nel browser di una trasformazione XSL su una struttura XML che rappresenta l'istanza di form. Questa trasformazione prende il nome di trasformazione di default e il risultato della trasformazione nel browser prende il nome di form HTML.

Alla stessa istanza di form è possibile applicare diverse trasformazioni XSL sia lato client che lato server ottenendo formati diversi.

D&D01 - metadataTransformation

Il modello di form e la trasformazione di default vengono definiti tramite uno speciale editor visuale HTML/XSL nel BPM Tools. Tramite l'editor vengono definite non solo le modalità di renderizzazione e accesso ai dati ma anche la loro struttura. La struttura HTML/XSL definita con l'editor prende il nome di modello HTML.

Per la definizione dei metadati e delle modalità di renderizzazione e accesso vengono utilizzati nell'editor tag HTML con speciali attributi che prendono il nome di controlli.

Nella form HTML i controlli vengono renderizzati tramite template XSL come elementi HTML a cui è associato codice javascript per la modifica dei dati nella struttura XML o form sottostante l'HTML.

Il front-end di una form è del tipo:

<br> Form di openwork®

Form di openwork®

La Form può essere consultata/modificata/salvata tramite :

Web Services

Il Web Service WSDocument (http://localhost/wsopenwork/wsdocument.asmx) contiene le diverse funzioni utilizzate per creare, consultare e modificare una Form di openwork®.

Ad esempio se vogliamo creare una nuova form all'interno di una configurazione openwork® in formato XML è sufficiente effettuare una chiamata SOAP ed utilizzare il metodo NewDocument del Web Service.

Applicazioni Client (browser Internet, BPM Tools)

a) Richiamando la pagina document.aspx è possibile eseguire diverse operazioni su una Form, come ad esempio l'apertura. In questo caso il codice XML che costituisce la Form viene processato dal browser che lo renderizza come una pagina WEB.

b) Nel BPM Tools è possibile definire e personalizzare i modelli contenenti il codice XML che trasformato tramite i fogli di stile XSL restituiranno la pagina WEB del browser.

Oggetti della libreria di openwork®

Nella libreria è definita la classe Document che permette di eseguire una serie di operazioni attinenti le Form di openwork®.


Stile e tipologia

Per il salvataggio dei metadati esistono diverse tabelle caratterizzate dalla presenza di alcuni metadati specifici: quando si definisce un modello di form, si crea o si apre una form è necessario specificare la tabella o stile. Di seguito è riportata una codifica degli stili.

Stile | Tabella | Descrizione
1 | protocolloinarrivo | Form in entrata
2 | protocolloinpartenza | Form in uscita
3 | documentiinterni | Form generica (interna)
4 | fascicoli | Form per fascicoli
6 | clieforextra | Form per anagrafiche
7 | messaggi | Form per messaggi interni

Per le form in entrata e in uscita esiste, per esempio un metadato che è il numero di protocollo generato automaticamente alla pubblicazione della form.

In base allo stile, dovranno obbligatoriamente essere presenti talune informazioni caratteristiche.

La tipologia identifica il modello da cui è stata generata la form. Ciascuna tipologia è identificata da un numero univoco (normalmente denominato modelid) e da una descrizione.


Struttura di una form

La form nella sua rappresentazione XML è composta dalle seguenti sezioni:

Document: Rappresentazione XML dei metadati visualizzati o modificati nella form: questo è l'elemento che viene ritrasmesso al server all'atto del salvataggio del documento.

Context: Criteri di accesso ai campi.

Indexing: Mapping dei campi simbolici della Form con i campi logici del DB.

Actions: Azioni (operazioni) consentite sulla form.

Additional: Opzioni delle listbox, altre informazioni aggiuntive generate per il run-time, etc.

Durante l'applicazione della trasformazione standard vengono applicati i criteri di accesso ai campi definiti nella sezione Context della form, e al momento del salvataggio i dati contenuti nei diversi campi verranno memorizzati nei campi del DB grazie alle corrispondenze indicate nell'apposita sezione Indexing.

Il contenuto della sezione Actions viene renderizzato nella parte superiore della form HTML.


Allegati

Gli allegati in openwork®, come in altri sistemi di gestione documentale, sono dei file di qualsiasi natura che possono essere associati ad una form di openwork®.

I file vengono memorizzati all'interno di un repository (interno o anche esterno ad openwork®) eventualmente in formato compresso (ZIP).

Inoltre tramite l'abilitazione dell'apposito modulo openwork® FullText e l'utilizzo di appositi prodotti di terze parti è possibile effettuare delle ricerche fulltext all'interno degli allegati.


Il Piano di Classificazione

Il Piano di classificazione (o titolario) permette di organizzare i modelli o tipologie in una struttura gerarchica o ad albero.

Esso deve, in genere, rispettare i seguenti tre requisiti:

· Stabilità: più un piano di classificazione risulta uguale nel tempo e nello spazio, più normalizzata sarà l'archiviazione e la ricerca.
· Staticità: valutata in rapporto alle norme che regolano l'attività dell'organizzazione.
· Non retroattività: il piano di classificazione approvato in una determinata data ha effetti solo sulla documentazione ancora da produrre;

Il Piano di Classificazione in openwork® può essere consultato/modificato tramite :

Web Services

Il Web Service WSClassification (http://localhost/wsopenwork/wsclassification.asmx) contiene le diverse funzioni utilizzate per consultare e modificare il Piano di Classificazione.

Ad esempio se vogliamo creare il dettaglio di una voce di classificazione di una configurazione openwork® in formato XML è sufficiente effettuare una chiamata SOAP ed utilizzare il metodo NewClassificationDetail del Web Service. Ulteriori esempi di popolamento del piano di classificazione da web service sono disponibili nel paragrafo cfr. Esempi popolamento da WSClassification.

Applicazioni Client (browser Internet, BPM Tools)

a) Richiamando la pagina classification.aspx
(es.: http://localhost/openwork/classification.aspx?style=300) dal browser internet è possibile aprire il Piano di Classificazione, che verrà visualizzato in base alle regole definite nel relativo foglio di stile associato. In questo caso viene aperto l'intero Piano di Classificazione.

b) Nel BPM Tools è possibile aprire il Piano di Classificazione tramite il menù Modelli -> Piano di Classificazione (Titolario di Archivio) e quindi effettuare tutte le operazioni riportate nel relativo WebService.


Struttura XML

Il Piano di Classificazione può essere rappresentato con un file in formato XML:

<?xml version="1.0" encoding="utf-8"?>

<?xml-stylesheet type="text/xsl" href="http://www.openwork.it/owkenergy/libraries/classification/classification.xsl"?>

<documentclassification xmlns:xsd="http://www.w3.org/2001/XMLSchema"

                       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

                       host="http://www.openwork.it/owkenergy" language="it"

                       action="newdoc" hidelabels="false" closecl="false"

                       xmlns="http://www.openwork.info/schema">

<levels>

<level num="1" descr="Cartella" />

<level num="2" descr="Sottocartella" />

<level num="final" descr="Documento" />

</levels>

<classification id="0" nch="0" lev="0" exp="0" style="3">

<folder id="1" nch="1" lev="0" key="01" name="Documenti" descr="" exp="0" style="0" termination="">

<item id="5" lev="1" style="3" key="doc" name="documento" descr="" prot="0" addid="0" termination="" />

</folder>

<folder id="28" nch="5" lev="0" key="02" name="Documentazione commerciale" descr="" exp="0"style="0" termination="">

<item id="29" lev="1" style="3" key="COM" name="Comunicazione relativa a offerta  commessa" descr="" prot="0" addid="0" termination="" />

<item id="30" lev="1" style="3" key="CT" name="Cartella" descr="" prot="0" addid="0" termination="" />

<item id="33" lev="1" style="3" key="FT" name="Fattura" descr="" prot="0" addid="0" termination="" />

<item id="31" lev="1" style="3" key="OF" name="Offerta" descr="" prot="0" addid="0" termination="" />

<item id="32" lev="1" style="3" key="ORD" name="Ordine" descr="" prot="0" addid="0" termination="" />

</folder>

<folder id="39" nch="3" lev="0" key="03" name="Ciclo Passivo" descr="" exp="0" style="0" termination="">

<folder id="22" nch="1" lev="1" key="AF" name="Approvazione fattura passiva" descr="" exp="0" style="0" termination="">

<item id="23" lev="2" style="3" key="FP" name="Fattura Passiva" descr="" prot="0" addid="0" termination="" />

</folder>

<folder id="17" nch="2" lev="1" key="DF" name="Distribuzione fattura passiva" descr="" exp="0"style="0" termination="">

<item id="20" lev="2" style="3" key="DDB" name="Documento da DB" descr="" prot="0" addid="0" termination="" />

<item id="18" lev="2" style="3" key="FTP" name="Fattura passiva" descr="" prot="0" addid="0" termination="" />

</folder>

<item id="8" lev="1" style="3" key="RdA" name="Richiesta di Acquisto" descr="" prot="0" addid="0" termination="" />

</folder>

<folder id="41" nch="1" lev="0" key="04" name="Gestione del personale" descr="" exp="0" style="0" termination="">

<item id="42" lev="1" style="3" key="RFP" name="Richiesta ferie/permessi" descr="" prot="0" addid="0"     termination="" />

</folder>

<folder id="49" nch="1" lev="0" key="06" name="Documentazione procedure" descr="" exp="0" style="0" termination="">

<item id="50" lev="1" style="3" key="MP" name="Manuale procedura" descr="" prot="0" addid="0" termination="" />

</folder>

<item id="40" lev="0" style="3" key="ric" name="ricerche"descr="" prot="0" addid="0" termination="" />

   </classification>

<selection />

</documentclassification>

Nel caso specifico in cui, tramite BPMTools, sia stato avvalorato un campo di tipo tag, ntag e dtag per un elemento del piano di classificazione, l'elemento XML di tipo <item> o <folder> che lo rappresenta nel file XML avrà avvalorato l'attributo tag.


Esempi popolamento da WSClassification

Per popolare il piano di classificazione, si fa uso del web service WSclassification.

Di seguito alcuni esempi.

1. Creazione grado divisionale a livello 0 (in radice del piano di classificazione), con indice = 99 e nome = Nome grado divisionale

<NewClassificationDetail xmlns = "http://www.openwork.info/schema">

<parentID>0</parentID>

<item xmlns = "http://www.openwork.info/schema" type = "folder">

<id>0</id>

<key>99</key>

<name>Nome grado divisionale</name>

<style>0</style>

<termination></termination>

</item>

</NewClassificationDetail>

· Notare che il parentID, che rappresenta l'id del grado divisionale padre, vale 0, ad indicare che il grado divisionale è inserito in radice.
· Il NewClassificationDetailResponse restituisce un newID pari a 56.

2. Creazione grado divisionale sottostante quello di cui al punto 1., con indice = 19 e nome = Nome sub grado divisionale

<NewClassificationDetail xmlns = "http://www.openwork.info/schema">

<parentID>56</parentID>

<item xmlns = "http://www.openwork.info/schema" type = "folder">

<id>0</id>

<key>19</key>

<name>Nome sub grado divisionale</name>

<style>0</style>

<termination></termination>

</item>

</NewClassificationDetail>

Notare che parentID è valorizzato con il newId di cui al punto 1 (nell'esempio, vale 56). Più in generale, esso rappresenta l'id del grado divisionale padre.

Il response è:

<NewClassificationDetailResponse xmlns = "http://www.openwork.info/schema">

<NewClassificationDetailResult>0</NewClassificationDetailResult>

<newID>57</newID>

<ErrDescription/>

</NewClassificationDetailResponse>

e la sua struttura è identica per tutti i casi.

3. Creazione Protocollo in entrata nel grado divisionale di cui al punto 1., con indice = PIX e nome = Protocollo entrante di esempio

<NewClassificationDetail xmlns = "http://www.openwork.info/schema">

<parentID>56</parentID>

<item xmlns = "http://www.openwork.info/schema">

<id>0</id>

<key>PIX</key>

<name>Protocollo entrante di esempio</name>

<style>1</style>

<prot>0</prot>

</item>

</NewClassificationDetail>

Notare ancora ParentID, valorizzato con il newId di cui al punto 1 (nell'esempio, vale 56).

4. Creazione Protocollo in uscita nel grado divisionale di cui al punto 1., con indice = POX e nome = Protocollo uscente di esempio

<NewClassificationDetail xmlns = "http://www.openwork.info/schema">

<parentID>56</parentID>

<item xmlns = "http://www.openwork.info/schema">

<id>0</id>

<key>POX</key>

<name>Protocollo uscente di esempio</name>

<style>2</style>

<prot>0</prot>

</item>

</NewClassificationDetail>

Notare ancora ParentID, valorizzato con il newId di cui al punto 1 (nell'esempio, vale 56).

5. Creazione Protocollo interno nel grado divisionale di cui al punto 1., con indice = PITX e nome = Protocollo interno di esempio

<NewClassificationDetail xmlns = "http://www.openwork.info/schema">

<parentID>56</parentID>

<item xmlns = "http://www.openwork.info/schema">

<id>0</id>

<key>PITX</key>

<name>Protocollo interno di esempio</name>

<style>3</style>

<prot>1</prot>

</item>

</NewClassificationDetail>

6. Creazione Documento interno nel grado divisionale di cui al punto 1., con indice = DIX e nome = Documento interno di esempio

<NewClassificationDetail xmlns = "http://www.openwork.info/schema">

<parentID>56</parentID>

<item xmlns = "http://www.openwork.info/schema">

<id>0</id>

<key>DIX</key>

<name>Documento interno di esempio</name>

<style>3</style>

<prot>0</prot>

<customnumbering>

<manualnumbering>0</manualnumbering>

<afteravailnumbering>0</afteravailnumbering>

<numberformat>

<year>4</year>

<classificationpath>0</classificationpath>

<classificationsep>;/;.;</classificationsep>

<officetypereference>1</officetypereference>

<numberposition>5</numberposition>

<revision>Rev</revision>

<number>

<field type = "fixed" value = "number"/>

<field type = "sep" value = "-"/>

<field type = "fixed" value = "year"/>

</number>

</numberformat>

</customnumbering>

</item>

</NewClassificationDetail>

7. Creazione Fascicolo nel grado divisionale di cui al punto 1., con indice = FX e nome = Fascicolo di esempio

<NewClassificationDetail xmlns = "http://www.openwork.info/schema">

<parentID>56</parentID>

<item xmlns = "http://www.openwork.info/schema">

<id>0</id>

<key>FX</key>

<name>Fascicolo di esempio</name>

<style>4</style>

<prot>0</prot>

<customnumbering xmlns = "http://www.openwork.info/schema">

<manualnumbering>0</manualnumbering>

<afteravailnumbering>0</afteravailnumbering>

<numberformat>

<year>4</year>

<classificationpath>0</classificationpath>

<classificationsep>.</classificationsep>

<officetypereference>1</officetypereference>

<numberposition>5</numberposition>

<revision>Rev</revision>

<number>

<field type = "fixed" value = "number"/>

<field type = "sep" value = "-"/>

<field type = "fixed" value = "year"/>

</number>

</numberformat>

</customnumbering>

</item>

</NewClassificationDetail>

Osservazioni

· La creazione di un grado divisionale prevede che il nodo item abbia attributo type = "folder" e che lo style sia 0, diversamente il server restituisce errore.
· La creazione di modelli di protocollo in entrata, protocollo in uscita, protocollo interno, documento interno e fascicolo prevede la definizione di prot; esso vale 0 in tutti i casi tranne per i protocolli interni, in cui vale 1.
· I valori da attribuire a style sono i seguenti:

0 - grado divisionale

1 - protocollo in entrata

2 - protocollo in uscita

3 - protocollo interno e documento interno

4 - fascicolo

· Il formato di numerazione segue le regole generali di piattaforma, ed è unico in caso di protocollo unico a norma CNIPA, può differenziarsi tra protocollo in entrata, protocollo in uscita e protocollo interno in caso di serie numeriche differenti per ciascuno dei tre casi. Ad ogni modo, esso non va indicato in questo frangente.
· Per i documenti interni, esiste un'apposita sezione customnumbering, in quanto i documenti interni seguono una serie numerica differente per ciascun modello. La sezione è così definita:

- manualnumbering: boolean, indica se la numerazione avviene contestualmente (valore 0) alla pubblicazione oppure no (valore 1);

- afteravailnumbering: obsoleto, lasciare valore 0;

- numberformat:

- year: numero di cifre dell'anno

- classificationpath: boolean, indica se il numero deve contenere anche le sigle di classificazione concatenate

- classificationsep: string, indica i separatori da utilizzare

- officetypereference: integer, indica cosa utilizzare nel numero come sigla dell'ufficio; i valori ammessi sono: 1 (ufficio cui appartiene l'utente che protocolla), 2 (ufficio che protocolla) o 3 (ufficio di competenza)

- revision: string, indica quali caratteri utilizzare nel numero come indicatori di revisione

- number: indica l'ordine delle voci da inserire nel numero.


Elenchi

L'elenco è una tabella con informazioni provenienti da viste estratte dal database.

La caratteristica fondamentale è quella di effettuare delle ricerche di tipo semplice (cercare un singolo termine), o ricerche avanzate (più criteri contemporaneamente soddisfatti). L'intestazione di ogni elenco è corredata di una tabella in cui compare, oltre al logo della applicazione, una toolbar di azioni.

Un elenco può essere solo consultato (infatti rappresenta una vista sul database) tramite :

Web Services

Il Web Service WSList (http://localhost/wsopenwork/wslist.asmx) contiene le diverse funzioni utilizzate per consultare elenchi.

Ad esempio se vogliamo ottenere un elenco di una configurazione openwork® in formato XML è sufficiente effettuare una chiamata SOAP ed utilizzare il metodo GetList del Web Service.

Applicazioni Client (browser Internet)

Richiamando la pagina list.aspx
(es.: http://localhost/openwork/list.aspx?listtype=3) dal browser Internet si ottiene l'elenco dei documenti interni visibili all'operatore loggato in openwork®.

Una panoramica dei vari parametri utilizzabili per l'apertura degli elenchi è disponibile alla pagina Parametri per l'apertura di un elenco

Oggetti della libreria di openwork®

Al momento è possibile utilizzare delle apposite funzioni (OPENRECORDSET, GETLIST) che permettono di creare oggetti (RECORDSET, XML DOM, etc.) sulle tabelle del Database di openwork® o sulle viste.


Processi

Un processo è un insieme di attività eseguite da persone e/o sistemi che, scatenate da un evento, producono un risultato di output.

Un processo può essere costituito solo da attività eseguite da sistemi (processo System To System o S2S) o solo da attività eseguite da persone (processo Human To Human o H2H) o entrambi (processo Human To System To Human o H2S2H).

Le attività possono essere coordinate secondo regole predefinite (processo strutturato) o secondo regole che vengono definite in itinere dai partecipanti al processo (processo destrutturato).

I processi strutturati si caratterizzano per un'elevata e rigorosa struttura, sono ben definiti, ripetitivi e guidati

Intro06 - Processes

da schemi prefissati; tutti gli elementi necessari alla realizzazione del processo sono forniti all'operatore in forma automatizzata. Il flusso informativo è paragonabile ad una catena di montaggio.

I processi destrutturati sono legati prevalentemente alla capacità di intervento dei singoli operatori che collaborano attivamente all'esecuzione del processo, decidendo di volta in volta la scelta più opportuna alla prosecuzione del normale flusso operativo. Gli elementi necessari alla realizzazione del processo possono variare e gli stessi operatori si procurano le informazioni ritenute utili allo svolgimento della propria attività. Il flusso informativo è paragonabile ad una invenzione.

In genere un processo in cui partecipano persone è un processo parzialmente strutturato o semistrutturato.

Un processo può essere costituito da diversi sottoprocessi o può avviare altri processi indipendenti.

In openwork® è possibile modellare graficamente processi strutturati e destrutturati, H2H o S2S, collegare tra loro processi e sottoprocessi in una logica top-down, riutilizzare processi. Per i processi S2S sono presenti specifiche funzionalità per la gestione documentale (OCR, Barcode, trasformazioni XSL, PDF), per l'avvio di job asincroni e remoti, per la gestione della posta elettronica, fax, etc.

I processi modellati possono essere immediatamente istanziati ed eseguiti, ogni istanza è indipendente dal modello e può essere modificata dall'owner o può modificarsi essa stessa.

I dati di processo possono essere analizzati e monitorati tramite tool di Business Analisys.


Modelli e istanze di processo

Graficamente il disegno di un processo è un insieme di nodi collegati da link che rappresentano le regole logiche e temporali e le attività.

<br> Esempio di rappresentazione grafica di un Processo

Esempio di rappresentazione grafica di un Processo

Ogni attività può prevedere la partecipazione di uno o più operatori (partecipanti) che modificano informazioni; nel processo, dunque, può essere specificato il flusso che i documenti e le form di openwork® devono seguire affinché la funzione organizzativa sia completata correttamente.

Utilizzando l'apposito modulo denominato Business Flow Designer del BPM Tools è possibile "disegnare" in openwork® un modello (o template) di Processo openwork®. Questo modello presenta una serie di caratteristiche e di proprietà personalizzabili, che verranno ereditate dalle istanze di processo.

Pertanto definiamo:

· modello di processo: l'insieme di attività e regole definite in fase di progettazione (design-time);
· istanza di processo: l'insieme delle attività e regole in esecuzione (run-time).

Tale distinzione è necessaria in quanto in genere, con il termine processo, si tende ad identificare sia l'oggetto in modalità run-time e sia l'oggetto in modalità design-time.

Per quanto ogni istanza discenda necessariamente da un modello di processo, openwork® processa ogni singola istanza di processo in maniera del tutto separata ed indipendente dal modello di processo. E' possibile modificare un'istanza in corso d'esecuzione senza andare ad impattare sul modello su cui essa si basa: ciascuna istanza di processo in openwork® vive in un proprio ambiente operativo dedicato.

Anche un processo o istanza sono codificati in una struttura XML e di conseguenza è possibile renderizzarli in openwork® in diversi modi.

Un modello di processo o istanza di processo possono essere consultati/modificati tramite :

Web Services

Il Web Service WSProcess (http://localhost/wsopenwork/wsprocess.asmx) contiene le diverse funzioni utilizzate per consultare e modificare un Processo.

Ad esempio se vogliamo avviare un determinato processo di openwork® è sufficiente effettuare una chiamata SOAP ed utilizzare quindi il metodo StartProcess del Web Service.

Applicazioni Client (browser Internet, BPM Tools)

a) Richiamando dal browser IE la pagina processchartl.aspx con i seguenti parametri

processid | Identificativo del modello di processo o dell'istanza di processo | >0
style | Parametro non obbligatorio. Valore di default 2 | 1 Modello di processo 2 istanza di processo

(es.:http://localhost/openwork/processchartl.aspx?processid=NN&style=M) è possibile aprire una rappresentazione grafica di un modello o istanza di processo. Questa potrà essere visualizzata grazie all'utilizzo di un apposito Viewer free (SVG Viewer di Adobe) che verrà installato solo durante il primo utilizzo sul PC client. In questo caso è possibile solo consultare il processo.

b) Selezionando nel BPM Tools la voce di menù Modelli --> Modelli di Processo verrà restituito sempre codice XML dal Web Services, ma trasformato mediante un apposito foglio di stile in una finestra che rappresenta graficamente il disegno del modello.
Analogamente il funzionamento per le altre funzioni presenti alla voce di menù Processi.

Oggetti della libreria di openwork®

Nella libreria di openwork® è disponibile la classe ProcessInstance che consente di gestire e modificare le istanze di processo di openwork®.


Attivita'

Attività

L'Attività è l'unità di base con cui viene descritto un processo.

In un'attività viene indicato chi deve fare cosa e su quale eventuale form in modo tale che vengano inserite tutte le informazioni necessarie al completamento della singola attività (per questo l'operatore viene aiutato e supportato da una serie di features specifiche, quali istruzioni operative, campi obbligatori, ecc.). Quando l'attività si conclude, la Form principale (ed eventuali altri documenti) vengono distribuiti alle successive attività secondo quanto previsto dal processo.

Un'attività può essere consultata/modificata tramite :

Web Services

Il Web Service WSActivity (http://localhost/wsopenwork/wsactivity.asmx) contiene diverse funzionalità inerenti le Attività in openwork®.

Ad esempio se vogliamo completare un'attività di openwork® è sufficiente effettuare una chiamata SOAP ed utilizzare il metodo Complete del Web Service.

Applicazioni Client (browser Internet, BPM Tools)

a) Richiamando dal browser IE la pagina activity.aspx è possibile eseguire svariate operazioni relative ad un'attività in openwork® (prenotazione, assegnazione, esecuzione, trasferimento, completamento, etc).

b) Nel BPM Tools le attività vengono create al momento del salvataggio/pubblicazione di un Modello di Processo. (In futuro è prevista anche la creazione tramite Web Service). Possono essere modificate, anche quando si utilizza la modalità di Editing di un'istanza di processo.

Oggetti della libreria di openwork®

Nella libreria di openwork® è disponibile la classe Activity che consente di modificare le singole attività presenti nelle istanze di processo.


Architettura di openwork®

L'architettura di openwork®

L'architettura si basa su alcuni paradigmi illustrati di seguito:

Component-based

openwork® permette di modellare e gestire i processi, combinando gli oggetti secondo la logica della realtà quotidiana delle organizzazioni.

Il disegno e l'implementazione delle componenti che costituiscono e partecipano all'attività (processi, sottoprocessi, documenti, operatori, ruoli, eventi, ecc.) permette alla piattaforma di "vestirsi" sull'organizzazione e soprattutto di implementare le attuali procedure.

Service Oriented

L'architettura di tipo SOA e l'utilizzo dei Web Services garantisce alla piattaforma grande scalabilità, robustezza e affidabilità; è difatti possibile interfacciare l'applicazione via HTTP per mezzo di chiamate ai servizi esposti, che possono avvenire da sistemi prodotti e/o che utilizzano linguaggi differenti.

Multi-tier

La suddivisione dell'applicazione in 4 livelli permette di adattare facilmente l'architettura dell'applicazione all'architettura fisica e garantisce una facile gestione dei carichi di lavoro e delle situazioni di fai-dover.

Compliant con i più diffusi standard

L'utilizzo di tecnologie quali HTML, SOAP, WSDL, XML, XPATH, XSL, XSD, XSL-FO, CSS, javascript, garantisce l'apertura dell'applicazione e agevola l'estensione delle sue funzionalità.

Integrabile

Le interfaccie standard, come Web Services e DCOM, e la presenza di entry point cui agganciare codice custom sia lato client, sia lato server, rendono possibile l'integrazione, per mezzo di logiche di workflow, di altre applicazioni già presenti nell'organizzazione.

Stepwise implementation

La presenza di strumenti di modellazione evoluti permette l'implementazione graduale di soluzioni all'interno di un'organizzazione, in modo da minimizzare i rischi e facilitare sensibilmente il change management.

Scalabile

La piattaforma è costituita da diverse componenti e permette la scalabilità e la distribuzione delle stesse su diversi sistemi:

· openwork® business components
· openwork® manager
· openwork® job engine
· applicazione Web
· database
· repository documentale
· componenti aggiuntive
· Business Process Management Tools (BPM Tools)

Le openwork® business components, l'openwork® manager e openwork® job engine formano il core della piattaforma denominata openwork® engine.

Tutti i moduli possono essere configurati in differenti modalità a seconda dell'architettura prescelta e dei requisiti di performance, ridondanza e sicurezza richiesti al sistema.

Arc01 - Architecture

Ogni singolo modulo può essere installato su un solo server o scalato su più server e presenta caratteristiche di scalabilità derivanti dalla particolare tecnologia software utilizzata: i componenti possono essere installati su un array di server, vi possono essere più web server che utilizzano gli stessi componenti, ecc.

Poiché il sistema nel suo complesso (configurazione e dati) è costituito da uno o più database relazionali e da un insieme di file, esso è compatibile con le più diffuse soluzioni di backup, protezione dati e monitoraggio disponibili sul mercato.

E' possibile configurare i diversi moduli in modo da gestire con un unico engine database diversi e repository diversi ovvero organizzazioni diverse. Tale configurazione prende il nome di modalità ASP.


openwork® business components

Le openwork® business components espongono interfacce ti tipo DCOM e webservices

· Componenti COM integrati in COM+ (Servizi componenti in Windows 2000/2003) che forniscono un insieme di API per l'utilizzo della piattaforma attraverso applicazioni esterne.
· Componenti realizzati in tecnologia Microsoft .NET che forniscono l'interfaccia Web Services su server Microsoft IIS versione 5 o successiva.

I web services espongono tutta la logica del framework openwork® secondo standard WSDL, garantendone il riuso da parte di qualsiasi applicativo o ambiente di sviluppo su qualsiasi piattaforma. Con l'utilizzo dei webservices è possibile per esempio dotare facilmente di una logica di workflow un applicativo verticale a logica cablata o fornire a un applicativo il profilo delle autorizzazioni di un operatore in funzione della sua posizione nell'organizzazione.

L'utilizzo dei componenti COM rende la piattaforma configurabile e programmabile. Difatti, istanziando direttamente le classi che compongono l'applicazione COM+, l'interfacciamento a basso livello è facilemente realizzabile possibile attraverso linguaggio VB Script, consentendo un altro grado di integrazione con gli altri sistemi.

L'interfaccia Web Services può essere interrogata da sistemi o applicazioni basati su qualsiasi linguaggio che permetta di effettuare richieste SOAP. Questo permette non solo la scrittura di client all'applicazione, ma anche l'interrogazione da parte di altri sistemi, elevandone il grado di integrazione.

Per un elenco completo dei Web Services di openwork® e del WSDL fornito consultare https://www.openworkbpm.com/wsopenwork).

In altre parole, la piattaforma permette sia l'interfacciamento ad alto livello (interfaccia applicativa Web Services) che a basso livello (interfaccia di sviluppo COM+). Proprio lo standard dei Web Services rende possibile integrare openwork® con qualsiasi applicazione e su qualsiasi piattaforma.


Il servizio openwork® Manager

È un servizio di Microsoft Windows 2000/XP/2003 deputato alla supervisione di quanto avviene nella piattaforma e a monitorare e risolvere situazioni anomale che possono crearsi nel flusso di dati e attività.

Il servizio openwork® Manager ha principalmente il compito di eseguire i processi attivi sulla piattaforma. Disegnato su un'architettura thread-based, riesce a gestire più processi in esecuzione contemporaneamente sul sistema, assegnando ognuno di essi ad un apposito thread, di modo da garantire maggiore efficenza e affidabilità.

L'openwork® Manager raccoglie le informazioni di esecuzione richiedendole direttamante alle componenti COM+ ad intervalli configurabili (polling); esegue i processi così ottenuti in blocchi la cui dimensione è sempre stabilita da configurazione, imponendo un limite (anch'esso configurabile) alla massima durata di un processo all'interno di una sessione di esecuzione.

Per maggiori informazioni sulla configurazione dell'openwork® manager fare riferimento al Server Manager e più precisamente al link La Sezione openwork® Manager.

L'openwork® manager implementa le seguenti funzionalità:

Business Flow Manager

È il workflow engine: fa avanzare i processi, assegna le attività, esegue attività automatiche, effettua verifiche temporali, ecc. Permette il regolare svolgimento dei processi in corso, distribuendo i compiti e le attività ai consumer a queste delegati ( utenti, mail manager, print manager, job engine ...).

Mail Manager

È il modulo deputato alla gestione della posta elettronica secondo gli standard SMTP e POP3. Il sistema può utilizzare questo strumento per l'invio di documenti o di informazioni eterogenee nell'ambito di processi.

Print Manager

Tra le varie automazioni di processo possibili vi è anche la stampa. Con questo strumento si ottengono diversi risultati: alleggerire i client che non hanno bisogno di software per la gestione dei dispositivi di stampa, consentire la stampa di documenti da postazioni remote e soprattutto centralizzare la gestione dei documenti da stampare eliminando gli errori (documenti sbagliati, versioni sbagliate, ecc.).

Indexing Manager

La piattaforma openwork® può utilizzare diversi applicativi di indicizzazione dei documenti: grazie a questo modulo viene richiamato il motore di indicizzazione sui documenti presenti.


Il servizio openwork® Job Engine

Il servizio openwork® Job Engine agevola l'integrazione di openwork® con qualsiasi tipologia di architettura esterna, soprattutto per quanto riguarda l'esecuzione di operazioni batch, anche di lunga durata, in cui l'esecuzione della richiesta e della risposta avviene in maniera asincrona.

Il servizio offre funzioni di gestione documentale - tipiche e avanzate - ma permette anche di integrare qualsiasi componente, eseguibile o sistema: l'applicazione diventa quindi “estesa” - sia lato client sia lato server – delle funzionalità da esso offerte.

Viene quindi a generarsi una sostanziale “indipendenza” tra openwork® e le componenti esterne integrate, per cui sono diversi gli spunti di utilizzo: ad esempio, si può sfruttare il servizio per eseguire le operazioni più lente od onerose, eventualmente deputando una o più workstation a svolgere tutte le funzioni, documentali e non (es. OCR, Conversione PDF etc.). Questo tutela le prestazioni e l'affidabilità della piattaforma openwork®, garantendo nel contempo il parallelismo dei task ad esso demandati.

L'integrazione di componenti esterne in openwork® è semplice ed immediata sia per quanto concerne l'applicazione web sia il motore di workflow, in fase di progetto come durante l'utilizzo.

Funzionalità del servizio

1. OCR Evoluto: riconoscimento caratteri di interi documenti (anche multipagina) mantenendo formattazione, stili ed immagini (cfr. openwork® OCR e Barcode).
2. Separazione Barcode Integrata: separa insiemi di documenti multipagina acquisiti in blocco mediante scanner e li allega automaticamente ai form in cui siano stati generati i corrispondenti codici a barre (cfr. openwork® OCR e Barcode).
3. Separazione Barcode Generica: separa insiemi di documenti multipagina acquisiti in blocco mediante scanner sulla base di codici a barre definiti dall'utente, rilevandone i corrispondenti valori numerici/testuali (cfr. openwork® OCR e Barcode).
4. Conversione in PDF: trasforma immagini, documenti Word, Excel e PowerPoint in PDF (cfr. openwork® PDF Converter).
5. Separazione ed estrazione per blocchi: separa documenti multipagina in base al numero di pagina iniziale, finale e a blocchi di n-pagine (cfr. Advanced Job Engine).
6. Trasformazione XSL e XSL-FO: permette di trasformare mediante fogli di stile (XSL oppure XSL-FO) un XML in un HTML, XML o PDF (cfr. Advanced Job Engine).
7. Modulo personalizzato o Custom: permette di creare, utilizzare o collegare componenti rispondenti ad esigenze specifiche, avendo a disposizione gli strumenti per comunicare con i processi openwork®, alcune utility e la possibilità di utilizzare IDE di sviluppo avanzati (cfr. Advanced Job Engine).


Applicazione Web

L'applicazione Web è costituita da una applicazione lato server e da librerie lato client in XSL, JavaScript e CSS (thick client). L'applicazione Web lato server è una delle possibili applicazioni client basate sui Web Services di openwork®.

L'architettura segue rigorosamente il principio della separazione tra dati e presentazione; il flusso di seguito descritto semplifica quello che normalmente accade quando il client inoltra una richiesta al Web Server:

· Il client richiede al Web Server l'apertura di una form.
· Il Web Server chiede ad un opportuno Web Service i dati con cui la form deve essere riempita per mezzo di una chiamata SOAP.
· Il Web Service restituisce i dati al Web Server.
· Nei dati è presente il riferimento a un foglio di stile in cui sono codificate le regole per la rappresentazione dei dati richiesti (tali regole vengono definite tramite openwork® BPM Tools durante la modellazione del processo e delle form in esso coinvolte); il Web Server verifica se il foglio di stile è presente nella directory dell'applicazione e, qualora non lo fosse, lo richiede tramite chiamata ad altro Web Service.
· Il Web Server invia al client i dati e il foglio di stile, che vengono presentati sotto-forma di pagina web nel browser.

Nel momento in cui si effettuano delle modifiche nella form e queste vengono salvate, il percorso è il seguente:

· Il client invia al Web Server un messaggio SOAP contenente i dati modificati unitamente ad eventuali allegati in formato DIME da salvare nel repository documentale.
· Il Web Server provvede a instradarli, tramite ws-addressing e ws-referral, al Web Service.
· I dati indicizzati (contenuti nei vari campi della form) vengono memorizzati nel database, gli eventuali allegati vengono memorizzati nel repository.

Quando il client richiede la stampa di una form o di un elenco, viene invece eseguita una trasformazione lato server con l'utilizzo di Formatting Objects per la produzione di documenti in formato PDF secondo regole definite con openwork® BPM Tools. Tramite il meccanismo delle trasformazioni è possibile convertire i documenti di openwork® in diversi altri formati come Microsoft Word® o Microsoft Excel® (cfr. openwork® Export).

L'applicazione web lato server è attualmente realizzata in tecnologia Microsoft .NET per server Microsoft IIS versione 5 o successiva. È inoltre possibile, con estrema facilità, estendere i moduli JavaScript lato client con codice custom ed anche modificare, attraverso fogli di stile, il layout grafico dell'applicazione. La disposizione delle directory sul Web Server è studiata in modo da separare i moduli proprietari da eventuali personalizzazioni (CSS, codice JavaScript, ecc.) per semplificare le operazioni di manutenzione dell'applicazione. Il protocollo utilizzato nelle comunicazioni può essere HTTP o HTTPS.

Possono essere installati diversi Web Sever sulla stesso Application che espongono anche politiche di autenticazione diverse; i web server comunicano con i web services tramite HTTP o HTTPS e possono essere impostati meccanismi di Load Balancing come NLB. E' possibile quindi multistanziare sia l'interfaccia applicativa (Web Services), sia il motore ( in modalità separazione di carico).


Il database

Il database di openwork® contiene la configurazione ed i dati relativi all'applicazione.

Il database di openwork® può essere installato sulle seguenti tipologie di DMBS:

· Oracle 9i o 10g
· SQL Server 2000 o 2005
· Microsoft Access (solo per installazioni demo)

Anche questa componente può essere installata sia in architettura distribuita che stand-alone. Entrambe le modalità sono supportate dalla procedura di setup ( Installazione di openwork® ).

Le informazioni risultano suddivise in 3 aree:

· Configurazione
· Runtime
· Area Dati.

La Configurazione contiene tutte le informazioni che determinano il comportamento e la struttura dell'applicazione e quindi relative ad organigramma, autorizzazioni, struttura delle anagrafiche, modelli e form di documenti, modelli di processi e relativi script (VBS).

Il Runtime contiene tutte le informazione relative alle sessioni in corso, all'esecuzione dei processi attivi e le relative attività in corso e che determinano la fotografia dell'esecuzione della piattaforma all'istante T.

L'Area Dati contiene le informazioni relative a documenti in modifica o archiviati, istanze di processo già processate, anagrafiche utenti ecc. Questa sezione del database, insieme al repository documentale costituiscono lo storico dell'applicazione.

Al termine dell'installazione il database contiene la configurazione del sistema vergine, ossia pronta alla creazione di un'applicazione (Costruire applicazioni in openwork®), mentre risulterà vuota la parte di run-time e di dati.

openwork® accede al database per mezzo dei Provider OLEDB rilasciati direttamente dai produttori dei DMBS, ed utilizza quindi la gestione delle priorità e degli accessi concorrenti messi a disposizione da questi.


Il repository documentale

Il repository documentale è un insieme di file (allegati alle form) che può risiedere su qualsiasi tipo di piattaforma con l'unico vincolo che la piattaforma sia accessibile tramite protocollo FTP o NETBIOS.

Il repository documentale e l'area dati del database costituiscono lo storico dell'applicazione di openwork®.

Nella configurazione di default questo è composto da una struttura in cui i file sono distribuiti in base alla tipologia del documento di appartenenza ed all'identificativo cronologico. Al suo interno gli allegati possono essere salvati in chiaro o compressi in formato zip.

attenzione

Attenzione

Nonostante il sistema permetta la configurazione della tipologia di compressione a sistema avviato, si consiglia di effettuare questa scelta in fase di installazione o comunque prima della messa in produzione. Successive modifiche provocherebbero la perdita dello storico dei dati.

In altro modo questo componente può anche essere sostituito dall'utilizzo di un sistema dedicato di Document Management esterno ad openwork®, con un'apposita configurazione della piattaforma.


Componenti aggiuntive

Le funzionalità di Business Process Management parte integrante di openwork®, consentono di rappresentare e governare organizzazione, documenti e processi di un'azienda.
Per estendere ulteriormente le potenzialità della suite sono anche disponibili le openwork® Professional e Power components.

openwork® Professional Components: in aggiunta alle funzionalità fondamentali di openwork®, la suite dispone anche di componenti dedicate alla gestione di tematiche specifiche:

· openwork® Authentication
Gestione di single-sign-on per l'autenticazione degli utenti (es. Active Directory, LDAP o altro).
· openwork® Document Management Connector
I processi di openwork® operano anche su repository documentali esterni alla suite, utilizzando DMS di qualsiasi produttore.
· openwork® Export
Elenchi e documenti esportati in PDF, Word, Excel e in qualsiasi altro formato file desiderato.
· openwork® FullText
Estensione delle ricerche anche al contenuto testuale dei file allegati ai documenti.
· openwork® PDF converter
Qualsiasi allegato ad un documento openwork® può essere convertito in PDF con un semplice clic.

openwork® Power Components: a complemento delle funzionalità di Business Process Management di openwork®, sono state realizzate importanti integrazioni con tecnologie di terze parti

· openwork® Document Store (conservazione sostitutiva)
conservazione sostitutiva di documenti nel pieno rispetto della normativa italiana.

· openwork® BarCode
Generazione e stampa di codici a barre per facilitare l'acquisizione massiva di documenti cartacei.

· openwork® Digital Sign (firma digitale)

Firma digitale integrata per apporre una firma o una marcatura temporale su un file, nel rispetto delle norme CNIPA.

· openwork® OCR
Trasformazione di file grafico (es. fax o scansione di un qualsiasi documento cartaceo) in un file editabile in formato WORD, RTF, XML o file di testo puro).

· openwork® Business Console
Cruscotto per il monitoraggio e l'analisi approfondita di processi e organizzazioni gestiti con openwork®.
· openwork® Advanced Job Engine
modulo che permette di estendere le funzionalità base del Openwork® Job Engine, racchiudendone tutti i vantaggi (asincronicità, indipendenza, parallelismo dei task) e aggiungendo la possibilità di creare, utilizzare, collegare componenti personalizzati, rispondenti ad esigenze specifiche.


Business Process Management Tools

È una applicazione proprietaria Windows che mette a disposizione degli utilizzatori di openwork® un insieme di strumenti grafici attraverso i quali costruire applicazioni web, modellando il contenuto dell'openwork® server.

I principali strumenti dell'openwork® Business Process Management Tools sono:

· Organization Manager per la gestione dell'organigramma/funzionigramma;
· Form Designer per il disegno del layout delle form;
· Business Flow Designer per la modellazione dei processi che si intendono gestire.
openwork® BPM Tools modules

openwork® BPM Tools modules

A questi strumenti si aggiungono: l'Authorization Manager (per la gestione dell'accesso a dati e funzionalità), il Group Manager (per la gestione dei gruppi trasversali all'organizzazione), il Classification Manager (per la gestione e classificazione delle informazioni di form e processi) ed il Menu, Desktop & List Editor per la gestione dell'interfaccia tra gli operatori e le funzionalità applicative realizzate.

openwork® BPM Tools utilizza esclusivamente i Web Services di openwork® (tramite http o https), per cui è possibile gestire da un'unica postazione in remoto qualsiasi installazione.

Form Designer

Con il Form Designer è possibile disegnare form per la rappresentazione dei dati utilizzando, oltre ad oggetti standard web (controlli standard HTML) anche una collezione completa di controlli openwork® che permettono di creare facilmente interfaccie evolute per la gestione dei dati nell'ambito dei processi di un'organizzazione.

nota

Nota

Il Form Designer genera automaticamente i fogli di stile utilizzati per il rendering dei dati in funzione del contesto organizzativo e procedurale in cui vengono richiesti, gestendone anche il versioning.

Business Flow Designer

Il Business Flow Designer fornisce strumenti grafici con i quali è possibile definire la sequenza logica e temporale di attività, stabilendo chi può fare cosa, come, con quali documenti, autorizzazioni, ecc.

Il Business Flow Designer integra un ambiente di programmazione in linguaggio VBScript con il quale è possibile far eseguire, dal motore di workflow, codice custom (lato server) al verificarsi di determinati eventi (avvio, esecuzione o completamento di una attività, ecc.) o condizionare il completamento di un'attività al verificarsi di determinate condizioni.

Questa funzionalità, unitamente alle API di openwork®, permette di interagire con applicazioni esterne, realizzando un'unica infrastruttura di workflow.


Modalità ASP

La piattaforma openwork® è disegnata per permettere l'erogazione del servizio in modalità ASP (Application Service Provider), ossia per la connessione via HTTP o HTTPS ad un Data-Center.

La versione openwork® server ASP permette di implementare più configurazioni sulla stessa installazione; le diverse configurazioni condivideranno lo stesso engine ma avranno una propria installazione del database del repository e del client di accesso, che per semplicità indicheremo come Applicazione Web, facendo riferimento al server fornito dal produttore.

Arc03 - ArchitectureASP

L'installazione di un server ASP prevede l'installazione di una piattaforma server (per mezzo dell'apposita licenza rilasciata dal produttore) e dell'attivazione della modalità ASP su questa (anche questa per mezzo di un'apposita licenza).

La piattaforma permetterà la creazione delle configurazioni dal Server Manager (come indicato al paragrafo Gestione di un server openwork® - La sezione Installazioni) che si realizza nell'installazione delle componenti database, webserver e repository e nell'attivazione dello stesso (sempre per mezzo di apposita licenza rilasciata dal produttore), mentre la parte implementata dal core (engine, openwork® manager, job engine e componenti aggiuntive) sarà condivisa con le altre configurazioni presenti sul sistema.

Le proprietà di scalabilità e distribuzione delle componenti resta invariata e l'accesso alla configurazione/disegno della configurazione è possibile dalle stesse installazioni dell'applicazione dedicata (Business Process Management Tools).


Installazione e gestione di openwork®

Nella seguente sezione sono riportate le informazioni necessarie per consentire l'installazione e la gestione della piattaforma openwork®.

In particolare, l'installazione di un server openwork® è guidata da una procedura di setup automatica che consente di installare le diverse componenti architetturali, mentre la successiva amministrazione e la manutenzione del server avviene attraverso l'utility denominata Server Manager (cfr. Gestione di un server openwork®).

Oltre alla procedura d'installazione è disponibile un'ulteriore procedura automatica che consente di effettuare l'upgrade di versione della piattaforma. (cfr. Upgrade di un server openwork®).

Per informazioni sull'installazione delle componenti lato client, consultare le sezioni Installazione componenti lato client e Installazione di openwork® BPM Tools.


Installazione di un server openwork®

Grazie alla semplicità del programma di setup, l'installazione di openwork® può essere effettuata anche da personale senza particolare esperienza sistemistica; tuttavia, la natura dell'applicazione e la possibilità di migliorare le prestazioni generali della piattaforma mediante attività di tuning, suggeriscono la supervisione di personale con esperienza sistemistica in ambiente Microsoft Windows Server, soprattutto in ambienti in produzione che richiedono l'utilizzo di database Microsoft® SQL Server oppure Oracle®.

Il programma di setup di openwork® (lato server) consente l'installazione di:

· Componenti software propedeutiche al funzionamento della tecnologia openwork®:
o Microsoft® XML Parser 4.0 SP2
o Microsoft® .NET Framework 2.0
o Microsoft® Web Services Enhancements 2.0 SP3
· Componenti software che costituiscono la tecnologia openwork®:
o Engine - Insieme delle risorse e delle componenti di che implementano il core della piattaforma.
o Web Server - Componente che permette l'utilizzo della piattaforma agli utenti via browser.
o Data Base - Base di dati che contiene sia le informazioni di configurazione che i dati.
o Repository - Archivio documentale in cui sono immagazzinati tutti gli allegati alle form.
· openwork® Server Manager per la gestione del server openwork®.
· openwork® Uninstaller per la disinstallazione del server openwork®.

Al termine del programma di setup è necessario attivare la licenza di openwork® attraverso l'utilizzo di un opportuno codice attivazione: è possibile attivare la piattaforma in modalità Demo (valida 60 giorni) inserendo un codice cliente valido oppure in modalità Server inserendo un codice installazione valido.

L'attivazione del software può avvenire in modalità on-line, se il server è direttamente connesso ad Internet, oppure in modalità off-line utilizzando una connessione ad Internet disponibile su altro PC (cfr. Attivazione)

attenzione

Attenzione

E' importante che la directory su cui si effettua l'installazione differisca da quella di default dei programmi di Windows (ad esempio C:\Programmi, C:\Program Files) , in quanto le componenti necessitano di particolari autorizzazioni del file system.

La piattaforma su cui si basa la tecnologia openwork® è composta da:

· Core - comprende Engine e Web Services
· Configurazione - comprende Web Server, Database e Repository.

In un'installazione di openwork® si possono avere più configurazioni (attraverso attivazioni di tipo ASP, ASPDEV), ma un solo core. Per questo motivo le componenti del core vengono installate nella directory sottostante la root di openwork® (es.C:\openwork\webservices), mentre le componenti di una configurazione vengono installatate in una directory del tipo <Root openwork>\configurazioni\default\<nome componente> (es.C:\openwork\configurazioni\default\database).


Prerequisiti

Il setup installa un server openwork® stand-alone. L'unica componente installabile in modalità distribuita è il database (SQL Server e/o Oracle).

I Sistemi Operativi supportati sono:

· Windows 2008 Server Standard o R2.
· Windows 2003 Server Web, Standard o Enterprise Edition.
· Windows 2000 Server Standard o Enterprise Edition (con Service Pack 4).
· Windows 2000 Professional.
· Windows XP Professional.
· Windows Vista
· Windows Seven

I Database supportati sono:

· Oracle versione 9i, 10g o 11g.
· SQL Server 2000 (con Service Pack 4).
· SQL Server 2000 Desktop Engine (MSDE) con Service Pack 4. Solo per versioni dimostrative.
· SQL Server 2005.
· SQL Server 2005 Express disponibile al link:http://www.microsoft.com/downloads/details.aspx?familyid=4C6BA9FD-319A-4887-BC75-3B02B5E48A40). Solo per versioni dimostrative.
· SQL Server 2008.
· SQL Server 2008 Express. Solo per versioni dimostrative.
· MS Access (usato solo in versioni demo in quanto, per le altre tipologie d'installazione, potrebbero verificarsi problemi di deadlock oppure problemi di crescita incontrollata del DB, soprattutto se si usano campi memo).

attenzione

Attenzione

· In assenza di di IIS (Internet Information Server), il setup non può proseguire. Tutte le altre componenti software necessarie saranno installate dal setup.
· La versione di framework .NET supportata è la 2.0.

Prerequisiti aggiuntivi per l'installazione di openwork® sulle macchine con architettura a 64 bit

Per installare openwork® sulle macchine con architettura a 64 bit è necessario che la versione di ASP.NET 2.0 sia abilitata a 32 bit in IIS.

Procedura per abilitare ASP.NET 2.0 a 32 bit in IIS 6.0

attenzione

Attenzione

IIS 6.0 su macchine con architettura a 64 bit può lavorare o a 64 bit o in emulazione 32 bit; openwork® necessita della emulazione a 32 bit di IIS, per cui non è possibile che sullo stesso server web di openwork®, possa operare un applicazione web che necessita di IIS in versione 64 bit.

Durante l'installazione di openwork® su macchine con architettura a 64 bit, viene verificata la corretta installazione di ASP.NET 2.0 e la sua abilitazione a 32 bit in IIS.

Se ASP.NET 2.0 risulta non installato o non abilitato a 32 bit in IIS 6.0 la procedura di installazione provvede ad installare ASP.NET 2.0 e ad abilitarlo come necessario. In alternativa durante l'installazione viene visualizzato un messaggio specifico (cfr. Troubleshooting) che invita l'utente ad installare manualmente ASP.NET 2.0 ed abilitarlo a 32 bit in IIS, prima di proseguire con l'installazione di openwork®.

Procedura per abilitare ASP.NET 2.0 a 32 bit in IIS 7.0

IIS 7.0 su macchine con architettura a 64 bit consente di specificare per ogni singola applicazione installata la modalità di lavoro se a 64 bit o in emulazione a 32 bit; openwork® necessita della emulazione a 32 bit di IIS, per cui occorre specificare nel pool di applicazioni che per l'applicazione openwork® deve essere attiva la versione 32 bit. Per fare questo accedere ad IIS e modificare tramite la voce impostazioni avanzate le proprietà dell'applicazione openwork® come riportato in figura.

Setup24 - IIS7

Prerequisiti aggiuntivi per la ricerca all'interno dei documenti archiviati in openwork® da parte degli utenti.

Se la funzionalità fulltext del DBMS openwork® risulta attivata, sarà utilizzata dalla funzionalità di ricerca semplice all’interno dei documenti da parte degli utenti.

nota

Nota

La ricerca fulltext abilitata nel DBMS openwork® intercetta tutti gli errori provenienti dal server di database e fa in modo che non si presentino all’utente. Per questo motivo ricerche errate o non conformi all’engine in uso, avranno come risultato nessun elemento (in caso di errore del DBMS e fatta eccezione per alcuni casi particolari descritti di seguito).

Al fine di verificare la corretta abilitazione della funzionalità fulltext del DBMS openwork®, è possibile eseguire sul database delle semplici query che utilizzano il fulltext engine come descritto nelle tabelle che seguono.

Oracle
· Testare il funzionamento del fulltext engine (DB Admin)

Per verificare il corretto funzionamento della ricerca fulltext sul database openwork eseguire una query che faccia uso del fulltext query engine. Qualunque risultato diverso da un errore indica che il motore fulltext è in funzione e correttamente configurato sul database openwork.

Query esempio:
SELECT COUNT(*) FROM docindexing WHERE contains(doctext,'%test%')>0;

MSSQL2005
· Testare il funzionamento del fulltext engine (DB Admin)

In MSSQL 2005 il modulo per la ricerca fulltext va installato separatamente all’installazione base.
Occorre installare questo componente e verificare che il servizio “SQL Server FullText Search” (MSFTESQL) sia avviato. Per verificare il corretto funzionamento della ricerca fulltext sul database “openwork” eseguire una query che faccia uso del fulltext query engine. Qualunque risultato diverso da un errore indica che il motore fulltext è in funzione e correttamente configurato sul database openwork.

Query esempio:
SELECT COUNT(*) FROM docindexing WHERE contains(doctext, ' "*test*" ')

MSSQL2000
· Testare il funzionamento del fulltext engine (DB Admin)

In MSSQL 2000 il modulo per la ricerca fulltext va installato separatamente all’installazione base. Occorre installare questo componente e verificare che il servizio “SQL Server FullText Search” (MSSEARCH) sia avviato. Per verificare il corretto funzionamento della ricerca fulltext sul database “openwork” eseguire una query che faccia uso del fulltext query engine. Qualunque risultato diverso da un errore indica che il motore fulltext è in funzione e correttamente configurato sul database openwork.

Query esempio:

SELECT COUNT(*) FROM docindexing WHERE contains(doctext, ' "*test*" ')

In caso di errori durante la configurazione del database all’uso del motore full-text, abilitare il modulo fulltext manualmente come descritto nella sezione Troubleshooting.


Tipologia di installazione

Le principali tipologie d'installazione a disposizione sono:

· Server - Utilizzata per attivare una licenza distribuita ad un cliente finale oppure per una licenza NFR riservata ad un Business Partner. In questo caso è necessario definire da parte del produttore tutti i parametri della licenza, ossia numero di modelli di processo e di utenti, ed eventuali moduli aggiuntivi. Si dispone di due codici: codice installazione richiesto durante la procedura di setup e codice cliente utile per effettuare aggiornamenti alle nuove versioni o per attivazioni ASP o DEV.
· Demo - Utilizzata per attivare una licenza dimostrativa (valida 60 giorni a partire dalla data d'installazione). Di seguito sono riportati i requisiti della licenza:
o Intestazione Net Sistemi Srl (nodo padre dell'organigramma).
o Possibilità di disegnare al più 3 modelli di processo.
o Possibilità di inserire al più 200 documenti per ogni archivio (la licenza spira al raggiungimento della soglia su almeno uno degli archivi).
o Limite di due accessi concorrenti, oltre alla sessione BPMTools.
o Installazione di una versione di libreria esterna all'ambiente COM+.
o Possibilità di supportare DB Microsoft Access.

Per l'attivazione è necessario il codice cliente.

Di seguito l'elenco delle attivazioni che è possibile effettuare solo dopo aver installato openwork® in modalità Server e/o Demo:

· Server ASP - Un Server ASP può essere attivato solo partendo da un'installazione Server e permette di ospitare N configurazioni indipendenti (per installare ciascuna delle quali occorre un codice installazione) erogabili con un modello del tipo Application Service Provider. Per attivare da un'installazione Server in un'installazione Server ASP, è necessario essere in possesso di un codice installazione rilasciato dal produttore.
· Server ASP DEV - Può essere attivata sia su una installazione Server, sia su una installazione Demo. Un Server ASP DEV permette di creare, lasciando inalterata la prima configurazione, altre N configurazioni indipendenti l'una dall'altra, ciascuna limitata nel numero di accessi concorrenti (2) e nel numero di documenti da inserire (200). Un'installazione ASP DEV non ha scadenza e può essere utilizzata per lo sviluppo o per la predisposizione di postazioni dimostrative con diverse applicazioni installate. É sufficiente essere in possesso del codice cliente previa autorizzazione da parte del produttore.
· Server ASP WTE - (Tipologia di installazione OBSOLETA e NON CONSIGLIATA) Attiva su un server openwork® una configurazione parallela con le stesse caratteristiche di quella principale. Viene utilizzata per affiancare un ambiente di test all'ambiente in produzione, per esercitazioni, formazione, sviluppo. É sufficiente essere in possesso del codice cliente previa autorizzazione da parte del produttore.

Setup15 - installationOpenwork


Installazione componenti e librerie

Prima di iniziare:

· Si consiglia di eseguire il SETUP di openwork® effettuando login sulla macchina con l'utente Administrator (o comunque con un utente appartenente al gruppo degli Administrators).

attenzione

Attenzione

Qualora si desidera installare openwork® su sistema operativo Windows 2008 Server o Vista, causa User Account Control (UAC) di Windows, si consiglia di:

1. Creare l'utente openwork con password netsistemi prima dell'installazione ed aggiungerlo al gruppo degli utenti Administrators.

2. Eseguire il setup di openwork® effettuando il login sulla macchina con l'utente Administrator.

Inoltre è sconsigliato procedere ad una installazione openwork® via rete, in quanto – per questioni di protezione di rete – su alcuni sistemi non potrebbero funzionare alcune componenti.

attenzione

Attenzione

Qualora si stia installando openwork® su un sistema operativo la cui lingua è diversa dall'italiano, creare manualmente l'utente openwork® di Windows includendolo nel gruppo degli Amministratori.

Definire una password (si consiglia di utilizzare la password di default netsistemi), selezionare le proprietà Nessun cambiamento password e Nessuna scadenza password, deselezionare l'opzione Cambiamento password al prossimo accesso. Quindi disconnettersi (Logout).

Fare Login nel server Windows con l'utente openwork (e relativa password), e impostare come linguaggio Italian (Control Panel -> Regional Options Location e Set Default). Affinché le modifiche siano valide, disconnettersi e rieffettuare il login con l'utente openwork e lanciare il setup.

nota

Nota

La procedura di setup è sempre in grado di riavviarsi dal punto in cui è stata interrotta: è dunque possibile uscire in qualsiasi momento dalla procedura e riprenderla in seguito.

attenzione

Attenzione

La procedura descritta va utilizzata anche nel caso in cui si stia attivando un Server ASP o un Server ASP DEV. Queste modalità possono essere abilitate soltanto dopo aver realizzato una prima attivazione e in particolare:

· un Server ASP può essere attivato solo dopo un'attivazione Server.
· un Server ASP DEV può essere attivato solo dopo un'attivazione Demo o Server.

Avviando il setup, viene visualizzata un'opportuna maschera per la selezione della lingua.

Setup01 - Language

Selezionata una lingua, viene rilevato il sistema operativo. Premere >> per proseguire.

Setup02 - Start

Il setup verifica la presenza delle componenti necessarie, garantendo la corretta installazione delle stesse e consentendo di selezionare la lingua nella quale effettuare l'installazione.

Setup03 - Components

Terminata la fase di verifica/installazione delle componenti propedeutiche al corretto funzionamento della piattaforma, il setup procede all'installazione delle proprie componenti.

Il setup mostra una finestra che consente di selezionare la tipologia d'installazione - Demo o Server - da installare sul sistema (cfr. Tipologia di installazione).

Setup21 - DemoServerXP

Successivamente prosegue con la selezione del percorso d'installazione; per evitare problemi di autorizzazioni e/o visibilità delle risorse, si consiglia di lasciare invariato il percorso di default.

Qualora venga selezionata la tipologia Server, è necessario specificare l'utente che avvierà sia i servizi, sia i componenti. Se l'utente esiste, verificarne la correttezza della password. In caso contrario, il setup provvederà a creare l'utente automaticamente (si consiglia di lasciare invariate le impostazioni di default). È possibile inserire un utente locale (default) oppure un utente di dominio. Nel caso di utente di dominio selezionare la voce Account Remoto e digitare la path completa dell'account (es. [dominio]\[username]).

attenzione

Attenzione

· E' importante che si utilizzi un utente dedicato alla piattaforma per evitare che altri sistemi e/o modifiche possano influenzarne il corretto funzionamento.
· Affinché la procedura abbia esito positivo, è necessario che l'utente abbia i permessi per l'utilizzo degli oggetti COM relativi alle tipologie di documenti utilizzate (es. Microsoft Word, Microsoft Excel). Se viene restituito un messaggio di errore del tipo L'applicazione non può creare la libreria di oggetti openwork®, si consiglia di arrestare il servizio di Pubblicazione su WWW e creare manualmente l'utente openwork®.

Setup04 - Libraries

Al termine di questa fase, il setup prosegue con l'installazione dei Web Services e Web Server.


Installazione Web Services e Web Server

Per eseguire l'installazione dei Web Services è necessario indicare i parametri per consentire la creazione della directory virtuale:

· Percorso in cui salvare fisicamente i file e le risorse necessarie.
· Directory virtuale da creare e per mezzo della quale pubblicare i servizi di openwork®.
· Sito su cui installare. Questa opzione è valida solo per sistemi che utilizzano IIS6.

Si consiglia di lasciare invariate le impostazioni di default; in tal caso i Web Services saranno raggiungibili attraverso l'URL: http://[nome server]/wsopenwork.

Setup05 - WebServices

attenzione

Attenzione

Se la combo che permette di impostare il sito Web in cui creare la directory virtuale risulta vuota (ovvero non compare l'opzione di default "Default Web Site" ), l'utente con il quale si sta effettuando l'intallazione non possiede tutti i diritti necessari a causa del modulo di protezione User Account Control (UAC) di Windows. Interrompere l'installazione e riavviaare nuovamente il setup autenticandosi sul erver con l'utente Administrator.

Ciascuna applicazione web è costituita anche da un web server, un database, un repository documentale e una cartella di file temporanei. Il programma di setup, per entrambe le tipologie di installazione (Demo e Server) predispone ad installare un'unica applicazione web, preparando però una struttura pronta ad ospitare più applicazioni in vista di possibili attivazioni ASP o ASP DEV.

La successiva fase prevede l'installazione del Web Server; anche in questo caso è necessario specificare gli opportuni parametri per consentire la creazione dell'apposita directory virtuale. Si consiglia di lasciare le opzioni di default invariate, a meno della directory virtuale che sarebbe opportuno impostare con l'identificativo dell'azienda a cui è intestata la licenza (evitando l'uso di spazi e di caratteri speciali). La piattaforma sarà quindi raggiungibile attraverso l'URL http://[nome server]/[directory virtuale].

Setup06 - WebServer

Al termine di questa fase, il setup prosegue con l'installazione del database e del repository.


Installazione Database

Come primo passo dell'installazione del database è necessario scegliere la tipologia di DBMS che si vuole utilizzare tra le opzioni:

· Microsoft SQL Server (cfr. Installazione Database Microsoft SQL Server);
· Oracle (cfr. Installazione Database Oracle);
· Microsoft Access, consigliato solo per versioni dimostrative (cfr. Installazione Database Microsoft Access).

Segue per ogni tipologia di DBMS disponibile il dettaglio della sua configurazione.


Installazione Database Microsoft SQL Server

Nel caso la tipologia di DBMS corrisponde a Microsoft SQL Server viene proposta la seguente schermata:

Setup07 - Database

E' possibile scegliere tra le seguenti opzioni:

· Popola database esistente
· Usa database esistente
· Nuovo Database

Se il database esiste, scegliere l'opzione Popola database esistente e fornire username e password dell'owner del database per il DBMS. In questo caso il database deve necessariamente essere già vuoto prima dell'installazione. A tal proposito è possibile eseguire una procedura manuale di creazione del database e successivamente popolare il database creato. I parametri di configurazione del database Microsoft SQL Server vuoto vanno impostati come in tabella:

Parametro | Valore
Server | Locale o remoto
Database Name | Definito dall’amministatore
User | Definito dall’amministatore
Schema | dbo
Password | Definito dall’amministatore
User Grant | Db_owner

Inoltre tra le proprietà del database appena creato è consigliato scegliere la regola di confronto di tipo Latin1_General_CI.

Se, invece, si vuole collegare un database già utilizzato in precedenti configurazioni di openwork® (solo nel caso in cui provenga da una stessa versione di openwork®)o si vuole creare il database in precedenza via script (reperibili nel pacchetto di setup openwork® cartella data\mssql.zip) scegliere l'opzione usa database esistente.

La procedura di Setup consente di impostare il nome del server SQL e di scegliere il nome del database (impostazione predefinita è openwork). Specificare il nome del server SQL come:

<nome macchina server SQL>\<nome istanza> (ad esempio saturno\DBINSTANCE).

attenzione

Attenzione

Nel caso specifico in cui si è scelto di utilizzare SQL Server 2005 Express l'istanza denominata di default, creata durante l'installazione dello stesso, prende il nome di SQLEXPRESS. Per utilizzare questa istanza in openwork® è necessario, durante l'installazione DB di openwork®, assegnare come nome del server SQL il valore dell'istanza denominata creata da SQL Server 2005 Express <nome macchina server SQL> \SQLEXPRESS (ad esempio saturno\SQLEXPRESS).

In assenza di un ambiente Microsoft SQLServer sul server in cui si sta effettuando l'installazione, è possibile:

· Accedere ad un SQL Server disponibile su un'altra macchina server.
· Installare Microsoft SQL Server.
· (solo per versioni demo) Installare MSDE.
· (solo per versioni demo) Installare SQL Server 2005 Express Edition (opzione consigliata)

nota

Nota

· Durante l'installazione di SQL Server 2005 Express Edition è consigliato scegliere le seguenti opzioni:

- Nome istanza avvalorato come Istanza predefinita;

- Account Servizio avvalorato come Usa l'account di sistema predefinito;

- Modalità di autenticazione avvalorato come Modalità Mista.

· Microsoft SQLServer 2000 Desktop Engine (MSDE 2000) e SQL Server 2005 Express Edition sono motori di database distribuiti gratuitamente da Microsoft. Per le installazioni demo di openwork® oppure con minime esigenze di scalabilità, SQL Server 2005 Express Edition appare la soluzione più vantaggiosa. Leggere attentamente l'accordo di licenza Microsoft per l'utilizzo di MSDE 2000 e SQL Express. Il produttore non garantisce le prestazioni della piattaforma openwork® nel caso di utilizzo di MSDE 2000 e SQL Express.

attenzione

Attenzione

A differenza di Microsoft SQL Server, MSDE 2000 non è dotato di un tool di amministrazione: per poter procedere con le necessarie operazioni di gestione del database (non necessarie in fase di setup), occorre procurarsi una versione licenziata dello strumento di amministrazione Microsoft o in alternativa utilizzare lo strumento freeware DbaMgr2k, disponibile all'indirizzo:http://www.asql.biz/it/Download.aspx

Qualora si scelga di procedere con la creazione di un Nuovo Database, si consiglia di:

· Avvalorare opportunamente il parametro nome del server SQL (come descritto prima);
· lasciare inalterate l'impostazioni di default nome del database, Utente e Password (nel caso in cui per necessità si scelga di modificare tali parametri di configurazione evitare di inserire spazi e caratteri speciali).

A questo punto viene richiesto il nome utente e la password da assegnare all'utente Amministratore del database che si sta creando. Nel caso in cui questi non coincida con quello di default (utente: sa password: netsistemi) sarà l'utente amministratore specificato a creare – in automatico – il database.

Setup20 - DBAuthentication

Il setup provvede a creare il database come indicato nella maschera Installazione DB .


Installazione Database Oracle

Nel caso di DBMS Oracle è possibile scegliere tra le seguenti opzioni:

· Popola database esistente
· Usa database esistente

openwork®, come già detto, può lavorare con database di tipo Microsoft Access, Microsoft SQL Server e Oracle. La connessione a questi DB avviene per mezzo di OLEDB. Nel caso di Oracle è possibile connettersi al database in due modalità:

· specificando i parametri per connettersi al database Oracle, senza l'ausilio del tnsnames (opzione di default)

Setup08 - OracleNoTNS

I parametri necessari sono:

- Host: Nome o indirizzo IP dell’host che eroga il servizio e ospita il database Oracle;

- Service: Nome del servizio Oracle a cui connettersi;

- Port: numero della porta su cui il servizio viene erogato dall’Host (default 1521).

- Utente: nome utente con il quale openwork® si autentica al database;

- Password: password dell'utente su definito;

· tramite tnsnames, per scegliere questa opzione occorre selezionare il campo Usa tnsnames come mostrato in figura

Setup22 - OraclleTNS

In questo caso i parametri necessari sono:

- Nome del database Oracle: Nome del database Oracle (SID);

- Utente: nome utente con il quale openwork® si autentica al database;

- Password: password dell'utente su definito.

attenzione

Attenzione

Nel caso di DBMS Oracle è necessario installare preventivamente il Client di Oracle. La tipologia d'installazione consigliata è Amministratore in quanto comprende tutte le componenti di Oracle installabili. Se invece si effettua una tipologia diversa d'installazione, è necessario che venga installato anche il componente Oracle Windows Interface. Nel caso la connessione debba avvenire tramite tnsnames è necessario configurare i protocolli di rete di Oracle (listener, TNSnames, etc.). Per verificare la corretta connessione al database, testare la connessione ad esempio tramite SQL*PLUS.

L'opzione Nuovo Database non è valida nel caso di Oracle. E' necessario creare in precedenza il database e l'utente e successivamente scegliere l'opzione popola database esistente.

Nel caso in cui si voglia lasciar costruire la struttura della base dati (tabelle, viste etc.) al setup di openwork®, si può procedere direttamente tenendo cura di NON selezionare l'opzione Solo dati. In caso contrario è possibile creare la struttura prima dell'esecuzione del setup (pacchetto di setup openwork® cartella data\oracle.zip file openwork.sql) e scegliere l'opzione popola database esistente selezionando la voce Solo dati. Il setup provvederà ad inserire i dati necessari per il funzionamento di openwork®.

Setup23 - OracleTNSDati

I parametri di configurazione di un nuovo database Oracle vuoto vanno impostati come in tabella:

Parametro | Valore
TableSpace | Default utente
SID | Definito dall’amministatore
User | Definito dall’amministatore
Schema | Definito dall’amministatore
Password | Definito dall’amministatore
User Grant | SELECT, INSERT, DELETE, DROP, CREATE, ALTER Su tutti gli oggetti user e sulla session.

approfondimento

Approfondimento

Per le configurazioni con database Oracle è presente una opzione per aggiungere l'hint ALL_ROWS alle query che contengono una condizione WHERE e una paginazione con ROWNUM; questo serve ad aggirare alcune inefficienze dell'ottimizzatore di Oracle che in presenza di una condizione con ROWNUM può scegliere un piano di esecuzione non ottimale.
Per attivare questa opzione è necessario inserire il seguente tag nel file di configurazione openwork.xml (con effetto solo in presenza di database Oracle):

<installazione>
...
<tipodb>ORACLE</tipodb>
<database>
<allrowshint>1</allrowshint>
...
</database>
</installazione>


Installazione Database Microsoft Access

E' consigliato utilizzare Microsoft Access come DBMS solo per configurazioni puramente dimostrative. Nel caso di DBMS Access è possibile scegliere tra le seguenti opzioni:

· Nuovo Database
· Usa database esistente

La procedura consente di scegliere solo la directory contenente il database stesso o di selezionare il percorso in cui installare il file.

Setup09 - Access


Installazione Repository

A seguito della corretta installazione del database, la procedura di setup prosegue con l'installazione del repository dei documenti (file allegati alle form). Al fine di minimizzare l'occupazione di spazio su disco, si consiglia di utilizzare la compressione zip del repository.

Setup10 - Repository

attenzione

Attenzione

Il funzionamento delle ricerche testuali full-text per gli allegati di openwork®, in caso di scelta di repository con compressione di tipo zip, richiede necessariamente l'installazione di un apposito componente software, cioè I-Filter Zip. Per informazioni consultare http://www.4-share.com/Content/Products.htm.


Attivazione

L'attivazione della licenza richiede il codice attivazione.

Setup11 - Activation

attenzione

Attenzione

Ricordiamo che il codice attivazione è il codice cliente nel caso di installazione Demo. Nel caso di installazione Server invece il codice attivazione è il codice installazione.

Anche se la procedura è stata precedentemente interrotta, è possibile inserire il codice di attivazione riavviando il setup oppure utilizzando il Server Manager, che, nel tab Generale, dispone del pulsante Attiva.

Setup12 - serverManagerActivation

L'attivazione può avvenire nelle seguenti modalità:

· Attivazione on-line - L'attivazione avviene automaticamente inserendo l'apposito codice, purché si disponga di un accesso ad Internet dalla macchina sulla quale si sta procedendo con l'installazione.
· Attivazione Manuale - Se non si dispone di una connessione ad Internet, è possibile procedere come segue:
o Inserire il codice attivazione (codice cliente o installazione) di 8 caratteri ricevuto dal produttore.
o Scegliendo Attivazione Manuale viene restituita una stringa di 20 caratteri (Chiave).
o Da un PC che dispone di connessione, accedere alla pagina http://www.openworkbpm.com/owkactivation.
o Inserire il codice di 20 cifre precedentemente ottenuto nella casella Chiave di Attivazione e scegliere Verifica.
o Verranno mostrati i dati di licenza e, se corretti, scegliere Procedi.
o Prelevare il file contenente i dati di licenza attraverso il tasto Download.
o Trasferire il file ottenuto sul sistema su cui si deve attivare openwork® e attraverso il tasto Seleziona, caricare il file e scegliere Attiva.

Setup13 - online

Ad attivazione effettuata, si ottiene un riepilogo delle caratteristiche della licenza openwork® acquistata (oppure dimostrativa) e delle condizioni di licenza d'uso contenute nel documento cartaceo di licenza; infine viene proposto l'avvio del servizio IIS e del servizio openwork® Manager.


Il primo accesso

Per verificare il corretto funzionamento dell'applicazione a seguito della procedura di setup, è consigliato effettuare l'accesso ad openwork® dal browser attraverso Microsoft Internet Explorer 6.0 Service Pack 1 (o superiore), oppure attraverso il programma di amministrazione openwork® BPM Tools.

E' buona norma accedere all'applicazione Web da macchine diverse da quella su cui si è effettuata l'installazione di openwork®, al fine di evitare l'installazione di componenti client su un sistema Server.

Per effettuare l'accesso, utilizzare l'account di default Amministratore con password ns.

attenzione

Attenzione

Verificare che l'impostazione del browser sulle versione più recenti NON sia impostata a MAI, poichè tale impostazione potrebbe compromettere il corretto funzionamento di openwork® (Strumenti -> Opzioni Internet -> Generale -> Impostazioni -> Ricerca versioni più recenti delle pagine memorizzate).

Al primo accesso in assoluto, si presentano alcune richieste di installazione automatica di plug-in (ad es. Scanview per la gestione dello scanner e delle immagini allegate a documenti, plug-in freeware di Adobe SVG Viewer per la visualizzazione sul web delle istanze di processo, etc) alle quali occorre obbligatoriamente acconsentire scegliendo Si oppure Installa. L'eventuale avviso di protezione di Internet Explorer (autore sconosciuto oppure componente dichiarato non attendibile) non rappresenta motivo di sospensione dell'installazione.

Tali componenti software possono essere direttamente scaricate dal server oppure direttamente da Internet. Dopo l'installazione potrebbe essere richiesto il riavvio del client.


Troubleshooting

Di seguito sono riportate alcune delle possibili situazioni che possono verificarsi a seguito dell'installazione e le loro possibili modalità risolutive. L'elenco si intende esemplificativo e non esaustivo, in quanto la complessità dell'applicazione openwork® è tale da impattare sull'ambiente server a vari livelli.

Problema: IIS non rilevato

Sintomo:

Durante l'installazione, il setup non rileva la presenza di IIS anche se correttamente installato.

Soluzione:

La causa potrebbe essere la disattivazione del sito web di default, in quanto il setup rileva IIS basandosi su esso. In tal caso attivare il Default Web Site da Strumenti di Amministrazione -> Gestione Internet Information Services (IIS) e ritentare.

Problema: Errore "Server not found"

Sintomo:

Al primo accesso ad openwork®, nonostante IIS sia correttamente avviato, vengono restituiti errori di protezione nel browser IE6 e il messaggio "server not found" nel BPM Tools.

Soluzione:

Controllare le impostazioni di sicurezza sulla cartella di installazione di openwork®. Se non presente, aggiungere l'utente Everyone con autorizzazione Full Control. Inoltre verificare che i popop e gli script non siano bloccati. È consigliabile disabilitare eventuali antivirus/firewall/spyware al momento del primo accesso ad openwork®, quindi dopo aver verificato il corretto funzionamento dell'applicazione, riabilitarli "istruendoli" adeguatamente a riconoscere openwork® come applicazione sicura. In fase di setup o successivamente nel Server Manager nella sezione Web Services, non utilizzare localhost ma il nome della macchina o il suo indirizzo IP.

Problema: Errore sulla libreria

Sintomo:

Dopo aver installato openwork®, al primo accesso tramite IE6, viene restituito un errore sulla libreria.

Soluzione:

Verificare le impostazioni delle cartelle <Directory di Windows>\temp (esempio "C:\WINDOWS\temp") e <Directory di Windows>\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files (esempio "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files") : aggiungere, se non è presente, l'utente Everyone con autorizzazione Full Control.

Problema: Errore "Impossibile connettersi al database. ERRORE 3706 - Impossibile trovare il provider E' possibile che non sia installato correttamente"

Sintomo:

Durante la procedura d'installazione, in particolare durante l'installazione del database Oracle, si verifica il seguente errore: 'Impossibile connettersi al database. ERRORE 3706 - Impossibile trovare il provider E' possibile che non sia installato correttamente'.

Soluzione:

Occorre verificare che l'installazione del componente Oracle Windows Interface del client Oracle sia correttamente installato.

Problema: Servizio "openwork Manager" o "openwork Job Engine" assente

Sintomo:

Nonostante l'installazione sia terminata con successo, il servizio "openwork® Manager" e/o il servizio "Job Engine" non viene mostrato nella lista dei servizi di Windows.

Soluzione:

Chiudere la finestra dei servizi ed installare manualmente il servizio:

1. Aprire il prompt dei comandi;
2. Posizionarsi sulla directory <Directory di Windows>\Microsoft.NET\Framework\v2.0.50727
3. Lanciare il comando: installutil <Root di openwork>\lib\openworkman.exe (esempio installutil C:\openwork\lib\openworkman.exe;
4. Aprire la finestra dei servizi e verificare che il nome del servizio sia presente in elenco;
5. Aprire il dettaglio del servizio;
6. Selezionare come tipo di avvio il valore Automatico;
7. (Solo nel caso di installazione server) Selezionare il tag Connessione e modificare le credenziali dell'utente di accesso (default: openwork/netsistemi).

Per il servizio Job Engine al punto 3 utilizzare al posto di openworkman.exe, l'eseguibile jobengine.exe

Problema: Errore "Cannot create Activex component"

Sintomo:

Dopo l'operazione di login dal client di openwork®, viene restituito il messaggio: "Cannot create Activex component".

Soluzione:

Verificare che le autorizzazioni della chiave HKEY_CLASSES_ROOT, nel registro di sistema, risultano impostate come segue:

Administrators : Controllo completo

CREATE OWNER : Nessuna impostazione

Everyone: Sola lettura

Power users : Sola lettura

SYSTEM : Controllo completo

Users : Sola lettura

Problema: Errore "Errore 0x8ffe2740 su riavvio di IIS"

Sintomo:

Si verifica il seguente errore sul sito predefinito di IIS: 'Errore 0x8ffe2740 su riavvio di IIS'.

Soluzione:

Il problema potrebbe riguardare un conflitto sulla porta TCP 80 utilizzata dal sito predefinito e da altri programmi, quali Google Desktop e Skype. E' sufficiente stoppare entrambi i software e riavviare il servizio Amministrazione IIS.

Problema: Messaggio "Il servizio openwork® Job Engine non è stato correttamente installato. Si vuole comunque proseguire?"

Sintomo:

Durante la procedura d'installazione, precisamente durante l'installazione dell'Engine, viene restituito il seguente messaggio: "Il servizio openwork® Job Engine non è stato correttamente installato. Si vuole comunque proseguire?"

Soluzione:

Si consiglia di procedere con l'installazione ed in seguito effettuare la verifica ed il workaround idoneo allo stato del servizio dopo la verifica.

Per verificare lo stato del Job Engine, selezionare il servizio openwork® Job Engine utilizzando l'apposita interfaccia del sistema operativo (Pannello di Controllo->Strumenti di Amministrazione->Servizi).

Nel caso in cui il servizio non sia presente nell'elenco seguire i passi della Azione1, in caso contrario passare direttamente all'Azione 2.

Azione 1: Chiudere la finestra dei servizi. Aprire la finestra del prompt di Windows, posizionarsi nella directory delle Utility del Framwork .NET 2.0 e digitare i seguenti comandi:

· cd \WINDOWS oppure cd \WINNT in base al Sistema Operativo
· cd Microsoft.NET\Framework\v2.0.50727

Lanciare il commando Installutil.exe C:\openwork\lib\JobEngine.exe (dove C:\openwork è la root di installazione di openwork®, nel caso di root differente sostituire questo con il percorso corretto). A questo punto rieseguire i passi della verifica.

Azione 2: Fare click sul tasto destro del mouse, selezionare la voce Proprietà: verificare che l'avvio sia impostato a Manuale. Solo nel caso di versione Server: selezionare il tag Connessione e nel caso in cui sia ancora selezionata la voce Account di di sistema locale, selezionare Account ed impostare, per mezzo dell'apposito tasto Sfoglia, l'account con cui si voleva installare il sistema e la relativa password digitata due volte per conferma.

Le azioni descritte valgono per l'openwork® Manager a meno del tipo di avvio che va impostato ad Automatico.

Problema: Problemi accesso da browser

Sintomo:

Possibili problemi riguardo l'accesso da browser.

Soluzione:

Effettuare le seguenti verifiche:

· verificare che il sistema operativo sia uno di quelli indicati nei prerequisiti
· verificare che la versione di Internet Explorer in uso sia almeno la 6.0 SP1 o superiore
· controllare che le impostazioni del browser diano la possibilità di eseguire script ed invocare oggetti Activex;

- in Explorer andare nella barra menu in Strumenti -> Opzioni internet;

- nella sezione Controlli e plug-in ActiveX, impostare su Attiva tutte le sottosezioni tranne la sottosezione Scarica controlli ActiveX senza firma elettronica” che va impostata su Chiedi conferma;

- nella sezione Varie ed impostare su Attiva le sottosezioni Avvio di programmi e file in un IFRAME e Visualizza contenuto misto.

Problema: Errori VBscript e Javascript

Sintomo:

Nonostante l'installazione sia avvenuta correttamente, si rilevano degli errori quando si eseguono VBscript e Javascript.

Soluzione:

Verificare la presenza dell'antivirus McAfee: il componente Scriptblocking dell'antivirus installa un proxy per l'esecuzione degli script VBscript e Javascript, che intercetta ogni script, lo setaccia e poi lo passa allo scripting engine di Windows: questa modalità crea dei problemi agli script di openwork®. Si suggerisce, quindi, di deregistrare a mano il componente proxy Scriptblocking (regsvr32 /u scriptproxy.dll) dopo averlo disattivato o disinstallare solo questo componente.

Problema: Errore "Impossibile trovare il provider. E' possibile che non sia installato correttamente (2)".

Sintomo:

Si verifica il seguente errore durante l'accesso: 'Impossibile trovare il provider. E' possibile che non sia installato correttamente (2)'.

Soluzione:

L'errore è causato dal tipo di autorizzazioni. Si verifica principalmente su:

· installazioni openwork® con libreria DEMO poichè non viene creato/utilizzato l'utente Windows openwork® (avente diritti di amministrazione);
· installazioni openwork® in ambienti con infrastruttura di rete complessa (ad es. Active Directory).

Consultare l'articolo di Knowledge Base di Microsoft n.255084 (http://support.microsoft.com/kb/255084/it), in particolare la soluzione 10.

Problema: Errore "Impossibile visualizzare la pagina XML "

Sintomo:

Si verifica il seguente errore durante l'accesso lato client ad openwork®:

"Impossibile visualizzare la pagina XML "

"Impossibile visualizzare l'input XML tramite il foglio di stile XSL. Correggere l'errore, quindi fare clic su Aggiorna, oppure riprovare in un momento successivo."

Soluzione:

Potrebbero non risultare registrate le directory virtuali su ASP.NET 2.0. Per registrare le directory virtuali su ASP.NET 2.0 occorre:

1. Da strumenti di amministrazione aprire la console di amministrazione di IIS;
2. Selezionare la directory virtuale, cliccare col tasto destro e scegliere la voce Proprietà;
3. Selezionare il tab ASP.NET, scegliere come ASP.NET version la voce 2.0.50727 e cliccare su Applica.

Nel caso in cui non esista il tab ASP.NET o manca la voce 2.0.50727, ASP.NET 2.0 deve essere installato (vedi la voce Errore "server nell'applicazione '/openwork'.") .

Problema: Errore "Server nell' applicazione '/openwork'."

Sintomo:

Si verifica il seguente errore .NET 1.1 durante l'accesso lato client ad openwork®:

"Errore durante la compilazione di una risorsa necessaria per soddisfare la richiesta. Rivedere i dettagli relativi all'errore e modificare in modo appropriato il codice sorgente."

Oppure sono visualizzati solo i contenuti html della pagina di default di accesso ad openwork®.

Soluzione:

Sulla macchina potrebbe non essere installato ASP.NET 2.0. Procedere nel seguente modo:

1. Aprire il prompt dei comandi;
2. Posizionarsi sulla directory <Directory di Windows>\Microsoft.NET\Framework\v2.0.50727
3. Lanciare il comando aspnet_regiis -i
4. Eseguire i passi descritti nella soluzione del problema Errore "Impossibile visualizzare la pagina XML "

Nel caso in cui la directory <Directory di Windows>\Microsoft.NET\Framework\v2.0.50727 non esista occorre installare il Framework .NET 2.0

Problema: Installazione di openwork® su macchine con architettura a 64 bit. Errore all'apertura della pagina web: "Service Unavailable".

Sintomo:

Al termine dell'installazione di openwork® su una macchina con architettura a 64 bit, si verifica il seguente errore all'apertura di una pagina web: "Service Unavailable".

Soluzione:

Sulle macchine con architettura a 64 bit è necessario abilitare la versione di ASP.NET 2.0 a 32 bit in IIS 6.0. (cfr. Prerequisiti). Per abilitare manualmente la versione di ASP.NET 2.0 a 32 bit in IIS 6.0 seguire quanto riportato nell'articolo Microsoft http://support.microsoft.com/?scid=kb;en-us;894435

Problema: Errore "Si è verificato un errore. (0) Nessun valore specificato per alcuni parametri necessari"

Sintomo:

Al termine dell'upgrade di openwork®, durante l'apertura di elenchi custom tramite browser, viene restituita una pagina web di errore "Si è verificato un errore. (0) Nessun valore specificato per alcuni parametri necessari".

Soluzione:

La causa dell'errore potrebbe essere legata alla compatibilità tra versioni differenti di openwork®. Può accadere che, effettuando l'upgrade di openwork® da una vecchia versione ad una più recente, alcuni parametri necessari all'apertura di un elenco custom siano stati eliminati o modificati. Per cui è necessario aggiornare tutte le eventuali personalizzazioni create dall'utente (come ad esempio le viste custom, le ricerche custom, gli elenchi custom etc.) seguendo le indicazioni riportate nelle note di rilascio della versione più recente di openwork® installata tramite upgrade .

Problema: Messaggio "Il Sistema non è stato in grado di installare ASPNET. IIS non è in grado di interpretare le pagine aspx con il framework 2.0.Si consiglia di uscire dalla procedura ed installare ASPNET manualmente prima di proseguire."

Sintomo:

Durante l'installazione di openwork® su macchine con architettura a 64 bit, non è possibile completare correttamente la procedure di setup.

Soluzione:

Sulle macchine con architettura a 64 bit è necessario abilitare la versione di ASP.NET 2.0 a 32 bit in IIS 6.0. (cfr. Prerequisiti). Per abilitare manualmente la versione di ASP.NET 2.0 a 32 bit in IIS 6.0 seguire quanto riportato nell'articolo Microsoft http://support.microsoft.com/?scid=kb;en-us;894435

Problema: Errore "Error: 'commonmessage155' is undefined"

Sintomo:

Dopo l'operazione di login dal client di openwork®, viene restituito il messaggio di errore: "Error: 'commonmessage155' is undefined"

Soluzione:

L'errore si ottiene quando si richiede un file ad un server Web di IIS e il file ha un'estensione che non è un tipo MIME definito sul server Web. Per risolverlo occorre definire un tipo MIME per tutte le estensioni esistenti attenendosi alla seguente procedura:

1. Accedere a IIS:
2. Selezionare la direcotry virtuale della configurazione di openwork® di proprio interesse, cliccare con il tasto destro

del mouse e scegliere la voce Proprietà;

3. Selezionare il tab Intestazioni HTTP e cliccare sul pulsante Tipi di file;
4. Cliccare su Nuovo tipo e avvalorare i parametri richiesti come segue:

Estensione associata: .*

Contenuto (MIME): application octet-stream

5. Confermare le operazioni effettuate con il tasto Ok e chiudere IIS.

Abilitazione del modulo Full Text su database openwork (procedura manuale)

In caso di errori durante la configurazione del database all’uso del motore full-text, eseguire le seguenti query con lo USER owner del database di openwork. In caso di errori verificare l’esistenza dei componenti creati, ed eventualmente rimuoverli prima di rieseguire le query che seguono.

Oracle 9

CREATE INDEX FT_DOCINDEXING_1 ON DOCINDEXING(doctext) INDEXTYPE IS CTXSYS.CONTEXT

Oracle 10 (o superiore)

CREATE INDEX FT_DOCINDEXING_1 ON DOCINDEXING(doctext) INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS ('sync (on commit)')

MSSQL 2000/2005

In MSSQL il modulo per la ricerca fulltext va installato separatamente all’installazione base. Occorre installare questo componente e verificare che il servizio sia avviato, per verificare che il servizio fulltext sia installato utilizzare la query:

SELECT fulltextserviceproperty('IsFulltextInstalled')

I risultati possibili sono:

0 – Motore fulltext NON installato

1 – Motore fulltext installato

Eseguire le seguenti stored procedure, una dopo l’altra:

1. EXEC sp_fulltext_database 'enable'
2. EXEC sp_fulltext_catalog 'owk_ft_cat', 'Create'
3. EXEC sp_fulltext_table 'docindexing', 'Create', 'owk_ft_cat', 'pk_docindexing'
4. EXEC sp_fulltext_column 'docindexing', 'doctext', 'add'


Gestione di un server openwork®

Il Server Manager rappresenta l'utility per la configurazione e l'impostazione dei parametri di un server openwork® e permette di amministrare, consultare e manutenere le installazioni di openwork® sul server. L'accesso al Server Manager avviene attraverso il menù di Windows: Start -> Programmi -> openwork -> Server Manager.

All'avvio appare la finestra di benvenuto e, attraverso il pulsante Accedi, è possibile consultare le sezioni per gestire le diverse configurazioni. In particolare, le informazioni sono sono suddivise tra i tab Generale, Installazioni e openwork® Manager.


La sezione Generale

La sezione Generale consente di:

· conoscere informazioni generali sul tipo di sistema installato;
· effettuare attivazioni di tipo ASP, ASP DEV;
· manutenere la posizione dei Web Services;
· impostare la lingua di default del sistema openwork®.

SM01 - GeneralTab

Il riquadro Sistema riepiloga le informazioni relative all'installazione: tipologia di Server, versione e intestatario della licenza d'uso. Qualora il server di openwork® non sia ancora stato attivato, tali informazioni non sono presenti e compare il tasto per l'attivazione della licenza (cfr. Attivazione di openwork®).

I pulsanti consentono di effettuare le seguenti operazioni:

· Attiva ASP - Permette di effettuare un'attivazione di tipo ASP a partire da una installazione server. Il tasto è sempre visibile, ma abilitato solo nel caso in cui sia installata una server.
· Attiva ASPDEV - Permette di effettuare un'attivazione di tipo ASPDEV a partire da una installazione server o demo. Il tasto è sempre visibile, ma risulta abilitato solo nel caso di installazione server o installazione demo.
· Attiva WTE - (Tipologia di installazione OBSOLETA e NON CONSIGLIATA) Permette di effettuare un'attivazione di tipo WTE. Attivazione e abilitazione dei tasti avvengono con le stesse modalità e negli stessi casi della versione WTE.
· Disinstalla - Consente la disinstallazione di openwork®. La disinstallazione è possibile solo se è sia presente al più una configurazione. Per disinstallare una versione multiconfigurazione consultare la sezione Disinstallazione di openwork®.

Il riquadro Web Services mostra le seguenti informazioni:

· Percorso Web services - Indica il percorso fisico sul disco in cui risiedono le risorse che implementano i servizi. E' possibile modificarne la posizione attraverso il tasto di selezione.
· Directory Virtuale - Indica la directory virtuale per mezzo della quale è possibile accedere ai servizi. E' possibile modificare questo parametro solo attraverso la procedura di spostamento dei Web Services.
· Sito - Indica il sito che pubblica i servizi. E' possibile modificare questo parametro solo attraverso la procedura di spostamento dei Web Services. Inoltre è possibile impostare un sito differente dal Default Web Site solo per Sistemi su cui è installato IIS ver.6, in quanto permette la pubblicazione di più Siti su uno stesso Server.
· URL web services - Indica la posizione dei Web Services. E' possibile specificare un URL differente da quello di default, indicando ad esempio un server diverso da quello di default oppure indicando un numero di porta qualora differisca da quella di default. (es: http://localhost:8080/wsopenwork)
· Tempo di residenza nella cache di stampa - Indica il tempo entro cui l'elenco verrà eliminato dalla cache. Se l'elenco risiede nella cache, a fronte di una richiesta, esso non è ricreato. Durante l'intervallo, l'elenco non risulta aggiornato ad eventuali modifiche.

nota

Nota

I parametri Percorso Web services, Directory Virtuale, Sito, URL web services sono essenziali per il funzionamento di openwork®. La loro modifica potrebbe compromettere il funzionamento della piattaforma, per cui è necessario modificarli solo in caso di manutenzione straordinaria della piattaforma.

Inoltre è possibile effettuare alcune azioni di manutenzione dei Web Services, selezionando la voce di opportuno interesse:

· Visualizza Web Services - Azione di verifica che consente di valutare le modifiche introdotte. Alla pressione del tasto Esegui, visualizza la pagina di default dei Web Services di <%OPENWORK%.
· Ricostruisci configurazione - Azione di manutenzione. Alla pressione del tasto Esegui, il Server Manager avvia la procedura che consente di riconfigurare i Web Services, utilizzando la configurazione specificata nel web.config sorgente.

SM02 - Riconstruction

E' possibile scegliere il file sorgente in base alle seguenti opzioni:

esistente - La configurazione è ricostruita sul web.config già esistente.

installazione - La configurazione è ricostruita sul web.config di default utilizzato durante l'installazione.

altro - La configurazione è ricostruita sul web.config selezionato come sorgente. Questo viene utilizzato per impostare i Web Services a partire da una configurazione nota.

Alla pressione del tasto OK il sistema procede con l'aggiornamento della configurazione.

· Sposta - Consente di modificare il percorso dei Web Services.

SM03 - Transfer

Nella maschera che il Serve Manager visualizza sono riportate le seguenti informazioni:

Parametri correnti - Riepilogo dei parametri correnti.

Nuovi Parametri - Consente di impostare la nuova configurazione selezionando il percorso in cui risiedono fisicamente le risorse dei web services, inserendo il nuovo nome della directory virtuale, selezionando il sito da utilizzare per la pubblicazione.

Opzioni - In questa sezione è possibile impostare alcune opzioni che stabiliscono il comportamento dello spostamento dei Web Services:

Opzione | Checked | Unchecked
Rimuovi directory virtuale | Dopo lo spostamento la vecchia directory virtuale viene rimossa | Dopo lo spostamento la vecchia directory virtuale esiste ancora.
Copia file | La nuova directory viene sovrascritta dalle risorse contenute nel vecchio percorso | Dopo lo spostamento il contenuto del percorso resta invariato. Si presuppone dunque che la cartella contenga già la versione corretta dei Web Services da pubblicare.
Rimuovi file | Dopo la procedura verranno rimosse le risorse del percorso di origine | Dopo la procedura non verranno rimosse le risorse del percorso di origine

Si consiglia comunque di non selezionare le opzioni di rimozione file e directory virtuale e di provvedere alla rimozione in un momento successivo in modo da lasciare una copia di back-up.

Il riquadro Impostazioni Locali consente di modificare l'impostazione della lingua. Se i file relativi al linguaggio correntemente sono danneggiati, verrà visualizzato un messaggio di errore all'avvio.


La sezione Installazioni

Attraverso la sezione Installazioni è possibile consultare le diverse configurazioni presenti, consentendone l'eliminazione o la creazione di una nuova, l'abilitazione o la disabilitazione, l'importazione o l'esportazione. In base alla configurazione selezionata, vengono riportate nella sezione sottostante le componenti e/o le opzioni associate dettagliate nel capitolo Informazioni sulle Installazioni.

SM04 - Installations

La gestione delle Configurazioni è attiva solo nel caso di attivazioni ASP, ASPDEV. Per eliminare una configurazione è necessario selezionarla dalla lista e premere il pulsante Elimina. Il Server Manager mostra una maschera in cui è possibile inserire le opzioni per l'eliminazione, in particolare è necessario indicare se le componenti devono essere eliminate fisicamente.

SM08 - ServerRemoving

E' possibile eliminare il database solo nei casi di Access e SQL Server. Per quest'ultimo è necessario inoltre specificare account e password di amministratore del DBMS. Nel caso di Oracle, per eliminare fisicamente il database, è necessario utilizzare gli strumenti messi a disposizione dal DBMS stesso.

La procedura per creare una nuova configurazione è molto simile a quella di installazione di openwork®. In base alla tipologia di attivazione, possiamo distinguere le seguenti caratteristiche:

· ASPDEV - Non esiste alcun limite sul numero di configurazioni da creare. Per effettuare le diverse installazioni sono necessari
· ASP - Non esiste alcuna limitazione sul numero di configurazioni. Inoltre, il nome dell'installazione è deciso in fase di attivazione.

Si analizza ora nel dettaglio l'installazione di una configurazione in ambiente server ASP.

Alla pressione del tasto Nuovo (non è necessario aver selezionato alcuna configurazione), fornire le informazioni per la creazione della nuova configurazione. Si consiglia di selezionare una directory che abbia un nome indicativo della regione sociale intestataria della licenza. Successivamente appare la maschera per l'installazione del Web Server; anche in questo caso l'installazione segue le stesse modalità del setup per una versione server. (cfr. Installazione di openwork®).

Per esportare una configurazione è necessario selezionarla dalla lista e premere il pulsante Esporta. Il Server Manager mostra una maschera in cui è possibile inserire le opzioni per l'esportazione.

SM10 - Export

In particolare è necessario specificare il tipo di esportazione che si vuole effettuare tra le opzioni:

· Solo Configurazione: saranno esportati tutti i dati presenti nel database che caratterizzano la configurazione di openwork® (Piano di classificazione, Modelli di processo, Organigramma, Schede di anagrafica, Allegati alle schede di anagrafica relative a elementi dell'organigramma)
· Configurazione e dati: oltre ai dati che caratterizzano la configurazione di openwork® saranno esportati anche tutti i dati presenti nel database e su richiesta la definizione delle viste custom;
· Organigramma: sarà esportata la parte di repository contenente l'organigramma della configurazione selezionata e gli allegati alle schede di anagrafica relativi a elementi dell'organigramma.

Inoltre, per effettuare qualsiasi tipo di esportazione bisogna specificare la destinazione e il nome del file di output che l'operazione stessa genera.

attenzione

Attenzione

Durante l'esportazione di una configurazione i servizi openwork® Manager, openwork® Job Engine e IIS vengono arrestati e successivamente riavviati.

Per importare una configurazione è necessario selezionarla dalla lista delle configurazione e premere il pulsante Importa. Il Server Manager mostra una maschera in cui è necessario specificare il percorso del file con estensione .odb da importare in configurazione. L'importazione di una configurazione è una operazione distruttiva poichè prevede come primo step la cancellazione dei dati presenti nella configurazione selezionata e successivamente l'importazione del pacchetto dati specificato. L'importazione di una configurazione può essere effettuato solo se la configurazione da importare è stata creata con la stessa versione di openwork® di quella di destinazione. Il server manager al termine dell’importazione di una configurazione tenta di creare solo le viste custom, non è prevista l'importazione delle tabelle custom che devono essere successivamente ricreate manualmente (riferimento Manuale Prodotto Salvataggio viste custom) .

attenzione

Attenzione

· Durante l'importazione di una configurazione i servizi openwork® Manager, openwork® Job Engine e IIS vengono arrestati e successivamente riavviati.
· L'importazione di una configurazione è un operazione distruttiva, assicurarsi di aver effettuato un backup dei dati della configurazione di destinazione prima di procedere.


Informazioni sulle Installazioni

Di seguito si analizzano i tab che contengono le diverse informazioni sulla configurazione:

SM05 - WebServer

Nel tab Generale sono visualizzati i seguenti parametri:

· Percorso per i file temporanei - Directory temporanea per i file allegati. E' possibile selezionare, attraverso apposito pulsante, una nuova directory.
· Modalità Trusted - Questa modalità, quando abilitata, permette di accedere al sistema senza analizzare le password. E' abilitata direttamente dal Server Manager nel caso di richiesta di autenticazione integrata Windows.

Sono inoltre presenti i seguenti pulsanti:

· Info Licenza - Permette di visualizzare le informazioni relative alla licenza installata, per mezzo dell'apposita finestra di riepilogo.
· Upgrade Licenza - Permette di effettuare un Upgrade di licenza per modificarne alcuni parametri (es. modelli di processo). Questo tasto è visualizzato solo per installazioni server, per installazioni presenti su server ASP e per una configurazione primaria di un'installazione ASPDEV se derivate da un'installazione server. Alla pressione di questo bottone si apre la finestra di attivazione e la procedura è la stessa dell'attivazione di un server openwork® (cfr. Attivazione).Al termine sarà visualizzata la finestra di riepilogo informazioni licenza.

Nel tab Web Server sono invece raggruppati i parametri per la configurazione dell'applicazione web. Oltre alle informazioni di carattere generale (Percorso, URL, Directory Virtuale, Sito), sono presenti altre sezioni:

· Impostazioni Locali - Attraverso la lista in questo campo sarà possibile impostare la lingua di default utilizzata dal webserver.
· Gestione Allegati - Consente di configurare i parametri per la gestione degli allegati da parte dell'applicazione web:
o Viewer attachment - Imposta la modalità predefinita di apertura degli allegati grafici. Questo avviene in base alla selezione di una delle tre opzioni disponibili:
▪ Interno - Utilizza il viewer di openwork®.
▪ Su Selezione - Ogni volta appare una finestra in cui selezionare il tipo di viewer (Interno/Predefinito).
▪ Predefinito - Utilizza il viewer di Windows.
o Drag & Drop disabilitata - Abilita o disabilita l'utility Drag & Drop nel Web Server. Per rendere effettive le modifiche dopo aver cambiato questa impostazione, è necessario cliccare sul tasto Salva. L'abilitazione dell'utility Drag & Drop è configurabile anche nel file web.config come riportato in cfr. Utility Drag & Drop.
o Massima dimensione consigliata per allegato - Soglia oltre la quale il sistema notifica all'utente l'inserimento di un documento troppo grande e la conferma all'esecuzione dell'operazione.
o Livello Compressione Pacchetti DIME - Una maggiore compressione implica una minore banda occupata, ma un maggior tempo di attesa nel trasferimento degli allegati. Il range dei valori validi varia da 0 (nessuna compressione) a 9 (massima compressione).
o Dimensione Pacchetto DIME - Gli allegati sono trasferiti per pacchetto, ossia suddivisi in blocchi della dimensione specificata da questo parametro.
· Configurazione
o Authentication Mode - Questo imposta il tipo di autenticazione da utilizzare per effettuare il log-on ad openwork®. Sono possibili le seguenti modalità:None, Forms, Windows, Custom.
o Pagina di Default - pagina visualizzata subito dopo il log-on al sistema.
o Pagina di Login - pagina utilizzata per il log-on al sistema.
o Warnings - Impostazioni per gli avvisi restituiti, è possibile selezionare d'ignorare gli Alert restituiti
o Dominio Utente - indica se rimuovere il dominio dalla stringa di definizione dell'utente per permetterne l'identificazione da parte del sistema. E' valida solo nel caso di autenticazione di tipo Windows.

nota

Nota

Per dominio s'intende il nome del dominio di Active Directory oppure il nome della macchina server se i computer sono inseriti in un Workgroup. In particolare:

· Nel caso Active Directory : Username = nomedominio\nomeutente

nomedominio - nome del domino

nomeutente - utente loggato sul client

· Nel caso Workgroup : Username = nomeserver\nomeutente

nomeserver - server su cui è ospitato openwork®

nomeutente - utente loggato sul client, avente i diritti d'accesso sul server

Se nel Server Manager è presente l'impostazione Dominio utente = Presente, allora lo username di openwork® deve essere comprensivo di dominio (nomedominio\nomeutente).

· Azioni - E' possibile effettuare alcune azioni sull'applicazione web in modo analogo ai Web Services
· Etichette azioni negli elenchi - Questa sezione permette di attivare o disattivare la visualizzazione delle etichette dei bottoni delle form di openwork®.

Il tab Data Base ed il tab Repository riepilogano le informazioni e le impostazioni dei parametri delle rispettive. Si consiglia di non modificare queste opzioni in quanto sono riservate ad azioni di manutenzione straordinaria.

Il tab Indexing riepiloga lo stato del modulo Full Text ed eventualmente non sia ancora attiva ne permette l'abilitazione. Visto che questo modulo può essere utilizzato solo con SQL Server è quindi attivabile solo su piattaforme che utilizzino questo DBMS.


La sezione openwork® Manager

Tramite il tab openwork® Manager è possibile configurare i parametri dei componenti manager implementati da servizi Windows. Ognuno dei tab è suddiviso in ulteriori sezioni, ognuna delle quali configura i parametri relativi ad un particolare contesto:

· Business Flow - Si occupa della corretta esecuzione dei processi.
· Print - Si occupa delle stampe dei documenti su periferica.
· Mail - Si occupa dell'invio delle mail.
· Job - Si occupa di conversioni e/o elaborazioni complesse, quali conversione PDF, riconoscimento BAR Code, riconoscimento OCR e Job Custom.
· Pianificazione - Si occupa della gestione dei tempi di inattività della piattaforma che consentono operazioni di manutenzione o di backup.

I servizi manager operano in logica multithread, per cui riescono a svolgere operazioni contemporaneamente. In realtà, dovendo adattarsi alla configurazione del sistema su cui la piattaforma è installata, i processi non vengono eseguiti tutti contemporaneamente: il numero massimo di processi da elaborare in parallelo è stabilito dal Massimo numero di thread ed è il manager stesso ad ottimizzare il turno d'esecuzione. Inoltre, ogni thread ha un tempo massimo di esecuzione entro il quale svolgere le proprie attività (Thread Timeout). Se questo non avviene, l'esecuzione del processo relativo è interrotta dal sistema.

attenzione

Attenzione

Se durante l'interruzione del processo era in corso un operazione bloccante (script, stored procedure o altro) il manager non può deallocare il thread e rilasciato solo al termine di questa.

Il tempo di ripartenza dei thread regola il numero di interrogazioni (polling) del manager alla piattaforma; indica infatti l'intervallo di tempo che intercorre tra due richieste delle attività da svolgere. Questi parametri sono analoghi per tutti i manager e hanno come obiettivo quello di permettere la regolazione (Tuning) degli applicativi.

Nome | Descrizione | Business Flow | Print | Mail | PDF | OCR | BarCode
Massimo numero di thread | Massimo numero di istanze di processo che possono essere eseguite contemporaneamente. | x |  | x | x | x | x
Thread Timout | Tempo massimo (in min) di vita di un thread prima che termini. | x | x | x | x | x | x
Tempo di ripartenza dei thread | Intervallo tra due richieste di elenco processi e/o attività da processare | x | x | x |  |  |
Debug abilitato | Abilita il debug (opzione sconsigliata, da usare solo in fase di test). | x |  |  |  |  |
Stampante | Nome della stampante predefinita per il server openwork® |  | x |  |  |  |
Server SMTP | Nome del server SMTP da cui inviare le mail |  |  | x |  |  |
Porta SMTP | Porta del server SMTP da cui inviare le mail (default 25) |  |  | x |  |  |
SMTP User | Utente per la connessione al database. Nel caso in cui questo dato manchi, la connessione avverrà senza autenticazione SMTP |  |  | x |  |  |
Password | Password per l’autenticazione SMTP. Viene visualizzata, mascherata con il carattere asterisco (*) |  |  | x |  |  |
Locale/Inoltro | Locale:job eseguito in locale. Inoltro:job trasferito ad un altro sistema (indicare path). |  |  |  | x | x | x
Inoltro | Path completa cui inoltrare i job |  |  |  | x | x | x
Percorso Job | Cartella nella quale vengono salvati i file descrittori dei Job |  |  |  | x | x | x

I parametri evidenziati in giallo sono quelli su cui operare per modificare le performance dei servizi. Per spiegare gli effetti al variare di questi parametri esaminiamo il Business Flow; le considerazioni sono valide anche per gli altri manager.

Le condizioni per una configurazione ottimale non sono solo dettate dalle risorse hardware disponibili, ma anche dall'applicativo openwork® , ovvero dagli script eseguiti, dal numero e dalla tipologia di risorse esterne da utilizzare. Infatti, su applicativi che hanno un certo numero di script, i quali a loro volta hanno una eccessiva durata (dell'ordine dei minuti), diminuire il tempo di ripartenza dei thread, non solo risulta inutile ma talvolta controproducente, in quanto il sistema tenterebbe di riavviare attività ancora attive. In questi casi è sicuramente più utile aumentare il numero dei thread.

A volte è possibile restringere il timeout dei thread per evitare che alcune attività possano bloccare la corretta esecuzione dei processi. Anche in questo caso però può risultare controproducente restringere eccessivamente questo parametro, in quanto le attività che non si completano andranno in errore e/o verranno ripetute senza essere completate, creando quindi un ulteriore collo di bottiglia.

L'accesso alle impostazioni elencate è particolarmente semplice, grazie all'intuitività dell'interfaccia utente: si consiglia, tuttavia, di non modificare le impostazioni predefinite in assenza di approfondite conoscenze specialistiche sull'effetto che si potrebbe avere sul funzionamento della piattaforma.

Advanced Job

Dalla sezione Job fare click sul pulsante Advanced Job. Il Server Manager mostrerà la maschera per la configurazione degli Advanced Job, in cui è possibile gestire le funzionalità ncutting, xtransform ed i custom job (dettagliate nella sezione UserFunction del manuale prodotto).

SM06 - AdvancedJob

Come per gli altri manager, anche in questo caso i paramentri da configurare sono il Massimo numero di thread e il Thread Timout. E' inoltre possibile aggiungere e/o rimuovere i custom job dalla piattaforma per mezzo degli appositi pulsanti (Nuovo ed Elimina).

attenzione

Attenzione

Il nome del Custom Job deve coincidere con il nome della funzionalità della classe che implementa.

Il tab Panificazione permette di gestire i periodi di inattività della piattaforma openwork®. All'interno della lista Elenco pianificazioni sono elencate tutte le pianificazioni impostate. E' possibile accedere alle opzioni di modifica e di eliminazione attraverso il riquadro dettagli pianificazione.

SM09 - Planning

Esistono due diverse tipologie di pianificazioni, Standby e Mantenimento, che consentono di gestire solo pianificazioni settimanali o giornaliere.

I piani di Standby impostano periodi di inattività durante i quali il sistema openwork® interrompe il suo normale funzionamento rendendo disponibili le risorse che normalmente risulterebbero "in uso", mentre i piani di Manutenzione sono creati per consentire operazioni finalizzate alla manutenibilità del sistema. Attraverso il pulsante Aggiungi Nuova è possibile inserire una nuova pianificazione.

E' dunque opportuno creare le pianificazioni di Manutenzione all'interno di pianificazioni Standby, in questo modo da assicurarsi che le operazioni avvengano a sistema "fermo". Di seguito un dettaglio della lista in Elenco pianificazioni che mostra un'opportuna configurazione delle pianificazioni di Standby e Manutenzione.

M – Piano di manutenzione / S – Piano di standby

SM07 - PlanningMaintInStandby

nota

Nota

I pulsanti Modifica e Rimuovi all'interno sono visualizzati nel momento in cui è selezionata almeno una Pianificazione dalla lista Elenco Pianificazioni.


Diagnosi di un problema

Al fine di individuare la causa di eventuali malfunzionamenti di openwork®, esistono diversi strumenti di supporto. Nello specifico per reperire informazioni utili ad effettuare la diagnosi completa di un problema occorre:

1. Accedere al file di log di openwork®: il file di log di openwork®, openwork.log, viene creato all'installazione della suite nella cartella specifica <root di openwork>\log. Il file openwork.log tipicamente riporta le registrazioni ordinate per data e ora relative ai processi, alle modifiche effettuate ad una configurazione e ai servizi di openwork®. E' possibile impostare le informazioni che devono essere riportate nel file di log anche tramite script utilizzando l'oggetto Log della classe specifica OWKLog. Quando il file openwork.log raggiunge la dimensione massima di 1MB viene creata una sua copia, rinominata con l'aggiunta di un id univoco, e generato un nuovo file di log openwork.log. Ciò avviene per evitare che il file di log diventi di dimensioni troppo grandi e quindi impossibile da visualizzare.
2. Accedere al visualizzatore di eventi di Windows: da pannello di controllo accedere agli strumenti di amministrazione di Windows e scegliere la voce Visualizzatore di eventi (Event viewer nella localizzazione inglese del sistema operativo). L'openwork manager service riporta le informazioni circa tutti gli eventi che lo coinvolgono, dalla sua installazione alla sua rimozione, nel registro Applicazione. I possibili messaggi riportati sono di tre tipi: informazioni (information), avviso (warning) ed errore (error). Segue l'elenco di tutti i possibili messaggi e le rispettive cause scatenanti:

Messaggi di tipo Informazioni SM15 - information

Messaggio | Causa
ServiceStarted | Al termine della fase di inizializzazione del servizio.
Service ended | - Al termine dell’esecuzione del servizio; - A fronte di un errore nell’inizializzazione e dopo il messaggio di errore nell’event viewer.
Cannot Restart Activities | Problemi durante il riavvio delle attività.
Stop activity for stand-by | Avviso di arresto attività per stand-by.
Restart activity after stand-by | Avviso di ripresa attività dopo stand-by.

Messaggi di tipo Errore SM14 - error

Messaggio | Causa
Service cannot be installed. Problems during components initializazation | Nel caso in cui avvenga un eccezione durante l’inizializzazione dei componenti
Cannot remove service | Nel caso in cui avvenga un eccezione durante la disinstallazione del servizio
Cannot create object ServiceManager | Nel caso in cui avvenga un’eccezione durante l’istanziazione dell’istanza dell’oggetto OpenworkManager
openwork Manager – Exception in Main method: <Messaggio dell’eccezione> | Nel caso in cui avvenga un’eccezione durante la creazione dell’eseguibile
Cannot start service: <messaggio eccezione> | Nel caso in cui avvenga un’eccezione durante l’esecuzione del comando di start da parte del service controller
Cannot Start operations : <messaggio eccezione> | Nel caso in cui avvenga un’eccezione durante l’inizializzazione del servizio
Error during service stopping: <messaggio eccezione> Call Stack: <stack eccezione> | Nel caso in cui avvenga un’eccezione durante l’arresto del servizio

Messaggi di tipo Avviso SM16 - warning

Messaggio | Causa
Cannot ping server | Nel caso in cui falliscano la registrazione o il ping del manager
Problem during thread stopping: <testo eccezione> - Last operation: <ultima operazione> | Nel caso in cui ottenga un’eccezione durante l’arresto di uno dei thread
Cannot execute messages log: <testo eccezione> | Nel caso in cui avvenga un eccezione durante il log
openwork Manager – Custom Unhandled Exception Manager : <Messaggio e stack dell’eccezione> | Nel caso in cui avvenga un’eccezione non gestita nel codice

Nel caso in cui openwork® non ha la possibilità di scrivere il file openwork.log nella cartella predefinita o non può scrivere nel visualizzatore di eventi di windows, produce comunque un file di log openworkManager.log e lo salva all'interno della cartella <root di openwork>\lib. All'interno del file openworkManager.log i messaggi del visualizzatore di eventi di Windows vengono riportati nella forma che segue:

Impossibile scrivere nell'Event Viewer:

Event ID - <EventID>

Event Type - <TypeOfInformation>

Message - <MessageBody>

dove

<EventID> è l’identificativo dell’evento che si voleva scrivere;

<TypeOfInformation> è la tipologia di informazione che si voleva scrivere. Può assumere uno dei seguenti valori: Error, Failure Audit, Information, Success Audit, Warning, Undefined;

<MessageBody> è il testo dell’evento;


Salvataggio delle viste custom

Creazione e salvataggio viste custom durante l'importazione di una configurazione

Il server manager al termine dell’importazione di una configurazione tenta di creare le viste custom, che sono quelle create dall’utente nel database sorgente. Questa creazione è molto delicata e viene tentata solo se il database sorgente e quello di destinazione sono dello stesso tipo. Prima di effettuare l’importazione, infatti, viene verificata la tipologia di database da cui proviene l’esportazione. Si evidenziano 3 casi:

· Tipologia di database impossibile da leggere: questo caso si verifica quando non è possibile leggere il database che si vuole importare. Viene chiesto all’utente se procedere con l'importazione o terminare l'operazione (vedi figura). Se l’utente accetta, si procede al passo successivo. Se rifiuta, il procedimento si interrompe.

SM11 - ImportErrorDB

· Tipologia di database dell’esportazione differente da quella di destinazione: viene comunicato all’utente la differenza tra la tipologia del database che si tenta di importare e quello di destinazione e viene proposto all'utente il salvataggio delle definizioni delle viste. L’utente può accettare e salvare (Si), rifiutare (No) o interrompere la procedura (Annulla).

SM12 - ImportErrorDBDisegual

Se l’utente risponde No, l'importazione procede al passo successivo; se, invece, risponde Si, una nuova finestra consente di selezionare la directory in cui salvare le definizioni delle viste custom, i dati saranno salvati nella directory selezionata e si procederà con l'importazione.

· La tipologia di database è la stessa: Al termine dell’importazione, se la tipologia del database è la stessa, viene tentata la creazione delle viste in modo iterativo. Questo, in quanto, le viste possono dipendere una dall’altra e ciò non è possibile saperlo a priori, per cui la procedura ritenta la creazione su tutte. Se nel tentativo corrente viene creata almeno una vista, la procedura ricomincia con la creazione delle altre viste, altrimenti termina e segnala eventuali errori. Nel caso in cui, al termine di questa iterazione, resti almeno una vista non creata, viene segnalato all’utente tale stato e gli viene proposto di salvare le definizioni fino ad allora create. Nel caso l'utente non salva le definizioni create la procedura di importazione viene portata comunque a conclusione.

SM13 - ImportDBEquals

E’ importante sottolineare la delicatezza di questa operazione, tanto che può portare ad una situazione solo apparentemente corretta. Le viste custom non dipendono solo dai dati di openwork®, ma spesso dall’ambiente esterno ad openwork® (da altre tabelle, da db collegati o altro). E’ molto facile che la creazione di queste viste possa fallire, basta anche il nome dell’utente del database openwork® differente. Difatti, nelle definizioni delle viste, si fa riferimento agli oggetti con nome completo (incluso di schema e quindi di nome utente). Si consiglia, specialmente nelle installazioni di produzione, di procedere alla creazione manuale delle viste custom.


Disinstallazione di openwork®

La procedura di disinstallazione di openwork® consente di eliminare dal server le componenti software della piattaforma. Questa operazione viene avviata attraverso il programma Uninstaller.exe, che visualizza la seguente schermata:

Setup16 - Installation

Di default, la procedura disinstalla tutte le componenti di openwork®;deselezionando invece la voce Rimuovi tutto si può evitare di rimuovere il database per successive reinstallazioni e/o si può conservare il repository documentale etc.

Nel caso di DBMS SQL Server e di richiesta di rimozione del DB è necessario inserire utente e password validi per l'amministratore di database.

Per Oracle non è possibile la rimozione del DB.

Successivamente, la procedura guidata non richiede particolari interventi dell'operatore.

Al termine, è indicato se la procedura di disinstallasione si è conclusa con successo. Al fine di completare la rimozione di openwork® è necessario riavviare il sistema.


Upgrade di un server openwork®

attenzione

Attenzione

Prima di procedere con qualsiasi procedura di upgrade leggere attentamente il file README.TXT contenuto nella cartella di installazione del pacchetto di upgrade.

La seguente sezione descrive come effettuare l'aggiornamento di versione di openwork® utilizzando la procedura automatica. Tale procedura, detta di upgrade, consente di aggiornare solo le componenti desiderate, anche se si consiglia di effettuare l'aggiornamento completo del sistema.

L'applicazione da utilizzare nelle differenti tipologie di versioni di openwork® (demo, server o multiconfigurazione) è sempre la stessa. Nel caso in cui l'ambiente su cui eseguire l'aggiornamento lo richieda (versioni ASP ed ASP DEV), è possibile la selezione delle configurazioni da aggiornare.

L'applicazione sulla quale si effettua l'upgrade deve essere corretta e funzionante in relazione alla documentazione di versione, infatti la procedura non consente il ripristino di configurazioni non funzionanti a meno di bug noti o segnalazioni da parte del produttore.

Prima di descrivere la procedura di upgrade, è opportuno considerare le seguenti linee guida:

· E' indispensabile effettuare un back-up di tutte le componenti coinvolte (engine, database, web server, repository). Il produttore declina qualsiasi responsabilità a fronte di perdita di dati e/o configurazione.
· Se con l'upgrade si aggiorna uno dei primi due numeri della versione (ad es. passando dalla 5.5.1 alla 5.6.0) al termine della procedura è necessario attivare la nuova versione; ciò non avviene se si aggiorna solo il terzo numero (ad es. passando dalla 5.6.0 alla 5.6.1).
· Dopo l'upgrade del web server (ma in generale se si effettuano modifiche a risorse del web server) è consigliabile svuotare la cache del browser sui client prima di accedere ad una configurazione di openwork® aggiornata; se non si esegue questa operazione possono verificarsi eventuali errori. Allo stesso modo occorre prestare attenzione alle architetture in cui sono presenti sistemi di caching delle pagine web (i.e. proxy, come ad esempio Microsoft ISA Server).
· L'upgrade può aggiornare alcuni componenti lato client dell'applicazione web; sebbene le procedure di auto-aggiornamento dei client siano state automatizzate e perfezionate, possono esistere delle architetture di rete in cui tali procedure non funzionano (ad esempio domini Active Directory in cui vi sono particolari restrizioni per gli utenti). Occorre quindi preventivare in tali situazioni la distribuzione dei componenti da aggiornare attraverso metodi alternativi (ad esempio distribuzione attraverso Active Directory).


Procedura

nota

Nota

I passi descritti si riferiscono ad una generica procedura di upgrade, valida a prescindere dalla versione o dal tipo d'installazione.

attenzione

Attenzione

La procedura di back-up non viene gestita dalla procedura di upgrade, ma deve essere eseguita con strumenti diversi al di fuori della procedura.

attenzione

Attenzione

Prima di procedere con qualsiasi procedura di upgrade leggere attentamente il file README.TXT contenuto nella cartella di installazione del pacchetto di upgrade.

Per avviare l'upgrade è necessario lanciare il programma upgrade.exe situato nella root del package di upgrade. L'eseguibile è anche in grado di verificare se l'aggiornamento è stato già effettuato e, in tal caso, viene richiesta conferma all'utente prima di continuare ad eseguire l'operazione.

Up01 - Confirm

Premere Yes per aggiornare l'Engine di openwork®, No per non effettuare l'operazione.

Prima di proseguire con l'aggiornamento del Web Server, la procedura notifica l'elenco dei servizi che saranno arrestati (openwork® Manager, Servizio di Pubblicazione sul WWW, openwork® Job Engine).

Dopo una serie di operazioni preliminari, vengono aggiornate le risorse necessarie per l'Engine ed per i Web Services di openwork®. Successivamente, per l'aggiornamento del database e del Web Server, la procedura ha un comportamento differente in funzione del tipo di installazione presente sul sistema. Le procedure sono di seguito descritte:

Aggiornamento in ambiente server o demo

Al termine dell'aggiornamento dell'Engine e dei Web Services, la procedura chiede conferma per proseguire con l'aggiornamento delle risorse del Web Server. In caso di risposta negativa da parte dell'utente, la procedura salta questa fase passando direttamente all'aggiornamento del database.

Allo stesso modo, anche per il database viene richiesta la conferma per l'aggiornamento dello stesso;in caso di risposta negativa la fase viene saltata.

Inoltre, anche nel caso in cui le versioni del Web Server coincidono, prima di proseguire con l'aggiornamento, viene richiesta conferma all'utente.

Aggiornamento in ambiente ASP - ASPDEV

Per queste tipologie d'installazione, viene mostrata una maschera nella quale è necessario selezionare le configurazioni che s'intende aggiornare:

Up02 - configuration

A sinistra sono elencate le configurazioni presenti sul sistema, a destra vengono inserite le configurazioni da aggiornare. I tasti consentono di:

>> Inserire tutte le configurazioni presenti nell'elenco di quelle da aggiornare.

> Inserire solo la configurazione selezionata.

< Rimuove la configurazione presente nell'elenco delle configurazioni da aggiornare.

<< Rimuove dall'elenco delle configurazioni da aggiornare tutte quelle selezionate.

Si consiglia comunque di procedere all'aggiornamento di tutte le configurazioni in modo che le versioni non risultino disallineate.

nota

Nota

Le configurazioni disabilitate, identificate dalla concatenazione Disabilitata + ragione sociale, possono essere ugualmente aggiornate.

Premendo il tasto >> vengono aggiornati i Web Server di tutte le configurazioni, mentre scegliendo il tasto Salta tale aggiornamento viene saltato. Così come avviene nella procedura di upgrade in versione demo o server, se il Web Server è stato già aggiornato, viene richiesta la conferma prima di proseguire nuovamente con l'aggiornamento.

L'aggiornamento del database per ogni configurazione avviene allo stesso modo. E' possibile scegliere, attraverso apposita finestra, le configurazioni di cui si vuole effettuare l'aggiornamento. Anche in questo caso si consiglia di aggiornare tutte le configurazioni.

In entrambi i casi, dopo l'aggiornamento delle risorse, la procedura di upgrade termina oppure richiede propone l'attivazione di openwork®:

· In alcuni casi, a seconda della versione di partenza e di quella di arrivo, potrebbe rendersi necessaria una nuova attivazione di openwork®. L'avvio della procedura di attivazione è segnalata dal seguente messaggio:

Up03 - msgActivation

Per l'attivazione a seguito della procedura di upgrade, è sufficiente il Codice Cliente ricevuto dal produttore in fase d'installazione. (cfr. Attivazione)

· Qualora l'attivazione non fosse indispensabile, viene richiesta conferma per l'avvio dei servizi Internet Information Services e openwork® Manager. Si consiglia di riavviare il sistema.

Gestione Errori e Warning

Nel caso di problemi durante l'upgrade, la procedura mostra una finestra in cui scegliere l'azione da attuare:

· Riprova: la procedura ripete l'operazione che ha generato l'errore. Questo di solito è utile nel caso l'errore possa essere dovuto ad agenti esterni. L'immagine utilizzata come esempio rappresenta un caso simile (Risorsa occupata dall'esterno). In questo caso la ripetizione dell'attività potrebbe risultare risolutiva.
· Ignora: la procedura salta il singolo aggiornamento e passa al successivo. Si presuppone in tal caso di risolvere con un workaround il mancato aggiornamento della risorsa.
· Esci: La procedura termina.

UP04 - EngineMessage

Al fine di permettere un'analisi della procedura di upgrade, al termine di questa è possibile leggere un report degli errori nel file upgrade.log presente nella root di openwork®.

Qui si trova registrata data ed ora di inizio e fine procedura ed i messaggi catalogati in WARNING ed ERROR.


Installazione componenti lato client

La piattaforma thick client di openwork®, attraverso le funzioni javascript , pagine web, componenti e file di messaggi (anche in lingua), permette di effettuare l'installazione di componenti lato client (ActiveX, dll etc.) utilizzando, in particolare, pacchetti con estensione msi e cab.

Solo in alcune circostanze, ad esempio nel caso di Active directory, i pacchetti con estensione cab vengono bloccati, per cui il download viene effettuato per mezzo di una pagina web personalizzabile. In questa pagina viene riportato il link alla componente con estensione msi, inserendo opportunamente alcuni tag xml nel file di configurazione (components.xml).

Inoltre, per superare le limitazioni dovute ad impostazioni del browser, tutti i componenti rilasciati dal produttore, a prescindere dall'estensione, vengono firmati digitalmente attraverso un certificato di classe 3 rilasciato dalla Certification Autority VeriSign.

L'installazione dei componenti lato client può avvenire in modalità automatica o manuale:

· Installazione manuale – Si avvia se le impostazioni del sistema operativo impediscono di effettuare il download e l'esecuzione dei file cab oppure se l'utente rifiuta l'avviso di protezione. Viene visualizzata una pagina che riporta il nome del componente, la descrizione, lo stato, le istruzioni e il relativo link per effettuare l'installazione; la pagina visualizzata permette inoltre l'attivazione manuale del componente in presenza della tecnologia ActiveX Opt-In.

Setup17 - clientInstallation

· Installazione automatica - Viene mostrato l'avviso di protezione con il quale il produttore assicura l'integrità e la sicurezza dell'installazione. Il certificato riporta le informazioni relative all'autore, garantendo inoltre protezione da eventuali modifiche.

Le sezioni successive analizzano i file necessari per avviare l'installazione dei componenti lato client, e le modalità con le quali è possibile customizzare opportunamente tali file ( file di configurazione, file di messaggi, personalizzazione stile della pagina d'installazione).

E' possibile inoltre utilizzare la stessa pagina per verificare la presenza di tutte le componenti. Per richiamare tale pagina è possibile procedere come segue:

· Utilizzando uno script, utilizzando la funzione menuclick(800) contenuta nel file menufunction.js
· Richiamando dal browser ".../csetup.aspx?action=2"


File di configurazione

All'interno della cartella webserver/setup, oltre ai file .cab, i file .msi ed eventuali file .exe nel caso di plugin, è presente il file components.xml che contiene tutte le informazioni relative ai componenti aggiuntivi da installare lato client.

Qualora si vogliano inserire i riferimenti ad un proprio componente, è opportuno intervenire nella cartella di customizzazione - webserver\csetup - in quanto, eventuali upgrade di versione, sovrascrivono i file precedenti. In questa cartella è necessario avvalorare i tag del file components.xml con le opportune informazioni, rispetto ad ogni componente aggiuntivo e inserire il pacchetto .msi, il pacchetto .cab e il file di messaggi.

Esempio

<?xml version="1.0" encoding="UTF-8"?>

<components xmlns ="http://www.openwork.info/schema">

<component>

<progid>owkclient.filemanager</progid>

<version>5,3,0,6</version>

<clsid>4846646D-AE80-4EBC-BC16-C200C531C64C</clsid>

<cab>owkclient.cab</cab>

<installfn>owkclient.msi</installfn>

<automatic>false</automatic>

</component>

<component>

<progid>bconsole.report</progid>

<version>5,3,0,0</version>

<clsid>E16CEE91-69F0-45BE-9BAC-A2B8D2380639</clsid>

<cab>bconsole.cab</cab>

<installfn>bconsole.msi</installfn>

<automatic>false</automatic>

</component>

<component>

<progid>lead.leadctrl</progid>

<version>5,3,0,0</version>

<clsid>00140000-B1BA-11CE-ABC6-F5B2E79D9E3F</clsid>

<cab>owkimage.cab</cab>

<installfn>owkimage.msi</installfn>

</component>

<component>

<progid>msxml2.freethreadeddomdocument.4.0</progid>

<version>4.20.9818.0</version>

<clsid>88d969c0-f192-11d4-a65f-0040963251e5</clsid>

<cab>msxml4.cab</cab>

<installfn>msxml.msi</installfn>

<automatic>false</automatic>

</component>

<licence/>

</components>

attenzione

Attenzione

I caratteri speciali hanno una codifica Unicode superiore a 128 e devono essere opportunamente codificati in quanto non possono essere utilizzati in xml. E' necessario inserire di ogni carattere la corrispondente codifica (Windows Code Page 1252).

In dettaglio:

· progid (Programmatic IDentifier) : rappresenta l'identificativo del programma necessario per istanziare il componente. E' formato dai campi nomeprogetto.nomeclasse.
· version : rappresenta la versione del componente da installare. Se il file msi gestisce correttamente gli aggiornamenti, è possibile impostare il valore nel tag in modo tale da consentire l'aggiornamento di tutti i client che lo utilizzano.
· clsid : rappresenta il classid presente in ogni componente COM e indispensabile per effettuare l'installazione automatica quando il tag automatic è impostato a true.
· cab : nome del file . cab presente nella cartella webserver/csetup.
· installfn (Install file name) : nome del file .msi presente nella cartella webserver/csetup.
· automatic: Indica se l'installazione avviene in modalità automatica. Può assumere valori true o false. Valore di default false.

Nel caso in cui sia necessario verificare l'installazione di un componente che utilizza un file .lpk (licence package), è indispensabile specificare nel file di configurazione ulteriori parametri:

· verifylicence : Indica se, durante l'installazione, deve essere caricato anche l'object di licenza. Può assumere valore true o false.
· myscript : Nome della funzione implementata per verificare l'installazione, presente nella cartella custom clibraries/setup/setup.js.
· value : Nome del file di licenza .lpk comprensivo di percorso “relativo” nel senso che partirà comunque dalla cartella webserver del server.

Esempio

<component>

<progid>lead.leadctrl</progid>

<version>5,3,0,0</version>

<clsid>00140000-B1BA-11CE-ABC6-F5B2E79D9E3F</clsid>

<cab>owkimage.cab</cab>

<installfn>owkimage.msi</installfn>

<verifylicence>true</verifylicence>

<myscript>verify();</myscript>

</component>

<licence>

<value>setup/LT14N.lpk</value>

</licence>

nota

Nota

1. Non è possibile inserire più di un tag licence in una pagina, per cui si devono inserire tutti i componenti da licenziare nel file lpk.
2. Il file lpk non è aggiornabile, per cui, per licenziare un nuovo componente, è necessario reinserire tutti i componenti.


File dei messaggi

Il file dei messaggi presente nella cartella webserver/setup contiene i messaggi che possono ricorrere durante l'installazione di un componente in base alla lingua specificata. Il nome del file indica la lingua utilizzata, infatti viene esplicitata l 'estensione della lingua : “setup.+ estensione della lingua” (es. setup.it - setup.eng - etc).

Esempio

<labels>

<label id = "title">Verifica componenti client</label>

<label id = "owkclienttit">openwork&#174; Web Client Library</label>

<label id = "owkclientdescr">Componente necessario per la gestione di qualsiasi file allegato a documenti</label>

<label id = "owkclientfinst1">Per installare fare clic su </label>

<label id = "owkclientfinst2"> e scegliere Apri</label>

<label id = "bconsoletit">openwork&#174; Business Console Library</label>

<label id = "bconsoledescr">Componente necessario per l&apos;utilizzo di openwork&#174; Business Console</label>

<label id = "bconsolefinst1">Per installare fare clic su </label>

<label id = "bconsolefinst2"> e scegliere Apri</label>

...

...

</labels>

In generale, per ogni componente presente nel file di configurazione, devono essere presenti le seguenti label, composte in modo tale da essere identificate dal ProgId:

< label id = "prima parte progid+ tit"> Nome del componente </label>

< label id = "prima parte progid+ descr"> Descrizione del componente </label>

< label id = "prima parte progid+ finst1"> Per installare fare clic su </label>

< label id = "prima parte progid+ finst2"> Istruzioni particolari per l'installazione</label>

attenzione

Attenzione

Le label non possono contenere caratteri speciali, quali l'apostrofo oppure il simbolo '®'. In tal caso è necessario utilizzare la codifica Unicode del carattere, ad esempio:openwork® diventa openwork&#174.


Gestione Installazione

Per consentire l'installazione di un pacchetto, oltre alle specifiche di configurazione inserite nel file components.xml e i messaggi nel file setup.it, bisogna richiamare la funzione instanceObject contenuta nel file common.js. Questa funzione permette di far partire l'installazione semiautomatica del pacchetto, in cui viene richiamata la pagina di download dell'msi.

Esistono due modalità per effettuare tale la chiamata:

1. attraverso l'evento onerror del tag object posizionato in una pagina web.

Ad esempio, nella pagina scanview.aspx, l'oggetto è referenziato attraverso il tag object come segue:

<object id = "MainCtrlTemp" onerror = "instanceObject(1,'lead.leadctrl');"

width = "1px" height = "1px"

classid = "clsid:00140000-B1BA-11CE-ABC6-F5B2E79D9E3F"

CODEBASE = "setup/owkimage.CAB#version = 14,5,0,1"></object>

In questo caso, la funzione richiama direttamente la pagina d'installazione semiautomatica:

function instanceObject(action,progid,autoDisabled)

.....

case "bconsole.report":case "lead.leadctrl":

owk_URI="csetup." + owk_ext() + "?action="+action+"&comp="+progid;

acceptinstall=window.confirm(commonmessage151);

if (acceptinstall)

                       window.open(owk_URI,"_self",owk_settings);return null;

break;

2. richiamando direttamente la funzione instanceObject da javascript.

Un esempio è quello contenuto in attachments.js nel quale viene istanziato l'oggetto per la firma digitale attraverso il suo progid:

var owkdsFileMng = instanceObject(1,"owkds.FileManager");

if(isNull(owkdsFileMng)) return;

Il flusso dello script viene interrotto se l'oggetto non viene istanziato, in modo non vengano generati errori

Il codice per gestire questo tipo di chiamata passa dalla funzione AutomaticInstall che prova a istanziare l'oggetto per mezzo del tag object.

case "owkds.filemanager":

owk_URI = "csetup." + owk_ext() + "?action="+action+"&comp=owkds.filemanager";

method = "CalculateSHA1('')";

istance = AutomaticInstall("owkds.filemanager",owk_URI,owk_name,owk_settings,method,autoDisabled);

try{var a = eval("istance."+method);}catch(err){return null;}

return istance;

break;


Personalizzazione stile

E' possibile modificare lo stile della pagina d'installazione intervenendo sul file setup.css presente nella cartella CSS del webserver.

In corrispondenza delle sezioni visualizzate nell'immagine seguente, viene indicata la classe di riferimento nel foglio di stile.

Setup18 - stylePersonalization

In particolare:

. comptitle {font-family: Verdana; font-size: 20pt; color:#000080;background-color:#F7F7F7;border-width:0;}

. compdescr{font-family: Verdana; font-size: 10pt; color: darkblue;background-color:#F7F7F7;border-bottom-width:1;

border-bottom-color:#FF9A31;border-bottom-style:solid;

border-top-color:#FF9A31;border-top-style:solid;border-top-width:3;}

. compstatus{font-family: Verdana; font-size: 10pt;

color:darkblue;background-color:#F7F7F7;border-bottom-width:1;

border-bottom-color:#FF9A31;border-bottom-style:solid;

border-top-color:#FF9A31;border-top-style:solid;border-top-width:3;}

. complink{font-family: Verdana; font-size: 8pt; color: darkblue;background-color:#F7F7F7;border-bottom-width:1;

border-bottom-color:#FF9A31;border-bottom-style:solid;}

. warning{font-family: Verdana; font-size: 8pt; color: red;}

. mylink{font-family:Verdana; font-size:12pt;text-decoration:underline;

color:#000080; cursor:hand;}

nota

Nota

Warning può essere usato per usi interni e mylink è usato solo per mostrare i tasti Esci e Accedi durante l'installazione dell'msxml4.


Compatibilità con Internet Explorer 9

Il web server delle versioni openwork® 5.8 patch 2 e superiori, è compatibile con la modalità Quirks di tutte le versione del browser Internet Explorer ed in aggiunta con la modalità Standard di Internet Explorer 9.

La modalità “Quirks” garantisce la compatibilità a ritroso con tutte le versioni del browser; questa è la modalità di default utilizzata dal browser per tutti i siti web che non ne specificano una. Per maggiori informazioni sulle modalità di apertura delle pagine web consultare l’articolo Microsoft disponibile qui (http://msdn.microsoft.com/en-us/library/cc288325%28v=vs.85%29.aspx).

La modalità Standard supporta i nuovi standard Web come HTML5, CSS3, Canvas, SVG e altro.

Openwork, per garantire la corretta visualizzazione delle pagine web openwork® su tutti i client, sia quelli con Internet Explorer 9 che quelli con versioni Internet Explorer precedenti, rilascia di default a partire dall'installazione della tecnologia in versione 5.8.2, l’applicazione web di openwork® con impostazione di visualizzazione in modalità Quirks. Ossia l’applicazione web di openwork® installata con la 5.8.2 e versioni superiori, viene visualizzata come se fosse aperta attraverso un browser precedente a Internet Explorer 9.

In aggiunta l’applicazione web di openwork® dalla versione 5.8.2 in poi supporta la modalità di visualizzazione Standard di IE9. Per cui, abilitando questa impostazione del browser Internet Explorer 9, con l’applicazione web di openwork® è possibile sfruttare tutti i vantaggi introdotti dall’innovazione tecnologica di Microsoft .

attenzione

Attenzione

L’utilizzo della La Modalità Standard IE9 presenta i seguenti limiti che non esistono invece nell’utilizzo della modalità Quirks:

· ci sono malfunzionamenti nella visualizzazione delle pagine web openwork® in modalità Framed ;
· si ottiene una renderizzazione errata delle pagine web openwork® qualora le stesse vengano aggiornate utilizzando il tasto F5. Nel caso in cui si utilizza invece la action Aggiorna il funzionamento è corretto.

Per maggiori dettagli su come attivare la modalità Standard su Internet Explorer 9 fare riferimento al paragrafo che segue Attivazione modalità Standard Internet Explorer 9.

Attivazione modalità Standard Internet Explorer 9

Per poter attivare come impostazione di visualizzazione delle pagine web openwork® la modalità Standard IE9 esistono due possibilità:

- inserendo un opportuno tag di tipo <meta> nei modelli XSL, come indicato da Microsoft nell’articolo http://msdn.microsoft.com/en-us/library/cc288325(v=vs.85).aspx

<meta http-equiv="X-UA-Compatible" content="IE=9" >

- inserendo un opportuno Response Header dalle impostazioni di IIS, sulla directory virtuale\ sotto cartelle\file, come indicato da Microsoft nell’articolo http://msdn.microsoft.com/it-it/cc817572.aspx.

Per l’applicazione web di openwork il Response Hearder da specificare è

X-UA-Compatible = IE9

Indicazioni per installazioni openwork® aggiornate alla versione 5.8 patch 2 o superiori da una versione openwork® precedente

Per le installazioni openwork® su cui è stato effettuato un upgrade di versione alla versione 5.8 patch 2 o superiori della tecnologia, se si desidera utilizzare la modalità Standard di IE9 anziché la modalità Quirks, è necessario apportare delle modifiche alle eventuali customizzazioni effettuate al webserver di openwork®. Nel dettaglio:

· l’accesso agli item della collection HTML childNodes nella forma childNodes() non è più consentito. Occorre utilizzare la forma childNodes[] o childNodes.item();
· è obbligatorio, per tutte le pagine web, indicare l’unità di misura della posizione e delle dimensioni di un elemento HTML. Nelle vecchie modalità l’unità di misura di default della posizione e delle dimensioni di un elemento HTML è px.
· L’HTML visualizzato contiene nel DOM nodi testo ‘invio a capo’ introdotti di default dalle trasformazioni openwork®. Per questa ragione è consigliabile utilizzare le proprietà nextSibling\previousSibling ove occorre con nextElementSibling\previousElementSibling.
· non è possibile accedere ad attributi HTML custom come se fossero proprietà esplicite dell’elemento HTML:

elementoHTML.attributoCustom

Occore quindi riferirsi agli attributi HTML custom attraverso il metodo getAttribute come di seguito riportato

elementoHTML.getAttribute(“attributoCustom”)

Note per le installazioni di openwork® in versioni precedenti alla versione 5.8 patch 2

Per visualizzare correttamente le pagine web openwork® delle installazioni precedenti alla versione 5.8 patch 2 su client con browser Internet Explorer 9 è necessario, per ogni client, impostare la modalità compatibile come riportato da Microsoft al seguente link:

http://msdn.microsoft.com/en-us/library/dd567845(VS.85).aspx

Dopo aver impostato la modalità compatibile aprendo gli strumenti sviluppo di IE9 verificare che il parametro modalità browser sia settato a Visualizzazione Compatibilità IE9 come riportato in figura.


Troubleshooting

Di seguito sono riportate alcune delle possibili situazioni che possono verificarsi a seguito dell'installazione delle componenti client e le loro possibili modalità risolutive suddivise per tipologia di componente client:

· XML 4.0 Parser
· openwork® Web Client library
· openwork® Image Client library
· Adobe SVG Viewer
· openwork® Attachment Drag&Drop Library
· openwork® Digital Sign Library

XML 4.0 Parser

Messaggio: "Il sito WEB sta tentando di installare il componente aggiuntivo ‘Parser MSXML 4.0 SP2 Runtime’ da ‘NET Sistemi s.r.l.’ Se si considerano attendibili sia il sito che il componente, fare clic qui per consentire l’installazione"

Sintomo:

Durante l'installazione del componente XML 4.0 Parser , il setup mostra nella barra delle informazioni del browser il messaggio in oggetto.

Soluzione:

Scegliere l'opzione 'Installa' e proseguire con l'installazione.

Avviso di sicurezza: "Eseguire il software? Nome: ‘Parser MSXML 4.0 SP2 Runtime’ Autore: ‘NET Sistemi s.r.l.’ "

Sintomo:

Durante l'installazione del componente XML 4.0 Parser , il setup mostra nella barra delle informazioni del browser il messaggio in oggetto.

Soluzione:

Scegliere l'opzione 'Esegui' e proseguire con l'installazione.

Messaggio Controllo dell'account utente: "Consentire al programma corrente di apportare modifiche al computer? Nome programma: ‘Parser MSXML 4.0 SP2 Runtime’ Autore verificato: ‘NET Sistemi s.r.l.’ Origine file: 'Scaricato da internet'."

Sintomo:

Durante l'installazione del componente XML 4.0 Parser , il setup mostra nella barra delle informazioni del browser il messaggio in oggetto.

Soluzione:

Inserire la password di amministratore, scegliere l'opzione 'Si' e proseguire con l'installazione.

Messaggio Controllo dell'account utente: "Per continuare è necessaria l'autorizzazione dell'utente. Se l'azione è stata iniziata dall'utente continuare"

Sintomo:

Durante l'installazione del componente XML 4.0 Parser , il setup mostra nella barra delle informazioni del browser il messaggio in oggetto.

Soluzione:

Scegliere l'opzione 'Continua' e proseguire con l'installazione.

Messaggio: "Le impostazioni della Intranet sono ora disattivate per impostazione predefinita. Tali impostazioni sono un po' meno sicure rispetto a quelle di Internet. Fare click qui per ulteriori opzioni..."

Sintomo:

Durante l'installazione del componente XML 4.0 Parser , il setup mostra nella barra delle informazioni del browser il messaggio in oggetto.

Soluzione:

Cliccare sul messaggio nella barra informazioni, e selezionare la voce “NON VISUALIZZARE PIÙ QUESTO MESSAGGIO”. Proseguire con l'installazione.

Messaggio: "Non è presente la libreria Microsoft XML Parser nella versione richiesta. Per installare fare click su Installa e scegliere Apri"

Sintomo:

Durante l'installazione del componente XML 4.0 Parser , il setup mostra una finestra riportante il messaggio in oggetto.

Soluzione:

Scegliere l'opzione 'Installa'. Una nuova finestra chiede se eseguire o salvare il file msxml.MSI. Scegliere 'Esegui' e proseguire con l'installazione. Se al termine di queste operazioni, il messaggio in oggetto è ancora visibile effettuare il logout dalla piattaforma openwork® ed autenticarsi nuovamente. La componente Microsoft XML Parser risulterà correttamente installata.

openwork® Web Client library

Messaggio: "openwork® Web Client library. Componente necessario per la gestione di qualsiasi file allegato a documenti. Non correttamente installato oppure solo per Microsoft Internet Explorer 7, da abilitare manualmente alla comparsa della barra delle informazioni."

Sintomo:

Durante l'installazione del componente openwork® Web Client library, il setup mostra una finestra riportante il messaggio in oggetto.

Soluzione:

Scegliere l'opzione 'Installa' . Una nuova finestra chiede se eseguire o salvare il file owkclient.MSI. Scegliere 'Esegui' e proseguire con l'installazione. Se al termine di queste operazioni, il messaggio in oggetto è ancora visibile effettuare il logout dalla piattaforma openwork® ed autenticarsi nuovamente. La componente openwork® web client risulterà correttamente installata.

Messaggio: "Il sito WEB sta tentando di installare il componente aggiuntivo ‘openwork® Web Client library' da ‘NET Sistemi s.r.l.’ Se si considerano attendibili sia il sito che il componente, fare clic qui per consentire l’installazione"

Sintomo:

Durante l'installazione del componente openwork® Web Client library, il setup mostra nella barra delle informazioni del browser il messaggio in oggetto.

Soluzione:

Cliccare sulla barra delle informazioni e selezionare 'Installa componente aggiuntivo per tutti gli utenti del computer'

Nel caso in cui questa operazione è già stata effettuata Cliccare sul tasto 'Annulla', chiudere la finestra di caricamento con dicitura 'Attendere' e cliccare sulla barra delle informazioni selezionando la voce 'Esegui componente aggiuntivo su tutti i siti web'

Avviso di sicurezza: "Eseguire il software? Nome: ‘openwork® Web Client library’ Autore: ‘NET Sistemi s.r.l.’ "

Sintomo:

Durante l'installazione del componente openwork® Web Client library, il setup mostra nella barra delle informazioni del browser il messaggio in oggetto.

Soluzione:

Scegliere l'opzione 'Esegui' e proseguire con l'installazione.

Avviso di protezione: "Installare il software? Nome: ‘openwork® Web Client library’ Autore: ‘NET Sistemi s.r.l.’ "

Sintomo:

Durante l'installazione del componente openwork® Web Client library, il setup mostra nella barra delle informazioni del browser il messaggio in oggetto.

Soluzione:

Scegliere l'opzione 'Installazione' e proseguire con l'installazione.

Messaggio Controllo dell'account utente: "Consentire al programma corrente di apportare modifiche al computer? Nome programma: ‘openwork® Web Client library’ Autore verificato: ‘NET Sistemi s.r.l.’ Origine file: 'Scaricato da internet'."

Sintomo:

Durante l'installazione del componente openwork® Web Client library, il setup mostra nella barra delle informazioni del browser il messaggio in oggetto.

Soluzione:

Inserire la password di amministratore, scegliere l'opzione 'Si' e proseguire con l'installazione.

Messaggio di errore: "Il file da allegare non esiste: c:\fakepath\<<nomefile_da_allegare>>.<<ext>>"

Sintomo:

Durante l'operazione di allega file ad una form openwork® viene mostrato il messaggio di errore in oggetto.

Soluzione:

Cliccare su Ok. Il file non risulta allegato, chiudere la form di openwork® e seguire i passi:

1. Portarsi nel menù 'Strumenti' quindi voce 'Opzioni Internet' del browser Internet Explorer 8;

2. Cliccare sulla scheda 'Sicurezza' per visualizzare le opzioni di sicurezza del browser;

3. Cliccare su 'Livello personalizzato' al fine di impostare le opzioni che consentano ad openwork® di poter allegare i file alle form;

4. Nella sezione 'Varie', scegliere l’opzione “Includi il percorso locale durante il caricamento dei file in un server”, selezionare 'Attiva' e cliccare sul tasto OK;

5. Viene visualizzato il messaggio di conferma 'Modificare le impostazioni per quest'area?' scegliere 'Si' e cliccare su 'Ok'.

Terminate le operazioni suddette è possibile allegare un file ad una form di openwork®.

openwork® Image Client library

Avviso di sicurezza: "Eseguire il software? Nome: ‘openwork® Image Client library' Autore: ‘NET Sistemi s.r.l.’ "

Sintomo:

Durante l'installazione del componente openwork® Image Client library, il setup mostra nella barra delle informazioni del browser il messaggio in oggetto.

Soluzione:

Scegliere l'opzione 'Esegui' e proseguire con l'installazione.

Avviso di protezione: "Installare il software? Nome: ‘openwork® Image Client library’ Autore: ‘NET Sistemi s.r.l.’ "

Sintomo:

Durante l'installazione del componente openwork® Image Client library, il setup mostra nella barra delle informazioni del browser il messaggio in oggetto.

Soluzione:

Scegliere l'opzione 'Installazione' e proseguire con l'installazione.

Messaggio: "Il sito WEB sta tentando di installare il componente aggiuntivo ‘openwork® Image Client library' da ‘NET Sistemi s.r.l.’ Se si considerano attendibili sia il sito che il componente, fare clic qui per consentire l’installazione"

Sintomo:

Durante l'installazione del componente openwork® Image Client library, il setup mostra nella barra delle informazioni del browser il messaggio in oggetto.

Soluzione:

Scegliere 'Ok' e proseguire con l'installazione.

Messaggio: "openwork® Image Client library. Componente necessario per la gestione di qualsiasi file allegato a documenti. Non correttamente installato oppure solo per Microsoft Internet Explorer 7, da abilitare manualmente alla comparsa della barra delle informazioni."

Sintomo:

Durante l'installazione del componente openwork® Image Client library, il setup mostra una finestra riportante il messaggio in oggetto.

Soluzione:

Scegliere l'opzione 'Installa' . Una nuova finestra chiede se eseguire o salvare il file owkimage.MSI. Scegliere 'Esegui' e proseguire con l'installazione. Se al termine di queste operazioni, il messaggio in oggetto è ancora visibile effettuare il logout dalla piattaforma openwork® ed autenticarsi nuovamente. La componente openwork® Image Client library risulterà correttamente installata.

Messaggio Controllo dell'account utente: "Consentire al programma corrente di apportare modifiche al computer? Nome programma: ‘openwork® Image Client library’ Autore verificato: ‘NET Sistemi s.r.l.’ Origine file: 'Scaricato da internet'."

Sintomo:

Durante l'installazione del componente openwork® Image Client library, il setup mostra nella barra delle informazioni del browser il messaggio in oggetto.

Soluzione:

Inserire la password di amministratore, scegliere l'opzione 'Si' e proseguire con l'installazione.

Messaggio Controllo dell'account utente: "Per continuare è necessaria l'autorizzazione dell'utente. Se l'azione è stata iniziata dall'utente continuare"

Sintomo:

Durante l'installazione del componente openwork® Image Client library, il setup mostra nella barra delle informazioni del browser il messaggio in oggetto.

Soluzione:

Scegliere l'opzione 'Continua' e proseguire con l'installazione.

Messaggio: "Il componente openwork® Image Client Library non è installato correttamente o alcuni suoi componenti correlati non sono abilitati. Controllare che i componenti LEADTOOLS® e Microsoft® License Manager DLL siano abilitati"

Sintomo:

Il messaggio in oggetto viene visualizzato quando si tenta di aprire un file allegato di tipo immagine.

Soluzione:

Cliccare su Ok e chiudere openwork®. Successivamente svuotare la cache del browser ed aprire nuovamente il file immagine allegato alla form openwork®.

Messaggio: "Il sito WEB sta tentando di eseguire il componente aggiuntivo ‘DLL di Gestione licenze Microsoft@’ da ‘Microsoft Corporation’ Se si considerano attendibili sia il sito che il componente, fare clic qui per consentire l’esecuzione del controllo…"

Sintomo:

Il messaggio in oggetto viene visualizzato quando si tenta di aprire un file allegato di tipo immagine.

Soluzione:

Oltre al messaggio in oggetto viene visualizzato l'avviso 'La funzionalità richiesta necessita dell’installazione di un componente. Procedere con l’installazione?'. Seguire i passi:

1.Scegliere l'opzione 'Annulla';

2.Viene mostrato un messaggio di errore 'Il componente openwork® Image Client Library non è installato correttamente o alcuni suoi componenti correlati non sono abilitati. Controllare che i componenti LEADTOOLS® e Microsoft® License Manager DLL siano abilitati' cliccare su 'Ok';

3.Cliccare sulla barra delle informazioni e selezionare 'Esegui componente aggiuntivo su tutti i siti WEB';

4.Una nuova finestra richiede di eseguire il controllo ActiveX ‘DLL di Gestione licenze Microsoft®’ di ‘Microsoft Corporation, scegliere 'Esegui'.

5. Completare l'installazione, pulire la cache del browser e ed aprire nuovamente il file immagine allegato alla form openwork®.

Adobe SVG Viewer

Messaggio: "Non è stato rilevato il visualizzatore SVG Adobe: installarlo?"

Sintomo:

Il messaggio in oggetto viene visualizzato quando si tenta di aprire un'istanza di processo da browser e la componente Adobe SVG Viewer non è installata.

Soluzione:

Scegliere 'Ok' e proseguire con l'installazione. Se viene visualizzato il messaggio 'Per motivi di sicurezza, è stato bloccato il download del file dal sito. Fare clic qui per ulteriori opzioni…', cliccare sulla barra delle informazioni e selezionare 'Scarica file...'.

Proseguire scegliendo l'opzione 'Esegui' alla richiesta di voler eseguire o salvare il file SVG Viewer.exe. Durante l'installazione la componente di Windows User Account Control (UAC) può richiedere l’autorizzazione per consentire al programma di apportare modifiche al computer. Consentire l'installazione del programma.

Al termine dell'installazione la finestra web appare vuota tranne per due icone presenti nella barra in alto. La prima icona è utile ad eseguire il refresh della pagina, cliccare su di essa ed accettare il contratto di licenza del componente Adobe SVG Viewer.

Messaggio: "Per facilitare la sicurezza, è stata limitata la visualizzazione di alcune parti del contenuto del sito. Fare click qui per ulteriori informazioni..."

Sintomo:

Il messaggio in oggetto viene visualizzato nella barra delle informazioni quando si tenta di aprire un'istanza di processo da browser e la componente Adobe SVG Viewer non è installata.

Soluzione:

Cliccare sulla barra delle informazioni e selezionare "Componente aggiuntivo disattivato" quindi "Esegui componente aggiuntivo su tutti i siti WEB…" e proseguire con l'installazione.

Messaggio Controllo dell'account utente: "Consentire al programma corrente di apportare modifiche al computer? Nome programma: ‘SVGView.exe’ Autore verificato: 'Adobe Systems Incorporeted’ Origine file: 'Unità disco rigido del computer'."

Sintomo:

Durante l'installazione del componente Adobe SVG Viewer, il setup mostra nella barra delle informazioni del browser il messaggio in oggetto.

Soluzione:

Inserire la password di amministratore, scegliere l'opzione 'Si' e proseguire con l'installazione.

openwork® Attachment Drag&Drop Library

Messaggio Controllo dell'account utente: "Consentire al programma corrente di apportare modifiche al computer? Nome programma: 'openwork® Attachment Drag&Drop Library' Autore verificato: 'NET Sistemi s.r.l.’ Origine file: 'Scaricato da internet'."

Sintomo:

Durante l'installazione del componente openwork® Attachment Drag&Drop Library, il setup mostra nella barra delle informazioni del browser il messaggio in oggetto.

Soluzione:

Inserire la password di amministratore, scegliere l'opzione 'Si' e proseguire con l'installazione.

Messaggio: "openwork® Attachment Drag&Drop Library. Componente necessario per la gestione di qualsiasi file allegato a documenti. Non correttamente installato oppure solo per Microsoft Internet Explorer 7, da abilitare manualmente alla comparsa della barra delle informazioni."

Sintomo:

Durante l'installazione del componente openwork® Attachment Drag&Drop Library, il setup mostra una finestra riportante il messaggio in oggetto.

Soluzione:

Scegliere l'opzione 'Installa'. Una nuova finestra chiede se eseguire o salvare il file owkdragdrop.MSI. Scegliere 'Esegui' e proseguire con l'installazione. Se al termine di queste operazioni, il messaggio in oggetto è ancora visibile effettuare il logout dalla piattaforma openwork® ed autenticarsi nuovamente. La componente openwork® Attachment Drag&Drop Library risulterà correttamente installata.

Messaggio: "Il sito WEB sta tentando di installare il componente aggiuntivo ‘openwork® Attachment Drag&Drop Library' da ‘NET Sistemi s.r.l.’ Se si considerano attendibili sia il sito che il componente, fare clic qui per consentire l’installazione"

Sintomo:

Durante l'installazione del componente openwork® Attachment Drag&Drop Library, il setup mostra nella barra delle informazioni del browser il messaggio in oggetto.

Soluzione:

Cliccare sulla barra delle informazioni e selezionare 'ESEGUI COMPONENTE AGGIUNTIVO PER TUTTI GLI UTENTI DEL COMPUTER…' e proseguire con l'installazione.

Avviso di sicurezza: "Eseguire il software? Nome: ‘openwork® Attachment Drag&Drop Library' Autore: ‘NET Sistemi s.r.l.’ "

Sintomo:

Durante l'installazione del componente openwork® Attachment Drag&Drop Library, il setup mostra nella barra delle informazioni del browser il messaggio in oggetto.

Soluzione:

Scegliere l'opzione 'Esegui' e proseguire con l'installazione.

Avviso di protezione: "Installare il software? Nome: ‘openwork® Attachment Drag&Drop Library' Autore: ‘NET Sistemi s.r.l.’ "

Sintomo:

Durante l'installazione del componente openwork® Attachment Drag&Drop Library, il setup mostra nella barra delle informazioni del browser il messaggio in oggetto.

Soluzione:

Scegliere l'opzione 'Installazione' e proseguire con l'installazione.

openwork® Digital Sign Library

Messaggio: "Il sito WEB sta tentando di installare il componente aggiuntivo ‘openwork® Digital Sign Library' da ‘NET Sistemi s.r.l.’ Se si considerano attendibili sia il sito che il componente, fare clic qui per consentire l’installazione"

Sintomo:openwork® Digital Sign Library, il setup mostra nella barra delle informazioni del browser il messaggio in oggetto.

Soluzione:

Cliccare sulla barra delle informazioni e selezionare 'Installa il componente aggiuntivo per tutti gli utenti del computer…' per completare l'installazione.

Messaggio Controllo dell'account utente: "Consentire al programma corrente di apportare modifiche al computer? Nome programma: 'openwork® Digital Sign Library' Autore verificato: 'NET Sistemi s.r.l.’ Origine file: 'Scaricato da internet'."

Sintomo:

Durante l'installazione del componente openwork® Digital Sign Library, il setup mostra nella barra delle informazioni del browser il messaggio in oggetto.

Soluzione:

Inserire la password di amministratore, scegliere l'opzione 'Si' e proseguire con l'installazione.

Messaggio: "openwork® Digital Sign Library. Componente necessario per la gestione di qualsiasi file allegato a documenti. Non correttamente installato oppure solo per Microsoft Internet Explorer 7, da abilitare manualmente alla comparsa della barra delle informazioni."

Sintomo:

Durante l'installazione del componente openwork® Digital Sign Library, il setup mostra una finestra riportante il messaggio in oggetto.

Soluzione:

Scegliere l'opzione 'Installa'. Una nuova finestra chiede se eseguire o salvare il file OWKDS.MSI. Scegliere 'Esegui' e proseguire con l'installazione. Se al termine di queste operazioni, il messaggio in oggetto è ancora visibile effettuare il logout dalla piattaforma openwork® ed autenticarsi nuovamente. La componente openwork® Digital Sign Library risulterà correttamente installata.

Avviso di protezione: "Installare il software? Nome: ‘openwork® Digital Sign Library Autore: ‘NET Sistemi s.r.l.’ "

Sintomo:

Durante l'installazione del componente openwork® Digital Sign Library, il setup mostra nella barra delle informazioni del browser il messaggio in oggetto.

Soluzione:

Scegliere l'opzione 'Installazione' e proseguire con l'installazione.


Installazione di openwork® BPM Tools

Sul CD di openwork® è disponibile anche il setup di openwork® BPM Tools che consente la creazione e l'amministrazione delle applicazioni web basate sulla piattaforma.

Per effettuare l'installazione è sufficiente eseguire il file BPMTools.msi presente nella cartella. Accettati i termini della licenza, viene mostrata una maschera nella quale è possibile selezionare un volume e una cartella di destinazione diversa da quella di default, monitorare lo spazio occupato dall'installazione e quello disponibile sui dischi.

Setup19 - selectFolder

Proseguire l'installazione attraverso il tasto Avanti. Al termine viene mostrato un messaggio di conferma della corretta installazione.


Web Services

attenzione

Attenzione

Per consultare la documentazione dei web services fare riferimento al manuale dei web services disponibile nella sezione Risorse openwork, Sw e manuali del portale myopenwork.

I Web Services all'interno di una applicazione possono essere usati effettuando direttamente chiamate HTTP ai Web Services, quindi attraverso l'uso di pacchetti SOAP, oppure utilizzando le classi proxy che consentono di costruire e interpretare i dati XML scambiati tra il client e il server, attraverso una logica ad oggetti.

La conversione di XML in oggetti prende il nome di deserializzazione, il processo contrario serializzazione. Il codice delle classi proxy, nei più comuni linguaggi di programmazione, viene prodotto automaticamente per mezzo di utility disponibili per tutte le piattaforme.

Nel Framework .NET, dopo aver installato i Web Services Enchancements, per poter accedere direttamente all'envelope SOAP, è disponibile la classe HTTPSoapContext. L'utility messa a disposizione dal Framework è l'WSDL .

I Web Services sono stateless, per cui la sessione viene mantenuta attraverso un Token (chiave) che viene passato nell'intestazione del pacchetto SOAP. A tal proposito, prima di effettuare una chiamata al proxy, bisogna eseguire le seguenti istruzioni:

Dim header as OWKSoapHeader = new OWKSoapHeader()

header.key = Session("key")

proxy.OWKSoapHeaderValue = header

Dopo ogni chiamata invece è necessario memorizzare nella variabile di sessione il token:

Session("key") = proxy.OWKSoapHeaderValue.key

Quando la chiamata ai Web Services avviene con successo, il valore restituito è sempre 0 (cfr. Errori - Warning).

Per consultare l'elenco completo dei web services disponibili: http://<nomeconfig>/wsopenwork

E' possibile utilizzare metodi per:

· la gestione degli utenti (WSUser)
· la gestione dell'organizzazione (WSOrganizzation)
· la gestione dei documenti (WSDocument)
· la gestione delle attività (WSActivity)
· la gestione degli elenchi (WSList)
· l'amministrazione di autorizzazioni e profili (WSAdministration)
· l'utilizzo e la gestione dei job (WSJob)
· la gestione dei modelli di rendering delle form (WSModel). Per consultare l'elenco completo dei metodi disponibili: http://<nomeconfig>/wsopenwork/wsmodel.asmx
· la gestione del piano di classificazione (WSClassification). Per consultare l'elenco completo dei metodi disponibili: http://<nomeconfig>/wsopenwork/wsclassification.asmx


Errori - Warning

Se la chiamata viene eseguita con successo, il valore restituito dai Web Services è 0, diversamente restituiscono un codice compreso tra 1 e 171 nel caso di errore oppure un valore >= 1000 nel caso di warning.

La descrizione degli errori e dei warning viene restituita in una stringa passata per riferimento - ErrDescription -come ultimo argomento della chiamata .

Errori | Descrizione
1 | Err_Runtime - Errore di Runtime.
2 | Err_Automation - Errore di automazione.
3 | Err_DataBase - Errore di accesso al database.
4 | Err_XML - Errore nel parser XML.
5 | Err_NoLogin - Sessione non autorizzata o scaduta.
6 | Err_NoMoreLogins - Superato il numero massimo di sessioni attive.
7 | Err_UserDisabled - Operatore sospeso dall'uso del sistema.
8 | Err_NoRoles - Nessun ruolo definito per l'operatore.
9 | Err_NoAuth - Utilizzo della funzione non autorizzato.
10 | Err_BadParam - Parametri errati o insufficienti.
11 | Err_NoSchema - Non esite uno schema valido per il documento richiesto.
12 | Err_NoPerm - L'operatore non possiede i permessi necessari.
13 | Err_NoDocument - Manca il documento.
14 | Err_DocumentNotFound - L'oggetto specificato non è stato trovato.
15 | Err_LockedDocument - Documento aperto in un'altra sessione.
16 | Err_StoredDocument - Il documento specificato è archiviato e pertanto non è possibile apportarvi delle modifiche.
17 | Err_NotEditingDocument - Il documento non è in modifica nella sessione corrente.
18 | Err_FileNotFound - File non trovato.
19 | Err_FilePath - Errore di accesso al percorso/file.
20 | Err_Zip - Errore nelle routine di compressione/decompressione file.
21 | Err_IncompleteDocument - Documento non compilato correttamente.
22 | Err_ReferenceToDocument - Sono presenti uno o più riferimenti al documento o file specificato.
23 | Err_NoClassification - Piano di classificazione documentale non definito.
24 | Err_CantPublishOrgDiagram - Impossibile pubblicare l'organigramma, ci sono sessioni attive.
25 | Err_OperatorNotFound - Operatore non presente o non abilitato.
26 | Err_ModelNotFound - Modello non esistente.
27 | Err_DocumentExists - Documento inesistente.
28 | Err_ActivityNotPresent - Attività inesistente
29 | Err_CantBookActivity - L'attività non è più in attesa di prenotazione.
30 | Err_CantBookActivityNoPart - L'operatore non è tra i partecipanti dell'attività
31 | Err_CantBookActivityNoSelectedPart - L'operatore selezionato non è tra i partecipanti dell'attività.
32 | Err_ScriptAfterBookOnServer -Errore nella esecuzione sul server dello script dopo la prenotazione.
33 | Err_NotPublished - Il modello non è pubblicato.
34 | Err_BadFileFormat - Formato del file non corretto.
35 | Err_HTMLModelParseErrors
36 | Err_CantExecuteActivity - L'attività non può essere eseguita
37 | Err_IsNotUser - L'attività è assegnata ad un altro operatore.
38 | Err_MustExecuteSameSession - L'attività può essere rieseguita solo nella stessa sessione.
39 | Err_CantContinueExecution - L'esecuzione dell'attività non può essere continuata.
40 | Err_ProcessStopped - Il processo è terminato.
41 | Err_BadFolder - Fascicolo non esistente o archiviato.
42 | Err_OperationNotAllowed - L'operazione non è consentita.
43 | Err_IsNotUser1 - Modello non esistente.
44 | Err_WrongUser - L'operazione richiesta non può essere eseguita da questo utente.
45 | Err_IsNotUserTransfer - L'utente non è colui che ha in carico l'attività o un suo sostituto.
46 | Err_NumerationFailed - Operazione di numerazione non riuscita.
47 | Err_NumerationLocked - Numerazione bloccata.
48 | Err_NumerationRules - Errore nella definizione delle regole di numerazione.
49 | Err_Duplicate -Valore duplicato.
50 | Err_SystemDisabled - Accesso al sistema disabilitato.
51 | Err_DuplicatedValue -Valore duplicato non ammesso per il campo.
52 | Err_WorkFlowDisabled - Modulo di gestione workflow non abilitato.
53 | Err_SystemSuspended - L'accesso al sistema per gli operatori è sospeso.
54 | Err_CantCompleteActivity - L'operazione non può essere eseguita manualmente.
55 | Err_LicenseLimit - L'operazione non è consentita con le attuali condizioni di licenza..
56 | Err_CheckOut - Esiste un check-out attivo sul documento.
57 | Err_UndefinedSource - Origine dati non trovata o non definita correttamente.
58 | Err_CantEditOrg - Organigramma in modifica da.
59 | Err_NoClient - Utente di anagrafica non definito.
61 | Err_RoleAssigned - Ruolo già assegnato all'operatore.
62 | Err_NoRole - Ruolo non definito o obsoleto.
63 | Err_NoUser - Operatore non definito o obsoleto.
64 | Err_NoOffice - Unità organizzativa non definita o obsoleta.
65 | Err_RoleOfficeAssigned - Ruolo già assegnato all'unità organizzativa.
66 | Err_OfficeExist - Unità organizzativa esistente.
67 | Err_NoGroup - Modello non esistente.
68 | Err_UserAlreadyInsertedInGroup - Operatore già inserito nel gruppo.
69 | Err_GroupOrUserNotExist - Il gruppo non esiste o l'operatore non è inserito nel gruppo.
70 | Err_EnableToRemoveRoot - Impossibile eliminare la root dell'organigramma.
71 | Err_WrongUserOnSkipBooked - L'attività può essere saltata solo da colui che la ha in carico o da un suo sostituto.
72 | Err_WrongUserOnSkipWaiting - L'attività può essere saltata solo da un partecipante o da un sostituto di un partecipante.
73 | Err_BadStatus - Operazione non consentita causa l'attuale stato dell'attività.
74 | Err_NoWorkCopy -Non esiste la copia di lavoro.
75 | Err_NoPublishedCopy -Non esiste la copia pubblicata.
76 | Err_ReadOnlyDocument -Il documento specificato non è modificabile.
77 | Err_NotEmpty - La directory non è vuota.
78 | Err_LockedResources - L'operazione non è consentita perchè sono presenti delle risorse bloccate..
79 | Err_BadDocumentStatus -L'operazione non è compatibile con lo stato del documento.
80 | Err_OwkOpticalStore
81 | Err_LicenseViolation - Operazione interrotta, rilevata incongruenza con le attuali condizioni di licenza..
82 | Err_External - Errore nell'applicazione esterna.
83 | Err_NoProcessModel - Modello di processo non esistente.
84 | Err_TerminationDate - E' stata rilevata una incongruenza nelle date di scadenza..
85 | Err_CantAssignActivity - L'attività può essere assegnata solo da un responsabile tra i partecipanti o da un suo sostituto.
86 | Err_WrongUserOnTransfer - Identificativo operatore a cui trasferire l'attività uguale a quello dell'operatore che attualmente ha in carico l'attività o errato.
87 | Err_ScriptInitialize - Errore in inizializzazione script.
88 | Err_ScriptExecution - Errore in esecuzione script.
89 | Err_WrongDataField - Datafield non corretto.
90 | Err_BusyDocument - Ci sono delle attività in corso sul documento specificato.
91 | Err_RevisionedDocument - Il documento specificato è già revisionato.
92 | Err_NoManualStart - l processo non può essere avviato manualmente.
93 | Err_NotAllowedByClassification - Accesso non consentito nella definizione del piano di classificazione documentale.
94 | Err_OfficeCompetence - Il documento richiesto è di competenza di un ufficio diverso da quello dell'operatore.
95 | Err_UserCompetence - Il documento richiesto non è di competenza dell'operatore.
96 | Err_InadeguateData - I dati forniti sono insufficienti.
97 | Err_CantDelete - Impossibile eliminare l'elemento.
98 | Err_InvalidPath
99 | Err_BadData
100 | Err_WrongLogin - Nome operatore o password non validi..
101 | Err_WrongAuthDefinition - Impostazioni di autenticazione non corrette.
102 | Err_NotInitialized - L'oggetto non è stato inizializzato correttamente.
103 | Err_ProcessNotPaused - Il processo non è in pausa.
104 | Err_ProcessInEditing - Il processo è in fase di editing.
105 | Err_SingleInstance - Non è possibile creare più di una istanza del processo.
106 | Err_MainProcessNotActive - Il processo principale non è attivo.
107 | Err_MsgAlreadyInQueue - Il messaggio è già accodato.
108 | Err_MsgNotCorrect - Alcuni elementi del messaggio non sono stati definiti correttamente..
109 | Err_MsgIllegalAttachment - Errore nella definizione dell'allegato.
110 | Err_MsgAlreadySent - Il messaggio è già stato inviato.
111 | Err_MsgIncoming - Il messaggio è in entrata.
112 | Err_InsInProgress - Aggiunta record in corso.
113 | Err_TemplateNotFound - Template non trovato.
114 | Err_InsRow - Impossibile inserire la riga.
115 | Err_FieldWriteProt - Il campo non è modificabile.
116 | Err_NoTransition - Nessuna transazione in corso.
117 | Err_FileAlreadyAttached - File già allegato.
118 | Err_CannotDeleteFile - Impossibile eliminare il file.
119 | Err_FileNotAttached - Modello non esistente.
120 | Err_ImpSave -Impossibile salvare.
121 | Err_OnLastVersion - La proprietà è impostabile solo sull'ultima versione.
122 | Err_ObsoleteModel - Il modello è obsoleto.
123 | Err_DocumentNotNew - l documento non è nuovo.
124 | Err_EditingDocument - Il documento è in modifica.
125 | Err_DocAlreadyNum - Documento già numerato.
126 | Err_DocNotArchived - Il documento non è archiviato.
127 | Err_CannotStoreDocument - Impossibile archiviare il documento.
128 | Err_CannotDuplicateDocument - Impossibile duplicare il documento.
129 | Err_CannotDuplicateFields - Impossibile duplicare alcuni campi del documento.
130 | Err_DocRevision - Impossibile creare una revisione del documento.
131 | Err_CannotDuplicateAttachments -Impossibile duplicare i file allegati.
132 | Err_CannotSetProperty - La proprietà non é impostabile per questo tipo di scheda.
133 | Err_WrongExtension - L'estensione del file non è corretta.
134 | Err_JobNotCompletedNotExist - Job non terminato o inesistente.
135 | Err_JobDir - Job directory non definita.
136 | Err_CannotGetResult - Impossibile reperire il risultato.
137 | Err_ActivityWithoutExpDate - Si fa riferimento ad una attività di cui non è determinata la data di completamento.
138 | Err_ImpToGetDocDate - Impossibile prelevare la data dal documento che ha avviato il processo.
139 | Err_AbsParticipants - Nei partecipanti assoluti ammessi solo gruppi, ruoli, uffici o operatori.
140 | Err_InvalidProperty - Proprietà non valida per questo tipo di oggetto.
141 | Err_WithoutPartecipents - L'attività non ha partecipanti.
142 | Err_AndWithoutSource - Un nodo 'AND' deve essere necessariamente attivato da una origine.
143 | Err_BadValue - Valore non consentito per lo stato dell'attività.
144 | Err_NoActivityDoc - Nessun documento associato all'attività.
145 | Err_ScriptClient - Lo script non può essere eseguito sul client.
146 | Err_NoScript - Non è stato definito lo script per una o più condizioni.
147 | Err_ProcessNotActive - Il processo non è attivo.
148 | Err_UnexistingProfile - Profilo inesistente o non trovato.
149 | Err_CannotBeIgnored
150 | Err_ActivityLink - L'attività non ha un solo link in entrata o ha più di un link in uscita.
151 | Err_SystemActivity - L'attività può essere completata solo dal Sistema.
152 | Err_ActivityInWaiting - Operazione non consentita in quanto l'attività è in attesa di essere attivata.
153 | Err_NotAllowedOnActivity - Operazione non consentita su questa attività.
154 | Err_EditingInstance - L'istanza di processo è in editing, l'attività non può essere replicata.
155 | Err_InvalidSelection - Selezione non valida.
156 | Err_UnexistingVariable - Variabile inesistente.
157 | Err_InResponse - Errore nella risposta.
158 | Err_BadConfOrgName - Configurazione errata: il nome dell'organizzazione non è corretto.
159 | Err_CompressionNotSupported - Tipo di compressione non supportato.
160 | Err_NoRepository - Repository non specificato.
161 | Err_RepositoryNotSupported - Repository non supportato.
162 | Err_RepositoryNotCorrect - Repository non corretto.
163 | Err_DBnotSupported - Tipo database non supportato.
164 | Err_DBnotSpecified - Tipo database non specificato.
165 | Err_NoConf - Nessuna configurazione presente o abilitata.
166 | Err_DBnoName - Nome database non specificato.
167 | Err_DBnoServer - Server di database non specificato.
168 | Err_DBnoFile - File di database non specificato.
169 | Err_DBnoUser - Utente database non specificato.
170 | Err_InvalidCharacters -Il documento contiene uno o più caratteri non validi.
171 | Err_BadFilter - Condizione non valida.

Warning | Descrizione
1001 | Warn_NeedChoice - È necessaria una scelta.
1002 | Warn_NotImplemented - Funzione non implementata.
1003 | Warn_LockedDocument - Documento bloccato o aperto in un'altra sessione, pertanto non è possibile apportavi modifiche.
1004 | Warn_StoredDocument - Documento già archiviato, pertanto non è possibile apportavi modifiche.
1005 | Warn_InvalidDocument - Documento non valido, pertanto non è possibile apportavi modifiche.
1006 | Warn_NotEditingDocument - Documento non è in modifica nella sessione corrente.
1007 | Warn_NoInputData - Non sono stati forniti i dati da processare.
1008 | Warn_CreatedDocument - Documento già disponibile.
1009 | Warn_PeSnotEquals - La copia di lavoro differisce dalla copia pubblicata.
1010 | Warn_OrgDiagram - Salvataggio dell'organigramma nonostante la presenza di alcune imprecisioni.
1011 | Warn_ExecutionError - Errore durante l'esecuzione dell'attività, per cui è necessario rieseguirla.
1012 | Warn_ReadOnly
1013 | Warn_NoData - Nessun dato presente.
1014 | Warn_NumerationNotLocked - È necessaria la chiusura del registro per poter utilizzare la funzione.
1015 | Warn_BusyDocument - Ci sono delle attività in corso sul documento specificato, pertanto non è possibile apportarvi modifiche.
1016 | Warn_ReadOnlyDocument - Documento non modificabile.
1017 | Warn_LicenseLimit - Operazione non consentita con le attuali condizioni di licenza.
1018 | Warn_DbDate - ATTENZIONE: la data del server e quella del database sono differenti.


Applicazione Web

L'architettura Web segue il principio della separazione tra dati e presentazione; essa è costituita da un'applicazione lato server (realizzata in tecnologia Microsoft .NET) e da moduli javascript e xsl eseguiti sul client.

L'applicazione web lato server è una delle possibili applicazioni client dei Web Services di openwork®.

Nella directory dell'applicazione web è presente il file web.config nel quale vengono memorizzate tutte le informazioni relative alla configurazione (cfr. Configurazione); nella directory sono presenti inoltre cartelle custom e cartelle proprietarie.

La cartella libraries è una cartella proprietaria suddivisa in sottocartelle che contengono immagini, moduli javascript e template XSL utilizzati per la visualizzazione delle pagine (cfr. Thick client).

La cartella clibraries è una cartella custom suddivisa in sottocartelle che contengono immagini, moduli javascript e template XSL non proprietari. In questo modo è possibile estendere le funzionalità dell'applicazione realizzando nuove pagine. E' sempre consigliabile scrivere le funzioni javascript o i template XSL all'interno delle cartelle custom piuttosto che in quelle proprietarie, poiché le cartelle custom non vengono mai sovrascritte da eventuali aggiornamenti dell'applicazione. Le sottocartelle incluse sono:

· cimages - Contiene le immagini custom, in particolare:

cimages/actions: comprende le immagini associate alle azioni custom.cimages/document contiene le immagini custom associate a controlli di tipo Anagrafica e Documento.

cimages/extensions: comprende le immagini utilizzate per visualizzare gli allegati all'interno di una form , in base all'estensione dell'allegato.

· clibraries - Contiene i file menu/menu.js, table/table.js, document/document.js, common/common.js in cui è possibile inserire codice javascript utilizzato rispettivamente dalla pagina principale, dagli elenchi, dai documenti e dall'intera applicazione e i file common/common.xsl, document/document.xsl, table/table.xsl in cui inserire template XSL da richiamare nei modelli.
· css - Contiene i fogli di stile che definiscono il layout grafico (colore, bordi, stampa, etc…) delle pagine dell'applicazione, sia in visualizzazione normale che in stampa (quelli per la stampa iniziano con la lettera p): document.css e pdocument.css per le form, table.css e ptable.css per gli elenchi, menu.css per il desktop.
· desktop - Contiene le sottocartelle in cui sono memorizzate le informazioni per il desktop.
· desktop/toolbars - Contiene i file toolbar1.inc e toolbar2.inc, cioè codice HTML utilizzato come intestazione nelle pagine di login, di errore e di cambio password,nonché le relative immagini.

Tutte le pagine che compongono l'Applicazione Web (desktop, elenco, piano di classificazione, attività,organigramma) sono renderizzate in HTML a seguito di una trasformazione XSL sull'XML.

In particolare il flusso sottostante mostra quello che avviene quando il client inoltra una richiesta server:

· Il client richiede Web Server l'apertura di una form (richiama una pagina aspx con opportuni parametri).
· Il Web Server chiede ad un opportuno Web Service i dati.
· Il Web Service restituisce i dati al Web Server in formato XML.
· Nei dati è presente il riferimento a un foglio di stile in cui sono codificate le regole per la rappresentazione dei dati richiesti; il Web Server verifica se il foglio di stile è presente nell'apposita directory dell'applicazione e, qualora non lo fosse, lo richiede ad un altro Web Service.
· Il Web Server invia al client i dati XML con il riferimento al foglio di stile.
· Il client (browser) esegue la trasformazione XSL sull'XML ricevuto e visualizza il codice HTML.
· Il contenuto della form può essere eventualmente modificato lato client; quando l'operatore decide di salvare i dati, un'apposita funzione javascript produce un pacchetto SOAP contenente i dati modificati che invia al Web Server.
· Il Web Server provvede a instradare tali dati al Web Service, tramite ws-addressing e ws-referral.


Configurazione

La configurazione dell'applicazione web è indicata nel file web.config presente nella root.

Il web.config è un file di configurazione dell'applicazione diviso in sezioni, ciascuna della quali ha un compito ben preciso: infatti, attraverso la valorizzazione degli elementi o degli attributi XML del file, è possibile configurare alcune delle caratteristiche dell'applicazione web (sicurezza, lingua predefinita, etc).

E' possibile distinguere due parti principali del web.config:

       <system.web> : sono riportate le informazioni relative alle varibili di configurazione

       <appSettings>: sono riportate le informazioni relative al funzionamanto dell'applicazione

Verranno analizzati in dettaglio gli elementi e gli attributi del file nelle seguenti sezioni:

· Codifica dei caratteri
· Autenticazione ed accesso
· Pagina di login
· Pagina di default
· Indirizzo web server
· Server dei web services
· Impostazioni titolario/piano di classificazione
· Modalità di fascicolazione
· Sessione sicura


Codifica dei caratteri

Nella sezione in cui sono riportate le informazioni relative alle varibili di configurazione (<system.web>), gli attributi requestEncoding e responseEnconding devono essere sempre impostati su utf-8 nel tag <globalization> per specificare la codifica utilizzata.

         <system.web>

   <globalization requestEncoding="utf-8" responseEncoding="utf-8"/>

         .

                     .

          </system.web>

Il cambiamento di questi attributi può provocare anomalie nella rappresentazione dei caratteri all'interno del browser.


Autenticazione ed accesso

In tema di autenticazione, è opportuno rammentare che l'applicazione web è un client dei Web Services (o della logica applicativa); loggarsi nell'applicazione web non coincide quindi con il loggarsi nei Web Services:

· loggarsi nei Web Services, tramite l'indicazione di username e password (o in alcuni casi solo dello username), corrisponde ad acquisire le credenziali per poter eseguire metodi diversi da quello di login. Il login avviene tramite l'esecuzione del metodo login del Web Services wsuser che restituisce un token da passare alle successive chiamate ai Web Wervices;
· loggarsi nell'applicazione web significa acquisire credenziali sufficienti per consultare le pagine dell'applicazione mantenendo nel contempo attiva una sessione web; ciò può avvenire tramite meccanismi di vario tipo che possono coinvolgere – fra gli altri – anche apparati di sicurezza "di sistema" (ASP.NET, sistema operativo, etc.).

Nel tag <authentication> del file web.config è specificato l'attributo mode che identifica la modalità di autenticazione:

<authentication mode="Forms">

     <forms name=".OPENWORK" loginUrl="login.aspx"

            protection="All" timeout="60" path="/">

     </forms>

</authentication>

I meccanismi di autenticazione nella piattaforma openwork® sono None, Forms, Windows, Custom e si possono impostare da openwork® Server Manager


None

Non è utilizzato alcuno dei meccanismi di autenticazione integrati in ASP.NET o nel sistema operativo;

l'autenticazione avviene esclusivamente sui web services.

Effettuata una qualunque richiesta ai web services, questi restituiscono il token di sessione che deve essere gestito da un'applicazione sviluppata specificatamente dal customizzatore.

Se la pagina richiesta è la pagina di login, una volta loggati si viene reindirizzati sulla pagina di default.

Se è richiesta una pagina diversa da quella di login, dopo essersi loggati tramite la pagina di login si viene reindirizzati sulla pagina richiesta.


Forms

É la modalità predefinita. Si utilizza un meccanismo di autenticazione basato su cookie.

Se la pagina richiesta è la pagina di login una volta loggati si viene reindirizzati sulla pagina di default.

Se è richiesta una pagina diversa da quella di login, dopo essersi loggati tramite la pagina di login si viene reindirizzati sulla pagina richiesta.


Windows

Questa modalità d'accesso prevede l'utilizzo dei meccanismi di autenticazione di Windows, per cui l'operatore in Windows piuttosto che sull'applicazione web.

Se tale modalità è attiva, per autenticarsi su openwork® è sufficiente inserire nella pagina di login dell'applicazione web solo lo username dell'operatore loggato in Windows.

Tale forma di login su openwork® – denominata trusted – viene automaticamente impostata sui web services, quando si seleziona in openwork®.

Per abilitare la modalità Windows è necessario:

· Disabiltare l'Accesso Anonimo e abilitare Autenticazione Integrata di Windows

(Da Strumenti di Amministrazione -> Internet Information Services -> Applicazione web openwork® -> Proprietà -> Protezione directory -> Modifica).

· Verificare le impostazioni del browser. In IE6 bisogna assicurarsi che:
1. sia abilitata l'impostazione di protezione Abilita autenticazione di Windows

(Da Opzioni Internet -> Avanzate -> Sezione Protezione)

2. non sia abilitata l'impostazione di accesso Accesso Anonimo per l'Area di contenuto Web

(Internet, Intranet o Siti Attendibili)

(Da Opzioni Internet -> Protezione -> Area di contenuto Web di openwork®)


Custom

Questa modalità permette la verifica dell'account su un sistema custom. Essa prevede che richiamando qualunque pagina dell'applicazione, username e password siano risolti dalla seguente funzione:

      Validate(ByRef Username, ByRef Password, ByRef Errdescription) as integer

della classe CustomAccounting definita nell'assembly Openwork.WebServer.Custom.dll.

Se è stata definita una pagina di default custom, bisogna implementare la funzione customsoaperror.

Per utilizzare la modalità di autenticazione Windows, è necessario che sia attivo il modulo openwork® Authentication


Pagina di login

La login.aspx rappresenta la pagina attraverso la quale è possibile effettuare l'autenticazione.

In particolare, per la modalità di autenticazione Custom, è possibile cambiare l'impostazione predefinita

inserendo nell'elemento <appSettings> il seguente elemento XML:

<add key="loginPage" value="uri" />

ove uri è l'indirizzo assoluto o relativo della pagina di login.

Dopo aver effettuato l'autenticazione, il web browser visualizza in una pagina le principali informazioni sull'operatore: ruolo, numero progressivo di accesso, data di ultimo accesso, numero di messaggi, numero di sessioni attive.

È possibile fare in modo che si passi direttamente alla pagina di default inserendo il seguente elemento XML nel tag <appSettings>:

                       <add key="noLoginData" value="1"/>


Pagina di default

La pagina default.aspx rappresenta la pagina di default.

È possibile modificare tale impostazione inserendo il seguente elemento XML nel tag <appSettings>:

<add key="defaultPage" value="uri"/>

ove uri è l'indirizzo assoluto o relativo della pagina di default.


Indirizzo web server

Alcune architetture di rete potrebbe verificarsi che l'indirizzo con cui il client vede il web server non è lo stesso da cui il webserver vede provenire le chiamata.

Per quanto concerne l'applicazione web lato client di openwork®, è necessario, per eseguire correttamente le trasformazioni XSL, di conoscere l'indirizzo assoluto di alcuni documenti XML ausiliari.

Affinchè l'idirizzo assoluto possa essere compilato correttamente, è possibile specificare il seguente elemento XML nel tag <appSettings> :

<add key=" WebServer" value="uri" />

ove uri è l'indirizzo con cui il client vede il web server.


Server dei web services

Per indicare il server dei web services a cui l'applicazione web deve connettersi e il numero di configurazione, è necessario aggiungere i seguenti elementi XML nel tag <appSettings>:

<add key=" WebServiceServer" " value="uri"/>

<add key="ConfigId" value="n"/>

ove n è l'identificativo della configurazione.


Impostazione titolario/piano di classificazione

Mediante l'inserimento delle seguenti chiavi XML nel tag <appSettings> del file web.config, si può specificare il comportamento del piano di classificazione quando si effettua la selezione di un link. Nel dettaglio:

· L'elemento XML

                <add key="CloseClOnList" value="1"/>

determina se quando si apre il piano di classificazione in modalità lista la finestra che mostra il piano di classificazione deve chiudersi o meno dopo che è stata effettuata una selezione. Se CloseClOnList assume valore 0 la finestra non si chiude quando si seleziona una voce di classificazione e viene aperto l'elenco corrispondente. Diversamente se CloseClOnList assume valore 1 la finestra si chiude quando si seleziona una voce (default).

· L'elemento XML

<add key="CloseClOnNewDoc" value="1"/>

determina se quando si apre il piano di classificazione in modalità creazione documento la finestra che mostra il piano di classificazione deve chiudersi o meno dopo che è stata effettuata una selezione. Se CloseClOnNewDoc assume valore 0 la finestra non si chiude quando si seleziona una voce di classificazione e viene aperta una nuova form (default). Diversamente se CloseClOnList assume valore 1 la finestra si chiude quando si seleziona una nuova tipologia di documento da creare.


Apertura Istanze di Form

Per le istanze di form, in fase di apertura, è possibile evitare messaggi di warning (istanza in modifica in un'altra sessione, ci sono delle attività in corso), inserendo il seguente elemento XML nel tag <appSettings>:

<add key="skipwarning" value="1"/>

In presenza di warning, l'istanza viene aperta in sola lettura.


Modalità di fascicolazione

Per le istanze di form è possibile fare in modo che, utilizzando la funzione di fascicolazione, sia visualizzato solo l'elenco dei fascicoli piuttosto che l'intero piano di classificazione. Per disabilitare l'utilizzo del Piano di Classificazione in fase di fascicolazione occorre aggiungere il seguente elemento XML nel tag <appSettings> del file web.config :

<add key="listOnInsFold" value="1"/>

Quando il valore di listOnInsFold è impostato a 1, in fase di fascicolazione, verrà aperto direttamente l'elenco dei fascicoli senza passare attraverso il Piano di Classificazione. Questo parametro può essere passato anche come query string e da codice.


Utility Drag & Drop

Mediante l'inserimento delle seguenti chiavi XML nel tag <appSettings> del file web.config, si può specificare se deve essere abilitata o meno l'utilty Drag & Drop nel web server. Nel dettaglio è possibile specificare questa impostazione tramite il valore della variabile DragDropDisabled come segue:

▪ se la variabile DragDropDisabled non è dichiarata (default) l'utility drag & drop è abilitata;
▪ se la variabile DragDropDisabled è dichiarata e l'attributo value è pari a zero value="0" l'utility drag & drop è abilitata;
▪ se la variabile DragDropDisabled è dichiarata e l'attributo value è diversa da a zero, allora l'utility drag & drop è disabilitata.

L'elemento XML utile a dichiarare la variabile DragDropDisabled è il seguente:

                <add key="DragDropDisabled" value="0"/>


Sessione sicura

In openwork® è possibile aumentare il livello di sicurezza della sessione web garantito da ASP.NET attivando un ulteriore meccanismo di verifica della sessione.

Questo meccanismo è di default disabilitato; è possibile abilitarlo specificando il seguente elemento XML nel tag <appSettings>

<add key="SecureSessionEnabled" value="1" />


Autorizzazioni e restrizioni di accesso

Concetti generali

Accedendo da BPM Tools alla voce Gestione delle autorizzazioni, disponibile sotto il menù Organizzazione è possibile gestire i seguenti tipi di autorizzazioni e restrizioni:

· Autorizzazioni sulle funzionalità proprietarie di piattaforma

Le autorizzazioni sulle funzionalità proprietarie di piattaforma stabiliscono se un operatore è in grado di eseguire operazioni specifiche disponibili in piattaforma, come ad esempio l'operazione di creazione di un documento. Ogni autorizzazione di questo tipo è identificata da un identificativo numerico (cfr. Autorizzazioni proprietarie e custom).

· Autorizzazioni Custom

Scegliendo nel BPM Tools la voce di menù Organizzazione -> Definizione di funzioni personalizzate, si possono impostare questo tipo di autorizzazione rappresentate da un identificativo numerico; ad esse non è associata alcuna funzionalità specifica, ma possono essere utilizzate per implementare logiche custom in quanto risolte nel profilo utente.(cfr. Autorizzazioni proprietarie e custom).

· Restrizioni di accesso definite da profilo utente

Stabiliscono se un operatore può accedere all'elenco e/o al dettaglio degli archivi documentali openwork®. Ad esempio attraverso queste restrizioni si può stabilire se un operatore può accedere all'elenco di tutti i protocolli in entrata (cfr. Restrizioni di accesso definite da profilo utente). A questo tipo di restrizioni di accesso appartengono anche le proprietà specifiche di operatore come ad esempio la lingua del sistema di default o la sua disattivazione.

· Restrizioni periodiche di accesso

Stabiliscono una restrizione temporale per un operatore che può accedere all'elenco e/o al dettaglio degli archivi documentali openwork®. Ad esempio attraverso queste restrizioni si può stabilire se un operatore può accedere solo all'elenco di tutti i protocolli in entrata disponibili nel sistema a partire dagli ultimi due mesi (cfr. Restrizioni periodiche).

Il concetto fondamentale relativo i criteri di accesso ai documenti in openwork® è la distinzione fatta tra accesso in elenco e accesso in dettaglio.
Per entrambe le categorie, i criteri di accesso possono essere definiti a due livelli:

· a livello di profilo utente (di operatore, ruolo, ufficio, gruppo).
· a livello di piano di classificazione. Quelle eventualmente definite a livello del piano di classificazione hanno precedenza sulle altre.

E' possibile definire i criteri di accesso ai documenti da almeno due diverse sezioni del sistema:

· Strumento Gestione delle autorizzazioni sezione Accessi dal menù Organizzazione del BPMTools (impostazione dei criteri di accesso a livello di profilo utente)

CA01 - authorization

· Proprietà di una voce di classificazione per ciascuna tipologia di documento definito (impostazione dei criteri di accesso a livello di piano di classificazione)

CA02 - property

Ulteriori approffondimenti sui criteri di accesso ai documenti sono disponibili nel paragrafo cfr. Criteri di accesso ai documenti mentre per approfondimenti sui criteri di accesso ai fascicoli riferirsi al paragrafo cfr. Criteri di accesso ai fascicoli.


Autorizzazioni proprietarie e custom

Le autorizzazioni sulle funzionalità proprietarie di piattaforma e custom possono essere assegnate ad operatori (intesi come elementi di anagrafica, a prescindere dall'inserimento in organigramma), ruoli (posizioni organizzative), uffici (unità organizzative) e gruppi.

La figura che segue riporta evidenziate nei riquadri rossi le voci di menù utili ad impostare le autorizzazioni sulle funzionalità proprietarie di piattaforma e nel riquadro verde la voce di menù utile ad impostare le autorizzazioni custom.

CA06 - authorization

Per creare una nuova autorizzazione custom occorre accedere da BPM Tools alla voce Organizzazione, quindi Definizione autorizzazioni personalizzate.

Per capire come vengono calcolate le autorizzazioni che divengono effettive al momento del login dell'operatore bisogna basarsi sulle seguenti regole:

- ogni autorizzazione, assegnata ad un elemento organizzativo specifico, può essere:

· assegnata ovvero

concessa, il valore dell'autorizzazione è pari ad AUTORIZZATO.

negata il valore dell'autorizzazione è pari a NON AUTORIZZATO.

· non definita ovvero neutra;

- ogni autorizzazione è indipendente dalle altre e viene calcolata singolarmente;

- al momento del login dell'operatore in piattaforma, dopo aver scelto eventualmente il ruolo con cui operare, per il calcolo si considerano l'operatore, il ruolo e l'ufficio correnti ed i gruppi in cui questi sono inseriti;

- esiste una scala di importanza degli elementi organizzativi per quanto riguarda l'assegnazione delle autorizzazioni, che determina l'ordine di valutazione per l'autorizzazione risultante: una autorizzazione assegnata (concessa o negata) all'operatore ha la prevalenza sulla stessa autorizzazione assegnata al ruolo, la quale ha la prevalenza sulla stessa autorizzazione assegnata all'ufficio, la quale ha la prevalenza sulla stessa autorizzazione assegnata ad un gruppo;

- se si arriva a valutare l'autorizzazione assegnata ai gruppi (e quindi non è stata assegnata a nessuno tra operatore, ruolo e ufficio) vale l'assegnazione meno restrittiva, ossia: se l'autorizzazione viene concessa ad un gruppo e negata ad un altro, questa si considera concessa;

- se dopo l'applicazione di queste regole una autorizzazione non risulta assegnata a nessun elemento, allora si considera negata;

- NON esiste ereditarietà sull'assegnazione delle autorizzazioni: ad esempio, se una autorizzazione viene assegnata ad un ufficio, questa NON viene ereditata dagli uffici sottostanti/contenuti.


Restrizioni di accesso definite da profilo utente

E' possibile impostare le autorizzazioni di accesso ai documenti in elenco e ai documenti in dettaglio a livello di profilo utente. Per fare ciò accedere all'area Gestione delle autorizzazioni sezione Accessi dal menù Organizzazione del BPMTools.

CA03 - authorizationSelect

Viene fatta distinzione tra l'accesso agli elenchi ed accesso ai dettagli, come mostrato in figura.

nota

Nota

Nel caso in cui sia impostato un criterio di numerazione del protocollo conforme alla normativa vigente (DPR 445/2000 e/o successivi), l'impostazione di accesso agli elenchi non ha effetto sull'elenco del protocollo generale che per legge deve essere visto comunque da tutti.

Nel panello mostrato in figura le opzioni che si trovano in alto sono più forti di quelle che si trovano in basso, per cui in un accesso di tipo Unità org. è compreso l'accesso di tipo Personali.

I tipi di accesso che è possibile specificare a livello di profilo utente sia per gli elenchi dei documenti che per i dettagli sono:

· Tutti i documenti - L'operatore può accedere a tutti i documenti dell'elenco e a tutti i documenti nel dettaglio;
· Unità org. e sotto unità - L'operatore può accedere ai documenti dell'unità organizzativa a cui appartiene e ai documenti di tutte le unità che dipendono da essa;
· Unità org. - L'operatore può accedere ai documenti dell'unità organizzativa a cui appartiene;
· Personali - L'operatore può accedere ai documenti di propria competenza.

Le restrizioni di accesso riguardano 2 ambiti:

- criteri di accesso ai documenti (suddivisi in elenco e dettaglio);

- accesso a funzionalità di tipo amministrativo.

Le restrizioni di accesso, analogamante alle autorizzazioni, si possono assegnare ad operatori, ruoli, uffici e gruppi.

Per capire come vengono calcolate le restrizioni che divengono effettive al momento del login dell'operatore in piattaforma bisogna basarsi sulle

seguenti regole:

- su ogni elemento organizzativo le restrizioni possono essere:

· definite
· non definite (dedotte da appartenenza gerarchica)

- al momento del login, dopo aver scelto eventualmente il ruolo con cui operare, per il calcolo si considerano l'operatore, il ruolo e l'ufficio correnti ed i gruppi in cui questi sono inseriti;

- vale il principio di ereditarietà: se le restrizioni non sono definite sull'operatore, allora si vede sul ruolo, poi sull'ufficio, si risale la gerarchia degli uffici fino a trovare un elemento su cui queste sono definite;

- se le restrizioni non sono definite sull'operatore, parallelamente alla ricerca sulla gerarchia si considerano le eventuali definizioni sui gruppi;

- se si considerano le definizioni sui gruppi, queste si sovrappongono a quelle eventualmente trovate nella gerarchia organizzativa e vale l'assegnazione meno restrittiva, ossia: se su un gruppo viene trovata una assegnazione meno restrittiva rispetto a quella trovata nella ricerca gerarchica, vale quella definita sul gruppo. Esempio: se nella ricerca gerarchica si trova per il criterio “Accesso agli elenchi” l'impostazione “Documenti personali”, mentre su un gruppo vi è l'impostazione “Tutti i documenti”, vale quest'ultima.

- se dopo l'applicazione di queste regole le restrizioni non risultano definite, allora si applicano i criteri più restrittivi.

Attribuire una competenza di uffici ad un documento

All'interno di ciascun modello di documento (sia di protocollo, sia di documento con serie numerica indipendente) è possibile inserire due campi di tipo Ufficio (office) che permettono di legare la competenza del documento all'ufficio. I due campi fanno parte dei modelli di document di default. Tuttavia non è obbligatorio inserirli, quindi possono essere eliminati dal modello di una certa tipologia di documento. In questo caso però il sistema non sarà in grado di conoscere la competenza per ufficio del documento. I campi devono avere

datafield = "ufficiocompetenza"

datafield = "ufficioprotocollo"

anche se il significato all'interno del documento può essere diverso da ciò che i nomi suggeriscono, come nell'esempio sotto riportato:

CA04 - officeField

il codice inserito nel modello per ottenere i due campi è il seguente:

<input type="text" owk:type="office" class="textbox" owk:locked="0" owk:buttonclass="button" owk:fieldname="ufficiocompetenza" owk:required="1"></input>

<input type="text" class="textbox" owk:buttonclass="button" owk:locked="0" owk:type="office" owk:fieldname="riassegnato_ufficio" owk:fieldname="ufficioprotocollo" owk:visible="1" owk:changeble="1" owk:secret="0" owk:required="0"/>

Nel primo campo non è stata assegnata la proprietà datafield in quanto il fieldname ha lo stesso nome del campo predefinito. Nel secondo caso invece il fieldname è diverso dal datafield : ciò esprime la volontà di "rinominare" il campo ufficio protocollo richiamandolo riassegnato_ufficio. Inoltre il campo riassegnato_ufficio verrà utilizzato dal sistema per legare il documento all'ufficio indicato nella fase di accesso al documento stesso: si è dunque utilizzato un legame con il campo predefinito ufficioprotocollo.

Attribuire una competenza di operatori ad un documento

All'interno di ciascun modello di documento (sia di protocollo, sia di documento con serie numerica indipendente) è possibile inserire un campo di tipo Operatore (user) ed uno di tipo Lista di operatori (userlist) che permettono di legare la competenza del documento a degli operatori. Non è obbligatorio inserirli nel modello ma se questo non avviene il sistema non è in grado di conoscere la competenza per operatori del documento e di conseguenza non potranno funzionare correttamente i criteri di accesso impostati nel profilo. I campi devono avere

datafield = "responsabile"

datafield = "listadistribuzione"

anche se il significato che gli si può attribuire potrà essere diverso da quello suggerito dai nomi responsabile e listadistribuzione. Ad esempio è possibile non inserire nel documento il campo relativo all'autore del documento (che non viene visualizzato dal sistema per attribuire competenza del documento in quanto è possibile che l'autore del documento non debba poi avere accesso al dettaglio dello stesso).

· L'operatore che viene inserito nel campo responsabile (che potrà anche essere gestito come campo invisibile ma automaticamente compilato a seconda dell'esigenze) avrà sempre accesso dettaglio al documento indipendentemente da qualsiasi altra impostazione.
· Tutti gli operatori che sono inseriti nel campo listadistribuzione accedono invece sempre al documento ma in sola lettura, a meno che non posseggano un'autorizzazione alla modifica impostata nel profilo utente (accesso al dettaglio del documento) o nel piano di classificazione (accesso in lettura/scrittura a quella specifica tipologia). E' chiaro che se queste caratteristiche non interessano, si possono non utilizzare nel modello HTML del documento i campi con datafield responsabile e listadistribuzione.
· Tutti gli operatori che vengono inseriti in un campo con datafield listadistribuzione avranno accesso al documento (a meno che non vengano invalidate da impostazioni di piano di classificazione che sono più forti come spiegato nel capito Criteri di accesso ai documenti).


Restrizioni periodiche

E' possibile impostare le restrizioni periodiche di accesso tramite l'area Gestione delle autorizzazioni sezione Restrizione periodiche dal menù Organizzazione del BPMTools.

CA07 - authorizationPer

Le restrizioni periodiche sono relative ai documenti che vengono inclusi negli elenchi e possono essere impostate solo sugli operatori.

Sono delle restrizioni temporali che vengono applicate a questi elenchi, in pratica costituiscono dei filtri sulla data dei documenti che vengono applicati in AND con tutti gli altri eventuali filtri. In particolare vengono applicati agli elenchi proprietari (esclusi elenco di Protocollo Generale, elenchi di documenti non pubblicati ed altri) e alle ricerche (listtype 10, 11, 12, 13, 14) su cui siano definiti applyfilters e datefield.


Restrizioni di accesso definite da piano di classificazione

E' possibile impostare le autorizzazioni di accesso ai documenti in elenco e ai documenti in dettaglio a livello di piano di classificazione. Le autorizzazioni di accesso definite a livello di piano di classificazione hanno precedenza su quelle definite a livello di profilo utente. Per definire le autorizzazioni da piano di classificazione accedere da menù del BPMTools a Dati e Documenti quindi selezionare Piano di classificazione dei documenti e cliccare col tasto destro sul documento che si desidera configurare per accedere alla sezione Proprietà.

CA02 - property

I campi della maschera di dettaglio utili a configurare le autorizzazioni di accesso ai documenti in elenco e in dettaglio sono:

· Creazione permessa a - Permette a ciascun operatore il cui riferimento è inserito in questo campo di creare un documento e classificarlo in una qualsiasi voce. Il valore di default del campo è Tutta l'organizzazione, per cui si consiglia di intervenire inserendo in tale campo gli operatori (tramite unità organizzative, ruoli o gruppi) che possono effettivamente creare quella tipologia di documento.
· Accesso in sola lettura a - Consente a ciascun operatore il cui riferimento è inserito in questo campo di accedere in sola lettura al documento. Il valore di default del campo è Tutta l'organizzazione.
· Accesso in lettura/scrittura a - Consente a ciascun operatore il cui riferimento è inserito in questo campo di accedere in lettura e scrittura al documento. Il valore di default del campo è Tutta l'organizzazione.

nota

Nota

Qualora i campi Accesso in sola lettura a ed Accesso in lettura/scrittura a contengano entrambi il valore di default Tutta l'organizzazione, per il criterio di accesso al dettaglio del documento restano valide le impostazioni che si possiedono a livello di profilo utente. Nel caso in cui anche uno solo dei due campi possieda una impostazione diversa da quella di default, per il criterio di accesso al documento non sono più valide le impostazioni di profilo bensì quelle definite nei campi.
· Visualizza in elenco a - Consente a ciascun operatore il cui riferimento è inserito in questo campo di visualizzare in elenco documenti di quel tipo. Il valore di default del campo è Tutta l'organizzazione.

Per i campi Accesso in sola lettura a, Accesso in lettura/scrittura a e Visualizza in elenco a e possibile selezionare la checkbox da profilo utente mediante la quale si può specificare che l'accesso non dipende da quanto specificato a livello di piano di classificazione, ma avverrà secondo le regole impostate nel profilo dell'utente (cfr. Restrizioni di accesso definite da profilo utente).


Criteri di accesso ai documenti

Autorizzazioni di accesso ai documenti in elenco

E' possibile impostare esplicitamente le modalità di visualizzazione dei documenti in elenco tramite la sezione Visualizza in elenco presente tra le proprietà di una voce di classificazione. Sempre in tali proprietà è anche presente una checkbox (con descrizione "da profilo utente") mediante la quale si può specificare che l'accesso non dipende da quanto specificato a questo livello, ma avverrà secondo le regole impostate nel profilo dell'utente; in pratica l'operatore vedrà i documenti di quel tipo che sono di sua pertinenza secondo quanto specificato nel suo profilo.

Se si sceglie di specificare delle regole di accesso a livello di una voce di classificazione, quello che si specifica come formula vale effettivamente; se si specifica "Tutta l'organizzazione", allora tutti gli operatori vedranno in elenco i documenti di quel tipo, se la formula è vuota nessuno li vedrà in elenco.

Oltre a quanto impostato in profilo o piano di classificazione, esiste la seguente regola: l'operatore vede sempre in elenco i documenti per cui è responsabile oppure è in lista di accesso.

Esistono inoltre 2 eccezioni a queste regole:

1. gli operatori inseriti nel ruolo "Amministratore di openwork®" vedono tutti i documenti in elenco;
2. l'elenco di Protocollo Generale non viene filtrato con questi criteri, poichè per legge l'elenco del protocollo generale dev'essere visto comunque da tutti.

Infine nella definizione di una ricerca è possibile includere o meno le regole di accesso, mediante opportuna configurazione (cfr. Definizione di una ricerca).

Autorizzazioni di accesso ai documenti in dettaglio

E' possibile impostare le modalità di accesso ai documenti in dettaglio tramite le sezioni Accesso in sola lettura e Accesso in lettura/scrittura presenti tra le proprietà di una voce di classificazione. Sempre in tali proprietà è anche presente una checkbox (con descrizione "da profilo utente") mediante la quale si può specificare che l'accesso non dipende da quanto specificato a questo livello, ma avverrà secondo le regole impostate nel profilo dell'utente; in pratica l'operatore vedrà i documenti di quel tipo che sono di sua pertinenza secondo quanto specificato nel suo profilo.
Le regole generali che determinano l'accesso ai documenti in dettaglio sono le seguenti:

· gli operatori inseriti nel ruolo "Amministratore di openwork®" (e/o equivalenti descrizioni) accedono in modifica a tutti i documenti;
· il responsabile del documento accede in modifica;
· gli utenti in lista di accesso accedono almeno in lettura;
· le impostazioni fatte a livello di profilo utente si riferiscono all'accesso in modifica;
· le impostazioni fatte a livello di piano di classificazione, se presenti (cioè se non si è specificato "da profilo utente"), hanno la precedenza rispetto a quelle fatte a livello di profilo (o meglio, le invalidano);
· le impostazioni riguardanti l'accesso in modifica e quelle riguardanti l'accesso in sola lettura vengono valutate separatamente; se entrambi i tipi di accesso sono concessi, l'accesso è in modifica;

Inoltre esistono le seguenti regole aggiuntive:

· se si sta eseguendo una attività che richiede l'apertura di un documento, l'accesso è garantito almeno in lettura;
· se si sta aprendo un documento al di fuori di una attività ed esistono delle attività attive a cui il documento è associato, se l'accesso al documento è concesso, è in sola lettura;
· se il documento che si sta aprendo è contenuto in uno o più fascicoli, l'accesso può essere concesso (in lettura) secondo le impostazioni delle voci di classificazione di ciascun fascicolo. Infatti per una tipologia di fascicolo è possibile impostare una tra le seguenti 3 opzioni:
1. chi accede al fascicolo accede a anche a tutti i documenti contenuti;
2. il responsabile del fascicolo accede a anche a tutti i documenti contenuti, per gli altri operatori si applicano le normali regole;
3. a tutti gli operatori che accedono al fascicolo si applicano le normali regole per l'accesso ai documenti contenuti in esso;
4. chi è autorizzato alla funzione "Supervisione pratiche/fascicoli" accede in modifica a tutti i fascicoli.

nota

Nota

Le tre sezioni che ora definiscono l'accesso ai documenti per una voce di classificazione (Visualizza in elenco, Accesso in sola lettura e Accesso in lettura/scrittura) sono completamente indipendenti tra di loro, cioè ciascuna di esse può essere definita come si vuole.

Autorizzazioni di accesso alle schede di anagrafica

Anche per le schede di anagrafica è possibile distinguere l'accesso alle schede di anagrafica in elenco e l'accesso alle schede di anagrafica in dettaglio. E' possibile mostrare in elenco tutte le schede di anagrafica (o quelle che si vuole) senza dover necessariamente concedere l'accesso al dettaglio della scheda. L'impostazione si effettua dalla sezione Visualizza in elenco presente nelle proprietà di una tipologia di anagrafica;per le schede di anagrafica non è possibile configurare i criteri di accesso a livello di profilo utente, quindi è possibile impostare una formula del tipo "Tutta l'organizzazione" o nessuno.

Autorizzazioni di accesso ai documenti derivanti dalle liste di accesso

E' possibili impostare le autorizzazioni di accesso ai documenti derivanti dalle liste di accesso tramite la sezione Sistema quindi Informazioni e Parametri generali del BPMTools, come descritto nel paragrafo cfr. Configurazione parametri generali.

Il protocollo riservato

Quando un protocollo viene generato tramite la funzione Protocollo Riservato, questa diventa una caratteristica del documento che, dal punto di vista degli accessi viene trattato come descritto:

· in elenco solo le informazioni riguardanti data e numero vengono mostrate in chiaro, le altre vendono nascoste attraverso i caratteri #########
· per poter accedere al dettaglio, fare riferimento alle autorizzazioni definite da piano di classificazione (Accesso in sola lettura a, Accesso in lettura/scrittura a, Visualizza in elenco a).


Criteri di accesso ai fascicoli

Potranno sempre accedere ad un fascicolo, indipendentemente da altre impostazioni:

· il responsabile del fascicolo
· tutti gli operatori addetti del fascicolo

Per default nelle proprietà di un modello di fascicolo nei campi relativi a chi accede in lettura e chi accede in lettura/scrittura non vengono impostati valori. Se invece in quella sezione ci sono dei valori, oltre al responsabile ed agli addetti, avvederenno al fascicolo anche coloro che sono inseriti in quei campi. Se i valori sono Tutta l'organizzazione in entrambi i campi, valgono le impostazioni del profilo utente. La competenza di un fascicolo rispetto ad un ufficio è regolata dalla presenza del campo con datafield = "ufficiocompetenza" all'interno del modello HTML del fascicolo.

Inoltre possedendo l'autorizzazione alla funzione Supervisione Lettura Fascicoli si accederà in lettura a tutti i fascicoli (tranne quelli per i quali si ha il permesso in modifica nel qual caso l'accesso è in lettura/scrittura). Possedendo invece l'autorizzazione Supervisione Modifica Fascicoli si potrà accedere a tutti i fascicoli (aperti) in modifica. In nessun caso si potrò modificare comunque un fascicolo chiuso.

Per quanto riguarda l'operazione di fascicolazione nell'elenco compare innanzitutto l'elenco di tutti i fascicoli appartenenti al grado divisionale del titolario di competenza del documento dal quale è partita l'operazione di fascicolazione. Se però il fascicolo in cui inserire il documento non è presente in lista potrà essere creato un nuovo fascicolo (della tipologia definita in quel grado divisionale) oppure consultare l'elenco di tutti i fascicoli per il quali si è responsabile oppure addetto all'elaborazione.


Desktop

La default.aspx è la pagina presentata all'operatore dopo aver effettuato l'accesso al sistema, a meno di eventuali modifiche apportate nel file web.config (cfr. Pagina di default).

Affinchè la sessione web (e quindi la sessione dei Web Services) rimanga sempre attiva, il desktop esegue periodicamente un ping sull'applicazione; questa funzionalità è utile quando, lato client, si eseguono operazioni che non richiedono, per periodi elevati, un'interazione con l'applicazione lato server.

Il desktop è la pagina d'interfaccia che consente all'utente di utilizzare tutte le funzionalità della applicazione web. E' composta da una barra dei menù e da una workarea, in cui possono essere posizionati collegamenti e cartelle. I collegamenti permettono di richiamare funzioni definite nella piattaforma, altre pagine web o script.

La visualizzazione degli elementi del desktop può essere controllata dalle specifiche autorizzazioni nel profilo utente, infatti è possibile rendere visibili alcuni collegamenti e cartelle solo per gli utenti appartenenti a un certo ufficio, piuttosto che per gli utenti con un determinato ruolo, etc.


Barra del menù

Le voci di menù sono contenute nel file menu.xml, memorizzato sul database di openwork®; per modificare il file, e quindi per modificare le voci di menù, è sufficiente accedere dal BPM Tools alla funzionalità Menu Editor (Sistema -> Menu Editor).

Il rendering avviene applicando la trasformazione menu.xsl presente nella cartella webserver\libraries\menu. Il seguente esempio riporta la struttura del file XML:

<menu xmlns="http://www.openwork.info/schema">

<menuitem function="0" labelid="L_1">

       <menuitem function="106" labelid="L_1_1" auth="19" />

       <menuitem function="107" labelid="L_1_2" auth="20" />

       <menuitem function="109" labelid="L_1_3" auth="19" />

       <menuitem function="108" labelid="L_1_4" />

       <menuitem function="110" labelid="L_1_5" />

       <menuitem function="114" labelid="L_1_6" />

       </menuitem>

...

...

</menu>

Attributo | Descrizione
function | Identificativo della funzione predefinita che l'applicazione esegue quando viene selezionata una voce di menù.
scr | Link ad una pagina web oppure ad una funzione javascript custom.
labelid | Identificativo dell'etichetta di menu memorizzata all'interno del file menu.it. Le estensioni del file di menù possono essere diverse in funzione della lingua utilizzata (es. it - italiano); viene visualizzato il menù appropriato in base all'identificativo del linguaggio impostato per l'operatore.
auth | Identificativo dell'autorizzazione definita. Se l'attributo non è presente, la voce di menu è sempre visualizzata, altrimenti viene visualizzata solo se, nel profilo operatore, tale autorizzazione ha valore true.

nota

Nota

L'attributo function è predominante rispetto all'attributo scr. In presenza di entrambi, l'attributo src viene ignorato.

Gli elementi menuitem possono a loro volta contenere altri menuitem, in tal caso l'attributo function è impostato a 0.


Workarea

E' possibile definire i collegamenti e le cartelle presenti sul desktop nel file workarea.xml, presente nella cartella webserver\desktop\<nome_configurazione>.

Il seguente esempio riporta la struttura del file XML, composto da collegamenti (link) e cartelle (folder):

<?xml version="1.0" encoding="UTF-8"?>

<workarea xmlns="http://www.openwork.info/schema" background="sfondo.jpg" >

<folder left="350" top="100" width="200" height="210"

title="Protocollo in entrata" picture="prot_in.gif">

         <link left="10" top="30" description="Nuovo" function="106"

picture="nuovo_prot_in.gif" auth="6"/>

          <link left="10" top="60" description="Elenco" function="503"

     picture="prot_in.gif"/>

       </folder>

       ...

       <link left="0" top="350" description="Funzione custom"

     src="javascript:esempio()" picture=""/>

...

</workarea>

Per nascondere il menù è sufficiente impostare l'attributo menu nel nodo workarea a 0 o false. Valore di default true. L'attributo background dell'elemento workarea permette di definire un'eventuale immagine di sfondo, mentre folder e link consentono rispettivamente di definire i collegamenti e le cartelle presenti sul desktop. Lo stile di entrambi è definito nel file workarea.css presente nella cartella webserver\desktop.

Attributi per il tag link

Attributo

Descrizione

left/top

Posizione assoluta del link rispetto alla pagina.

description

Descrizione testuale della funzionalità.

function

Identificativo della funzione predefinita che l'applicazione esegue quando viene selezionata una voce di menù.

src

Link a una funzione javascript nel file menu.js di clibraries oppure ad altra pagina web.

picture

Immagine gif o jpg presente nella cartella default/images, eventualmente associata al link.

auth

Identificativo dell'autorizzazione. La voce di menù viene visualizzata solo se l'attributo non è presente oppure non è specificata alcuna autorizzazione; al contrario, risulta disabilitata oppure, in base all'impostazione dell'attributo hidedisabled, invisibile.

position

Consente di impostare la posizione del link rispetto all'elemento padre (folder). I valori ammessi sono quelli definiti dallo standard HTML : static, absolute, relative.

Valore di default absolute.

Nel caso si posizionamento relativo, si consiglia di utilizzare l'attributo top piuttosto che l'attributo height, in modo ad impostare opportunamente la distanza verticale tra i link.

hidedisabled

Ha validità solo nel caso in cui l'autorizzazione auth non sia true. Impostato a 1 il link non viene visualizzato, al contrario viene disabilitato.

Attributi per il tag folder

Attributo | Descrizione
left/top | Posizione assoluta della cartella rispetto alla pagina.
width/height | Dimensioni della cartella in pixel.
title | Titolo della cartella.
picture | Eventuale immagine gif o jpg.
auth | Identificativo dell'autorizzazione. La voce di menù è visualizzata solo se l'attributo è presente e se l'autorizzazione nel profilo dell'operatore è impostata a true.
src | Link ad una pagina esterna visualizzata all'interno della cartella. Se presente, vengono ignorati eventuali collegamenti presenti nella cartella.
scrolling | Indica la presenza delle barre di scorrimento. Possibili valori: "yes" - sempre presenti) "no" - assenti "auto" - dipende dalle dimensioni della pagina contenuta)
id | Identificativo della cartella . Se è stato valorizzato l'attributo src, la cartella conterrà un iframe il cui identificativo è id_f.
titleheight | Altezza in pixel della banda del titolo. Valorizzato a 0, nasconde il titolo.


Personalizzazione

La grafica del desktop dipende principalmente dai file workarea.xml e workarea.css presenti nella cartella webserver/desktopù; inoltre è possibile contestualizzare le etichette dei menu in base alla lingua o alle lingue impostate nel profilo dell'operatore corrente.

Oltre al desktop predefinito (default desktop), creato automaticamente in fase d'installazione, possono essere creati desktop personalizzati per operatore, ruolo, area organizzativa, gruppo creando una cartella con nome corrispondente alla formula dell'utente, ruolo, area organizzativa, gruppo.

Ad esempio, per creare un desktop per tutti gli operatori con ruolo avente identificativo 3, è sufficiente creare una cartella il cui nome è R 3 che conterrà gli opportuni file.

Quando un operatore richiede il desktop, l'applicazione verifica prima se è stato definito il desktop dell'operatore, quindi del ruolo, poi dell'ufficio e infine del gruppo: se questi non sono presenti, viene utilizzato il desktop di default.

Per procedere alla personalizzazione del desktop, è necessario intervenire direttamente sui file di struttura:

· Per introdurre un link sul desktop, apportare le modifiche nel file workarea.xml. Ad esempio:

<link left="10" top="20" class="link" description="Nuova Funzione"

      function="2000" picture="freccia.gif"/>

· Per introdurre lo stile, sostituendo quello di default, apportare le modifiche nel file workarea.css.

Ad esempio:

.link{

font-family: arial;

font-size:8pt;

color: #FFFFFF;

}

· Inserire le immagini indicate nell'attributo picture nella cartella desktop/default/images.
· Definire la funzione che determina il tipo di azione corrispondente al link nel file webserver/clibraries/menu.js. Il seguente script, ad esempio, consente l'apertura di un nuovo documento interno, con ModelId=12 ed ActionType = 4 (cfr. Parametri per apertura/creazione di una Form):

Case 2000: //  Nuovo Documento

var wins ="status=yes,toolbar=no,menubar=no,location=no,scrollbars=no,resizable=yes";

var newURI = "document.aspx?ActionType=4&Style=3&ModelID=12";

var winname = "NEWDOC" + rnd();

window.open(newURI,winname,wins);


Funzioni predefinite

Nella tabella sono riportate le principali funzioni predefinite che è possibile richiamare utilizzando il relativo codice.

Codice | Descrizione
-1 | Visualizza una pagina che riporta il testo Funzione non implementata.
22 | Elenco delle attività da prenotare.
23 | Elenco delle attività da iniziare.
24 | Elenco delle attività da completare.
25 | Elenco di tutte le attività in carico (da iniziare e da completare).
26 | Tutte le attività.
31 | Profilo operatore.
33 | Organigramma che evidenzia ruolo e ufficio dell'operatore corrente.
103 | Sessioni attive.
105 | Logout.
106 | Nuovo documento di protocollo in entrata.
107 | Nuovo documento di protocollo in uscita.
108 | Nuovo documento.
109 | Nuovo documento di protocollo interno.
110 | Nuovo fascicolo.
114 | Nuova scheda di anagrafica persona fisica o giuridica.
119 | Cambio password.
120 | Cambio ruolo.
206 | Nuovo protocollo in entrata da registro di emergenza.
207 | Nuovo protocollo in uscita da registro di emergenza.
208 | Nuovo protocollo interno da registro di emergenza.
501 | Elenco dei documenti di protocollo in entrata non pubblicati.
502 | Elenco dei documenti di protocollo in entrata da protocollare.
503 | Elenco dei documenti di protocollo in entrata pubblicati.
504 | Elenco dei documenti di protocollo in entrata da archiviare.
505 | Elenco dei documenti di protocollo in entrata revisionati.
506 | Elenco dei documenti di protocollo in uscita non pubblicati.
507 | Elenco dei documenti di protocollo in uscita da protocollare.
508 | Elenco dei documenti di protocollo in uscita pubblicati.
509 | Elenco dei documenti di protocollo in uscita da archiviare.
510 | Elenco dei documenti di protocollo in uscita revisionati.
511 | Elenco dei documenti, diversi da protocollo in entrata o in uscita, non disponibili.
512 | Elenco dei documenti, diversi da protocollo in entrata o in uscita, da numerare.
513 | Elenco dei documenti diversi da protocollo in entrata o in uscita.
514 | Elenco dei documenti, diversi da protocollo in entrata o in uscita, da archiviare.
515 | Elenco dei documenti, diversi da protocollo in entrata o in uscita, non validi.
517 | Elenco dei fascicoli da aprire.
518 | Elenco dei fascicoli non disponibili.
519 | Fascicoli pubblicati.
520 | Elenco dei fascicoli in storico.
526 | Elenco delle occorrenze di anagrafica.
530 | Elenco dei messaggi in entrata.
531 | Elenco dei messaggi in uscita.
532 | Nuovo messaggio interno.
550 | Elenco del protocollo generale.
551 | Stampa del registro giornaliero del protocollo.
552 | Chiusura giornaliera del protocollo.
554 | Elenco dei processi attivi.
555 | Elenco dei processi attivi con attività in errore.
556 | Elenco dello storico dei processi.
557 | Elenco delle attività in errore.
600 | Cerca nei documenti.
700 | Business Console.


Elenco

La pagina list.aspx rappresenta la pagina utilizzata per l'apertura di un elenco.

Di seguito verranno descritti i parametri che caratterizzano l'apertura di un elenco e i dettagli ralativi alle operazioni di ricerca, di ordinamento, di filtraggio, ecc.

In dettaglio:

· Parametri per l'apertura di un elenco
· Parametri listtype, listsubtype e modelid
· Lo schema
· L'attributo listparameters
· Definizione di un elenco con origine dati custom
· Definizione di ricerca
· Colonne custom
· Ricerca semplice
· Ricerca avanzata
· Definizione dei un'agenda delle attività custom


Parametri apertura

Per identificare un elenco di openwork® si può utilizzare la pagina del webserver list.aspx.

I parametri necessari e sufficienti per l'individuazione di un elenco sono listtype, listsubtype e modelid. Gli altri parametri sono usati per scopi specifici, come ad esempio il filtraggio, la paginazione, l'eliminazione e/o l'occultazione di alcune azioni, etc.

Parametro

Descrizione

listtype

listsubtype

modelid

Parametri obbligatori che identificano la tipologia di elenco.

(cfr. listtype - listsubtype - modelid)

Print

Parametro facoltativo. Se presente, l'elenco viene aperto in modalità stampa. Possibili valori:

0 - Vengono applicati i fogli di stile per la stampa HTML (ptable.css).

>0 - Il valore passato è l'identificativo (attributo modelid) del modello FO da utilizzare per trasformazione XSL-FO . (cfr. Trasformazione di una form o elenco)

Cacheid

Parametro obsoleto. Attraverso i Web Services viene memorizzato il contenuto di un elenco XML all'interno di una cache, per cui se il parametro viene passato nell'URL , il download dell'elenco avviene dalla cache piuttosto che dal database.

Pagenumber

Parametro facoltativo. Se un elenco è paginato, esso rappresenta il numero di pagina. Se viene richiesto un elenco in modalità stampa, esso può contenere i numeri di pagina che si intende stampare, separati dalla "," oppure ";" oppure da gli intervalli del tipo [pagina_iniziale]-[pagina_finale] separati da "," o ";"

Listparameters

Parametro facoltativo. Rappresenta la stringa XML in formato Unicode in cui sono codificati criteri per l'apertura dell'elenco (cfr. Listparameters).

Reduced

Parametro facoltativo. Influenza la visualizzazione dei pulsanti, corrispondenti alle azioni Esci, Desktop e Ricerca. Questo parametro può usato con l'attributo reduced dei nodi action dell'elenco (cfr. Campo action). Possibili valori:

0 - Sono visualizzate tutte le azioni (Impostazione predefinita).

1 - Non sono visualizzati i pulsanti corrispondenti alle azioni Esci, Desktop e i pulsanti di ricerca.

2 - Non sono visualizzati i pulsanti corrispondenti alle azioni Esci e Desktop, ma soltanto i pulsanti di ricerca.

<0 e >2 - Equivale a specificare 1.

Selmode

Parametro facoltativo. Indica la modalità di selezione. Possibili valori:

0 - Selezione singola, non compare l'azione Confirm (Impostazione predefinita).

1 - Selezione singola, compare l'azione Confirm. (Uso interno)

2 - Selezione multipla, compare l'azione Confirm. (Uso interno)

3 - Selezione multipla, non compare l'azione Confirm.

4 - Selezione multipla, compare l'azione Confirm; non è possibile deselezionare. (Uso interno)

Rinterval

Parametro facoltativo. Rappresenta l'intervallo di caricamento automatico dell'elenco espresso in secondi. Poiché l'aggiornamento automatico dell'elenco porta la pagina di visualizzazione in primo piano, il parametro deve essere usato in combinazione con il parametro nofocus. Può assumere solo valori >0.

Nofocus

Parametro facoltativo. Se valorizzato, l'elenco non riceve il focus quando viene ricaricato automaticamente.

Defaultaction

Parametro facoltativo. Identificativo della azione che deve essere eseguita quando si preme CTRL + Invio su una voce selezionata dall'elenco. Il parametro ha validità solo se selmode = 0/1 (selezione singola).

Recordsperpage

Parametro facoltativo. Trova applicazione negli elenchi paginati poichè indica il numero di righe per ciascuna pagina dell'elenco. Possibili valori:

>0 - Il valore indicato è il numero di righe per pagina.

0 - Il parametro viene ignorato e valgono le impostazioni generali per la visualizzazione degli elenchi definite nel BPM Tools. (Impostazione predefinita)

-1 - Vengono mostrati tutti i record (elenco non paginato).

-2 - Viene mostrato l'elenco senza record risultato dell'interrogazione. Tale impostazione risulta utile per poter entrare velocemente in modalità ricerca semplice o avanzata sull'elenco.

Folderid

Parametro riservato.

hidelogo

Parametro facoltativo. Se definito nasconde il logo openwork® in alto a sinistra.

hideactions

Parametro facoltativo. Permette di definire l'elenco delle action da nascondere.

Possibili valori:

String - Concatenamento degli identificativi delle action usando come carattere separatore ";" (es. hideactions = open;desktop).

all - In questo caso non viene visualizzata l'intera toolbar.

hidesearch

Parametro facoltativo. Influenza la visualizzazione della sezione della toolbar delle azioni relativa alle ricerche. Possibili valori:

0 - Viene mostrata sia la ricerca testuale e avanzata. (Valore predefinito)

1 - Viene mostrata solo la ricerca avanzata.

2 - Viene mostrata solo la ricerca testuale.

<0 e >2 - La sezione ricerche non viene visualizzata.

hidesort

Parametro facoltativo. Influenza la visualizzazione della action Ordina: se impostata a 0 (Impostazione predefinita) non viene visualizzata.

hidelabels

Parametro facoltativo. Influenza la visualizzazione delle etichette delle action, escludendo etichette Cerca e Ricerca Avanzata in quanto non presentano la relativa icona. Se il parametro non viene definito, viene controllata la key HideActionLabels della appSetting del web.config della relativa applicazione web: se è <>0, le etichette non vengono visualizzate.


listtype - listsubtype - modelid

Di seguito si riportano tutte le possibili combinazioni dei parametri listtype, listsubtype e modelid.

listtype

listsubtype

modelid

1 - Protocollo in entrata

0 - Qualsiasi

1 - Documenti protocollati

2 - Documenti non disponibili

3 - Documenti da archiviare

4 - Documenti da protocollare

5 - Documenti non validi

6 - Documenti da archiviare

Identificativo di un modello di protocollo in entrata esistente

2 - Protocollo in uscita

0 - Qualsiasi

1 - Documenti protocollati

2 - Documenti non disponibili

3 - Documenti da archiviare

4 - Documenti da protocollare

5 - Documenti non validi

6 - Documenti da archiviare

Identificativo di un modello di protocollo in uscita esistente

3 - Documenti interni

0 - Qualsiasi

1 - Documenti protocollati

2 - Documenti non disponibili

3 - Documenti da archiviare

4 - Documenti da protocollare

5 - Documenti non validi

6 - Documenti da archiviare

Identificativo di un modello di documento interno esistente.

4 - Fascicoli

0 - Tutti

1 - Aperti

2 - Non disponibili

3 - In storico

Identificativo di un modello di fascicolo esistente.

6 - Elenco di anagrafica

0

Identificativo della tipologia di anagrafica.

7 - Posta interna

0 - In uscita

1 - In entrata

0

9 - Protocollo e documenti

0 - Protocollo Generale

1 - Registro giornaliero di Protocollo

2 - Tutti i documenti non disponibili

3 - Tutti i documenti in qualsiasi stato

0

10 - Ricerche multiarchivio

0 - Qualsiasi

Identificativo della ricerca.

11 - Ricerche su protocollo in entrata

0 - Qualsiasi

Identificativo della ricerca.

12 - Ricerche su protocollo in uscita

0 - Qualsiasi

Identificativo della ricerca.

13 - Ricerche su documenti e protocollo interno

0 - Qualsiasi

Identificativo della ricerca.

14 - Ricerche su fascicoli

0 - Tutti

Identificativo della ricerca.

16 - Ricerche su anagrafica

0

Identificativo della ricerca.

19 - Ricerche sul Protocollo Generale

0 - Qualsiasi

Identificativo della ricerca.

20 - Località

0

21 - Documenti di protocollo in entrata e interno

0

0

22 - Tutti i documenti inseriti nei fascicoli

0

0

100 - Funzioni

101 - Autorizzazioni

102 - Lista di organigramma

1 - Tutti gli operatori attivi con ID di Anagrafica

2 - Tutti i ruoli

3 - Tutti gli uffici

4 - Tutti i gruppi

5 - Tutti gli elementi di un gruppo

6 - Elenco aree

103 - Connessioni attive

0 - Dell'utente corrente

1 - Dell'utente di anagrafica corrente

2 - Tutti gli uffici

200 - Ruoli dell'utente che effettua la chiamata

1

201 - Tipologie di schede di anagrafica

203 - Titoli

204 - Lingue

300 - Riservato

301 - Riservato

302 - Ricerche

0 - Tutti gli schemi di tipo documentale

303 - Riservato

304 - Riservato

400 - Attività in agenda

0 - Attività di un operatore da organigramma

1 - Attività di un operatore di anagrafica (può avere la stessa attività più volte con ruoli diversi)

3 - Agenda del responsabile di processo

450 - Sostituzioni

0 - Elenco delle sostituzioni per cui l'utente corrente è sostituto.

1 - Elenco delle sostituzioni che definiscono sostituti per l'utente corrente.

2 - Elenco delle sostituzioni per cui l'utente corrente è sostituto non ancora iniziate o non terminate.

3 - Elenco delle sostituzioni che definiscono sostituti per attività non ancora iniziate o non terminate dell'utente corrente.

500 - Processi

1 - Modelli.

2 - Istanze.

3 - Log.

4 - Istanze in errore

54 - Storico Istanze in errore

65 - Variabili globali Storico

76 - Variabili globali Classi delle attività

501 - Attività in stack

550 - Ricerche per statistiche

1 - Utenti

2 - Ruoli

3 - Uffici

4 - Attività

5 - Processi

600 - Utility per il titolario

1 - Elenco pratiche aperte

2 - Elenco pratiche chiuse

3 - Modelli di pratiche

4 - Modelli per autocomposizione

5 - Modelli di processo pubblicati

6 - Tutti i modelli di processo

700 - Elenco degli schemi associati ad una certa tipologia di documento

>10000 - Origine dati custom

Eventuale parametro da passare all'origine dati custom.


Lo schema

Per la definizione di uno schema, si procedere come segue:

· creare un nuovo record nella tabella schemi con id >= 1000, utilizzando ovviamente un id disponibile.
· compilare i campi archivio, sottotipo, modello corrispondenti rispettivamente ai parametri sourcetype, sourcesubtype, modelid.
· compilare il campo contesto, azioni, layout, localizzazione secondo le indicazioni di seguito riportate.

In base ai parametri illustrati, all'interno nella tabella schemi del database di openwork® viene reperito l'insieme coordinato di informazioni che prende il nome di schema, così costituito:

· origine dati dell'elenco
· formato delle colonne
· etichette da associare alle colonne
· trasformazione XSL da applicare all'elenco XML

Poiché non necessariamente sussiste la corrispondenza del record corrispondente a ciascuna delle possibili combinazioni dei parametri listtype, listsubtype e modelid, valgono le seguenti regole:

1. nel caso di ricerche, se non è reperito lo schema corrispondente al listtype e modelid, viene cercato quello con modelid=0; se questo non viene trovato, viene cercato quello con modelid=0 per la stessa tipologia di documento, mentre nel caso di ricerche multiarchivio viene restituito un errore. Per esempio:

           13,0,5 -> 13,0,0 -> 3,0,0 -> Errore

10,0,6 -> 10,0,0 -> Errore

2. nel caso di origine dati custom, se non è reperito lo schema corrispondente al listtype e modelid viene cercato quello con modelid=0, se questo non viene trovato, si verifica una situazione di errore. Per esempio:

10017,0,1 -> 10017,0,0 -> Errore


Il campo layout

Il campo layout contiene la trasformazione XSL con cui vengono visualizzati i dati dell'elenco XML. Essa è di default la seguente:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:owk="http://www.openwork.info/schema">

<xsl:include href="../libraries/table/table.xsl"/>

<xsl:template match="/">

<html xmlns="">

<head>

  <xsl:call-template name="initialize">

   <xsl:with-param name="selclass" select="'selrow'"/>

   <xsl:with-param name="maximize" select="'1'"/>

  </xsl:call-template>

  <title>

   <xsl:call-template name="label">

    <xsl:with-param name="id" select="'title'"/>

    <xsl:with-param name="mode" select="'textual'"/>

   </xsl:call-template>

   <xsl:call-template name="label">

    <xsl:with-param name="class" select="'label'"/>

    <xsl:with-param name="mode" select="'textual'"/>

    <xsl:with-param name="path" select="/owk:table/owk:user/owk:name"/>

   </xsl:call-template>

  </title>

</head>

<body class="body">

  <xsl:call-template name="header">

   <xsl:with-param name="evenclass" select="'rowcolor0'"/>

   <xsl:with-param name="oddclass" select="'rowcolor1'"/>

   <xsl:with-param name="selclass" select="'selrow'"/>

   <xsl:with-param name="printtitle" select="'title'"/>

  </xsl:call-template>

  <div id="owktdiv" class="owktdiv" onscroll="ControlHeader(1)">

   <div class="owkhdiv" id="owkhdiv"/>

   <div id="owkbdiv" class="owkbdiv">

    <table border="0" id="owktable" cellspacing="0" cellpadding="0" width="100%">

     <thead class="header">

      <tr>

       <xsl:call-template name="displayh"/>

      </tr>

     </thead>

     <tbody class="DataCell">

      <xsl:call-template name="displayb">

       <xsl:with-param name="evenclass" select="'rowcolor0'"/>

       <xsl:with-param name="oddclass" select="'rowcolor1'"/>

       <xsl:with-param name="selclass" select="'selrow'"/>

      </xsl:call-template>

     </tbody>

    </table>

   </div>

  </div>

</body>

</html>

</xsl:template>

</xsl:stylesheet>


Il campo contesto

Il campo contesto contiene la definizione delle colonne come nel seguente esempio:

     <columns>

<col visible="1" name="id" source="id" type="integer"/>

<col visible="1" name="disp" source="disponibile" type="bool"/>

<col visible="1" name="datadoc" source="datadoc" type="date"/>

<col visible="1" name="ndoc" source="numerodoc" type="text" action="open"/>

<col visible="0" name="idautore" source="idautore" type="integer"/>

<col visible="1" name="autore" source="autore" type="text"/>

<col visible="0" name="iduffprot" source="idufficioprotocollo" type="integer"/>

<col visible="1" name="uffprot" source="ufficioprotocollo" type="text"/>

<col visible="0" name="iduffcomp" source="idufficiocompetenza" type="integer"/>

<col visible="1" name="uffcomp" source="ufficiocompetenza" type="text"/>

<col visible="0" name="idresp" source="idresponsabile" type="integer"/>

<col visible="1" name="resp" source="responsabile" type="text"/>

<col visible="0" name="idclass" source="idclassificazione" type="integer"/>

<col visible="1" name="class" source="classificazione" type="text"/>

<col visible="1" name="mitt" source="mittente" type="text" reserved="1"/>

<col visible="1" name="codmitt" source="codicemittente" type="text" reserved=""/>

<col visible="1" name="oggetto" source="oggetto" type="text" reserved="1"/>

<col visible="1" name="origprat" source="originapratica" type="bool"/>

<col visible="1" name="idprat" source="idpratica" type="bool"/>

<col visible="1" name="origproc" source="originaprocesso" type="bool"/>

<col visible="1" name="idproc" source="idprocesso" type="bool"/>

<col visible="1" name="arch" source="archiviato" type="bool"/>

<col visible="1" name="ann" source="annullato" type="bool"/>

    </columns>

Ogni elemento col corrisponde con la definizione di una colonna. Per gli elementi col possono specificarsi i seguenti attributi:

visible = 0/1 | se 0 la colonna risulta nascosta
name =string | nome simbolico della colonna, è quello che compare come attributo su ogni riga
source = string | nome del campo a cui la colonna è associata nell'origine dati
type = string | indica il tipo di dato; impostazioni valide sono: text, float, integer, date, datetime, xml, activitystatus, processstatus, priorità, documenttype, connectiontype, bool
fill = 0/1 | se 0 la colonna non verrà riempita
search = 0/1 | se 1 il campo è inserito come parametro nella ricerca avanzata sull'elenco
searchmaster = 0/1 | se 1 la colonna è utilizzata come colonna di ricerca di default: in tal caso, la funzione “cerca” presente nella visualizzazione standard dell'elenco agisce su tale colonna
reserved = 0/1 | se 1 i dati della cella corrispondente alla colonna verranno trattati come riservati (ovvero sostituiti da ***) nelle righe per cui il documento risulta essere riservato
action =string | se questo attributo è valorizzato con l'identificativo di una azione, le informazioni presenti nella colonna vengono visualizzate sotto forma di link ipertestuale a cui è associata l'azione
mask = string | cfr. L'attributo owk:mask


Campo action

Contiene la definizione delle azioni che è possibile eseguire su un elenco, secondo la forma seguente.

<actions>

   <!-- ********          DOCUMENTI         ******** -->

   <action enabled="1" type="base" name="apri" id="open" />

   <action enabled="1" type="base" name="stampa" id="print" />

   <action enabled="1" type="base" name="creamessaggio" id="createmessage" />

   <action enabled="1" type="base" name="archivia" id="store" />

   <action enabled="1" type="base" name="pubblica" id="publish" />

   <action enabled="1" type="base" name="elimina" id="delete" />

   <action enabled="1" type="base" name="replica" id="replicate" />

   <!-- ********          SESSIONI          ******** -->

   <action enabled="1" type="base" name="disconnetti" id="disconnect" />

   <!-- ********           AGENDA           ******** -->

   <action enabled="1" type="base" name="info" id="getinfo" />

   <action enabled="1" type="base" name="documento" id="getdoc" />

   <action enabled="1" type="base" name="prenota" id="book" />

   <action enabled="1" type="base" name="esegui" id="execute" />

   <action enabled="1" type="base" name="termina" id="terminate" />

   <action enabled="1" type="base" name="assegna" id="assign" />

   <action enabled="1" type="base" name="trasferisci" id="transfer" />

   <action enabled="1" type="base" name="salta" id="skip" />

   <action enabled="1" type="base" name="impostadata" id="setdate" />

   <action enabled="1" type="base" name="impostapriorita" id="setpriority" />

   <!-- ********          PROCESSI          ******** -->

   <action enabled="1" type="base" name="mostralog" id="showlog" />

   <action enabled="1" type="base" name="termina" id="stop" />

   <action enabled="1" type="base" name="pausa" id="pause" />

   <action enabled="1" type="base" name="riprendi" id="restart" />

   <!-- ********      NON IMPLEMENTATE      ******** -->

   <action enabled="1" type="base" name="protocolla" id="numerate" />

   <action enabled="1" type="base" name="revisiona" id="revision" />

   <action enabled="1" type="base" name="annulla" id="invalidate" />

   <action enabled="1" type="base" name="fascicola" id="insertinfolder" />

   <action enabled="1" type="base" name="rimuovidoc" id="removefromfolder" />

</actions>

Nella struttura XML precedente sono riportate le azioni predefinite che è possibile eseguire su un elenco. L'insieme delle azioni predefinite presenti in agenda delle attività sono consultabili nella sezione cfr. Azioni predefinite agenda attività. L'insieme delle azioni predefinite che è possibile inserire in un modello in fase di disegno è consultabile nel capitolo dedicato cfr. La sezione actions.

Tali azioni possono poi ulteriormente essere integrate con elementi personalizzati (custom).

E' inoltre possibile inserire l'attributo reduced utilizzato nell'apertura dell'elenco.


Azioni predefinite agenda attività

Action

Descrizione

actd15 - print

Stampa

Stampa l'agenda delle attività corrente.

1. Cliccare su

actd15 - print

Stampa
2. L'agenda delle attività viene convertita in PDF. Procedere con la stampa del documento.

acta06 - getinfo

Istruzioni

Visualizza le Istruzioni Operative relative all'attività di processo selezionata.

1. Selezionare una attività tra quelle presenti in agenda.
2. Cliccare su

acta06 - getinfo

Istruzioni
3. Una finestra di pop up mostra le istruzioni operative specificate per l'attività corrente.

acta05 - getdoc

Documento

Visualizza il documento openwork® legato all'attività selezionata.

1. Selezionare una attività tra quelle presenti in agenda.
2. Cliccare su

acta05 - getdoc

Documento
3. Una nuova finestra mostra il documento openwork® legato all'attività corrente.

acta02 - book

Prenota

Prenota l'attività selezionata.

1. Selezionare una attività tra quelle presenti in agenda con il campo Stato uguale a acta02 - book
2. Cliccare su

acta02 - book

Prenota

3. Viene richiesta ulteriore conferma dell'operazione di Prenotazione. Scegliere Si per procedere con l'operazione di prenotazione dell'attività selezionata, altrimenti scegliere No per annullare.
4. L'attività è presa in carico dall'utente ed è quindi non visibile nell'agenda delle attività degli altri partecipanti alla stessa. L'agenda delle attività dell'utente corrente viene aggiornata e il campo Stato dell'attività prenotata cambia in acta04 - execute ovvero attività da eseguire.

acta04 - execute

Esegui

Esegue l'attività selezionata..

1. Selezionare una attività tra quelle presenti in agenda.
2. Cliccare su

acta04 - execute

Esegui
3. Seguire le eventuali istruzioni operative per eseguire l'attività corrente.

acta11 - terminate

Completa

Completa l'attività selezionata, precedentemente eseguita.

1. Selezionare una attività tra quelle presenti in agenda aventi la bandierina del completamento come stato.
2. Cliccare su

acta11 - terminate

Completa
3. Viene richiesta ulteriore conferma dell'operazione di completamento. Scegliere Si per procedere con l'operazione di completamento dell'attività selezionata, altrimenti scegliere No per annullare.

acta01 - assign

Assegna

Assegna l'attività selezionata ad uno dei suoi potenziali partecipanti. Consente al Process Owner di assegnare una qualsiasi attività appartenente al processo ad uno dei potenziali partecipanti.

acta12 - transfer

Trasferisci

Trasferisce l'attività corrente ad un altro operatore.

1. Selezionare una attività tra quelle presenti in agenda.

2. Cliccare su

acta12 - transfer

Trasferisci

3. Una nuova finestra consente di sfogliare il proprio Organigramma e di scegliere l'operatore a cui trasferire l'attività selezionata. Selezionare l'operatore desiderato e cliccare su Conferma
4. L'attività viene trasferita all'operatore selezionato e l'elenco delle attività presenti nell'agenda opportunamente aggiornato.

acta10 - skip

Salta

Salta l'esecuzione di una attività.

1. Selezionare una attività tra quelle presenti in agenda.
2. Cliccare su

acta10 - skip

Salta
3. Se l'attività non è stata definita "saltabile" nel modello di processo una finestra di errore negherà l'azione Salta, altrimenti verrà richiesta conferma a voler procedere con l'operazione stessa. Scegliere Si per continuare, No per annullare l'azione Salta.
4. Se l'attività viene saltata, l'istanza di processo passa all'attività successiva e l'elenco delle attività presenti in agenda viene opportunamente aggiornato.

acta08 - setpriority

Priorità

Assegna un livello di priorità all'attività selezionata.

1. Selezionare una attività tra quelle presenti in agenda.
2. Cliccare su

acta08 - setpriority

Priorità

3. Una finestra di pop up consente di selezionare e assegnare la priorità desiderata all'attività selezionata

acta09 - setprioritylevel

4. Assegnata la priorità all'attività selezionata, l'elenco delle attività in agenda viene aggiornato con le nuove modifiche apportate nella colonna Priorità.

acta07 - setdate

Data

Assegna la data di esecuzione prevista all'attività selezionata.

1. Selezionare una attività tra quelle presenti in agenda.
2. Cliccare su

acta07 - setdate

Data
3. Un pop up mostra il calendario e permette di selezionare la data desiderata da assegnare all'attività.

acta03 - datecalendar

4. Selezionata la data di interesse il pop up si chiude e la colonna Data Prevista in agenda delle attività viene opportunamente aggiornata.


Listparameters

Il parametro owk:listparameters è una struttura XML per indicare parametri da passare all'apertura di un elenco.

Si noti che tale struttura se inviata come parametro di un URL va codificata in formato Unicode (UTF-8) nonché privata del simbolo Unicode corrispondente a CRLF (a capo) e ad altri eventuali simboli speciali:

<listparameters xmlns="http://www.openwork.info/schema">

<!-- impostazioni pagina -->

<pagesettings/>

       <!-- filtro base -->

<basefilter/>

       <!-- filtro da applicare all'elenco -->

<filter/>

<!-- filtro per la ricerca testuale su tutti i campi -->

<textsearch/>

<!-- criteri di ordinamento -->

<order/>

<!-- opzioni per la visualizzazione delle funzioni di ricerca -->

<hidesearch/>

</listparameters>

La differenza tra filtro base e filtro è semplicemente nell'uso che ne viene fatto da parte del client: il filtro base a differenza di quello normale viene sempre riapplicato anche quando si eliminano i filtri creati.


Impostazioni pagina

Il numero di pagina richiesta e il numero di record per pagina vengono impostati tramite la seguente struttura

<pagesettings>

<pagenumber>pagenumber</pagenumber>

<recordsperpage> recordsperpage</recordsperpage>

</pagesettings>

dove

· <pagenumber> rappresenta il numero di pagina.
· <recordsperpage> rappresenta il numero di record per pagina; se non viene settato o viene impostato a 0 (zero) vengono utilizzate le impostazioni predefinite, se impostato a -1 l'elenco non viene paginato.


Filtri

I filtri possono realizzarsi unendo logicamente tra loro più condizioni.

La struttura XML del filtro è così definita:

<filter>

<condition/>

</filter>

oppure

<filter>

   <conditiongroup/>

</filter>

La struttura XML della <conditiongroup> è così definita:

<conditiongroup method="method">

<condition/>

<conditiongroup/>

</conditiongroup>

dove method può assumere il valore OR o AND; il filtro può essere costituito anche da un solo elemento condition o da un solo elemento conditiongroup, oppure all'interno dell'elemento conditiongroup possono essere presenti più elementi condition e conditiongroup.

L'elemento condition può avere gli attributi di seguito elencati:

field = string

nome simbolico della colonna su cui eseguire il confronto

source = string

origine della colonna su cui eseguire il confronto, da utilizzare in alternativa a field.

field2 = string

nome simbolico dell'eventuale colonna su cui eseguire il confronto

source2 = string

origine dell'eventuale colonna su cui eseguire il confronto, da utilizzare in alternativa a field2.

operator = string

operatore; sono ammessi i seguenti valori:

eq | uguale
ne | diverso
gt | maggiore
ge | maggiore uguale
lt | minore
le | minore uguale
bg | inizia con
like | contenuto
isnull | nullo

value = string

Eventuali valori di confronto

negation = 0/1

Il confronto va negato

Esempio di filtro

Si vuole creare il seguente filtro da inserire nel parametro "listparameters"

filtro=(campo1 = 2 or campo2 = 3) and campo3 > 5 or (campo6 < 10 and campo6 > 20)

o per specificare meglio

filtro=(((campo1 = 2 or campo2 = 3)and campo3 > 5)or(campo6 < 10 and campo6 > 20))

Il risultato è il seguente:

  <listparameters xmlns="http://www.openwork.info/schema">

    <filter>

<conditiongroup method="OR">

<conditiongroup method="AND">

<conditiongroup method="OR">

<condition field="campo1" operator="eq" value="2"/>

<condition field="campo2" operator="eq" value="9"/>

</conditiongroup>

<condition field="campo3" operator="gt" value="5"/>

</conditiongroup>

<conditiongroup method="AND">

<condition field="campo6" operator="lt" value="10"/>

<condition field="campo6" operator="gt" value="20"/>

</conditiongroup>

</conditiongroup>

</filter>

  </listparameters>

Da questo esempio si può dire che è necessaria una conditiongroup ogni volta che in un'espressione c'è una parentesi.


Ricerche testuali

L'elemento textsearch ha la stessa struttura dell'elemento filter e viene usato per semplici ricerche di testo libero.

Le differenze rispetto all'elemento filter sono le seguenti:

· in una condition si specifica per operator il valore like e si compila solo l'attributo value.

Esempio di semplice ricerca di testo:

<listparameters xmlns="http://www.openwork.info/schema">

<textsearch>

<conditiongroup method="OR">

<condition operator="like" value="fattura"/>

<condition operator="like" value="cliente"/>

</conditiongroup>

</textsearch>

</listparameters>


Nascondere le funzioni di ricerca in un elenco

Nel nodo hidesearch si può specificare se nascondere le funzioni per la ricerca quando si apre un elenco. I valori ammessi per il parametro sono:

0: (impostazione predefinita in tutti gli elenchi ad eccezione di quelli con origine dati custom) mostra tutto;

1: (impostazione predefinita per elenchi con origine dati custom) nasconde la ricerca full-text;

2: nasconde la ricerca avanzata;

3: nasconde tutte le ricerche.


Ordinamento di un elenco

È possibile specificare uno o più campi secondo cui ordinare un elenco.

Di seguito si riporta un esempio di ordinamento in cui l'ordinamento è effettuato prima secondo il campo cliente in ordine crescente, poi in base al campo "datafattura" in ordine descrescente:

<listparameters xmlns="http://www.openwork.info/schema">

<order>

<orderby field="cliente"/>

      <orderby field="datafattura" type="DESC"/>

</order>

</listparameters>

L'ordine delle condizioni impostate deve rispettare il contenuto del rispettivo xml.

Supponendo che la riga dell'elenco sia la seguente: <row id = "[id]" data="[data]" ... >

allora la seguente impostazione di listparameters consente di ordianre solo per data

<listparameters xmlns="http://www.openwork.info/schema">

<order>

<orderby field = "data" type="DESC"/>

<orderby field="id" type="DESC"/>

</order>

</listparameters>

mentre la seguente impostazione di listparameters consente di ordinare correttamente per id e per data:

<listparameters xmlns="http://www.openwork.info/schema">

<order>

<orderby field="id" type="DESC"/>

<orderby field="data" type="DESC"/>

</order>

</listparameters>


Il campo localizzazione

Nel campo localizzazione è riportata una struttura XML analoga alla seguente:

   <labels language="it">

<label id="id">ID</label>

<label id="disp">Disponibile</label>

<label id="datadoc">Data</label>

<label id="ndoc">Numero</label>

<label id="autore">Autore</label>

<label id="uffprot">Uff. protocollo</label>

<label id="uffcomp">Uff. competenza</label>

<label id="resp">Responsabile</label>

<label id="class">Classificazione</label>

<label id="mitt">Mittente</label>

<label id="codmitt">Codice Mitt.</label>

<label id="oggetto">Oggetto</label>

<label id="origprat">NF</label>

<label id="idprat">F</label>

<label id="origproc">NP</label>

<label id="idproc">P</label>

<label id="arch">Arch.</label>

<label id="ann">Ann.</label>

   </labels>

Ciascun elemento label contiene il valore di un'etichetta visualizzata come intestazione di colonna o come descrizione di un'azione. Affinché l'associazione sia corretta ciascun attributo id dell'elemento label deve corrispondere all'id della azione o al name della colonna.


Definizione di un elenco con origine dati custom

Un elenco con origine dati custom è la visualizzazione di dati interni e/o esterni all'applicazione openwork®, purché non rappresentativi di documenti nel sistema. Esempi di elenchi con origine dati custom sono gli accessi ai listini prezzi in formato Excel o Access, database di attività di progetto in Microsoft Project, archivi di posta elettronica etc.

Tali elenchi possono poi essere utilizzati per popolare controlli nei modelli di documento di openwork®.

Per definire un elenco con origine dati custom, occorre seguire i passi di seguito elencati:

1. Definire un'origine dati che può essere:

- una query sullo stesso database (collegata eventualmente ad altre fonti) che restituisce un elenco;

- un componente COM che restituisca i dati in un formato XML opportuno come descritto nel paragrafo cfr. Componente COM come sorgente dati di un elenco.

Per maggiori dettagli sul formato che la fonte dati XML deve avere fare riferimento al capitolo cfr. dettaglio del parametro definizione.

2. Inserire un record nella tabella defdati i cui campi devono essere definiti come segue:
Record | Descrizione
id | Valore incrementale
nome | Nome significativo
definizione | Stringa XML (cfr. dettaglio del parametro definizione) che rappresenta la definizione della fonte dati.
ris3 | Valore che stabilisce l'utilizzo del'elenco. Possibili valori: 0 - solo elenco 1 - solo per combo/listbox 2- entrambi

Dettaglio del parametro definizione

La stringa definizione è così costituita:

<datasource xmlns="http://www.openwork.info/schema">

    <sourcetype>tipo origine dati</sourcetype>

    <source>origine dati</source>

    <class>classe</class>

    <indexfield>campo indice</indexfield>

    <reserved>riservato</reserved>

    <casesensitive>case sensitive</casesensitive>

    <order>

        <orderby field="campo ordinamento  " type="tipo ordinamento"/>

        ...

        <orderby field="campo ordinamento  " type="tipo ordinamento"/>

    </order>

</datasource>

dove:

Record | Descrizione
tipo origine dati | può essere query, table, library o vuoto;
origine dati | è il nome assegnato alla origine dati memorizzata nel database oppure la definizione completa della query SQL (SELECT …) , da valorizzare nel caso in cui tipo sia query, table o vuoto;
classe | è la classe del componente COM da creare e vale nel caso che il tipo sia library;
campo indice | è il nome del campo che funge da identificativo della riga. Non ha alcun valore predefinito. Si noti che la clausola è facoltativa solo in caso di semplice consultazione di elenchi, mentre è obbligatoria qualora si intenda utilizzare l'elenco congiuntamente ad altri controlli web e/o associarvi azioni.
riservato | può assumere valore 0 (default) oppure 1 e indica se deve essere incluso il campo speciale riservato qualora esso non sia presente tra i campi selezionati.
campo sensitive | parametro facoltativo. Può assumere valore 0 (default) oppure 1 e indica se durante l'esecuzione della ricerca la connessione al database deve essere posta in modalità case-sensitive. Il parametro è valido solo se si sta usando un DBMS Oracle.
campo ordinamento | rappresenta un campo all'interno della vista secondo il quale deve essere effettuato un ordinamento.
tipo ordinamento | rappresenta il tipo di ordinamento da effettuare sul campo specificato; può assumere valore asc (default) oppure desc (ordine inverso).

3. Inserire un record nella tabella schemi con i seguenti valori:

Record

Descrizione

id

Valore incrementale > 1000 (i valori <= 1000 sono riservati).

categoria

Identificativo della categoria di schema; valore da inserire 2.

archivio

Valore del parametro listtype; il valore da inserire è 10000 + id associato nella tabella defdati.

sottotipo

Valore utilizzato congiuntamente al parametro modello per definire diversi elenchi legati alla stessa origine dati.

modello

c.s.

contesto

Definizione dei campi, presi dall'origine dati, da includere nell'elenco; per la sua definizione, (cfr. Il campo contesto); a questi campi sono automaticamente aggiunti, se mancano, il campo indice descritto in precedenza e, se specificato con l'opzione reserved, il campo riservato.

nota

Nota

Non è sufficiente che i campi siano inseriti nella origine dati per essere visualizzati, devono essere necessariamente inseriti nel contesto

azioni

Definizione delle azioni che saranno abilitate sull'elenco (cfr. Campo action).

layout

Foglio di stile per visualizzare l'elenco; per la sua definizione si può copiare il contenuto corrispondente da uno dei campi in cui il valore categoria è uguale a 2.

localizzazione

Contiene le etichette per le colonne dell'elenco ed il titolo dell'elenco, localizzzate in ciascuna lingua che sarà utilizzata; per la sua definizione, riferirsi agli altri record presenti nella stessa tabella.

4.Visualizzare l'elenco da browser:Al fine di visualizzare l'elenco appena creato da browser occorre richiamare la pagina list.aspx passando come valori il listType (archivio), il listsubtype (sottotipo) e l'id dell'elenco (id record tabella defdati). Ad esempio il link alla pagina list.aspx potrebbe essere del tipo:

http://<nomeserver>/<directoryvirtuale>/list.aspx?listType=11&listsubtype=0&modelid=3


Componente COM come origine dati di un elenco

Affinchè un componente COM rappresenti un origine dati di un elenco, occorre creare una classe pubblica in modo che il ProgID risultante coincida con la classe specificata nel campo classe del record inserito nella tabella defdati. In tale classe vanno implementati:

1. La seguente funzione pubblica GetList

Function GetList([SubType As Long],

[ModelID As Long],

[PageNumber As Long],

[RecordsPerPage As Long],

[Filter As String],

[OrderBy As String],

[Language As String]

) As Boolean

A questa funzione, openwork® passerà i seguenti parametri:

Parametro | Descrizione
SubType | parametro di apertura ListSubType di un elenco
ModelID | parametro di apertura ModelID di apertura di un elenco
PageNumber | numero di pagina richiesto
RecordsPerPage | numero di righe per pagina
Filter | parte filter del parametro ListParameters di un elenco
OrderBy | parte order del parametro ListParameters di un elenco
Language | lingua dell'utente (ad es. "it")

La funzione restituisce True se la composizione dell'elenco va a buon fine, False altrimenti. In caso di successo i dati dell'elenco devono essere forniti mediante la proprietà Result specificata in seguito. In caso di fallimento l'errore viene restituito attraverso le proprietà ErrCode ed ErrDescription specificate in seguito.

2. Le seguenti proprietà pubbliche

Property Get ErrCode() As Long

Restituisce il codice di un eventuale errore verificatosi durante l'esecuzione dell'ultima funzione.Il range ammesso per i codici di errore va da 800 a 899.

Property Get ErrDescription([Language As String]) As String

Restituisce la descrizione di un eventuale errore verificatosi durante l'esecuzione dell'ultima funzione.

Property Get Result([ResultType As Long]) As Variant

Restituisce i dati relativi all'ultima funzione eseguita. Il tipo di parametro restituito dipende dal parametro ResultType nel seguente modo:

0 - stringa XML

1 - oggetto MSXML.DOMDocument

Se l'ultima funzione eseguita corrisponde alla GetList, sopra definita, la proprietà Result restituisce l'oggetto table contenente l'intestazione con gli attributi significativi e la sezione rows, come nel seguente esempio:

<table xmlns="http://www.openwork.info/schema" language="it" multipage="1" pages="1" currpage="1" recordsperpage="50" records="2" totalrecords="2">

<rows>

<row id="1" campo1="aaa" campo2="bbb"/>

<row id="1" campo1="ccc" campo2="ddd"/>

</rows>

</table>

I campi contenuti nelle righe (nell'esempio campo1 e campo2) devono corrispondere, nell'esatto ordine, a quelli presenti nel campo contesto del record inserito nella tabella schemi.
Nel caso di questo esempio il contesto sarà fatto nel seguente modo:

<columns>

<col visible='1' name='id' source='id' type='integer'/>

<col visible='1' name='campo1' source='campo1' type='text'/>

<col visible='1' name='campo2' source='campo2' type='text'/>

</columns>


Colonne Custom

E' possibile definire delle rappresentazioni dei dati personalizzate utilizzando l'attributo CUSTOMTYPE relativo ad una o più colonne dell'elenco che si vuole modificare.

E' necessario inserire nel record della tabella SCHEMI del database di openwork® corrispondente all'elenco in modifica, una struttura XML del tipo:

<columns>

<col visible="1" name="id" source="id" type="text" customtype="text"/>

<col visible="1" name="tipo" source="tipo" type="integer"

          customtype="prodotto"/>

<col visible="1" name="descrizione" source="descrizione" type="text"

          customtype="text"/>

<col visible="1" name="prezzo" source="prezzo" type="float"

          customtype="float"/>

</columns>

nel relativo campo CONTESTO.

Il valore di tale attributo sarà poi associato al template XSL definito nel file table.xsl presente nella cartella clibraries.

Il template XSL contenuto nel file sarà del tipo:

<xsl:stylesheet

   version = "1.0"

   xmlns:xsl = "http://www.w3.org/1999/XSL/Transform"

   xmlns:owk = "http://www.openwork.info/schema">

<xsl:template name = "customdatatype">

   <xsl:param name = "posix"/>

   <xsl:choose>

     <xsl:when test = "//owk:table/owk:columns/owk:col[$posix]/

                       @customtype='prodotto'">

       <img src = "cimages/customtype/{.}.gif"/>

     </xsl:when>

     <xsl:otherwise>

       <xsl:value-of select = "."/>

     </xsl:otherwise>

   </xsl:choose>

</xsl:template>

</xsl:stylesheet>

In questo modo, quando il processore XSL elabora la colonna con l'attributo CustomType valorizzato con 'Prodotto' gli associa l'immagine contenuta nella cartella ..\openwork\...\webserver\cimages\customtype.

In pratica in base al valore della colonna TIPO (1,2,3) verrà associata la relativa immagine nella colonna relativa dell'elenco openwork® (1.gif, 2.gif, 3.gif).

WebAp04 - listCustomtype

A partire dalla definizione, nel contesto di una lista, di una colonna con customdatatype, è possibile far sì che il processore xsl si comporti diversamente a seconda che il tipo custom si applichi alla renderizzazione a video, alla trasformazione xsl:fo per pdf o alla stampa dell'elenco in Excel.

In particolare, per l'applicazione alla stampa Excel, occorre intervenire nel file .\clibraries\table\table.xls; si tratta di un file xsl liberamente personalizzabile, che ottiene il controllo dall'omonimo presente in .\libraries qualora esso intercetti un tipo non censito, quindi custom.

Ad esempio:

Una ricerca proietta a video l'insieme delle richieste di permesso, mostrando anche una colonna nominata "durata" (differenza tra ora fine e ora inizio del permesso). Si vuole che questa ricerca sia esportabile in Excel, consentendo nel foglio Excel risultante le classiche operazioni matematiche. La colonna "durata" origina da un tipo "testo" poichè tale è il corrispondente controllo nella form di riferimento. L'elenco allora contiene, nel contesto, la seguente definizione:

<columns>

<!-- ... omissis ... -->

<col visible="1" name="durata" source="durata" type="text" customtype="durata"/>

<!-- ... omissis ... -->

</columns>

Non tragga in inganno l'omonimia tra il nome della colonna (riferimento per le label e per la struttura xml generata a runtime), il suo source (riferimento alla vista/query su database) e il customtype (riferimento per la renderizzazione custom).

Il tipo custom "durata" è così gestito, all'interno del file ./clibraries/table/table.xls :

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:owk="http://www.openwork.info/schema" >

<xsl:template name="xlscustomdatatype">

<xsl:param name="posix"/>

<xsl:param name="ctype"/>

<xsl:choose>

<xsl:when test = "//owk:table/owk:columns/owk:col[$posix]/@customtype='durata'">

<xsl:attribute name = "style">mso-style-parent:style0; mso-number-format:"\[hh\]\:mm"; text-align:right; white-space:normal;</xsl:attribute>

<xsl:choose>

<xsl:when test = ". != ''">

<xsl:value-of select = "concat(.,'.00')"/>

</xsl:when>

<xsl:otherwise>

</xsl:otherwise>

</xsl:choose>

</xsl:when>

<xsl:otherwise>

<xsl:value-of select = "."/>

</xsl:otherwise>

</xsl:choose>

</xsl:template>

</xsl:stylesheet>

Sostanzialmente, il template verifica che il tipo custom sia "durata" e, se è così:

· imposta lo stile opportuno per la cella Excel destinata ad ospitare il valore;
· se il valore in esame non è stringa vuota, lo concatena a ".00", poichè nel caso specifico il valore di origine è espresso in formato hh.mm;
· se il valore in esame è invece stringa vuota, esso viene trasferito così com'è nel foglio Excel.

Viceversa, se il tipo custom non è "durata", il dato è trasferito immutato nel foglio Excel di destinazione.

E' possibile, grazie alla struttura "xsl:choose-xsl:when-xsl-otherwise" (di fatto assimilabile alla switch-case-default), definire più di un tipo custom per l'applicazione web, ciascuno in un when di primo livello.

La medesima logica è applicabile anche per le trasformazioni xsl:fo (pdf) e le renderizzazioni a video.


Definizione di una ricerca

Si intende per ricerca la visualizzazione di un elenco di documenti presenti nel sistema basato su criteri personalizzati.

Per la definizione di una ricerca occorre seguire i seguenti passi:

1. Definire una origine dati: si tratta in genere di una vista sul database che restituisce l'insieme di record da visualizzare nell'elenco, oltre a potersi utilmente impiegare le seguenti viste predefinite:
· clientlist
· innerdocuments
· folders
· reglist
· inreglist
· outreglist
· alldocuments

Selezionando da tali viste le condizioni opportune, si possono creare nuove viste che restituiscano documenti presenti nel sistema, oppure si può creare viste personalizzate prendendo spunto da quelle proprietarie.

2. Inserire un record nella tabella ricerche con i seguenti valori:
Record | Descrizione
id | Valore incrementale
nome | Nome della ricerca
codificafiltro | Stringa XML che rappresenta la codifica del filtro da applicare sulla vista; per la sua descrizione fare riferimento al paragrafo cfr. dettaglio codifica del filtro;
ris3 | Valore del parametro da passare come listtype chiamando la pagina list.aspx;
ris4 | Opzioni per la definizione dell'utilizzo della vista; i valori ammessi sono: 0 - solo per elenco 1 - solo per combobox/listbox 2 - entrambi.

Dettaglio codifica del filtro

Per quanto attiene la definizione della stringa codificafiltro, essa appare così costituita:

<search xmlns="http://www.openwork.info/schema">

<sourcetype>tipo origine dati</sourcetype>

<source>origine dati</source>

<indexfield>campo indice</indexfield>

<idfield>campo id</idfield>

<docidfield>campo id documento</docidfield>

<doctypefield>campo tipo documento</doctypefield>

<noreserved>non riservato</noreserved>

<applyfilters>usa filtri</applyfilters>

<accessfield>campo accesso</accessfield>

<datefield>campo data</datefield>

<refofficefield>campo id ufficio protocollo</refofficefield>

<ownerofficefield>campo id ufficio competenza</ownerofficefield>

<ownerfield>campo id responsabile</ownerfield>

<userlistfield>campo lista di accesso</userlistfield>

<areafield>campo area organizzativa omogenea</areafield>

<usecache>usa cache</usecache>

<casesensitive>case sensitive</casesensitive>

<order>

<orderby field="campo ordinamento  " type="tipo ordinamento"/>

...

<orderby field="campo ordinamento  " type="tipo ordinamento"/>

</order>

</search>

dove

Record

Descrizione

tipo origine dati

Tipologia dell'origine dei dati: può essere query, table o vuoto.

origine dati

Nome assegnato all'origine dati memorizzata nel database. In alternativa è possibile anche indicare la definizione completa della query SQL (SELECT ...).

campo indice

Parametro facoltativo. E' il nome del campo che funge da identificativo della riga. Valori predefiniti:

id - per le ricerche di tipo 11, 12, 13, 14

codice - per le ricerche di tipo 16

idp - per le ricerche di tipo 10 e 19

Al fine di evitare conflitti con tali impostazioni predefinite, non conviene inserire questo parametro se non ci sono esigenze particolari.

campo id

Parametro facoltativo. E' il nome del campo (numerico) utilizzato internamente per le ricerche full-text nei file allegati. Valori predefiniti:

id - per le ricerche di tipo 11, 12, 13, 14, 16

idp - per le ricerche di tipo 10 e 19;

Al fine di evitare conflitti con tali impostazioni predefinite, non conviene inserire questo parametro se non ci sono esigenze particolari.

campo id documento

Parametro facoltativo. E' il nome del campo (numerico) che contiene l'identificativo del documento, utilizzato internamente per la ricerca testo semplice. Il valore predefinito è id.

Al fine di evitare conflitti con tali impostazioni predefinite, non conviene inserire questo parametro se non ci sono esigenze particolari.

campo tipo documento

Parametro facoltativo. E' il nome del campo (numerico) che contiene il tipo di documento, utilizzato internamente per la ricerca testo semplice. Il valore predefinito è tipo.

Al fine di evitare conflitti con tali impostazioni predefinite, non conviene inserire questo parametro se non ci sono esigenze particolari.

non riservato

Parametro facoltativo. Può assumere valore 0 (impostazione predefinita) oppure 1; indica se deve essere incluso il campo riservato se non presente tra i campi selezionati. Se non si prevede questo campo nella origine dati, bisogna specificare il valore 1.

Il parametro non è valido per le ricerche di tipo 16 (Ricerche su anagrafica).

usa filtri

Parametro facoltativo. Può assumere valore 0 (default) oppure 1; indica se devono essere applicati i criteri per l'accesso ai documenti sui campi specificati. Se si specifica il valore 1, è obbligatorio avvalorare nel filtro anche i seguenti parametri accessfield, datefield, refofficefield, ownerofficefield, ownerfield. Se il campo non è specificato non sarà applicato il corrispondente criterio.

campo accesso

Nome del campo (numerico) in cui sono presenti le regole di accesso al documento o anagrafica impostate nel piano di classificazione (es. listaccess in alcune query predefinite).

campo data

Nome del campo (data) su cui applicare le eventuali restrizioni periodiche (es. datadoc nelle query predefinite sui documenti o dataapertura nella query su fascicoli folders). Il parametro non è valido per le ricerche di tipo 16 (ricerche su anagrafica).

campo id ufficioprotocollo

Nome del campo (numerico) in cui è presente l'id dell'ufficio di protocollazione del documento (es. idufficioprotocollo in alcune query predefinite). Il parametro non è valido per le ricerche di tipo 16 (ricerche su anagrafica).

campo id ufficio competenza

Nome del campo (numerico) in cui è presente l'id dell'ufficio di competenza del documento (es. idufficiocompetenza in alcune query predefinite). Il parametro non è valido per le ricerche di tipo 16 (ricerche su anagrafica).

campo id responsabile

Nome del campo (numerico) in cui è presente l'id (da organigramma) del responsabile di un documento (es. idresponsabile nelle query predefinite). Il parametro non è valido per le ricerche di tipo 16 (ricerche su anagrafica).

campo lista di accesso

Nome del campo (numerico) in cui è presente la lista di accesso del documento (es. acllist in alcune query predefinite). Il parametro non è valido per le ricerche di tipo 16 (ricerche su anagrafica).

campo area organizzativa omogenea

Nome del campo (numerico) in cui è presente l'identificativo dell'area organizzativa omogenea di competenza del documento (es. idarea in alcune query predefinite). E' utilizzato solo se è attivo il filtro sull'area. Il parametro non è valido per le ricerche di tipo 16 (ricerche su anagrafica).

usa cache

Parametro facoltativo. Indica se nell'esecuzione della ricerca deve essere usato il meccanismo di caching dell'application server. Può assumere i seguenti valori:

0 - non usa cache (default)

1 - usa la cache

-1 - usa la cache solo per il conteggio dei record

case sensitive

Parametro facoltativo. Possibili valori:

0 - (default)

1 - indica se durante l'esecuzione della ricerca la connessione al database deve essere posta in modalità case-sensitive.

Il parametro è valido solo se si sta usando un DBMS Oracle.

campo ordinamento

Indica un campo all'interno della vista secondo il quale deve essere effettuato un ordinamento.

tipo ordinamento

Indica il tipo di ordinamento da effettuare sul campo specificato. Può assumere valore asc (default) oppure desc (ordine inverso).

3. Inserire un record nella tabella schemi. I valori da inserire nel record sono di seguito descritti:

Record

Descrizione

id

Valore incrementale > 1000 (valori <= 1000 sono riservati)

categoria

Identificativo della categoria di schema. Valore da inserire 2.

archivio

Valore del parametro listtype. (cfr. listtype)

sottotipo

Valore del parametro listsubtype. (cfr. listsubtype)

modello

id della tabella ricerche precedentemente definito.

contesto

Definizione dei campi, presi dall'origine dati, da includere nell'elenco; (cfr. Il campo contesto). Si noti che a questi campi sono automaticamente aggiunti, se non previsti, il campo campo indice descritto in precedenza e - se non specificato con l'opzione noreserved e se non si tratta di ricerca di tipo 16 -, il campo riservato.

nota

Nota

Non è sufficiente che i campi siano inseriti nella origine dati per essere visualizzati, devono essere necessariamente inseriti nel contesto

azioni

Definizione delle azioni che saranno eventualmente abilitate sull'elenco (cfr. Campo action).

layout

Foglio di stile per visualizzare l'elenco. Per la sua definizione si può copiare il contenuto da un corrispondente campo in cui il valore categoria è uguale a 2. (cfr. Il campo layout)

localizzazione

Contiene le etichette per le colonne dell'elenco ed il titolo dell'elenco, localizzzate in ciascuna lingua che sarà utilizzata. Per la sua definizione far riferimento agli altri record presenti nella stessa tabella. (cfr. Il campo localizzazione)


Conteggio delle righe

E’ possibile impostare il server openwork® in modo che, all’apertura di un elenco, non venga contato il numero di righe, operazione che, per elenchi molto voluminosi, richiede periodi di attesa.

Per fare ciò nel file di configurazione openwork.xml inserire il seguente tag:

<installazione>
<nome>NET SISTEMI S.R.L.</nome>
...
<database>
<nocount>1</nocount>
...
</database>
</installazione>

In tal modo, per tutti gli elenchi, non viene mostrata l’indicazione di righe totali bensì viene visualizzato il tasto Vai a pag. come mostrato in figura.

ele01 - pageNumber

Nell’esempio in figura i puntini di sospensione … accanto all’indicatore della pagina 2 riportano la presenza di altre pagine a cui si accede tramite i tasti Successiva o Vai a pag..

E’ inoltre possibile porre un limite al numero di righe visualizzate in una pagina di elenco.

Per fare ciò nel file di configurazione openwork.xml inserire il seguente tag:

<installazione>
<nome>NET SISTEMI S.R.L.</nome>
...
<database>
<rowlimit>10</rowlimit>
...
</database>
</installazione>


Esempio definizione ricerca

Supponiamo di voler definire una ricerca custom su documenti interni. Seguendo quanto scritto nel paragrafo cfr. Definizione di una ricerca:

1. Definire un origine dati: Accedere al database di openwork® e creare una nuova vista a partire da una delle viste proprietarie esistenti. Scegliere tra le viste disponibili quella con lo stesso tipo della ricerca custom che si vuole creare. Nel nostro esempio per creare una ricerca custom sui documenti interni scegliere la vista INNERDOCUMENTS.

SELECT documentiinterni.id, documentiinterni.idregistro AS idarea, documentiinterni.protocollato, documentiinterni.creato AS disponibile, documentiinterni.datadoc, documentiinterni.numerodoc, documentiinterni.numerodocaus AS numero, documentiinterni.idutentecreazione AS idautore, documentiinterni.idufficioprotocollo, documentiinterni.ufficioprotocollo, documentiinterni.idufficiocompetenza AS idufficio, documentiinterni.ufficiocompetenza AS ufficio, documentiinterni.idresponsabile, documentiinterni.responsabile, documentiinterni.idcategoria AS idclassificazione, documentiinterni.pclassificazione & ' ' & documentiinterni.classificazione AS classificazione, documentiinterni.corrispondente, documentiinterni.idcorrispondente AS codicecorrispondente, documentiinterni.oggetto, documentiinterni.impronta AS sha1, documentiinterni.dataemergenza, documentiinterni.numeroemergenza, documentiinterni.originaprocesso, documentiinterni.idprocesso, documentiinterni.archiviato, documentiinterni.annullato, documentiinterni.revisionato, documentiinterni.riservato, documentiinterni.acllist, tuttiutenti.nome AS autore, modelli.listaccess

FROM (documentiinterni LEFT JOIN tuttiutenti ON documentiinterni.idutentecreazione = tuttiutenti.id) INNER JOIN modelli ON documentiinterni.idcategoria = modelli.id;

Personalizzare adeguatamente la vista copiata con i campi di proprio interesse utilizzati nelle form.

Per utilizzare i campi custom della form come ad esempio libero1, libero 43 etc. occorre inserire nella vista l'opportuno JOIN con la tabella custom associata alla tabella che si sta interrognado. Nel nostro esempio, trattandosi di una vista che interroga la tabella documentiinterni la rispettiva tabella custom è la documentiinternicustom .

Se necessario inserire appropriate condizioni di WHERE nella query SQL.

La query SQL di prima, diventa:

CREATE OR REPLACE FORCE VIEW CS_ESEMPIO_RICERCA

AS

SELECT documentiinterni.id, documentiinterni.numerodocaus, documentiinterni.numerodoc, documentiinterni.datadoc,documentiinterni.riservato,

documentiinternicustom.libero1 AS nomecampo1,

documentiinternicustom.libero2 AS nomecampo2,

documentiinternicustom.libero3 AS nomecampo3,

documentiinternicustom.libero4 AS nomecampo4,

documentiinternicustom.libero5 AS nomecampo5,

documentiinternicustom.libero6 AS nomecampo6,

documentiinternicustom.libero7 AS nomecampo7,

documentiinternicustom.libero8 AS nomecampo8

FROM ((documentiinterni LEFT JOIN tuttiutenti ON documentiinterni.idutentecreazione = tuttiutenti.id) INNER JOIN modelli ON documentiinterni.idcategoria = modelli.id) INNER JOIN documentiinternicustom ON documentiinterni.id = documentiinternicustom.id

WHERE (((documentiinterni.idcategoria)=23));

2.Inserire un record nella tabella ricerche: Inserire nella tabella tabella RICERCHE un record opportunamente avvalorato. Nel nostro esempio i valori adeguati sono:

Record

Valore

id

7

nome

CS_ESEMPIO_RICERCA

codificafiltro

Copiare codifica filtro da cfr. Codifica filtro e sostituire i valori di default con i valori appropriati come ad esempio

<search xmlns = "http://www.openwork.info/schema">

<sourcetype>query</sourcetype>

<source>cs_esempio_ricerca</source>

<indexfield>id</indexfield>

<idfield>id</idfield>

<noreserved>0</noreserved>

</search>

Nel nostro esempio il campo applyfilters non è stato avvalorato ad 1 quindi non è necessario impostare i relativi parametri accessfield, datefield, refofficefield, ownerofficefield, ownerfield

ris3

il campo RIS3 viene impostato a 13 valore che indica “Ricerche su documenti e protocollo interno” (cfr. listtype-listsubtype-modelid).

ris4

ris4 viene impostato a 2 valore che indica che la vista viene utilizzata sia per elenchi che per combo box (cfr. listtype-listsubtype-modelid).

3.Inserire un record nella tabella schemi:Inserire un record nella tabella schemi duplicando un record similare e scegliendo un ID univoco>1000.Nel nostro esempio, documenti interni corrisponde a listype 13 e il record da inserire nella tabella schemi diventa:

Record

Descrizione

id

Valore incrementale > 1000 (valori <= 1000 sono riservati)

categoria

Valore da inserire 2.

archivio

13 (corrisponde al campo RIS 3 inserito nella tabella RICERCHE)

sottotipo

Nel nostro esempio 0.

modello

id della tabella ricerche precedentemente definito, nel nostro esempio 7.

contesto

<columns>

<col visible = "0" name = "id" source = "id" type = "integer"/>

<col visible = "0" name = "datadoc" source = "datadoc" type = "text"/>

<col visible = "0" name = "numerodoc" source = "numerodoc" action="open" type = "text"/>

<col visible = "1" name = "nomecampo1" source = "nomecampo1" type = "text"/>

<col visible = "1" name = "nomecampo2" source = "nomecampo2" type = "text"/>

<col visible = "1" name = "nomecampo3" source = "nomecampo3" type = "text"/>

<col visible = "1" name = "nomecampo4" source = "nomecampo4" type = "text"/>

<col visible = "1" name = "nomecampo5" source = "nomecampo5" type = "text"/>

<col visible = "1" name = "nomecampo6" source = "nomecampo6" type = "text"/>

<col visible = "1" name = "nomecampo7" source = "nomecampo7" type = "text"/>

<col visible = "0" name = "nomecampo8" source = "nomecampo8" type = "text"/>

</columns>

Vengono inserite tutte le colonne, usando lo stesso valore per name e source. Il campo visible, inoltre, ci permette di nascondere (valore 0) o meno le voci.

azioni

<actions>

<action enabled="1" type="base" id="open" lang_it="Apri"/>

</actions>

Vengono inseriti i bottoni standard da visualizzare. Nel nostro esempio, l’utente può eseguire solo l’azione “Apri”.

layout

Foglio di stile per visualizzare l'elenco. Per la sua definizione copiare il contenuto da un corrispondente campo in cui il valore categoria è uguale a 2.

localizzazione

<labels language = "it">

<label id = "id">ID</label>

<label id = "datadoc">Data documento</label>

<label id = "numerodoc">Numero Documento</label>

<label id = "nomecampo1">Etichetta1</label>

<label id = "nomecampo2">Etichetta2</label>

<label id = "nomecampo3">Etichetta3</label>

<label id = "nomecampo4">Etichetta4</label>

<label id = "nomecampo5">Etichetta5</label>

<label id = "nomecampo6">Etichetta6</label>

<label id = "nomecampo7">Etichetta7</label>

<label id = "nomecampo8">Etichetta8</label>

<label id = "title">Esempio Ricerca</label>

</labels>

Vengono inserite le labels delle varie colonne, comprese quelle nascoste.

4.Visualizzare la ricerca da browser:Al fine di visualizzare la ricerca appena creata da browser occorre richiamare la pagina list.aspx passando come valori il listType (13), il listsubtype (0) e l'id della ricerca (modelid=7). Nel nostro esempio il link alla pagina list.aspx diventa:

http://<nomeserver>/<directoryvirtuale>/list.aspx?listType=13&listsubtype=0&modelid=7


Ricerca Semplice

Quando si visualizza una lista è possibile effettuare una ricerca semplice nei documenti della lista stessa.

Le opzioni di ricerca sono:

· Tutte le parole: cerca e restituisce i documenti che contengono nei campi soggetti a ricerca tutte le parole inserite nella textbox;
· Almeno una parola: cerca e restituisce i documenti che contengono nei campi soggetti a ricerca almeno una delle parole inserite nella textbox;
· Frase intera: cerca e restituisce i documenti che contengono nei campi soggetti a ricerca la frase esatta inserita nella textbox.
· Parole esatte (requisito per il funzionamento modulo full-text del database abilitato): cerca e restituisce i documenti che contengono nei campi soggetti a ricerca le parole esatte inserite nella textbox. Ad esempio se nel campo di ricerca viene inserita la parola "Poli" il risultato della ricerca riporterà tutti i documenti che contengono la parola "Poli" e non i documenti che contengono la parola "Politecnico" come accade per le altre opzioni di ricerca.

Search01 - Simple

Ai fini di effettuare una ricerca semplice nei documenti presenti nella lista:

1. Inserire la stringa da ricercare nella textarea;
2. Selezionare l'opzione di ricerca desiderata;
3. Fare click sul pulsante Cerca;

La finestra corrente si aggiorna e mostra i risultati della ricerca effettuata.

nota

Nota

Le virgolette " rappresentano un carattere speciale per la textarea della ricerca semplice. Per effettuare la ricerca semplice delle virgolette occorre raddoppiarle inserendo nella textarea la stringa ""

Se la funzionalità fulltext del DBMS openwork® risulta attivata, sarà leggermente modificata la modalità di ricerca semplice all’interno dei documenti da parte degli utenti. A causa delle sostanziali differenze esistenti tra i vari DBMS supportati da openwork®, il funzionamento della ricerca semplice cambia a seconda del tipo di database installato sul server, come descritto nelle tabelle che seguono.

Oracle

Su DMBS Oracle la ricerca viene effettuata in tutta la stringa (parole che iniziano, che contengono, che finiscono per i caratteri ricercati).

Esempio: la ricerca “hello” riporterà tra i risultati: “hello world”, “Mark, hello!”, “xxxhelloxxx”.

· Operatori non ammessi

Gli operatori:
, $ \ / : * ? > | ; ' ! ~ - & = { } ( ) [ ] " % _
sono considerati dal fulltext engine di Oracle come separatori tra parole o sono caratteri riservati, in openwork® sono quindi sostituiti con uno spazio.

Esempio: ricercare “hello&world”, con opzione “tutte le parole”, produrrà la stessa ricerca di “hello world” con opzione “frase esatta”

· Frasi vuote o interamente “non valide”

Nel caso in cui dopo la sostituzione dei caratteri sopraccitati, la parola ricercata risultasse vuota (o composta unicamente da spazi) openwork® restituisce un errore del tipo: condizione non valida.

Esempio: ricercare “%&$)=” restituisce un errore.

· Ricerche con troppi risultati

Ricerche che producono troppi risultati restituiscono un errore contente la frase “Too many items”.

Esempio: se si ricerca “a” su 300.000 documenti, tutti contenenti la lettera “a” verrà prodotto un errore “Too many items” e quindi nessun risultato.

MSSQL2005

Su DMBS Sql Server 2005, per impostazione dell’engine, la ricerca viene effettuata solo su quelle parole che iniziano per la frase ricercata.

Esempio: la ricerca “factor” riporterà tra i risultati: “.. the factor is ..”, mentre non riporterà risultati come “.. refactor ..”, “.. refactoring ..”.

· Operatori non ammessi

Gli operatori:
* & | ' ! " / , [ ] ( ) { } -
sono considerati dal fulltext engine di MS Sql Server 2005 come separatori tra parole o sono caratteri riservati, in openwork® sono quindi sostituiti con uno spazio.

Esempio: ricercare “hello&world”, con opzione “tutte le parole”, produrrà la stessa ricerca di “hello world” con opzione “frase esatta”

· Frasi vuote o interamente “non valide”

Nel caso in cui dopo la sostituzione dei caratteri sopraccitati, la parola ricercata risultasse vuota (o composta unicamente da spazi) openwork® restituisce un errore del tipo: condizione non valida.

Esempio: ricercare “%&$)=” restituisce un errore.

MSSQL2000

Analogamente alla versione 2005 dell’engine, la ricerca viene effettuata solo su quelle parole che iniziano per la frase ricercata.

Esempio: la ricerca “factor” riporterà tra i risultati: “.. the factor is ..”, mentre non riporterà risultati come “.. refactor ..”, “.. refactoring ..”.

· Operatori non ammessi

Nella versione 2000 di SQL Server di Microsoft il motore fulltext utilizzato dal DBMS non consente la ricerca di caratteri speciali, per cui sono ammesse, all’interno di una frase da ricercare solo numeri o lettere.

Esempio: ricercare “hello&=#world”, con opzione “tutte le parole”, produrrà la stessa ricerca di “hello world” con opzione “frase esatta”.

· Frasi vuote o interamente “non valide”

Nel caso in cui dopo la sostituzione dei caratteri sopraccitati, la parola ricercata risultasse vuota (o composta unicamente da spazi) openwork® restituisce un errore del tipo: condizione non valida.

Esempio: ricercare “%&$)=” restituisce un errore.


Ricerca avanzata

Sulle colonne di elenchi con rappresentazione custom, è ovviamente possibile effettuare delle ricerche avanzate. Quindi è necessario definire gli operatori di confronto, ed eventualmente i valori rispetto ai quali fare i confronti.

Si dovranno quindi definire all'interno del file ...\openwork\...\clibraries\advsearch.js tanti array quanti sono le colonne personalizzate:

advSearchCustomDef = new Array(colonna_customtype, mode_campo_confronto,

array_operatori, [array_valori])

invece all'interno del file ...\openwork\...\clibraries\advsearchadvsearch.cs.it il relativo array:

advSearchCustomDefLabels = new Array(colonna_customtype, array_etichette_operatori,

[array_etichette_valori])

Il primo serve a definire il modello relativo alla/alle colonne CUSTOM dell'elenco, ad esempio:

advSearchCustomDef[0] = new Array('prodotto','indexed', new Array('ge','ne','eq'),

new Array(1,2,3,4));

il secondo le etichette relative agli operatori di confonto, ad esempio:

advSearchCustomDefLabels[0] = new Array('prodotto',

new Array('maggiore di','diverso da','uguale a'),

new Array('telefonia','computer','cancelleria','prodotti consumo'));

attenzione

Attenzione

Nel caso in cui campo di confronto abbia come attributo owk:mode i valori LIST o INDEXED (come nell'esempio riportato) l'ultimo parametro array_valori e array_etichette_valori è obbligatorio in entrambi i casi.

Nella schermata che segue la rappresentazione WEB degli esempi di sopra:

WebAp05 - CustomType

La pagina di ricerca avanzata ammette le seguenti querystring:

• hidelogo – se specificato nasconde il logo della configurazione;

• hideactions – permette di specificare le azioni della toolbar da nascondere;

Le azioni riconosciute sono: add, confirm, cancel e desktop. Se si specifica all verrà nascosta l’intera toolbar;

• hidelabels – se specificato nasconde le etichette delle azioni;

Esempio

advsearch.aspx?hideactions=desktop;cancel

nell’esempio vengono nascoste le azioni Desktop e Annulla.


Definizione di un'agenda delle attività custom

I record riportati nell'agenda delle attività sono composti da:

· attività in carico all'utente;
· attività non assegnate e che l'utente può prendere in carico;
· attività delle due categorie precedenti per gli altri operatori che l'operatore corrente sta sostituendo (cfr. Le sostituzioni).

Nel database di openwork® sono definite due viste (assignedactivities e waitingactivities) che sono utilizzate, applicando dei filtri, per estrarre le due categorie di attività suddette (in carico e da prenotare).

Per le attività in carico il filtro, attraverso cui vengono mostrate, è applicato su un campo (userid) che deve corrispondere all'id dell'utente corrente.

Per le attività da prenotare invece, la formula dei partecipanti viene risolta all'attivazione e suddivisa in una serie di record inseriti nella tabella absoluteparticipants; il filtro è composto da una serie di condizioni (l' utente corrente, il ruolo, l'ufficio e gli eventuali gruppi) su quest'ultima tabella, che viene messa in JOIN con la vista waitingactivities.

Dopo l'estrazione dei record da ciascuna di queste due categorie vengono aggiunti dei campi dinamici (informazioni sull'utente e sulle sostituzioni) e viene composto il campo id che costituisce l'indice della riga.

Queste operazioni sono ripetute per ogni sostituzione attiva e alla fine la query risultante è costituita da una serie di UNION, in numero variabile a seconda delle sostituzioni.

Fatta questa premessa, il meccanismo implementato per poter definire una agenda custom ricalca quello illustrato per l'agenda standard.

Gli elementi che costituiscono la customizzazione sono i seguenti:

· utilizzo di query custom in sostituzione delle query assignedactivities e waitingactivities;
· definizione di uno schema personalizzato (per aggiungere e/o togliere colonne);
· definizione di uno o più ordinamenti.

I passi per costruire l'agenda custom sono i seguenti:

1. Definire le due query per estrarre le attività in carico e quelle da prenotare; le query possono essere memorizzate nel database o scritte direttamente nella definizione (si veda il punto successivo).

Il modo ovviamente più semplice per definire le query è quello di partire da quelle proprietarie e aggiungere o togliere parti: per esempio si possono fare dei JOIN con le tabelle documentali e aggiungere campi dei documenti. Nel definire le query bisogna far attenzione alle seguenti regole, pena il non funzionamento di qualche parte del meccanismo:

· le due query devono restituire gli stessi campi, per poter effettuare le UNION;
· devono contenere un campo idpn definito come idprocesso_idnodo; a questo verrà accodato il valore _idutente per formare l'identificativo (id) di una riga, che sarà quindi idprocesso_idnodo_idutente. Questo è necessario perchè è utilizzato dall'interfaccia client per l'esecuzione delle attività e altro;
· devono contenere i campi idprocesso e idnodo dell'attività, utilizzati per filtrare i partecipanti sulle attività da prenotare;
· devono contenere il campo userid dell'attività, utilizzato per filtrare le attività in carico;
· devono contenere alcuni altri campi dell'attività necessari all'esecuzione delle varie azioni lato client: stato, tipo, istruzioni, iddoc, tipodoc, saltabile, dataprevista;
· se si vogliono includere dei campi relativi ai documenti collegati alle attività bisogna far attenzione a fare dei LEFT JOIN (per includere tutte le attività) con le tabelle giuste, tenendo conto dei campi iddoc e tipodoc.

nota

Nota

Le query non sono entrambe obbligatorie, se ne può anche omettere una, nel qual caso non verranno incluse le corrispondenti attività: per esempio, si possono includere solo le attività in carico.

2. Creare un record nella tabella ricerche. Il record dovrà contenere i seguenti valori:

Record | Descrizione
id | Valore incrementale.
nome | Nome dell'agenda custom.
codificafiltro | Stringa XML che rappresenta la definizione dell'agenda custom; per la sua descrizione fare riferimento al paragrafo cfr. dettaglio codifica del filtro;
ris3 | Valore da inserire 403

Dettaglio codifica del filtro

La definizione dell'agenda custom è un documento XML con la seguente struttura:

<search xmlns="http://www.openwork.info/schema">

<waitingactivities>[query attività da prenotare]</waitingactivities>

<assignedactivities>[query attività in carico]</assignedactivities>

<order>

   <orderby field="[campo ordinamento]" type="[tipo ordinamento]"/>

   ...

   <orderby field="[campo ordinamento]" type="[tipo ordinamento]"/>

</order>

</search>

dove

Record | Descrizione
[query attività da prenotare] | E' il nome di una vista o una istruzione SQL completa di tipo SELECT ... che restituisce le attività da prenotare. Se si omette non saranno incluse in agenda le corrispondenti attività.
[query attività in carico] | E' il nome di una vista o una istruzione SQL completa di tipo SELECT ... che restituisce le attività in carico. Se si omette non saranno incluse in agenda le corrispondenti attività.
[campo ordinamento] | E' il nome di un campo secondo il quale si vuole ordinare l'elenco.
[tipo ordinamento] | E' il tipo di ordinamento da applicare (ASC o DESC).

Esempio di codifica filtro:

<search xmlns="http://www.openwork.info/schema">

<waitingactivities>select * from waitingactivities</waitingactivities>

<assignedactivities>assignedactivities</assignedactivities>

<order>

   <orderby field="idprocesso" type="desc"/>

   <orderby field="data" type="desc"/>

</order>

</search>

In questo esempio viene ricreata l'agenda delle attività standard, con un ordinamento diverso.

3. Creare un record nella tabella schemi. Il record dovrà contenere i seguenti valori:

Record

Descrizione

id

Valore incrementale > 1000 (valori <= 1000 sono riservati)

categoria

Identificativo della categoria di schema. Valore da inserire 2.

archivio

Valore da inserire 401.

sottotipo

Valore da inserire 0.

modello

id della tabella ricerche precedentemente definito.

contesto

Definizione dei campi, presi dall'origine dati, da includere nell'elenco; (cfr. Il campo contesto).

nota

Nota

Non è sufficiente che i campi siano inseriti nella origine dati per essere visualizzati, devono essere necessariamente inseriti nel contesto.

azioni

Definizione delle azioni che saranno eventualmente abilitate sull'agenda (cfr. Campo action).

layout

Foglio di stile per visualizzare l'elenco. Per la sua definizione si può copiare il contenuto dal corrispondente campo in cui il valore archivio è uguale a 400. (cfr. Il campo layout)

localizzazione

Contiene le etichette per le colonne dell'elenco ed il titolo dell'elenco, localizzzate in ciascuna lingua che sarà utilizzata. Per la sua definizione far riferimento agli altri record presenti nella stessa tabella. (cfr. Il campo localizzazione)

nota

Nota

Se il record nella tabella schemi è omesso, viene usato quello relativo all'agenda standard (archivio = 400, sottotipo = 0, modello = 0).

4. Visualizzare l'agenda da browser:Al fine di visualizzare l'agenda custom appena creata da browser occorre richiamare la pagina list.aspx passando come valori il listType (archivio ossia 401), il listsubtype (sottotipo ossia 0) e l'id dell'elenco (id record tabella ricerche). Ad esempio il link alla pagina list.aspx potrebbe essere del tipo:

http://<nomeserver>/<directoryvirtuale>/list.aspx?listType=401&listsubtype=0&modelid=3


Form

La pagina document.aspx rappresenta la pagina utilizzata per l'apertura/creazione di una form.

Di seguito verranno descritti i parametri che caratterizzano l'apertura/creazione di una form e i dettagli ralativi alle fascicolazione multipla della form stessa.

In dettaglio:

· Parametri per l'apertura di una form
· La fascicolazione multipla


Parametri apertura

Per aprire/creare una form openwork® si può utilizzare la pagina del webserver document.aspx con l' aggiunta dei seguenti parametri:

Parametro

Descrizione

actiontype

Azione da eseguire. Obbligatorio se non viene indicato il parametro transform. Possibili valori:

1 - Apre un documento esistente.

4 - Crea un nuovo documento.

5 - Replica di un documento.

8 - Apre l'allegato di un documento.

transform

Obbligatorio se non viene indicato il parametro actiontype. Se presente, il documento viene aperto in sola lettura e viene applicato allo stesso la trasformazione indicata dal parametro. Il valore del parametro transform quindi corrisponde all'identificativo della trasformazione che si desidera applicare alla form (cfr. Trasformazione di una form o di un elenco). Possibili valori:

0 - Il documento viene trasformato lato client e vengono applicati i fogli di stile per la stampa (CSS/document.css).

> 0 - Il documento viene trasformato lato server e viene aperta una pagina con il risultato della trasformazione.

1 - viene aperta una pagina con la trasformazione in PDF della form. Qualora ci fossero più trasformazioni PDF per la stessa form occorre specificare l'identificativo della trasformazione specifico.

print

Obsoleto (cfr. tranform).

style

Parametro obbligatorio. Indica la tipologia di documento. Possibili valori:

1 - Documento in entrata.

2 - Documento in uscita.

3 - Documento interno.

4 - Fascicolo.

6 - Scheda di anagrafica.

7 - Messaggio.

id

Parametro obbligatorio quando actiontype<> 4 e style<>6. Se style = 6 è alternativo al parametro code. Rappresenta l'identificativo del documento e può assumere solo valori >0.

Esempio:

http://<nome_server>/<nome_configurazione>/document.aspx?actiontype=1&

style=6&ID=3

code

Parametro obbligatorio quando style=6 ed actiontype<>4, in alternativa al parametro id. Rappresenta il codice relativo ad una scheda di anagrafica e può assumere valori di tipo string.
Esempio:

http://<nome_server>/<nome_configurazione>/document.aspx?actiontype=1&

style=6&CODE=000003

scrollpos

Parametro facoltativo. Se presente, indica che il documento, una volta ricaricato, ad esempio in seguito all'azione salva, deve essere 'scrollato' sino alla posizione indicata. Può assumere solo valori >0.

Di seguito vengono elencati i parametri che possono essere utilizzati esclusivamente per un determinato valore del parametro actiontype.

· actiontype = 1 - Apertura di un documento esistente.

Parametro

Descrizione

readonly

Parametro è facoltativo che indica se il documento deve essere aperto in sola lettura. Per valori <> 0, il documento viene aperto in sola lettura. Se non indicato, il documento viene aperto in lettura e scrittura.

skipwarning

Parametro facoltativo. Se uguale a 1 e il documento viene aperto in scrittura senza possedere le dovute autorizzazioni, viene aperto in lettura senza visualizzare alcun avvertimento. Questa modalità può essere estesa a tutte le istanze impostando tale parametro come variabile di applicazione (cfr. Apertura Istanze di Form). Il parametro di apertura ha prevalenza sulla variabile di applicazione.

cacheid

Parametro facoltativo. L'XML di un modello di form viene memorizzato dai Web Services all'interno di una cache, in una posizione individuata da un identificativo reperibile da un attributo della root del file XML che rappresenta la form. Assegnando al parametro il valore di questo identificativo, il Web Service preleva l'XML dalla cache piuttosto che riaprire la form, evitando il carico di lavoro che questo comporta. Trova utilizzo, ad esempio, quando si vuole stampare una form, dopo che questo è stato salvata. Può assumere solo valori >0.

folderid

Identificativo di un fascicolo, da utilizzare quando si apre un una forma dall'interno di un fascicolo: il server verifica se il fascicolo è effettivamente aperto e permette l'accesso al documento indipendentemente dalle autorizzazioni specifiche. Assume valori >0.

Esempio:

http://<nome_server>/<nome_configurazione>/document.aspx?

actiontype=4&style=3&modelid=9&folderid=62

listoninsfold

Se a 1 disabilita il passaggio attraverso il Piano di Classificazione in fase di fascicolazione. Questo parametro può essere impostato anche come variabile di applicazione o passato da codice. Quindi può essere impostato, nell'ordine mutuamente esclusivo:

- da codice
- da parametro di apertura
- da variabile di applicazione

questo parametro non viene considerato se è impostata la tipologia di fascicolazione per il modello di form.

· actiontype=4 - Creazione di un nuovo documento

Parametro

Descrizione

modelid

Parametro facoltativo. Identificativo del modello di documento che si desidera creare. Se il parametro non è impostato, l'applicazione presenta la schermata contenente il piano di classificazione in modo da consentire la selezione del tipo di documento da creare. Assume valori >0, che rappresentano l'ID del modello di documento che si desidera creare nel caso in cui tale documento sia un:

- Protocollo in entrata, Protocollo in uscita, Documento interno o Protocollo interno l'ID del documento corrisponde all'attributo id del file XML del piano di classificazione (visionabile anche da BPMTools nella finestra del piano di classificazione).

- Fascicolo l'ID del documento corrisponde all'attributo addid del file XML del piano di classificazione (visionabile anche da BPMTools nel dettaglio della voce del piano di classificazione).

emergency

Parametro facoltativo. Se presente, indica che si intende creare una nuova registrazione da protocollo di emergenza, in tal caso nel documento appaiono gli appositi campi per indicare il numero di registrazione in emergenza e la data di registrazione.

reserved

Parametro facoltativo. Se presente, indica che la nuova form deve essere creata come protocollo riservato.

ph

Indica se deve essere creata una nuova scheda di anagrafica persona fisica o persona giuridica.

Il parametro è obbligatorio quando style=6; negli altri casi, invece, anche se specificato, non è utilizzato. Possibili valori:

0 - Scheda di anagrafica persona giuridica.

>0 - Scheda di anagrafica persona fisica.

attid

Parametro facoltativo da utilizzare quando actiontype=4 e style=6 e congiuntamente a attstyle, rappresenta l'identificativo della form da allegare al messaggio. Assume valori >0.

attstyle

Parametro facoltativo da utilizzare quando actiontype=4 e style=6 e, congiuntamente a attid, rappresenta l'identificativo della form da allegare al messaggio. Assume valori >0.

folderid

Parametro che consente di fascicolare un documento nel momento in cui viene creato. Assume valori >0.

listoninsfold

Se a 1 disabilita il passaggio attraverso il Piano di Classificazione in fase di fascicolazione. Questo parametro può essere impostato anche come variabile di applicazione o passato da codice. Quindi può essere impostato, nell'ordine mutuamente esclusivo:

- da codice
- da parametro di apertura
- da variabile di applicazione

questo parametro non viene considerato se è impostata la tipologia di fascicolazione per il modello di form.

· actiontype=5 - Replica di un documento
Parametro | Descrizione
field | Nome del campo da replicare. Per indicare più campi da replicare è sufficiente passare una concatenazione del nome dei field separati ";" oppure è possibile ripetere più volte il filed come segue: &field=oggetto&field=mittente Parametro opzionale, se non indicato vengono replicati tutti i campi modificabili.
attachs | Parametro facoltativo. Se presente indica che nel documento replicato devono essere presenti anche gli allegati. Il documento in questo caso viene salvato automaticamente, per cui è necessario che il parametro field non sia indicato (in modo da replicare tutti i campi) oppure che il parametro field contenga i campi obbligatori. Può assumere valore 1.
reserved | Parametro facoltativo. Se presente, indica che la nuova form deve essere creata come form riservata.

· actiontype=8 - Apertura dell'allegato a un documento.

Parametro

Descrizione

idattach

Identificativo dell'allegato che si intende visualizzare. Se presente i parametri successivi vengono ignorati . Può assume solo valori >0.

primary

Se presente e positivo, indica che si vuole visualizzare l'allegato primario e in tal caso i parametri successivi vengono ignorati.

name

Nome completo di estensione dell'allegato che si vuole visualizzare. Da utilizzarsi eventualmente insieme al parametro version.

extension

Estensione dell'allegato che si desidera visualizzare. E' utilizzato in alternativa al parametro name quando non si conosce il nome completo dell'allegato. Da utilizzarsi eventualmente insieme al parametro version.

version

Versione dell'allegato che si desidera visualizzare. Da utilizzarsi congiuntamente a name o extension. Può assumere solo valori >0.

Se non specificato apre la versione più recente.

withoutmime

Specifica al server che deve restituire l'allegato come flusso binario con content-type=application/octet-stream. In questo caso il browser non controlla il contenuto dell'allegato e propone la finestra Apri/Salva/Annulla. Nel caso di apertura, il client userà il viewer di default. In particolare:

· Se l'allegato non ha estensione, il nome del file proposto potrebbe essere codificato secondo l'URL Encoding.

Esempio: 'test allegato' -> test%20allegato'

· Se nel nome dell'allegato è presente la stringa attachment (parola chiave che non può essere utilizzata come nome del file), il server propone come nome del file Attach_<ID_Allegato>.<Estensione>. Può assumere valori <>0

nota

Nota

I parametri idattach, primary, name e version sono mutuamente esclusivi con actiontype = 8: almeno uno di essi deve essere specificato.


Fascicolazione Multipla

E' possibile fascicolare una form in n fascicoli eseguendo semplicemente l'azione Fascicola.

In particolare possiamo distinguere i seguenti casi:

· Se sulla form viene impostata la proprietà che stabilisce la tipologia di fascicoli (Fascicola In) , eseguendo l'azione Fascicola viene aperto un elenco filtrato in cui è possibile selezionare n fascicoli; eseguendo Conferma si esegue la
· Se non viene impostata la proprietà Fascicola In, eseguendo l'azione Fascicola viene aperto un piano di classificazione in cui è possibile selezionare la tipologia del fascicolo. Una volta selezionata la tipologia di fascicolo, viene aperto l'elenco filtrato in cui è possibile selezionare n fascicoli. Se si preme Conferma nell'elenco, i fascicoli selezionati sono aggiunti nella sezione Fascicoli selezionati del piano di classificazione.


La toolbar di gestione degli allegati

La toolbar per la gestione degli allegati di una form openwork® viene visualizzata in una form solo se sono state opportunamente definite in fase di disegno del modello la sezione delle action degli allegati e il controllo di openwork® relativo agli allegati.

att01 - attachmentsToolbar

Una descrizione di tutte le azioni predefinite presenti nella toolbar degli allegati è disponibile nel paragrafo cfr. Azioni predefinite allegati.

Per inserire un nuovo allegato ad una form openwork® è possibile utilizzare il pulsante Allega o sfruttare la funzionalità di Drag&Drop dei file.


openwork® Attachment Drag&Drop

La componente openwork® Attachment Drag&Drop Library implementa la funzionalità di drag and drop degli allegati di una form openwork®.

Per funzionalità di drag and drop si intende la possibilità di:

· allegare trascinando una selezione di file dal sistema alla sezione allegati di una form openwork®.
· salvare file trascinando una riga dalla tabella degli allegati un una folder del sistema.


Installazione

Requisiti software di sistema

· Browser: Internet Explorer 6, Internet Explorer 7 o Internet Explorer 8.
· Sistema Operativo.: Windows XP, Windows Vista o Windows 7.

Installazione

Se la componente openwork® Attachment Drag&Drop Library non è installata, nella sezione allegati di una form di openwork® sarà presente la dicitura "Per installare la componente Attachment Drag&Drop fare clic su installa e ricaricare la pagina".

Per installare la componente occorre seguire la seguente procedura:

1. Fare click sul link installa .
2. La procedura di installazione dell'ActiveX sarà avviata automaticamente. Se la procedura di installazione non dovesse partire in automatico, verrà visualizzata la finestra per la gestione delle componenti aggiuntive di openwork® , proseguire quindi l'installazione della Attachment Drag&Drop Library cliccando su Installa.
3. Nella schermata di Installazione della componente, fare click su Esegui.
4. Al termine della procedura di installazione viene visualizzata la finestra di gestione delle componenti aggiuntive di openwork® con risultato dell'installazione della componente openwork® Attachment Drag&Drop Library "Installato".
5. Tornare alla finestra della form e aggiornarla premendo il tasto F5. La corretta installazione della componente openwork® Attachment Drag&Drop è confermata dalla dicitura "trascina qui i file per allegarli" presente nella sezione degli allegati.

att03 - attachmentsToolbarOk

nota

Nota

Durante l'installazione su browser Internet Explorer 8 potrebbe essere visualizzato il seguente messaggio: 'Il sito WEB sta tentando di installare il componente aggiuntivo ‘openwork Attachment Drag&Drop library’ da ‘NET Sistemi s.r.l.’ Se si considerano attendibili sia il sito che il componente, fare clic qui per consentire l’installazione …'.

In tal caso cliccare sulla barra delle informazioni e selezionare 'Installa componente aggiuntivo per tutti gli utenti del computer'. La procedura di installazione termina con un aggiornamento automatico della pagina ed il messaggio corretta installazione del componente.

Inoltre durante l'installazione la componente di Windows User Account Control (UAC) può richiedere l’autorizzazione per consentire al programma di apportare modifiche al computer. Consentire l'installazione del programma.


Utilizzo

Allegare file ad una form openwork®

Per allegare uno o più file ad una form si procede come segue:

1. Selezionare i file da allegare.
2. Trascinare i file selezionati sulla barra Trascina qui i file per allegarli presente nella sezione allegati

att03 - attachmentsToolbarOk

3. Se la selezione contiene file validi la barra Trascina qui i file per allegarli cambia stato e appare come segue

att02 - attachmentsToolbarBlue

4. Rilasciando i file questi vengono allegati alla form.

Salvare file da una form di openwork®

Per salvare un file da una form nel file-system si procede come segue:

1. Selezionare e trascinare il file che si desidera salvare in file-system dalla lista degli allegati alla locazione dove si intende salvarlo (ad esempio il desktop o una cartella). L'eventuale puntatore di divieto indica l'impossibilità di salvare il file nella locazione puntata.

att04 - drag&dropStep1

2. Rilasciare il trascinamento nella locazione dove si intende salvare il file; il puntatore di copia indica che è possibile salvare nella locazione desiderata.

att05 - drag&dropStep2


Piano di classificazione

Il piano di classificazione può essere consultato attraverso la pagina del web server classification.aspx, con l'aggiunta dei seguenti parametri:

Parametro

Descrizione

style

Seleziona la tipologia di elementi dell'albero di classificazione. Possibili valori:

300 - Tutti i documenti (valore di default)

1 - Protocollo in entrata

2 - Protocollo in uscita

3 - Documenti interni

4- Fascicoli

10 - Ricerche su tutti i documenti

11 - Ricerche su protocollo in entrata

12 - Ricerche su protocollo in uscita

13 - Ricerche su documenti interni

14 - Ricerche su fascicoli

1003 - Protocollo interno

listparameters

Parametro facoltativo. Rappresenta la stringa XML in formato Unicode in cui sono codificati criteri per l'apertura del titolario. Nella condizione può essere utilizzato il campo style di tipo numerico e i seguenti campi impostabili dal BPMTools:

· tag di tipo testo
· ntag di tipo numerico
· dtag di tipo data
· termination di tipo data
· strict di tipo numerico

Nella condizione del filtro l'attributo da impostare è field.

Le voci di titolario impostate come ricerche hanno il valore tag pari a #_#_SEARCH_#_# in questo modo tali voci non vengono visualizzate nell'applicazione web aprendo il piano di classificazione, in quanto non si tratta di vere e proprie voci di titolario.

Se i campi tag, ntag e dtag sono avvalorati da BPMTools, nel documento XML che rappresenta il piano di classificazione per il client web saranno riportati attributi di tipo tag all'interno dell'elemento specifico (<folder> o <item>). Tali attributi sono utili per un eventuale elaborazione lato client.

action

Indica il tipo di azione applicata quando viene cliccata una voce del titolario; il tipo di azione determina il titolo della finestra. Se action = list, il titolo della finestra è Classificazione statica. Possibili valori:

list - Visualizza la lista dei documenti della tipologia selezionata. Le voci di titolario compaiono come link per mezzo del quale è possibile aprire il corrispondente elenco.

newdoc - Nuovo documento, viene abilitato il flag riservato.

newdocnr - Nuovo documento, non viene abilitato il flag riservato.

emergency - Nuovo documento da registro di emergenza, viene abilitato il flag riservato.

emergencynr - Nuovo documento da registro di emergenza, non viene abilitato il flag riservato.

classify - Utilizzato per la riclassificazione di un documento.

Se il valore del parametro non corrisponde ad uno dei valori indicati, la finestra non assume alcun titolo e viene eseguita la funzione customSelection.

Se style = 300 il valore di default è list, negli altri casi è nNewdoc.

readonly

Indica se il titolario deve essere filtrato in base ai criteri di accesso in sola lettura o lettura/scrittura impostati sulle diverse tipologie di documento. Può assumere valore <>0.

Quando action = list, il parametro è impostato a true, mentre quando action è pari a nNewdoc, nNewdocnr, eEmergency, emergencynr viene impostato a false.

withhbar

Permette la visualizzazione della barra cronologia se il parametro viene passato nella query string con valore <>0. In tal caso, viene visualizzata anche negli elenchi aperti successivamente dallo stesso piano di classificazione.

La visualizzazione della cronologia ha senso solo se il piano di classificazione viene aperto in modalità consultazione (action = list).

E' possibile impostare dal BPM Tools la voce di menù Classificazione dei fascicoli che consente di aprire il piano di classificazione, filtrato per fascicoli, con la barra cronologia abilitata. In alternativa, è possibile creare voci di menù custom che aprono il piano di classificazione con la barra cronologia abilitata.


Gestione delle attività

Per prenotare, assegnare, eseguire, trasferire, completare, saltare una o più attività, è possibile utilizzare la pagina del webserver activity.aspx con l'aggiunta dei seguenti parametri:

Parametro

Descrizione

processid

Parametro obbligatorio. Identificativo del processo a cui appartiene l'attività. Può assumere solo valori <>0.

activityid

Parametro obbligatorio. Identificativo della attività. Può assumere solo valori >0.

actiontype

Parametro obbligatorio. Indica l'azione che deve essere eseguita. Possibili valori:

1 - Prenota o assegna una o più attività

3 - Esegue un'attività

4 - Completa un'attività

6 - Trasferisce un'attività

7 - Salta un'attività

userid

Identificativo dell'operatore di organigramma a cui si vuole assegnare o trasferire l'attività. Può assumere solo valori >0. Il parametro è utilizzato solo quando:

actiontype = 6 - Parametro obbligatorio.

actiontype = 1 - se userid non è definito, l'attività è assegnata all'operatore corrente ovvero sarà da questi prenotabile.

minidesk

Se valorizzato a 1 compare il minidesktop quando non è stata effettuata la login.

showmsg

Se valorizzato a 1, compare una finestra contenente il risultato dell'operazione a meno che l'operazione non comporti l'apertura di un documento

Esempio

Se actiontype <>3 è possibile passare contemporaneamente più valori ai parametri processid e activityid, separandoli con una virgola oppure inserendo più volte nell'URL la query &processid=P&activityid=A dove P e A indicano rispettivamente gli identificativi del processo e dell'attività:

· activity.aspx?actiontype=1&processid=28,33,45,12&activityid=33,45,87,2
· activity.aspx?actiontype=1&processid=28&processid=33&processid=45&processid=12&activityid=

33&activityid=45&activityid=87&activityid=2ù

In questo caso , poiché actiontype=1, si ottiene:

· prenotazione - se showmsg è valorizzato viene visualizzata una finestra che mostra l'esito dell'operazione. Essa viene richiamata nel caso in cui, dopo la prenotazione, è prevista l'esecuzione di uno script lato client .
· esecuzione - il comportamento varia in funzione del tipo di attività:

Se l'attività prevede la modifica di una form, allora viene aperta.

Se l'attività prevede la selezione manuale, appare la finestra di selezione.

Se l'attività è generica, viene mostrato l'esito dell'operazione qualora showmsg sia valorizzato.

Se è prevista l'esecuzione di uno script lato client prima della esecuzione, l'URL richiama una finestra nascosta in cui viene eseguito lo script.

· completamento e salto - se showmsg è valorizzato, appare una finestra che mostra l'esito della operazione.
· trasferimento: appare l'organigramma, attraverso il quale si rende possibile selezionare l'operatore cui trasferire la/le attività .Quando l'operazione è completata, se showmsg è valorizzato, viene mostrato l'esito dell'operazione.

nota

Nota

La pagina è utilizzata all'interno dell'elenco delle attività ma trova efficace applicazione. Potrebbe essere utile anche per far eseguire operazioni su attività con un link ad altre applicazioni (es. client di posta elettronica).


Organigramma

Per interrogare l'organigramma occorre utilizzare la pagina organizationtree.aspx con l'aggiunta dei seguenti parametri:

Parametro

Descrizione

selection

Parametro obbligatorio. Identificativo del processo cui appartiene l'attività su cui si vuole eseguire una delle operazioni su indicate. Il parametro è di tipo bitwise poiché il valore è la somma dei valori indicati. Possibili valori:

1 - Restituisce le unità organizzative definite nell'organigramma.

2 - Restituisce i gruppi.

4 - Restituisce le formule.

8 - Restituisce anche i ruoli oltre alle unità organizzative. E' usato in combinazione con il valore 1.

16 -Restituisce anche gli operatori oltre alle unità organizzative e ai ruoli. E' usato in combinazione con i valore 1 e 8.

formulagroups

Valore di tipo stringa.

ensurevisible

Parametro opzionale. Identificativo dell'elemento di organigramma selezionato. Può essere definito come segue:

N + 2 spazi + idarea

R + 2 spazi + idruolo

U + 2 spazi + idoperatore

G + 2 spazi + idgruppo

rootid

Parametro opzionale. Identificativo dell'elemento a partire dal quale l'organigramma verrà visualizzato in base ad una delle seguenti definizioni:

N + 2 spazi + id - Area Organizzativa con identificativo numerico id

R + 2 spazi + id - Ruolo con identificativo numerico id

A + 2 spazi + id - AOO(Area Organizzativa Omogenea) con identificativo numerico id

ACU - AOO(Area Organizzativa Omogenea) dell'operatore corrente

OCU - Area Organizzativa dell'operatore corrente

RCU - Ruolo dell'operatore corrente

Queste formule possono essere delimitate dal carattere ‘;’ (es. ';OCU;' 'OCU;').

Per impostazione predefinita viene mostrato l'intero l'organigramma.

highpass

Parametro opzionale. Indica il livello a partire dal quale deve essere visualizzato l'organigramma. Può assumere valori >=0.

lowpass

Parametro opzionale. Indica il livello oltre il quale non deve essere visualizzato l'organigramma. Può assumere valori >=0.

selmode

Modalità di selezione. Possibili valori:

1 - Selezione di un singolo ufficio

2 - Selezione di un singolo singolo ruolo

3 - Selezione di un singolo operatore dal controllo operatore

4 - Selezione operatore per prenotazione

5 - Selezione operatore per assegnazione

6 - Selezione multipla

organizationtree.aspx?selection=25 restituisce tutto l'organigramma con ruoli e uffici.

Se la selezione è singola, dopo il doppio click su un elemento valido esso viene selezionato e la finestra dell'organigramma vien chiusa.

Se la selezione è multipla, è necessario selezionare gli elementi desisderati e cliccare conferma.

È possibile customizzare il funzionamento della pagina tramite le funzione customconfirmation().

Ad esempio

In modalità selezione singola elemento, facendo doppio click su un elemento valido ; si può inoltre selezionare o deselezionare e cliccare su conferma.

In modalità selezione multipla è necessario selezionare gli elementi desiderati e ciccare su conferma.


Minidesktop

La pagina web minidesk.aspx viene aperta automaticamente quando si richiama una pagina diversa dalla pagina di default, se nell'URL è stato specificato il parametro minidesk = 1. Presenta le seguenti caratteristiche:

· Dimensione fissa.
· Posizione in basso allo schermo sulla destra.
· Contiene solo i pulsanti desktop e logout.
· Effettua periodicamente il ping.

La pagina viene utilizzata per le seguenti motivazioni:

· Consentire il logout dall'applicazione web di openwork®. La semplice chiusura della pagina chiamata non determina la chiusura della sessione web, in quanto è necessario che termini il tempo di timeout impostato sul web server (tipicamente 20 minuti).
· Consente di mantenere attiva la sessione mentre si opera sulla pagina chiamata. Infatti, se si sta effettuando una modica su un documento, in assenza del minidesktop la sessione potrebbe scadere.
· Consente di mantenere attiva la sessione attraverso le chiamate a pagine diverse. Infatti, se è necessario eseguire diverse attività tramite link inviati in posta elettronica, in assenza del minidesktop o del desktop sarebbe necessario eseguire ad ogni link il login.

nota

Nota

Lo stile del body e dei link del minidesktop sono impostati in CSS/ minidesk.css.


Disegno di un modello

Le numerose informazioni che contribuiscono allo shaping del documento sono memorizzate all'interno di documenti XML. L'insieme di questi documenti costituisce un modello di documento.

È possibile produrre automaticamente il modello partendo da un qualsiasi documento HTML ben formato, utilizzando la funzione PublishPrototype() del Web Service wsmodel; il form processor di openwork® per eseguire tale operazione fa uso sia di attributi standard dei tag HTML sia di attributi specifici della piattaforma,questi ultimi contraddistinti dal prefisso owk.

DModel01 - formProcessor .

Il form processor inserisce il documento HTML originario all'interno di una div e aggiunge una barra degli strumenti che permette la gestione del documento.

All'interno del documento HTML può essere presente una sezione

           <actions xmlns="http://www.openwork.info/schema"></actions>

contenente l'elenco delle azioni da che si possono eseguire sul documento.


Controlli di tipo intrinseco

I controlli intrinseci sono i seguenti:

· folderlist relativo ai fascicoli
· message relativo al messaggio
· processlist relativo a processi
· classification relativo a classificazione
· docnumber relativo a numerodoc
· attachments relativo a allegati

Questi controlli sono implicitamente collegati ai documenti creati sulla base del modello HTML nel quale vengono inseriti.

Ad esempio folderlist servirà a visualizzare l'elenco dei fascicoli che contengono il documento in questione, docnumber conterrà il numero assegnato da openwork® al documento pubblicato,etc.


Regole per la compilazione del modello

Nella compilazione del modello HTML vanno rispettate le seguenti regole, diversamente il sistema restituirà uno o più codici di errore:

- Controlli che hanno l'attributo owk:fieldname impostato allo stesso valore devono avere identico owk:required, owk:secret, owk:visible, owk:changeable,owk:datasource,owk:datafield, owk:description, owk:locked; oppure questi attributi possono essere indicati solo per un controllo del gruppo.
- I controlli non possono avere l'attributo id impostato allo stesso valore.
- I controlli di tipo intrinseco possono essere inseriti un'unica volta.
- Non possono essere presenti più controlli associati allo stesso datafield e datasource, eccetto che nel caso dei controlli di tipo opzione.

In particolare, i seguenti controlli devono essere sempre presenti in un modello di openwork®, in caso contrario pur riuscendo a pubblicare il modello, si potranno verificare dei problemi in fase di salvataggio/pubblicazione o consultazione di un documento di openwork® basato su tale modello (se necessario, è comunque possibile nascondere tali controlli, senza eliminarli del tutto, utilizzando l'attributo owk:visible)

- controllo "Classificazione" di tipo classification
- controllo "Data Documento" di tipo date
- controllo "Numero documento" di tipo docnumber
- controllo "Corrispondente esterno" di tipo client
- controllo "Oggetto" di tipo memo o textbox
- controllo "Ufficio di competenza" di tipo office
- controllo "Responsabile" di tipo user
- tutti i controlli di tipo boolinfo
- tutti i controlli di tipo signinfo
- controllo di tipo folderlist
- controllo di tipo processlist
- controllo "Allegati" di tipo attachments


La sezione actions

La sezione delle actions è costituita da una immagine caratteristica e da una descrizione; sia l'immagine che la descrizione hanno un collegamento a una funzione javascript che esegue l'operazione relativa alla pagina web in cui l'azione è contenuta.

L'intestazione di ciascuna pagina web è costituita da una tabella in cui compaiono, oltre al logo dell'applicazione, una toolbar di ACTIONS.

Azioni predefinite presenti in una form openwork®

Le azioni predefinite presenti in una form possono essere suddivise in due tipi:

· Le azioni eseguibili sulla form openwork® distinguibili tramite l'attributo type="base"

<owk:action enabled="1" type="base" lang_it="Stampa" lang_en="Print" id="print"/>

Un elenco di tutte le azioni predefinite eseguibili sulla form è consultabile nel paragrafo Azioni predefinite form

· Le azioni eseguibili sugli allegati di una form openwork® distinguibili tramite l'attributo type="attbase"

<owk:action enabled="1" type="attbase" lang_it="Acquisisci" lang_en="Scan" id="scan"/>

Un elenco di tutte le azioni predefinite eseguibili sugli allegati è consultabile nel paragrafo Azioni predefinite allegati

Questa sezione, da inserire immediatamente dopo il tag <HTML> nel prototipo HTML permette di definire le azioni eseguibili su una determinata tipologia di documento.

<owk:actions xmlns:owk="http://www.openwork.info/schema">

<owk:action enabled="1" type="base" lang_it="Stampa" lang_en="Print" id="print"/>

<owk:action enabled="1" type="base" lang_it="Segnatura" lang_en="Print label" id="printlabel"/>

<owk:action enabled="1" type="base" lang_it="Barcode" lang_en="Barcode" id="printbarcode"/>

<owk:action enabled="1" type="base" lang_it="Messaggio" lang_en="Messages" id="createmessage"/>

<owk:action enabled="1" type="base" lang_it="Numera" lang_en="Numerate" id="numerate"/>

<owk:action enabled="1" type="base" lang_it="Salva" lang_en="Save" id="save"/>

<owk:action enabled="1" type="base" lang_it="Annulla modifiche" lang_en="Undo" id="undo"/>

<owk:action enabled="1" type="base" lang_it="Pubblica" lang_en="Publish" id="publish"/>

<owk:action enabled="1" type="base" lang_it="Archivia" lang_en="Store" id="store"/>

<owk:action enabled="1" type="base" lang_it="Elimina" lang_en="Delete" id="delete"/>

<owk:action enabled="1" type="base" lang_it="Revisiona" lang_en="Revision" id="revision"/>

<owk:action enabled="1" type="base" lang_it="Annulla" lang_en="Invalidate" id="invalidate"/>

<owk:action enabled="1" type="base" lang_it="Classifica" lang_en="Classify" id="classify"/>

<owk:action enabled="1" type="base" lang_it="Fascicola" lang_en="Insert in folder" id="insertinfolder"/>

<owk:action enabled="1" type="base" lang_it="Replica" lang_en="Replicate" id="replicate"/>

<owk:action enabled="1" type="base" lang_it="Blocca" lang_en="Freeze" id="freeze"/>

<owk:action enabled="1" type="base" lang_it="Sblocca" lang_en="Unfreeze" id="unfreeze"/>

<owk:action enabled="1" type="base" lang_it="Annulla esecuzione" lang_en="Abort" id="cancel"/>

<owk:action enabled="1" type="base" lang_it="Log" lang_en="Log" id="showlog"/>

<owk:action enabled="1" type="base" lang_it="Desktop" lang_en="Desktop" id="desktop"/>

<owk:action enabled="1" type="base" lang_it="Chiudi" lang_en="Chiudi" id="close"/>

<owk:action enabled="1" type="attbase" lang_it="Acquisisci" lang_en="Scan" id="scan"/>

<owk:action enabled="1" type="attbase" lang_it="Allega" lang_en="Attach" id="addfile"/>

<owk:action enabled="1" type="attbase" lang_it="Apri" lang_en="Open" id="openfile"/>

<owk:action enabled="1" type="attbase" lang_it="Revisiona" lang_en="Revision" id="filerevision"/>

<owk:action enabled="1" type="attbase" lang_it="Elimina" lang_en="Delete" id="delfile"/>

<owk:action enabled="1" type="attbase" lang_it="Salva in" lang_en="Save in" id="saveinfile"/>

<owk:action enabled="1" type="attbase" lang_it="Firma" lang_en="Sign" id="sign"/>

<owk:action enabled="1" type="attbase" lang_it="Check-in/out" lang_en="Check-in/out" id="checkinout"/>

<owk:action enabled="1" type="attbase" lang_it="Form in PDF" lang_en="Form to PDF" id="formtopdf"/>

<owk:action enabled="1" type="attbase" lang_it="Converti in PDF" lang_en="PDF Conversion" id="pdfconversion"/>

<owk:action enabled="1" type="attbase" lang_it="Riconosci testo" lang_en="Acquire text" id="ocr"/>

<owk:action enabled="1" type="attbase" lang_it="" lang_en="" id="autocomposition"/>

</owk:action>

nota

Nota

Quando non è presente il nodo actions all'interno del prototipo HTML viene utilizzato quello di default in allegato. Se invece non sono presenti sottonodi (action), allora non è stata definita alcuna azione sul documento, di conseguenza la toolbar risulta vuota.

Ogni elemento action definisce un'azione che è possibile eseguire su una form (o un elenco) e compare come icona seguita da un link descrittivo nella toolbar di una form (o di un elenco).

Per questi elementi è possibile impostare i seguenti gli attributi :

Attributo

Descrizione

enabled = string

Stringa che può assumere i seguenti valori:

0 - il link per eseguire l'azione, non viene mai visualizzato

1 - il link per eseguire l'azione, viene sempre visualizzato

formula - concatenazione di stringhe che identificano uffici, ruoli, gruppi (es: “U 24;R 12;BFO;G 21”) o dello stato del documento; quando il documento viene istanziato la formula viene risolta in valore (0 o 1)

Se l'attributo è pari alla stringa vuota, verrà assunto dal form processor il valore 1.

type = string

Indica il tipo di azione.

Può assumere i seguenti valori: base, custom, empty e, solo per le form, attbase e attcustom.

base - azioni predefinite all'interno del sistema.

custom - azioni personalizzate. Il codice associato può essere definito:

· per le form - nella funzione customcommand all'interno di clibraries/document/document.js;
· per le liste - nella funzione customcommand all'interno di clibraries/table/table.js;
· per gli allegati (azioni di tipo attcustom) - nella funzioneattcustomcommand all'interno di clibraries/attachments/attachments.js; le icone associate a queste funzioni possono essere salvate nella cartella \webserver\cimages\actions;

empty - impostazione che consente l'inserimento di un spazio tra i link delle azioni nella barra degli strumenti.

lang_it = string

Traduzione dell'etichetta da associare all'azione nella barra degli strumenti nel linguaggio con identificativo it.

lang_en = string

Traduzione dell'etichetta da associare all'azione nella barra degli strumenti nel linguaggio con identificativo en.

id = string

Parametro obbligatorio. Permette di identificare l'etichetta dell 'azione nei file di linguaggio. Il suo valore viene passato alla funzione customcommand per identificare l'azione.

length = integer

Utilizzato solo nel caso in cui type = empty per indicare il numero di spazi da inserire


Azioni predefinite form

Action

Action id

Descrizione

actd15 - print

Stampa

print

Stampa la form openwork® corrente.

1. Cliccare su

actd15 - print

Stampa
2. Una nuova finestra del browser mostra l'anteprima della form openwork® in formato HTML si desidera stampare.
3. Procedere con la stampa della form.

actd17 - printlabel

Segnatura

printlabel

Stampa la segnatura di protocollo del documento (form) openwork® corrente. Per poter modificare il comportamento di questa action al fine di effettuare la gestione e la stampa delle etichette attraverso la pagina della gestione immagini occorre personalizzare il comando printlabel attraverso la customcommand della document.js.

1. Cliccare su

actd17 - printlabel

Segnatura
2. Un pop up mostra l'anteprima di stampa della segnatura di protocollo del documento (form) openwork® corrente.
3. Procedere con la stampa della segnatura di protocollo.

actd16 - printbarcode

Barcode

printbarcode

Stampa il barcode della form openwork® corrente.

1. Cliccare su

actd16 - printbarcode

Barcode
2. Un pop up mostra il barcode associato alla form openwork® corrente
3. Spuntare se necessario l'opzione Allegato Primario e procedere con la stampa del barcode.

actd04 - createmessage

Messaggio

createmessage

Crea un nuovo messaggio con riferimento alla form openwork® corrente.

1. Cliccare su

actd04 - createmessage

Messaggio

2. Un pop up permette di selezionare la modalità con cui si vuole distribuire il messaggio che verrà creato:

actd05 - createmessagepopup

3. Scegliere la modalità di distribuzione che si desidera e procedere con la creazione del messaggio stesso.

actd14 - numerate

Protocolla

numerate

Assegna il numero di protocollo alla form openwork® corrente.

1. Cliccare su

actd14 - numerate

Protocolla
2. La pagina web corrente si aggiorna e il campo Numero protocollo della form viene opportunamente valorizzato.

actd21 - save

Salva

Save

Salva le modifiche apportate alla form openwork® corrente.

actd25 - undo

Annulla modifiche

undo

Annulla le modifiche apportate alla form openwork® corrente.

actd18 - publish

Pubblica

publish

Pubblica la form openwork® corrente, rendendolo così disponibile a tutti i partecipanti all'attività.

1. Cliccare su

actd18 - publish

Pubblica

2. Viene richiesta ulteriore conferma dell'operazione di pubblicazione.Scegliere Si per completare l'operazione di pubblicazione della form openwork®, altrimenti scegliere No per annullare.

actd24 - store

Archivia

store

Archivia la form openwork® corrente. A seguito della archiviazione del documento non è possibile apportare ulteriori modifiche al documento stesso.

1. Cliccare su

actd24 - store

Archivia
2. Viene richiesta ulteriore conferma dell'operazione di archiviazione.Scegliere Si per completare l'operazione di archiviazione la form openwork® corrente, altrimenti scegliere No per annullare. Terminata l'operazione di archiviazione tutti i campi della form openwork® corrente diventano non modificabili.

actd06 - delete

Elimina

delete

Elimina il documento corrente.

1. Cliccare su

actd06 - delete

Elimina

2. Viene richiesta ulteriore conferma dell'operazione di eliminazione. Scegliere Si per completare l'operazione di eliminazione della form openwork® corrente, altrimenti scegliere No per annullare. Terminata l'eliminazione del documento openwork®, la finestra corrente si chiude e l'elenco dei documenti openwork® viene opportunamente aggiornato.

actd22 - send

Invia

Invia il messaggio corrente opportunamente compilato ai destinatari dello stesso.

actd20 - revision

Revisiona

revision

Crea una nuova revisione della form corrente.

1. Cliccare su

actd20 - revision

Revisiona

2. Viene richiesta ulteriore conferma dell'operazione di revisione.Scegliere Si per creare una nuova copia revisione della form corrente che di conseguenza viene archiviato, scegliere No per annullare. Al termine dell'operazione di revisione la finestra corrente mostra la form di revisione creata, come si evince dall numero della form che contiene il riferimento Rev.

actd12 - invalidate

Annulla

invalidate

Annulla il documento (form) corrente.

1. Cliccare su

actd12 - invalidate

Annulla
2. Una nuova finestra richiede di specificare la motivazione dell'operazione di annullamento. Ai fini dell'annullamento di un documento (form) è obbligatorio specificare il motivo dello stesso e cliccare su Ok. Al documento (form) corrente sarà aggiunta quindi la dicitura

actd13 - invalidatestring

e pertanto non sarà più possibile apportare delle modifiche allo stesso.

actd14 - numerate

Numera

numerate

Assegna manualmente il valore numero documento al documento (form) openwork® corrente.

1. Cliccare su

actd14 - numerate

Numera
2. La finestra corrente si aggiorna e il campo numero documento del documento (form) openwork® corrente viene opportunamente valorizzato.

actd02 - classify

Classifica

classify

Riclassifica il documento (form) corrente.

1. Cliccare su

actd02 - classify

Classifica
2. Una nuova finestra permette di esplorare il proprio Piano di Classificazione dei Documenti
3. Selezionare la nuova Classe di Documenti a cui il documento (form) corrente deve appartenere. Effettuata la propria scelta, la form openwork® corrente sarà aggiornata e riporterà tutti i campi definiti nella Classe di Documenti assegnata.

actd09 - insertinfolder

Fascicola

insertinfolder

Inserisce il documento (form) corrente in uno o più fascicoli.

1. Cliccare su

actd09 - insertinfolder

Fascicola
2. Una nuova finestra permette di esplorare il proprio Piano di Classificazione dei Documenti filtrato per cartelle contenenti fascicoli.

actd10 - insertinfolderclassificationoff

3. Selezionando una cartella di fascicoli una ulteriore finestra consente di scegliere tra i fascicoli esistenti quelli in cui il documento va inserito.
4. E' possibile quindi utilizzare il pulsante Conferma per attuare l'inserimento del documento (form) nel/i fascicolo/i selezionato/i oppure chiudere la finestra corrente. Se si sceglie di chiudere la finestra corrente senza aver cliccato su Conferma i documenti (form) appaiono nella sezione Fascicoli Selezionati della finestra Piano di Classificazione senza però essere ancora stati effettivamente fascicolati.

actd11 - insertinfolderclassificationon

5.Completare l'operazione di classificazione cliccando su Conferma.

Per le istanze di form è possibile fare in modo che, utilizzando la funzione di fascicolazione, sia visualizzato solo l'elenco dei fascicoli piuttosto che l'intero piano di classificazione. Per maggiori approfondimenti cfr. Modalità di fascicolazione.

actd19 - replicate

Replica

replicate

Replica la form openwork® corrente.

1. Cliccare su

actd19 - replicate

Replica
2. La form openwork® corrente viene replicato in una nuova finestra.

actd08 - freeze

Blocca

freeze

Blocca tutti i campi presenti nella form openwork® corrente.

1. Cliccare su

actd08 - freeze

Blocca
2. Viene richiesta ulteriore conferma dell'operazione blocca. Scegliere Si per completare l'operazione blocca della form openwork® corrente, altrimenti scegliere No per annullare. Al termine dell'operazione blocca vengono negate tutte le modifiche sui campi contenuti nella form openwork® corrente, come si può evincere dall'etichetta di ogni campo del documento diventata di colore rosso.

actd26 - unfreeze

Sblocca

unfreeze

Sblocca i campi presenti nella form corrente, precedentemente bloccati tramite l'azione Blocca.

1. Cliccare su

actd26 - unfreeze

Sblocca
2. Viene richiesta ulteriore conferma dell'operazione sblocca. Scegliere Si per completare l'operazione sblocca della form openwork® corrente, altrimenti scegliere No per annullare.Al termine dell'operazione Sblocca, tutti i campi non modificabili a seguito di un azione di tipo Blocca possono essere nuovamente ricompilati.

actd01 - cancel

Annulla Esecuzione

cancel

Annulla l'esecuzione di una attività di processo.

1. Cliccare su

actd01 - cancel

Annulla Esecuzione
2. La finestra dell'attività corrente si chiude, l'esecuzione dell'attività corrente viene quindi annullata e l'attività stessa viene riportata nell'elenco delle attività da eseguire.

actd23 - showlog

Log

showlog

Mostra il file di log contenente tutte le modifiche apportate alla form corrente.

1. Cliccare su

actd23 - showlog

Log
2. Una nuova finestra mostra il log della form corrente ovvero una tabella che riporta tutte le modifiche specifiche effettuate sui singoli campi della form stessa.

actd07 - desktop

Desktop

desktop

Ritorna all'ultima finestra home page aperta di Openwork. Nel caso in cui non esiste nessuna finestra aperta home page di Openwork ne apre una nuova.

actd03 - close

Chiudi

close

Chiude la finestra corrente.


Azioni predefinite allegati

Action

Action id

Descrizione

actatt10 - pdfconversion

Converti in PDF

pdfconversion

Converte un file allegato in formato pdf.

Le istruzioni per la conversione di un allegato in formato pdf sono consultabili nella sezione cfr. Utilizzo da interfaccia web del capitolo dedicato alla componente openwork® PDF converter.

actatt08 - ocr

Riconosci testo

ocr

Riconosce del testo tramite funzionalità OCR in un file immagine o pdf allegato.

1. Selezionare l'allegato su cui si vuole effettuare il riconoscimento OCR e seguire la procedura di riconoscimento OCR da interfaccia web

actatt12 - scan

Acquisisci

scan

Acquisisce un nuovo allegato da uno scanner.

1. Cliccare su

actatt12 - scan

Acquisisci
2. Una nuova finestra richiede di specificare il nome del file risultante dall'operazione di acquisizione. Specificare il nome del file risultante e premere Ok.
3. Viene aperta la finestra di acquisizione dei documenti propria di openwork® che offre tutti gli strumenti per acquisire un documento tramite scanner.

actatt13 - scanscanner

Terminata acquisizione del documento premere il tasto Conferma.Il file acquisito tramite scanner sarà allegato al documento openwork® corrente.

actatt01 - addfile

Allega

addfile

Allega un file al documento openwork® corrente.

1. Cliccare su

actatt01 - addfile

Allega

Una nuova finestra di esplorazione delle risorse consente di scegliere un file da allegare al documento openwork® corrente.

actatt09 - openfile

Apri

openfile

Apre un allegato del documento openwork® corrente.

1. Selezionare l'allegato che si desidera aprire e cliccare su

actatt09 - openfile

Apri

actatt05 - filerevision

Revisiona

filerevision

Crea una nuova revisione dell'allegato selezionato.

1. Selezionare l'allegato di cui si vuole una copia revisione e cliccare su

actatt05 - filerevision

Revisiona
2. Viene richiesta conferma a procedere con l'operazione di revisione. Scegliere Si per creare una nuova copia revisione dell'allegato che di conseguenza viene archiviato, scegliere No per annullare l'operazione.
3. Viene creata una nuova copia revisione dell'allegato selezionato che di conseguenza viene bloccato da ulteriori modifiche. I file risultanti da una azione di revisione vengono allegati al documento openwork® corrente.

actatt06 - filerevisionoutput

actatt04 - delfile

Elimina

delfile

Elimina l'allegato selezionato.

actatt11 - saveinfile

Salva in

saveinfile

Salva una copia del file allegato in una nuova posizione.

1. Selezionare il file allegato che si desidera salvare e cliccare su

actatt11 - saveinfile

Salva in

Una nuova finestra di esplorazione delle risorse permette di specificare il percorso dove si vuole salvare il file allegato.

actatt14 - sign

Firma

sign

Inserisce una firma digitale.

Vedi cfr. Utilizzo firma digitale

actatt02 - checkinout

Check-in/out

checkinout

Esegue il check in/out di un file allegato.

Operazione di check - out

1. Selezionare il file allegato di cui si vuole effetuare il check-out e cliccare su

actatt02 - checkinout

Check-in/out

2. Viene richiesta ulteriore conferma dell'operazione di check-out.Scegliere Si per avviare l'azione di check-out dell'allegato, scegliere No per annullare. Confermando l'operazione di check-out una nuova finestra consente di sfogliare le proprie cartelle. Indicare quindi la posizione che il file risultante dall'operazione di check-out dovrà avere. L'operazione di check out avvenuta con successo sarà notificata da una finestra pop up e da una spunta di conferma nel campo check-out.

actatt03 - checkinoutok

Operazione di check – in

1. Selezionare l'allegato di cui si desidera fare il check–in e cliccare su

actatt02 - checkinout

Check-in/out

2. Una nuova finestra consente di esplorare le risorse e selezionare il file utile ad effettuare l'operazione di check-in. Selezionato il file specifico l'operazione di check-in parte in automatico e il file risultante viene allegato al documento corrente.

actatt07 - formtopdf

Form in PDF

formtopdf

Converte il contenuto della Form in un file pdf e lo allega.

1. Cliccare su

actatt07 - formtopdf

Form in PDF
2. Una nuova finestra richiede di digitare il nome del nuovo file pdf risultante. Inserire il nome del file risultante dall'operazione di trasformazione della form in PDF e cliccare su Ok. Il file pdf ottenuto viene allegato al documento openwork® corrente. La action funziona correttamente solo se è stata predisposta una trasformazione precisa della form nel database, per ulteriori approfondimenti sulle trasformazioni di una Form ed Elenchi riferirsi al capitolo cfr. Trasformazione di una form o di un elenco.

actatt15 - wizard

autocomposition

Allega al documento openwork® corrente un file di Microsoft® Word (.doc) ottenuto tramite funzione di autocomposizione a partire da un template predefinito (.dot) e ai dati contenuti nella form.

1. Scegliere nel menù a destra dell'icona di Autocomposizione un template predefinito (.dot) tramite il quale generare il nuovo allegato.
2. Cliccare su

actatt15 - wizard

3. Una nuova finestra richiede di inserire il nome del file risultante dall'operazione di autocomposizione. Inserire il nome del file risultante e cliccare su Ok. Openwork allega il nuovo file di Microsoft® Word (.doc) risultante dall'autocomposizione al documento corrente e visualizza in una nuova finestra il file di Microsoft® Word (.doc) appena creato.


I Controlli di openwork®

I Controlli di openwork® riguardano gli elementi HTML che possono essere gestiti e le funzionalità messe a disposizione dalla piattaforma e il significato degli attributi. Si intende per controllo un elemento HTML per cui sono stati impostati gli attributi tipici della piattaforma openwork®.

Tali attributi proprietari sono definiti all'interno del namespace owk:

xmlns:owk = "http://www.openwork.info/schema"

I controlli sono dotati della proprietà di overload: elementi HTML simili svolgeranno funzioni diverse a seconda dell'attributo owk:type.

· Allegati
· Anagrafica
· Annotazioni
· Casella di controllo
· Casella di testo
· Città
· Classificazione
· Contenitore
· Contenitore di firme
· Contesto
· Data
· Data e ora
· Documento
· Etichetta
· Etichetta condizionale
· Firma
· Info firma
· Lista
· Lista di anagrafica
· Lista di documenti
· Lista di operatori
· Lista fascicoli
· Lista processi
· Memo
· Messaggio
· Numero documento
· Opzione
· Operatore
· Pulsante di selezione
· Ruolo
· Tabella
· Ufficio


Allegati (attachments)

Il controllo visualizza una tabella con un elenco degli eventuali file allegati al documento.

Tale controllo consente la gestione degli allegati, esponendo le funzioni necessarie per:

· allegare un nuovo file al documento
· creare un file in formato Microsoft Word ed allegarlo al documento
· aprire un file allegato e modificarlo
· revisionare un file allegato
· convertire il file allegato in formato PDF
· convertire la form in formato PDF e allegarlo alla form stessa
· effettuare check-in e check-out di un file allegato
· apporre la firma digitale su un allegato
· acquisire un'immagine con lo scanner – o con altra fonte di immagine – e allegarla al documento
· bloccare e sbloccare un file allegato

nota

Nota

E' opportuno ricordare la differenza tra bloccare un file allegato ed effettuare il check-in:

· bloccare un file impedisce eventuali modifiche da parte di altri utenti nell'arco temporale coincidente con la durata del blocco;
· effettuare il check-in di un file consente di effettuare una copia temporanea del file in modo da consentire all'utente di effettuare modifiche in modalità off-line.

Il controllo in questione visualizza per ogni riga e per ogni allegato le seguenti informazioni:

· nome
· dimensione
· versione
· data d'inserimento e operatore che ha effettuato l'inserimento
· eventuale data di blocco e operatore che ha ha bloccato il file
· una checkbox che indica se l'allegato dovrà essere ad esempio stampato, spedito via e-mail, ect
· una inputbox per inserire eventuali annotazioni
· una checkbox per indicare se l'allegato è primario
· informazioni sull'eventuale stato di check - out di un allegato

Attributo | Descrizione
id = "owkattachments" |
owk:type = "attachments" | Valore predefinito allegati.
owk:fieldname = string |
owk:description = string |
owk:lockedcol = "0/"1" | Valore predefinito 1. Se 0 nel controllo non appare la colonna bloccato.
owk:primarycol = "0/"1" | Valore predefinito 1. Se 0 nel controllo non appare la colonna primario.
owk:notescol = "0/"1" | Valore predefinito 1. Se 0 nel controllo non appare la colonna note.
owk:checkedcol = "0/"1" | Valore predefinito 1. Se 0 nel controllo non appare la colonna checkout.
owk:selectedcol = "0/"1" | Valore predefinito 1. Se 0 nel controllo non appare la colonna email/stampa.
style = string | Stile dell'elemento HTML div in formato CSS.
class = string | Classe CSS dell'elemento HTML div. Utilizzando le impostazioni grafiche predefinite, l'attributo deve essere impostato a attdiv.
owk:toolbarstyle = string | Stile riga contenente la barra degli strumenti in formato CSS
owk:toolbarclass = string | Classe CSS della riga contenente la barra degli strumenti. Per impostazioni grafiche predefinite, l'attributo deve essere impostato a atttoolbar.
owk:headstyle = string | Stile delle colonne di intestazione in formato CSS
owk:headclass = string | Classe CSS delle colonne di intestazione. Per impostazioni grafiche predefinite, l'attributo deve essere impostato a atthead.
owk:footstyle = string | Stile del piè tabella in formato CSS.
owk:footclass = string | Classe CSS del piè tabella. Per impostazioni grafiche predefinite, l'attributo deve essere impostato a attfoot.
owk:bodystyle = string | Stile delle righe in formato CSS.
owk:bodyclass = string | Classe CSS delle righe. Per impostazioni grafiche predefinite, l'attributo deve essere impostato a attbody.
owk:selstyle = string | Stile della riga selezionata in formato CSS.
owk:selclass = string | Classe CSS della riga selezionata. Per impostazioni grafiche predefinite, l'attributo va impostato a attsbody.
owk:visible = string | cfr. owk:visible
owk:changeable = string | cfr. owk:changeable
owk:secret = string | cfr. owk:secret
owk:locked = string | cfr. owk:locked
owk:tag1 = string | cfr. owk:tag1
owk:tag2 = string | cfr. owk:tag2
owk:tag3 = string | cfr. owk:tag3

nota

Nota

Il controllo non possiede attributi in grado di consentire la connessione ad una fonte dati, pertanto utilizza esclusivamente dati gestiti internamente alla piattaforma.


Anagrafica (client)

Visualizza una casella di testo compilata con un elemento di anagrafica selezionato da un elenco oppure può essere creato ex novo se l'operatore ne possiede i diritti.

Per l'apertura dell'elenco e per la creazione dell'elemento di anagrafica sono presenti appositi pulsanti accanto all'inputbox. É visualizzato, inoltre, in accordo con il profilo dell'operatore, un pulsante per mostrare il dettaglio dell'elemento selezionato.

La creazione di nuove voci di anagrafica e l'utilizzo di filtri si ottiene mediante la definizione di opportuni attributi del controllo. Può essere associato ad altri controlli in modo che, selezionando un documento, la compilazione di questi ultimi avvenga automaticamente con informazioni presenti nell'elenco.

Attributo

Descrizione

type = "text"

owk:type = "client"

owk:fieldname = string

id = string

owk:description = string

owk:datasource = string

cfr. Gli attributi datasource e datafield

owk:datafield = string

cfr.Gli attributi datasource e datafield

owk:default = string

Obsoleto , sostituito da value.

value = string

E' una stringa contenente il valore predefinito del campo corrispondente al codice di anagrafica. (es. 000003)

owk:insertenabled = 0/1

Valore predefinito 1. Permette l'inserimento di nuove schede di anagrafica nella lista mediante apposito pulsante.

owk:selectenabled = 0/1

Valore predefinito 1. Permette la selezione di un elemento di anagrafica da un elenco mediante apposito pulsante.

 owk:generic = 0/1

Obsoleto, può assumere valore

· 0 nel caso in cui si tratti di una persona fisica o giuridica
· 1 nel caso in cui si tratti di un elemento di anagrafica generica.

Valore predefinito 0. Se si imposta con valori diversi, il formprocessor genera un errore. Per impostare la persona fisica o giuridica è necessario impostare il valore del campo con datafield personafisica.

owk:sourcetype = 6/16

Definisce l'effetto della pressione del pulsante associato al controllo. Valori ammessi:

· 6 è aperto l'elenco delle schede di anagrafica
· 16 si apre una ricerca sulle schede di anagrafica

Valore predefinito 6. Se si imposta con valori diversi, il formprocessor genera un errore.

owk:sourceid = integer

Identificativo della tipologia di scheda di anagrafica o della ricerca.

Se owk:insertenabled = 1 questo attributo individua anche la tipologia di scheda di anagrafica da creare. La scheda anagrafica creata è sempre di tipo persona giuridica.

 owk:listparameters = string

cfr. L'attributo listparameters.

owk:listfields = string

Contiene l'associazione tra gli elementi del campo XML e le colonne dell'elenco. Contiene inoltre l'associazione tra eventuali altri controlli collegati e le colonne dell'elenco (cfr. nota).

owk:newfields = string

Contiene l'associazione tra gli elementi del campo XML e i controlli della scheda di anagrafica nuova o selezionata.

Contiene inoltre l'associazione tra eventuali altri campi collegati e i campi della nuova scheda (cfr. nota).

owk:searchmaster = string

source della colonna su cui si vuole consentire la ricerca veloce.

owk:custom = bitwise

Attributo di tipo bitwise che consente di definire

alcune caratteristiche grafiche del controllo. Valori ammessi:

Bit 1:

· 0 viene visualizzato codice + nome
· 1 viene visualizzato solo il nome

Bit 2:

· 0 viene visualizzata l'immagine custom delle schede di anagrafica
· 1 l'immagine è data da cimages/document/ sourcetype_sourceid_list.gif

class = string

Classe CSS dell'elemento HTML input. Per impostazioni grafiche predefinite, l'attributo deve essere impostato a textbox.

 owk:buttonstyle = string

Stile applicato alle picture che compaiono accanto alla input per selezionare l'elemento di anagrafica dall'elenco, per creare una nuova scheda di anagrafica o per visualizzare il dettaglio dell'elemento selezionato.

 owk:buttonclass = string

Classe CSS applicata alle picture che compaiono a fianco della input per selezionare l'elemento di anagrafica dall'elenco, per creare una nuova scheda di anagrafica o per visualizzare il dettaglio dell'elemento selezionato.

Per impostazioni grafiche predefinite, l'attributo deve essere impostato a button.

style = string

Stile dell'elemento HTML input in formato CSS

owk:visible = string

cfr. owk:visible

owk:changeable = string

cfr. owk:changeable

owk:secret = string

cfr. owk:secret

owk:required = string

cfr. owk:required

owk:locked = string

cfr. owk:locked

owk:invalidable = string

cfr. owk:invalidable

 owk:tag1 = string

cfr. owk:tag1

 owk:tag2 = string

cfr. owk:tag2

 owk:tag3 = string

cfr. owk:tag3

nota

Nota

Se, ad esempio, il controllo avesse owk:fieldname=“mittente”, il campo XML sottostante il controllo risulterebbe così formato:

<mittente sourcetype="6" sourceid="0" generic="0">

<id>000003</id>

<name>Astaldi sas</name>

</mittente>

ove i dati sono reperiti dal corrispondente elenco, così come testimoniato dal valore assunto dai parametri owk:sourcetype e owk:sourceid. Ciascuna colonna dell'elenco è a sua volta dotata di un attributo source.

La funzione degli attributi owk:listfields e owk:newfields consiste rispettivamente nell'attingere a un elenco di anagrafica esistente e di accedere alla creazione di una nuova scheda di anagrafica, mantenendo il collegamento sincronico tra il documento che contiene il controllo, la scheda di anagrafica stessa (esistente ovvero creata "al volo") e l'elenco a cui il controllo punta.

La struttura del contenuto dell'attributo owk:listfields è la concatenazione delle seguenti stringhe separate dal carattere "|":

1. source della colonna con cui deve essere compilato l'elemento name del campo XML sottostante il controllo;
2. source della colonna con cui deve essere compilato l'elemento id del campo XML sottostante il controllo;
3. owk:fieldname del primo eventuale controllo collegato;
4. source della colonna con cui deve essere compilato il controllo precedente;
5. owk:fieldname del secondo eventuale controllo collegato;
6. source della colonna con cui deve essere compilato il controllo precedente;

Le coppie di passi (3, 4) e (5, 6) possono essere ripetute oppure non essere affatto presenti; consentono di determinare una coppia di valori del tipo owk:fieldname - source per ciascun eventuale controllo che si intende compilare a seguito della selezione dall'elenco.

L'elenco dei campi che è possibile associare nella definizione dell'attributo owk:listfields è illustrato nella seguente tabella.

Controllo | Tipo | Type della colonna
testo | text | text, integer, bool, float, memo, date, datetime, xml
 | integer | integer, bool
 | float | float, integer, bool
memo | text | text, integer, bool, float, memo, date, datetime, xml
 | memo | memo, text
 | xml | xml
combobox | text | text, integer, bool, float, memo, date, datetime, xml
 | integer | integer, bool
 | float | float, integer, bool
data |  | date
data e ora |  | datetime
città |  | text, integer, bool, float, memo, date, datetime, xml
tabella |  | xml
checkbox |  | bool
opzione | text | text, integer, bool, float, memo, date, datetime, xml
 | integer | integer, bool
 | float | float, integer, bool
 | date | date
 | datetime | datetime

La struttura del contenuto dell'attributo owk:newfields è la concatenazione delle seguenti stringhe separate dal carattere "|":

1. valore dell'attributo owk:datafield del controllo della scheda di anagrafica con cui deve essere compilato l'elemento name del campo XML sottostante il controllo;
2. valore dell'attributo owk:datasource del controllo della scheda di anagrafica con cui deve essere compilato l'elemento name del campo XML sottostante il controllo;
3. valore dell'attributo owk:datafield del controllo della scheda di anagrafica con cui deve essere compilato l'elemento id del campo XML sottostante il controllo;
4. valore dell'attributo owk:datasource del controllo della scheda di anagrafica con cui deve essere compilato l'elemento id del campo XML sottostante il controllo;
5. valore dell'attributo owk:fieldname del primo eventuale controllo collegato a questo controllo client;
6. valore dell'attributo owk:datafield del controllo della scheda di anagrafica con cui deve essere compilato il controllo al punto 5;
7. valore dell'attributo owk:datasource del controllo della scheda di anagrafica con cui deve essere compilato il controllo al punto 5;
8. valore dell'attributo owk:fieldname del secondo eventuale controllo collegato a questo controllo client;
9. valore dell'attributo owk:datafield del controllo della scheda di anagrafica con cui deve essere compilato il controllo al punto 8;
10. valore dell'attributo owk:datasource del controllo della scheda di anagrafica con cui deve essere compilato il controllo al punto 8;

I punti (5, 6, 7) e (8, 9, 10) possono essere ripetuti oppure non essere affatto presenti; consentono di determinare triple di valori del tipo owk:fieldname - owk:datafield - owk:datasource per ciascun eventuale controllo che si intende compilare a seguito dell'immissione di una nuova voce in anagrafica.

L'elenco dei campi che è possibile associare nella definizione dell'attributo owk:newfields è illustrato nella seguente tabella; è necessario verificare la corrispondenza sia sull'attributo owk:type che sull'attributo owk:datatype.

Controllo | datatype
testo | text, integer, float
memo | text, memo, xml
combobox | text, integer, float
data | date
data e ora | datetime
città | text
casella di controllo | bool
opzione | text, integer, float, date, datetime

Esempio

<input type="text" owk:type="client" class="textbox" owk:locked="0"

       owk:buttonclass="button" owk:generic="0" owk:sourcetype="6"

       owk:fieldname="canagrafica" owk:datafield="libero2"

       owk:listfields="nome|codice|localita|localita"

       owk:newfields="ragione_sociale||codice_anagrafica||localita|localita|"/>

Il controllo mostrato nell'esempio mostra nome e codice della voce di anagrafica selezionata, e contemporaneamente popola il controllo località utilizzando l'omonimo source dell'elenco; quando viene creata una nuova scheda di anagrafica:

· per riferirsi al name, utilizza il controllo avente caratterizzato dal datafield "ragione_sociale" della scheda di anagrafica, con datasource "" (indica che la fonte dati è il database di openwork®);
· per riferirsi all'id, utilizza il controllo avente caratterizzato dal datafield "codice_anagrafica" della scheda di anagrafica, con datasource "";
· infine, popola il controllo collegato identificato dal fieldname "localita" utilizzando quanto contenuto nel controllo avente come fieldname "localita" presente nella scheda di anagrafica e come datasource "".


Annotazioni (annotation)

Contenitore di note testuali in cui viene memorizzato anche l'autore della nota e la data di inserimento.

L'ultima nota inserita può essere modificata solo dall'operatore che l'ha inserita. Le note precedenti all'ultima non possono essere cancellate.

Attributo

Descrizione

owk:type = "annotation"

id = string

owk:fieldname = string

owk:description = string

owk:datasource = string

cfr. Gli attributi datasource e datafield

owk:datafield = string

cfr. Gli attributi datasource e datafield

owk:uppercase = 0/1/2

Valore predefinito 0. Permette di impostare il formato maiuscolo/minuscolo del testo; può assumere i seguenti valori:

· 0 lascia il testo invariato
· 1 converte il testo in minuscolo
· 2 lo converte tutto in maiuscolo

style = string

Stile dell'elemento HTML textarea in formato CSS

class = string

Classe CSS dell'elemento HTML div.

Per impostazioni grafiche predefinite, l'attributo deve essere impostato ad annotation.

owk:buttonstyle = string

Stile dell'immagine posizionata accanto la div che permette l'inserimento o la cancellazione di annotazioni.

owk:buttonclass = string

Classe CSS dell'immagine che appare in prossimità delle div e che permette l'inserimento o la cancellazione di annotazioni.

Per impostazioni grafiche predefinite, l'attributo deve essere impostato a button.

 owk:headstyle = string

Stile dell'intestazione delle annotazioni inserite nel documento.

owk:headclass = string

Valore predefinito textbold.

Classe CSS dell'intestazione delle annotazioni inserite nel documento.

owk:authorstyle = string

Stile del sottotitolo delle annotazioni inserite nel documento.

owk:authorclass = string

Classe CSS del sottotitolo delle annotazioni inserite nel documento. Per impostazioni grafiche predefinite l'attributo deve essere impostato a textthin.

owk:textstyle = string

Stile del corpo delle annotazioni inserite nel documento.

owk:textclass = string

Classe CSS del corpo delle annotazioni inserite nel documento. Per impostazioni grafiche predefinite, l'attributo deve essere impostato a textnote.

owk:visible = string

cfr. owk:visible

owk:changeable = string

cfr. owk:changeable

owk:secret = string

cfr. owk:secret

owk:locked = string

cfr. owk:locked

 owk:tag1 = string

cfr. owk:tag1

 owk:tag2 = string

cfr. owk:tag2

 owk:tag3 = string

cfr. owk:tag3


Casella di controllo (checkbox)

Visualizza una casella di controllo che permette l'impostazione del valore di un campo booleano.

Attributo | Descrizione
type = "checkbox" |
owk:type = "checkbox" |
owk:fieldname = string |
id = string |
owk:description = string |
owk:datasource = string | cfr. Gli attributi datasource e datafield
owk:datafield = string | cfr. Gli attributi datasource e datafield
owk:default = 0/1 | obsoleto, sostituito da checked.
checked = string | Se presente e diverso dalla stringa vuota, la casella di controllo risulta selezionata; in questo caso il valore xml sottostante è valorizzato a 1, al contrario è valorizzato a 0.
style = string | Stile dell'elemento HTML input in formato CSS
class = string | Classe CSS dell'elemento HTML input. Per impostazioni grafiche predefinite deve essere impostato a checkbox.
owk:visible = string | cfr. owk:visible
owk:changeable = string | cfr. owk:changeable
owk:secret = string | cfr. owk:secret
owk:required = string | cfr. owk:required
owk:locked = string | cfr. owk:locked
owk:invalidable = string | cfr. owk:invalidable

Esempio

  <input type = "checkbox" owk:type = "checkbox" class = "checkbox"

owk:locked = "0" owk:fieldname = "spunta" owk:datafield ="libero32"

owk:visible ="1">

  </input>


Casella di testo (textbox)

Permette la visualizzazione di una casella di testo. Le proprietà di modifica e visibilità della casella dipendono dal contesto organizzativo e procedurale in cui è stato aperto il documento.

Il suo contenuto viene formattato in base ad alcune proprietà impostate durante la fase di definizione del modello e può essere composto in base al contenuto di altri campi.

Attributo

Descrizione

type = "text"

owk:type = "textbox"

owk:fieldname = string

id = string

owk:description = string

owk:datatype = string

Valore predefinito text.

Può assumere uno dei seguenti possibili valori: text, integer, float. I valori currency e percentage sono stati aboliti e sostituiti con float.

owk:datasource = string

cfr. Gli attributi datasource e datafield

owk:datafield = string

cfr. Gli attributi datasource e datafield

owk:default = string

Obsoleto, sostituito dall'attributo value

value = stringa

Stringa contenente il valore predefinito del campo

owk:formula = string

cfr. owk:formula

owk:unique = 0/1/2

cfr. owk:unique

owk:mask = string

Utilizzato se owk:datatype="integer" oppure owk:datatype="float". cfr. owk:mask

maxlength

Numero massimo di caratteri che possono essere inseriti nella textbox.

owk:minlength

Numero minimo di caratteri che possono essere inseriti nella textbox.

owk:uppercase = 0/1/2

Permette di impostare il formato maiuscolo/minuscolo del testo. Può assumere i seguenti valori:

· 0 lascia il testo invariato
· 1 converte in minuscolo
· 2 converte in maiuscolo

Valore predefinito 0.

 style = string

Stile dell'elemento HTML input in formato CSS.

class = string

Classe CSS della input. Per impostazioni grafiche predefinite, deve essere impostato a textbox.

owk:visible = string

cfr. owk:visible

owk:changeable = string

cfr. owk:changeable

owk:secret = string

cfr. owk:secret

owk:required = string

cfr. owk:required

owk:locked = string

cfr. owk:locked

owk:invalidable = string

cfr. owk:invalidable

 owk:tag1 = string

cfr. owk:tag1

 owk:tag2 = string

cfr. owk:tag2

 owk:tag3 = string

cfr. owk:tag3

Esempio

  <input owk:type = "text" style = "font-family:Verdana;" owk:fieldname = "oggetto"

owk:locked = "false" owk:visible = "N 21;U 48" owk:changeable = "G 4"

owk:secret = "U 18;R 23" owk:required = "G 18;U 43" owk:datafield = "oggetto" owk:datasource = "" value = "Richiesta concessione edilizia"></input>


Città (city)

Permette la visualizzazione di una casella di testo in cui è possibile effettuare l'inserimento di una città oppure la selezione da un apposito elenco. Al controllo è possibile associare altri controlli la cui compilazione è automatica, contenenti il CAP e/o la provincia e/o la regione e/o il codice del comune per la generazione del codice fiscale.

Attributo

Descrizione

type = "text"

owk:type = "city"

owk:fieldname = string

id = string

owk:description = string

owk:datasource = string

cfr. Gli attributi datasource e datafield

owk:datafield = string

cfr.Gli attributi datasource e datafield

owk:default = string

Obsoleto , sostituito da value.

value = string

Valore predefinito del controllo.

owk:unique = 0/1/2

cfr. owk:unique

owk:relatedfields = string

Elenco degli attributi owk:fieldname dei controlli (separati dal carattere |) che compileranno automaticamente il controllo. Nell'ordine compariranno:

· owk:fieldname del controllo che conterrà la provincia
· owk:fieldname del controllo che conterrà il CAP
· owk:fieldname del controllo che conterrà la regione
· owk:fieldname del controllo che conterrà il codice del comune per il codice fiscale.

owk:uppercase = string

Permette di impostare il formato maiuscolo/minuscolo del testo. Può assumere i seguenti valori:

· 0 lascia il testo invariato
· 1 converte in minuscolo
· 2 converte in maiuscolo;

Valore predefinito 0.

style = string

Stile dell'elemento HTML input in formato CSS.

class = string

Classe CSS della input. Per impostazioni grafiche predefinite occorre impostare l'attributo a textbox.

 owk:buttonstyle = string

Stile dell'immagine che compare in prossimità della textbox quando essa appare all'operatore in modalità lettura/scrittura.

owk:buttonclass = string

Classe CSS dell'immagine che compare in prossimità della combobox quando essa appare all'operatore in modalità lettura/scrittura. Per impostazioni grafiche predefinite, l'attributo va impostato a button.

owk:visible = string

cfr. owk:visible

owk:changeable = string

cfr. owk:changeable

owk:secret = string

cfr. owk:secret

owk:required = string

cfr. owk:required

owk:locked = string

cfr. owk:locked

owk:invalidable = string

cfr. owk:invalidable

 owk:tag1 = string

cfr. owk:tag1

 owk:tag2 = string

cfr. owk:tag2

 owk:tag3 = string

cfr. owk:tag3

Esempio

  <input type = "text" owk:type = "city" class = "textbox" owk:buttonclass = "button"       owk:locked = "0" owk:fieldname = "citta" owk:datafield = "libero71"

    owk:relatedfields = "cap|provincia|regione|codicecomune"></input>


Classificazione (classification)

Tramite l'utilizzo di questo controllo, il documento espone un'inputbox in sola lettura con la voce di classificazione del documento e il percorso.

Attributo | Descrizione
type = "text" |
owk:type = "classification" |
owk:fieldname = string | Valore predefinito classificazione
id = string |
owk:description = string |
class = string | Classe CSS della input. Per impostazioni grafiche predefinite, l'attributo va impostato a textbox.
style = string | Stile dell'elemento HTML input in formato CSS
owk:visible = string | cfr. owk:visible
owk:secret = string | cfr. owk:secret
owk:tag1 = string | cfr. owk:tag1
owk:tag2 = string | cfr. owk:tag2
owk:tag3 = string | cfr. owk:tag3

nota

Nota

Il controllo non possiede attributi in grado di consentire la connessione ad una fonte dati, pertanto utilizza esclusivamente dati gestiti internamente alla piattaforma.

Esempio

Il seguente elemento

<input owk:type="classification"/>

inserisce nel documento una inputbox in sola lettura con la scritta "04.01 - ICE - Istanza di concessione edilizia".


Contenitore (container)

Permette di memorizzare il contenuto di un insieme di controlli in un unico campo di tipo XML con una struttura identica a quella della tabella, contenente però un'unica riga.

Un controllo di tipo container non produce alcun elemento grafico nel file HTML che rappresenta la form. Contrariamente a quanto accade nel caso della tabella, i controlli ad esso associati possono essere posizionati in qualsiasi punto del documento.

Attributo | Descrizione
owk:type = "container" |
owk:fieldname = string |
owk:description = string |
owk:datasource = string | cfr. Gli attributi datasource e datafield
owk:datafield = string | cfr. Gli attributi datasource e datafield
owk:locked = string | cfr. owk:locked
owk:visible = string | cfr. owk:visible
owk:changeable = string | cfr. owk:changeable
owk:secret = string | cfr. owk:secret
owk:tag1 = string | cfr. owk:tag1
owk:tag2 = string | cfr. owk:tag2
owk:tag3 = string | cfr. owk:tag3

nota

Nota

Per associare un controllo ad un contenitore è sufficiente impostare

owk:datasource del controllo = "container:" + owk:datafield del contenitore

I controlli associabili a un contenitore sono i seguenti: casella di testo, casella di controllo, opzione, lista,memo, data, data e ora, città,operatore, lista di operatori, ruolo, ufficio, anagrafica, lista di anagrafica, documento, lista di documenti, annotazioni, pulsante di selezione.

Se un contenitore non è modificabile, nessun controllo associato al contenitore sarà modificabile.

I dati contenuti all'interno del controllo vengono memorizzati in una struttura XML di cui il seguente è un esempio:

<contenitore>

<table>

<tr>

<td sourcetype="21" status="0" sourceid="0"> <!-- Colonna 1 -->

<id>147</id>

<style>3</style>

<number>0000147</number>

<date>2004-07-29</date>

</td>

<td>Descrizione</td> <!-- Colonna 2 -->

</tr>

</table>

</contenitore>

Nell'esempio il contenitore ha owk:fieldname = "contenitore" e ad esso sono associati un controllo di tipo documento e un controllo di tipo casella di testo.

I controlli associati ad un contenitore hanno un comportamento identico a quello dei controlli inseriti nel corpo principale della form, con le seguenti eccezioni:

· l'attributo owk:fieldname non è obbligatorio, per cui se non viene presente viene impostato come segue: owk:fieldname controllo + "_" + intero, dove per intero s'intende il numero di colonna in cui viene memorizzato il contenuto del controllo nel campo XML.
· conformemente alla definizione di contenitore come tabella ad unica riga, l'attributo owk:datafield deve essere sempre nella forma "col_" + intero, dove per intero s'intende posizione del tr, in cui viene memorizzato il contenuto del controllo all'interno della struttura table/tr nel campo XML del contenitore. Se questo attributo non viene impostato viene assegnata automaticamente la prima colonna disponibile.
· gli attributi owk:required, owk:invalidable non sono gestiti.
· l'attributo owk:secret viene ereditato dal contenitore.


Contenitore di firme (signcontainer)

Questo controllo permette di visualizzare - in fase di runtime - le firme che, pur non essendo esplicitamente definite nel modello di form, sono inserite nell'istanza di form quando questa è aperta a seguito di un'attività di firma.

È composto da una div al cui interno sono posizionati, con molteplicità pari al numero di firme, gli stessi elementi HTML del controllo firma:

· descrizione della firma
· nome di chi ha apposto la firma
· ruolo di chi ha apposto la firma
· data della firma.

Attributo | Descrizione
owk:type = "signcontainer" |
owk:fieldname = string | Valore predefinito firme
owk:description = string |
owk:lang_default = string | Identificativo del linguaggio con cui è espressa la descrizione della firma. Se non specificato viene assunto come linguaggio predefinito l'italiano (identificativo it). La descrizione della firma in questo linguaggio deve comparire tra i tag div.
owk:lang_eng = string | Traduzione della descrizione della firma nel linguaggio con identificativo eng.
style = string | Stile della div in formato CSS
class = string | Classe CSS dell'elemento HTML div. Perimpostazioni grafiche predefinite, l'attributo va impostato a sign.
owk:labelstyle = string | Stile degli elementi HTML label utilizzati nel controllo, in formato CSS.
owk:labelclass = string | Classe CSS delle label utilizzate nel controllo. Per impostazioni grafiche predefinite, l'attributo va impostato a label.
owk:labelrequiredstyle = string | Stile delle label, utilizzate nel controllo in formato CSS, quando la compilazione del campo è obbligatoria.
owk:labelrequiredclass = string | Classe CSS delle label utilizzate nel controllo quando la compilazione del campo è obbligatoria, in formato CSS. Per impostazioni grafiche predefinite, l'attributo va impostato a label.
owk:inputstyle = string | Stile degli elementi HTML input utilizzati nel controllo, in formato CSS.
owk:inputclass = string | Classe CSS degli elementi HTML input utilizzati nel controllo,in formato CSS. Per impostazioni grafiche predefinite, l'attributo va impostato a textbox.
owk:checkstyle = string | Stile della casella di controllo utilizzata nel controllo, in formato CSS.
owk:checkclass = string | Classe CSS degli elementi HTML casella di controllo utilizzata nel controllo, in formato CSS. Per impostazioni grafiche predefinite, l'attributo va impostato a checkbox.
owk:tag1 = string | cfr. owk:tag1
owk:tag2 = string | cfr. owk:tag2
owk:tag3 = string | cfr. owk:tag3

nota

Nota

Possono essere presenti più attributi caratterizzati dal prefisso owk:lang_, uno per ciascuna lingua definita nel sistema (owk:lang_fr per le etichette in francese, owk:lang_de per le etichette in tedesco, etc). Il contenuto delle etichette viene inserito nei file di linguaggio con id pari a fieldname+ "_l".

L'elemento HTML div ha sempre id pari a signcontainer.


Contesto (context)

In fase di disegno del modello di form, le proprietà di accesso a un controllo sono impostate come formule; in fase di runtime tali proprietà sono vere se l'operatore corrente appartiene all'insieme di operatori identificato dalla formula.

Talvolta è necessario visualizzare o nascondere parti di una form a seconda che l'operatore corrente appartenga ad un gruppo di operatori identificato da una formula: il controllo permette di inserire in un modello di form formule il cui risultato, riportato all'interno dell'elemento owk:context/owk:fields della struttura XML sottostante la form, è reso disponibile per ulteriori elaborazioni all'interno di blocchi XSL o codice javascript. Questo controllo non produce alcun elemento HTML.

Il controllo contesto può essere anche utilizzato per impostare le regole di accesso alle righe, alle colonne o a una singola cella di una tabella. Se la tabella è bloccata tutti i controlli all'interno della tabella risulteranno bloccati, se la tabella non è visibile tutti i controlli risulteranno non visibili.

Detto table il fieldname della tabella, ctrl il fieldname di un controllo all'interno della tabella e context il fieldname del controllo contesto, è possibile impostare le regole di accesso:

1. ad una cella di una tabella se fieldname= tabella:row_N:col_M ove N è il numero di riga e M il numero di colonna
2. ad una cella di una tabella se fieldname= controllo:row_N ove N è il numero di riga
3. ad una intera riga della tabella se fieldname= tabella:row_N ove N è il numero di riga
4. ad una intera colonna della tabella se fieldname= tabella:col_M ove M il numero di colonna
5. a una intera colonna della tabella se fieldname = controllo

L'ordine rispecchia la gerarchia: la regola di accesso 1 sovrascrive le successive.

Il controllo contesto può essere anche utilizzato per impostare la visibilità delle azioni in una form alla sua apertura, tramite un apposita funzione di document.js, applyActionContext. In tal caso occorre passare nel campo contesto un elemento del tipo action_nomeaction dove nomeaction è il nome della azione di cui si vuole impostare la visibilità. Per fare ciò si deve dichiarare l'attributo fieldname=action_nomeaction.

Attributo | Descrizione
owk:type = "context" |
owk:fieldname = string |
owk:visible = string | cfr. owk:visible
owk:changeable = string | cfr. owk:changeable
owk:secret = string | cfr. owk:secret
owk:required = string | cfr. owk:required
owk:locked = string | cfr. owk:locked

Esempio

Si supponga di aver inserito nel modello di form il seguente controllo contesto:

      <img owk:type = "context" owk:fieldname = "formule" owk:locked = "U  3;G  2" />

e il seguente blocco XSL:

      <xsl:if test= "//owk:form/owk:context/owk:fields/owk:field[@name=’formule’

       and @locked=’true’]">

<label>La formula è vera</label>

</xsl:if>

la label all'interno del blocco xsl:if appare nell'HTML soltanto a condizione che l'operatore corrente appartenga all'ufficio con identificativo 3 o al gruppo con identificativo 2.


Data (date)

Visualizza una casella di testo che deve essere compilata con una data valida. Accanto alla casella di testo appare un pulsante che permette la selezione della data da un calendario. La data è formattata in base alle impostazioni dell'operatore corrente.

Attributo | Descrizione
type = "text" |
owk:type = "date" |
owk:fieldname = string |
id = string |
owk:description = string |
owk:datasource = string | cfr. Gli attributi datasource e datafield
owk:datafield = string | cfr.Gli attributi datasource e datafield
owk:default = string | Obsoleto , sostituito da value.
value = string | Stringa contenente una data valida nel formato yyyy-mm-gg (utilizzare come impostazione predefinita).
owk:unique = 0/1/2 | cfr. owk:unique
style = string | Stile dell'elemento HTML input in formato CSS.
class = string | Classe CSS dell'elemento HTML input. Perimpostazioni grafiche predefinite l'attributo deve essere impostato a textbox.
owk:buttonstyle = string | Stile dell'immagine che appare in prossimità della input e che permette l'apertura del calendario.
owk:buttonclass = string | Classe CSS dell'immagine che appare in prossimità della input e che permette l'apertura del calendario. Per impostazioni grafiche predefinite, l'attributo deve essere impostato a button.
owk:visible = string | cfr. owk:visible
owk:changeable = string | cfr. owk:changeable
owk:secret = string | cfr. owk:secret
owk:required = string | cfr. owk:required
owk:locked = string | cfr. owk:locked
owk:invalidable = string | cfr. owk:invalidable
owk:tag1 = string | cfr. owk:tag1
owk:tag2 = string | cfr. owk:tag2
owk:tag3 = string | cfr. owk:tag3

Esempio

  <input type="text" owk:type="date" class="textbox" id="datadoc"

   owk:fieldname="datadoc" owk:visible="1" owk:changeable="0"/>


Data e ora (datetime)

Visualizza due caselle di testo di cui una deve essere compilata con una data valida, l'altra con un'ora valida. Accanto alle caselle di testo viene visualizzato un pulsante che permette la selezione della data da un calendario. Il contenuto della data e dell'ora viene formattato in base alle impostazioni dell'operatore corrente.

Attributo | Descrizione
type = "text" |
owk:type = "datetime" |
owk:fieldname = string |
id = string |
owk:description = string |
owk:datasource = string | cfr. Gli attributi datasource e datafield
owk:datafield = string | cfr.Gli attributi datasource e datafield
owk:default = string | Obsoleto , sostituito da value.
value = string | Stringa contenente data e ora nel formato yyyy-mm-ggThh:nn:ss (utilizzare come impostazione predefinita).
owk:unique = 0/1/2 | cfr. owk:unique
style = string | Stile dell'elemento HTML input in formato CSS.
class = string | Classe CSS dell'elemento HTML input. Perimpostazioni grafiche predefinite l'attributo deve essere impostato a textbox.
owk:buttonstyle = string | Stile dell'immagine che appare in prossimità della input e che permette l'apertura del calendario.
owk:buttonclass = string | Classe CSS dell'immagine che appare in prossimità della input e che permette l'apertura del calendario. Per impostazioni grafiche predefinite, l'attributo deve essere impostato a button.
owk:visible = string | cfr. owk:visible
owk:changeable = string | cfr. owk:changeable
owk:secret = string | cfr. owk:secret
owk:required = string | cfr. owk:required
owk:locked = string | cfr. owk:locked
owk:invalidable = string | cfr. owk:invalidable
owk:tag1 = string | cfr. owk:tag1
owk:tag2 = string | cfr. owk:tag2
owk:tag3 = string | cfr. owk:tag3

Esempio

  <input type = "text" owk:type = "datetime" class = "textbox" owk:locked = "0"

   owk:buttonclass = "button" owk:fieldname = "dataeora"

   owk:datafield = "libero76"></input>

nota

Nota

Se il controllo ha identificativo id, l'attributo HTML id della casella di testo contenente la data sarà pari a id, quello della casella di testo contenente l'ora sarà pari a id_t.


Documento (document)

Visualizza una inputbox che può essere compilata con un riferimento a un documento di openwork®. La compilazione avviene tramite selezione da un elenco di documenti accessibile mediante l'apposito pulsante posto in prossimità della inputbox. L'elenco per la selezione dei documenti può essere opportunamente filtrato.

Questo controllo può essere associato ad altri controlli in modo che, selezionando un documento, la compilazione di questi ultimi avvenga automaticamente attingendo alle informazioni presenti nell'elenco.

Attributo

Descrizione

type = "text"

owk:type = "document"

owk:fieldname = string

id = string

owk:description = string

owk:datasource = string

cfr. Gli attributi datasource e datafield

owk:datafield = string

cfr. Gli attributi datasource e datafield

owk:insertenabled = 0/1

Il controllo permette l'inserimento di un nuovo documento nella lista mediante apposito pulsante. Valore predefinito 0.

Il valore 1 può essere impostato solo quando l'attributo owk:sourcetype assume valori pari a 1, 2, 3, 4, 11, 12, 13, 14.

owk:selectenabled = 0/1

Il controllo permette la selezione di un documento da un elenco mediante apposito pulsante. Valore predefinito 1.

Il valore 0 inibisce la visualizzazione del pulsante di selezione e impedisce la selezione dall'elenco.

owk:sourcetype = integer

Archivio di provenienza dei documenti che compaiono nell'elenco di selezione. I possibili valori sono: 1, 2, 3, 4, 9, 10, 11, 12, 13, 14, 19, 21 (cfr. Parametri listtype, listsubtype e modeli).

Valore predefinito 9, corrispondente all'archivio “Protocollo e documenti”.

 owk:status = string

Obsoleto, sostituito da owk:sourcesubtype.

 owk:sourcesubtype = integer

Dipende dal valore dell'attributo owk:sourcetype(cfr. Parametri listtype, listsubtype e modeli).

Valore predefinito è 1, corrispondente all'archivio "registro giornaliero di protocollo".

owk:sourceid = integer

Dipende dal valore degli attributi owk:sourcetype e owk:sourcesubtype (cfr. Parametri listtype, listsubtype e modeli).

Valore predefinito è 0.

Se owk:insertenabled = 1, l'attributo individua anche la tipologia di documento da creare.

 owk:listparameters= string

cfr. L'attributo listparameters.

owk:listfields = string

Contiene l'associazione tra gli elementi del campo XML e le colonne dell'elenco. Contiene inoltre l'associazione tra eventuali altri controlli collegati e le colonne dell'elenco (cfr. nota).

owk:newfields = string

Contiene l'associazione tra gli elementi del campo XML e i controlli della scheda di anagrafica nuova o selezionata.

Contiene inoltre l'associazione tra eventuali altri campi collegati e i campi della nuova scheda (cfr. nota).

 owk:custom = 0/2

Se l'attributo è impostato a 2, le immagini dei

pulsanti per la gestione del documento sono quelle

custom. Tali immagini devono essere presenti nella

cartella cimages/document e devono e devono essere così denominate:

· owk:sourcetype_owk:sourceid_list.gif per il pulsante di selezione dalla lista
· owk:sourcetype_owk:sourceid_detail.gif per il pulsante di apertura del documento
· owk:sourcetype_owk:sourceid_new.gif per il pulsante di creazione nuovo documento

Se l'attributo è impostato a 0, le immagini utilizzate per la visualizzazione dei pulsanti sono quelle standard.

style = string

Stile dell'elemento HTML input in formato CSS

class = string

Classe CSS dell'elemento HTML input. Per impostazioni grafiche predefinite, l'attributo deve essere impostato a textbox.

 owk:buttonstyle = string

Stile applicato alle picture che compaiono a fianco dell'elemento HTML input per selezionare un

documento dall'elenco, visualizzare il dettaglio del

documento selezionato o creare un nuovo documento.

 owk:buttonclass = string

Classe CSS applicata alle picture che compaiono a fianco dell'elemento HTML input per selezionare un documento dall'elenco, visualizzare il dettaglio del documento selezionato o creare un nuovo documento. Per impostazioni

grafiche predefinite, l'attributo deve essere impostato a button.

owk:visible = string

cfr. owk:visible

owk:changeable = string

cfr. owk:changeable

owk:secret = string

cfr. owk:secret

owk:required = string

cfr. owk:required

owk:locked = string

cfr. owk:locked

owk:invalidable = string

cfr. owk:invalidable

 owk:tag1 = string

cfr. owk:tag1

 owk:tag2 = string

cfr. owk:tag2

 owk:tag3 = string

cfr. owk:tag3

nota

Nota

Valgono le stesse condizioni e metodologie espresse nella sezione relativa al controllo di tipo Anagrafica (client).

L 'attributo owk:listfields è la concatenazione di stringhe separate da "|": esse sono le origini (source) delle colonne nell'elenco di selezione dei documenti (attributo source dell'elemento col).

Esempio

<risposta sourcetype = "21" status = "0" sourceid = "0">

<id>147</id>

<style>3</style>

<number>0000147</number>

<date>2004-07-29</date>

</risposta>

In particolare la concatenazione di stringhe assume tale significato:

1. source della colonna contenente l'identificativo (id) del documento, nel caso in cui il controllo debba essere popolato a partire da un elenco contenente documenti provenienti da un unico archivio;
2. origine della colonna contenente la concatenazione di id + "_" + style (ad es. "4_3") nel caso in cui il controllo debba essere popolato partendo da un elenco contenenti documenti provenienti da archivi diversi;
3. source della colonna da associare al nodo number del campo;
4. source della colonna da associare al nodo date del campo;
5. owk:fieldname del primo eventuale controllo presente nel documento e collegato alla compilazione del controllo di tipo document;
6. source della colonna da associare all'eventuale controllo specificato al punto 4.

Le coppie di passi (3, 4) e (5, 6) possono essere ripetute oppure non essere affatto presenti; consentono di determinare una coppia di valori per ciascun eventuale controllo che si intende compilare a seguito della selezione dall'elenco.

L'attributo owk:newfields è la concatenazione di stringhe separate da "|": esse sono le origini delle colonne nell'elenco di selezione dei documenti (attributo source dell'elemento col).

Considerando la struttura del campo riportata nell'esempio, le stringhe corrispondono a:

1. owk:datafield del controllo contenente il number del documento
2. owk:datasource del controllo contenente il number del documento
3. owk:datafield del controllo contenente il date del documento
4. owk:datasource del controllo contenente il date del documento
5. owk:fieldname del primo eventuale controllo collegato
6. owk:datasource del controllo da associare al primo eventuale controllo collegato
7. owk:datafield del controllo da associare al primo eventuale controllo collegato

I punti (5, 6, 7) possono essere ripetuti oppure non essere affatto presenti; consentono di determinare triple di valori del tipo owk:fieldname - owk:datasource - owk:datafield per ciascun eventuale controllo che si intende compilare a seguito della creazione di un nuovo documento.

Esempio

<input type="text" owk:type="document" class="textbox" id="label_c"

owk:buttonclass="button" owk:locked="0" owk:fieldname="cdocumenti"

owk:datafield="libero49" owk:sourcetype="3"

owk:listfields="id|numerodoc|datadoc" owk:newfields="numerodoc||datadoc|"

owk:insertenabled="1"/>


Etichetta (label)

Permette l'inserimento di testo all'interno di un modello di form.

Il testo può essere racchiuso all'interno di una etichetta il cui contenuto è tradotto in base al profilo linguistico dell'operatore; inoltre l'etichetta può essere associata ad un campo del documento e acquisisce proprietà grafiche variabili in funzione delle proprietà dell'eventuale controllo cui è associata.

Attributo

Descrizione

owk:type = "label"

owk:fieldname = string

Il valore deve coincidere con l'attributo owk:fieldname di un qualsiasi altro controllo. E' obbligatorio quando non viene specificato l'attributo id.

id = string

L'attributo è obbligatorio se:

· non viene specificato l'attributo owk:fieldname
· il mode è textual

Se questo attributo non è specificato e il mode ènormal, il formprocessor lo imposterà a fieldname + “_l”.

owk:lang_default = string

Identificativo del linguaggio con cui è espresso il contenuto dell'etichetta, se non indicato viene assunto come linguaggio di default l'italiano(identificativo it). L'attributo non viene utilizzato se owk:formula<>""

owk:lang_eng = string

Traduzione dell'etichetta nel linguaggio con identificativo eng.

owk:path = string

Obsoleto, sostituito da owk:formula

owk:formula = string

cfr. owk:formula

owk:format = string

Viene utilizzato con l'attributo owk:formula. Può essere una stringa vuota oppure uno dei seguenti valori: stringa vuota, date, datetime, integer, float.

Valore di default stringa vuota.

 owk:mask = string

Viene utilizzato con l'attributo owk:formula quando owk:format=”integer” oppure owk:format=”float” (cfr. owk:mask).

 owk:mode = normal/textual

Obsoleto, sostituito da owk:layout.

 owk:layout = normal/textual

style = string

Stile della label in formato CSS, non utilizzato quando owk:mode= "textual".

class = string

Classe CSS della label. Per impostazioni grafiche predefinite, l'attributo deve essere impostato a label. Non è utilizzato quando owk:mode= "textual".

owk:requiredstyle = string

Stile della label in formato CSS utilizzato quando il campo ad essa associato è obbligatorio.

owk:requiredclass = string

Classe CSS della label utilizzata quando il campo ad essa associato è obbligatorio.

Per impostazioni grafiche predefinite, l'attributo deve essere impostato a labelrequired.

 owk:lockedclass = string

Classe CSS della label utilizzata quando il campo ad essa associato è in sola lettura o bloccato. Per impostazioni grafiche predefinite, l'attributo deve essere impostato a labellocked.

owk:lockedstyle = string

Stile della label in formato CSS utilizzato quando il campo ad essa associato è in sola lettura o bloccato.

nota

Nota

Vi possono essere più attributi che iniziano con owk:lang_, uno per ogni lingua definita nel sistema (owk:lang_fr per le etichette in francese, owk:lang_de per le etichette in tedesco, etc).

Esempio

<label owk:type="label" owk:lang_default="it" owk:lang_eng="Document date"

style ="font-family: Verdana;" owk:requiredstyle="font-family: Verdana; font-weight: bold;" id="datadocumento_l" owk:fieldname="datadocumento">

Data documento</label>


Etichetta condizionale (boolinfo)

Visualizza un testo se il valore del campo indicato nell'attributo owk:fieldname è diverso da 0.

Attributo | Descrizione
owk:type = "boolinfo" |
owk:fieldname = string |
id = string |
owk:description = string |
owk:datasource = string | cfr. Gli attributi datasource e datafield
owk:datafield = string | cfr.Gli attributi datasource e datafield
owk:lang_default = string | Identificativo del linguaggio con cui è espressa la stringa tra i tag label. Se non specificato il valore predefinito è it (italiano).
owk:lang_eng = string | Traduzione della stringa nel linguaggio con identificativo eng.
owk:bullet = 0/1 | Se uguale a 1, viene anteposto al testo un elemento HTML <li>. Valore predefinito 0.
owk:br = 0/1 | Se uguale a 1, viene accodato un elemento <br/>. Valore predefinito 0.
style = string | Stile del testo in formato CSS
class = string | Classe CSS del testo Per impostazioni grafiche predefinite, l'attributo deve essere impostato a label.
owk:visible = string | cfr. owk:visible
owk:secret = string | cfr. owk:secret

nota

Nota

Vi possono essere più attributi che iniziano con owk:lang_, uno per ogni lingua definita nel sistema (owk:lang_fr per le etichette in francese, owk:lang_de per le etichette in tedesco, etc).


Firma (sign)

Questo controllo genera all'interno del modello di form un tag HTML div al cui interno sono posizionati i seguenti elementi HTML:

· <input type="text"> con la descrizione della firma;
· <input type="text"> con il nome di chi ha apposto la firma;
· <input type="text"> con il ruolo di chi ha apposto la firma;
· <input type="text"> con la data della firma;
· <input type="checkbox">    per apporre la firma.

Attributo | Descrizione
owk:type = "sign" |
owk:fieldname = string |
id = string |
owk:description = string |
owk:datasource = string | cfr. Gli attributi datasource e datafield
owk:datafield = string | cfr.Gli attributi datasource e datafield
owk:lang_default = string | Identificativo del linguaggio con cui è espressa la descrizione della firma, se non indicato si assume come impostazione predefinita it (italiano). La descrizione della firma in questo linguaggio deve comparire tra i tag HTML div.
owk:lang_eng = string | Traduzione della descrizione della firma nel linguaggio con identificativo eng.
style = string | Stile della div in formato CSS.
class = string | Classe CSS dell'elemento HTML div. Per impostazioni grafiche predefinite, l'attributo deve essere impostato a sign.
owk:labelstyle = string | Stile delle label utilizzate nel controllo, in formato CSS.
owk:labelclass = string | Classe CSS delle label utilizzate nel controllo. Per impostazioni grafiche predefinite l'attributo deve essere impostato a label.
owk:labelrequiredstyle = string | Stile delle label in formato CSS, utilizzate nel controllo quando la compilazione del campo è obbligatoria.
owk:labelrequiredclass = string | Classe CSS delle label utilizzate nel controllo quando la compilazione del campo è obbligatoria. Per impostazioni grafiche predefinite, l'attributo deve essere impostato a label.
owk:inputstyle = string | Stile delle input utilizzate nel controllo in formato CSS.
owk:inputclass = string | Classe CSS degli elementi HTML input, in formato CSS , utilizzati nel controllo. Per impostazioni grafiche predefinite l'attributo deve essere impostato a textbox.
owk:checkstyle = string | Stile dell'elemento HTML casella di controllo, in formato CSS, utilizzato nel controllo.
owk:checkclass = string | Classe CSS della casella di controllo utilizzata nel controllo, in formato CSS. Per impostazioni grafiche predefinite l'attributo deve essere impostato a checkbox.
owk:visible = string | cfr. owk:visible
owk:changeable = string | cfr. owk:changeable
owk:secret = string | cfr. owk:secret
owk:required = string | cfr. owk:required
owk:locked = string | cfr. owk:locked
owk:tag1 = string | cfr. owk:tag1
owk:tag2 = string | cfr. owk:tag2
owk:tag3 = string | cfr. owk:tag3

 Il datasource del controllo è il contenitore delle firme.

nota

Nota

Vi possono essere più attributi che iniziano con owk:lang_, uno per ogni lingua definita nel sistema (owk:lang_fr per le etichette in francese, owk:lang_de per le etichette in tedesco, etc…). Il contenuto delle etichette viene inserito nei file di linguaggio con id pari a fieldname+ "_l".


Info firma (signinfo)

Questo controllo permette di visualizzare il contenuto dei campi XML di tipo sign per mezzo di una label. Visualizza l'autore e la data di creazione del documento, precedute dalla stringa indicata tra i tag label di questo controllo (o quella corrispondente nel linguaggio dell'operatore).

Attributo | Descrizione
owk:type = "signinfo" |
owk:fieldname = string |
id = string |
owk:description = string |
owk:datasource = string | cfr. Gli attributi datasource e datafield
owk:datafield = string | cfr.Gli attributi datasource e datafield
owk:lang_default = string | Identificativo del linguaggio con cui è espressa la stringa tra i tag label. Se non specificato il valore predefinito è it (italiano).
owk:lang_eng = string | Traduzione della stringa nel linguaggio con identificativo eng.
owk:bullet = 0/1 | Se uguale a 1, viene anteposto al testo un elemento HTML <li>. Valore predefinito 0.
owk:br = 0/1 | Se uguale a 1, viene accodato un elemento <br/>. Valore predefinito 0.
style = string | Stile della label in formato CSS
class = string | Classe CSS della label. Per impostazioni grafiche predefinite, l'attributo deve essere impostato a label.
owk:visible = string | cfr. owk:visible
owk:secret = string | cfr. owk:secret

nota

Nota

Vi possono essere più attributi che iniziano con owk:lang_, uno per ogni lingua definita nel sistema (owk:lang_fr per le etichette in francese, owk:lang_de per le etichette in tedesco, etc).


Lista (combobox)

Permette la visualizzazione di una combobox o di una listbox popolata con valori digitati dall'operatore in fase di definizione del modello o prelevati da una base dati. La combobox può obbligare l'utente alla scelta da un elenco, eventualmente memorizzando un valore numerico associato agli item. Quando la scelta non è obbligatoria, è possibile inserire un nuovo valore che verrà memorizzato nella base dati, in modo da permetterne la visualizzazione anche ad altri operatori.

Le proprietà di modifica e visibilità della combobox dipendono dal contesto organizzativo e procedurale in cui è stato aperto il documento; il suo contenuto viene formattato in base a proprietà impostabili in fase di definizione del modello.

Attributo

Descrizione

type = "text"

owk:type = "combobox"

owk:fieldname = string

id = string

owk:description = string

owk:datatype = string

Può assumere i seguenti valori: text, integer, float. I valori currency e percentage sono stati aboliti e sostituiti con float.

Valore di default text.

owk:datasource = string

cfr. Gli attributi datasource e datafield

owk:datafield = string

cfr.Gli attributi datasource e datafield

owk:default = string

Stringa contenente il valore predefinito del campo.

owk:unique = 0/1/2

cfr. owk:unique

owk:mode = string

Può assumere i seguenti valori:

· normal: il controllo permette l'inserimento anche di valori non riportati in elenco
· update: il controllo permette l'inserimento di valori non riportati in elenco aggiungendo il nuovo valore all'elenco dei possibili valori; tale modalità è consentita soltanto per alcuni tipi predefiniti di controllo “lista”, quali “supporto” e “tipoinvio” per i documenti e “titolo” e “tiposocieta” per le schede di anagrafica
· list: il controllo permette solo l'inserimento dei valori riportati in elenco
· indexed: il controllo permette solo l'inserimento delle voci riportate in elenco, mentre il dato corrispondente (situato nell'XML sottostante) coincide con il valore numerico associato all'elemento selezionato

Valore predefinito list.

owk:listtype = integer

Obsoleto, sostituito da owk:sourcetype

 owk:sourcetype = integer

Può essere i seguenti valori:

· Se si vuole popolare la combobox con i valori forniti da una ricerca, allora i possibili valori sono 10,11,12,13,14,16,19
· Se si vuole popolare la combobox con i valori forniti da un'origine dati custom, allora è necessario specificare un valore >10000

cfr. Parametri listtype, listsubtype e modelid

cfr. Definizione di un elenco con origine dati custom

owk:listsource= string

Obsoleto, sostituito da owk:sourceid

owk:sourceid = integer

Possono utilizzarsi soltanto ricerche o fonti dati impostate.

cfr. Parametri listtype, listsubtype e modelid

 owk:addblank = 0/1

Se 1 aggiunge un elemento vuoto alle opzioni disponibili. Valido nel caso in cui owk:mode = "indexed" oppure owk:mode="list"

size = integer

cfr. specifiche HTML.

owk:mask = string

Utilizzato se owk:datatype="integer" o owk:datatype="float" (cfr. owk:mask).

owk:uppercase = string

L'attributo è utilizzabile soltanto quando owk:mode è normal o update. Consente di impostare il formato maiuscolo/minuscolo del testo. Può assumere i seguenti valori:

· 0 lascia il testo invariato
· 1 converte in minuscolo
· 2 converte in maiuscolo.

Valore predefinito 0.

style = string

Stile dell'elemento HTML select in formato CSS

class = string

Classe CSS dell'elemento HTML select. Per impostazioni grafiche predefinite, l'attributo deve essere impostato a listbox.

owk:buttonstyle = string

Stile dell'immagine che appare in prossimità della combobox nel caso in cui sia possibile inserire una nuova voce.

 owk:buttonclass = string

Classe CSS della immagine che compare in prossimità della combobox nel caso in cui sia possibile inserire una nuova voce. Per impostazioni grafiche predefinite deve essere impostato a button.

owk:visible = string

cfr. owk:visible

owk:changeable = string

cfr. owk:changeable

owk:secret = string

cfr. owk:secret

owk:required = string

cfr. owk:required

owk:locked = string

cfr. owk:locked

owk:invalidable = string

cfr. owk:invalidable

 owk:tag1 = string

cfr. owk:tag1

 owk:tag2 = string

cfr. owk:tag2

 owk:tag3 = string

cfr. owk:tag3

nota

Nota

La lista può contenere fra i tag <select></select> elementi option, come da specifiche HTML, qualora non siano impostati gli attributi owk:sourceype e owk:sourceid. Questi elementi saranno i possibili valori selezionabili nella lista.

Se owk:mode="indexed", gli option devono necessariamente avere l'attributo value.

La lista popolata da una ricerca o da un'origine dati custom, deve disporre di dati adeguati:

· se la lista è di tipo semplice, la ricerca dovrà fornire dati di qualsiasi tipo ma in unica colonna
· se la lista è di tipo indicizzato, la ricerca dovrà fornire un vettore bidimensionale dotato di un campo numerico ed un campo contenente dati di qualunque tipo.

Se gli elementi option vengono impostati con l'attributo selected, il valore dell'elemento viene impostato dal formprocessor come owk:default della lista.

Se il valore dell'attributo owk:datasource viene impostato alla stringa vuota (valore predefinito) e l'attributo owk:datafield ha uno dei seguenti valori, l'origine dati è intrinsecamente definita:

· supporto per il protocollo in entrata e uscita
· tipoinvio per il protocollo in uscita
· titolo per anagrafica di tipo persona fisica
· tiposocieta per anagrafica di tipo persona giuridica

Esempio

<select owk:type="combobox" style="font-family:Verdana;" owk:mode="indexed"

owk:fieldname="supporto" owk:locked="false" owk:visible="N  21;U  48"

owk:changeable="G  4" owk:secret="U  18;R  23" owk:required="G  18;U  43"

owk:datafield="tipocomunicazione" owk:datasource="">

  <option value="1">lettera</option>

  <option value="2" selected="1">fax</option>

  <option value="3">raccomandata</option>

</select>


Lista di anagrafica (clientlist)

Il controllo permette la compilazione di una lista di elementi di anagrafica.

Lato client viene visualizzata una div contenente una tabella con un elenco di elementi di anagrafica. La compilazione della lista avviene tramite apertura un elenco mediante apposito pulsante posto in prossimità della div. Analogamente al controllo di tipo Anagrafica(client), sono inoltre visualizzati pulsanti per consultare il dettaglio di un elemento selezionato e per creare un nuovo elemento.

La creazione di nuove voci di anagrafica "al volo" e l'utilizzo di filtri si ottiene mediante la definizione di opportuni attributi del controllo.

Il formato XML di un controllo clientlist avente owk:fieldname="altrimittenti" appare così formato:

<altrimittenti sourcetype="6" sourceid="0" generic="0">

<client>

<name>Astaldi sas</name>

<id>000003</id>

</client>

<client>

<name>Rossi srl</name>

<id>000012</id>

</client>

</altrimittenti>

Attributo

Descrizione

owk:type = "clientlist"

owk:fieldname = string

id = string

owk:description = string

owk:datasource = string

cfr. Gli attributi datasource e datafield

owk:datafield = string

cfr.Gli attributi datasource e datafield

owk:default = string

Obsoleto , sostituito da value.

value = string

Stringa contenente il valore predefinito del controllo, costituito da codici di anagrafica concatenati da “;” o “|” (es. 000003;000012).

owk:insertenabled = 0/1

Valore predefinito 1. Permette l'inserimento di nuove schede di anagrafica nella lista mediante apposito pulsante.

owk:selectenabled = 0/1

Valore predefinito 1. Permette la selezione di un elemento di anagrafica da un elenco mediante apposito pulsante.

owk:deleteenabled = 0/1

Indica che il controllo permette l'eliminazione delle voci di anagrafica inserite nella lista.

Valore predefinito 1.

 owk:generic = 0/1

Obsoleto, può assumere valore

· 0 nel caso in cui si tratti di una persona fisica o giuridica
· 1 nel caso in cui si tratti di un elemento di anagrafica generica.

Valore predefinito 0. Se si imposta con valori diversi, il formprocessor genera un errore. Per impostare la persona fisica o giuridica è necessario impostare il valore del campo con datafield personafisica.

owk:sourcetype = 6/16

Definisce l'effetto della pressione del pulsante associato al controllo. Valori ammessi:

· 6 è aperto l'elenco delle schede di anagrafica
· 16 si apre una ricerca sulle schede di anagrafica

Valore predefinito 6. Se si imposta con valori diversi, il formprocessor genera un errore.

owk:sourceid = integer

Identificativo della tipologia di scheda di anagrafica o della ricerca.

Se owk:insertenabled = 1 questo attributo individua anche la tipologia di scheda di anagrafica da creare. La scheda anagrafica creata è sempre di tipo persona giuridica.

 owk:listparameters= string

cfr. L'attributo listparameters.

owk:listfields = string

Contiene l'associazione tra gli elementi del campo XML e le colonne dell'elenco. Contiene inoltre l'associazione tra eventuali altri controlli collegati e le colonne dell'elenco (cfr. nota).

owk:newfields = string

Contiene l'associazione tra gli elementi del

campo XML (ossia name e id) e i controlli della

scheda di anagrafica nuova o selezionata (cfr. nota).

style = string

Stile dell'elemento div in formato CSS.

Impostazione consigliata: overflow: auto.

class = string

Classe CSS dell'elemento HTML div.

Per impostazioni grafiche predefinite l'attributo deve essere impostato a div.

 owk:tablestyle = string

Stile della tabella contenuta all'interno della div.

 owk:tableclass = string

Classe CSS della tabella contenuta all'interno della div. Per impostazioni grafiche predefinite l'attributo deve essere impostato a bodytable.

 owk:buttonstyle = string

Stile applicato alle picture presenti accanto le div per selezionare l'elemento di anagrafica dall'elenco, per creare una nuova scheda di anagrafica o per visualizzare il dettaglio dell'elemento selezionato.

owk:buttonclass = string

Classe CSS applicata alle picture presenti accanto le div per selezionare l'elemento di anagrafica dall'elenco o per visualizzare il dettaglio di un elemento selezionato o per creare un nuovo elemento di anagrafica. Per

impostazioni grafiche predefinite l'attributo deve essere impostato a buttondiv.

owk:visible = string

cfr. owk:visible

owk:changeable = string

cfr. owk:changeable

owk:secret = string

cfr. owk:secret

owk:required = string

cfr. owk:required

owk:locked = string

cfr. owk:locked

owk:invalidable = string

cfr. owk:invalidable

 owk:tag1 = string

cfr. owk:tag1

 owk:tag2 = string

cfr. owk:tag2

 owk:tag3 = string

cfr. owk:tag3

nota

Nota

Valgono le stesse condizioni e metodologie espresse nella sezione relativa al controllo di tipo Anagrafica (client).

La struttura del contenuto dell'attributo owk:listfields è la concatenazione delle seguenti stringhe separate dal carattere "|":

1. source della colonna con cui deve essere compilato l'elemento id del campo XML sottostante il controllo e corrispondente al nodo XML in questione
2. source della colonna con cui deve essere compilato l'elemento name del campo XML sottostante il controllo e corrispondente al nodo XML in questione

La struttura del contenuto dell'attributo owk:newfields è la concatenazione delle seguenti stringhe separate dal carattere "|":

1. valore dell'attributo owk:datafield del controllo della scheda di anagrafica con cui deve essere compilato l'elemento name della struttura XML sottostante il controllo client
2. valore dell'attributo owk:datasource del controllo della scheda di anagrafica con cui deve essere compilato l'elemento id dell'elemento client della struttura XML sottostante il controllo
3. valore dell'attributo owk:datafield del controllo della scheda di anagrafica con cui deve essere compilato l'elemento name del nodo client della struttura XML sottostante il controllo
4. valore dell'attributo owk:datasource del controllo della scheda di anagrafica con cui deve essere compilato l'elemento name del nodo client della struttura XML sottostante il controllo

Esempio

<div owk:type="clientlist" class="div" owk:buttonclass="button"

owk:tableclass="bodytable" owk:locked="0" owk:fieldname="listanag"

owk:datafield="libero41" owk:listfields="nome|codice">

</div>


Lista di documenti (documentlist)

Il controllo permette la compilazione di una lista di documenti.

Lato client visualizza all'interno di una div una tabella che riporta su ciascuna riga un riferimento a un documento di openwork®. La tabella è popolata tramite selezione multipla da un elenco di documenti consultabile mediante apposito pulsante posto in prossimità della div. In ogni riga è presente un pulsante per la rimozione del documento dalla tabella.

La tabella può riportare, opzionalmente, le seguenti informazioni sul documento: numero, data, classificazione, oggetto, mittente/destinatario, autore. L'elenco per la selezione dei documenti può essere opportunamente filtrato.

Le proprietà di modifica e visibilità del controllo possono dipendere dal contesto organizzativo e procedurale in cui è stato aperto il documento.

Il nodo XML sottostante un controllo di tipo lista di documenti appare come segue; per ciascun documento inserito nel controllo, esiste nel nodo XML sottostante, un corrispondente elemento doc.

<listadoc sourcetype="1" status="1" sourceid="0">

<doc>

<id>10</id>

<style>1</style>

<number>0000010</number>

<date>2003-12-01</date>

<author>

<id>2</id>

<name>Amministratore del Sistema</name>

</author>

<classification> Protocollo generico in entrata </classification>

<subject>Offerta di ...</subject>

<address>Agenzia delle Entrate di Gemona del Friuli</address>

</doc>

<doc>

<id>8</id>

<style>1</style>

<number>0000008</number>

<date>2003-12-01</date>

<author> <!-- autore del documento -->

<id>2</id>

<name>Amministratore del Sistema</name>

</author>

<classification>Protocollo generico in entrata</classification>

<subject>Cessione di  </subject> <!-- oggetto -->

<address>Ambasciata di Romania</address> <!-- mitt/dest/corrisp -->

</doc>

</listadoc>

Attributo

Descrizione

owk:type = "documentlist"

owk:fieldname = string

id = string

owk:description = string

owk:datasource = string

cfr. Gli attributi datasource e datafield

owk:datafield = string

cfr.Gli attributi datasource e datafield

owk:insertenabled = 0/1

Indica che il controllo permette l'inserimento

di un nuovo documento nella lista mediante

apposito pulsante. Valore predefinito è 0.

Il valore 1 può essere impostato solo quando

l'attributo owk:sourcetype assume valori pari

a 1, 2, 3, 4, 11, 12, 13, 14.

owk:selectenabled = 0/1

Consente la selezione di un documento da un elenco mediante apposito pulsante.

Valore predefinito 1.

Il valore 0 inibisce la visualizzazione del pulsante di selezione e impedisce la selezione dall'elenco.

 owk:deleteenabled = 0/1

Consente l'eliminazione dei documenti inseriti nella lista. Valore predefinito 1.

owk:sourcetype = integer

Archivio di provenienza dei documenti che compaiono nell'elenco di selezione.

Possibili valori: 1, 2, 3, 4, 9, 10, 11, 12, 13, 14, 19, 21.

Valore predefinito 9, corrispondente all'archivio "Protocollo e documenti".

cfr. Parametri listtype, listsubtype e modelid

owk:status = string

Obsoleto, sostituito da owk:sourcesubtype.

 owk:sourcesubtype = integer

Dipende dal valore dell'attributo owk:sourcetype. Valore predefinito 0.

cfr. Parametri listtype, listsubtype e modelid

owk:sourceid = integer

Dipende dal valore degli attributi owk:sourcetype e owk:sourcesubtype. Valore predefinito è 0.

cfr. Parametri listtype, listsubtype e modelid

Nel caso in cui l'attributo owk:insertenabled = 1, l'attributo individua anche la tipologia di documento da creare.

 owk:listparameters= string

cfr. L'attributo listparameters.

owk:listfields = string

Contiene l'associazione tra gli elementi del campo XML e le colonne dell'elenco. Contiene inoltre l'associazione tra eventuali altri controlli collegati e le colonne dell'elenco (cfr. nota).

owk:newfields = string

Contiene l'associazione tra gli elementi del campo XML e i controlli della scheda di anagrafica nuova o selezionata.

Contiene inoltre l'associazione tra eventuali altri campi collegati e i campi della nuova scheda (cfr. nota).

style = string

Stile dell'elemento div in formato CSS.

Impostazione consigliata: overflow: auto.

class = string

Classe CSS dell'elemento HTML div.

Per impostazioni grafiche predefinite l'attributo deve essere impostato a div.

owk:tablestyle = string

Stile della tabella contenuta all'interno della div.

 owk:tableclass = string

Classe CSS della tabella contenuta all'interno della div. Per impostazioni grafiche predefinite, l'attributo deve essere impostato a bodytable.

 owk:headstyle = string

Stile delle intestazioni della tabella contenuta all'interno della div.

owk:headclass = string

Classe CSS delle intestazioni della tabella contenuta all'interno della div. Per impostazioni

grafiche predefinite l'attributo deve essere impostato a headtable.

owk:buttonstyle = string

Stile applicato alle picture che compaiono all'interno del controllo per selezionare documenti, rimuovere un documento, visualizzare il dettaglio.

 owk:buttonclass = string

Classe CSS applicata alle picture che compaiono accanto alla div per selezionare un documento dall'elenco, visualizzare il dettaglio di un documento selezionato o creare un nuovo documento. Per impostazioni grafiche predefinite, l'attributo deve essere impostato a buttondiv.

owk:visible = string

cfr. owk:visible

owk:changeable = string

cfr. owk:changeable

owk:secret = string

cfr. owk:secret

owk:required = string

cfr. owk:required

owk:locked = string

cfr. owk:locked

owk:invalidable = string

cfr. owk:invalidable

 owk:tag1 = string

cfr. owk:tag1

 owk:tag2 = string

cfr. owk:tag2

 owk:tag3 = string

cfr. owk:tag3

nota

Nota

Valgono le stesse condizioni e metodologie espresse nella sezione relativa al controllo di tipo Anagrafica (client).

L 'attributo owk:listfields è composto come concatenazione di nove stringhe separate da "|": tali stringhe sono le origini delle colonne nell'elenco di selezione dei documenti (attributo source dell'elemento col).

attenzione

Attenzione

Il controllo documentlist definito nei modelli di fascicolo non gestisce la customizzazione di alcuni attributi come listfields e newfields, poichè predefiniti per un modello di fascicolo.

Tenendo presente la struttura del campo prima riportata, le nove stringhe corrispondono a:

1. source della colonna contenente l'identificativo del documento (id) nel caso in cui il controllo debba essere popolato a partire da un elenco contenente un'unica tipologia di documento; origine della colonna contenente la concatenazione di id + "_" + style (per esempio "4_3") qualora occorra popolare il controllo a partire da un elenco contenente documenti provenienti da archivi diversi
2. source della colonna da associare al nodo style dell'elemento doc, stringa vuota quando sourcetype<>10
3. source della colonna da associare al nodo number dell'elemento doc
4. source della colonna da associare al nodo date dell'elemento doc
5. source della colonna da associare al nodo author/id dell'elemento doc, stringa vuota se non si vuole memorizzare questa informazione nel campo
6. source della colonna da associare al nodo author/name dell'elemento doc, stringa vuota se non si vuole memorizzare questa informazione nel campo
7. source della colonna da associare al nodo classification dell'elemento doc, stringa vuota se non si vuole memorizzare questa informazione nel campo
8. source della colonna da associare al nodo subject dell'elemento doc, stringa vuota se non si vuole memorizzare questa informazione nel campo
9. source della colonna da associare al nodo address dell'elemento doc, stringa vuota se non si vuole memorizzare questa informazione nel campo;

Il controllo costruisce la tabella all'interno della div in modo da visualizzare le colonne autore (6), classificazione (7), oggetto (8) e nome (9) solo se si è deciso di memorizzare nel campo i corrispondenti valori, altrimenti corrisponderanno alla stringa vuota. Si noti che il segnaposto (delimitato da due caratteri "|" consecutivi ovvero da doppi apici e "|") deve essere sempre presente.

L'attributo owk:newfields è la concatenazione di stringhe separate da "|": tali stringhe sono le origini delle colonne nell'elenco di selezione dei documenti (attributo source dell'elemento col).

Tenendo presente la struttura del campo sopra riportata, dette stringhe corrispondono a:

1. owk:datafield del controllo contenente il number del documento
2. owk:datasource del controllo contenente il number del documento
3. owk:datafield del controllo contenente il date del documento
4. owk:datasource del controllo contenente il date del documento
5. owk:datafield del controllo contenente la creazione del documento
6. owk:datasource del controllo contenente la creazione del documento
7. owk:datafield del controllo contenente la classificazione del documento
8. owk:datasource del controllo contenente la classificazione del documento
9. owk:datafield del controllo contenente l'oggetto del documento
10. owk:datasource del controllo contenente l'oggetto del documento
11. owk:datafield del controllo contenente l'address del documento
12. owk:datasource del controllo contenente l'address del documento

Esempio

<div owk:type="documentlist" class="div" owk:buttonclass="button"

owk:tableclass="bodytable" owk:locked="0" owk:fieldname="listadocumenti"

owk:sourcetype="3" owk:listfields="id||numerodoc|datadoc|idautore|autore|classificazione|oggetto||" owk:newfields="numerodoc||datadoc||creazione||classificazione||oggetto||" owk:datafield="libero37" owk:insertenabled="1">

</div>


Lista di elementi dell'organizzazione (organizationlist)

Il controllo permette la compilazione di una lista di elementi dell'organizzazione.

Lato client visualizza una div contenente una tabella con l'elenco degli elementi dell'organizzazione selezionati. La compilazione dell'elenco avviene tramite la selezione di uffici, ruoli, operatori, gruppi in un'apposita finestra, consultabile mediante il pulsante visualizzato in prossimità della div, i cui elementi visualizzati sono filtrati secondo quanto specificato specificato tramite il parametro mode. In tal modo potranno essere visualizzate tutte le tipologie di elementi dell'organizzazione, solo gli uffici o solo i gruppi. Nel campo associato al controllo viene inoltre memorizzata la formula ottenuta dalla finestra di selezione. Il campo organizatiolist può contenere:

· un numero maggiore o uguale a zero di elementi di tipo user, role, office o group;
· a seconda delle impostazioni del parametro mode qualsiasi combinazione di elementi: user, role, office o group. Ad esempio se il parametro mode è avvalorato a 3 nella finestra di esplorazione dell'organigrammma saranno visualizzati solo gli uffici.

Attributo

Descrizione

owk:type = "organizationlist"

owk:fieldname = string

id = string

owk:description = string

owk:datasource = string

cfr. Gli attributi datasource e datafield

owk:datafield = string

cfr.Gli attributi datasource e datafield

owk:default = string

Obsoleto, formula di default associata al campo;sostituito o dal testo della div.

 owk:rootfield = string

Nome di un eventuale campo di tipo office

"di partenza" da cui valorizzare l'attributo owk:rootid.

 owk:rootid = string

Identificativo dell'Area Organizzativa a partire

dalla quale l'organigramma verrà visualizzato

nel formato “N”+ 2 spazi + idarea (per esempio “N 3”). Per impostazione predefinita, appare tutto l'organigramma.

Tale identificativo può eventualmente discendere

da un controllo di tipo office, utilizzando l'attributo rootfield.

owk:showroot = 0/1

Indica se deve essere visualizzata l'Area Organizzativa di partenza definita in owk:rootid. Valore predefinito è 1.

owk:highpass = integer

Indica il livello a partire dal quale è visualizzato l'organigramma.

owk:lowpass = integer

Indica il livello oltre il quale l'organigramma non è visualizzato.

 style = string

Stile della div in formato CSS.

Si consiglia di lasciare l'impostazione predefinita: overflow: auto

 class = string

Classe CSS dell'elemento HTML div.

Per impostazioni grafiche predefinite, l'attributo va impostato a div.

owk:tablestyle = string

Stile della tabella contenuta all'interno della div.

owk:tableclass = string

Classe CSS della tabella contenuta all'interno della div. Per impostazioni grafiche predefinite, l'attributo deve essere impostato a bodytable.

owk:buttonstyle = string

Stile applicato alla picture che compare in prossimità della div quando il campo è in scrittura per aprire la finestra di selezione.

owk:buttonclass = string

Classe CSS applicata alla picture che compare in prossimità della div quando il campo è in scrittura per aprire la finestra di selezione. Per impostazioni grafiche predefinite l'attributo deve essere impostato a button.

owk:visible = string

cfr. owk:visible

owk:changeable = string

cfr. owk:changeable

owk:secret = string

cfr. owk:secret

owk:required = string

cfr. owk:required

owk:locked = string

cfr. owk:locked

owk:invalidable = string

cfr. owk:invalidable

 owk:tag1 = string

cfr. owk:tag1

 owk:tag2 = string

cfr. owk:tag2

 owk:tag3 = string

cfr. owk:tag3

 owk:mode = integer

Indica la tipologia di elementi dell’organizzazione che si possono inserire:

· 0 : tutti
· 3 : solo uffici (la pagina dell’organigramma mostrerà solo uffici)
· 16 : solo gruppi

Il nodo XML sottostante un controllo di tipo lista di elementi dell'organizzazione appare come segue:

<list mode="1">

<user>

<id>0</id>

<name/>

<role/>

</user>

...

<user>

<id>0</id>

<name/>

<role/>

</user>

<role>

<id>0</id>

<fullname/>

</role>

...

<role>

<id>0</id>

<fullname/>

</role>

<office>

<id>0</id>

<fullname/>

</office>

...

<office>

<id>0</id>

<fullname/>

</office>

<group>

<id>0</id>

<name/>

</group>

...

<group>

<id>0</id>

<name/>

</group>

</list>


Lista di operatori (userlist)

Il controllo permette la compilazione di una lista di operatori.

Lato client visualizza una div contenente una tabella con l'elenco degli operatori selezionati, indicandone nome e ruolo. La compilazione dell'elenco avviene tramite la selezione di uffici, ruoli, operatori, gruppi in un'apposita finestra consultabile mediante il pulsante visualizzato in prossimità della div. Nel campo associato al controllo viene inoltre memorizzata la formula ottenuta dalla finestra di selezione.

Attributo | Descrizione
owk:type = "userlist" |
owk:fieldname = string |
id = string |
owk:description = string |
owk:datasource = string | cfr. Gli attributi datasource e datafield
owk:datafield = string | cfr.Gli attributi datasource e datafield
owk:default = string | Obsoleto, formula di default associata al campo;sostituito dal testo della div.
owk:rootfield = string | Nome di un eventuale campo di tipo office "di partenza" da cui valorizzare l'attributo owk:rootid.
owk:rootid = string | Identificativo dell'Area Organizzativa a partire dalla quale l'organigramma verrà visualizzato nel formato “N”+ 2 spazi + idarea (per esempio “N 3”). Per impostazione predefinita, appare tutto l'organigramma. Tale identificativo può eventualmente discendere da un controllo di tipo office, utilizzando l'attributo rootfield.
owk:showroot = 0/1 | Indica se deve essere visualizzata l'Area Organizzativa di partenza definita in owk:rootid. Valore predefinito è 1.
owk:highpass = integer | Indica il livello a partire dal quale è visualizzato l'organigramma.
owk:lowpass = integer | Indica il livello oltre il quale l'organigramma non è visualizzato.
style = string | Stile della div in formato CSS. Si consiglia di lasciare l'impostazione predefinita: overflow: auto
class = string | Classe CSS dell'elemento HTML div. Per impostazioni grafiche predefinite, l'attributo va impostato a div.
owk:tablestyle = string | Stile della tabella contenuta all'interno della div.
owk:tableclass = string | Classe CSS della tabella contenuta all'interno della div. Per impostazioni grafiche predefinite, l'attributo deve essere impostato a bodytable.
owk:buttonstyle = string | Stile applicato alla picture che compare in prossimità della div quando il campo è in scrittura per aprire la finestra di selezione.
owk:buttonclass = string | Classe CSS applicata alla picture che compare in prossimità della div quando il campo è in scrittura per aprire la finestra di selezione. Per impostazioni grafiche predefinite l'attributo deve essere impostato a button.
owk:visible = string | cfr. owk:visible
owk:changeable = string | cfr. owk:changeable
owk:secret = string | cfr. owk:secret
owk:required = string | cfr. owk:required
owk:locked = string | cfr. owk:locked
owk:invalidable = string | cfr. owk:invalidable
owk:tag1 = string | cfr. owk:tag1
owk:tag2 = string | cfr. owk:tag2
owk:tag3 = string | cfr. owk:tag3

Esempio

<div owk:type="userlist" class="div" owk:locked="0" owk:tableclass="bodytable"

owk:buttonclass="button" owk:fieldname="listaop" owk:datafield="libero43">

</div>


Lista fascicoli (folderlist)

Tramite l'utilizzo di questo controllo è possibile visualizzare l'elenco dei fascicoli a cui eventualmente, è associato il documento. Se il documento non è associato ad alcun processo, non appare alcuna informazione correlata al controllo.

Attributo | Descrizione
owk:type = "folderlist" |
owk:fieldname = string | Valore predefinito pratiche
id = string |
owk:description = string |
owk:lang_default = string | Identificativo del linguaggio con cui è espressa la stringa tra i tag label. Se non indicato, viene assunto come linguaggio predefinito it.
owk:lang_eng = string | Traduzione della stringa nel linguaggio con identificativo eng.
owk:bullet = 0/1 | Se uguale a 1, alla label viene anteposta un elemento HTML <li/>. Valore predefinito 0.
owk:br = 0/1 | Se uguale a 1, dopo l'etichetta viene inserito un elemento <br/>. Valore predefinito 0.
style = string | Stile dell'elemento label in formato CSS.
class = string | Classe CSS della label. Per impostazioni grafiche predefinite deve essere impostato a label.
owk:visible = string | cfr. owk:visible
owk:secret = string | cfr. owk:secret
owk:tag1 = string | cfr. owk:tag1
owk:tag2 = string | cfr. owk:tag2
owk:tag3 = string | cfr. owk:tag3

nota

Nota

Il controllo non possiede attributi in grado di consentire la connessione ad una fonte dati, pertanto utilizza esclusivamente dati gestiti internamente alla piattaforma.

Nello schema XML, il tipo di dato predefinito per il controllo è owk:folderlist.

Esempio

Il seguente elemento

   <label owk:type="folderlist" owk:lang_default="it" id="processlist">

Il documento è associato alle seguenti pratiche:

   </label>

permette la visualizzazione all'interno del documento del testo: "Il documento è associato alle seguenti pratiche: 20345/2006, 12356/2007".


Lista processi (processlist)

Tramite l'utilizzo di questo controllo è possibile visualizzare l'elenco dei processi cui eventualmente è associato il documento.

Se il documento non è associato a nessun processo, il controllo non è visualizzato.

Attributo | Descrizione
owk:type = "processlist" |
owk:fieldname = string | Valore predefinito processi.
id = string |
owk:description = string |
owk:lang_default = string | Identificativo del linguaggio con cui è espressa la stringa tra i tag label. Se non indicato, viene assunto come linguaggio predefinito it.
owk:lang_eng = string | Traduzione della stringa nel linguaggio con identificativo eng.
owk:bullet = 0/1 | Se uguale a 1, alla label viene anteposta un elemento HTML <li/>. Valore predefinito 0.
owk:br = 0/1 | Se uguale a 1, dopo l'etichetta viene inserito un elemento <br/>. Valore predefinito 0.
style = string | Stile dell'elemento label in formato CSS.
class = string | Classe CSS della label. Per impostazioni grafiche predefinite deve essere impostato a label.
owk:visible = string | cfr. owk:visible
owk:secret = string | cfr. owk:secret
owk:tag1 = string | cfr. owk:tag1
owk:tag2 = string | cfr. owk:tag2
owk:tag3 = string | cfr. owk:tag3

nota

Nota

L 'elemento XML su cui poggia il controllo è sempre processi.

nota

Nota

Il controllo non possiede attributi in grado di consentire la connessione ad una fonte dati, pertanto utilizza esclusivamente dati gestiti internamente alla piattaforma.

Esempio

Il seguente elemento

  <label owk:type="processlist" owk:lang_default="it" id="processlist">

Il documento è associato ai seguenti processi

  </label>

permette la visualizzazione all'interno del documento del testo: "Il documento è associato ai seguenti processi: 000132, 000456".


Memo (memobox)

Permette la visualizzazione di un'area di testo.

Le proprietà di modifica e visibilità dell'area dipendono dal contesto organizzativo e procedurale in cui è stato aperto il documento; il suo contenuto può essere composto in base al contenuto di altri campi.

Attributo

Descrizione

owk:type = "memobox"

owk:fieldname = string

id = string

owk:description = string

owk:datatype = string

Può assumere uno dei seguenti valoti: text, memo, xml. Valore predefinito memo.

owk:datasource = string

cfr. Gli attributi datasource e datafield

owk:datafield = string

cfr.Gli attributi datasource e datafield

owk:default = string

Obsoleto, è una stringa contenente valore predefinito del campo sostituita dal contenuto della textarea.

owk:formula = string

Rappresenta una espressione XPath che serve a calcolare il valore del campo(cfr. owk: formula)

owk:unique = 0/1/2

cfr. owk:unique

rows = numero di righe

Come da specifiche HTML.

 owk:minlength

Numero minimo di caratteri che possono essere inseriti nella memobox.

 maxlength

Numero massimo di caratteri che possono essere inseriti nella memobox.

owk:uppercase = string

Permette di impostare il formato maiuscolo/minuscolo del testo. Può assumere i seguenti valori:

· 0 lascia il testo invariato
· 1 converte in minuscolo
· 2 converte in maiuscolo

Valore predefinito 0.

class = string

Classe CSS dell'elemento HTML textarea. Per impostazioni grafiche predefinite, l'attributo deve essere impostato a textarea.

style = string

Stile dell'elemento HTML textarea in formato CSS.

owk:visible = string

cfr. owk:visible

owk:changeable = string

cfr. owk:changeable

owk:secret = string

cfr. owk:secret

owk:required = string

cfr. owk:required

owk:locked = string

cfr. owk:locked

owk:invalidable = string

cfr. owk:invalidable

 owk:tag1 = string

cfr. owk:tag1

 owk:tag2 = string

cfr. owk:tag2

 owk:tag3 = string

cfr. owk:tag3

Esempio

<textarea owk:type="memobox" style="" owk:locked="false" id=""

owk:fieldname="oggetto" owk:visible="true" owk:changeable="true"

owk:secret="false" owk:required="true" owk:datasource=""

owk:datafield="libero108" owk:default="" owk:formula=""

rows="5">Testo di default<textarea/>


Messaggio (message)

Questo controllo permette la visualizzazione del numero di messaggio e-mail con cui eventualmente è stato spedito un documento di protocollo. Il controllo è visualizzato solo se nell'ambito di un processo è stata impostata la modalità spedizione con posta elettronica di un'attività di notifica e permette, eventualmente, di aprire il messaggio.

Attributo | Descrizione
type = "text" |
owk:type = "message" |
owk:fieldname = string | Valore predefinito messaggio.
id = string |
owk:description = string |
style = string | Stile dell'elemento HTML input in formato CSS.
class = string | Classe CSS dell'elemento HTML input. Perimpostazioni grafiche predefinite deve essere impostato a textbox.
owk:buttonstyle = string | Stile della picture che compare in prossimità dell'elemento HTML input nel caso in cui sia possibile visualizzare il messaggio.
owk:buttonclass = string | Classe CSS della picture che compare accanto la input nel caso in cui sia possibile visualizzare il messaggio. Per impostazioni grafiche predefinite deve essere impostato a button.
owk:visible = string | cfr. owk:visible
owk:secret = string | cfr. owk:secret
owk:tag1 = string | cfr. owk:tag1
owk:tag2 = string | cfr. owk:tag2
owk:tag3 = string | cfr. owk:tag3

nota

Nota

Il controllo non possiede attributi in grado di consentire la connessione ad una fonte dati, pertanto utilizza esclusivamente dati gestiti internamente alla piattaforma.


Numero documento (docnumber)

Il controllo espone una inputbox in sola lettura con il numero di documento o una stringa.

Attributo | Descrizione
type = "text" |
owk:type = "docnumber" |
owk:fieldname = string | Valore predefinito numerodoc.
id = string |
owk:description = string |
owk:mode = normal/textual | Obsoleto, sostituito da owk:layout
owk:layout = normal/textual |
style = string | Stile dell'elemento HTML input in formato CSS.
class = string | Classe CSS dell'elemento HTML input. Per impostazioni grafiche predefinite deve essere impostato a textbox.
owk:visible = string | cfr. owk:visible
owk:secret = string | cfr. owk:secret
owk:tag1 = string | cfr. owk:tag1
owk:tag2 = string | cfr. owk:tag2
owk:tag3 = string | cfr. owk:tag3

nota

Nota

Il controllo non possiede attributi in grado di consentire la connessione ad una fonte dati, pertanto utilizza esclusivamente dati gestiti internamente alla piattaforma.


Operatore (user)

Visualizza una casella di testo da compilare con il nome di un operatore selezionato dall'organigramma, visualizzando un apposito pulsante.

Al controllo possono associarsi controlli di tipo office e role che, in tal modo, verranno compilati automaticamente.

Attributo | Descrizione
type = "text" |
owk:type = "user" |
owk:fieldname = string |
id = string |
owk:description = string |
owk:datasource = string | cfr. Gli attributi datasource e datafield
owk:datafield = string | cfr.Gli attributi datasource e datafield
owk:default = string | Obsoleto, sostituito dall'attributo value.
value = string | Stringa contenente il valore predefinito del controllo, nella forma: “U” + 2 spazi + identificativo operatore.
owk:rootfield = string | Nome di un eventuale campo di tipo office "di partenza" da cui valorizzare l'attributo owk:rootid.
owk:rootid = string | Identificativo dell'Area Organizzativa a partire dalla quale l'organigramma verrà visualizzato nel formato “N”+ 2 spazi + idarea (per esempio “N 3”). Per impostazione predefinita, appare tutto l'organigramma. Tale identificativo può eventualmente discendere da un controllo di tipo office, utilizzando l'attributo rootfield.
owk:showroot = 0/1 | Indica se deve essere visualizzata l'Area Organizzativa di partenza definita in owk:rootid. Valore predefinito è 1.
owk:highpass = integer | Indica il livello a partire dal quale è visualizzato l'organigramma.
owk:lowpass = integer | Indica il livello oltre il quale l'organigramma non è visualizzato.
owk:rolefieldname = string | Attributo owk:fieldname di un controllo di tipo role compilato automaticamente a seguito della compilazione di questo campo.
owk:officefieldname = string | Attributo owk:fieldname di un controllo di tipooffice compilato automaticamente a seguito della compilazione di questo campo.
style = string | Stile dell'elemento HTML input in formato CSS.
class = string | Classe CSS dell'elemento HTML input. Per impostazioni grafiche predefinite deve essere impostato a textbox.
owk:buttonstyle = string | Stile dell'immagine che compare in prossimità della textbox se nello stato lettura/scrittura.
owk:buttonclass = string | Classe CSS della immagine che compare accanto la combobox se nello stato lettura/scrittura. Per impostazioni grafiche predefinite deve essere impostato a button.
owk:visible = string | cfr. owk:visible
owk:changeable = string | cfr. owk:changeable
owk:secret = string | cfr. owk:secret
owk:required = string | cfr. owk:required
owk:locked = string | cfr. owk:locked
owk:invalidable = string | cfr. owk:invalidable
owk:tag1 = string | cfr. owk:tag1
owk:tag2 = string | cfr. owk:tag2
owk:tag3 = string | cfr. owk:tag3

Esempio

<input type="text" owk:type="user" class="textbox" owk:locked="0"

owk:buttonclass="button" owk:fieldname="operatore"

owk:datafield="libero1"></input>


Opzione (radio)

Visualizza una inputbox di tipo radio e, quando selezionata, memorizza nel campo XML il valore dell'attributo value. L'attributo name permette la realizzazione di gruppi di controlli opzione a scelta esclusiva (come da specifiche HTML).

Attributo | Descrizione
type = "radio" |
owk:type = "optionbutton" |
owk:fieldname = string | Attributo non obbligatorio, poiché può essere ereditato da un altro optionbutton dotato dello stesso attributo name.
id = string | Attributo id del tag HTML input. Il valore coincide con il valore dell'attributo owk:fieldname. Tutti i controlli opzione con lo stesso attributo name devono avere id diverso, per cui, se esiste già un controllo con lo stesso id, viene impostato di default a id + “_”.
owk:description = string |
owk:datatype = string | Può assumere uno dei seguenti possibili valori:text, integer, float, date, datetime. Valore predefinito integer.
owk:datasource = string | cfr. Gli attributi datasource e datafield
owk:datafield = string | cfr.Gli attributi datasource e datafield
owk:optionvalue = string | Obsoleto , sostituito da value.
value = string | Valore assunto dall'elemento XML sottostante il controllo quando esso è selezionato.
owk:default = 0/1 | Obsoleto, sostituito da checked.
checked = string | Se questo attributo è presente, il campo XML sottostante il controllo sarà valorizzato di default con il contenuto dell'attributo owk:optionvalue.
name = string | Identifica, secondo specifiche HTML, il gruppo di appartenenza dell'optionbutton.
owk:spanrows= 0/1 | Utilizzato quando il controllo è inserito all'interno di un controllo di tipo tabella. Se assume valore 1 il gruppo comprenderà tutte le righe.Valore di default 0.
owk:unique = 0/1/2 | Utilizzato se owk:datatype è text, integer, float, date, datetime (cfr. owk:unique).
style = string | Stile dell'elemento HTML input in formato CSS
class = string | Classe CSS dell'elemento HTML input. Perimpostazioni grafiche predefinite deve essere impostato a optionbutton.
owk:visible = string | cfr. owk:visible
owk:changeable = string | cfr. owk:changeable
owk:secret = string | cfr. owk:secret
owk:required = string | cfr. owk:required
owk:locked = string | cfr. owk:locked
owk:invalidable = string | cfr. owk:invalidable
owk:tag1 = string | cfr. owk:tag1
owk:tag2 = string | cfr. owk:tag2
owk:tag3 = string | cfr. owk:tag3

nota

Nota

Controlli di tipo opzione appartenenti allo stesso gruppo (ossia dotati dello stesso attributo name uguale) devono avere attributo id diverso, ma devono avere identico owk:fieldname, owk:locked, owk:required, owk:secret, owk:visible, owk:changeable, owk:datasource, owk:datafield, owk:description.

L'id se non indicato viene assegnato automaticamente ai controlli del gruppo in base al fieldname, se indicato per almeno un controllo del gruppo deve essere indicato per tutti. Per gli altri attributi è sufficiente impostarli solo per uno dei controlli del gruppo.

Inoltre, l'attributo checked va impostato solo per uno di essi e, se non è impostato per alcun controllo del gruppo, verrà settato come predefinito il primo di essi.

Esempio

Gruppo con due controlli opzione:

<input type="radio" owk:type="optionbutton" name="opzione"

class="optionbutton" owk:locked="0" owk:fieldname="opzione"

owk:datafield="libero73" id="radiouno" value="valore uno"

owk:datatype="text"> </input>

<input type="radio" checked="1" owk:type="optionbutton" name="opzione"

class="optionbutton" owk:locked="0" id="radiodue" value="valore due">

</input>


Pulsante di selezione (listbutton)

Il controllo visualizza un pulsante che permette l'apertura di un elenco; è possibile associare controlli della form alle colonne dell'elenco in modo che essi restino automaticamente compilati quando si conferma una selezione nell'elenco.

Attributo | Descrizione
owk:type = "listbutton" |
owk:fieldname = string | Non rappresenta il nome del campo associato al controllo, ma il nome dell'elemento all'interno del context.
owk:sourcetype = integer | cfr. Parametri listtype, listsubtype e modelid
owk:sourcesubtype = integer | cfr. Parametri listtype, listsubtype e modelid
owk:sourceid = integer | cfr. Parametri listtype, listsubtype e modelid
owk:listparameters = string | cfr. L'attributo listparameters.
owk:listfields = string | Associazione tra le colonne dell'elenco e i campi della form.
owk:visible = string | cfr. owk:visible

nota

Nota

Il controllo permette l'utilizzo di qualsiasi attributo standard HTML del tag img. Se non specificato l'attributo src, verranno utilizzate le icone normalmente utilizzate in prossimità dei controlli client e document.

L'attributo owk:listfields è la concatenazione delle seguenti stringhe separate da "|":

1. owk:fieldname del primo campo della form da valorizzare con il contenuto di una cella della riga selezionata nell'elenco
2. source della colonna dell'elenco a cui appartiene la cella con cui si deve valorizzare il campo
3. owk:fieldname del secondo campo della form da valorizzare con il contenuto di una cella della riga selezionata nell'elenco
4. source della colonna dell'elenco a cui appartiene la cella con cui si deve valorizzare il secondo campo

Esempio

<img owk:type="listbutton" owk:fieldname="listbutton" owk:visible="1"

owk:listfields="idp|idp|codice|nomep|nomep|nome" owk:sourcetype="6"

owk:sourcesubtype="0" owk:sourceid="0" class="button" border="0">

</img>


Ruolo (role)

Visualizza una casella di testo da compilarsi con il nome di un ruolo, selezionandolo dall'organigramma.

A questo controllo può essere associato un controllo office la cui compilazione sia automatica in funzione del ruolo selezionato.

Attributo

Descrizione

type = "text"

owk:type = "role"

owk:fieldname = string

id = string

owk:description = string

owk:datasource = string

cfr. Gli attributi datasource e datafield

owk:datafield = string

cfr.Gli attributi datasource e datafield

owk:default = string

Obsoleto , sostituito da value.

 value = string

Stringa contenente il valore predefinito del campo nella forma: “R” + 2 spazi + identificativo del ruolo.

owk:officefieldname = string

Attributo owk:fieldname di un controllo di tipooffice compilato automaticamente a seguito della compilazione di questo campo.

 owk:rootfield = string

Nome di un eventuale campo di tipo office

"di partenza" da cui valorizzare l'attributo owk:rootid.

 owk:rootid = string

Identificativo dell'Area Organizzativa a partire

dalla quale l'organigramma verrà visualizzato

nel formato “N”+ 2 spazi + idarea (per esempio “N 3”). Per impostazione predefinita, appare tutto l'organigramma.

Tale identificativo può eventualmente discendere

da un controllo di tipo office, utilizzando l'attributo rootfield.

owk:showroot = 0/1

Indica se deve essere visualizzata l'Area Organizzativa di partenza definita in owk:rootid. Valore predefinito è 1.

owk:highpass = integer

Indica il livello a partire dal quale è visualizzato l'organigramma.

owk:lowpass = integer

Indica il livello oltre il quale l'organigramma non è visualizzato.

 owk:showusers = 0/1

Indica se devono essere visualizzati gli operatori. Valori ammessi:

· 1 gli operatori sono visualizzati
· 0 gli operatori non sono visualizzati.

 style = string

Stile dell'elemento HTML input in formato CSS.

 class = string

Classe CSS dell'elemento HTML input. Perimpostazioni grafiche predefinite deve essere impostato a textbox.

 owk:buttonstyle = string

Stile applicato alla picture che compare in prossimità della div quando il campo è in scrittura per aprire la finestra di selezione.

owk:buttonclass = string

Classe CSS applicata alla picture che compare in prossimità della div quando il campo è in scrittura per aprire la finestra di selezione. Per impostazioni grafiche predefinite l'attributo deve essere impostato a button.

owk:visible = string

cfr. owk:visible

owk:changeable = string

cfr. owk:changeable

owk:secret = string

cfr. owk:secret

owk:required = string

cfr. owk:required

owk:locked = string

cfr. owk:locked

owk:invalidable = string

cfr. owk:invalidable

 owk:tag1 = string

cfr. owk:tag1

 owk:tag2 = string

cfr. owk:tag2

 owk:tag3 = string

cfr. owk:tag3

Esempio

<input type="text" owk:type="role" class="textbox" owk:locked="0"

owk:buttonclass="button" owk:fieldname="ruolo" owk:datafield="libero44">

</input>


Tabella (table)

Tabella di dettaglio contenente controlli di openwork® in cui è possibile inserire, spostare ed eliminare righe.

In fase di disegno è necessario definire un'unica riga, le altre righe verranno create a runtime. Se in fase di disegno vengono create più righe il form processor terrà conto solo della prima, mentre le successive saranno ignorate.

Attributo | Descrizione
owk:type = "table" |
owk:fieldname = string |
id = string |
owk:description = string |
owk:datasource = string | cfr. Gli attributi datasource e datafield
owk:datafield = string | cfr.Gli attributi datasource e datafield
owk:insertenabled = 0/1 | 0 inibisce la visualizzazione del pulsante di inserimento nuova riga. Valore predefinito 1.
owk:deleteenabled = 0/1 | 0 inibisce la visualizzazione del pulsante di cancellazione di una riga. Valore predefinito 1.
owk:moveenabled = 0/1 | 0 inibisce la visualizzazione del pulsante di spostamento di righe. Valore predefinito 1.
owk:buttonstyle = string | Stile applicato alle picture che compaiono in prossimità della riga.
owk:buttonclass = string | Classe CSS applicata alla picture che compare in prossimità della riga. Per impostazioni grafiche predefinite deve essere impostato a button.
owk:selclass = string | Stile applicato alla riga quando viene selezionata. L'attributo può essere posizionato sia sulla riga che sulla tabella come class. Valore predefinito è selrow.
owk:selstyle = string | Classe CSS applicata alla riga quando viene selezionata .L'attributo può essere posizionato sia sulla riga che sulla tabella come class.
owk:toolbarstyle = string | Stile applicato alla riga contenente la barra degli strumenti, in formato CSS.
owk:toolbarclass = string | Classe CSS della riga contenente la barra degli strumenti. Per impostazioni grafiche predefinite, deve essere impostato a atttoolbar.
owk:visible = string | cfr. owk:visible
owk:changeable = string | cfr. owk:changeable
owk:secret = string | cfr. owk:secret
owk:locked = string | cfr. owk:locked
owk:tag1 = string | cfr. owk:tag1
owk:tag2 = string | cfr. owk:tag2
owk:tag3 = string | cfr. owk:tag3

nota

Nota

È ammesso, oltre alla predetta definizione, l'utilizzo di qualsiasi altro attributo standard HTML della table, e, all'interno del tag <table>, possono utilizzarsi tutti gli elementi consentiti dall'HTML compresi <thead> e <tbody>.

All'interno dei tag <TD> della tabella possono essere inseriti i seguenti controlli: casella di testo, casella di controllo, opzione, lista, memo, data, data e ora, città, operatore, lista di operatori, ruolo, ufficio, anagrafica, lista di anagrafica, documento, lista di documenti, annotazioni, pulsante di selezione.

Se una tabella non è modificabile, nessun controllo all'interno della tabella sarà modificabile.

I dati contenuti all'interno della tabella vengono memorizzati in una struttura XML.

Esempio

<dettaglio>

<table>

<tr>

<td sourcetype="21" status="0" sourceid="0"><!-- Colonna 1 -->

<id>147</id>

<style>3</style>

<number>0000147</number>

<date>2004-07-29</date>

</td>

<td>

Descrizione

</td><!-- Colonna 2 -->

</tr>

<tr>

<td sourcetype="21" status="0" sourceid="0">

<id>148</id>

<style>3</style>

<number>0000148</number>

<date>2004-07-30</date>

</td>

<td>Altra descrizione</td>

</tr>

</table>

</dettaglio>

Nell'esempio, il controllo ha owk:fieldname = "dettaglio" e la tabella è costituita da due colonne con all'interno un campo di tipo documento e un campo di tipo casella di testo.

I controlli inseriti in una tabella hanno un comportamento simile a quello dei controlli inseriti nel corpo principale del modello di form, con le seguenti eccezioni:

· l'attributo owk:fieldname non è obbligatorio. Se non specificato viene impostato a fieldname_tabella_dove C è il numero di colonna in cui è memorizzato il contenuto del controllo nel nodo XML
· se l'attributo id non è impostato, il form processor assegna automaticamente il valore id_tabella_C. L'identificativo del controllo all'interno di una riga, quando il documento viene istanziato, diventaid_controllo_R dove R è il numero di riga, poiché per ciascuna riga si crea un controllo univocamente identificabile
· l'attributo owk:datasource deve avere sempre il valore table:fieldname_tabella impostato automaticamente dal form processor
· l'attributo owk:datafield deve essere sempre nella forma "col_" + C dove C è il numero di colonna in cui deve essere memorizzato il contenuto del controllo nella tabella XML. Non è detto che la colonna in cui sono memorizzati i dati coincida con la colonna all'interno dell'HTML, infatti, se l'attributo non è impostato, si assegna automaticamente la prima colonna disponibile. L'attributo owk:datafield non va mai modificato per evitare di perdere l'associazione tra la colonna e i dati sottostanti
· gli attributi owk:required, owk:invalidable non sono gestiti
· l'attributo owk:secret viene ereditato dalla tabella.

È possibile impostare i criteri di accesso a una intera riga di una tabella o a una singola cella tramite il controllo contesto.


Ufficio (office)

Visualizza una inputbox compilata con il nome di un ufficio, selezionato tramite un apposito pulsante dall'organigramma.

Attributo

Descrizione

type = "text"

owk:type = "office"

owk:fieldname = string

id = string

owk:description = string

owk:datasource = string

cfr. Gli attributi datasource e datafield

owk:datafield = string

cfr.Gli attributi datasource e datafield

owk:default = string

Obsoleto , sostituito value.

value = string

Stringa contenente il valore predefinito delcampo, nella forma “N” + 2 spazi + identificativo dell'ufficio.

 owk:rootfield = string

Attributo owk:fieldname di un eventuale controllo di tipo office da cui valorizzare l'attributo owk:rootid di questo controllo.

 owk:rootid = string

Identificativo dell'Area Organizzativa a partire dalla quale è visualizzato l'organigramma, nel formato “N”+ 2 spazi + idarea (es. "N 3"). Per impostazione predefinita è visualizzato

tutto l'organigramma.

 owk:showroot = 0/1

Indica se deve essere visualizzata l'Area Organizzativa di partenza definita in owk:rootid

Valore predefinito 1.

 owk:highpass = integer

Indica il livello a partire dal quale è visualizzato

l'organigramma.

 owk:lowpass = integer

Indica il livello oltre il quale l'organigramma

non è visualizzato.

owk:showroles = 0/1

Indica se devono essere visualizzati i ruoli. Valori ammessi:

· 1 i ruoli sono visualizzati
· 0 i ruoli non sono visualizzati.

owk:showusers = 0/1

Indica se devono essere visualizzati gli operatori. Valori ammessi:

· 1 gli operatori sono visualizzati
· 0 gli operatori non sono visualizzati

 style = string

Stile dell'elemento HTML input in formato CSS.

class = string

Classe CSS dell'elemento HTML input. Perimpostazioni grafiche predefinite deve essere impostato a textbox.

owk:buttonstyle = string

Stile applicato alla picture che appare in prossimità della input per selezionare l'ufficio dall'organigramma quando il campo è in modalità scrittura.

owk:buttonclass = string

Classe CSS applicata alla picture che compare accanto alla input quando il campo appare in modalità scrittura per selezionare l'ufficio dall'organigramma. Per impostazioni grafiche predefinite deve essere impostato a button.

owk:visible = string

cfr. owk:visible

owk:changeable = string

cfr. owk:changeable

owk:secret = string

cfr. owk:secret

owk:required = string

cfr. owk:required

owk:locked = string

cfr. owk:locked

 owk:tag1 = string

cfr. owk:tag1

 owk:tag2 = string

cfr. owk:tag2

 owk:tag3 = string

cfr. owk:tag3

Esempio

<input type="text" owk:type="office" class="textbox" owk:locked="0"

owk:buttonclass="button" owk:fieldname="cufficio" owk:datafield="libero45">

</input>


Attributi comuni

Proprietà e le caratteristiche comuni ai controlli di openwork®

· owk:fieldname
· id
· owk:description
· owk:datasource
· owk:datafield
· owk:unique
· owk:visibile
· owk:changeable
· owk:invalidable
· owk:secret
· owk:required
· owk:locked
· owk:formula
· owk:mode
· owk:mask
· owk:tag1
· owk:tag2
· owk:tag3


owk:fieldname

Attributo

Descrizione

owk:fieldname

Nome del campo a cui viene associato l'elemento secondo standard HTML. Il nome del campo deve sempre essere indicato in minuscolo; in alternativa il Form Editor trasformerà in minuscolo eventuali caratteri in maiuscolo avvertendo opportunamente l'utente.

Controlli aventi lo stesso owk:fieldname devono avere i seguenti attributi con lo stesso valore:

owk:datasource - owk:datafield - owk:description - owk:visibile - owk:locked - owk:required - owk:secret - owk:changeable - owk:invalidable - owk:unique


id

Attributo

Descrizione

id

Identificativo dell'elemento secondo standard HTML; se non è presente viene posto uguale a:

· owk:fieldname + "_l" per le etichette (label)
· owk:fieldname per tutti gli altri controlli

L'Attributo è obbligatorio per il controllo di tipo etichette se non è specificato il nome del campo - owk:fieldname; diversamente il formprocessor genera un errore. Il valore dell'attributo id deve sempre essere indicato in minuscolo; in alternativa il Form Editor trasformerà in minuscolo eventuali caratteri in maiuscolo avvertendo opportunamente l'utente.


owk:description

Attributo

Descrizione

owk:description

Stringa con la quale è possibile leggere o impostare il contenuto di un campo attraverso la funzione GetFieldValue delle classi COM Document, Folder e Client; utilizzato per compatibilità con gli script della vecchia versione.

Se l'attributo non è presente, verrà impostato dal formprocessor uguale al valore di owk:fieldname. Nei controlli di tipo intrinseco questo attributo viene sempre impostato ai seguenti valori:

· per folderlist a pratiche
· per classification a classificazione
· per message a messaggio
· per docnumber a numerodoc
· per processlist a processi
· per attachments a allegati


owk:datasource - owk:datafield

Attributo

Descrizione

owk:datasource

Nome dell'origine dati in cui verranno salvati o da cui verranno letti i dati gestiti dal controllo. Valore predefinito è una stringa vuota, a indicare che normalmente l'origine dei dati nei controlli è il database di openwork®. L'attributo può assumere in particolare anche i seguenti valori:

· "table:" + owk:fieldname di una tabella a indicare che l'origine dati è il campo associato a un controllo di tipo tabella;
· "container:" + owk:fieldname di un container a indicare che l'origine dati è il campo identificato da un controllo di tipo contenitore.

owk:datafield

Nome del campo nell'origine dati in cui verranno salvati o da cui verranno letti i dati gestiti dal controllo.

Il valore di default di owk:datafield è quello dell'attributo owk:fieldname tranne che per i controlli contenitore, di firme, messaggio, allegati, lista processi, lista pratiche, classificazione, numero documento. E' buona norma impostare sempre l'attributo owk:fieldname con valore diverso da stringa vuota in maniera tale che owk:datafield sia sempre correttamente avvalorato.

Gli attributi datatype, datasource, datafield, description costituiscono poi il documento indexing.


owk:unique

Attributo

Descrizione

owk:unique

Specifica se il contenuto del campo XML di un controllo deve essere univoco.

Assume i seguenti valori:

· 0 non univoco
· 1 univoco all'interno dello stesso archivio documentale (ad esempio univoco per tutti i documenti interni)
· 2 univoco all'interno della stessa voce del piano di classificazione (ad esempio univoco per tutti i documenti interni di tipo Richiesta d'Acquisto)

Valore predefinito 0.


owk:visibile - owk:changeable - owk:invalidable - owk:secret, owk:required - owk:locked

Tramite questi attributi è possibile impostare i criteri di accesso ad un controllo e ai dati XML su cui si basa; ciò avviene per mezzo di formule che vengono risolte all'apertura o alla creazione di un documento.

Possono assumere i seguenti valori:

· 0 - accesso consentito a nessuno
· 1 - accesso consentito a tutti
· Formula

Attributo

Descrizione

owk:visibile

Valore predefinito 1. Imposta la visibilità di un controllo all'interno di una form.

owk:changeable

Valore predefinito 1. Consente di gestire la modificabilità dei dati sottostanti il controllo (XML).

Se impostato a 0 impedisce la modificabilità; in tal caso i dati non possono essere alterati nemmeno da script lato server.

owk:invalidable

Valore predefinito 0. Permette di annullare il contenuto di un controllo. In particolare:

· Se il controllo non è presente oppure se valorizzato come stringa vuota, il comportamento segue le normali regole di modificabilità, etc.
· Se presente, a seguito della numerazione del documento, il campo viene bloccato. Quando il documento viene riaperto, il comportamento è il seguente:

- Se 0, l'utente non può apportarvi modifiche.

- Se <> 0 allora l'utente può apporvi modifiche attraverso un'azione di invalidazione (viene visualizzato l'apposito pulsante).

owk:secret

Valore predefinito 0. Permette di gestire la visibilità del controllo e dei dati. Infatti, all'interno del documento xml, i dati vengono sostituiti da caratteri che nascondono il contenuto.

owk:required

Valore predefinito 0. Definisce l'obbligatorietà dei campi all'interno della form.

owk:locked

Valore predefinito 0. Consente di gestire la modificabilità del dato soltanto alto client. Infatti a differenza dell'attributo changeable, eventuali modifiche apportate attraverso script sortiscono effetto.

Nel caso in cui coesistano gli attributi changeable e locked in un controllo, la modificabilità viene gestita come

segue:

Attributi | Descrizione
owk:locked="0" owk:changeable="0" | Impostazione non ammessa. L'attributo locked è interpretato pari a 1.
owk:locked="1" owk:changeable="0" | Tali impostazioni impediscono la modificabilità sia del contenuto sia del dato sottostante (XML).
owk:locked="0" owk:changeable="1" | Permettono la modificabilità del dato
owk:locked="1" owk:changeable="1" | Permettono la modificabilità del dato sia da script lato server sia da javascript

In generale i criteri impostati su un controllo, sono risolti in fase di runtime in un valore booleano riportato come attributo degli elementi field del nodo //owk:form/owk:context/owk:fields nel documento XML.

Esiste un elemento field per ciascun valore dell'attributo owk:fieldname associato ai controlli della form, e il valore dell'attributo owk:fieldname è riportato come valore dell'attributo name dell'elemento field.

Se l'operatore è presente nel gruppo di operatori identificato dalla formula, l'attributo corrispondente dell'elemento field assume valore true, diversamente false.

  <context>

<fields>

  <field name="oggetto" visible="true" changeable="true" secret="false"

              required="true" invalidable="false" locked="false" />

       <field name="annotazioni" visible="true" changeable="true" secret="false"         required="false" invalidable="false" locked="false" />

    </fields>

  </context>

E' possibile modificare gli attributi visible, changeable, secret, required, invalidable, locked dei controlli direttamente lato client, sia intervenendo sul nodo context della form (selectSingleNode su form/context/field) che mediante la funzione setContext di document.js.

Tale impostazione tuttavia ha effetto soltanto a fini di renderizzazione.

La questione è particolarmente evidente per l'attributo required: esso, pur alterabile lato client, viene verificato lato server, pertanto l'impostazione lato server non vincola la compilazione del campo alterato.


owk:formula

Attributo | Descrizione
owk:formula | Rappresenta una stringa che identifica un'espressione XPATH calcolata sul documento XML sottostante di una form.

E' possibile utilizzare le sintassi di seguito elencate:

Campo XML

Sintassi

Campo con fieldname

"esempio"

1. //owk:form/owk:document/owk:esempio
2. $doc/owk:esempio

Cella sulla riga R e colonna C di una tabella con fieldname esempio
1. //owk:form/owk:document/owk:esempio/owk:table/owk:tr[R]/owk:td[C]
2. $doc/owk:esempio//owk:td[C]

Cella sulla colonna C di una tabella, in una formula associata a un controllo presente nella stessa tabella

owk:td[C]

Controllo di nome esempio in una tabella, in una formula presente nella stessa tabella

owk:esempio

Somma dei valori contenuti nelle righe di un controllo table "importo"

sum($doc/owk:importo)

nota

Nota

È possibile utilizzare XPATH anche ad elementi contenuti della sezione indexing o additional di un documento XML.

Se in un controllo è impostato l'attributo formula, il controllo non è modificabile direttamente dall'operatore.

nota

Nota

Per approfondimenti relativi alla tecnologia XPATH, è consigliato consultare la relativa documentazione tecnica.


owk:mode

Attributo

Descrizione

owk:mode

Può assumere i seguenti valori:

· normal: è inserito un tag HTML label con gli attributi di classe e stile impostati
· textual: è inserito un semplice testo, nella lingua dell'operatore, senza l'impostazione di alcun attributo di classe e stile.

Valore predefinito normal.


owk:mask

Attributo

Descrizione

owk:mask

Consente di formattare i dati numerici.

La stringa assegnata all'attributo deve essere composta come segue:

prefisso;'separatore migliaia';'separatore decimali';'cifre decimali';suffisso

Nel caso di dati di tipo "currency" o "float" se mask = " " (stringa di lunghezza zero) si utilizzano le seguenti impostazioni predefinite:

· "€" come simbolo di valuta (solo per i "currency");
· "." come separatore delle migliaia;
· "," come separatore dei decimali.

Se non è presente il separatore delle migliaia, allora non comparirà nessun simbolo separatore nella formattazione.

Nel caso di caratteri non numerici :

· Se compare un carattere non numerico come primo carattere del dato, il dato stesso non è valido.
· Se compare un carattere non numerico in qualsiasi altra posizione, viene considerato come dato valido, il numero che si trova alla sinistra del primo carattere non numerico

Esempio

1. "50" sarà sempre un dato valido
2. "50,12345" sarà "50,12345" per dati tipo float e "50" per dati tipo integer
3. "37 ciao" sarà "37"
4. "ciao 37" non sarà un dato valido.


owk:tag1 - owk:tag2 - owk:tag3

Attributo | Descrizione
owk:tag1 owk:tag2 owk:tag3 | Possono essere valorizzati con una qualsiasi stringa. Possono essere utilizzati come identificatori di un campo per implementazioni custom.


Visualizzare/Nascondere elementi HTML di una form in runtime

Accade spesso di voler visualizzare/nascondere elementi HTML di una form (DIV, TABLE, controlli openwork, etc.) in fase di runtime. Per soddisfare questa esigenza, molti personalizzano ad hoc le funzioni di customonload e/o customafterupdatefield per visualizzare/nascondere elementi html della form rispettivamente al caricamento della stessa e/o alla modifica di un campo HTML (onchange, lost focus, etc.). Rispetto a questo modo di operare, esiste un'alternativa molto più vantaggiosa, che garantisce maggiore manutenibilità delle regole che gestiscono la visualizzazione degli elementi HTML, segue la sua descrizione.

Le regole che gestiscono la visualizzazione degli elementi html devono essere definite nel file HTML che rappresenta la form. Per fare ciò occorre inserire opportuni elementi <xsl:if> alll'interno dei tag dell'elemento HTML che si vuole nascondere. L'elemento <xsl:if> consente di specificare una condizione da valutare, avvalorando opportunamente il suo attributo test. E' necessario specificare l'attributo id dell'elemento HTML su cui l'elemento xsl:if deve agire. Esempio:

<div id="test">

<xsl:if test="condizione">.....</xsl:if>

</div>

Come passo successivo all'introduzione dei tag xsl:if occorre personalizzare la funzione customafterupdatefield semplicemente richiamando opportunamente al suo interno la funzione displayE, passando come valore della proprietà id, l'id dell'elemento HTML da visualizzare/nascondere. Nel nostro esempio la displayE sarà richiamata come segue:

function customafterupdatefield (dtype, id, path, upddoc, fname, row){

.....

displayE(x,"test");

.....

}

Così facendo, è possibile mantenere tutta la logica delle regole di visualizzazione all'interno di un unico file, HTML della form, il che facilita la manutenibilità del codice. Inoltre lato script basterà richiamare una funzione customafterupdatefield precedentemente creata che al suo interno non ridefinisce tutte le definizioni della logica di visualizzazione, ma bensì richiama un unica funzione, la displayE.

Esempio

Supponiamo di dover stabilire la visualizzazione di un elemento di tipo <div> con id="esempio". Se un controllo openwork di tipo Lista (combobox) nel nostro esempio owk:listaesempio, assume valore 1, allora l'elemento di tipo Etichetta (label) contenuto nel <div> deve essere valorizzato a "Hello World".

<div id="esempio">

<xsl:if test="//owk:form/owk:document/owk:listaesempio='1'">

<label class="label" id="l_helloworld" owk:type="label" owk:lang_default="it" owk:fieldname="EtichettaEsempio" owk:lang_it="Hello World" xmlns:owk="http://www.openwork.info/schema">Hello World</label>

</xsl:if>

</div>

La relativa customafterupdatefield sarà così definita:

function customafterupdatefield (dtype, id, path, upddoc, fname, row){

displayE(upddoc,"esempio");

}


La pagina di gestione delle immagini

Nell'applicazione web di openwork® è integrata la pagina scanview.aspx per la gestione delle immagini. Essa viene utilizzata come viewer predefinito delle immagini allegate alle form di openwork®, ma può essere utilizzata anche per altri scopi se chiamata con opportuni parametri opzionali:

Parametro

Descrizione

action

Operazione che deve essere eseguita sull'apertura della pagina. Possibili valori di tipo stringa:

· scan - inizia l'acquisizione di una nuova immagine
· open - apre una immagine esistente
· printlabel – permette la stampa di una etichetta

Per le action scan e open si aggiungono le seguenti querystring:

Parametro

Descrizione

filename

Nome del file da creare, completo di path e senza estensione nel caso in cui la pagina venga utilizzata per acquisire una nuova immagine. in questo caso l'immagine viene creata con estensione tif.

Mentre, nel caso in cui la pagina venga utilizzata per visualizzare una immagine esistente, il nome è completo di path ed estensione.

Si consiglia di codificare questo parametro con la funzione javascript encodeURIComponent.

dsp

Nome del dispositivo di scansione.

configfile

Nome di un eventuale file di configurazione locale da utilizzare per l'impostazione dello scanner. Il file può essere generato tramite un apposito comando sulla scanview.aspx.

nodlg

Permette di eseguire la scansione diretta senza visualizzare l’interfaccia dello scanner. Valori ammessi:

· 0 mostra l’interfaccia dello scanner ad ogni scansione;
· 1 non mostra l’interfaccia dello scanner e visualizza la checkbox Visualizza interfaccia scanner nella toolbar Documento che permette di mostrarla.
· >1 non mostra l’interfaccia dello scanner.

Per la action printlabel si aggiungono le seguenti querystring:

Parametro

Descrizione

width

Larghezza, espressa in cm, della pagina simulata su cui viene posizionata l’etichetta. Valore di default: 21

height

Altezza, espressa in cm, della pagina simulata su cui viene posizionata l’etichetta. Valore di default: 29

x

Coordinata orizzontale, espressa in cm, della posizione iniziale dell'etichetta. Valore di default: 0

y

Coordinata verticale, espressa in cm, della posizione iniziale dell'etichetta. Valore di default: 0

resolution

Risoluzione, espressa in dpi, dell’etichetta. Valore di default: 100

gettablehtml

Nome della funzione (definita nel file chiamante con estensione .js) che restituisce la definizione HTML dell'etichetta. Di default si suppone che la pagina chiamante sia una form e viene proposto il timbro di default indicato nel paragrafo Gestione timbro.

La struttura di una etichetta, analogamente per quanto accade per il timbro, è definita tramite una tabella HTML (rif. Gestione timbro). La definizione HTML tipicamente viene restituita da una funzione custom appartenente al file con estensione .js chiamante della action printlabel. Per esempio: Supponiamo che l'action printlabel sia chiamata da una form. Come parametro gettablehtml si deve specificare il nome della funzione presente nella document.js di clibraries (libreria custom) che restituisce la definizione HTML dell'etichetta (rif. Gestione etichette).

nota

Nota

Alcune delle query string possono essere impostate attraverso la funzione customcommandclass appartenente alle funzioni scanview di clibraries.


Gestione Timbro

Nel editor di immagini di openwork® è possibile usare la funzionalità di gestione timbro che permette di apporre, sulle immagini dell'allegato, un timbro personalizzabile.

Le azioni che compaiono nella toolbar sono:

Crea - Sovrappone, all'immagine, il timbro lasciando all'utente la possibilità di spostare, ridimensionare e ruotare il timbro.

Ruota - E' associata una casella di testo in cui inserire la rotazione in gradi da eseguire.

Ridimensiona - E' associata una casella di testo in cui inserire la percentuale di ridimensionamento.

Ripristina - Annulla tutte le operazioni di rotazione e ridimensionamento.

Applica - Integra il timbro nell'immagine. In alternativa si può applicare il timbro semplicemente eseguendo un doppio-click sullo stesso. Applicato il timbro, non è più possibile apportare modifiche e le azioni della toolbar, ad eccezione dell'azione Crea, vengono disabilitate.

Applica a tutte - Azione visibile per un allegato multipagina che permette di applicare il timbro a tutte le pagine. Se non è possibile applicare il timbro nella posizione prescelta, per tutte le pagine, viene visualizzato un messaggio di errore e l'operazione non viene eseguita;

Annulla - Rimuove il timbro non ancora applicato;

Stampa - Stampa il timbro, e solo il timbro, nella posizione corrente.

Di seguito il timbro di default, in cui sono riportate le informazioni relative al documento in cui è contenuto l'allegato:

WA01 - Stamp

· Codice organizzazione
· Numero del documento. Se il documento è non è stato pubblicato compare la stringa ##
· Data di creazione del documento
· Classificazione

nota

Nota

Le impostazioni grafiche del timbro (dpi, profondità del colore etc) sono quelle dell'immagine su cui viene apposto.

Procedura di apposizione

La procedura tipica di apposizione di un timbro è la seguente:

· Premere sull'azione Crea
· Effettuare trasformazioni con le azioni Ruota e Ridimensiona
· Trascinare il timbro fino a raggiungere la posizione desiderata
· Effettuare la stampa del timbro attraverso l'azione Stampa
· Applicare il timbro attraverso l'azione Applica oppure Applica a tutte.

Personalizzazione del timbro

In alternativa alla definizione standard, è possibile definire un timbro personalizzato attraverso la funzione custom customdefinestamp(). Questa funzione deve essere definita nel file scanview.js presente nella clibraries\scanview e deve restituire la definizione HTML di una TABLE in formato stringa. In generale è possibile definire una qualsiasi TABLE HTML, dato che il timbro viene creato replicando sull'immagine, quello che viene visualizzato nel browser. Di seguito i tag HTML ammessi nella TABLE e gli attributi gestiti.

Tag HTML

Attributi

TABLE
· Lo style consente di definire il bordo della tabella, il font e colore:STYLE = "border:<border-width border-style order-color>; font:<font-style font-variant font-weight font-size font-family>; color:<color> ";

Più in dettaglio è possibile definire i singoli attributi di stile, cioè border-left-width, border-left-style, font-style ecc, secondo quanto specificato dalla sintassi HTML.

· CELLPADDING - distanza, verticale e orizzontale, in pixel tra il bordo della cella ed il contenuto testo
· CELLSPACING - distanza , verticale e orizzontale, in pixel tra le celle

TR
· VALIGN - Allineamento verticale del contenuto testo di ogni cella della riga
· ALIGN - Allineamento orizzontale del contenuto testo di ogni cella della riga
· STYLE = "font:<font-style font-variant font-weight font-size font-family>; color:<color>"

TD
· STYLE =”border:<border-width border-style order-color>; font:<font-style font-variant font-weight font-size font-family>; color:<color> ”;

Più in dettaglio è possibile definire i singoli attributi di stile, cioè border-left-width, border-left-style, font-style ecc, secondo quanto specificato dalla sintassi HTML.

· VALIGN - Allineamento verticale del contenuto testo di ogni cella della riga
· ALIGN - Allineamento orizzontale del contenuto testo di ogni cella della riga

Di seguito vengono riportati i valori ammessi per ogni singolo attributo di stile:

· color: [black | silver | gray | white | maroon | red | purple | fuchsia | green | lime | olive | yellow | navy | blue | teal | aqua];
· style:

border-width: [0 | <valore>] px

border-style : [none | solid]

border-color : [black | {color}]

font-style: [normal | italic]

font-weight: [normal | bold]

font-size: [10 | <valore>] pt

font-family:[Arial | <nome font>]

color : [black | {color}]

· align: [center | left | right ]
· valign: [top | middle | bottom]
· cellpadding/cellspacing: [0 | <value>]

Esempio

Di seguito il codice HTML del timbro di default. I valori di Codice org., Protocollo ecc. si riferiscono ad un'istanza di form di esempio:

<table style='border:solid 2px red;font:normal normal normal 12pt Arial;color:red;' cellspacing='3' cellpadding='0'>

<tr>

   <td>Codice org.</td>

   <td>NS01</td>

</tr>

<tr>

   <td>Protocollo</td>

   <td>00019-2007</td>

</tr>

<tr>

   <td>Data</td>

   <td>19/12/2007</td>

</tr>

<tr>

   <td>Classificazione</td>

   <td>01.tt</td>

</tr>

</table>

La funzione javascript da definire per il timbro di default è la seguente:

function customdefinestamp()

{

/*

Per recuperare i dati del documento(codorg, numprot ecc.),

           indicati nel codice di seguito, occorre fare riferimento al

           window.opener:

var x = window.opener.doc();

//recupero fieldname del campo numero documento standard

var nomeNumdoc = window.opener.DFN(x, "numerodoc", "");

//numero documento

var numdoc = x.selectSingleNode("//owk:document/owk:" + nomeNumdoc + "/owk:description").text;

.........

*/

var strHTML="<table style='border:solid 2px red;font:normal normal normal 12pt Arial;color:red;' cellspacing='3' cellpadding='0'>";

strHTML += "<tr><td>Codice org.</td><td>" + codorg + "</td></tr>";

strHTML += "<tr><td>Protocollo</td><td>" + numdoc + "</td></tr>";

strHTML += "<tr><td>Data</td><td>" + datedoc + "</td></tr>";

strHTML += "<tr><td>Classificazione</td><td>" + classif + "</td></tr></table>";

return strHTML;

}

Disattivazione della gestione timbro

Per disattivare la funzionalità gestione timbro, e nascondere la relativa toolbar, è sufficiente definire la funzione customdefinestamp() e fare in modo che restituisca una stringa vuota:

function customdefinestamp(){

return "";

}


Gestione Etichette

Nel editor di immagini di openwork® è possibile usare la funzionalità di gestione delle etichette, che permette di stampare una etichetta personalizzata (rif. Pagina di gestione delle immagini)

Per poter accedere a questa funzionalità è necessario personalizzare la action printlabel attraverso la customcommand della document.js di clibraries. Quindi per poter aprire la pagina di gestione immagini in modalità "stampa delle etichette" (printlabel) è necessario definire una funzione customcommand appropriata che richiama la pagina scanview.aspx con parametro action avvalorato a printlabel (rif. Esempio customcommand).

Utilizzo della pagina di gestione delle immagini per la stampa delle etichette

La pagina di gestione delle immagini aperta con action=printlabel presenta una pagina che simula quella su cui sarà posizionata l'etichetta e rende disponibili le seguenti azioni:

toolbar Pagina: è possibile solo ritagliare la pagina simulata;

toolbar Zoom: disponibili tutte le azioni previste nella toolbar;

toolbar Timbro: disponibili le azioni

o Ruota: E' associata una casella di testo in cui inserire la rotazione in gradi da eseguire;
o Ridimensiona: E' associata una casella di testo in cui inserire la percentuale di ridimensionamento;
o Ripristina: ricrea l’etichetta e la posiziona in alto a sinistra nella pagina;
o Stampa: Stampa l'etichetta, e solo l'etichetta, nella posizione corrente.

In questa modalità attraverso la pagina di gestione immagini è possibile spostare, ridimensionare, ruotare e stampare l’etichetta.

In aggiunta è possibile ridimensionare la pagina simulata su cui l’etichetta è posizionata. Se si ritaglia la pagina (toolbar Pagina -> Ritaglia) potrebbe accadere che l’etichetta sia spostata fuori dalla pagina, in questo caso premendo Ripristina, dalla toolbar Timbro, si ripristina la posizione iniziale delll’etichetta in alto a sinistra. La posizione corrente dell’etichetta compare nella status bar della pagina selezionando o spostando l’etichetta.

Personalizzazione stampa etichette

In alternativa alla definizione standard, è possibile definire un etichetta personalizzata attraverso una funzione custom che deve restituire la definizione HTML di una TABLE in formato stringa. In generale è possibile definire una qualsiasi TABLE HTML. Di seguito i tag HTML ammessi nella TABLE che rappresenta l'etichetta e gli attributi gestiti.

Tag HTML

Attributi

TABLE
· Lo style consente di definire il bordo della tabella, il font e colore:STYLE = "border:<border-width border-style order-color>; font:<font-style font-variant font-weight font-size font-family>; color:<color> ";

Più in dettaglio è possibile definire i singoli attributi di stile, cioè border-left-width, border-left-style, font-style ecc, secondo quanto specificato dalla sintassi HTML.

· CELLPADDING - distanza, verticale e orizzontale, in pixel tra il bordo della cella ed il contenuto testo
· CELLSPACING - distanza , verticale e orizzontale, in pixel tra le celle

TR
· VALIGN - Allineamento verticale del contenuto testo di ogni cella della riga
· ALIGN - Allineamento orizzontale del contenuto testo di ogni cella della riga
· STYLE = "font:<font-style font-variant font-weight font-size font-family>; color:<color>"

TD
· STYLE =”border:<border-width border-style order-color>; font:<font-style font-variant font-weight font-size font-family>; color:<color> ”;

Più in dettaglio è possibile definire i singoli attributi di stile, cioè border-left-width, border-left-style, font-style ecc, secondo quanto specificato dalla sintassi HTML.

· VALIGN - Allineamento verticale del contenuto testo di ogni cella della riga
· ALIGN - Allineamento orizzontale del contenuto testo di ogni cella della riga

Di seguito vengono riportati i valori ammessi per ogni singolo attributo di stile:

· color: [black | silver | gray | white | maroon | red | purple | fuchsia | green | lime | olive | yellow | navy | blue | teal | aqua];
· style:

border-width: [0 | <valore>] px

border-style : [none | solid]

border-color : [black | {color}]

font-style: [normal | italic]

font-weight: [normal | bold]

font-size: [10 | <valore>] pt

font-family:[Arial | <nome font>]

color : [black | {color}]

· align: [center | left | right ]
· valign: [top | middle | bottom]
· cellpadding/cellspacing: [0 | <value>]

Esempio

Supponiamo di voler personalizzare la stampa delle etichette scegliendo l'azione Segnatura da una form; supponiamo di voler imporre come risoluzione 400dpi e coordinate della posizione iniziale (2,2) cm.

1. nella document.js di clibraries definire le seguenti funzioni:

function customcommand(action){

if(action=="printlabel"){

window.open("scanview.aspx?action=printlabel&x=2&y=2&resolution=400&gettablehtml=getMyLabel");

return true;

}

}

function getMyLabel(){

var strHTML = null;

var x = doc();

var numeroDoc = "";

var nomeNumeroDoc = DFN(x, "numerodoc", "");

numeroDoc = x.selectSingleNode("//owk:document/owk:" + nomeNumeroDoc + "/owk:description").text;

strHTML = "<table style='border:solid 2px red;font:normal normal normal 12pt Arial;color:blue;' cellspacing=3 cellpadding=0><tr>";

strHTML += "<td>Numero doc</td>";

strHTML += "<td>" + numeroDoc + "</td>";

strHTML += "</tr></table>";

return strHTML;

}

2. Creare una nuova form, compilarla e pubblicarla;
3. Premendo sul tasto Segnatura si apre la pagina della gestione immagini proponendo la seguente etichetta in posizione con coordinate (2,2) cm.

4. Premendo Stampa è possibile selezionare, impostare e stampare l’etichetta mantenendo la posizione corrente.


Trasformazione di una form o di un elenco

Al fine di convertire una form o un elenco in un documento di formato diverso come PDF, Excel, Word, etc. occorre applicare una trasformazione xsl-fo sull'XML della form o dell'elenco. Per fare ciò:

1) Identificare il record relativo alla form o all'elenco nella tabella schemi. Al fine di identificare il record di proprio interesse nella tabella schemi utilizzare la combinazione appropriata dei valori id, categoria, archivio, modello , etc. Ad esempio se voglio applicare la trasformazione al modello di documento interno definito nel piano di classificazione con id= 42 dovrò cercare nella tabella schemi il record con i campi CATEGORIA=1;ARCHIVIO=3;MODELLO=42; (per ulteriori informazioni sui campi della tabella schemi fare riferimento qui cfr. Definizione di una ricerca).

2) Inserire la trasformazione xsl-fo nel campo RIS10 del record identificato al punto 1. Il campo RIS10 assumerà una forma simile a quella che segue:

<!-- trasformazione xsl-fo per convertire la form in PDF con modelid=1 -->

<xsl:stylesheet version="1.0" modelid="1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo=" http://www.w3.org/1999/XSL/Format"

      xmlns:owk="http://www.openwork.info/schema"

      xmlns:ibex="http://www.xmlpdf.com/2003/ibex/Format">

<!-- dettagli della trasformazione xsl-fo  -->

</xsl:stylesheet>

<!-- trasformazione xsl-fo per convertire la form in un file Excel -->

<xsl:stylesheet version="1.0" modelid="2" contenttype="application/vnd.ms-excel" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:owk="http://www.openwork.info/schema">

<!-- dettagli della trasformazione xsl-fo  -->

</xsl:stylesheet>

<!-- ulteriore trasformazione xsl-fo per convertire la form in PDF con modelid=3 -->

<xsl:stylesheet version="1.0" modelid="3"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

xmlns:fo="http://www.w3.org/1999/XSL/Format"

xmlns:owk="http://www.openwork.info/schema"

xmlns:ibex="http://www.xmlpdf.com/2003/ibex/Format">

<!-- dettagli della trasformazione xsl-fo  -->

</xsl:stylesheet>

dove:

· L'attributo modelid identifica univocamente il foglio di stile che si desidera applicare all'XML della form o dell'elenco.
· L'attributo contenttype rappresenta il MIMEType del documento prodotto, indispensabile affinché il browser lo possa rappresentare correttamente. Valore di default: application/pdf.

I documenti prodotti possono essere visualizzati su una pagina del browser oppure possono essere salvati come file richiamando la funzione javascript convertXMLDoc.

Analogamente a quanto accade per i fogli di stile (XSL), al fine di utilizzare il motore di rendering DevExpress per effettuare la trasformazione di una form o di un elenco, bisogna salvare il modello di layout necessario nel campo "ris10" della tabella schemi del record relativo alla form o all'elenco.

Per un maggiore dettaglio sulla conversione specifica di una form in PDF fare riferimento al capitolo successivo cfr. Produzione di documenti PDF.


Produzione di documenti PDF

La produzione di documenti in formato PDF si ottiene applicando una trasformazione XSL all'XML di una form o di un elenco (cfr. Trasformazione di una form o di un elenco) in modo da produrre un documento FO (Formatting Objects) processato - lato web server - da un'apposita libreria.

FormPDF01 - process

Nei capitolo successivi segue il dettaglio di:

· come definire la Struttura del foglio di stile xsl;
· come definire Il paragrafo e le immagini di un documento FO;
· Un esempio di conversione di una form in pdf;
· Un esempio di come creare una azione custom che esegue la trasformazione di una form in pdf.


Struttura del foglio di stile

Il foglio di stile XSL al fine di convertire una form in pdf, deve produrre un documento di tipo FO (Formatting Objects) che un'apposita libreria e in grado di processare. Segue un esempio della struttura che una trasformazione XSL deve avere per produrre un documento FO:

<xsl:stylesheet version="1.0" modelid="1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo=" http://www.w3.org/1999/XSL/Format" xmlns:owk="http://www.openwork.info/schema" xmlns:ibex=" http://www.xmlpdf.com/2003/ibex/Format">

  <xsl:template match="/">

     <fo:root>

        <fo:layout-master-set>

     <fo:simple-page-master master-name="page" page-height="21cm" page-width="29.7cm" margin-bottom="1.5cm"                                        margin-left="1.5cm" margin-right="1.5cm" margin-top="1.0cm">

              <fo:region-before region-name="header" extent="5.0cm"/> <!--intestazione della pagina-->

              <fo:region-body region-name="body" margin-bottom="1.5cm" margin-top="5.0cm"/> <!--corpo-->

              <fo:region-after region-name="footer" extent="1.0cm"/> <!--piè di pagina-->

           </fo:simple-page-master>

        </fo:layout-master-set>

        <fo:page-sequence font="bold 11pt arial" master-reference="page" language="en" hyphenate="true">

     <fo:static-content flow-name="header">

        <!-- […] -->

    </fo:static-content>

    <fo:flow flow-name="body">

        <!-- […] -->

    </fo:flow>

</fo:page-sequence>

     </fo:root>

   </xsl:template>

</xsl:stylesheet>

La root di un documento FO è <fo:root>, ad essa segue la definizione delle pagine e delle regioni che le compongono e la definizione delle singole regioni. Nell'esempio si è definita una pagina con un'intestazione, un piè di pagina e un corpo. Si osservi come le regioni che possono estendersi su più pagine sono definite in una struttura

<fo:flow></fo:flow>

mentre quelle che non si estendono su più pagine (ma si ripetono identiche in ogni pagina) in una struttura

<fo:static-content></fo:static-content>.


Il paragrafo e le immagini

Elemento base di ogni documento FO è il paragrafo (fo:block), all'nterno del quale possono essere inseriti testo, immagini, etc… Nell'esempio seguente viene costruito un paragrafo che contiene la descrizione della classificazione. Si osservi come l'istruzione <xsl:value-of> venga utilizzata per reperire il valore del campo XML all'interno dell'XML della form su cui viene applicata la trasformazione.

<fo:block line-height="20pt" space-before.optimum="1.5pt"

    space-after.optimum="1.5pt" keep-together="always" text-align="center">

  <fo:inline font-weight="bold">

     <xsl:value-of select="//owk:form/owk:document/owk:classificazione/owk:description"/>

  </fo:inline>

</fo:block>

All'interno di un paragrafo possono essere inserite immagini utilizzando codice simile al seguente.

<fo:external-graphic>

  <xsl:attribute name="src">

     <xsl:value-of select="concat('url(',//./@host,'/libraries/table/images/immagine.gif)')"/>

  </xsl:attribute>

</fo:external-graphic>

Si presti attenzione al valore dell'origine dell'immagine, in quanto la trasformazione viene applicata lato server.

Per modificare il logo che appare nelle stampe di elenchi in pdf, occorre modificare o sostituire il file printlogo.gif presente nella cartella cimages.


Esempio trasformazione form in pdf

Seguono i passi necessari da eseguire per poter convertire una form in pdf, utilizzando l'apposita action con id = "formtopdf". (cfr. Azioni predefinite allegati)

La conversione avviene attraverso la trasfomazione xsl-fo che deve essere inserita nel campo RIS10 della tabella schemi, in particolare, supponiamo di voler effettuare la conversione in pdf del protocollo in entrata di default. Si deve:

1) Identificare il record d'interesse nella tabella schemi. Nel caso del protocollo in entrata di default il record della tabella schemi è identificato mediante i seguenti parametri:

CATEGORIA =1; ARCHIVIO =1; MODELLO = 0

2) Inserire la trasformazione xsl nel campo RIS10 del record identificato al punto 1).

Segue un esempio di trasformazione xsl. Tale trasformazione è valida solo per il protocollo in entrata di defalut, dovrà essere integrata e/o modificata in funzione delle proprie esigenze.

<xsl:stylesheet

version = "1.0"

xmlns:xsl = "http://www.w3.org/1999/XSL/Transform"

xmlns:fo = "http://www.w3.org/1999/XSL/Format"

xmlns:owk = "http://www.openwork.info/schema"

xmlns:ibex = "http://www.xmlpdf.com/2003/ibex/Format">

<xsl:include href = "../libraries/common/common.xsl"/>

<xsl:template match = "/">

<fo:root>

<fo:layout-master-set>

<fo:simple-page-master

master-name = "page"

page-height = "29.7cm"

page-width = "21 cm"

margin-bottom = "1.5cm"

margin-left = "1.5cm"

margin-right = "1.5cm"

margin-top = "1.0cm">

<fo:region-before region-name = "header" extent = "4.0cm"/>

<fo:region-body region-name = "body" margin-bottom = "1.5cm" margin-top = "4.0cm"/>

<fo:region-after region-name = "footer" extent = "1.0cm" background-color = "#dddddd"/>

</fo:simple-page-master>

</fo:layout-master-set>

<fo:page-sequence font = "bold 11pt arial" master-reference = "page" language = "en" hyphenate = "true">

<!--intestazione-->

<fo:static-content flow-name = "header">

<fo:block

line-height = "20pt"

space-before.optimum = "1.5pt"

space-after.optimum = "1.5pt"

keep-together = "always"

text-align = "center">

<fo:inline font-weight = "bold">

Protocollo

<xsl:value-of select = "//owk:form/owk:document/owk:classificazione/owk:description"/>

</fo:inline>

</fo:block>

</fo:static-content>

<!--fine intestazione-->

<!--Pie di pagina-->

<fo:static-content flow-name = "footer">

<fo:block text-align = "center">

Pagina

<fo:page-number/>

</fo:block>

</fo:static-content>

<!--Fine pie di pagina-->

<!--Corpo del testo-->

<fo:flow flow-name = "body">

<fo:block

line-height = "20pt"

space-before.optimum = "1.5pt"

space-after.optimum = "1.5pt"

keep-together = "always"

text-align = "left">

<fo:inline font-weight = "bold">

Tipo:

<xsl:value-of select = "//owk:form/owk:document/owk:classificazione/owk:description"/>

</fo:inline>

</fo:block>

<fo:block

line-height = "15pt"

space-before.optimum = "1.5pt"

space-after.optimum = "1.5pt"

keep-together = "always"

text-align = "left">

<fo:inline>

n.

<xsl:value-of select = "//owk:form/owk:document/owk:numerodoc/owk:description"/>

del

<xsl:value-of select = "//owk:form/owk:document/owk:datadoc"/>

</fo:inline>

</fo:block>

<fo:block

line-height = "15pt"

space-before.optimum = "1.5pt"

space-after.optimum = "1.5pt"

keep-together = "always"

text-align = "left">

<fo:inline>

Supporto:

<xsl:value-of select = "//owk:form/owk:document/owk:supporto"/>

</fo:inline>

</fo:block>

<fo:block

line-height = "15pt"

space-before.optimum = "1.5pt"

space-after.optimum = "1.5pt"

keep-together = "always"

text-align = "left">

<fo:inline>

Mittente:

<xsl:value-of select = "//owk:form/owk:document/owk:mittente/owk:name"/>

</fo:inline>

</fo:block>

<fo:block

line-height = "15pt"

space-before.optimum = "1.5pt"

space-after.optimum = "1.5pt"

keep-together = "always"

text-align = "left">

<fo:inline>

Oggetto:

<xsl:value-of select = "//owk:form/owk:document/owk:oggetto"/>

</fo:inline>

</fo:block>

<fo:block

line-height = "15pt"

space-before.optimum = "1.5pt"

space-after.optimum = "1.5pt"

keep-together = "always"

text-align = "left">

<fo:inline>

Annotazioni:

<xsl:value-of select = "//owk:form/owk:document/owk:annotazioni"/>

</fo:inline>

</fo:block>

<fo:block

line-height = "15pt"

space-before.optimum = "1.5pt"

space-after.optimum = "1.5pt"

keep-together = "always"

text-align = "left">

<fo:inline>

Ufficio di competenza:

<xsl:value-of select = "//owk:form/owk:document/owk:ufficiocompetenza/owk:fullname"/>

nella persona di

<xsl:value-of select = "//owk:form/owk:document/owk:responsabile/owk:name"/>

</fo:inline>

</fo:block>

</fo:flow>

<!--Fine Corpo del testo-->

</fo:page-sequence>

</fo:root>

</xsl:template>

</xsl:stylesheet>


Esempio trasformazione form con action custom

La action predefinita per la trasformazione di una form in pdf è actatt07 - formtopdf Form in pdf che esegue la trasformazione della form previo avvaloramento del campo RIS10 così come scritto nel capitolo cfr. Trasformazione di una form o di un elenco.

Se in alternativa alla action predefinita si vuole definire una action custom che effettui la trasformazione della form in pdf occorre procedere come segue:

1.Inserire la trasformazione xsl-fo, necessaria per la trasformazione, nel campo ris10 del record corrispondente al modello di form nella tabella schemi.

2.Definire una nuova action del tipo:

<owk:action enabled="1" type="custom" lang_it="Trasforma" id="formpdf"/>

3.Inserire nella document.js della cartella clibraries una funzione customcommand del tipo:

case "formpdf":

var url = window.location;

url = url + "&print=1"; // 1= modelid del modello fo

var winname="LIST" + rnd();

var wins="status=yes,toolbar=no,menubar=no,location=no,scrollbars=no,resizable=yes";

window.open(url,newwin,winsettings);

break;

E' possibile trovare il dettaglio del parametro Print nel paragrafo cfr. Parametri apertura. In questo caso il valore del parametro print vale 1 in quanto il il modeid della traformazione xsl-fo che trasforma la form in pdf è uguale a 1.

Con la procedura sopra descritta, viene prodotto il pdf, ma non viene allegato automaticamente alla form.

Se l'obiettivo è quello di allegare il file pdf prodotto direttalente alla form, allora abilitare ed utilizzare l'action predefinita di tipo attbase:

<owk:action enabled="1" type="attbase" lang_it="Form in PDF" id="formtopdf"/>


Utilizzo dei template in una trasformazione XSL-FO

Includendo nella trasformazione la libreria common.xsl con l'istruzione

<xsl:include href="../libraries/common/common.xsl" />

è possibile utilizzare i template ivi definiti per formattare, per esempio, data e numeri all'interno di un documento PDF.


Script lato client tips & tricks

Nella definizione delle variabili globali all'interno delle librerie javascript custom o nei modelli HTML, utilizzare un suffisso identificativo (per esempio cus_) in modo da evitare il rischio di definire variabili in conflitto con quelle dichiarate nelle form proprietarie.

Se è stata definita una funzione custom sia nel modello sia in una libreria custom (per esempio customcommand in clibraries/document.js e nel modello), viene presa in considerazione (ed eseguita) quella presente nel modello.

Nelle funzioni custom utilizzare sempre un meccanismo di gestione degli errori come nell'esempio seguente:

function customcommand(action)

{

try

{

//codice custom

...

}

catch(er){msgbox("customcommand: " + er.message, vbCritical, boxtit)}

}


Template XSL

All'interno del file XSL sono presenti dei template che può essere utile richiamare in fase di personalizzazione dei modelli o degli elenchi.

charsstring: aggiunge alla stringa di partenza un carattere tante volte quante se ne desidera, fino ad un massimo di 50.

<xsl:template name="charsstring">

<xsl:param name="charnum"/>

<xsl:param name="chartoadd"/>

<xsl:param name="stringtowrite"/>

</xsl:template>

charnum è il numero di volte che deve essere aggiunto il carattere chartoadd

chartoadd è il carattere da aggiungere

stringtowrite è la stringa di partenza alla quale aggiungere i caratteri desiderati.

formatDate:formatta la data passata come parametro alla funzione nel formato utilizzato dall'utente

<xsl:template name="formatDate">

<xsl:param name="date"/>

</xsl:template>

date è la stringa contenente la data da formattare in formato XML (aaaa-mm-gg).

formatNumber:formatta un numero secondo le specifiche del parametro mask.

<xsl:template name="formatNumber">

<xsl:param name="ftype"/>

<xsl:param name="fvalue"/>

<xsl:param name="fmask"/>

</xsl:template>

ftype è il tipo di dato (integer, flost, currency, percentage);

fvalue è il valore numerico da formattare;

fmask, parametro mask (per le specifiche cfr. par. L'attributo owk:mask).

formatTime: formatta l'ora passata come parametro alla funzione nel formato utilizzato dall'utente

<xsl:template name="formatTime">

<xsl:param name="pTime"/>

</xsl:template>

pTime è la stringa contenente l'ora da formattare; la stringa può essere anche in formato data-ora XML (aaaa-mm-ddThh:mm:ss).

lenstring: calcola la lunghezza di una stringa.

<xsl:template name="lenstring">

<xsl:param name="objstring"/>

</xsl:template>

objstring è la stringa oggetto del conteggio

charsstring: aggiunge alla stringa di partenza un carattere tante volte quante se ne desidera, fino ad un massimo di 50.

<xsl:template name="charsstring">

<xsl:param name="charnum"/>

<xsl:param name="chartoadd"/>

<xsl:param name="stringtowrite"/>

</xsl:template>

charnum è il numero di volte che deve essere aggiunto il carattere chartoadd

chartoadd è il carattere da aggiungere

stringtowrite è la stringa di partenza alla quale aggiungere i caratteri desiderati.

replace: sostituisce una sottostringa all'interno di una stringa con un'altra sottostringa

<xsl:template name="replace">

<xsl:param name="initialstring"/>

<xsl:param name="oldsubstring"/>

<xsl:param name="newsubstring"/>

<xsl:param name="replaceall"/>

</xsl:template>

inizialstring è la stringa di partenza

oldsubstring è la stringa da sostituire

newsubstring è la stringa da inserire al posto di oldsubstring

replaceall, se posto a zero sostituisce solo la prima occorrenza, altrimenti sostituisce tutte le occorrenze.

lenstring: Calcola la lunghezza di una stringa.

<xsl:template name="lenstring">

<xsl:param name="objstring"/>

</xsl:template>

objstring è la stringa oggetto del conteggio

formatNumber: Formatta un numero secondo le specifiche del parametro mask.

<xsl:template name="formatNumber">

<xsl:param name="ftype"/>

<xsl:param name="fvalue"/>

<xsl:param name="fmask"/>

</xsl:template>

ftype è il tipo di dato (integer, flost, currency, percentage);

fvalue è il valore numerico da formattare;

fmask, parametro mask (per le specifiche cfr. par. L'attributo owk:mask).


L’assembly Openwork.WebServer.Custom.dll

L'assembly Openwork.WebServer.Custom.dll

All'interno della cartella bin della applicazione web è presente una Assembly di nome Openwork.WebServer.Custom.dll di cui si riporta il codice:

Option Strict Off

Option Explicit On

' $LastChangedDate: 2008-05-08 11:25:25 +0200 (gio, 08 mag 2008) $

' $LastChangedRevision: 98 $

Imports System

Imports System.IO

Imports System.Reflection

Imports System.Web

<Assembly:AssemblyVersionAttribute("6.0.0.0")>

<Assembly:AssemblyInformationalVersionAttribute("6.0.0.0")>

<Assembly:AssemblyTitleAttribute("openwork® Custom Authentication Library")>

<Assembly:AssemblyProductAttribute("openwork® Custom Authentication Library")>

<Assembly:AssemblyCompanyAttribute("NET Sistemi")>

<Assembly:AssemblyCopyrightAttribute("(c) 2002-2008 by NET Sistemi")>

Namespace OpenWork.WebServer.Custom

Public Class CustomAccounting

Public Function Validate(ByRef username as string, _

ByRef password as string, _

ByRef errdescription As String _

) As Integer

dim usercode as string = HttpContext.Current.Request.params("UserCode")

username= "username"

password="password"

errdescription=""

Return 0

End Function

Public Function ValidateWithRole(ByRef username As String, _

ByRef password as String, _

ByRef roleid as Integer, _

ByRef errdescription As String _

) As Integer

End Function

Public Function AfterPwdChange(ByVal newpassword as string, _

ByVal oldpassword as string, _

ByVal changeresult as integer, _

ByRef errdescription as string) as integer

return 0

End Function

Public Function BeforePwdChange(ByRef newpassword as string, _

ByRef oldpassword as string, _

ByRef errdescription as string) as integer

return 0

End Function

Public Function BeforeLogin(ByRef password as string, _

ByRef role as integer, _

ByRef errdescription as string) as integer

return 0

End function

Public Function AfterLogin(ByVal password as string, _

ByVal role as integer, _

ByVal loginresult as integer, _

ByRef errdescription as string) as integer

return 0

End function

Public Function AfterLogout() as integer

End function

End Class

End NameSpace

Nell'assembly è definita la classe CustomAccounting che espone alcune funzioni richiamate dall'applicazione web di openwork®. È possibile completare queste funzioni con codice custom e ricompilare l'assembly in modo da cambiare il comportamento dell'applicazione web.

La funzione Validate viene richiamata, solo se se è stata impostata la modalità di autenticazione custom, prima di eseguire il login sui web services ovvero quando viene richiamata qualsiasi pagina dell'applicazione se non si è ancora autenticati. Se la funzione restituisce

· 0 verrà tentato il login su openwork® tramite username e password restituiti;
· -1 verrà tentato il login su openwork® tramite username in modalità trusted;
· >1, ciò indica una condizione di errore descritta in ErrDescription.

La funzione BeforeLogin viene richiamata prima che l'applicazione web effettui il login sui web services. Un valore restituito diverso da 0 sarà interpretato come errore, errdescription può essere impostata con una eventuale stringa descrittiva dell'errore. Nella funzione puo essere impostato il valore della password e del ruolo passati per riferimento, il nome dell'operatore può essere letto/impostato da Session("owk_UserName").

La funzione AfterLogin viene richiamata dopo che l'applicazione web ha effettuato il login sui web services; il parametro loginresult indica il risultato della operazione di login appena effettuata, esso sarà diverso da 0 se non ha avuto successo. Un valore restituito diverso da 0 sarà interpretato come errore, errdescription può essere impostata con una eventuale stringa descrittiva dell'errore. Alla funzione viene passata la password e il ruolo dell'operatore, il nome è accessibile da Session("owk_UserName").

La funzione AfterLogout viene richiamata dopo che l'applicazione web ha eseguito il logout dai web services, ovvero quando l'operatore ha scelto di effettuare il logout o una sessione è scaduta per timeout. Dopo il logout dai web services la sessione viene terminata.

La funzione BeforePwdChange viene richiamata prima della funzione dei web services per il cambio password. Un valore restituito diverso da 0 sarà interpretato come errore, errdescription può essere impostata con una eventuale stringa descrittiva dell'errore. Nella funzione puo essere impostato il valore della nuova password e della vecchia password passate per riferimento. Il nome dell'operatore corrente è accessibile da Session("owk_UserName").

La funzione AfterPwdChange viene richiamata dopo la funzione dei web services per il cambio password; il parametro changeresult indica il risultato della operazione di cambio password appena effettuata, esso sarà diverso da 0 se non ha avuto successo. Alla funzione viene passato il valore della nuova password e della vecchia password. Il nome dell'operatore corrente è accessibile da Session("owk_UserName").

Per tutte le funzioni, eccetto il logout, quando viene restituito un codice di errore, openwork® effettuerà il redirect sulla pagina error.aspx visualizzando il messaggio “Errore nel sistema di autenticazione custom” seguito da ErrDescription.

Per la compilare la classe, utilizzare la seguente riga di comando sostituendo opportunamente PathApplicazioneWeb e PathCodice.

vbc.exe /t:library/out:PathApplicazioneWeb\bin\Openwork.WebServer.Custom.dll /r:system.dll,system.web.dll PathCodice\custom.vb


Associazione datatype - datafield

Di seguito vengono riportati i tipi di dati previsti per ciascuno dei controlli openwork® ed i campi liberi a disposizione suddivisi per tipologia di documento:

- Controlli per Protocollo in entrata

- Controlli per Protocollo in uscita

- Controlli per Documenti

- Controlli per Protocollo Interno

- Controlli per Fascicoli

- Controlli per anagrafica

- Controlli per anagrafica Operatori

Controlli per Protocollo in entrata

Controllo | Tipo | Campi
Contenitore (container) | xml | annotazioni libero37 | libero38 libero107 | libero108 libero109 | libero110
Classificazione (classification) | classification | classificazione | classificazione | classificazione |
Numero documento (docnumber) | docnumber | numerodoc | numerodoc | numerodoc |
Casella di testo (textbox) | text | oggetto supporto numeroemergenza interlocutore protocollomittente ubicazionestanza ubicazionescaffale ubicazionepalchetto ubicazioneripiano ubicazioneraccoglitore libero1 libero2 libero3 libero4 libero5 | libero6 libero7 libero8 libero9 libero10 libero11 libero12 libero13 libero14 libero15 libero16 libero17 libero43 libero44 libero45 | libero46 libero47 libero48 libero49 libero50 libero51 libero52 libero53 libero54 libero55 libero56 libero57 libero58 libero59 libero60 | libero61 libero62 libero63 libero64 libero65 libero66 libero67 libero68 libero69 libero70 libero71 libero72 libero73 libero74 libero75
 | integer | stato nrev iddocrevisionato | idultimorevisionato giorniscadenza libero32 | libero33 libero34 libero35 | libero36
 | float | libero23 libero24 libero25 libero26 libero27 libero28 libero29 libero30 | libero31 libero86 libero87 libero88 libero89 libero90 libero91 libero92 | libero93 libero94 libero95 libero96 libero97 libero98 libero99 libero100 | libero101 libero102 libero103 libero104 libero105 libero106
Casella di controllo (checkbox) | bool | libero32 libero33 libero34 libero35 libero36 libero23 libero24 libero25 libero26 | libero27 libero28 libero29 libero30 libero31 libero86 libero87 libero88 libero89 | libero90 libero91 libero92 libero93 libero94 libero95 libero96 libero97 libero98 | libero99 libero100 libero101 libero102 libero103 libero104 libero105 libero106
Gruppo di opzioni (optionbutton) | text | oggetto supporto numeroemergenza interlocutore protocollomittente ubicazionestanza ubicazionescaffale ubicazionepalchetto ubicazioneripiano ubicazioneraccoglitore libero1 libero2 libero3 libero4 libero5 | libero6 libero7 libero8 libero9 libero10 libero11 libero12 libero13 libero14 libero15 libero16 libero17 libero43 libero44 libero45 | libero46 libero47 libero48 libero49 libero50 libero51 libero52 libero53 libero54 libero55 libero56 libero57 libero58 libero59 libero60 | libero61 libero62 libero63 libero64 libero65 libero66 libero67 libero68 libero69 libero70 libero71 libero72 libero73 libero74 libero75
 | integer | stato nrev iddocrevisionato | idultimorevisionato giorniscadenza libero32 | libero33 libero34 libero35 | libero36
 | float | libero23 libero24 libero25 libero26 libero27 libero28 libero29 libero30 | libero31 libero86 libero87 libero88 libero89 libero90 libero91 libero92 | libero93 libero94 libero95 libero96 libero97 libero98 libero99 libero100 | libero101 libero102 libero103 libero104 libero105 libero106
 | bool | libero32 libero33 libero34 libero35 libero36 libero23 libero24 libero25 libero26 | libero27 libero28 libero29 libero30 libero31 libero86 libero87 libero88 libero89 | libero90 libero91 libero92 libero93 libero94 libero95 libero96 libero97 libero98 | libero99 libero100 libero101 libero102 libero103 libero104 libero105 libero106
 | date | datadoc dataemergenza dataspedizione datascadenza libero18 | libero19 libero20 libero21 libero22 libero76 | libero77 libero78 libero79 libero80 libero81 | libero82 libero83 libero84 libero85
 | datetime | libero18 libero19 libero20 libero21 | libero22 libero76 libero77 libero78 | libero79 libero80 libero81 libero82 | libero83 libero84 libero85
Lista (combobox) | text | oggetto supporto numeroemergenza interlocutore protocollomittente ubicazionestanza ubicazionescaffale ubicazionepalchetto ubicazioneripiano ubicazioneraccoglitore libero1 libero2 libero3 libero4 libero5 | libero6 libero7 libero8 libero9 libero10 libero11 libero12 libero13 libero14 libero15 libero16 libero17 libero43 libero44 libero45 | libero46 libero47 libero48 libero49 libero50 libero51 libero52 libero53 libero54 libero55 libero56 libero57 libero58 libero59 libero60 | libero61 libero62 libero63 libero64 libero65 libero66 libero67 libero68 libero69 libero70 libero71 libero72 libero73 libero74 libero75
 | integer | stato nrev iddocrevisionato | idultimorevisionato giorniscadenza libero32 | libero33 libero34 libero35 | libero36
 | float | libero23 libero24 libero25 libero26 libero27 libero28 libero29 libero30 | libero31 libero86 libero87 libero88 libero89 libero90 libero91 libero92 | libero93 libero94 libero95 libero96 libero97 libero98 libero99 libero100 | libero101 libero102 libero103 libero104 libero105 libero106
 | date | datadoc dataemergenza dataspedizione datascadenza libero18 | libero19 libero20 libero21 libero22 libero76 | libero77 libero78 libero79 libero80 libero81 | libero82 libero83 libero84 libero85
 | datetime | libero18 libero19 libero20 libero21 | libero22 libero76 libero77 libero78 | libero79 libero80 libero81 libero82 | libero83 libero84 libero85
Memo (memobox) | text | oggetto supporto numeroemergenza interlocutore protocollomittente ubicazionestanza ubicazionescaffale ubicazionepalchetto ubicazioneripiano ubicazioneraccoglitore libero1 libero2 libero3 libero4 libero5 | libero6 libero7 libero8 libero9 libero10 libero11 libero12 libero13 libero14 libero15 libero16 libero17 libero43 libero44 libero45 | libero46 libero47 libero48 libero49 libero50 libero51 libero52 libero53 libero54 libero55 libero56 libero57 libero58 libero59 libero60 | libero61 libero62 libero63 libero64 libero65 libero66 libero67 libero68 libero69 libero70 libero71 libero72 libero73 libero74 libero75
 | memo | annotazioni libero37 | libero38 libero107 | libero108 libero109 | libero110
 | xml | annotazioni libero37 | libero38 libero107 | libero108 libero109 | libero110
Annotazioni (annotation) | xml | annotazioni libero37 | libero38 libero107 | libero108 libero109 | libero110
Data (date) | date | datadoc dataemergenza dataspedizione datascadenza libero18 | libero19 libero20 libero21 libero22 libero76 | libero77 libero78 libero79 libero80 libero81 | libero82 libero83 libero84 libero85
Data e ora (datetime) | datetime | libero18 libero19 libero20 libero21 | libero22 libero76 libero77 libero78 | libero79 libero80 libero81 libero82 | libero83 libero84 libero85
Città (city) | city | libero1 libero2 libero3 libero4 libero5 libero6 libero7 libero8 libero9 libero10 libero11 libero12 libero13 | libero14 libero15 libero16 libero17 libero43 libero44 libero45 libero46 libero47 libero48 libero49 libero50 libero51 | libero52 libero53 libero54 libero55 libero56 libero57 libero58 libero59 libero60 libero61 libero62 libero63 libero64 | libero65 libero66 libero67 libero68 libero69 libero70 libero71 libero72 libero73 libero74 libero75
Operatore (user) | user | responsabile libero1 libero2 libero3 | libero4 libero5 libero43 libero44 | libero45 libero46 libero47 libero48 | libero49 libero50 libero51 libero52
Lista di operatori (userlist) | userlist | listadistribuzione libero37 | libero38 libero107 | libero108 libero109 | libero110
Lista di elementi dell'organizzazione (organizationlist) | userlist | listadistribuzione libero37 | libero38 libero107 | libero108 libero109 | libero110
Ruolo (role) | role | libero1 libero2 libero3 libero4 | libero5 libero43 libero44 libero45 | libero46 libero47 libero48 libero49 | libero50 libero51 libero52
Ufficio (office) | office | ufficioprotocollo ufficiocompetenza libero1 libero2 libero3 | libero4 libero5 libero43 libero44 libero45 | libero46 libero47 libero48 libero49 libero50 | libero51 libero52
Anagrafica (client) | client | mittente libero1 libero2 libero3 | libero4 libero5 libero43 libero44 | libero45 libero46 libero47 libero48 | libero49 libero50 libero51 libero52
Lista di anagrafica (clientlist) | clientlist | altrimittenti libero39 | libero40 libero41 | libero42 libero42 |
Documento (document) | doc | libero1 libero2 libero3 libero4 | libero5 libero43 libero44 libero45 | libero46 libero47 libero48 libero49 | libero50 libero51 libero52
Lista di documenti (documentlist) | doclist | libero37 libero38 | libero107 libero108 | libero109 libero110 |
Firma (sign) | sign | firma1 firma2 firma3 | firma4 firma5 firma6 | firma7 firma8 firma9 | firma10
Info firma (signinfo) | signinfo | creazione | archiviazione | blocco |
Etichetta condizionale (boolinfo) | boolinfo | annullato | riservato | revisionato | originaprocesso
Lista processi (processlist) | processlist | processi | processi | processi |
Lista fascicoli (folderlist) | folderlist | pratiche | pratiche | pratiche |
Tabella (table) | xml | annotazioni libero37 | libero38 libero107 | libero108 libero109 | libero110

Controlli per Protocollo in uscita

Controllo | Tipo | Campi
Contenitore (container) | xml | annotazioni libero37 | libero38 libero107 | libero108 libero109 | libero110
Classificazione (classification) | classification | classificazione | classificazione | classificazione |
Numero documento (docnumber) | docnumber | numerodoc | numerodoc | numerodoc |
Casella di testo (textbox) | text | oggetto supporto numeroemergenza interlocutore ubicazionestanza ubicazionescaffale ubicazionepalchetto ubicazioneripiano ubicazioneraccoglitore libero1 libero2 libero3 libero4 libero5 libero6 | libero7 libero8 libero9 libero10 libero11 libero12 libero13 libero14 libero15 libero16 libero17 libero43 libero44 libero45 libero46 | libero47 libero48 libero49 libero50 libero51 libero52 libero53 libero54 libero55 libero56 libero57 libero58 libero59 libero60 libero61 | libero62 libero63 libero64 libero65 libero66 libero67 libero68 libero69 libero70 libero71 libero72 libero73 libero74 libero75
 | integer | tipoinvio stato nrev | iddocrevisionato idultimorevisionato libero32 | libero33 libero34 libero35 | libero36
 | float | libero23 libero24 libero25 libero26 libero27 libero28 libero29 libero30 | libero31 libero86 libero87 libero88 libero89 libero90 libero91 libero92 | libero93 libero94 libero95 libero96 libero97 libero98 libero99 libero100 | libero101 libero102 libero103 libero104 libero105 libero106
Casella di controllo (checkbox) | bool | libero32 libero33 libero34 libero35 libero36 libero23 libero24 libero25 libero26 | libero27 libero28 libero29 libero30 libero31 libero86 libero87 libero88 libero89 | libero90 libero91 libero92 libero93 libero94 libero95 libero96 libero97 libero98 | libero99 libero100 libero101 libero102 libero103 libero104 libero105 libero106
Gruppo di opzioni (optionbutton) | text | oggetto supporto numeroemergenza interlocutore ubicazionestanza ubicazionescaffale ubicazionepalchetto ubicazioneripiano ubicazioneraccoglitore libero1 libero2 libero3 libero4 libero5 libero6 | libero7 libero8 libero9 libero10 libero11 libero12 libero13 libero14 libero15 libero16 libero17 libero43 libero44 libero45 libero46 | libero47 libero48 libero49 libero50 libero51 libero52 libero53 libero54 libero55 libero56 libero57 libero58 libero59 libero60 libero61 | libero62 libero63 libero64 libero65 libero66 libero67 libero68 libero69 libero70 libero71 libero72 libero73 libero74 libero75
 | integer | tipoinvio stato nrev | iddocrevisionato idultimorevisionato libero32 | libero33 libero34 libero35 | libero36
 | float | libero23 libero24 libero25 libero26 libero27 libero28 libero29 libero30 | libero31 libero86 libero87 libero88 libero89 libero90 libero91 libero92 | libero93 libero94 libero95 libero96 libero97 libero98 libero99 libero100 | libero101 libero102 libero103 libero104 libero105 libero106
 | bool | libero32 libero33 libero34 libero35 libero36 libero23 libero24 libero25 libero26 | libero27 libero28 libero29 libero30 libero31 libero86 libero87 libero88 libero89 | libero90 libero91 libero92 libero93 libero94 libero95 libero96 libero97 libero98 | libero99 libero100 libero101 libero102 libero103 libero104 libero105 libero106
 | date | datadoc dataemergenza libero18 libero19 libero20 | libero21 libero22 libero76 libero77 libero78 | libero79 libero80 libero81 libero82 libero83 | libero84 libero85
 | datetime | datapartenza libero18 libero19 libero20 | libero21 libero22 libero76 libero77 | libero78 libero79 libero80 libero81 | libero82 libero83 libero84 libero85
Lista (combobox) | text | oggetto supporto numeroemergenza interlocutore ubicazionestanza ubicazionescaffale ubicazionepalchetto ubicazioneripiano ubicazioneraccoglitore libero1 libero2 libero3 libero4 libero5 libero6 | libero7 libero8 libero9 libero10 libero11 libero12 libero13 libero14 libero15 libero16 libero17 libero43 libero44 libero45 libero46 | libero47 libero48 libero49 libero50 libero51 libero52 libero53 libero54 libero55 libero56 libero57 libero58 libero59 libero60 libero61 | libero62 libero63 libero64 libero65 libero66 libero67 libero68 libero69 libero70 libero71 libero72 libero73 libero74 libero75
 | integer | tipoinvio stato nrev | iddocrevisionato idultimorevisionato libero32 | libero33 libero34 libero35 | libero36
 | float | libero23 libero24 libero25 libero26 libero27 libero28 libero29 libero30 | libero31 libero86 libero87 libero88 libero89 libero90 libero91 libero92 | libero93 libero94 libero95 libero96 libero97 libero98 libero99 libero100 | libero101 libero102 libero103 libero104 libero105 libero106
 | date | datadoc dataemergenza libero18 libero19 libero20 | libero21 libero22 libero76 libero77 libero78 | libero79 libero80 libero81 libero82 libero83 | libero84 libero85
 | datetime | datapartenza libero18 libero19 libero20 | libero21 libero22 libero76 libero77 | libero78 libero79 libero80 libero81 | libero82 libero83 libero84 libero85
Memo (memobox) | text | oggetto supporto numeroemergenza interlocutore ubicazionestanza ubicazionescaffale ubicazionepalchetto ubicazioneripiano ubicazioneraccoglitore libero1 libero2 libero3 libero4 libero5 libero6 | libero7 libero8 libero9 libero10 libero11 libero12 libero13 libero14 libero15 libero16 libero17 libero43 libero44 libero45 libero46 | libero47 libero48 libero49 libero50 libero51 libero52 libero53 libero54 libero55 libero56 libero57 libero58 libero59 libero60 libero61 | libero62 libero63 libero64 libero65 libero66 libero67 libero68 libero69 libero70 libero71 libero72 libero73 libero74 libero75
 | memo | annotazioni libero37 | libero38 libero107 | libero108 libero109 | libero110
 | xml | annotazioni libero37 | libero38 libero107 | libero108 libero109 | libero110
Annotazioni (annotation) | xml | annotazioni libero37 | libero38 libero107 | libero108 libero109 | libero110
Data (date) | date | datadoc dataemergenza libero18 libero19 libero20 | libero21 libero22 libero76 libero77 libero78 | libero79 libero80 libero81 libero82 libero83 | libero84 libero85
Data e ora (datetime) | datetime | datapartenza libero18 libero19 libero20 | libero21 libero22 libero76 libero77 | libero78 libero79 libero80 libero81 | libero82 libero83 libero84 libero85
Città (city) | city | libero1 libero2 libero3 libero4 libero5 libero6 libero7 libero8 libero9 libero10 libero11 libero12 libero13 | libero14 libero15 libero16 libero17 libero43 libero44 libero45 libero46 libero47 libero48 libero49 libero50 libero51 | libero52 libero53 libero54 libero55 libero56 libero57 libero58 libero59 libero60 libero61 libero62 libero63 libero64 | libero65 libero66 libero67 libero68 libero69 libero70 libero71 libero72 libero73 libero74 libero75
Operatore (user) | user | responsabile libero1 libero2 libero3 | libero4 libero5 libero43 libero44 | libero45 libero46 libero47 libero48 | libero49 libero50 libero51 libero52
Lista di operatori (userlist) | userlist | listadistribuzione libero37 | libero38 libero107 | libero108 libero109 | libero110
Lista di elementi dell'organizzazione (organizationlist) | userlist | listadistribuzione libero37 | libero38 libero107 | libero108 libero109 | libero110
Ruolo (role) | role | libero1 libero2 libero3 libero4 | libero5 libero43 libero44 libero45 | libero46 libero47 libero48 libero49 | libero50 libero51 libero52
Ufficio (office) | office | ufficioprotocollo ufficiocompetenza libero1 libero2 libero3 | libero4 libero5 libero43 libero44 libero45 | libero46 libero47 libero48 libero49 libero50 | libero51 libero52
Anagrafica (client) | client | destinatario libero1 libero2 libero3 | libero4 libero5 libero43 libero44 | libero45 libero46 libero47 libero48 | libero49 libero50 libero51 libero52
Lista di anagrafica (clientlist) | clientlist | altridestinatari destinataricc | libero39 libero40 | libero41 libero42 |
Documento (document) | doc | risposta libero1 libero2 libero3 | libero4 libero5 libero43 libero44 | libero45 libero46 libero47 libero48 | libero49 libero50 libero51 libero52
Lista di documenti (documentlist) | doclist | libero37 libero38 | libero107 libero108 | libero109 libero110 |
Firma (sign) | sign | firma1 firma2 firma3 | firma4 firma5 firma6 | firma7 firma8 firma9 | firma10
Info firma (signinfo) | signinfo | creazione | archiviazione | blocco |
Etichetta condizionale (boolinfo) | boolinfo | annullato | riservato | revisionato | originaprocesso
Lista processi (processlist) | processlist | processi | processi | processi |
Lista fascicoli (folderlist) | folderlist | pratiche | pratiche | pratiche |
Messaggio (message) | message | messaggio | messaggio | messaggio |
Tabella (table) | xml | annotazioni libero37 | libero38 libero107 | libero108 libero109 | libero110

Controlli per Documenti

Controllo | Tipo | Campi
Contenitore (container) | xml | annotazioni libero37 | libero38 libero107 | libero108 libero109 | libero110
Classificazione (classification) | classification | classificazione | classificazione | classificazione |
Numero documento (docnumber) | docnumber | numerodoc | numerodoc | numerodoc |
Casella di testo (textbox) | text | oggetto supporto numeroemergenza interlocutore ubicazionestanza ubicazionescaffale ubicazionepalchetto ubicazioneripiano ubicazioneraccoglitore libero1 libero2 libero3 libero4 libero5 libero6 | libero7 libero8 libero9 libero10 libero11 libero12 libero13 libero14 libero15 libero16 libero17 libero43 libero44 libero45 libero46 | libero47 libero48 libero49 libero50 libero51 libero52 libero53 libero54 libero55 libero56 libero57 libero58 libero59 libero60 libero61 | libero62 libero63 libero64 libero65 libero66 libero67 libero68 libero69 libero70 libero71 libero72 libero73 libero74 libero75
 | integer | stato nrev iddocrevisionato | idultimorevisionato libero32 libero33 | libero34 libero35 libero36 |
 | float | libero23 libero24 libero25 libero26 libero27 libero28 libero29 libero30 | libero31 libero86 libero87 libero88 libero89 libero90 libero91 libero92 | libero93 libero94 libero95 libero96 libero97 libero98 libero99 libero100 | libero101 libero102 libero103 libero104 libero105 libero106
Casella di controllo (checkbox) | bool | libero32 libero33 libero34 libero35 libero36 libero23 libero24 libero25 libero26 | libero27 libero28 libero29 libero30 libero31 libero86 libero87 libero88 libero89 | libero90 libero91 libero92 libero93 libero94 libero95 libero96 libero97 libero98 | libero99 libero100 libero101 libero102 libero103 libero104 libero105 libero106
Gruppo di opzioni (optionbutton) | text | oggetto supporto numeroemergenza interlocutore ubicazionestanza ubicazionescaffale ubicazionepalchetto ubicazioneripiano ubicazioneraccoglitore libero1 libero2 libero3 libero4 libero5 libero6 | libero7 libero8 libero9 libero10 libero11 libero12 libero13 libero14 libero15 libero16 libero17 libero43 libero44 libero45 libero46 | libero47 libero48 libero49 libero50 libero51 libero52 libero53 libero54 libero55 libero56 libero57 libero58 libero59 libero60 libero61 | libero62 libero63 libero64 libero65 libero66 libero67 libero68 libero69 libero70 libero71 libero72 libero73 libero74 libero75
 | integer | stato nrev iddocrevisionato | idultimorevisionato libero32 libero33 | libero34 libero35 libero36 |
 | float | libero23 libero24 libero25 libero26 libero27 libero28 libero29 libero30 | libero31 libero86 libero87 libero88 libero89 libero90 libero91 libero92 | libero93 libero94 libero95 libero96 libero97 libero98 libero99 libero100 | libero101 libero102 libero103 libero104 libero105 libero106
 | bool | libero32 libero33 libero34 libero35 libero36 libero23 libero24 libero25 libero26 | libero27 libero28 libero29 libero30 libero31 libero86 libero87 libero88 libero89 | libero90 libero91 libero92 libero93 libero94 libero95 libero96 libero97 libero98 | libero99 libero100 libero101 libero102 libero103 libero104 libero105 libero106
 | date | datadoc dataemergenza libero18 libero19 libero20 | libero21 libero22 libero76 libero77 libero78 | libero79 libero80 libero81 libero82 libero83 | libero84 libero85
 | datetime | libero18 libero19 libero20 libero21 | libero22 libero76 libero77 libero78 | libero79 libero80 libero81 libero82 | libero83 libero84 libero85
Lista (combobox) | text | oggetto supporto numeroemergenza interlocutore ubicazionestanza ubicazionescaffale ubicazionepalchetto ubicazioneripiano ubicazioneraccoglitore libero1 libero2 libero3 libero4 libero5 libero6 | libero7 libero8 libero9 libero10 libero11 libero12 libero13 libero14 libero15 libero16 libero17 libero43 libero44 libero45 libero46 | libero47 libero48 libero49 libero50 libero51 libero52 libero53 libero54 libero55 libero56 libero57 libero58 libero59 libero60 libero61 | libero62 libero63 libero64 libero65 libero66 libero67 libero68 libero69 libero70 libero71 libero72 libero73 libero74 libero75
 | integer | stato nrev iddocrevisionato | idultimorevisionato libero32 libero33 | libero34 libero35 libero36 |
 | float | libero23 libero24 libero25 libero26 libero27 libero28 libero29 libero30 | libero31 libero86 libero87 libero88 libero89 libero90 libero91 libero92 | libero93 libero94 libero95 libero96 libero97 libero98 libero99 libero100 | libero101 libero102 libero103 libero104 libero105 libero106
 | date | datadoc dataemergenza libero18 libero19 libero20 | libero21 libero22 libero76 libero77 libero78 | libero79 libero80 libero81 libero82 libero83 | libero84 libero85
 | datetime | libero18 libero19 libero20 libero21 | libero22 libero76 libero77 libero78 | libero79 libero80 libero81 libero82 | libero83 libero84 libero85
Memo (memobox) | text | oggetto supporto numeroemergenza interlocutore ubicazionestanza ubicazionescaffale ubicazionepalchetto ubicazioneripiano ubicazioneraccoglitore libero1 libero2 libero3 libero4 libero5 libero6 | libero7 libero8 libero9 libero10 libero11 libero12 libero13 libero14 libero15 libero16 libero17 libero43 libero44 libero45 libero46 | libero47 libero48 libero49 libero50 libero51 libero52 libero53 libero54 libero55 libero56 libero57 libero58 libero59 libero60 libero61 | libero62 libero63 libero64 libero65 libero66 libero67 libero68 libero69 libero70 libero71 libero72 libero73 libero74 libero75
 | memo | annotazioni libero37 | libero38 libero107 | libero108 libero109 | libero110
 | xml | annotazioni libero37 | libero38 libero107 | libero108 libero109 | libero110
Annotazioni (annotation) | xml | annotazioni libero37 | libero38 libero107 | libero108 libero109 | libero110
Data (date) | date | datadoc dataemergenza libero18 libero19 libero20 | libero21 libero22 libero76 libero77 libero78 | libero79 libero80 libero81 libero82 libero83 | libero84 libero85
Data e ora (datetime) | datetime | libero18 libero19 libero20 libero21 | libero22 libero76 libero77 libero78 | libero79 libero80 libero81 libero82 | libero83 libero84 libero85
Città (city) | city | libero1 libero2 libero3 libero4 libero5 libero6 libero7 libero8 libero9 libero10 libero11 libero12 libero13 | libero14 libero15 libero16 libero17 libero43 libero44 libero45 libero46 libero47 libero48 libero49 libero50 libero51 | libero52 libero53 libero54 libero55 libero56 libero57 libero58 libero59 libero60 libero61 libero62 libero63 libero64 | libero65 libero66 libero67 libero68 libero69 libero70 libero71 libero72 libero73 libero74 libero75
Operatore (user) | user | responsabile libero1 libero2 libero3 | libero4 libero5 libero43 libero44 | libero45 libero46 libero47 libero48 | libero49 libero50 libero51 libero52
Lista di operatori (userlist) | userlist | listadistribuzione libero37 | libero38 libero107 | libero108 libero109 | libero110
Lista di elementi dell'organizzazione (organizationlist) | userlist | listadistribuzione libero37 | libero38 libero107 | libero108 libero109 | libero110
Ruolo (role) | role | libero1 libero2 libero3 libero4 | libero5 libero43 libero44 libero45 | libero46 libero47 libero48 libero49 | libero50 libero51 libero52
Ufficio (office) | office | ufficioprotocollo ufficiocompetenza libero1 libero2 libero3 | libero4 libero5 libero43 libero44 libero45 | libero46 libero47 libero48 libero49 libero50 | libero51 libero52
Anagrafica (client) | client | corrispondente libero1 libero2 libero3 | libero4 libero5 libero43 libero44 | libero45 libero46 libero47 libero48 | libero49 libero50 libero51 libero52
Lista di anagrafica (clientlist) | clientlist | altricorrispondenti libero39 | libero40 libero41 | libero42 libero42 |
Documento (document) | doc | libero1 libero2 libero3 libero4 | libero5 libero43 libero44 libero45 | libero46 libero47 libero48 libero49 | libero50 libero51 libero52
Lista di documenti (documentlist) | doclist | libero37 libero38 | libero107 libero108 | libero109 libero110 |
Firma (sign) | sign | firma1 firma2 firma3 | firma4 firma5 firma6 | firma7 firma8 firma9 | firma10
Info firma (signinfo) | signinfo | creazione | archiviazione | blocco |
Etichetta condizionale (boolinfo) | boolinfo | annullato | riservato | revisionato | originaprocesso
Lista processi (processlist) | processlist | processi | processi | processi |
Lista fascicoli (folderlist) | folderlist | pratiche | pratiche | pratiche |
Tabella (table) | xml | annotazioni libero37 | libero38 libero107 | libero108 libero109 | libero110

Controlli per Protocollo interno

Controllo | Tipo | Campi
Contenitore (container) | xml | annotazioni libero37 | libero38 libero107 | libero108 libero109 | libero110
Classificazione (classification) | classification | classificazione | classificazione | classificazione |
Numero documento (docnumber) | docnumber | numerodoc | numerodoc | numerodoc |
Casella di testo (textbox) | text | oggetto supporto numeroemergenza interlocutore ubicazionestanza ubicazionescaffale ubicazionepalchetto ubicazioneripiano ubicazioneraccoglitore libero2 libero3 libero4 libero5 libero6 libero7 | libero8 libero9 libero10 libero11 libero12 libero13 libero14 libero15 libero16 libero17 libero43 libero44 libero45 libero46 libero47 | libero48 libero49 libero50 libero51 libero52 libero53 libero54 libero55 libero56 libero57 libero58 libero59 libero60 libero61 libero62 | libero63 libero64 libero65 libero66 libero67 libero68 libero69 libero70 libero71 libero72 libero73 libero74 libero75
 | integer | stato nrev iddocrevisionato | idultimorevisionato libero32 libero33 | libero34 libero35 libero36 |
 | float | libero23 libero24 libero25 libero26 libero27 libero28 libero29 libero30 | libero31 libero86 libero87 libero88 libero89 libero90 libero91 libero92 | libero93 libero94 libero95 libero96 libero97 libero98 libero99 libero100 | libero101 libero102 libero103 libero104 libero105 libero106
Casella di controllo (checkbox) | bool | libero32 libero33 libero34 libero35 libero36 libero23 libero24 libero25 libero26 | libero27 libero28 libero29 libero30 libero31 libero86 libero87 libero88 libero89 | libero90 libero91 libero92 libero93 libero94 libero95 libero96 libero97 libero98 | libero99 libero100 libero101 libero102 libero103 libero104 libero105 libero106
Gruppo di opzioni (optionbutton) | text | oggetto supporto numeroemergenza interlocutore ubicazionestanza ubicazionescaffale ubicazionepalchetto ubicazioneripiano ubicazioneraccoglitore libero2 libero3 libero4 libero5 libero6 libero7 | libero8 libero9 libero10 libero11 libero12 libero13 libero14 libero15 libero16 libero17 libero43 libero44 libero45 libero46 libero47 | libero48 libero49 libero50 libero51 libero52 libero53 libero54 libero55 libero56 libero57 libero58 libero59 libero60 libero61 libero62 | libero63 libero64 libero65 libero66 libero67 libero68 libero69 libero70 libero71 libero72 libero73 libero74 libero75
 | integer | stato nrev iddocrevisionato | idultimorevisionato libero32 libero33 | libero34 libero35 libero36 |
 | float | libero23 libero24 libero25 libero26 libero27 libero28 libero29 libero30 | libero31 libero86 libero87 libero88 libero89 libero90 libero91 libero92 | libero93 libero94 libero95 libero96 libero97 libero98 libero99 libero100 | libero101 libero102 libero103 libero104 libero105 libero106
 | bool | libero32 libero33 libero34 libero35 libero36 libero23 libero24 libero25 libero26 | libero27 libero28 libero29 libero30 libero31 libero86 libero87 libero88 libero89 | libero90 libero91 libero92 libero93 libero94 libero95 libero96 libero97 libero98 | libero99 libero100 libero101 libero102 libero103 libero104 libero105 libero106
 | date | datadoc dataemergenza libero18 libero19 libero20 | libero21 libero22 libero76 libero77 libero78 | libero79 libero80 libero81 libero82 libero83 | libero84 libero85
 | datetime | libero18 libero19 libero20 libero21 | libero22 libero76 libero77 libero78 | libero79 libero80 libero81 libero82 | libero83 libero84 libero85
Lista (combobox) | text | oggetto supporto numeroemergenza interlocutore ubicazionestanza ubicazionescaffale ubicazionepalchetto ubicazioneripiano ubicazioneraccoglitore libero2 libero3 libero4 libero5 libero6 libero7 | libero8 libero9 libero10 libero11 libero12 libero13 libero14 libero15 libero16 libero17 libero43 libero44 libero45 libero46 libero47 | libero48 libero49 libero50 libero51 libero52 libero53 libero54 libero55 libero56 libero57 libero58 libero59 libero60 libero61 libero62 | libero63 libero64 libero65 libero66 libero67 libero68 libero69 libero70 libero71 libero72 libero73 libero74 libero75
 | integer | stato nrev iddocrevisionato | idultimorevisionato libero32 libero33 | libero34 libero35 libero36 |
 | float | libero23 libero24 libero25 libero26 libero27 libero28 libero29 libero30 | libero31 libero86 libero87 libero88 libero89 libero90 libero91 libero92 | libero93 libero94 libero95 libero96 libero97 libero98 libero99 libero100 | libero101 libero102 libero103 libero104 libero105 libero106
 | date | datadoc dataemergenza libero18 libero19 libero20 | libero21 libero22 libero76 libero77 libero78 | libero79 libero80 libero81 libero82 libero83 | libero84 libero85
 | datetime | libero18 libero19 libero20 libero21 | libero22 libero76 libero77 libero78 | libero79 libero80 libero81 libero82 | libero83 libero84 libero85
Memo (memobox) | text | oggetto supporto numeroemergenza interlocutore ubicazionestanza ubicazionescaffale ubicazionepalchetto ubicazioneripiano ubicazioneraccoglitore libero2 libero3 libero4 libero5 libero6 libero7 | libero8 libero9 libero10 libero11 libero12 libero13 libero14 libero15 libero16 libero17 libero43 libero44 libero45 libero46 libero47 | libero48 libero49 libero50 libero51 libero52 libero53 libero54 libero55 libero56 libero57 libero58 libero59 libero60 libero61 libero62 | libero63 libero64 libero65 libero66 libero67 libero68 libero69 libero70 libero71 libero72 libero73 libero74 libero75
 | memo | annotazioni libero37 | libero38 libero107 | libero108 libero109 | libero110
 | xml | annotazioni libero37 | libero38 libero107 | libero108 libero109 | libero110
Annotazioni (annotation) | xml | annotazioni libero37 | libero38 libero107 | libero108 libero109 | libero110
Data (date) | date | datadoc dataemergenza libero18 libero19 libero20 | libero21 libero22 libero76 libero77 libero78 | libero79 libero80 libero81 libero82 libero83 | libero84 libero85
Data e ora (datetime) | datetime | libero18 libero19 libero20 libero21 | libero22 libero76 libero77 libero78 | libero79 libero80 libero81 libero82 | libero83 libero84 libero85
Città (city) | city | libero2 libero3 libero4 libero5 libero6 libero7 libero8 libero9 libero10 libero11 libero12 libero13 libero14 | libero15 libero16 libero17 libero43 libero44 libero45 libero46 libero47 libero48 libero49 libero50 libero51 libero52 | libero53 libero54 libero55 libero56 libero57 libero58 libero59 libero60 libero61 libero62 libero63 libero64 libero65 | libero66 libero67 libero68 libero69 libero70 libero71 libero72 libero73 libero74 libero75
Operatore (user) | user | responsabile libero2 libero3 libero4 | libero5 libero43 libero44 libero45 | libero46 libero47 libero48 libero49 | libero50 libero51 libero52
Lista di operatori (userlist) | userlist | listadistribuzione libero37 | libero38 libero107 | libero108 libero109 | libero110
Lista di elementi dell'organizzazione (organizationlist) | userlist | listadistribuzione libero37 | libero38 libero107 | libero108 libero109 | libero110
Ruolo (role) | role | libero2 libero3 libero4 libero5 | libero43 libero44 libero45 libero46 | libero47 libero48 libero49 libero50 | libero51 libero52
Ufficio (office) | office | ufficioprotocollo ufficiocompetenza libero2 libero3 | libero4 libero5 libero43 libero44 | libero45 libero46 libero47 libero48 | libero49 libero50 libero51 libero52
Anagrafica (client) | client | destinatario (corrispondente) mittente (libero1) libero2 libero3 | libero4 libero5 libero43 libero44 | libero45 libero46 libero47 libero48 | libero49 libero50 libero51 libero52
Lista di anagrafica (clientlist) | clientlist | altricorrispondenti libero39 | libero40 libero41 | libero42 libero42 |
Documento (document) | doc | libero2 libero3 libero4 libero5 | libero43 libero44 libero45 libero46 | libero47 libero48 libero49 libero50 | libero51 libero52
Lista di documenti (documentlist) | doclist | libero37 libero38 | libero107 libero108 | libero109 libero110 |
Firma (sign) | sign | firma1 firma2 firma3 | firma4 firma5 firma6 | firma7 firma8 firma9 | firma10
Info firma (signinfo) | signinfo | creazione | archiviazione | blocco |
Etichetta condizionale (boolinfo) | boolinfo | annullato | riservato | revisionato | originaprocesso
Lista processi (processlist) | processlist | processi | processi | processi |
Lista fascicoli (folderlist) | folderlist | pratiche | pratiche | pratiche |
Tabella (table) | xml | annotazioni libero37 | libero38 libero107 | libero108 libero109 | libero110

Controlli per Fascicoli

Controllo | Tipo | Campi
Contenitore (container) | xml | annotazioni libero37 | libero38 libero107 | libero108 libero109 | libero110
Classificazione (classification) | classification | classificazione | classificazione | classificazione |
Numero documento (docnumber) | docnumber | numerodoc | numerodoc | numerodoc |
Casella di testo (textbox) | text | oggetto interlocutore ubicazionestanza ubicazionescaffale ubicazionepalchetto ubicazioneripiano ubicazioneraccoglitore libero1 libero2 libero3 libero4 libero5 libero6 libero7 libero8 | libero9 libero10 libero11 libero12 libero13 libero14 libero15 libero16 libero17 libero43 libero44 libero45 libero46 libero47 libero48 | libero49 libero50 libero51 libero52 libero53 libero54 libero55 libero56 libero57 libero58 libero59 libero60 libero61 libero62 libero63 | libero64 libero65 libero66 libero67 libero68 libero69 libero70 libero71 libero72 libero73 libero74 libero75
 | integer | stato libero32 | libero33 libero34 | libero35 libero36 |
 | float | libero23 libero24 libero25 libero26 libero27 libero28 libero29 libero30 | libero31 libero86 libero87 libero88 libero89 libero90 libero91 libero92 | libero93 libero94 libero95 libero96 libero97 libero98 libero99 libero100 | libero101 libero102 libero103 libero104 libero105 libero106
Casella di controllo (checkbox) | bool | libero32 libero33 libero34 libero35 libero36 libero23 libero24 libero25 libero26 | libero27 libero28 libero29 libero30 libero31 libero86 libero87 libero88 libero89 | libero90 libero91 libero92 libero93 libero94 libero95 libero96 libero97 libero98 | libero99 libero100 libero101 libero102 libero103 libero104 libero105 libero106
Gruppo di opzioni (optionbutton) | text | oggetto interlocutore ubicazionestanza ubicazionescaffale ubicazionepalchetto ubicazioneripiano ubicazioneraccoglitore libero1 libero2 libero3 libero4 libero5 libero6 libero7 libero8 | libero9 libero10 libero11 libero12 libero13 libero14 libero15 libero16 libero17 libero43 libero44 libero45 libero46 libero47 libero48 | libero49 libero50 libero51 libero52 libero53 libero54 libero55 libero56 libero57 libero58 libero59 libero60 libero61 libero62 libero63 | libero64 libero65 libero66 libero67 libero68 libero69 libero70 libero71 libero72 libero73 libero74 libero75
 | integer | stato libero32 | libero33 libero34 | libero35 libero36 |
 | float | libero23 libero24 libero25 libero26 libero27 libero28 libero29 libero30 | libero31 libero86 libero87 libero88 libero89 libero90 libero91 libero92 | libero93 libero94 libero95 libero96 libero97 libero98 libero99 libero100 | libero101 libero102 libero103 libero104 libero105 libero106
 | bool | libero32 libero33 libero34 libero35 libero36 libero23 libero24 libero25 libero26 | libero27 libero28 libero29 libero30 libero31 libero86 libero87 libero88 libero89 | libero90 libero91 libero92 libero93 libero94 libero95 libero96 libero97 libero98 | libero99 libero100 libero101 libero102 libero103 libero104 libero105 libero106
 | date | datadoc datascadenza libero18 libero19 libero20 | libero21 libero22 libero76 libero77 libero78 | libero79 libero80 libero81 libero82 libero83 | libero84 libero85
 | datetime | libero18 libero19 libero20 libero21 | libero22 libero76 libero77 libero78 | libero79 libero80 libero81 libero82 | libero83 libero84 libero85
Lista (combobox) | text | oggetto interlocutore ubicazionestanza ubicazionescaffale ubicazionepalchetto ubicazioneripiano ubicazioneraccoglitore libero1 libero2 libero3 libero4 libero5 libero6 libero7 libero8 | libero9 libero10 libero11 libero12 libero13 libero14 libero15 libero16 libero17 libero43 libero44 libero45 libero46 libero47 libero48 | libero49 libero50 libero51 libero52 libero53 libero54 libero55 libero56 libero57 libero58 libero59 libero60 libero61 libero62 libero63 | libero64 libero65 libero66 libero67 libero68 libero69 libero70 libero71 libero72 libero73 libero74 libero75
 | integer | stato libero32 | libero33 libero34 | libero35 libero36 |
 | float | libero23 libero24 libero25 libero26 libero27 libero28 libero29 libero30 | libero31 libero86 libero87 libero88 libero89 libero90 libero91 libero92 | libero93 libero94 libero95 libero96 libero97 libero98 libero99 libero100 | libero101 libero102 libero103 libero104 libero105 libero106
 | date | datadoc datascadenza libero18 libero19 libero20 | libero21 libero22 libero76 libero77 libero78 | libero79 libero80 libero81 libero82 libero83 | libero84 libero85
 | datetime | libero18 libero19 libero20 libero21 | libero22 libero76 libero77 libero78 | libero79 libero80 libero81 libero82 | libero83 libero84 libero85
Memo (memobox) | text | oggetto interlocutore ubicazionestanza ubicazionescaffale ubicazionepalchetto ubicazioneripiano ubicazioneraccoglitore libero1 libero2 libero3 libero4 libero5 libero6 libero7 libero8 | libero9 libero10 libero11 libero12 libero13 libero14 libero15 libero16 libero17 libero43 libero44 libero45 libero46 libero47 libero48 | libero49 libero50 libero51 libero52 libero53 libero54 libero55 libero56 libero57 libero58 libero59 libero60 libero61 libero62 libero63 | libero64 libero65 libero66 libero67 libero68 libero69 libero70 libero71 libero72 libero73 libero74 libero75
 | memo | descrizione annotazioni | libero37 libero38 | libero107 libero108 | libero109 libero110
 | xml | annotazioni libero37 | libero38 libero107 | libero108 libero109 | libero110
Annotazioni (annotation) | xml | annotazioni libero37 | libero38 libero107 | libero108 libero109 | libero110
Data (date) | date | datadoc datascadenza libero18 libero19 libero20 | libero21 libero22 libero76 libero77 libero78 | libero79 libero80 libero81 libero82 libero83 | libero84 libero85
Data e ora (datetime) | datetime | libero18 libero19 libero20 libero21 | libero22 libero76 libero77 libero78 | libero79 libero80 libero81 libero82 | libero83 libero84 libero85
Città (city) | city | libero1 libero2 libero3 libero4 libero5 libero6 libero7 libero8 libero9 libero10 libero11 libero12 libero13 | libero14 libero15 libero16 libero17 libero43 libero44 libero45 libero46 libero47 libero48 libero49 libero50 libero51 | libero52 libero53 libero54 libero55 libero56 libero57 libero58 libero59 libero60 libero61 libero62 libero63 libero64 | libero65 libero66 libero67 libero68 libero69 libero70 libero71 libero72 libero73 libero74 libero75
Operatore (user) | user | responsabile libero1 libero2 libero3 | libero4 libero5 libero43 libero44 | libero45 libero46 libero47 libero48 | libero49 libero50 libero51 libero52
Lista di operatori (userlist) | userlist | listaaddetti libero37 | libero38 libero107 | libero108 libero109 | libero110
Lista di elementi dell'organizzazione (organizationlist) | userlist | listaaddetti libero37 | libero38 libero107 | libero108 libero109 | libero110
Ruolo (role) | role | libero1 libero2 libero3 libero4 | libero5 libero43 libero44 libero45 | libero46 libero47 libero48 libero49 | libero50 libero51 libero52
Ufficio (office) | office | ufficiocompetenza libero1 libero2 libero3 | libero4 libero5 libero43 libero44 | libero45 libero46 libero47 libero48 | libero49 libero50 libero51 libero52
Anagrafica (client) | client | richiedente libero1 libero2 libero3 | libero4 libero5 libero43 libero44 | libero45 libero46 libero47 libero48 | libero49 libero50 libero51 libero52
Lista di anagrafica (clientlist) | clientlist | libero39 | libero40 | libero41 | libero42
Documento (document) | doc | docapertura libero1 libero2 libero3 | libero4 libero5 libero43 libero44 | libero45 libero46 libero47 libero48 | libero49 libero50 libero51 libero52
Lista di documenti (documentlist) | doclist | documenti libero37 | libero38 libero107 | libero108 libero109 | libero110
Firma (sign) | sign | firma1 firma2 firma3 | firma4 firma5 firma6 | firma7 firma8 firma9 | firma10
Info firma (signinfo) | signinfo | creazione | archiviazione | blocco |
Etichetta condizionale (boolinfo) | boolinfo | annullato | riservato | originaprocesso |
Lista processi (processlist) | processlist | processi | processi | processi |
Lista fascicoli (folderlist) | folderlist | pratiche | pratiche | pratiche |
Tabella (table) | xml | annotazioni libero37 | libero38 libero107 | libero108 libero109 | libero110

Controlli per Anagrafica

Controllo | Tipo | Campi
Contenitore (container) | xml | annotazioni libero37 | libero38 libero107 | libero108 libero109 | libero110
Classificazione (classification) | classification | classificazione | classificazione | classificazione |
Casella di testo (textbox) | text | codice_anagrafica ragione_sociale cognome nome titolo denominazione tiposocieta sigla attivita indirizzo localita cap provincia comunenascita provnascita codice_fiscale partita_iva telefono telefono2 fax | numerocellulare email webaddr banca abi cab numerocc username passwd interlocutore libero1 libero2 libero3 libero4 libero5 libero6 libero7 libero8 libero9 libero10 | libero11 libero12 libero13 libero14 libero15 libero16 libero17 libero43 libero44 libero45 libero46 libero47 libero48 libero49 libero50 libero51 libero52 libero53 libero54 libero55 | libero56 libero57 libero58 libero59 libero60 libero61 libero62 libero63 libero64 libero65 libero66 libero67 libero68 libero69 libero70 libero71 libero72 libero73 libero74 libero75
 | integer | libero32 libero33 | libero34 libero35 | libero36 libero36 |
 | float | libero23 libero24 libero25 libero26 libero27 libero28 libero29 libero30 | libero31 libero86 libero87 libero88 libero89 libero90 libero91 libero92 | libero93 libero94 libero95 libero96 libero97 libero98 libero99 libero100 | libero101 libero102 libero103 libero104 libero105 libero106
Casella di controllo (checkbox) | bool | personafisica accessoconsentito libero32 libero33 libero34 libero35 libero36 libero23 libero24 libero25 | libero26 libero27 libero28 libero29 libero30 libero31 libero86 libero87 libero88 libero89 | libero90 libero91 libero92 libero93 libero94 libero95 libero96 libero97 libero98 libero99 | libero100 libero101 libero102 libero103 libero104 libero105 libero106
Gruppo di opzioni (optionbutton) | text | codice_anagrafica ragione_sociale cognome nome titolo denominazione tiposocieta sigla attivita indirizzo localita cap provincia comunenascita provnascita codice_fiscale partita_iva telefono telefono2 fax | numerocellulare email webaddr banca abi cab numerocc username passwd interlocutore libero1 libero2 libero3 libero4 libero5 libero6 libero7 libero8 libero9 libero10 | libero11 libero12 libero13 libero14 libero15 libero16 libero17 libero43 libero44 libero45 libero46 libero47 libero48 libero49 libero50 libero51 libero52 libero53 libero54 libero55 | libero56 libero57 libero58 libero59 libero60 libero61 libero62 libero63 libero64 libero65 libero66 libero67 libero68 libero69 libero70 libero71 libero72 libero73 libero74 libero75
 | integer | libero32 libero33 | libero34 libero35 | libero36 libero36 |
 | float | libero23 libero24 libero25 libero26 libero27 libero28 libero29 libero30 | libero31 libero86 libero87 libero88 libero89 libero90 libero91 libero92 | libero93 libero94 libero95 libero96 libero97 libero98 libero99 libero100 | libero101 libero102 libero103 libero104 libero105 libero106
 | bool | personafisica accessoconsentito libero32 libero33 libero34 libero35 libero36 libero23 libero24 libero25 | libero26 libero27 libero28 libero29 libero30 libero31 libero86 libero87 libero88 libero89 | libero90 libero91 libero92 libero93 libero94 libero95 libero96 libero97 libero98 libero99 | libero100 libero101 libero102 libero103 libero104 libero105 libero106
 | date | datanascita libero18 libero19 libero20 | libero21 libero22 libero76 libero77 | libero78 libero79 libero80 libero81 | libero82 libero83 libero84 libero85
 | datetime | libero18 libero19 libero20 libero21 | libero22 libero76 libero77 libero78 | libero79 libero80 libero81 libero82 | libero83 libero84 libero85
Lista (combobox) | text | codice_anagrafica ragione_sociale cognome nome titolo denominazione tiposocieta sigla attivita indirizzo localita cap provincia comunenascita provnascita codice_fiscale partita_iva telefono telefono2 fax | numerocellulare email webaddr banca abi cab numerocc username passwd interlocutore libero1 libero2 libero3 libero4 libero5 libero6 libero7 libero8 libero9 libero10 | libero11 libero12 libero13 libero14 libero15 libero16 libero17 libero43 libero44 libero45 libero46 libero47 libero48 libero49 libero50 libero51 libero52 libero53 libero54 libero55 | libero56 libero57 libero58 libero59 libero60 libero61 libero62 libero63 libero64 libero65 libero66 libero67 libero68 libero69 libero70 libero71 libero72 libero73 libero74 libero75
 | integer | libero32 libero33 | libero34 libero35 | libero36 libero36 |
 | float | libero23 libero24 libero25 libero26 libero27 libero28 libero29 libero30 | libero31 libero86 libero87 libero88 libero89 libero90 libero91 libero92 | libero93 libero94 libero95 libero96 libero97 libero98 libero99 libero100 | libero101 libero102 libero103 libero104 libero105 libero106
 | date | datanascita libero18 libero19 libero20 | libero21 libero22 libero76 libero77 | libero78 libero79 libero80 libero81 | libero82 libero83 libero84 libero85
 | datetime | libero18 libero19 libero20 libero21 | libero22 libero76 libero77 libero78 | libero79 libero80 libero81 libero82 | libero83 libero84 libero85
Memo (memobox) | text | codice_anagrafica ragione_sociale cognome nome titolo denominazione tiposocieta sigla attivita indirizzo localita cap provincia comunenascita provnascita codice_fiscale partita_iva telefono telefono2 fax | numerocellulare email webaddr banca abi cab numerocc username passwd interlocutore libero1 libero2 libero3 libero4 libero5 libero6 libero7 libero8 libero9 libero10 | libero11 libero12 libero13 libero14 libero15 libero16 libero17 libero43 libero44 libero45 libero46 libero47 libero48 libero49 libero50 libero51 libero52 libero53 libero54 libero55 | libero56 libero57 libero58 libero59 libero60 libero61 libero62 libero63 libero64 libero65 libero66 libero67 libero68 libero69 libero70 libero71 libero72 libero73 libero74 libero75
 | memo | annotazioni libero37 | libero38 libero107 | libero108 libero109 | libero110
 | xml | annotazioni libero37 | libero38 libero107 | libero108 libero109 | libero110
Annotazioni (annotation) | xml | annotazioni libero37 | libero38 libero107 | libero108 libero109 | libero110
Data (date) | date | datanascita libero18 libero19 libero20 | libero21 libero22 libero76 libero77 | libero78 libero79 libero80 libero81 | libero82 libero83 libero84 libero85
Data e ora (datetime) | datetime | libero18 libero19 libero20 libero21 | libero22 libero76 libero77 libero78 | libero79 libero80 libero81 libero82 | libero83 libero84 libero85
Città (city) | city | localita comunenascita libero1 libero2 libero3 libero4 libero5 libero6 libero7 libero8 libero9 libero10 libero11 | libero12 libero13 libero14 libero15 libero16 libero17 libero43 libero44 libero45 libero46 libero47 libero48 libero49 | libero50 libero51 libero52 libero53 libero54 libero55 libero56 libero57 libero58 libero59 libero60 libero61 libero62 | libero63 libero64 libero65 libero66 libero67 libero68 libero69 libero70 libero71 libero72 libero73 libero74 libero75
Operatore (user) | user | libero1 libero2 libero3 libero4 | libero5 libero43 libero44 libero45 | libero46 libero47 libero48 libero49 | libero50 libero51 libero52
Lista di operatori (userlist) | userlist | libero37 libero38 | libero107 libero108 | libero109 libero110 |
Lista di elementi dell'organizzazione (organizationlist) | userlist | libero37 libero38 | libero107 libero108 | libero109 libero110 |
Ruolo (role) | role | libero1 libero2 libero3 libero4 | libero5 libero43 libero44 libero45 | libero46 libero47 libero48 libero49 | libero50 libero51 libero52
Ufficio (office) | office | libero1 libero2 libero3 libero4 | libero5 libero43 libero44 libero45 | libero46 libero47 libero48 libero49 | libero50 libero51 libero52
Anagrafica (client) | client | libero1 libero2 libero3 libero4 | libero5 libero43 libero44 libero45 | libero46 libero47 libero48 libero49 | libero50 libero51 libero52
Lista di anagrafica (clientlist) | clientlist | libero39 | libero40 | libero41 | libero42
Documento (document) | doc | libero1 libero2 libero3 libero4 | libero5 libero43 libero44 libero45 | libero46 libero47 libero48 libero49 | libero50 libero51 libero52
Lista di documenti (documentlist) | doclist | libero37 libero38 | libero107 libero108 | libero109 libero110 |
Info firma (signinfo) | signinfo | creazione | blocco | blocco |
Tabella (table) | xml | annotazioni libero37 | libero38 libero107 | libero108 libero109 | libero110

Controlli per Anagrafica operatori

Controllo | Tipo | Campi
Contenitore (container) | xml | annotazioni libero37 | libero38 libero107 | libero108 libero109 | libero110
Classificazione (classification) | classification | classificazione | classificazione | classificazione |
Casella di testo (textbox) | text | codice_anagrafica ragione_sociale cognome nome titolo sigla attivita indirizzo localita cap provincia comunenascita provnascita codice_fiscale partita_iva telefono telefono2 fax numerocellulare email | webaddr banca abi cab numerocc username passwd interlocutore tel_ufficio (libero1) fax_ufficio (libero2) libero3 libero4 libero5 libero6 libero7 username_accesso_al_sistema (libero8) matricola (libero9) libero10 cap_nascita (libero11) libero12 | titolo_di_studio (libero13) qualifica (libero14) contratto (libero15) libero16 libero17 libero43 libero44 libero45 libero46 libero47 libero48 libero49 libero50 libero51 libero52 libero53 libero54 libero55 libero56 libero57 | libero58 libero59 libero60 libero61 libero62 libero63 libero64 libero65 libero66 libero67 libero68 libero69 libero70 libero71 libero72 libero73 libero74 libero75
 | integer | libero32 libero33 | libero34 libero35 | libero36 libero36 |
 | float | libero23 libero24 libero25 libero26 libero27 libero28 libero29 libero30 | libero31 libero86 libero87 libero88 libero89 libero90 libero91 libero92 | libero93 libero94 libero95 libero96 libero97 libero98 libero99 libero100 | libero101 libero102 libero103 libero104 libero105 libero106
Casella di controllo (checkbox) | bool | personafisica disattivato libero32 libero33 libero34 libero35 libero36 libero23 libero24 libero25 | libero26 libero27 libero28 libero29 libero30 libero31 libero86 libero87 libero88 libero89 | libero90 libero91 libero92 libero93 libero94 libero95 libero96 libero97 libero98 libero99 | libero100 libero101 libero102 libero103 libero104 libero105 libero106
Gruppo di opzioni (optionbutton) | text | codice_anagrafica ragione_sociale cognome nome titolo sigla attivita indirizzo localita cap provincia comunenascita provnascita codice_fiscale partita_iva telefono telefono2 fax numerocellulare email | webaddr banca abi cab numerocc username passwd interlocutore tel_ufficio (libero1) fax_ufficio (libero2) libero3 libero4 libero5 libero6 libero7 username_accesso_al_sistema (libero8) matricola (libero9) libero10 cap_nascita (libero11) libero12 | titolo_di_studio (libero13) qualifica (libero14) contratto (libero15) libero16 libero17 libero43 libero44 libero45 libero46 libero47 libero48 libero49 libero50 libero51 libero52 libero53 libero54 libero55 libero56 libero57 | libero58 libero59 libero60 libero61 libero62 libero63 libero64 libero65 libero66 libero67 libero68 libero69 libero70 libero71 libero72 libero73 libero74 libero75
 | integer | libero32 libero33 | libero34 libero35 | libero36 libero36 |
 | float | libero23 libero24 libero25 libero26 libero27 libero28 libero29 libero30 | libero31 libero86 libero87 libero88 libero89 libero90 libero91 libero92 | libero93 libero94 libero95 libero96 libero97 libero98 libero99 libero100 | libero101 libero102 libero103 libero104 libero105 libero106
 | bool | personafisica disattivato libero32 libero33 libero34 libero35 libero36 libero23 libero24 libero25 | libero26 libero27 libero28 libero29 libero30 libero31 libero86 libero87 libero88 libero89 | libero90 libero91 libero92 libero93 libero94 libero95 libero96 libero97 libero98 libero99 | libero100 libero101 libero102 libero103 libero104 libero105 libero106
 | date | datanascita libero18 data_assunzione (libero19) data_scadenza_contratto (libero20) | data_licenziamento (libero21) libero22 libero76 libero77 | libero78 libero79 libero80 libero81 | libero82 libero83 libero84 libero85
 | datetime | libero18 libero22 libero76 | libero77 libero78 libero79 | libero80 libero81 libero82 | libero83 libero84 libero85
Lista (combobox) | text | codice_anagrafica ragione_sociale cognome nome titolo sigla attivita indirizzo localita cap provincia comunenascita provnascita codice_fiscale partita_iva telefono telefono2 fax numerocellulare email | webaddr banca abi cab numerocc username passwd interlocutore tel_ufficio (libero1) fax_ufficio (libero2) libero3 libero4 libero5 libero6 libero7 username_accesso_al_sistema (libero8) matricola (libero9) libero10 cap_nascita (libero11) libero12 | titolo_di_studio (libero13) qualifica (libero14) contratto (libero15) libero16 libero17 libero43 libero44 libero45 libero46 libero47 libero48 libero49 libero50 libero51 libero52 libero53 libero54 libero55 libero56 libero57 | libero58 libero59 libero60 libero61 libero62 libero63 libero64 libero65 libero66 libero67 libero68 libero69 libero70 libero71 libero72 libero73 libero74 libero75
 | integer | libero32 libero33 | libero34 libero35 | libero36 libero36 |
 | float | libero23 libero24 libero25 libero26 libero27 libero28 libero29 libero30 | libero31 libero86 libero87 libero88 libero89 libero90 libero91 libero92 | libero93 libero94 libero95 libero96 libero97 libero98 libero99 libero100 | libero101 libero102 libero103 libero104 libero105 libero106
 | date | datanascita libero18 data_assunzione (libero19) data_scadenza_contratto (libero20) | data_licenziamento (libero21) libero22 libero76 libero77 | libero78 libero79 libero80 libero81 | libero82 libero83 libero84 libero85
 | datetime | libero18 libero22 libero76 | libero77 libero78 libero79 | libero80 libero81 libero82 | libero83 libero84 libero85
Memo (memobox) | text | codice_anagrafica ragione_sociale cognome nome titolo sigla attivita indirizzo localita cap provincia comunenascita provnascita codice_fiscale partita_iva telefono telefono2 fax numerocellulare email | webaddr banca abi cab numerocc username passwd interlocutore tel_ufficio (libero1) fax_ufficio (libero2) libero3 libero4 libero5 libero6 libero7 username_accesso_al_sistema (libero8) matricola (libero9) libero10 cap_nascita (libero11) libero12 | titolo_di_studio (libero13) qualifica (libero14) contratto (libero15) libero16 libero17 libero43 libero44 libero45 libero46 libero47 libero48 libero49 libero50 libero51 libero52 libero53 libero54 libero55 libero56 libero57 | libero58 libero59 libero60 libero61 libero62 libero63 libero64 libero65 libero66 libero67 libero68 libero69 libero70 libero71 libero72 libero73 libero74 libero75
 | memo | annotazioni libero37 | libero38 libero107 | libero108 libero109 | libero110
 | xml | annotazioni libero37 | libero38 libero107 | libero108 libero109 | libero110
Annotazioni (annotation) | xml | annotazioni libero37 | libero38 libero107 | libero108 libero109 | libero110
Data (date) | date | datanascita libero18 data_assunzione (libero19) data_scadenza_contratto (libero20) | data_licenziamento (libero21) libero22 libero76 libero77 | libero78 libero79 libero80 libero81 | libero82 libero83 libero84 libero85
Data e ora (datetime) | datetime | libero18 libero22 libero76 | libero77 libero78 libero79 | libero80 libero81 libero82 | libero83 libero84 libero85
Città (city) | city | localita comunenascita libero3 libero4 libero5 libero6 libero7 libero10 libero12 libero16 libero17 | libero43 libero44 libero45 libero46 libero47 libero48 libero49 libero50 libero51 libero52 libero53 | libero54 libero55 libero56 libero57 libero58 libero59 libero60 libero61 libero62 libero63 libero64 | libero65 libero66 libero67 libero68 libero69 libero70 libero71 libero72 libero73 libero74 libero75
Operatore (user) | user | libero3 libero4 libero5 libero43 | libero44 libero45 libero46 libero47 | libero48 libero49 libero50 libero51 | libero52
Lista di operatori (userlist) | userlist | libero37 libero38 | libero107 libero108 | libero109 libero110 |
Lista di elementi dell'organizzazione (organizationlist) | userlist | libero37 libero38 | libero107 libero108 | libero109 libero110 |
Ruolo (role) | role | libero3 libero4 libero5 libero43 | libero44 libero45 libero46 libero47 | libero48 libero49 libero50 libero51 | libero52
Ufficio (office) | office | libero3 libero4 libero5 libero43 | libero44 libero45 libero46 libero47 | libero48 libero49 libero50 libero51 | libero52
Anagrafica (client) | client | libero3 libero4 libero5 libero43 | libero44 libero45 libero46 libero47 | libero48 libero49 libero50 libero51 | libero52
Lista di anagrafica (clientlist) | clientlist | libero39 | libero40 | libero41 | libero42
Documento (document) | doc | libero3 libero4 libero5 libero43 | libero44 libero45 libero46 libero47 | libero48 libero49 libero50 libero51 | libero52
Lista di documenti (documentlist) | doclist | libero37 libero38 | libero107 libero108 | libero109 libero110 |
Info firma (signinfo) | signinfo | creazione | blocco | blocco |
Tabella (table) | xml | annotazioni libero37 | libero38 libero107 | libero108 libero109 | libero110


Thick client

L'accesso ai dati viene gestito nelle form HTML tramite template XSL e librerie javascript.

In particolare vengono caricate le seguenti librerie javascript:

· libraries/common/common.js caricato sia negli elenchi sia nei documenti ed in tutte le pagine dell'applicazione web.
· libraries/datetime/datetime.js caricato sia negli elenchi (pagina list.aspx) sia nei documenti (pagina document.aspx).
· libraries/table/table.js caricato solo negli elenchi (pagina list.aspx)
· libraries/document/document.js caricato solo nei documenti (pagina document.aspx).
· libraries/attachments/attachments.js caricato solo nei documenti (pagina document.aspx) se è stato inserito il controllo allegati.

Alcune funzioni presenti in questi file possono essere riutilizzate all'interno di codice custom.

È sconsigliato modificare questi file per inserire codice custom: essi normalmente vengono sovrascritti da nuove versioni. Invece codice custom può essere inserito direttamente nei prototipi HTML, e quindi nei fogli di stile, o nei seguenti file:

· clibraries/ common/common.js caricato in tutte le pagine della applicazione web;sia negli elenchi sia nei documenti.
· clibraries/datetime/datetime.js caricato sia negli elenchi (pagina list.aspx) sia nei documenti (pagina document.aspx o document.jsp);caricato sia negli elenchi sia nei documenti.
· clibraries/table/table.js caricato solo negli elenchi (pagina list.aspx);caricato solo negli elenchi.
· clibraries/document/document.js caricato solo nei documenti (pagina document.aspx).
· clibraries/attachments/attachments.js caricato solo nei documenti (pagina document.aspx) se è stato inserito il controllo allegati.


Funzioni di common.js

Le funzioni common.js sono sono caricate in tutte le pagine web dell'applicazione.

Le funzioni utilizzate sono:

· actionLabel
· browsertype
· convertXMLDoc
· display
· displayE
· doc
· docHandler
· evaluateScript
· executeActivity
· formName
· freeSearch
· getConditionFromString
· getXMLfromURL
· hideAction
· inputbox
· isEmpty
· isInteger
· isNull
· jobHandler
· msgbox
· newdoc
· openbconsole
· openForm
· openprocesschart
· printPage
· queryString
· returnNow
· returnOnlyString
· rnd
· rndn
· saveCloseDoc
· sendPost
· showAction
· soapmessage
· ss
· startPing
· TFN
· trim
· winDebug


actionLabel

actionLabel(action)

Restituisce l'etichetta dell'azione così come riportata nella barra degli strumenti.

Il parametro action rappresenta l'id dell'azione; se l'azione non esiste la funzione restituisce una stringa di lunghezza zero.


browsertype

browsertype()

Restituisce un numero intero che indica il tipo di browser utilizzato e la versione. I valori restituiti sono:

Valore | Browser
1 | Opera
2 | IE4
3 | NN4
4 | IE5 o IE6
5 | NN6
6 | Qualsiasi


convertXMLDoc

convertXMLDoc (transformid, filename, filepath, showmsg, action, mode, pages)

Apre una nuova pagina WEB in cui viene presentato il documento XML corrente (form o elenco) dopo che è stata applicata la trasformazione XSL specificata dal parametro transformid oppure salva il risultato della trasformazione in un file. Con questa funzione è possibile aprire per esempio un elenco in formato PDF o XLS.

La funzione restituisce true se l'operazione termina correttamente, altrimenti false.

Parametro | Descrizione
transformid | Trasformazione XSL da applicare al documento.
filename | Se indicato, il browser, anziché aprire immediatamente la pagina, mostra una messagebox in cui viene richiesto se si vuole salvare o aprire il file di nome filename contenente il risultato della trasformazione.
filepath | Se indicato e il filename è diverso dalla stringa vuota, la pagina viene salvata senza alcuna richiesta di conferma in un file di nome filepath + “\” + filename. L'eventuale carattere “\” (backslash) presente alla fine di filepath viene eliminato.
showmsg | Parametro opzionale. Si utilizza solo quando si vuole salvare il risultato della trasformazione in un file (ovvero filepath non è vuoto). Può assumere i valori true o false e indica se devono essere visualizzati eventuali messaggi di errore. Valore di default true.
action | Nome dell'azione che richiama la funzione.
mode | Parametro da utilizzarsi solo con gli elenchi. Possibili valori: 1 - Tutto l'elenco 2 - Solo pagina corrente 3 - Selezione, in tal caso è richiesto che sia valorizzato il parametro pages. Se non è indicato oppure non è valido e showmsg = true, viene visualizzata una pagina in cui selezionare l'intervallo di stampa.
pages | Intervallo di stampa nel formato pagina_iniziale – pagina_finale. E' possibile indicare più intervalli di stampa separandoli con punto e virgola.


display

ldisplay(x,s,w)

Permette la visualizzazione nella pagina corrente del codice HTML generato dalla trasformazione s su x.

Parametro | Descrizione
x | Oggetto XML di tipo MSXML2.FreeThreadedDOMDocument.4.0 contenente XML. Se x = null verrà assunto x = doc().
s | Oggetto XML di tipo MSXML2.FreeThreadedDOMDocument.4.0 contenente XSL. Se s = null verrà assunto s = ss().
w | Puntatore (handler) alla finestra in cui deve essere visualizzato il risultato della trasformazione. Se w = null verrà assunto w = self (finestra in cui viene eseguito lo script).


displayE

displayE(x,id,blur)

Ridisegna il controllo utilizzando i valori presenti nel documento x.

Proprietà | Descrizione
x | Parametro facoltativo. Se non specificato viene posto uguale al documento XML corrente.
blur | Parametro facoltativo. Valore di default false. Se true e il controllo non è bloccato viene forzato l'evento onblur sul controllo medesimo; l'evento comporta l'aggiornamento del campo XML sottostante e il ricalcolo di eventuali campi collegati. La funzione aggiorna il documento XML corrente con il nuovo valore del campo sottostante il controllo, contenuto in x.
id | Identificativo del controllo. Se id non è l'identificativo di un controllo ma di un qualsiasi tag HTML, la funzione può essere utilizzata per renderizzare nuovamente quel tag ed eventualmente assegnare x all'XML corrente.


doc

doc()

Restituisce un oggetto XML di tipo MSXML2.FreeThreadedDOMDocument.4.0 contenente il documento XML della finestra corrente (documento o elenco) e un riferimento al namespace owk='http://www.openwork.info/schema', per cui è possibile eseguire ricerche tramite Xpath.

Esempio

Per modificare il campo oggetto del documento si può procedere come segue:

var x = doc();

var nodo = x.selectSingleNode("//owk:form/owk:document/owk:oggetto");

nodo.text = "Richiesta ferie";

document.XMLDocument = x;


docHandler

docHandler()

Classe per la gestione dei documenti: apertura, modifica, salvataggio e chiusura tramite Web Services.

Proprietà | Descrizione
Style | Stile del documento.
ID | ID del documento.
ClientID | Nel caso in cui style = 6 questo parametro di tipo stringa indica il codice di anagrafica ed è alternativo all'ID.
ModelID | Modello di documento.
ReadOnly | Può assumere valori true o false, specifica se il documento è aperto in sola lettura, valore di default false.
Emergency | Specifica se il documento è stato registrato in emergenza.
Reserved | Specifica se il documento è riservato.
XMLDoc | Oggetto XML che contiene il documento.

Metodi della classe docHandler:

· Open (style, ID, ClientID, ModelID, ReadOnly, Emergency, Reserved): apre un documento, se i parametri non vengono passati vengono utilizzati i valori impostati per le corrispondenti proprietà

· New (Style, ModelID, [Emergency], [Reserved], [PF]): crea e apre un nuovo documento, se i parametri Style o ModelID non vengono passati si genera un errore e il nuovo documento non viene creato; il parametro PF viene utilizzato per la creazione di una nuova scheda di anagrafica (PF <> 0 persona fisica, PF = 0 persona giuridica)

· Save(): salva il documento aperto o creato

· Close(): chiude il documento

· getField (nomecampo): restituisce l'elemento XML del documento aperto il cui nome è uguale a nomecampo (il nome è case-sensitive); il contenuto del nodo può essere impostato con le proprietà e i metodi degli elementi MSXML

· Reset(): inizializza al valore “null” tutte le proprietà della classe

Esempio

Modifica del campo 'oggetto' di un documento in entrata:

var documento = new docHandler();

documento.Open(1, 123);

var oggetto = documento.getField("oggetto");

oggetto.text = "Richiesta certificato";

documento.Save();

documento.Close();

  oppure in modo analogo:

var documento = new docHandler();

documento.Style = 1;

documento.ID = 123;

documento.Open();

var oggetto = documento.getField("oggetto");

oggetto.text = "Richiesta certificato";

documento.Save();

documento.Close();


evaluateScript

evaluateScript(code)

É possibile utilizzare questa funzione all'interno di script lato client prima dell'esecuzione di una attività o dopo la prenotazione di una attività; la funzione permette la valutazione o la semplice esecuzione di script sul server, utilizzando quindi la libreria di oggetti.

code è una stringa contenente le istruzioni da eseguire, codificate in VbScript; più istruzioni devono essere concatenate da “:” ; se all'interno delle istruzioni viene valorizzata una variabile di nome evaluate, dalla funzione verrà restituito il valore di questa variabile.

L'esempio seguente è uno script eseguito lato client prima della esecuzione di un'attività. Lo script esegue uno script sul server che restituisce una stringa in funzione dello stato della attività; questa stringa viene mostrata sul client con una messagebox.

Esempio

Dim code

code = "evaluate=Thisactivity.status:If evaluate= ""9"" Then

evaluate=""In esecuzione, stato "" & evaluate:Else e

valuate=""Da eseguire, stato "" & evaluate:End If"

stato = evaluateScript(code)

msgbox(stato)

End Sub


executeActivity

executeActivity(processid, activityid, selection, showmsg, navmode)

Questa funzione può essere utilizzata per portare un'attività generica dallo stato 'in esecuzione sul client' allo stato 'in esecuzione'. Questo è necessario quando è stato eseguito sul client uno script dopo l'esecuzione che ha impostato la varibile continueafterscript a false (cfr. Script lato client legati alle attività)

Parametro | Descrizione
processid | Identificativo del processo.
activityid | Identificativo della attività.
selection | Parametro facoltativo di tipo stringa. Deve essere diverso da nothing solo per attività di selezione automatica e deve contenere il valore dell'opzione selezionata.
showmsg | Può assumere valori true o false a seconda che si desideri o meno visualizzare i messaggi di errore o di operazione riuscita. La finestra che visualizza il messaggio di operazione riuscita cerca di richiamare la funzione per aggiornare l'elenco delle attività sulla sua opener.
navmode | Parametro facoltativo. Valori possibili: 0 (default) - apre in una nuova pagina 1 - apre nella pagina corrente 2 - apre nella pagina corrente passando nell'url navmode = 2


formName

formName(style,id)

Genera il nome da associare alla finestra di una form secondo un formato che viene controllato da altre funzioni.

style | Stile della form.
id | Identificativo della form.


freeSearch

freeSearch(txtSearch, showInputBox, op, win, navmode)

Esegue la ricerca della stringa txtSearch su tutti i documenti.

Parametro | Descrizione
txtSearch | Nome della stringa da cercare.
showInputBox | Se true, viene mostrata una inputbox per l'inserimento del testo e txtSearch viene inserito come valore di default.
op | Operatore da applicare tra diverse parole. Se op non è indicato assume valore AND.
win | Parametro facoltativo. Finestra in cui appare il risultato della ricerca. Se non indicato, allora il risultato viene aperto in una nuova finestra.
navmode | Parametro facoltativo. Viene passato nell'url della pagina aperta da questa funzione, ha effetto solo per le pagine aperte successivamente. Valori possibili: 0 - apre in una nuova pagina 1 - apre nella pagina corrente 2 - apre nella pagina corrente, passando nell'url anche navmode =2.


getConditionFromString

getConditionFromString(searchstring,op,field,source)

Data la stringa di testo searchstring la funzione restituisce un elemento XML di tipo conditiongroup o condition, da utilizzare nella costruzione di un filtro per listparameters.

Esempi

· getConditionFromString("arancio sostituzione", "and", null, "oggetto")

restituirà:

<conditiongroup xmlns="http://www.openwork.info/schema" method="and">

<condition source="oggetto" operator="like" value="sostituzione"/>

<condition source="oggetto" operator="like" value="arancio"/>

</conditiongroup>

· getConditionFromString("arancio \"chiede sostituzione\"","or",null,"oggetto")restituirà:

     <conditiongroup xmlns="http://www.openwork.info/schema" method="or">

<condition source="oggetto"operator="like"value="chiede sostituzione"/>

<condition source="oggetto" operator="like" value="arancio"/>

</conditiongroup>

· getConditionFromString("arancio", "not", "oggetto", null)

restituirà:

<condition xmlns="http://www.openwork.info/schema field="oggetto"

operator="like" value="arancio" negation="1"/></condition>


getXMLfromURL

getXMLfromURL(uri)

Restituisce un oggetto di tipo MSXML2.FreeThreadedDOMDocument.4.0 valorizzato con l'XML restituito dalla pagina uri. In caso di errore la funzione restituisce null. L'oggetto DOMDocument ha il riferimento al namespace owk='http://www.openwork.info/schema'

Ad esempio, inserendo il seguente codice all'interno del sorgente di una form di openwork®, all'apertura di un documento si ottiene il codice XML dell'oggetto di tipo MSXML2.FreeThreadedDOMDocument.4.0 relativo:

Esempio

<html>

<head>.........</head>

<body>

.........

<script language="javascript">

<![CDATA[

function customonload()

{

var x=doc();

//Permette l'apertura (actiontype=1) del documento interno

//(style=3) avente ID=1 in sola lettura (readonly=1)

var miouri = 'document.aspx?actiontype=1&readonly=1&style=3&id=1';

var mioXML1 = getXMLfromURL(miouri);

//stampa in un'apposita finestra il codice XML dell'oggetto mioXML1

winDebug(mioXML1.xml)

//Permette l'apertura (actiontype=1) della scheda di anagrafica (style=6)

//avente ID=3

var miouri = "document.aspx?actiontype=1&style=6&id=3"

var mioXML2 = getXMLfromURL(miouri);

//stampa in un'apposita finestra il codice XML dell' oggetto mioXML2

winDebug(mioXML2.xml)

}

]]>

</script>

</body>

</html>


hideAction

hideAction(name)

Nasconde l'azione avente ID uguale a name.

E' possibile impostare la visibilità di una azione anche tramite Contesto (context) della form utilizzando l'apposita funzione di document.js applyActionContext.


hideActions

hideActions(x)

Nasconde tutte le azioni di una form.

x parametro facoltativo. Se non specificato viene posto uguale al documento XML corrente


inputbox

inputbox(testomessaggio, titolofinestra, default)

Apre una finestra con una casella di testo in cui è possibile digitare del testo.

default è una stringa indicante il valore predefinito della casella di testo.

Se l'operatore sceglie Annulla la funzione restituisce una stringa di lunghezza zero.

Esempio

istruzioni = inputbox("ISTRUZIONI:","openwork®","eventuali istruzioni...")

apre la seguente finestra:

e il testo digitato verrà memorizzato nella variabile istruzioni


isEmpty

isEmpty(object)

Restituisce true se object è un oggetto nullo o indefinito o una stringa di lunghezza zero, false altrimenti.


isInteger

isInteger(val)

Restituisce true se val è un numero intero, false altrimenti.


isNull

isNull(object)

Restituisce true se object è nullo oppure non è definito, false in tutti gli altri casi.


jobHandler

Classe per la gestione dei job che consente di realizzare creazione, reperimento dello stato, percentuale di avanzamento e risultato, interruzione del job; offre la possibilità di inviare richieste al server di tipo asincrono, scelte tra le funzionalità base dell'openwork® Job Engine oppure tra le funzionalità personalizzate (Job Custom).

In questo modo è possibile:

· inviare al server le informazioni necessarie per qualsiasi tipo di computazione (cfr. CreateJob)
· effettuare l'upload di file con eventuale compressione (cfr. Addfile - fileHandler)
· conoscere lo stato di avanzamento di alcune funzionalità o di reperire il risultato (cfr. GetResult)
· effettuare il download dei risultati (cfr. DownloadFile)

Ogni job ha la possibilità di avere N risultati e ogni risultato di avere N campi personalizzati, il cui nome e valore vengono definiti sul server, nel codice personalizzato (cfr. fieldHandler).

Con riferimento al paradigma Object Oriented esiste una relazione di aggregazione tra le classi di questo tipo:

jobH01 - jobHandler

Mentre fileHandler è un elemento input per la classe jobHandler, necessario per descrivere i file coinvolti nella computazione del job, resultHandler e fieldHandler sono gli output avvalorati da GetResult, forniti dal risultato della computazione. Esiste una pagina HTML di test che permette di avvalorare tutti gli attributi e di richiamare le funzionalità di queste classi.

Di seguito sono elencate le proprietà della classe.

CREAZIONE DI UN JOB
Proprietà | Descrizione
Functionality | Tipo di funzionalità da eseguire: OCR - BARCODE - GENERALBARCODE - PDF - NCUTTING - XTRANSFORM - CUSTOM.
CustomFunctionality | Se Functionality assume il valore CUSTOM , è possibile specificare la funzionalità lato client.
Output | Percorso assoluto del file di output sul server.
ConfigurationString | Stringa di configurazione: è possibile inserire una propria struttura XML in modo da impostare e poi reperire nell'assembly personalizzato (custom) i valori. Quindi possono essere inseriti tutti gli attributi che non rientrano nella classe, in modo tale che vengano caricati in un DOM nell'assembly sul server.
Language | Lingua utente con cui si recuperano i messaggi.
StartPage | Pagina da cui inizia l'elaborazione in un documento multipagina (usato per la funzionalità NCUTTING).
EndPage | Pagina su cui deve finire l'elaborazione in un documento multipagina (usato per la funzionalità NCUTTING).
PageBlock | Numero massimo di pagine per file (usato per la funzionalità NCUTTING).
LiteralString | Serie di caratteri che rappresentano modelli di confronto per la funzionalità GENERALBARCODE.
BarcodeType | Tipo di Barcode da riconoscere per la funzionalità GENERALBARCODE.
ErrWordColor | Colorazione delle parole per cui il tasso di riconoscimento (OCR) è inferiore ad una certa soglia.
LanguageOrder | Scala di priorità in cui devono essere considerate le lingue per il confronto con i dizionari. (cfr. OCR)
DelSource | Indica se devono essere cancellati i file in input. Questo valore non cancella i file per le funzioni CUSTOM, ma imposta l'omonimo attributo della classe InfoJobClass.
AssemblyPath | Eventuale percorso e nome dell'assembly CUSTOM

REPERIMENTO DEL RISULTATO, STATO E PERCENTUALE

Proprietà

Descrizione

JobCode

Rappresenta il nome del file job che viene impostato dal metodo Create nel caso di successo. Se l'esecuzione del job richiede la chiusura della connessione, l'utente può comunque reperire il risultato impostando il JobCode e richiamando la funzione GetResult.

Style

Tipologia del documento a cui deve essere allegato il risultato Se lo style viene impostato, allora deve essere specificato anche ID; in caso di mancata impostazione non viene allegato alcun file.

ID

Identificativo del documento a cui il risultato deve essere allegato. La presenza dell'ID implica l'impostazione dello style; in caso di mancata impostazione non viene allegato alcun file.

Results

Array di resultHandler.

ResCount

Numero di elementi contenuti nell'array resultHandler.

Status

Rappresenta lo stato di elaborazione del job. Può assumere i seguenti valori:

· 0 in elaborazione
· -1 terminato con errori
· 1 terminato correttamente
· -2 errore nella valutazione dello stato

Percentage

Percentuale di avanzamento del job: questo attributo viene avvalorato solo se viene impostato nelle funzionalità CUSTOM.

INTERRUZIONE DEL JOB
Proprietà | Descrizione
DelDestination | Indica se i file di destinazione devono essere eliminati. L'attributo ha valore operativo solo se viene richiamato il metodo ABORT. É possibile impostare anche DelSource.

REPERIMENTO DEL RISULTATO, STATO E PERCENTUALE
Proprietà | Descrizione
ErrCode | Codice di errore che viene impostato ogni volta che viene eseguita una funzione. Assume valore 0 se la funzione ha successo, maggiore di zero altrimenti.
ErrDescription | Nel caso in cui ErrCode assume un valore diverso da 0, l'attributo viene valorizzato con la descrizione dell'errore.
ShowMessage | Attributo booleano. Se impostato a true mostra i messaggi di errore automaticamente, altrimenti i messaggi devono essere gestiti da codice. I messaggi di successo devono essere comunque gestiti da codice. Parametro di default true.
MsgTitle | Titolo delle finestre di errore che appaiono all'utente.

Di seguito sono elencate i metodi della classe.

Metodi

Descrizione

AddFile(fileHandler)

Aggiunge un elemento (istanza di fileHandler) alla collezione di input da elaborare oppure di cui fare l'upload.

CreateJob()

Crea un job, utilizzando gli attributi di classe della sezione “creazione di un job”. Se non sono specificati gli attributi necessari alla creazione del job, allora ErrCode assumerà un valore diverso da 0, ErrDescription indicherà la descrizione dell'errore, e JobCode non conterrà il codice identificativo del job.

GetResult()

Consente il recupero delle seguenti informazioni:

· stato (Status)
· risultato in formato XMLDOM(XMLResult)
· eventuale percentuale di avanzamento (Percentage) del job.

É possibile utilizzare questo metodo nella stessa sessione in cui viene creato il job o in una sessione successiva. Nel primo caso l'istanza del jobHandler è la stessa di quella che ha creato il job jobHandler.Create(), per cui, se la creazione è avvenuta con successo, l'attributo JobCode viene avvalorato ed è possibile reperire i risultati. Nel secondo caso, se l'utente chiude la sessione (logout) oppure usa una nuova istanza di JobHandler, bisogna impostare il JobCode. E' possibile richiedere il risultato automaticamente in modalità iterativa.

DeleteJob()

Interrompe l'esecuzione del job, cancella i file temporanei e, nel caso in cui DelSource e DelDestination assumano valore 1, cancella rispettivamente i file contenuti nei tag source del risultato (file di input) e i file contenuti nei tag destination di ogni result. (cfr. struttura del risultato)

ResetProperties()

Consente di inizializzare le proprietà della classe e i risultati con una stringa vuota; non inizializza le sorgenti.

ResetInputs()

Inizializza le sorgenti con array vuoti.

CkeckError()

Se ShowMessage = true, mostra una finestra che ha titolo MsgTitle e come testo del messaggio il contenuto della ErrDescription.

Esempio

//Esempio di chiamata ad una funzionalità custom di riparazione PDF

var job = new jobHandler();

var file = new fileHandler();

//inserimento degli attributi del file da processare

file.Name="C:\RepairPath\FileToRepair.pdf"

//impostiamo la compressione del file

file.Compression="1"

//decidiamo di fare l'upload sul server

file.Upload="1"

//viene aggiunta il file alla lista dei file da processare, ma è possibile

//aggiungere N istanze di fileHandler

job.AddFile (file)

//gestione degli errori: in questo caso appariranno messaggi di errore

//il cui titolo è My Application

job.MsgTitle = "My Application";

job.ShowMessage = true; //già di default è true

//immissione degli attributi per il particolare tipo di job

job.Functionality = "CUSTOM";

job.CustomFunctionality ="REPAIRPDF"

//creazione e invio del job

job.CreateJob();

//nel caso in cui si verifichi un errore nella creazione

//sarà possibile reperire la descrizione

if (job.ErrCode == 0){alert("Job numero "+job.JobCode+" creato")}

Se tutto è avvenuto correttamente il job è avviato .

I tempi di esecuzione possono variare a seconda del tipo di job e sicuramente non è possibile reperire "istantaneamente" (in maniera sincrona) il risultato del job nella stessa funzione javascript. E' possibile successivamente richiamare la funzione job.GetResult() (supponendo che l'istanza del jobHandler sia job) in seguito ad un evento (tipo il click di un pulsante), oppure dopo un intervallo di tempo con un setTimeout o setInterval.

Se invece non viene utilizzata la stessa istanza di jobHandler che ha effettuato il CreateJob() è necessario impostare l'attributo JobCode per poter richiamare il metodo GetResult().

Condizione necessaria e sufficiente per reperire il risultato del job, è impostare il JobCode della classe jobHandler dall'utente openwork® che ha effettuato la creazione, anche in sessioni differenti e dopo ampi intervalli di tempo.

Esempio

//Esempio di chiamata al risultato del job

var job = new jobHandler();

var clientPathResult;

clientPathResult="C:\mypath\myfile";

job.JobCode = ......; //Bisogna reperire il codice del job,

//avvalorato nella creazione e memorizzabile in maniera arbitraria

job.ShowMessage=False; //in questo caso è stato scelto di gestire

//anche in messaggi di errore

job.GetResult(); //Avvia una richiesta al web service per ottenere il risultato

if (job.ErrCode != "0")

{alert( job.ErrDescription);}

       else

{

if (job.Status!="0")

{

//è possibile effettuare il download dei file del risultato

for {i=0 ;i<job.ResCount;i++}

{

job.Results[i].DownloadFile(clientPathResult + i)

}

}

else

{

alert("Esecuzione in corso")

}

       }


fileHandler

Classe per la gestione dei File durante l'esecuzione di un job.

La classe non utilizza metodi propri, ma ogni istanza può essere aggiunta come input alla creazione dei job, consentendo di specificare se utilizzare un percorso assoluto accessibile dal server su cui è avviato il jobEngine oppure se effettuare compressione del file locale e upload sul server. E' possibile inoltre specificare, al posto del nome di un file nell'attributo Name , l'ID di un allegato openwork® da elaborare.

Di seguito sono elencate le proprietà della classe.

Proprietà | Descrizione
ID | Vettore composto dagli id degli allegati o dei percorsi (assoluti o relativi alla cartella utente)
Name | Percorso, comprensivo del nome, del file.
CompressionType | Se assume valore 1 indica che deve essere effettuata la compressione del file specificato in Name.
Upload | Se assume valore 1 viene fatto l'upload del file specificato in Name.


fieldHandler

Classe per la gestione dei campi aggiuntivi personalizzati.

Le istanze di questa classe possono essere generate quando vengono creati campi personalizzati lato server che possono essere gestiti lato client utilizzando il metodo GetResult di JobHandler . I metodi per la gestione dei campi personalizzati sono definiti nella resultHandler.

Di seguito sono elencate le proprietà della classe.

Proprietà | Descrizione
Name | Nome del campo aggiuntivo
Value | Valore del campo aggiuntivo

Esempio

Nell'esempio è stato recuperato il risultato con N istanze (resultNumber) della resultHandler(Results) contenute in una istanza di JobHandler(job). Ogni Results contiene i Field (FieldCount) , con Name e Value.

In questo caso specifico i valori vengono concatenati e inseriti dentro una TextArea multilinea.

if (job.Results[resultNumber].FieldCount>0)

  {

   for (i=0;i<job.Results[resultNumber].FieldCount - 1; i++)

   {

    TextFields.value=TextFields.value + "nome field: " +                                        job.Results[resultNumber].Fields[i].Name +" valore field:" +                         job.Results[resultNumber].Fields[i].Value + ";" +

    String.fromCharCode(13,10);

    }

   }


resultHandler

Classe per la gestione dei risultati del job.

Le istanze di questa classe vengono istanziate e avvalorate nel momento in cui viene richiamato il metodo GetResult. Quindi questa classe è parte della jobHandler ed è composta da istanze della fieldHandler nel momento in cui vengono impostati campi personalizzati.

Di seguito sono elencate le proprietà della classe.

Proprietà | Descrizione
JobCode | Codice identificativo del job. Questo attributo viene automaticamente impostato dall'istanza della classe padre jobHandler allo scopo di effettuare il download del file risultato (cfr. DownloadFile).
ResultNumber | Indice del risultato. Questo attributo viene automaticamente impostato dall'istanza della classe padre jobHandler allo scopo di effettuare il download del file risultato (cfr. DownloadFile).
ErrCode | Codice d'errore. Se assume valore 0 indica che non si è verificato alcun errore, altrimenti assume valori interi positivi.
ErrDescription | Descrizione dell'errore identificato dal codice in MessageCode.
Barcode | Tag presente solo nel caso di functionality BARCODE e GENERALBARCODE.
Destination | Nome del file in output eventualmente compreso di path assoluta.
AdditionalInfo | Warning o informazione aggiuntiva.
Pages | Pagine del documento originario che sono state importate nel file di destinazione specificato in destination. Le pagine sono separate da spazi (es. “1 2 3”) .
DocumentId | ID del form openwork® (documento) a cui deve essere eventualmente allegato il file specificato in destination.
DocumentStyle | Style (tipologia) del form openwork® (documento) a cui deve essere eventualmente allegato il file specificato in destination.
DocumentNumber | Numero del form openwork® (documento) a cui deve essere eventualmente allegato il file specificato in destination.
DocumentDate | Data di pubblicazione del documento, ## se il documento non è stato pubblicato.
Fields | Array di campi aggiuntivi definiti e avvalorati dal creatore dell'assembly personalizzato.
FieldCount | Numero di campi aggiuntivi contenuti nel resultHandler corrente.
ShowMessage | Attributo booleano che mostra i messaggi di errore automaticamente. Valore di default true; se impostato a false, i messaggi di errore possono essere customizzati. I messaggi di successo devono essere comunque gestiti dal programmatore.
MsgTitle | Titolo delle finestre di errore che appaiono all'utente.

Di seguito sono elencati i metodi della classe.

Metodi | Descrizione
DownloadFile(localPath) | Scarica sulla localPath del client il file contenuto nell'attributo destination. Questa operazione può essere effettuata solo se il job è stato eseguito correttamente, dopo aver eseguito il metodo GetResult della classe padre jobHandler (job.Status =1 e resultHandler.ErrCode = 0) ed è presente un file risultato contenuto in Destination.


msgbox

msgbox(testomessaggio, pulsanti, titolo)

Se il browser è diverso da IE, produce un risultato identico alla funzione alert di javascript. Se il browser è IE visualizza una finestra di messaggio con pulsanti e icona.

Parametro | Descrizione
testomessaggio | Stringa che rappresenta il testo da visualizzare nel messaggio.
pulsanti | Costante che indica i pulsanti visualizzati nella finestra di dialogo; i valori che può assumere sono riportati nelle tabelle sottostanti.
titolo | Stringa indicante il titolo della finestra.

Le seguenti costanti consentono di impostare i pulsanti da visualizzare:

Costante | Valore | Pulsante
vbOKOnly | 0 | OK
vbOKCancel | 1 | OK e Annulla
vbAbortRetryIgnore | 2 | Interrompi, Riprova e Ignora
vbYesNoCancel | 3 | Sì, No e Annulla
vbYesNo | 4 | Sì e No
vbRetryCancel | 5 | Riprova e Annulla

Le seguenti costanti identificano l'icona da visualizzare nella finestra:

Costante | Valore | Icona
vbCritical | 16 | Messaggio critico
vbQuestion | 32 | Richiesta di avviso
vbExclamation | 48 | Messaggio di avviso
vbInformation | 64 | Messaggio informativo

Le seguenti costanti consentono di impostare il pulsante di default nella finestra:

Costante | Valore | Pulsante predefinito
vbDefaultButton1 | 0 | primo
vbDefaultButton2 | 256 | secondo
vbDefaultButton3 | 512 | terzo
vbDefaultButton4 | 768 | quarto

Nel caso di browser IE la funzione può restituire i valori di seguito elencati:

Costante | Valore | Pulsante scelto
vbOK | 1 | OK
vbCancel | 2 | Annulla
vbAbort | 3 | Interrompi
vbRetry | 4 | Riprova
vbIgnore | 5 | Ignora
vbYes | 6 | Si
vbNO | 7 | No

Esempi

· msgbox ("Esempio msgbox",vbOK+vbInformation, "Informazione")
· var risposta

risposta= msgbox("Che pulsante hai premuto?",vbYesNo+vbQuestion,"Conferma")

if (risposta == vbYes)

alert("hai premuto sì")

else

alert("hai premuto no");


newdoc

newdoc(stringa)

Restituisce un oggetto di tipo MSXML2.FreeThreadedDOMDocument.4.0 il cui contenuto è stringa con un riferimento al namespace owk = 'http://www.openwork.info/schema'.

Esempio

var stringaXML="<nodo_padre><nodo_figlio1>primo nodo</nodo_figlio1>

                   <nodo_figlio2>secondo nodo</nodo_figlio2></nodo_padre>";

var nuovoDoc = newdoc(stringaXML);

La variabile nuovoDoc sarà un oggetto di tipo MSXML2.FreeThreadedDOMDocument.4.0 il cui XML è la variabile stringaXML.


openbconsole

openbconsole(docName, toReload)

Apre il documento della Business Console.

Parametro

Descrizione

docName

Nome del documento della Business Console comprensivo di estensione. Se non vien specificato, il valore di default è bcmodel.qvw.

Il documento corrispondente ed il relativo file delle etichette devono essere salvati nella cartella bcmodels del webserver.

Il nome del file delle stringhe deve essere del tipo: <docName>.<lingua>, ossia la lingua utilizzata da openwork®.

toReload

Parametro opzionale. Indica se i dati devono essere ricaricati all'apertura del documento docName.

Valore di default 1 (effettua il reload).

Esempio

Supponiamo di dover aprire un documento della Business Console (documento.qvw) dal menù di openwork® procedere come segue:

· Avviare il BPM Tools e aprire il Menu Editor dal menu Sistema.
· Definire una Nuova Funzione Personalizzata.
· Impostare l'etichetta (es. Analisi attività e processi) e l'identificativo (es. 1003); se necessario impostare le autorizzazioni.
· Pubblicare il menu.
· Aprire il file clibraries/menu/menu.js.
· Aggiungere nella funzione OWK_custom_menuclick() il seguente codice:

case 1003:openbconsole("documento.qvw"); return;

· Inserire i file documento.qvw e documento.qvw.it nella cartella bcmodels del webserver;


openForm

openForm(style,idx,readonly,navmode)

Apre una finestra del browser e mostra il documento specificato.

Parametro | Descrizione
style | Tipo di documento
idx | ID del documento
readonly | Se true apre il documento in sola lettura
navmode | In funzione del valore impostato, apre il documento: 0 - in una nuova finestra 1 - nella finestra corrente 2 - nella finestra corrente, passando nell'url anche navmode=2


openprocesschart

openprocesschart(idx,style)

Apre una finestra del browser con il grafico di un modello o di una istanza di processo.

Parametro | Descrizione
idx | Identificativo del modello di processo.
style | Deve assumere il valore 1 nel caso di un modello di processo, 2 nel caso si tratti di istanza di processo.


printPage

printPage(layout,filename,filepath)

Obsoleta. cfr. convertXMLDoc.


queryString

queryString(key)

Restituisce il valore del parametro di nome parametro presente nell'URL della finestra; se il parametro non esiste restituisce la stringa "false".

Esempi

var URL = "list.aspx?listtype=1&listsubtype=2";

var valore = queryString("listtype");//in questo caso si ha valore = 1

var valore = queryString("mode"); //in questo caso si ha valore = 'false';


returnNow

returnNow(type,seconds)

Parametri | Descrizione
type | Parametro di tipo stringa che può assumere i valori 'date' o 'datetime'. Se type = 'date' restituisce la data attuale nel formato XML. Se type = 'datetime' restituisce data e ora attuale nel formato XML.
seconds | Parametro facoltativo. Se 1 restituisce anche il numero in secondi, altrimenti restituisce 00. E' valido solo quando type = datatime.


returnOnlyString

returnOnlyString(testo)

Restituisce la parte iniziale di testo fino al primo carattere numerico o speciale (£$%& ecc.).

Esempi

· testo = "ciao" la funzione restituisce "ciao"
· testo = "ciao37" la funzione restituisce "ciao"
· testo = "37ciao" la funzione restituisce ""
· testo = "" la funzione restituisce ""
· testo = null la funzione restituisce null


rnd

rnd()

Restituisce un numero casuale compreso fra 0 e 1010.


rndn

rndn()

Restituisce una stringa casuale, spettando la seguente sintassi : rndn() = "OWK" + rnd();


saveCloseDoc

saveCloseDoc(win,dontReload,dontAsk,message)

In presenza di modifiche, consente di salvare e chiudere un documento aperto in una finestra.

Funzione utilizzata nella modalità framed, quando vengono aperte, in sequenza, più pagine openwork® nello stesso frame. In questo caso, l'esecuzione di questa funzione assicura la chiusura del documento e quindi l'eventuale avvio di un processo associato.

nota

Nota

Questa funzione viene richiamata di default:

· per la modalità framed dallo script di logout del menu passando, per il parametro win, la window della workarea.
· per le funzionalità di base del menu del desktop di openwork®.

Per le funzionalità custom è necessario richiamare la saveCloseDoc esplicitamente.

Parametri | Descrizione
win | Finestra in cui è aperto il documento da salvare e chiudere.
dontReload | Parametro facoltativo. Coincide con il parametro della funzione command() della document.js; se impostato a false, chiude la finestra dopo il salvataggio e la chiusura del documento. Valore di default è false.
dontAsk | Parametro facoltativo. Consente di salvare il documento senza chiedere conferma all'utente. Valore di default è false.
message | Parametro facoltativo. Messaggio custom da visualizzare se il documento richiede il salvataggio.

Valori restituiti:

• 0 – documento salvato e chiuso correttamente

• 1 - operazione di salvataggio annullata dall'utente

• 2 - errore nell'esecuzione del metodo Save o Close

• 3 - eccezione generica


sendPost

sendPost(url,message)

Invia un post all'indirizzo specificato attraverso il parametro url. Il parametro message contiene il messaggio XML da inviare. La funzione non restituisce alcun risultato.

La funzione viene utilizzata nelle pagine in cui è prevista la gestione del messaggio post che si vuole inviare, ad esempio può essere utilizzata per la pagina list.aspx (cfr. Parametri per l'apertura di un elenco).


showAction

showAction(name)

Mostra l'azione name.


soapmessage

soapmessage(method, service, body, action, showmsg, result, attnames)

Esegue una chiamata SOAP nella sessione corrente al Web Service (es. wsdocument) e al metodo (es. Save). Restituisce il body della risposta.

Parametro

Descrizione

body

Corpo della chiamata SOAP. (cfr. Web Services)

action

Parametro facoltativo. Stringa identificativa dell'azione che sta richiamando la funzione; l'indicazione dell'azione compare in eventuali messaggi di errore visualizzati durante l'esecuzione della funzione (showmsg = true).

showmsg

Parametro facoltativo. Impostato con valore booleano per indicare se deve essere visualizzato un messaggio in presenza di errore. Valore di default true.

attnames

Parametro utilizzato nei seguenti casi:

· Nel metodo DownloadFile o GetAttachment indica il nome del file, completo di path, da trasferire sul client.
· Per i metodi relativi ad azioni di salvataggio su form, rappresenta l'array degli allegati da salvare:

attnames[0] - vettore dei nomi dei file; nel caso di nuovo allegato deve contenere la path completa.

attnames[1] - Vettore degli id. Assume valore 0 per un nuovo allegato.

attnames[2] - Vettore delle versioni.


ss

ss()

Restituisce un oggetto XML di tipo MSXML2.FreeThreadedDOMDocument.4.0 contenente il documento XSL della finestra corrente (documento o elenco).


startPing

startPing()

Avvia il ping periodico e interroga la funzione custom, eventualmente definita, customStartPing() per recuperare l’intervallo temporale tra due ping consecutivi. Il valore di default è memorizzato nella variabile globale owkPingInterval e vale 40000 millisecondi; Restituisce un intero che rappresenta l'identificativo del timer associato al ping periodico.

La startPing() prima di avviare il ping periodico richiama la customStartPing() (funzione personalizzabile da definire nella common.js di clibraries) per recuperare l’intervallo temporale da impostare fra due ping consecutivi; quindi i possibili casi sono 3:

1. customStartPing() non è definita: userà il valore della variabile globale owkPingInterval (40000 millisecondi).
2. customStartPing() definita e restituisce un valore <=0 : la startPing non avvia il ping periodico quindi, se nella customStartPing() non è implementata una gestione del ping, la sesione web potrebbe andare in timeout.
3. customStartPing() definita e restituisce un valore >0 : la startPing usa il valore restituito dalla customStartPing() come intervallo temporale tra due ping consecutivi.


TFN

TFN(x,source)

Dato x documento XML di un elenco, la funzione restituisce il nome della colonna la cui origine è source.

In altri termini restituisce l'attributo name dell'elemento "col" il cui attributo source è pari al valore passato alla funzione.


trim

trim(text)

Restituisce la stringa passata, priva di eventuali spazi iniziali e finali.


winDebug

winDebug (testo)

Apre una nuova finestra del browser e visualizza il testo passato.

Può essere utile in fase di debug per la visualizzazione di testo molto lungo.


Funzioni di datetime.js

Le funzioni datatime.js consentono la manipolazione delle date in una form di openwork®.

Le funzioni utilizzate sono:

· userDateFormat
· ChangeDateFormat
· dateAdd
· dateDiff
· getFormattedTime
· isDate
· todayFormatDate


changeFormatDate

changeFormatDate(date, start_format, end_format)

Trasforma la data dal formato iniziale ( start_format) al formato finale (end_format).

Esempio

changeFormatDate("23/06/2001", "dd/mm/yyyy", "mm-dd-yy")

Risultato della funzione: "06-23-01"


dateAdd

dateAdd(startDate,number,interval)

Restituisce un valore contenente una data alla quale è stato aggiunto un intervallo di tempo specificato.

Parametro | Descrizione
startDate | Data di partenza nel formato mm/dd/yyyy.
number | Numero di intervalli da aggiungere o sottrarre (a seconda del segno).
interval | Tipo di intervallo ("d" - giorni, "m" - mesi, "y" - anni).

Esempi

· dateAdd ("12/23/2006",3,"d") restituirà "12/26/2006"
· dateAdd ("12/23/2006",3,"m") restituirà "03/23/2007"
· dateAdd ("12/23/2006",3,"y") restituirà "12/23/2009"


dateDiff

dateDiff(startDate,endDate,typeRes)

Restituisce la differenza fra due date in giorni o mesi, a seconda del valore del parametro typeRes("d", "m").

Le date devono essere espresse nel formato "mm/dd/yyyy".

Esempi

· dateDiff ("12/23/2005","03/21/2006","d") restituirà 88
· dateDiff ("12/23/2005","03/21/2006","m") restituirà 3


getFormattedTime

getFormattedTime(time,sep,secondsToo,x)

Restituisce l'ora mostrando il simbolo separatore corretto.

Parametro | Descrizione
time | Orario da formattare.
sep | Simbolo separatore. Se nullo il separatore considerato è quello previsto nel profilo dell'utente corrente.
secondToo | Parametro booleano. Se True vengono indicati i secondi.
x | Parametro facoltativo. Oggetto XML di tipo MSXML2.FreeThreadedDOMDocument.4.0 contenente l'XML della form o dell'elenco da cui verrà recuperato il formato dell'ora. Se non indicato, viene considerato l'XML della pagina corrente.


isDate

isDate(val,format)

Restituisce true se il parametro val è una data valida secondo il formato format, altrimenti restituisce false.

Esempi

· isDate ("25/05/2006","dd/mm/yyyy") restituisce true
· isDate ("25/05/2006","mm/dd/yyyy") restituisce false
· isDate ("25/15/2006","dd/mm/yyyy") restituisce false


todayFormatDate

todayFormatDate()

Restituisce la data odierna formattata secondo il formato dell'operatore corrente.


userDateFormat

userDateFormat(x)

Restituisce una stringa che indica il formato della data per l'operatore corrente.

x parametro facoltativo. Se non specificato viene posto uguale al documento XML corrente

Esempio

dd/mm/yyyy

Se non è specificato alcun formato allora viene restituito il formato specificato nel profilo dell'utente corrente.


Funzioni di table.js

Le funzioni table.js vengono aggiunte ad un documento di openwork® nel momento in cui vengono caricati gli elenchi.

Le funzioni utilizzate sono:

· command
· evaluateScript
· fieldValue
· pointedRow
· selectedRows


command

command(name)

Esegue la action il cui id è name. Oltre alle azioni standard è possibile creare, e quindi eseguire, delle azioni personalizzate. (cfr. La sezione action)


fieldValue

fieldValue(source,searchcol,searchvalue, showmsg)

Restituisce il valore di una cella all'interno di un elenco.

In dettaglio:

source

Origine della colonna.

searchcol

searchvalue

Parametri opzionali.

Se i paramentri non sono presenti la riga è quella puntata, altrimenti la riga è quella per cui la colonna avente origine searchcol contiene il valore searchvalue.

Se searchcol e searchvalue indicano una coppia di valori che non permette l'identificazione di una riga, la funzione restituisce stringa vuota.

showmsg

Parametro opzionale. Se impostato a true quando non vi è alcuna riga puntata e quando non vengono passati i parametri searchcol e searchvalue mostra un messaggio.


pointedRow

pointedRow(x,showmsg)

Restituisce la riga puntata come elemento XML.

In dettaglio:

x | Parametro opzionale.Rappresenta un elenco XML, per default è l'elenco XML corrente.
showmsg | Parametro opzionale. Se impostato a true quando non vi è alcuna riga puntata mostra un messaggio. Valore di default true. Se impostato a false i messaggi di errore non sono mostrati.


selectedRows

selectedRows(x)

Restituisce le righe selezionate come collection di elementi XML.

In dettaglio:

x Parametro opzionale, è un elenco XML, per default è l'elenco XML corrente.


Funzioni di document.js

Le funzioni document.js sono alla base della gestione di un documento in openwork®.

Le funzioni utilizzate sono:

· applyActionContext
· Command
· delTableRow
· DFC
· DFN
· DFP
· displayE
· disableTableRowSelection
· discardChanges

· docParameters
· insTableRow
· moveDownRow
· moveUpRow
· setContext
· selTableRow
· selectedTableRow


applyActionContext

applyActionContext(x)

Consente di impostare la visibilità delle azioni tramite Contesto (context) della form. Impostando un elemento di nome "action_nomeaction" nel context è possibile pilotare la visibilità dell'azione. Per utilizzarla occorre impostare il parametro FieldName come "action_nomeaction" nel metodo AddContext/AddConfig di variazione del context relativo; riuscendo a pilotare la visibilità dell'azione (così come accade per gli elementi di una tabella). Questa funzione viene richiamata in automatico al caricamento della form.

x parametro facoltativo. Se non specificato viene posto uguale al documento XML corrente


command

Command(name, type, folderid, dontReload, closeWin)

Esegue la action il cui id è name.

Parametro

Descrizione

type

Viene utilizzato per name = 'createmessage', cioè quando si esegue il comando per creare un messaggio con un riferimento al documento, e per name = 'insertinfolder', cioè quando si esegue la fascicolazione.

Per name = 'createmessage' i possibili valori:

1 - Crea un messaggio di posta elettronica con un link al documento.

2 - Crea un messaggio di posta interna con un link al documento.

3 - Copia il link nella clipboard.

altri valori - Visualizza la maschera di selezione della tipologia di messaggio

Per name = 'insertinfolder' i possibili valori:

1 – viene disabilitato il passaggio dal Piano di Classificazione.

altri valori – viene aperto il Piano di Classificazione per selezionare la tipologia di fascicolo.

Questo parametro è l'equivalente di listoninsfold definibile come variabile di applicazione o come parametro di apertura. Quindi può essere impostato, nell'ordine mutuamente esclusivo:

- da codice
- da parametro di apertura
- da variabile di applicazione

questo parametro non viene considerato se è impostata la tipologia di fascicolazione per il modello di form.

folderid

Identificativo del documento. Viene utilizzato quando viene fascicolato un documento (solo quando name='saveinfolder').

dontReload

Valore di default false. Viene utilizzato quando:

· viene eseguita un'azione per cui è richiesto il salvataggio del documento, quindi nel caso in cui name assuma i seguenti valori: save, store, publish, send, saveinfolder, invalidate, revision, classify, numerate. Se dontReload = true, il documento non viene riaperto dopo il salvataggio; in tal caso se l'azione è stata conclusa correttamente, la funzione command restituisce true.
· name = 'cancel' e dontReload = false: vengono annullate le modifiche al documento che viene chiuso. Questo parametro ha effetto solo per i documenti esistenti. Infatti, nel caso di nuovo documento, dopo il salvataggio, viene eseguita l'apertura del documento appena creato.

closeWin

Se true e dontReload=false, dopo il salvataggio o la pubblicazione chiude, in sequenza, prima il documento con una chiamata SOAP e poi la finestra del documento (cioè l'istanza del browser).

L'utilizzo del parametro risulta utile quando, ad esempio, si deve pubblicare un documento e poi chiuderlo: in questo caso è utile costruirsi un'azione custom che pubblica il documento con una chiamata SOAP e di seguito richiama la command per chiudere la finestra del browser.

Esempi

Command('publish', null, null, false, true)

Documento pubblicato e chiuso.

Command(‘save’, null, null, false, true);

Documento salvato e chiuso.


DFC

DFC(x,fieldname)

Restituisce il nome del controllo container in cui si trova un campo di nome fieldname.

In dettaglio:

x è l'oggetto DOM del documento.


DFN

DFN(x,source,connection)

Restituisce il nome del campo definito dall'origine source e dalla connessione connection nel documento x.


DFP

DFP(x,fieldname,row)

Restituisce la path completa di un campo XML di nome fieldname.

row è l'eventuale riga di una tabella su cui si trova il campo.

x è l'oggetto DOM del documento.


DFT

DFN(x,type,connection)

Restituisce il tipo del campo definito dall'origine type e dalla connessione connection nel documento x.


delTableRow

delTableRow(fname,fid, rowid,calcfields)

Elimina la riga selezionata da un controllo di tipo table.

In dettaglio:

fname | Valore dell'attributo owk:fieldname del controllo.
fid | Valore dell'attributo id del controllo.
rowid | Identificativo della riga da rimuovere nel formato “R_” + fielname della tabella + ”_” + posizione della riga a partire da 1.
calcfields | Elenco dei campi il cui valore dipende dal numero di righe presenti nella tabella e per i quali si renda necessario ricalcolare il valore.

Esempio

Nella tabella con fieldname ‘tbl_prodotti’ e id ‘tbl_prodotti’, si desidera eliminare la riga in posizione 3.

La funzione diventa:

delTableRow(‘tbl_prodotti’,’tbl_prodotti’, ‘R_ tbl_prodotti_3’,null);


docParameters

docParameters(x)

Restituisce un vettore contenente le seguenti proprietà del documento x:

1° elemento: identificativo

2° elemento: stile

3° elemento: identificativo della connessione

4° elemento: identificativo del modello

5° elemento: sottostile (assume valore 1 se si tratta di un protocollo interno, 0 negli altri casi)


disableTableRowSelection

disableTableRowSelection (fid, row)

In una tabella disabilita la selezione di una riga alla posizione row.

fid valore dell'attributo id della tabella.

row posizione della riga a partire da 1.


discardChanges

discardChanges(x)

Consente di ignorare in chiusura della form le modifiche apportate alla stessa.

Da utilizzare, per esempio, per utilizzare la form come pop-up di appoggio in cui inserire valori che devono essere passati alla form chiamante.

x parametro facoltativo. Se non specificato viene posto uguale al documento XML corrente.


insTableRow

insTableRow(fname, fid, calcfields)

Inserisce una riga all'interno di un controllo di tipo table.

In dettaglio:

fname | Valore dell'attributo owk:fieldname del controllo.
fid | Valore dell'attributo id del controllo.
calcfields | Elenco dei campi il cui valore dipende dal numero di righe presenti nella tabella e per i quali si renda necessario ricalcolare il valore.

Esempio

L'esempio che segue mostra:

· l'utilizzo della funzione insTableRow passato come parametro dtype (tipo di campo modificato) alla funzione cutstom di document.js customafterupdatefield .
· l'utilizzo della funzione insTableRow per inserire una riga all'interno di una tabella.

A seguito dell'evento di aggiunta di una nuova riga nella tabella di partenza tbl_uril o di modifica di una casella di testo presente in una form, vengono inserite nuove righe in due tabelle differenti tbl_quantita e tbl_quantita.

function customafterupdatefield(dtype, id, path, upddoc, fname, row){

try{

switch(fname){

case 'tbl_uril':

if(dtype == 'instablerow') //se la modifica effettuata corrisponde all'inserimento

di una riga nella tabella tbl_uril

{

document.XMLDocument=upddoc;

insTableRow('tbl_quantita','tbl_quantita'); //inserisci una riga nelle tabelle

tbl_quantita e tbl_quantita

upddoc.loadXML(doc().xml);

document.XMLDocument=upddoc;

displayE(upddoc,'tbl_uril');

displayE(upddoc,'tbl_quantita');

}

case 'casella di testo': //la modifica effettuata corrisponde

alla modifica di casella di testo

document.XMLDocument=upddoc;

insTableRow('tbl_quantita','tbl_quantita');//inserisci una riga nelle tabelle

tbl_quantita e tbl_quantita

upddoc.loadXML(doc().xml);

document.XMLDocument=upddoc;

displayE(upddoc,'tbl_quantita');

}

}

catch(er){}

}


moveDownRow

moveDownRow(fname, fid, rowid, calcfields)

Sposta in basso di una posizione la riga selezionata in un controllo di tipo table.

In dettaglio:

fname | Valore dell'attributoowk:fieldname del controllo.
fid | Valore dell'attributo id del controllo.
rowid | Oggetto TR da spostare.
calcfields | Elenco dei campi il cui valore dipende dal numero di righe presenti nella tabella e per i quali si renda necessario ricalcolare il valore.


moveUpRow

moveUpRow(fname,fid,rowid,calcfields)

Sposta in alto di una posizione la riga selezionata in un controllo di tipo table.

In dettaglio:

fname | Valore dell'attributo owk:fieldname del controllo.
fid | Valore dell'attributo id del controllo.
rowid | Oggetto TR da spostare.
calcfields | Elenco dei campi il cui valore dipende dal numero di righe presenti nella tabella e per i quali si renda necessario ricalcolare il valore.


setContext

setContext(fname, visible, changeable, secret, required, invalidable, locked, id)

La funzione imposta il contesto del campo fieldname e ridisegna il controllo con identificativo id. È utile se si vogliono cambiare lato client le proprietà di accesso a un controllo.


selTableRow

selTableRow(row,fname,fid,uclass,sclass)

Seleziona una riga all'interno di un controllo di tipo table.

In dettaglio:

row | Oggetto TR da selezionare.
fname | Valore dell'attributo owk:fieldnamedel controllo.
fid | Valore dell'attributo id del controllo.


selectedTableRow

selectedTableRow(fname, msg, x)

Restituisce la posizione della riga selezionata di una tabella (table) a partire da 1. Se non è selezionata alcuna riga restituisce 0.

In dettaglio:

fname | valore dell'attributo owk:fieldname del controllo
msg | parametro facoltativo, messaggio da visualizzare nel caso in cui non sia presente alcuna riga
x | parametro facoltativo. Se non specificato viene posto uguale al documento XML corrente


Funzioni di attachments.js

Le funzioni attachments.js vengono aggiunte ad un documento di openwork® nel momento in cui si inserisce il campo "allegati" per la gestione degli stessi.

Le funzioni utilizzate sono:

· addAttachFromModel
· attachExists
· attachFile
· AttCommand
· cFM
· CheckInOut
· classifyAttach
· convertAttach
· delAttach

· formToPdf
· newAttach
· newVersAttach
· openAttach
· saveAttachIn
· scanAttach
· selectFile
· signAttach


addAttachFromModel

addAttachFromModel(modelid, fileName, extension, showinput, compile, primary, skipsave)

Allega un file alla form originato da un modello di autocomposizione, eventualmente compilato con i valori contenuti nella form.

La funzione restituisce la path completa del nuovo allegato.

In dettaglio:

modelid | Identificativo del modello di autocomposizione.
fileName | Il nome da assegnare al nuovo allegato, se non indicato viene richiesto il suo inserimento tramite inputbox.
extension | Eventuale estensione del nuovo allegato.
showinput | Può assumere valore true o false ed indica se deve essere visualizzata la inputbox di inserimento del nome da assegnare al nuovo allegato. Se è indicato fileName questo viene posto come valore di default della inputbox.
compile | Può assumere valore true o false ed indica se il modello deve essere compilato con i valori contenuti nella form: in questo caso il documento deve essere necessariamente salvato prima che la funzione venga richiamata.
primary | Se impostato a true e l'allegato aggiunto è il primo allegato, questo viene impostato come primario; valore di default true.
skipsave | Se impostato a true allora non viene verificato (prima dell'esecuzione del comando) se il documento è stato salvato.


attachExists

attachExists(filename, showmsg)

Verifica l'esistenza di un allegato con lo stesso nome.

In dettaglio:

filename

Nome dell'allegato, anche completo di path.

showmsg

Può assumere i seguenti valori:

0 | Se viene trovato un allegato con nome filename la funzione restituisce la posizione dell'ultima versione dell'allegato, diversamente restituisce 0.
1 | Se viene trovato un allegato con nome filename la funzione mostra un messaggio e la funzione restituisce -1, diversamente restituisce 0.
2 | Se viene trovato un allegato con nome filename viene richiesto se si vuole crearne una nuova versione, se si sceglie di creare una nuova versione la funzione restituisce la posizione dell'ultima versione dell'allegato, se si sceglie di non creare una nuova versione la funzione restituisce -1, se non viene trovato alcun allegato con nome filename la funzione restituisce 0.

La posizione dell'allegato parte da 0.


attachFile

attachFile(primary)

Apre la finestra di selezione di un file e lo allega.

Se primary è impostato a true e se l'allegato aggiunto è il primo, allora viene impostato come primario. Valore di default true.


AttCommand

AttCommand(name)

Esegue l' action il cui id è name.

Oltre alle azioni standard è possibile creare, e quindi eseguire, delle azioni personalizzate. Queste possono avere lo stesso identificativo delle azioni proprietarie in modo da sovrascriverne il comportamento (override delle azioni proprietarie). In tal caso se si vuole che il codice proprietario non venga eseguito la funzione deve restituire true.

Esempio

Di seguito la funzione AttCommand da cui è possibile risalire alle funzioni richiamate dalle singole azioni. In questo modo è possibile identificare immediatamente le funzioni su cui effettuare l'override qualora si volesse modificare il comportamento.

switch (name)

{

   case "scan":scanAttach();break;

   case "addfile":attachFile();break;

   case "openfile": openAttach(0);break;

   case "filerevision":newVersAttach();break;

   case "delfile":delAttach();break;

   case "saveinfile":saveAttachIn();break;

   case "sign":signAttach();break;

   case "checkinout":CheckInOut();break;

   case "pdfconversion":convertAttach(0);break;

   case "autocompile":addAttachFromModel();break;

   case "formtopdf":formToPdf(1,true,name);break;

   case "ocr":convertAttach(1);break;

}


cFM

cFM()

Restituisce un oggetto del tipo owkclient.FileManager per la gestione dei file allegati lato client.


CheckInOut

CheckInOut(filepos)

Esegue il checkin o il checkout di un file allegato.

filepos è la posizione dell'allegato all'interno della lista degli allegati così come riportato nell'XML della form. La posizione dell'allegato parte da 1.


classifyAttach

classifyAttach(filepos, classname, classid)

Permette la classificazione di un allegato.

In dettaglio:

filepos | Posizione dell'allegato all'interno della lista degli allegati così come riportato nellXML della form; la posizione dell'allegato parte da 1.
classname | Nome della classe, parametro di tipo stringa.
classid | Identificativo della classe, numerico.

Tale funzione risulta utile quando si vogliono classificare singolarmente i singoli attachments di una form in modo da poterli inserire correttamente in un documentale esterno.


convertAttach

convertAttach (type, filepos)

Converte un file allegato.

In dettaglio:

type

Numero che può assumere i seguenti valori:

0 | conversione in PDF
1 | OCR con la possibilità di scegliere tra i seguenti diversi tipi di output: doc, HTML, txt, XML, rtf.

filepos

Posizione dell'allegato all'interno della lista degli allegati così come riportato nell'XML della form; la posizione dell'allegato parte da 1.

La funzione è disponibile solo se è installata la componente aggiuntiva PDF Converter.


delAttach

delAttach (filepos, showmsg)

Elimina un allegato.

In dettaglio:

filepos | Posizione dell'allegato all'interno della lista degli allegati così come riportato nell'XMl della form; la posizione dell'allegato parte da 1.
showmsg | Se true visualizza un messaggio di conferma; valore di default true.


formToPdf

formToPdf(modelid ,showmsg,action,primary)

Converte la form in un file PDF e lo allega il risultato della conversione alla form. Per ulteriori informazioni sulla trasformazione di una form o di un elenco fare riferimento al capitolo cfr. Trasformazione di una form o di un elenco.

In dettaglio:

modelid | Identificativo della trasformazione XSL da utilizzare per la produzione del file PDF.
showmsg | Opzionale, può assumere i valori true/false. Indica se devono essere visualizzati eventuali messaggi di errore, valore di default true.
action | Nome della azione che sta eventualmente richiamando la funzione.
primary | Se impostato a true e se l'allegato aggiunto è il primo, questo viene impostato come primario; valore di default true


newAttach

newAttach (filename, abspath, extension, version, linkedid, external, repname,repId, filesize, classname, classid, primary, locked)

Crea un nuovo nodo attachment e restituisce il nodo creato.

La funzione customMaxLenAttach() restituisce il massimo valore consentito (espresso in kB) per la somma delle dimensioni dei file allegati in un singolo documento di openwork®. Se tale valore non è specificato nella funzione customMaxLenAttach() o se tale funzione non esiste, allora il valore di default è 4MB (4096 KB).

Parametro

Descrizione

filename

Parametro obbligatorio. Possibili valori:

· path del file + nome + estensione
· nome + estensione
· nome

filename, unito con abspath ed extension, è utile per localizzare il file da allegare e valorizzare gli elementi filename (che contiene nome + estensione) ed extension del nodo attachment.

abspath

Parametro non obbligatorio. Valore di default 1. Possibili valori:

1 - indica che filename è il nome del file completo di path.

0 - il file viene cercato nella cartella temporanea creata dall'applicazione sul client.

extension

Parametro non obbligatorio. Indica l'estensione del file. Se non specificato la funzione cercherà di ricavare l'estensione dal nome;se non è possibile ricavarla dal nome, allora verrà posta pari a stringa vuota.

version

Numero intero identificativo della versione del file, se non indicato viene posto uguale a 1.

classname

Stringa descrittiva di una eventuale classificazione dell'allegato.

classid

Numero identificativo di una eventuale classificazione dell'allegato.

primary

Se impostato a true ed è il primo l'allegato aggiunto, se è il primo allegato, viene impostato come primario. Valore di default true.

locked

Parametro booleano facoltativo, se impostato a true blocca il file appena allegato.

Senza specificare nessun altro parametro quando si effettua il salvataggio del documento, il file indicato tramite i parametri filename ed extesion viene salvato nel repository di default definito in fase di configurazione della piattaforma.

Tramite gli altri parametri è possibile ottenere i risultati di seguito descritti:

1. Salvare un file in un repository diverso da quello di default:

repname deve essere valorizzato con il nome del repository ovvero con il nome della classe di connessione; se è stato definito un repository di default diverso da openwork® e si vuole comunque salvare il file nel repository di openwork® bisognerà impostare il parametro repname a openwork®.

2. Creare un allegato come link a un allegato di un'altra form:

linkedid deve essere valorizzato con l'idendificativo dell'allegato che si vuole collegare, l'allegato risulterà in sola lettura e non revisionabile.

abspath viene forzato a 1.

filename deve contenere nome + estensione.

3. Creare un allegato come un file in un percorso di rete esterno.

external deve essere valorizzato 1.

repname deve essere valorizzato “openwork”.

linkedid deve essere valorizzato -1.

abspath viene forzato a 1.

filename deve contenere nome + estensione completa di path di rete

attenzione

Attenzione

Il carattere \ in javascript è il carattere di escape quindi va raddoppiato per essere inserito se all’interno di una stringa passata alla funzione newAttach(), es.: \\\\server\\folder\\file.ext

Se invece il percorso di rete viene digitato ad esempio in una input box (come fatto nella relativa procedura di test) allora occorre utilizzare la normale path di rete, es.: \\server\folder\file.ext

attenzione

Attenzione

Perché la funzione newAttach effettui correttamente l’attachment dell’allegato occorre che l’utente di windows con cui gira l’applicazione virtuale (Pool di applicazioni per versione server o processo Asp.Net per quella demo) abbia i permessi di accesso in lettura alla cartella di rete in questione.

4. Creare un allegato con un file già memorizzato in un repository esterno.

repname deve essere valorizzato con il nome del repository.

repId di tipo stringa, deve contenere l'identificativo dell'allegato.

filesize parametro numerico opzionale, è la dimensione del file, se non indicato sarà posto uguale ad 1.

In questo caso se l'allegato viene cancellato dalla form di openwork®, quest'ultimo comunicherà al repository esterno di cancellare il file.

5. Creare un allegato con un link a un file già memorizzato in un repository esterno:

repname deve essere valorizzato con il nome del repository.

RepId parametro stringa, deve contenere l'identificativo dell'allegato.

filesize parametro numerico opzionale, è la dimensione del file, se non indicato sarà posto uguale ad 1.

linkedid deve essere <>0.

Nel caso casi 3 l'allegato risulterà modificabile e revisionabile.

Nel caso casi 4 l'allegato risulterà modificabile e non revisionabile.

La funzione non esegue un controllo sulla presenza o meno di allegati con lo stesso nome e lo stesso numero di versione, per cui essa deve essere necessariamente richiamata dopo aver effettuato un controllo con la funzione attachExists().


newVersAttach

newVersAttach (filepos,filesource, verifiylock)

Crea una nuova versione di un allegato e restituisce l'elemento XML del nuovo allegato creato.

In dettaglio:

filepos | Posizione dell'allegato all'interno della lista degli allegati così come riportato nella form XML; la posizione dell'allegato parte da 1.
filesource | Path completa della nuova versione.
verifiylock | Parametro booleano, se impostato a true inibisce la revisione di un file bloccato, valore di default true.


openAttach

openAttach (mode,filepos,visible,fromclient)

Apre un allegato.

In dettaglio:

mode

Modalità di apertura; può assumere i seguenti valori:

0 | apre l'allegato
1 | apre l'allegato nel gestore delle immagini
2 | aggiorna l'allegato, valido solo per documenti di tipo word serve ad aggiornare le variabili

filepos

Posizione dell'allegato all'interno della lista degli allegati così come riportato nella form XML; la posizione dell'allegato parte da 1.

visible

Può assumere i valori:

1 | Indica se l'allegato word deve essere aperto nella finestra di Word (ciò implica che manualmente l'utente deve effettuare il salvataggio del file alla chiusura)
0 | Indica che il file autocomposto viene aggiornato ma non mostrato (il file viene automaticamente salvato in Word)

fromclient

Indica che l'apertura di un allegato esterno deve avvenire senza richiederlo al server. Può assumere valori 1 o 0.


saveAttachIn

saveAttachIn(filepos,filedst,fromClient,showMsg,overwrite)

Salva il file allegato in un cartella.

In dettaglio:

filepos | Posizione dell'allegato dall'interno della lista degli allegati così come riportato nella form XML; la posizione dell'allegato parte da 1.
filedst | Cartella in cui deve essere salvato l'allegato; se non specificata viene aperta una finestra di selezione della cartella. Nota: Se si specifica questo parametro e si sta eseguendo questa funzione su browser IE7 con modalità protetta attiva si potrebbe ottenere un messaggio di violazione di accesso per i vincoli di sicurezza imposti da tale modalità.
fromClient | Se assume valore 1, indica che l'allegato salvato deve essere scaricato dal server
showMsg | Se false la funzione non mostrerà messaggi di errore e/o conferma e l'eventuale errore verrà impostato nella return. Default true.
overwrite | Usata solo nel caso di showMsg false; se true eventuali file con lo stesso nome verranno sovrascritti senza messaggi di conferma, se false non verranno sovrascritti e verrà restituito un errore. Default false.

La funzione saveAttachIn restituisce:

· se showMsg = TRUE , un valore booleano TRUE/FALSE.
· se showMsg = FALSE un array di due elementi:
o il primo elemento dell'array è un valore booleano avvalorato a TRUE se il file è stato salvato correttamente, FALSE altrimenti;
o il secondo elemento dell'array contiene un eventuale messaggio di notifica.


scanAttach

scanAttach()

Apre la finestra di scansione di un file; quando la finestra viene chiusa se l'operazione è stata confermata il file creato viene inserito come nuovo allegato.


selectFile

selectFile()

Apre la finestra di selezione di un file e restituisce una stringa con la path completa del file.


signAttach

signAttach(filepos, fromClient, showmsg)

Apre la finestra di firma di un allegato.

In dettaglio:

filepos | Posizione dell'allegato all'interno della lista degli allegati così come riportato nella form XML; la posizione è a partire da 1.
fromClient | Se diverso da zero indica che il file non deve essere scaricato dal server, ma il file è reperibile sul client.
showmsg | Se omesso chiede se allegare un altro file o sostituire quello selezionato, se uguale a 6 allega un altro file senza fare nessuna domanda, se uguale a 7 sostituisce il file selezionato senza fare nessuna domanda.


Funzioni custom di attachment.js

Le funzioni attachments.js sono caricate solo nei documenti se è stato inserito il controllo allegati.

Le funzioni utilizzate sono:

· attcustomcommand
· customMaxLenAttach


attcustomcommand

attcustomcommand (action)

Da utilizzarsi per richiamare del codice javascript su un comando della toolbar degli allegati il cui identificativo è action.

action può assumere anche il valore di una azione proprietaria, in tal caso se la attcustomcommand restituisce false viene eseguito comunque il codice proprietario dopo quello custom, se la attcustomcommand restituisce true il codice proprietario non viene eseguito.


customMaxLenAttach

customMaxLenAttach()

Funzione nella quale è possibile personalizzare il massimo valore permesso per la somma delle dimensioni dei file allegati in un singolo documento di openwork®.


Funzioni custom di classificaton.js
· customOnKeyDown
· customSelection
· openList


customOnKeyDown

customOnKeyDown(keyCode, shiftPressed, ctrlPressed, altPressed)

Funzione richiamata alla pressione di un tasto.

keyCode | codice ASCII del tasto premuto.
shiftPressed | booleano, vale true se è stato premuto il tasto SHIFT, anche contemporanameante ad un altro tasto.
ctrlPressed | booleano, vale true se è stato premuto il tasto CTRL, anche contemporanameante ad un altro tasto.
altPressed | booleano, vale true se è stato premuto il tasto ALT, anche contemporanameante ad un altro tasto.


customSelection

customSelection(id,style,action)

Viene richiamata quando il parametro action passato alla classification.aspx assume un valore diverso da quelli indicati nel capitolo Il piano di classificazione e permette di codificare operazioni custom.

In dettaglio:

id

Identificativo della voce di classificazione selezionata

style

Può assumere i seguenti valori:

1 | documento in entrata
2 | documento in uscita
3 | documento
4 | fascicoli

action

Valore del parametro action passato alla classification.aspx.


openList

openList (id,style)

Viene richiamata quando la action passata alla pagina classification.aspx è list.

Se restituisce false viene aperto l'elenco dei documenti della tipologia selezionata.


Funzioni custom di common.js

· customconfirmation
· customna
· customsoaperror
· customDisplayE


customconfirmation

customconfirmation(action)

Richiamata sempre quando sul documento viene eseguita una delle azioni qui elencate: salvataggio, archiviazione, pubblicazione, spedizione, revisione, numerazione/protocollazione; è inoltre richiamata quando da un elenco viene richiamata una delle seguenti azioni: eliminazione, archiviazione, pubblicazione, chiusura di sessioni, prenotazione di una attività, trasferimento di una attività, esecuzione di una attività, termine di una attività, assegnazione di una attività.

action è l'identificativo dell'azione; l'etichetta dell'azione è ottenibile tramite l'istruzione:

document.getElementById("action_" + name).nextSibling.innerHTML

La funzione può essere utilizzata per richiedere conferma sull'esecuzione dell'azione con messaggi customizzati. Se la funzione restituisce vbNo, l'operazione viene annullata.


customna

customna(actionid)

Richiamata quando non si è abilitati ad eseguire un'azione all'interno di un elenco o di un documento.

actionid è l'id dell' azione.


customsoaperror

customsoaperror(errnumber,errdescription,action)

Richiamata dalla soapmessage() quando si genera un errore nella chiamata ai Web Services o quando il web service restituisce un codice di errore.

In dettaglio:

errnumber | Codice di errore.
errdescription | Descrizione dell'errore.
action | Id dell'azione.

Se la funzione restituisce true non viene visualizzato il messaggio di errore.


customDisplayE

customDisplayE(arrId)

Richiamata quando viene aggiornato l'HTML di alcuni controlli.

arrId stringa contenente gli identificativi, separati dal carattere ‘,', dei controlli aggiornati .


Funzioni custom di document.js

· customafterupdatefield
· customcommand
· customOnKeyDown
· customonload
· customonunload
· customonprintlabel
· customrectifytableformat
· customsave
· customvalidation


customafterupdatefield

customafterupdatefield (dtype, id, path, upddoc, fname, row)

Richiamata dopo la modifica di un campo. Se la funzione restituisce false verrà ripristinato il valore del campo precedente alla modifica.

dtype indica il tipo di campo modificato e la modalità con cui è avvenuta la modifica; di seguito si riporta un elenco dei possibili valori assunti da dtype:

city | modifica di un campo città
clientlnew | modifica di un campo lista di anagrafica tramite creazione di una nuova anagrafica
clientlselection | modifica di un campo lista di anagrafica tramite selezione da una lista di anagrafica
clientnew | modifica di un campo di anagrafica tramite creazione di una nuova anagrafica
clientselection | modifica di un campo di anagrafica tramite selezione da una lista di anagrafica
currency | modifica di un campo contenente un valore valuta
delattach | eliminato un allegato; per ottenere le informazioni dell'allegato eliminato occorre recuperare l'xml del documento gestendo la attcustomcommand(), funzione richiamata prima della presente
deltablerow | eliminazione di una riga da una tabella
documentlselection | modifica un campo lista di documenti tramite selezione da una lista di documenti con tipologia omogenea
documentselection | modifica un campo documento tramite selezione da una lista di documenti con tipologia omogenea
float | modifica di un campo contenente un valore decimale
gdocumentlselection | modifica un campo lista di documenti tramite selezione da una lista
gdocumentselection | modifica un campo documento tramite selezione da una lista di documenti
genericselection | modifica tramite listbutton
instablerow | inserimento di una riga in una tabella
integer | modifica di un campo contenente un valore intero
lockattach | bloccato\sbloccato un allegato
mailattach | modificato campo selezione(invia l'allegato nelle e-mail) di un allegato
movedownrow | spostamento in basso di una riga di una tabella
moveuprow | spostamento in alto di una riga di una tabella
newattach | aggiunto un nuovo allegato
newversattach | aggiunta una nuova revisione di un allegato
noteattach | modificato campo annotazioni di un allegato
officeselection | modifica di un campo ufficio
percentage | modifica di un campo contenente un valore percentuale
primaryattach | impostato allegato primario
rmvfromclientlist | rimozione di un elemento da una lista di anagrafica
rmvfromdoclist | rimozione di un elemento da una lista di documenti
roleselection | modifica di un campo ruolo
sign | modifica di un campo firma
signattach | apposta firma digitale ad un allegato; questo evento è preceduto da un evento di tipo newattach o newversattach
text | modifica di un campo contenente un valore di tipo testo
userlistselection | modifica di un campo lista di operatori
userlistselectionfornotify |
userselection | modifica di un campo operatore

id identificativo del controllo HTML modificato

path percorso del campo all'interno del documento XML

upddoc documento XML modificato

fname fieldname del campo modificato

row riga del campo modificato; nel caso di modifica della sezione allegati, indica la posizione, nel nodo fname, del nodo figlio attachment modificato/aggiunto


customcommand

customcommand(action)

Da utilizzarsi per richiamare codice javascript su un comando della toolbar il cui identificativo è action.

action può assumere anche il valore di un'azione proprietaria: in tal caso se la customcommand restituisce false viene eseguito comunque il codice proprietario dopo quello custom, se la customcommand restituisce true il codice proprietario non viene eseguito.

Esempio

Supponiamo di voler definire un'azione custom che modifica il comportamento della publish pur conservandone le stesse regole di visibilità (override di una action proprietaria), ovvero fare in modo che l'azione Pubblica pubblichi il documento e lo chiuda. Si dovrà definire la customcommand nella maniera di seguito riportata.

function customcommand(action)

{

try

{

switch(action)

{

case "publish":

Command("publish",null,null,true);

window.close();

return true;

default:

return false;

}

}

catch(er){msgbox("customcommand: " + er.message, vbCritical, boxtit)}

}

Esempio

Definizione di un'azione custom che modifica il comportamento della action printlabel per fare in modo che l'azione Segnatura apre la pagina di scansione immagini per personalizzare la stampa delle etichette (rif. Gestione delle etichette )

function customcommand(action)

{

if(action=="printlabel"){

window.open("scanview.aspx?action=printlabel&x=3&y=5&width=15&height=15&resolution=400");

//viene richiamata la pagina scanview.aspx con parametro action=printlabel

return true;

}

}


customOnKeyDown

customOnKeyDown (keyCode, shiftPressed, ctrlPressed, altPressed)

Funzione richiamata alla pressione di un tasto.

In dettaglio:

keyCode | codice ASCII del tasto premuto.
shiftPressed | parametro booleano, vale true se è stato premuto il tasto SHIFT, anche contemporaneamente ad un altro tasto.
ctrlPressed | parametro booleano, vale true se è stato premuto il tasto CTRL, anche contemporaneamente ad un altro tasto.
altPressed | parametro booleano, vale true se è stato premuto il tasto ALT, anche contemporaneamente ad un altro tasto.


customonload

customonload()

Richiamata sul caricamento di un documento; si ricorda che un documento viene ricaricato ogni qualvolta si utilizza la funzione display().


customonunload

customonunload()

Richiamata quando un documento viene chiuso.


customprintlabel

customprintlabel

Questa funzione custom, a differenza delle altre, deve essere presente solo se necessaria e non deve restituire un valore booleano ma una stringa HTML.

La action “printlabel” chiama la pagina printlabel.html il cui contenuto è il seguente:

<html>

<head>

   <script language='javascript'>

     function printPage(){

     var h = self.opener.printLabel();

     document.getElementById("bodyPrint").innerHTML = h;

     if (window.print) {window.print();}

   </script>

   <title id="prnTit"></title>

   <link id='pageCss' rel='stylesheet' type='text/css' href='Css/label.css'></link>

</head>

<body id='bodyPrint' onload="printPage()" style='margin:0'>

   <!-- HTML personalizzato -->

</body>

La sezione della pagina che si può personalizzare è quella interna al BODY.

Se la funzione customprintlabel non è presente verrà visualizzata, ed eventualmente stampata, la segnatura standard messa a disposizione dal sistema; se la funzione esiste essa deve restituire quella parte di HTML personalizzata da inserire nel BODY.

Si noti che gli stili per la formattazione del testo si trovano in Css/label.css: se si desidera dare un altro aspetto alla segnatura è sufficiente creare e/o modificare le classi di questo foglio di stile.


customrectifytableformat

customrectifytableformat(id, fieldname)

Funzione che permette di intercettare le invocazioni alla funzione deputata alla verifica e alla correzione di difformità della struttura di una tabella di un'istanza di form rispetto al modello.

Questa funzione viene chiamata solo la prima volta che si esegue una qualsiasi operazione su una tabella dopo l’apertura dell’istanza di form. Se questa funzione non viene definita o se restituisce true viene verificata l’esistenza di difformità e se necessario viene eseguita la rettifica.

In dettaglio:

id | Identificativo HTML della tabella openwork su cui è in esecuzione la verifica/rettifica.
fieldname | Fieldname della tabella openwork.


customsave

customsave(action)

Richiamata sempre quando viene eseguita una delle seguenti azioni sul documento: salvataggio, archiviazione, pubblicazione, spedizione, fascicolazione, annullamento, revisione, classificazione, numerazione/protocollazione; action è l'identificativo dell'azione.

Se la funzione restituisce false l'azione viene annullata.


customvalidation

customvalidation(action)

Richiamata solo se il documento è stato modificato e successivamente viene eseguita sul documento una delle azioni qui elencate: salvataggio, archiviazione, pubblicazione, spedizione, fascicolazione, annullamento, revisione, classificazione, numerazione/protocollazione; action è l'identificativo dell'azione.

Se la funzione restituisce false l'azione viene annullata.


Funzioni custom di menu.js

· customOnKeyDown
· customonload
· OWK_custom_menuclick


customOnKeyDown

customOnKeyDown (keyCode, shiftPressed, ctrlPressed, altPressed)

Funzione richiamata alla pressione di un tasto.

keyCode | codice ASCII del tasto premuto.
shiftPressed | booleano, vale true se è stato premuto il tasto SHIFT, anche contemporaneamente ad un altro tasto.
ctrlPressed | booleano, vale true se è stato premuto il tasto CTRL, anche contemporaneamente ad un altro tasto.
altPressed | booleano, vale true se è stato premuto il tasto ALT, anche contemporaneamente ad un altro tasto.


customonload

customonload()

Richiamata sul caricamento del desktop.


OWK_custom_menuclick

OWK_custom_menuclick(fcode)

Da utilizzarsi per richiamare codice javascript su una voce di menu il cui codice è fcode (fcode viene impostato dal Menu Editor del BPMTools); essa può essere una funzione del tipo:

function OWK_custom_menuclick(fun)

{

switch (fun)

{

case 1001: openword(); return;

case 1002: openexcel();return;

default: OWK_notimplemented();

}

}


Funzioni custom di organizationtree.js

· customconfirmation
· customOnKeyDown


customconfirmation

customconfirmation(selection)

Viene richiamata nella pagina organizationtree.aspx quando viene effettuata e confermata una selezione. Il parametro selection è un nodo XML contente le selezioni nella forma:

<selection xmlns="http://www.openwork.info/schema">

     <user id="U  8" name="Salvatore Antonacci"

           fullpath="Salvatore Antonacci(Responsabile\Ufficio Acquisti)"/>

     <user id="U  5" name="Giovanni Verdi"

           fullpath="Giovanni Verdi (Responsabile\Ufficio Acquisti)"/>

     <role id="R  1" name="Amministratore di openwork®"

           fullpath="Amministratore di openwork®" isboss="false">

    </role>

    <office id="N  2" name="Ufficio Commerciale" fullpath="Ufficio Commerciale">

    </office>

</selection>

Se la funzione restituisce true la gestione proprietaria dell'evento viene interrotta: in tal caso, se richiesto, la finestra deve essere esplicitamente chiusa.


Funzioni custom di scanview.js
· customloadclass


customloadclass

customloadclass()

È una classe javascript che ammette le proprietà opzionali toolbar e paintsizemode che permettono di indicare, rispettivamente, la toolbar iniziale e l’adattamento dell’immagine all’apertura della pagina di gestione immagini per un file di tipo immagine già salvato nel repository o allegato ad una form. Essendo una classe javascript, a differenza delle altre funzioni custom, deve essere obbligatoriamente dichiarata come segue:

function customloadclass(){

this.toolbar = "document";

this.paintsizemode = 0;

this.scanner = "";

this.silentMode = 0;

this.configFile = "";

this.capabilities = new Array();

}

Parametro

Descrizione

toolbar

I valori ammessi per toolbar sono:

· document: toolbar per la gestione del documento.
· image: toolbar per la gestione della singola immagine.
· zoom: toolbar delle funzionalità di zoom.
· stamp: toolbar di gestione del timbro.

Se il valore immesso non è tra quelli presenti, viene selezionata la toolbar "zoom".

paintsizemode

I valori ammessi per paintsizemode sono:

· 0: l’immagine viene mostrata nelle sue dimensioni originali (la dimensione apparente dipende dal dpi dell’immagine rispetto a quella dello schermo).
· 1: l’immagine viene adattata alle dimensioni, in larghezza e altezza, dell’area di visualizzazione della finestra del browser. Il rapporto d’aspetto non viene preservato.
· 2: la larghezza dell’immagine viene adattata alla larghezza dell’area di visualizzazione della finestra del browser. L’altezza viene adattata preservando il rapporto d’aspetto.
· 3: viene adattata rispetto alla dimensione maggiore tra larghezza e altezza, l’altra viene adattata preservando il rapporto d’aspetto.

scanner

Per scanner si deve indicare il nome di uno scanner installato sui client; se questo non esiste all’apertura della pagina verrà chiesto di selezionarne uno esistente.

Questo parametro viene caricato da querystring dsp, se non è definita viene caricato dalla classe in oggetto; se lo scanner specificato non esiste, all'apertura della pagina, viene chiesto di pre-selezionarne uno esistente.

silentMode

Permette di specificare se mostrare l’interfaccia dello scanner ad ogni scansione; i valori ammessi sono:

· 0 mostra l’interfaccia dello scanner ad ogni scansione;
· 1 non mostra l’interfaccia dello scanner e visualizza la chekcbox ‘Visualizza interfaccia scanner’ nella toolbar Documento che permette di mostrarla.
· >1 non mostra l’interfaccia dello scanner.

Questo parametro viene caricato da querystring nodlg, se non è definita viene caricato dalla classe in oggetto.

configFile

Permette di specificare il file di configurazione dello scanner; questo parametro viene prima caricato da querystring configfile e se non è definita dalla classe in oggetto.

capabilities

Permette di definire le pre-impostazioni di scansione (DPI, profondità ecc.). Va specificato in forma di array ed ogni item dell’array deve essere l’istanza di una classe js così fatta:

capabilities[i]=new function(){

this.Capability=<capability twain come specificato dallo standard TWAIN 1.8>

this.Contype=<tipo di capability: one value, enum, range>;

this.ValueType=<tipo di dato: intero ecc.>;

this.Value=<valore della capability>;


Funzioni custom di table.js

· customonload
· customcommand
· customOnKeyDown
· customonload
· customClickRow
· customDbClickRow


customonload

customonload()

Richiamata sul caricamento dell'elenco.


customOnKeyDown

customOnKeyDown (keyCode, shiftPressed, ctrlPressed, altPressed)

Funzione richiamata alla pressione di un tasto.

In dettaglio:

keyCode | codice ASCII del tasto schiacciato.
shiftPressed | booleano, true se è stato schiacciato il tasto SHIFT, anche contemporaneamente a un'altro tasto.
ctrlPressed | booleano, true se è stato schiacciato il tasto CTRL, anche contemporaneamente a un'altro tasto.
altPressed | booleano, true se è stato schiacciato il tasto ALT, anche contemporaneamente a un'altro tasto.


customcommand

customcommand(action)

Da utilizzarsi per richiamare del codice javascript su un comando della toolbar il cui identificativo è action.

action può assumere anche il valore di un'azione proprietaria, in tal caso se la customcommand restituisce false viene eseguito comunque il codice proprietario dopo quello custom, se la customcommand restituisce true il codice proprietario non viene eseguito.


customClickRow

customClickRow (idrow, oddclass, evenclass, oddstyle, evenstyle,selclass, selstyle, obj)

Funzione richiamata dall'esecuzione del click sulla riga.

In dettaglio:

idrow è il valore del campo indice, nell'xml sorgente, della riga selezionata.

Nel seguente xml sorgente

.....

<selection index ="id"/>

<rows>

<row id="390" status="1" .../>

<row id="391" status="1" .../>

.....

il campo indice è id come indicato dall'attributo index del selection.

Se ad esempio idrow=391 vuol dire che è stata selezionata la seconda row dell'elenco

oddclass, evenclass, oddstyle, evenstyle, selclass, selstyle rappresentano il valore predefinito degli attributi class e style per le righe pari, dispari e selezionate.

obj è l'elemento HTML </tr> selezionato; è possibile intervenire direttamente su questo oggetto per modificare le informazioni visualizzate.

Esempio

obj.childNodes(0).innerHTML="test" modifica, in visualizzazione, il primo campo della riga selezionata


customDblClickRow

customDblClickRow (idrow, oddclass, evenclass, oddstyle, evenstyle,selclass, selstyle, obj)

Funzione richiamata dall'esecuzione del doppio click sulla riga. (cfr. customClickRow)

nota

Nota

Prima del doppio click viene comunque generato l'evento click


Script lato client legati alle attività

È possibile far eseguire degli script lato client, in linguaggio vbscript, a seguito della prenotazione di un'attività (after booking) o prima della sua esecuzione (before execute) definiti opportunamente in fase di disegno del processo.

Tali script sono codificati in VbScript nel Workflow Designer. Poiché essi vengono eseguiti all'interno dell'elenco delle attività è possibile utilizzare tutte le funzioni disponibili nei moduli common.js e table.js.

In questi script possono essere utilizzate tutte le funzioni definite in libraries/common/common.js e in clibraries/common/common.js. É possibile utilizzare inoltre le variabili ActivityId e ProcessId valorizzate rispettivamente all'identificativo dell'attività e del processo legati allo script in esecuzione; tramite queste variabili, combinate con l'utilizzo del metodo GetActivityInfo() del Web Service wsactivity, è possibile risalire a tutte le altre proprietà dell'attività.

Esempio

La funzione fieldValue() permette di risalire ad alcune proprietà dell'attività:

· fieldValue("idnodo") è l'identificativo dell'attività;
· fieldValue("idprocesso") è l'identificativo del processo cui appartiene l'attività;
· fieldValue("iddoc") è l'identificativo del documento eventualmente legato all'attività;
· fieldValue("tipodoc") è il tipo del documento eventualmente legato all'attività.

Dopo aver eseguito lo script prima dell'esecuzione (before execution), l'attività è posta in uno stato che indica che essa è in esecuzione sul client; per riportarla nello stato in esecuzione bisognerà eseguire la funzione executeActivity() di libraries/common/common.js.:

execute(processid,activityid)

Per evitare che venga posta nello stato "in esecuzione" sul client bisognerà scrivere all'interno dello script prima dell'esecuzione:

window.continueafterscript=false

Nell'esempio seguente, viene aperta la pagina per la selezione dinamica dei partecipanti:

window.open(partecipants.aspx?processid=" & processid & "&activityid=",

null, winsettings)

window.continueafterscript=false;


Costanti comuni a tutti i documenti

Oltre alle costanti già menzionate per la msgbox, sono definite le seguenti costanti comuni a tutti i documenti (form):

· impostazioni di default con cui vengono aperte le finestre all'interno dell'applicativo:

winsettings = "status=yes, toolbar=no, menubar=no, location=no,

scrollbars=no, resizable=yes"

· namespace in cui sono definiti gli elementi di un documento o di un elenco:

owkns = "http://www.openwork.info/schema"

· path del documento all'interno della form:

owk_docPath = "//owk:form/owk:document/owk:"

· Ritorno a capo + avanzamento riga: CRLF


Gestione dei job

Un job è un file XML che racchiude le informazioni necessarie alla sua esecuzione. Queste informazioni riguardano input, opzioni di configurazione, output e funzionalità da eseguire.

I Job vengono eseguiti dal servizio Windows Openwork Job Engine, che deve essere avviato e deve avere i permessi per accedere sia alla cartella dei Job, che alle risorse che elabora (file) e di cui usufruisce (dll e directory di destinazione).

In dettaglio è possibile approfondire la configurazione dei job e le funzionalità che il servizio mette a disposizione:

· Il servizio openwork® Job Engine e le sue funzionalità
· Architettura
· Configurazione dei job
· Job da browser: la classe javascript JobHandler
· Utilizzo dei job da Web Services : WsJob e libreria Proxy
· Job nei processi di openwork®: task asincroni ed elaborazioni
· Cartella dei job
· Gli assembly custom


Architettura

Di seguito l'architettura relativa ai job che consente di evidenziare i componenti e le librerie coinvolte.

Per richiamare le funzionalità dei job, è possibile procedere in uno dei seguenti modi:

· Dal browser, attraverso la classe jobHandler.
· Da un Web Client che abbia il runtime del Framework .NET e la libreria Openwork.Proxy.dll che consente di collegarsi ai Web Services di openwork®.
· Attraverso l'utilizzo della Userfunction CREATEJOB.

Qualsiasi sia la componente scelta per gestire una job - functionality, possiamo individuare tre fasi principali:

1. Creazione dei job
2. Reperimento del risultato
3. Interruzione del job ed eliminazione dei file coinvolti

La realizzazione di queste fasi avviene utilizzando le funzioni: CreateJob, JobResult e DeleteJob.

Inoltre i Web Client hanno a disposizione funzionalità di Upload dei file e Download dei file di output, in quanto l'esigenza è quella di gestire funzionalità e file in remoto.

Richiamare un job vuol dire creare automaticamente un file XML nella cartella dei job (attraverso il Server Manager) il quale rappresenta la richiesta che il motore di job (JobEngine.exe) dovrà elaborare. In particolare, viene creata una coda delle richieste diversa in base alla diversa job-functionality richiamata.

Nella cartella dei job vengono creati anche dei file intermedi:

· i file con estensione .jot (job temporanei) che rappresentano le richieste in elaborazione dal motore dei job
· i file di stato .sta (generati dai job personalizzati o custom) nei quali viene riportata la percentuale di elaborazione.
· i file di processing relativi alla funzionalità base.

Oltre ai file intermedi, vengono create delle sotto - cartelle di elaborazione con lo stesso nome del job a cui si riferiscono (poiché al job viene associato un numero random, la cartella sarà identificata con il numero stesso). La creazione delle sotto - cartelle avviene per le funzionalità base - NCUTTING, BARCODE e GENERALBARCODE - in quanto l'output è costituito da più file.

Dopo l'esecuzione del job viene inoltre prodotto un file .res che potrà essere utilizzato dal Web Services WSJob oppure dalla libreria di openwork®.


Cartella dei job

Di seguito viene illustrato il contenuto della cartella dei job, in particolare viene illustrata la struttura XML di un file job e e la struttura XML di un risultato.

Struttura XML di un job

Di seguito è riportata la struttura XML di un job. Il significato dei tag viene approfondito nella sezione dedicata alla USERFUNCTION CREATEJOB .

<job xmlns="http://www.openwork.info/schema">

<organizationname>Banda Bassotti S.n.C.</organizationname>

<functionality>CUSTOM</functionality>

<source>c:\input\file1.pdf</source>

<destination>c:\output\file1.pdf</destination>

<pageblock></pageblock>

<literalstring></literalstring>

<barcodetype></barcodetype>

<errwordcolor></errwordcolor>

<languageorder></languageorder>

<customfunctionality>REPAIRPDF</customfunctionality>

<startpage></startpage>

<endpage></endpage>

<configurationstring>

<![CDATA[<root><remotepath>\\workstation\job\</remotepath><repairpath>C:\repair\</repairpath></root>]]>

</configurationstring>

<delsource></delsource>

<assemblypath></assemblypath>

</job>

Struttura XML di un risultato

Il risultato di un job è un file XML presente nella cartella stessa, con lo stesso nome del job che lo ha originato ed estensione .res . Questo file ha una struttura ad albero con al massimo quattro livelli di profondità.

Il primo livello è la radice message che ha come nodi figli:

· functionality: funzionalità che è stata richiesta nel job.
· organizationname: nome dell'organizzazione (rispetto alla configurazione in cui è avvenuta la richiesta).
· percentage: valore impostabile solo nei job custom, rappresenta la percentuale di avanzamento del job.
· status: valore impostabile solo nei job custom, rappresenta lo stato di elaborazione del job.
· customfunctionality: se il valore di functionality è CUSTOM, rappresenta la funzionalità definita e implementata dallo sviluppatore.
· 1..N result: Rappresenta il risultato della esecuzione del job e può avere N istanze.

Ogni result ha i seguenti nodi figli:

messagecode - codice d'errore. Assume valore 0 se non si è verificato alcun errore, altrimenti assume valori positivi.

messagedescription - descrizione dell'errore identificato dal codice restituito nel tag messagecode.

barcode - tag presente se functionality è valorizzato con BARCODE.

destination - nome del file in output eventualmente compreso di path assoluta .

additionalinfo - warning o informazione aggiuntiva, valorizzato con il codice riconosciuto del barcode nel caso di GENERALBARCODE

pages - pagine del documento originario che sono state importate nel file di destinazione specificato in destination. Le pagine sono separate da spazi , come ad esempio “1 2 3” .

document - form a cui deve essere allegato il file specificato in destination. Contiene quattro nodi figlio che identificano il documento openwork®:

▪ id: identificativo del documento openwork® .
▪ style: tipologia di documento.
▪ number: numero del documento.
▪ date: data di pubblicazione del documento, ## se il documento non è stato pubblicato.

fields: questa struttura permette di reperire dalle funzioni CUSTOM campi aggiuntivi e personalizzabili. Il tag fields raccoglie una lista di N nodi field che hanno come attributo il nome scelto dall'utente mentre il valore è il valore del tag XML.

field: nodo campo aggiuntivo; il nome del campo è specificato nell'attributo name.

Di seguito un esempio senza valori di un job CUSTOM con due risultati - result - e due campi aggiuntivi - field - per ogni result.

<message xmlns="http://www.openwork.info/schema">

<functionality>CUSTOM</functionality>

<organizationname></organizationname>

<percentage></percentage>

<status></status>

<source></source>

<customfunctionality></customfunctionality>

<result num="1">

   <messagecode></messagecode>

   <messagedescription></messagedescription>

   <barcode></barcode>

   <destination></destination>

   <additionalinfo>

   </additionalinfo>

   <pages></pages>

   <fields>

     <field name=""></field>

     <field name=""></field>

   </fields>

</result>

<result num="2">

   <messagecode></messagecode>

   <messagedescription></messagedescription>

   <barcode></barcode>

   <destination></destination>

   <additionalinfo>

   </additionalinfo>

   <pages></pages>

   <fields>

     <field name=""></field>

     <field name=""></field>

   </fields>

</result>

</message>


Assembly Personalizzati

La necessità di costruire una funzionalità personalizzabile lato server è insita nella natura stessa di openwork®, il cui scopo è quello di personalizzare le funzionalità adattandole alle esigenze dell'utente finale in maniera semplice, robusta e distribuita.

Di seguito vengono elencate le caratteristiche principali degli Assembly custom :

1. Utilizzo di programmazione ad oggetti usufruendo delle features e delle classi del Framework .NET 2.0.
2. Possibilità di impostare esecuzioni parallele, indipendenti e di diversa durata.
3. Possibilità di utilizzare programmazione asincrona.
4. Capacità di supportare esecuzioni distribuite e multipiattaforma richiamando i Web Services
5. Possibilità di eseguire file Batch con i quali possono essere eseguite diverse funzionalità in parallelo.

Inoltre, per rispondere alle specifiche esigenze del programmatore, sono state aggiunte delle funzionalità tipiche per la gestione di file e documenti, in particolare la compressione e lo splitting/merging dei documenti PDF.

Tutte le funzionalità, i servizi, le modalità di comunicazione con il sistema sono racchiuse nell'assembly Openwork.Jobs.dll.

Sono sono stati introdotti inoltre due assembly legati a Openwork.Jobs.dll:

1. ICSharpCode.SharpZipLib.dll
2. O2S.Components.PDF4NET.dll

In dettaglio è possibile consultare le sezioni relative alla costruzione di Assembly Custom e alla libreria delle classi.


Costruzione Assembly

Di seguito viene riportato il diagramma delle componenti che mette in evidenza le relazioni tra la libreria Openwork.Jobs.dll e la libreria personalizzata indicata con CustomJob.dll.

job02 - AssemblyCustom

E' possibile osservare che:

1. L'esecuzione della libreria personalizzata CustomJob.dll dipende dall'esecuzione del servizio openwork® Job Engine (Job Engine.exe), dalla presenza della libreria Openwork.Jobs.dll e dalle librerie di servizi. Infatti il Job Engine raccoglie le richieste, le accoda a seconda della funzionalità, e chiama la libreria personalizzata (se naturalmente sono state indicate le informazioni necessarie per richiamarla).

2. E' indispensabile che nell'openwork® Server Manager sia presente una funzionalità il cui nome sia uguale alla classe che deve essere eseguita. Quindi, per ogni Job custom deve essere indicata la funzionalità e/o la libreria che dovrà essere eseguita e, per poter ricevere gli input e impostare il risultato, tutte le funzionalità devono ereditare le proprietà della classe Custom della libreria Openwork.Jobs.dll.

Oltre alle classi necessarie alla comunicazione (InfoJobClass, ResultClass, FieldClass) esistono due classi per la compressione/decompressione dei file (Compression) e separazione e fusione dei documenti PDF (PDFSplitMerge).

Di seguito viene mostrata l'architettura del Job Engine con la componente di utility Openwork.Jobs.dll e la personalizzazione CustomJob.dll. (Non sono mostrate le librerie chiamate da Openwork.Jobs.dll).

job03 - JobCustomArchitecture

Esistono tre modalità per denominare, posizionare e strutturare gli assembly custom:

1. Specificare esplicitamente il nome e il percorso dell'assembly nel parametro assemblypath.

Questo permette di creare diversi assembly con diversi nomi e con una o più funzionalità. Di seguito riportiamo un esempio di UserFunction con l'indicazione del percorso degli assembly, ricordandoci di copiare (non spostare) la Openwork.Jobs.dll e le sue librerie dipendenti nello stesso percorso in cui è presente l'assembly custom richiamato.

Job = Functions.UserFunction("CREATEJOB",

"CUSTOM",,"C:\filetest\danneggiati\allegato.pdf", "REPAIR", "",

"<myxml><repairpath>//master/repair/</repairpath></myxml>", "", "", "", "",

"", "", "", "", "c:\assembly\assemblyriparazione.dll")

Nell'esempio, è specificato come ultimo parametro il percorso dell'assembly contenente la funzionalità REPAIR (cfr. UserFunction - Custom).

2. Se non viene indicato il percorso e nome per l'assembly da caricare, il Job Engine cerca automaticamente in openwork/lib (se esiste) un assembly con il nome della funzionalità richiamata. Nell'esempio precedente, se non fosse stata esplicitata la path, il Job Engine cercherebbe l'assembly REPAIR.DLL.

Da un lato tale approccio risulta essere vantaggioso in quanto consente di suddividere le diverse funzionalità in diversi progetti, dall'altro risulta essere svantaggioso in quanto i tempi di esecuzione aumentano in proporzione agli assembly da caricare.

3. Se non viene indicato il percorso e non esiste un assembly con il nome della funzionalità custom, il Job Engine cerca l'assembly CustomJob.dll nella cartella openwork/lib. In questo caso si possono inserire diverse implementazioni della classe custom e quindi diverse classi nello stesso progetto.

Sono possibili approcci ibridi, in cui alcuni job vengono eseguiti richiamando gli assembly nelle modalità descritte.

Inoltre, questi concetti possono essere applicati anche agli input (functionality e assemblypath) di WSJob e di jobHandler.

In generale per costruire un Assembly custom, indipendentemente dall'IDE utilizzato, è necessario:

· Compilare la libreria con il Framework 2.0
· Aggiungere le librerie o gli assembly necessarie per sviluppare la funzionalità. E' fondamentale importare l'assembly Openwork.Jobs.dll (presente in openwork/lib). Nella maggior parte dei casi devono essere inclusi gli assembly System.dll e System.Xml.dll.
· I file iniziali di cui si dispone sono i seguenti: AssemblyInfo.vb e CustomFunctionality.vb.

In dettaglio:

AssemblyInfo.vb - Contiene le informazioni che riguardano la libreria (autore, versione, azienda, etc.). Queste proprietà compariranno nelle proprietà dopo la compilazione della libreria.

Il contenuto di questo file è il seguente:

Imports System.Reflection

Imports System.Runtime.CompilerServices

<Assembly: AssemblyVersionAttribute("5.5.0.0")>

<Assembly: AssemblyInformationalVersionAttribute("5.5.0-RC1")>

<Assembly: AssemblyTitle("CustomJob")>

<Assembly: AssemblyDescription("Personalizzazione dei Job Custom per")>

<Assembly: AssemblyConfiguration("")>

<Assembly: AssemblyCompany("Azienda Partner della NET Sistemi")>

<Assembly: AssemblyProduct("")>

<Assembly: AssemblyCopyright("(c) 2007 by Azienda Partner")>

<Assembly: AssemblyTrademark("")>

<Assembly: AssemblyCulture("")>

<Assembly: AssemblyDelaySign(False)>

<Assembly: AssemblyKeyFile("")>

CustomFunctionality.vb - Contiene la struttura della classe il cui nome deve coincidere con il nome della funzionalità, in modo che possa essere identificata dal job.

Il metodo InternalStart, opportunamente personalizzato, consente di richiamare il JobEngine a run-time.

Imports System

Imports Openwork.Jobs

Namespace Openwork.Jobs

''' <summary>

''' This class is the implementation of the abstract class Openwork.Jobs.Custom

''' You have to change the name of the class for the execution and insert in the '''openwork server manage the same name

''' </summary>

Public Class CustomFunctionality

Inherits Custom

''' <summary>

''' This method must contain your implementation. Moreover you have to use

''' mybase.InfoJob for read input and write result at the end of computation.

''' You can use some utility class as Compression and PDFsplitmerge

''' </summary>

Protected Overrides Sub InternalStart()

End Sub

End Class

End Namespace

Esempio

Di seguito viene riportato un esempio di implementazione del metodo InternalStart che illustra i metodi e gli attributi più comuni per gestire le informazioni:

Protected Overrides Sub InternalStart()

              Dim Job As New InfoJobClass

              Dim SIndex As Integer

              Dim SCounter as Integer

              Dim InputFile As String

              Dim Res As New ResultClass

              Job=MyBase.InfoJob

              SNum=Job.Source.Count

              try

             For SIndex = 0 To SNum - 1

                     InputFile = Job.Source[SIndex]

                     '..utilizza InputFile per la tua computazione

                     '..

                     'E' possibile ma non necessario, impostare

                     'una percentuale di avanzamento reperibile

                     ' dal Client Web e WSJob

                     Job.Percentage=Convert.ToString(Math.Round(SIndex/SNum))

                     Job.WriteBaseInfoSta()

             Next

              Catch Exc as Exception

                      MyBase.LogMessage("Error: " & Exc.message)

                      'Codice di errore arbitrario, ma deve essere > 0

                      'per poter essere riconosciuto come errore dallo

                      'status del job

                      Res.Code="1"

                      'Descrizione dell'errore.In questo caso vien presa

                      'la descrizione dell'eccezione, ma potreste inserire

                      'qualsiasi stringa

                      Res.MessageString=Exc.message

                      'Il primo result è già esistente perchè contiene

                      'le informazioni iniziali riguardanti l'output

                      'pertanto utilizziamo il SetResult per il primo

                      'mentre per i successivi blocchi di risultato

                      'possiamo usare il metodo AddResult

                      If SIndex=0 Then

                              Job.SetResult(0,Res)

                      Else

                              Job.AddResult(Res)

                      End If

                      'il contenuto di myBase.InfoJob verrà scritta al termine

                      'del metodo InternalStart

                      myBase.InfoJob=Job

              End Try

              'Nell'openwork Server manager esiste un check che abilita

              'la modalità di debug a run-time

              If DebugActive Then

                      MyBase.LogMessage("after InputFile")

              End If

'può essere utilizzato altro codice e i Res modificati

' ma alla fine bisogna riversare tutto in myBase.InfoJob

'per costruire il risultato

myBase.InfoJob=Job

       End Sub

Per costruire un job custom è necessario comprendere come avviene la comunicazione con l'ambiente esterno, poichè, per ogni classe che che eredita la libreria Openwork.jobs.Custom, viene messa a disposizione una infrastruttura di comunicazione. E' possibile suddividere la fase di comunicazione come segue:

1. Recupero delle informazioni in input alla libreria Custom - Quando viene creato un job custom è necessario inserire diversi parametri, in modo che possano essere elaborati dal metodo InternalStart. E' presente una corrispondenza tra i parametri utilizzati nelle UserFunction CUSTOM e gli attributi della classe di supporto myBase.InfoJob. Per mezzo di questa corrispondenza, se dovessimo reperire il nome del file di input (Source) nella Userfunction("CREATEJOB", "CUSTOM", ,"c:\percorso\nomefile.owk", "CustomFunctionality"), basterebbe reperire nella classe CustomFunction il Source attraverso myBase.InfoJob.Source(0).

L'unico parametro che non ha corrispondenza nominale è il ConfigurationString, che corrisponde all'attributo myBase.InfoJob.Additional, e consente di inserire una struttura XML in forma di stringa; questo risulta utile soprattutto nel momento in cui i parametri della UserFUnction non sono sufficienti a contenere tutte le informazioni.

MyBase.Infojob è l'istanza di una InfoJobClass , in grado di contenere sia le informazioni iniziali di input che le informazioni strutturate di output; in particolare le informazioni principali riguardanti l'input sono identificate come attributi della MyBase.InfoJob, mentre informazioni riguardanti l'output sono incapsulate in una collection di Resultclass.

2. Scrittura del Log - A causa di elaborazioni molto complesse potrebbe tornare utile utilizzare la modalità debug che consente di scrivere una qualsiasi stringa nel log di default (JobEngine.log) oppure in un log personalizzato specificando un percorso accessibile dall'utente che avvia il servizio Jobengine
3. Scrittura delle informazioni in output per il recupero del risultato - Il risultato è rappresentato come una collection di ResultClass, componenti della MyBase.InfoJob. Ogni ResultClass ha un insieme di attributi predefiniti necessari per descrivere un eventuale output, che consentono quindi di descrivere i documenti, di specificare i percorsi dei file, il numero di pagine e barcode. Poiché gli attributi predefiniti non rispondono spesso alle esigenze del programmatore, è possibile personalizzare i "campi" utilizzando una collection di Field per ogni ResultClass. Un Field è una classe composta da due campi, name e value.

Nell'esempio vengono elaborati un insieme di file di input (InputFile); per ogni file viene prodotto un risultato (Res) con un campo personalizzabile (Field). Inoltre viene richiamato il metodo LogMessage sia in presenza di una eccezione, sia in modalità di Debug (DebugActive).

Protected Overrides Sub InternalStart()

              Dim Job As New InfoJobClass

              Dim SIndex As Integer

              Dim SCounter as Integer

              Dim InputFile As String

              Dim Res As New ResultClass

Dim Field As New FieldClass

   Job=MyBase.InfoJob

   SNum=Job.Source.Count

   Try

   For SIndex = 0 To SNum - 1

      InputFile = Job.Source(SIndex)

      'utilizza InputFile per la tua computazione

      Field.Name="campo personalizzato"

Field.Value="valore personalizzato"

Res.AddField(Field)

      If SIndex=0 Then

              Job.SetResult(0,Res)

       Else

              Job.AddResult(Res)

       End If

'E' possibile ma non necessario, impostare

'una percentuale di avanzamento reperibile

' dal Client Web e WSJob

   Job.Percentage=Convert.ToString(Math.Round(SIndex/SNum))

             Job.WriteBaseInfoSta()

   Next

   'Nell'openwork Server manager è possibile abilitare

   'la modalità di debug a run-time

If DebugActive Then

              MyBase.LogMessage("after InputFile")

      End If

'i res devono essere riportati in

' myBase.InfoJob per costruire il risultato

myBase.InfoJob=Job

              Catch Exc as Exception

                      MyBase.LogMessage("Error: " & Exc.message)

                      'Codice di errore arbitrario, ma deve essere > 0

                      'per poter essere riconosciuto come errore dallo

                      'status del job

                      Res.Code="1"

                      'Descrizione dell' errore.In questo caso vien presa

                      'la descrizione dell' eccezione, ma potreste inserire

                      'qualsiasi stringa

                      Res.MessageString=Exc.message

                      'Il primo result è già esistente perchè contiene

                      'le informazioni iniziali riguardanti l' output

                      'pertanto utilizziamo il SetResult per il primo

                      'mentre per i successivi blocchi di risultato

                      'possiamo usare il metodo AddResult

                      If SIndex=0 Then

                              Job.SetResult(0,Res)

                      Else

                              Job.AddResult(Res)

                      End If

                      'il contenuto di myBase.InfoJob verrà scritta al termine

                      'del metodo InternalStart

                      myBase.InfoJob=Job

              End Try

       End Sub


Job: Libreria delle classi

Nella seguente sezione è possibile consultare dettagliatamente metodi e proprietà della libreria delle classi per la costruzione di assembly personalizzati:

· Custom
· InfoJobClass
· ResultClass
· FiledClass
· FieldClass
· PDFSplitMerge
· Compression


Custom

Questa classe base permette di aggiungere nuove funzionalità all'openwork® Job Engine.

Questo tipo di classe dispone di un LOG che consente di tener traccia dello stato e della percentuale di avanzamento.

Attributi disponibili:

Attributi | Descrizione
InfoJob | Attributo pubblico. Istanza della classe InfoJobClass, contenuta nello stesso assembly, che che consente di reperire le informazioni relative al Job (funzionalità, file sorgente etc). L'attributo è utilizzato per consentire di scrivere informazioni in output.
DebugActive | Attributo protetto. E' utilizzato per inserire codice di logging. Viene impostato nell'openwork® Server Manager, nella sezione Job.
WriteBaseInfo | Attributo protetto. Permette di scrivere le informazioni base contenute in InfoJob prima che il job termini l'esecuzione. Solitamente viene utilizzato per scrivere la percentuale di avanzamento dell'attività.

Metodi disponibili:

Metodi | Descrizione
LogMessage | Metodo pubblico. Consente di scrivere un messaggio nel file specificato oppure nel JobEngine.log .
InternalStart | Metodo protetto virtuale. che costituisce la base da ridefinire per poter eseguire il proprio codice.


InfoJob

Contiene sia le informazioni di input rispetto al Job che deve essere eseguito, sia le informazioni di output che riportano il risultato dopo l'esecuzione del job.

Non è possibile ereditare questo attributo, infatti è necessario assegnarlo ad un oggetto di tipo InfoJobClass, la cui definizione e implementazione è contenuta in Openwork.Jobs (pertanto è utilizzabile da qualsiasi classe che importi il namespace Openwork.Jobs).

Per scrivere il risultato è sufficiente che il thread termini e, se l'esecuzione non termina (ad esempio a causa di componenti esterni, come gli oggetti COM) , è possibile che non si ottenga alcun risultato .

Informazioni:

Namespace - Openwork.Jobs.Custom

Dipendenze - JobEngine.exe in openwork\lib

Assembly - Openwork.Jobs.dll e assembly che implementa Openwork.Jobs.dll

Sintassi

· Visual Basic

Dim myInfo as InfoJobClass

myInfo = new InfoJobClass()

myInfo = myBase.InfoJob

.....

myBase.InfoJob = myInfo

· C#

InfoJobClass myInfo;

myInfo = new InfoJobClass();

myInfo = Base.InfoJob;

.....

Base.InfoJob = myInfo;

L'esempio dimostra l'utilizzo dell'attributo, in cui viene asseganta alla classe temporanea myInfo il valore dell'attributo base Infojob (è necessario riassegnare i valori del risultato prima che la funzione InternalStart termini l 'esecuzione).

É possibile utilizzare le classi componenti di InfoJobClass, ResultClass e FieldClass per ottenere un risultato strutturato, oppure è possibile creare stringhe XML (generando quindi una struttura proprietaria) nell'attributo additional.


DebugActive

L'attributo assume il valore impostato nell' openwork® Server Manager, in particolare True nel caso in cui il debug sia attivo, False altrimenti. E' un attributo protetto che può essere utilizzato e ridefinito solo dalle classi che ereditano dalla libreria Openwork.Jobs.Custom.

Informazioni:

Namespace - Openwork.Jobs.Custom

Dipendenze - JobEngine.exe in openwork\lib , Server Manager

Assembly - Openwork.Jobs.dll e assembly che implementa Openwork.Jobs.dll

Visibilità - Protetto

Sintassi

· Visual Basic

If DebugActive then

End if

· C#

If DebugActive

{

}

Essendo un attributo definito nella classe astratta CUSTOM, è accessibile in VB.NET con MyBase.DebugActive e in C# conBase.DebugActive.


WriteBaseInfo

Consente di scrivere e successivamente reperire le informazioni temporanee contenute nell'attributo InfoJob della classe base (es. informazioni che riguardano la percentuale d'avanzamento).

Informazioni:

Namespace - Openwork.Jobs.Custom

Dipendenze - JobEngine.exe in openwork\lib , Server Manager

Assembly - Openwork.Jobs.dll e assembly che implementa Openwork.Jobs.dll

Visibilità - Protetto

Sintassi

· Visual Basic

myBase.WriteBaseInfo()

· C#

Base.WriteBaseInfo()


LogMessage

Permette di scrivere un messaggio nel file indicato nel parametro LogPathAndFileName; se non viene esplicitato, allora il messaggio verrà riportato nel file JobEngine.log.

Informazioni:

Namespace - Openwork.Jobs.Custom

Dipendenze - JobEngine.exe in openwork\lib

Assembly - Openwork.Jobs.dll e assembly che implementa Openwork.Jobs.dll

Di seguito le proprietà della classe.

Proprietà | Descrizione
Message | Messaggio scritto nel log qualora sia richiamato.
Value | Percorso e nome del file di log che si intende creare, in cui viene riportato il contenuto di Message. Se non specificato, allora il messaggio viene inserito nel file JobEngine.log.

Sintassi

· Visual Basic

Public Sub LogMessage (Message As String , _

Optional LogPathAndFileName as String)

· C#

Public Void LogMessage (String Message, String LogPathAndFileName)


InternalStart

Rappresenta il metodo principale in quanto consente di avviare l'esecuzione di un job custom.

Il Job Engine attende che il metodo termini l'esecuzione per scrivere automaticamente il risultato, per cui non devono essere richiamati thread in cui si imposta il risultato (mybase.InfoJob). Infatti, poichè la chiamata avviene in modalità asincrona, il metodo InternalStart termina l'esecusione a differenza della chiamata. Il Job Engine, quando InternalStart termina, scrive il contenuto di InfoJob, per cui non è più possibile impostare il risultato attraverso i metodi della InfoJobClass.

Questo comunque non significa che non sia possibile richiamare eseguibili, Web Services o applicazioni .NET Remoting asincroni, ma , se non si vuole aspettare la loro terminazione, non sarà possibile scrivere il risultato.

Informazioni:

Namespace - Openwork.Jobs.Custom

Dipendenze - JobEngine.exe in openwork\lib

Assembly - Openwork.Jobs.dll e assembly che implementa Openwork.Jobs.dll

Sintassi

· Visual Basic

Protected Overrides Sub InternalStart ()

· C#

Protected override void InternalStart ()

Esempio

Il seguente mostra come utilizzare le funzioni e gli attributi descritti nella classe CUSTOM, implementando una classe da questa derivata. Non si può utilizzare la libreria in assenza del Job Engine.

· Visual Basic

Imports System

Imports Openwork.Jobs

Namespace Openwork.Jobs

Public Class MYFUNCTIONALITY

Inherits Openwork.Jobs.Custom

Protected Overrides Sub InternalStart()

' questa istruzione scrive "Hello World" nel file "C:\mydirlog\test.log"

' se DebugActive è true; se il file non esiste verrà creato

' purché l'utente openwork abbia l' autorizzazione per scrivere

'nella cartella "c:\mydirlog".

If DebugActive then

Mybase.LogMessage("Hello World","C:\mydirlog\test.log")

End If

'la successiva istruzione permette di settare la

'percentuale di avanzamento;in questo caso è impostata al 50 %

Mybase.InfoJobClass.percentage="50"

'la successiva istruzione permette di scrivere l' informazione

myBase.WriteBaseInfo()

' questa istruzione scrive il testo nel file JobEngine.log in quanto non è

'stato indicato alcun file in output.

Mybase.LogMessage("MYFUNCTIONALITY will write this first message")

'E' possibile anche usare direttamente la funzione LogMessage senza Mybase;

'in tal caso però viene richiamato direttamente l'assembly padre piuttosto

'che l' assembly che eredita le proprietà per l' esecuzione funzione.

LogMessage("MYFUNCTIONALITY will write this second message ")

End Sud

End Class

· C#

Using System;

Using Openwork.Jobs;

Namespace Openwork.Jobs

Namespace Openwork.Jobs

Public Class MYFUNCTIONALITY : Openwork.Jobs.Custom

Protected Override void InternalStart()

{

//questa istruzione scrive "Hello World" nel file "C:\mydirlog\test.log"

//se DebugActive è true; se il file non esiste verrà creato

//purché l'utente openwork abbia l' autorizzazione per scrivere

//nella cartella "c:\mydirlog".

If DebugActive {

base.LogMessage("Hello World","C:\mydirlog\jump.log");}

//la successiva istruzione permette di settare la

//percentuale di avanzamento;in questo caso è impostata al 50 %

Mybase.InfoJobClass.percentage="50";

//la successiva istruzione permette di scrivere l' informazione

myBase.WriteBaseInfo();

//questa istruzione scrive il testo nel file JobEngine.log in quanto non è

//stato indicato alcun file in output.

base.LogMessage("Bingo Bongo");

//E' possibile anche usare direttamente la funzione LogMessage senza Mybase;

//in tal caso però viene richiamato direttamente l'assembly padre piuttosto

// che l' assembly che eredita le proprietà per l' esecuzione funzione.

LogMessage("King of Kongo");

}

}


InfoJobClass

E' una classe pubblica che permette di gestire le informazioni relative ai Job.

Consente di recuperare gli attributi che provengono dai Job (input) e di impostare il risultato, attraverso le classi aggregate. (cfr. ResultClass e FieldClass).

Molti attributi hanno un valore semantico e non operativo nelle customizzazioni; altri attributi e metodi invece assumono valore, ma è preferibile non usarli nelle customizzazioni in quanto, se usati impropriamente potrebbero generare blocchi, rallentamenti ed inefficienze.

Costruttori pubblici:

Nome | Descrizione
InfoJobClass | Inizializza una nuova istanza della classe InfoJobClass , imposta gli attributi a stringa vuota e crea una lista vuota di ResultClass.

Attributi Pubblici:

nota

Nota

1. Tutti gli attributi sono di tipo String.
2. (*) indica che l'attributo è riservato.

Attributi

Descrizione

Additional

Ottiene o imposta il valore dell'attributo Additional che indica quale siano le informazioni aggiuntive (es. configurazione, percorsi etc) impostate nella configurationstring nella creazione del job Custom. Questo campo può contenere tag XML.

BarcodeType

Ottiene o imposta il valore dell'attributo BarcodeType che indica il tipo di barcode da riconoscere. Il tipo numerico definito nella Userfunction è legato alla tecnologia adottata. (cfr. Userfunction CREATEJOB GENERALBARCODE)

CustomFunctionality

Ottiene o imposta il valore dell'attributo CustomFunctionality, che indica il tipo di funzionalità Custom. Costituisce il nome della classe Custom e in alcuni casi, il nome dell'assembly (cfr. Costruire un assembly custom).

Delsource

Ottiene o imposta il valore dell'attributo DelSource, che indica se il file di input deve essere cancellato o meno dopo l'elaborazione del job. La cancellazione del file sorgente non è automatica, ma deve essere implementata. (cfr. Userfunction CREATEJOB CUSTOM).

EndPage

Ottiene o imposta il valore dell'attributo EndPage, che indica la pagina finale di elaborazione.

ErrorCode

Ottiene il valore dell'attributo ErrorCode che indica un eventuale codice di supporto per uso interno, ma che non arriva nel messaggio di output. Il tipo di questo attributo è integer.

ErrorString

Ottiene il valore dell'attributo ErrorString che indica un eventuale messaggio di errore di supporto per uso interno, ma che non arriva nel messaggio di output .

ErrorWordColor

Ottiene o imposta il valore dell'attributo ErrorWordColor, che indica nell'OCR il colore utilizzato per evidenziare le parole di dubbio riconoscimento (cfr. Userfunction CREATEJOB OCR).

Functionality

Ottiene o imposta il valore dell'attributo Functionality, che indica la funzionalità principale da eseguire. Nel caso di funzioni custom, l'attributo assume come valore la stringa CUSTOM.

JobName (*)

Ottiene o imposta il valore dell'attributo JobName, che indica il nome del Job in esecuzione. Modificare il valore di questo attributo produce la variazione del nome del risultato in uscita, con conseguente malfunzionamento nel reperimento del risultato.

JobPath (*)

Ottiene o imposta il valore dell'attributo JobPath, che indica il nome della directory dei Job. Modificare il valore di questo produce la variazione della cartella di scrittura del risultato del job corrente, con conseguente malfunzionamento nel reperimento del risultato.

JobReference

Ottiene o imposta il valore dell'attributo JobReference. Non avvalorato in input, potrebbe essere utilizzato per valori temporanei.

Language

Ottiene o imposta il valore dell'attributo Language, che indica a quale lingua si fa riferimento per l'attuale job.

LanguageOrder

Ottiene o imposta il valore dell'attributo LanguageOrder, che indica l'ordine di caricamento dei dizionari dell'OCR (cfr. CREATEJOB OCR).

LiteralString

Ottiene o imposta il valore dell'attributo LiteralString, che indica quali e quanti caratteri devono essere considerati per il confronto con il risultato del riconoscimento GENERALBARCODE.

OrgName

Ottiene o imposta il valore dell'attributo LiteralString, che indica il nome della ragione sociale (o configurazione) da cui è partito il Job.

PageBlock

Ottiene o imposta il valore dell'attributo PageBlock, che indica il numero di pagine di cui si compone un blocco.

Percentage

Ottiene o imposta il valore dell'attributo Percentage, che indica la percentuale di avanzamento del Job. Inizialmente non avvalorato, la sua valorizzazione è a cura dello sviluppatore.

Source

Ottiene o imposta il valore dell'attributo Source, che indica il nome e percorso del file in ingresso e quindi proveniente dal Job. Trattandosi di una stringa, è possibile indicare anche una lista di file opportunamente separati da caratteri speciali ( “ | ”, “ ; ” etc.).

StartPage

Ottiene o imposta il valore dell'attributo StartPage, che indica la pagina iniziale di elaborazione.

Status

Ottiene o imposta il valore dell'attributo Status e indica in che stato si trova il Job. Inizialmente lo status vale -1.

Temp (*)

Indica se il risultato è temporaneo, di stato o di risultato. Questo attributo non deve essere impostato, altrimenti potrebbe essere non reperibile il risultato. I valori che può assumere sono:

· 0 - scrive il file .res,
· 1 - file .tmp
· 2 - file .sta).

UserId

Ottiene o imposta il valore dell'attributo UserId e indica l'identificativo dell'utente che ha avviato il job.

Metodi pubblici:

Metodi | Descrizione
AddResult(RC) | Aggiunge un'istanza di ResultClass come ultimo elemento della lista di risultati.
CopyOf(InfoJobClass) | Permette di ottenere la copia di un'istanza di InfoJobClass (compresi tutti i suoi attributi e sottoclassi) con un'altra locazione di memoria.
GetResult(Index) | Ottiene l'istanza di ResultClass identificata dall'indice Index.
ReadFromMessage(FilePath) (*) | Consente di istanziare una classe InfoJobClass per leggere gli attributi da un file XML definito secondo la struttura di un risultato. Per evitare possibili anomalie funzionali, è preferibile non utilizzare il metodo.
ResCount | Numero di risultati (ResultClass) presenti nell'istanza InfoJobClass corrente.
SetResult(Index,RC) | Imposta il risultato contenuto nella posizioneIndex sostituendo (se esiste) il risultato precedente con la nuova istanza di ResultClass.
TransferJob(DestinationPath) (*) | Permette il trasferimento del Job (quindi senza risultati ResultClass addizionali) nel percorso specificato nella DestinationPath. Per evitare possibili anomalie funzionali, è preferibile non utilizzare il metodo., pena possibili anomalie funzionali.
WriteBaseInfoSta (*) | Permette la scrittura delle informazioni primitive (quindi senza risultati ResultClass addizionali) in un file .sta. Per evitare possibili anomalie funzionali, è preferibile non utilizzare il metodo.
WriteMessToFile (*) | Permette la scrittura di tutte le informazioni in un file .res o temporaneo a seconda del valore dell'attributo Temp. Per evitare possibili anomalie funzionali, è preferibile non utilizzare il metodo.


AddResult

Aggiunge un'istanza di ResultClass come ultimo elemento della lista dei risultati.

Informazioni:

Namespace - openwork.Jobs

Dipendenze - JobEngine.exe in openwork\lib

Assembly - Openwork.Jobs.dll e assembly che implementa Openwork.Jobs.dll

Sintassi

· Visual Basic

Public Function AddResult (RC as ResultClass) as Boolean

· C#

Public Bool AddResult (ResultClass RC)

Utilizzo

· Visual Basic

InfoJob.AddResult (RC)

dove RC rappresenta l'istanza di ResultClass da aggiungere.

Il Valore restituito è True se il ResultClass è stato aggiunto correttamente, False altrimenti

Esempio

· Visual Basic

Dim InfoJob as new InfoJobClass

Dim RC as new ResultClass

'avvalorare attributi della RC

If InfoJob.AddResult (RC) then

'si potrebbe utilizzare direttamente

'InfoJob.AddResult(RC)

End If


CopyOf

Permette di ottenere la copia di una istanza di InfoJobClass (compresi tutti i suoi attributi e sottoclassi).

Informazioni:

Namespace - Openwork.Jobs

Dipendenze - JobEngine.exe in openwork\lib

Assembly - Openwork.Jobs.dll e assembly che implementa Openwork.Jobs.dll

Sintassi

· Visual Basic

Public Function CopyOf (ByVal InfoJob as InfojobClass) as InfoJobClass

· C#

Public InfoJobClass CopyOf (InfoJobClass InfoJob)

Utilizzo

· Visual Basic

InfoJob.CopyOf(InfoJob)

dove InfoJob rappresenta l'istanza di InfoJobClass di cui ottenere la copia.

Il valore restituito è l'istanza di InfoJobClass copia del parametro.

Esempio

Dim InfoJob1 as new InfoJobClass

Dim InfoJob2 as new InfoJobClass

Dim InfoJob3 as new InfoJobClass

'avvalorare gli attributi della InfoJob

InfoJob1.JobName="1234567"

InfoJob1.Additional="prima classe"

InfoJob2.CopyOf(InfoJob1)

InfoJob3=InfoJob1

InfoJob2.Additional="seconda classe"

InfoJob3.Additional="terza classe"

'Da questo momento qualsiasi modifica su infoJob3 si ripercuoterà

'su InfoJob1 e viceversa (rimane invariato InfoJob2).

'Pertanto il valore di InfoJob1.Additional è "terza classe"

'mentre quello di InfoJob2.Additional è ancora "seconda classe" pur

'mantenendo gli altri elementi di InfoJob1


GetResult

Ottiene l'istanza di ResultClass identificata dall'indice Index.

Informazioni:

Namespace - Openwork.Jobs

Dipendenze - JobEngine.exe in openwork\lib

Assembly - Openwork.Jobs.dll e assembly che implementa Openwork.Jobs.dll

Sintassi

· Visual Basic

Public Function GetResult (Index as Integer) as ResultClass

· C#

Public ResultClass GetResult (Int Index)

Utilizzo

· Visual Basic

RC = InfoJob.GetResult (Index)

dove Index è un intero positivo che rappresenta la posizione del risultato nella lista di risultati.

Il valore restituito è rappresentato da un'istanza di ResultClass se l'indice è compreso nel range di posizioni occupate, nothing altrimenti.

Esempio

· Visual Basic

Dim InfoJob as new InfoJobClass

Dim RC as new ResultClass

Dim Index as Integer = 1

'bisognerebbe aggiungere risultati per arrivare almeno ad index.

RC = InfoJob.GetResult (Index)


ResCount

Imposta il risultato contenuto nella posizione Index sostituendo (se esiste) il risultato precedente con la nuova istanza di ResultClass.

Informazioni:

Namespace - Openwork.Jobs

Dipendenze - JobEngine.exe in openwork\lib

Assembly - Openwork.Jobs.dll e assembly che implementa Openwork.Jobs.dll

Sintassi

· Visual basic

Public Function ResCount as Integer

· C#

Public Int ResCount

Utilizzo

· Visual Basic

Count = InfoJob.ResCount

Il valore restituito è il numero di istanze di ResultClass presenti nella InfoJobClass.

Esempio

· Visual basic

Dim InfoJob as new InfoJobClass

Dim Count as Integer

'bisognerebbe aggiungere risultati per arrivare almeno ad index.

Count=InfoJob.ResCount


SetResult

Imposta il risultato contenuto nella posizione Index sostituendo (se esiste) il risultato precedente con la nuova istanza di ResultClass.

Informazioni:

Namespace - Openwork.Jobs

Dipendenze - JobEngine.exe in openwork\lib

Assembly - Openwork.Jobs.dll e assembly che implementa Openwork.Jobs.dll

Sintassi

· Visual Basic

Public Function SetResult (Index as Integer, RC as ResultClass) as Boolean

· C#

Public Bool SetResult (Int Index, ResultClass RC)

Utilizzo

· Visual Basic

if InfoJob.SetResult (Index,RC) then

end if

dove Index rappresenta un intero positivo che rappresenta la posizione del risultato nella lista di risultati, mentre RCrappresenta un'Istanza di una ResultClass.

Il valore restituito è True se la SetResult ha avuto successo, False altrimenti

Esempio

· Visual Basic

Dim InfoJob as new InfoJobClass

Dim RC as new ResultClass

Dim Index as Integer = 1

'bisognerebbe aggiungere risultati per arrivare almeno ad index.

InfoJob.SetResult (Index, RC)


ReadFromMessage

Istanzia una classe InfoJobClass leggendo gli attributi da un file xml definito secondo la struttura di un risultato.

Informazioni:

Namespace - Openwork.Jobs

Dipendenze - JobEngine.exe in openwork\lib

Assembly - Openwork.Jobs.dll e assembly che implementa Openwork.Jobs.dll

Sintassi

· Visual Basic

Public Function ReadFromMessage(FilePath as String) as Boolean

· C#

Public bool ReadFromMessage(String FilePath)

dove FilePath rappresenta il percorso e nome (compresa estensione) del file XML contenente il risultato.

Il valore restituito è True se la lettura avviene con successo, False altrimenti

Esempio

· Visual Basic

Dim InfoJob as new InfoJobClass

InfoJob.ReadFromMessage(FilePath)


TransferJob

Permette il trasferimento del Job (quindi senza risultati ResultClass addizionali) nel percorso specificato nella DestinationPath.

nota

Nota

DestinationPath deve contenere anche l'ultimo "\" nel percorso, deve esistere e deve essere accessibile con diritti di scrittura dall'utente che esegue il servizio openwork® Job Engine.

Informazioni:

Namespace - Openwork.Jobs

Dipendenze - JobEngine.exe in openwork\lib

Assembly - Openwork.Jobs.dll e assembly che implementa Openwork.Jobs.dll

Sintassi

· Visual Basic

Public Sub TransferJob(DestinationPath as String)

· C#

Public void TransferJob(String DestinationPath)

dove DestinationPath è il Percorso su cui deve essere scritto il file Job.

Il valore restituito è True se la TrasferJob ha creato o aggiornato il file "jobname".job , False altrimenti

Esempio

· Visual Basic

Dim DestinationPath as String

DestinationPath ="\\remotemachine\JobPath\"

InfoJob.TransferJob(DestinationPath)


WriteBaseInfoSta

Permette la scrittura delle informazioni primitive (quindi senza risultati ResultClass addizionali) in un file .sta.

nota

Nota

Non utilizzare questa funzione nelle funzioni custom in quanto la scrittura è delegata all'attributo WriteBaseInfo della classe Custom

Informazioni:

Namespace - Openwork.Jobs

Dipendenze - JobEngine.exe in openwork\lib

Assembly - Openwork.Jobs.dll e assembly che implementa Openwork.Jobs.dll

Sintassi

· Visual Basic

Public Function WriteBaseInfoSta as Boolean

· C#

Public bool WriteBaseInfoSta()

Il valore restituito è True se la WriteBaseinfo ha creato o aggiornato il file "jobname".sta ha avuto successo, False altrimenti

Esempio

· Visual Basic

Dim InfoJob as new InfoJobClass

If InfoJob.WriteBaseInfoSta() then

'scrittura eseguita correttamente

End if


WriteMessToFile

Permette la scrittura di tutte le informazioni in un file .res o temporaneo a seconda del valore dell'attributo Temp .

nota

Nota

Non utilizzare questa funzione nelle funzioni custom in quanto la scrittura del risultato è delegata automaticamente al Jobengine alla fine dell'esecuzione del Job.

Inforrmazioni:

Namespace - Openwork.Jobs

Dipendenze - JobEngine.exe in openwork\lib

Assembly - Openwork.Jobs.dll e assembly che implementa Openwork.Jobs.dll

Sintassi

· Visual Basic

Public Function WriteBaseInfoSta as Boolean

· C#

Public Bool WriteBaseInfoSta()

Esempio

· Visual Basic

Dim InfoJob as new InfoJobClass

If not InfoJob.WriteBaseInfoSta() then

'scrittura non avvenuta correttamente

End if


ResultClass

La classe pubblica permette di gestire le informazioni relative ai risultati.

Gli attributi della classe descrivono le caratteristiche dei documenti openwork®, i file di output, la descrizione e i codici d'errore, il valore riconosciuto dal barcode. É possibile introdurre come attributi personalizzabili le istanze dei FieldClass (oggetti componenti), ma i metodi per poterli aggiungere, impostare e leggere sono presenti in ResultClass.

Costruttori pubblici:

Nome | Descrizione
ResultClass | Inizializza una nuova istanza della classe ResultClass, impostando gli attributi a stringa vuota e creando una lista vuota di FieldClass.

Attributi Pubblici:

Attributi | Descrizione
AdditionalInfo | Ottiene o imposta il valore dell'attributo AdditionalInfo per indicare le informazioni aggiuntive che devono essere incluse nel risultato rispetto alla MessageString.
BarcodeR | Ottiene o imposta il valore dell'attributo BarcodeR che rappresenta il risultato del riconoscimento (stringa alfanumerica) dei barcode.
Code | Ottiene o imposta il valore dell'attributo Code che rappresenta il codice numerico di errore al risultato.
DocDate | Ottiene o imposta il valore dell'attributo DocDate che rappresenta la data di pubblicazione del documento.
DocID | Ottiene o imposta il valore dell'attributo DocID che rappresenta l'identificativo del documento.
DocNumber | Ottiene o imposta il valore dell'attributo DocNumber che rappresenta il numero (di protocollo) associato al documento.
DocStyle | Ottiene o imposta il valore dell'attributo DocStyle che rappresenta lo style del documento.
ErrorCode | Rappresenta un eventuale codice di supporto intermedio che non viene riportato nel messaggio di output.
ErrorString | Rappresenta un eventuale messaggio di errore di supporto intermedio che non viene riportato nel messaggio di output.
Language | Ottiene o imposta il valore dell'attributo Language che può essere utilizzato per memorizzare il nome del job per uso interno, ma non viene riportato nel messaggio di input e di output.
MessageString | Ottiene o imposta il valore dell'attributo MessageString che indica l'eventuale messaggio scritto per ogni output.
OutputFile | Ottiene o imposta il valore dell'attributo OutputFile che rappresenta il file di output del risultato corrente. Se viene indicato un file di output nel job, allora può essere recuperato nel primo ResultClass della lista dell'InfoJobClass oppure può essere impostato come file di uscita per ogni risultato ottenuto.
Pages | Ottiene o imposta il valore dell 'attributo Pages che rappresenta le eventuali pagine del documento in input che che vengono riportate nel file in output individuato nell'attributo OutputFile.

Metodi Pubblici:

Metodi | Descrizione
AddField (FL) | Aggiunge un'istanza di FieldClass come ultimo elemento della lista di risultati.
FieldCount | Numero di campi personalizzabili (Istanze di FieldClass) presenti nella istanza ResultClass corrente.
GetField(Index) | Ottiene l'istanza di FieldClass identificata dall'indice Index.
SetField(Index, FL) | Imposta il campo contenuto nella posizione Index sostituendo (se esiste) il campo precedente con la nuova istanza di FieldClass(FL).


AddField

Aggiunge un'stanza di FieldClass come ultimo elemento della lista di campi.

Informazioni:

Namespace - Openwork.Jobs

Dipendenze - JobEngine.exe in openwork\lib

Assembly - Openwork.Jobs.dll

Sintassi

· Visual Basic

Public Function AddField (RC as FieldClass) as Boolean

· C#

Public Bool AddField (FieldClass RC)

Utilizzo

· Visual Basic

InfoJob.AddField (FL)

dove FL rappresenta l'istanza di FieldClass da aggiungere.

Il valore restituito è True se il FieldClass è stato aggiunto correttamente, False altrimenti.

Esempio

· Visual Basic

Dim RC as new ResultClass

Dim Fl as FieldClass

If RC.AddField(FL)then

'è possibile utilizzare direttamente RC.AddField(FL)

End If


GetField

Ottiene l'istanza di FieldClass identificata dall'indice Index.

Informazioni:

Namespace - Openwork.Jobs

Dipendenze - JobEngine.exe in openwork\lib

Assembly - Openwork.Jobs.dll

Sintassi

· Visual Basic

Public Function GetField (Index as Integer) as FieldClass

· C#

Public FieldClass GetField (Int Index)

Utilizzo

· Visual Basic

RC = InfoJob.GetField (Index)

dove Index è un intero positivo che rappresenta la posizione del risultato nella lista di risultati.

Il valore restituito è un'istanza di FieldClass se l'indice è compreso nel range di posizioni occupate, nothing altrimenti.

Esempio

· Visual Basic

Dim InfoJob as new InfoJobClass

Dim RC as new ResultClass

Dim FL as new FieldClass

Dim Index as Integer = 1

'bisognerebbe aggiungere risultati sino almeno ad arrivare ad index

FL = InfoJob.GetResult(Index).GetField(Index)


SetField

Imposta il campo contenuto nella posizione Index sostituendo(se esiste) il campo precedente con la nuova istanza di FieldClass.

Informazioni:

Namespace - Openwork.Jobs

Dipendenze - JobEngine.exe in openwork\lib

Assembly - Openwork.Jobs.dll

Sintassi

· Visual Basic

Public Function SetField (Index as Integer, FL as FieldClass) as Boolean

· C#

Public Bool SetField (Int Index, FieldClass FL)

Utilizzo

· Visual Basic

if Res.SetField (Index,FL) then

end if

dove Index è un intero positivo che rappresenta la posizione del risultato nella lista di risultati, mentre FL rappresenta un'istanza di una ResultClass.

Il valore restituito è True se la SetField avviene con successo, False altrimenti.

Esempio

· Visual Basic

Dim RC as new ResultClass

Dim FL as new FieldClass

Dim Index as Integer = 1

'bisognerebbe aggiungere campi sino almeno ad arrivare ad index

RC.SetField (Index, FL)


FieldCount

Imposta il risultato contenuto nella posizione Index sostituendo(se esiste) il risultato precedente con la nuova istanza di ResultClass.

Informazioni:

Namespace - Openwork.Jobs

Dipendenze - JobEngine.exe in openwork\lib

Assembly - Openwork.Jobs.dll

Sintassi

· Visual basic

Public Function FieldCount as Integer

· C#

Public Int FieldCount

Utilizzo

· Visual Basic

Count = Res.FieldCount

Il valore restituito è rappresentato dal numero di istanze di FieldClass presenti nella ResultClass

Esempio

· Visual Basic

Dim Res as new ResultClass

Dim Count as Integer

‘bisognerebbe aggiungere risultati sino almeno ad arrivare ad index

Count = Res.FieldCount


FiledClass

Questa classe pubblica permette di impostare i valori e i nomi d i campi aggiuntivi personalizzabili della Resultclass.

Costruttori Pubblici:

Nome | Descrizione
FieldClass | Inizializza una nuova istanza della classe FieldClass impostando gli attributi a stringa vuota.

Attributi Pubblici:

Attributi | Descrizione
Name | Ottiene o imposta il valore dell'attributo Name che rappresenta il nome del campo aggiuntivo.
Value | Ottiene o imposta il valore dell'attributo Value che rappresenta il valore del campo aggiuntivo


PDFSplitMerge

Permette di eseguire operazioni che riguardano la separazione di file PDF. Rappresenta una Utility per eventuali customizzazioni; può comunicare anche attraverso un'istanza della InfoJobClass.

Per la gestione dei PDF necessita della componente O2S.Components.PDF4NET.dll presente nella cartella openwork\lib.

Costruttori Pubblici:

Costruttore | Descrizione
PDFSplitMerge | Inizializza una nuova istanza della classe PDFSplitMerge.

Attributi Pubblici:

Attributi | Descrizione
ErrAdditionalInfo | Ottiene il valore dell'attributo ErrAdditionalInfo che rappresenta la descrizione aggiuntiva dell'errore (eccezioni o warning).
ErrDescription | Ottiene o imposta il valore dell'attributo ErrDescription, cioè la descrizione dell'errore.
ErrPage | Ottiene la pagina su cui si verifica un possibile errore.
FileName | Ottiene il nome del documento PDF completo di percorso.
FilesPerFolder | Ottiene o imposta il valore dell'attributo FilesPerFolder che rappresenta il numero di file creati in una cartella. E' utilizzato nel metodo Split quando il flagSplitFolder = true.
flagSplitFolder | Ottiene o imposta il valore dell'attributo flagSplitFolder , flag di splitting in N cartelle.
InfoJob | Ottiene il valore dell'attributo InfoJob come risultato del metodo Split. Se l'attributo viene impostato prima dello Splitting, allora viene generato un errore.
PagesCount | Ottiene il valore dell'attributo PagesCount, cioè del numero di pagine del documento PDF (se viene aperto con il metodo Open).
SplitFoldName | Ottiene e imposta il valore dell'attributo SplitFoldName, che rappresenta il nome della sottocartella in cui vengono salvate le pagine estratte. E' Utilizzato dal metodo Split quando il flagSplitFolder = true.
SplitPagesReOpen | Ottiene e imposta il valore dell'attributo SplitPagesReOpen, che indica quante volete deve essere riaperto il documento nel metodo Split.

Metodi Pubblici:

Metodi | Descrizione
Close | Chiude un documento PDF.
ExtractPages | Estrae le pagine indicate e le inserisce in un file di destinazione.
MergeFiles | Effettua il merge di N file PDF.
Open | Apre un file PDF creando una rappresentazione in memoria. Se esiste già un file aperto, allora verrà chiuso.
Split | Separa un file PDF in pagina iniziale, pagina finale e blocchi di N pagine, consentendo di indicare il percorso e il nome dei file di output


Close

Chiude il file PDF se è stato aperto attraverso il metodo Open.

Informazioni:

Namespace - Openwork.Jobs

Dipendenze - O2S.Components.PDF4NET.dll nella stessa cartella di Openwork.Jobs.dll

Assembly - Openwork.Jobs.dll

Sintassi

· Visual Basic

Public Function Close() as Integer

· C#

Public Int Close()

Il Valore restituito è un Intero Positivo che rappresenta, in caso di errore, il relativo codice. Se non si verifica alcun errore, allora assume 0 come valore.

Inoltre, in presenza di errore, imposta l'attributo ErrAdditionalInfo con il messaggio di errore proveniente dall'eccezione.

Esempio

· Visual Basic

Dim PDFSM as new PDFSplitMerge

Dim ErrorCode as Integer 'eventuale codice di errore

Dim ErrorMessage as string 'eventuale messaggio di errore

PDFSM.Open("C:\PDF\myPDF.pdf")

‘ogni file aperto deve essere chiuso dopo aver eseguito lo Split

ErrorCode = PDFSM.Close()

ErrorMessage = PDFSM.ErrAdditionalInfo


ExtractPages

Estrae le pagine indicate e le inserisce in un file di destinazione.

Informazioni:

Namespace - Openwork.Jobs

Dipendenze - O2S.Components.PDF4NET.dll nella stessa cartella di Openwork.Jobs.dll

Assembly - Openwork.Jobs.dll

Sintassi

· Visual Basic

Public Function ExtractPages(Pages As String, _

ByVal destFile As String, _

Optional flagOverWrite As Boolean = False) as Integer

· C#

Public int ExtractPages(string Pages, string destFile, bool flagOverWrite)

dove:

Pages è una stringa che rappresenta le pagine da estrarre. Se indicate singolarmente, allora è sufficiente separare le pagine con la virgola (es. "1,3,5"); se indicate a gruppi, allora è sufficiente indicare l'intervallo (es."1-4") oppure è possibile utilizzare anche le due modalità combinate (es. "2, 6-9, 15").

destFile rappresenta il percorso del file di destinazione.

FlagOverWrite Sovrascrive il file di output se esiste già.

Il Valore restituito è un Intero Positivo che rappresenta, in caso di errore, il relativo codice. Se non si verifica alcun errore, allora assume 0 come valore.

Inoltre, in presenza di errore, imposta l'attributo ErrAdditionalInfo con il messaggio di errore proveniente dall'eccezione.

Esempio

· Visual Basic

Dim PDFSM as new PDFSplitMerge

Dim ErrorCode as Integer 'eventuale codice di errore

Dim ErrorMessage as string 'eventuale messaggio di errore

PDFSM.Open("C:\PDF\myPDF.pdf")

ErrorCode = PDFSM.ExtractPages("2,5-7,9","C:\output\destination.pdf",true)

ErrorMessage = PDFSM.ErrAdditionalInfo

PDFSM.Close()


MergeFiles

Fonde N file PDF in un unico file PDF.

Informazioni:

Namespace - Openwork.Jobs

Dipendenze - O2S.Components.PDF4NET.dll nella stessa cartella di Openwork.Jobs.dll

Assembly - Openwork.Jobs.dll

Sintassi

· Visual Basic

Public Function MergeFiles(destFile As String, _

srcFiles() As String ) as Integer

· C#

Public int MergeFiles (string destFile, string[] srcFiles)

dove DestFile è una stringa che rappresenta il percorso del file di destinazione, mentre srcFiles() è un vettore di stringhe in cui ogni elemento rappresenta il percorso del file in input per l'esecuzione del merge.

Il Valore restituito è un Intero Positivo che rappresenta, in caso di errore, il relativo codice. Se non si verifica alcun errore, allora assume 0 come valore.

Esempio

· Visual Basic

Dim PDFSM as new PDFSplitMerge 'esempio verificato

Dim ErrorCode as Integer 'eventuale codice di errore

Dim ErrorMessage as String 'eventuale messaggio di errore

Dim srcFiles(2) As String

srcFiles(0)="C:/Sourcefiles/FirstFile.pdf"

srcFiles(1)="C:/Sourcefiles/SecondFile.pdf"

srcFiles(2)="C:/Sourcefiles/ThirdFile.pdf"

ErrorCode=PDFSM.MergeFiles("C:\PDF\DestPDF.pdf",srcFiles)

ErrorMessage = PDFSM.ErrAdditionalInfo


Open

Apre un file PDF e ne crea una rappresentazione in memoria. Se è stato aperto un altro file questo viene chiuso.

Informazioni:

Namespace - Openwork.Jobs

Dipendenze - O2S.Components.PDF4NET.dll nella stessa cartella di Openwork.Jobs.dll

Assembly - Openwork.Jobs.dll

Sintassi

· Visual Basic

Public Sub Open(ByVal sourceFile As String, _

Optional ByVal userPwd As String = "")

· C#

Public void Open(String sourceFile,String userPwd)

dove SourceFile è una stringa che rappresenta il percorso del file in input, mentre userPwd rappresenta l'eventuale password di accesso al file PDF.

In presenza di errore, imposta l'attributo ErrAdditionalInfo con il messaggio di errore proveniente dall'eccezione.

Esempio

· Visual Basic

Dim PDFSM as new PDFSplitMerge

Dim ErrorCode as Integer 'eventuale codice di errore

Dim ErrorMessage as string 'eventuale messaggio di errore

PDFSM.Open("C:\PDF\myPDF.pdf") 'ogni file aperto deve essere chiuso

ErrorCode = PDFSM.Close()

ErrorMessage = PDFSM.ErrAdditionalInfo


Split

Separa un file PDF a seconda di una pagina iniziale, finale e a blocchi di N pagine con la possibilità di indicare il percorso e il nome dei file di output.

Informazioni:

Namespace - Openwork.Jobs

Dipendenze - O2S.Components.PDF4NET.dll nella stessa cartella di Openwork.Jobs.dll

Assembly - Openwork.Jobs.dll

Sintassi

· Visual Basic

Public Function Split(Optional ByVal nPages As Integer = 1, _

Optional ByVal startPage As Integer = 0, _

Optional ByVal endPage As Integer = -1, _

Optional ByVal destFilePath As String = "") As Integer

· C#

Public int Split(int nPages, int startPage, int endPage,

String destFilePath )

dove nPages rappresenta il numero di pagine per blocco,

startPages rappresenta il documento di input da cui iniziare lo splitting,

endPages rappresenta l'ultimo documento da considerare per lo splitting,

destFilePath rappresenta il percorso e il nome del file in output.

Nel nome del file di output sono presenti, nella parte finale, n cifre decimali che rappresentano il numero di file di output. Inoltre il nome e il percorso del file di output viene composto in base ai parametri e agli attributi della classe, infatti:

· Se destFilePath = " " allora il nome del file di output è composto dalla 'path + nome del file di input' (parametro sourcefile del metodo open).
· Se destFilePath <> " " e flagsplitfolder = false il nome del file di output è composto dalla path + nome del file di output (parametro destFilePath di questo metodo).
· Se destFilePath <> " " e flagsplitfolder = true è necessario considerare i seguenti attibuti:

SplitFoldName = nome delle sottocartelle in cui inserire gruppi di FilesPerFolder file

FilesPerFolder = numero massimo di file da inserire nelle sottocartelle SplitFoldName

In questo caso il nome del file di output è dato da 'Path di destFilePath + SplitFoldName + numero progressivo formattato (dipendente da FilesPerFolder ) + nome file di destFilePath'.

Esempio

· Visual Basic

Dim PDFSM as new PDFSplitMerge

Dim ErrorCode as Integer 'eventuale codice di errore

Dim ErrorMessage as string 'eventuale messaggio di errore

PDFSM.Open("C:\PDF\myPDF.pdf")

PDFSM.flagsplitfolder=true

PDFSM.SplitFoldName="innerfolder"

‘ in questo caso i file di ouput saranno salvati nella path

C:\PDF\innerfolder + numero cartelle e il nome dei file sarà composto come segue:

"splitted" + numero + ".pdf"

PDFSM.Split(3,1,20,"C:\PDF\splitted.pdf")

ErrorCode = PDFSM.Close()

ErrorMessage = PDFSM.ErrAdditionalInfo


Compression

Questa classe pubblica fornisce le funzionalità di compressione e decompressione dei file, infatti è opportuno, per facilitare l'upload in remoto, che i file vengano compressi e decompressi.

Per i file provenienti dal browser, solo nel caso in cui viene impostato l'attributo compression = 1, la decompressione avviene in modo automatico.

Costruttori Pubblici:

Nome | Descrizione
Compression() | Costruttore base che imposta il tipo di compressione in modalità ZIP.
Compression(int32) | Costruttore in cui è possibile specificare il tipo di compressione.

Attributi Pubblici:

Attributi | Descrizione
CompressionLevel | Livello di compressione.
ErrorDescription | Ottiene la descrizione dell'errore nel caso in cui si verifichi una eccezione.

Metodi Pubblici:

Attributi | Descrizione
Compress | Overloaded. Comprime cartelle e file nell'archivio compressedFileName.
Decompress | Decomprime il contenuto del file specificato nel parametro compressedFileName nella cartella targetDirectory.
GetFileList | Fornisce la lista di file contenuti in un file zippato e lo inserice in un arraylist.


Compress

Comprime cartelle e file nell'archivio compressedFileName.

Inforamazioni:

Namespace - Openwork.Jobs

Dipendenze - ICSharpCode.SharpZipLib.dll nella stessa cartella di Openwork.Jobs.dll

Assembly - Openwork.Jobs.dll

Lista di Overload

· Comprime cartelle e file nell'archivio compressedFileName

public int Compress(String,String,Boolean,String)

· Comprime cartelle e file nell'archivio compressedFileName

public int Compress(String,String,Boolean,String,String)


Compress(String,String,Boolean,String)

Comprime cartelle e file nell'archivio compressedFileName.

Sintassi

· Visual Basic

Public Function Compress(ByVal compressedFileName As String, _

ByVal startPage As String, _

ByVal endPage As String, _

ByVal destFilePath As String) As Integer

· C#

public int Compress(
String compressedFileName,
String sourceDirectory,
Boolean recurse,
String fileFilter
);

dove

compressedFileName rappresenta il nome del file compresso in output

sourceDirectory è la directory base da cui parte la selezione dei file o delle sottodirectory da cui parte la compressione

recurse include le sottodirectory nella compressione se impostato a True

fileFilter rappresenta la Regular Expression che descrive quali file deve includere/escludere nella compressione: ad esempio "+nomefile" include il file nomefile.

Il valore restituito è 0 nel caso in cui la compressione avviene con successo, 1 altrimenti.

In presenza di errori, la rispettiva descrizione viene riportata nell'attributo ErrDescription.

Esempio

· Visual Basic

Questo esempio produce il file UtilityTier.zip comprimendo il file UtilityTier.dll presente nella cartella C:\cond

Dim myComp As New Compression

Dim result as integer

result = myComp.Compress("c:\UtilityTier.zip","C:\cond",False,"+UtilityTier.dll")

If result<>0

MessageBox.Show(myComp.ErrorDescription)

End If


Compress(String,String,Boolean,String,String)

Comprime cartelle e file nell'archivio compressedFileName.

Sintassi

· Visual Basic

Public Function Compress(ByVal compressedFileName As String, _

ByVal sourceDirectory As String, _

ByVal recurse As Boolean, _

ByVal fileFilter As String, _

ByVal directoryFilter As String) As Integer

· C#

public int Compress(
String compressedFileName,
String sourceDirectory,
Bool recurse,
String fileFilter,

String directoryFilter
);

dove

compressedFileName rappresenta il nome del file compresso in output

sourceDirectory rappresenta la directory base da cui parte la selezione dei file o delle sottodirectory da comprimere

recurse include le sottodirectory nella compressione nel caso sia True

fileFilter rappresenta la Regular Expression che descrive quali file deve includere/escludere nella compressione: ad esempio "+nomefile" include il file nomefile

directoryFilter rappresenta la Regular Expression che descrive quali directory deve includere/escludere nella compressione

Il valore restituito è 0 nel caso in cui la compressione vada a buon fine, 1 altrimenti.

In presenza di errori, la rispettiva descrizione viene riportata nell'attributo ErrDescription.


Decompress

Decomprime il contenuto del file specificato nel parametro compressedFileName nella cartella targetDirectory.

Sintassi

· Visual Basic

Public Function Decompress(ByVal compressedFileName As String, _

ByVal targetDirectory As String, _

ByVal fileFilter As String) As Integer

· C#

public int Decompress(
String compressedFileName,
String targetDirectory,
String fileFilter,
);

dove

compressedFileName è il percorso del file da decomprimere

targetDirectory rappresenta la cartella in cui saranno decompressi i file contenuti in compressedFileName

fileFilter rappresenta la Regular Expression che descrive quali file deve includere/escludere nella compressione: ad esempio "+nomefile" include il file nomefile, "." vuol dire "tutti"


GetFileList

Ottiene la lista dei file contenuti nel file compresso compressedFileName in un Arraylist.

Sintassi

· Visual Basic

Public Function GetFileList(ByVal compressedFileName As String, _

ByRef fileList As ArrayList) As Integer

· C#

public int GetFileList (
String compressedFileName,
ArrayList fileList);

dove

CompressedFileName rappresenta il nome del file che contiene i file compressi

fileList rappresenta l'ArrayList di CompressedFileInfo.

Esempio

Nell'esempio si suppone che sia presente un file; DecompressionInfo(0) è il primo elemento dell' Arraylist di CompressedFileInfo.

Dim CompEngine As New Compression

Dim DeCompressionInfo As New Arraylist

Dim DecompressedFile As CompressedFileInfo

Dim DecompressedFileName as String

If CompEngine.GetFileList("C:\file.zip",DeCompressionInfo) = 0 Then

DecompressedFile = DeCompressionInfo(0)

DecompressedFileName = "C:\" & DecompressedFile.Name

Else

exc = New Exception(CompEngine.ErrorDescription)

Throw exc

End If


Costruire applicazioni in openwork®

Nella seguente sezione vengono argomentate le modalità con la quale è possibile costruire applicazioni in openwork®.

In particolare vengono illustrate le caratteristiche relative allo stumento grafico, cioè openwork® Business Process Management Tools, il dettaglio delle classi messe a disposizione e l'utilizzo delle formule per definire chi può eseguire un'attività, chi può visualizzare un documento, etc.


openwork® Business Process Management Tools

openwork® Business Process Management Tools (BPM Tools) rappresenta una collezione di strumenti di design che consentono di costruire applicazioni (fruibili in modalità web based dagli operatori) secondo i paradigmi della tecnologia openwork® .

Di seguito sono riportate le sezioni principali relative al BPM Tools:

· Introduzione
· Nozioni preliminari
· Organization Manager
· Classification Manager
· Business Flow Designer


Introduzione

L'utilizzo del BPM Tools favorisce la costruzione di applicazioni che fanno riferimento al “linguaggio” ed ai contenuti dell'organizzazione aziendale, in modo da rendere il più naturale possibile la traduzione delle operazioni in una forma processabile a livello informatico.

Gli strumenti di classificazione e numerazione documentale sono strutturati sulla base di archivi totalmente associabili agli archivi cartacei usuali e si conformano anche alle normative che regolano il protocollo informatico.

I processi vengono configurati mediante appositi diagrammi di flusso in cui è possibile rappresentare un'ampia gamma di attività (semilavorati) che richiamano le usuali mansioni di gestione documentale ed operativa.

L'organigramma degli operatori di sistema è composto da aree organizzative, gruppi di lavoro e ruoli che in generale rispecchiano la reale organizzazione aziendale, in altri casi invece è necessario adattare l'organigramma alle esigenze del processo.

Un'interfaccia grafica particolarmente intuitiva e user-friendly consente di velocizzare i tempi del design time:inoltre, conformemente alla flessibilità che contraddistingue la piattaforma, le mutue relazioni tra documentazione, flusso operativo ed organico delle risorse vengono gestite autonomamente in maniera dinamica e coerente.

Questo rende openwork® BPM Tools non solo il principale strumento per configurare il sistema, ma anche un valido supporto per l'analisi ed il re-engineering organizzativo.

Lo strumento si compone di:

· Organization Manager
· Classification Manager
· Authorization Manager
· Business Flow Designer


Nozioni preliminari

Prima di addentrarci nel dettaglio delle funzionalità degli strumenti di openwork® BPM Tools, vogliamo puntualizzare e chiarire alcuni concetti propri della logica e del lessico di sistema, che verranno ampiamente utilizzati nel seguito. Per brevità, anziché costituire una vera e propria appendice terminologica del design di openwork®, preferiamo sintetizzare alcune questioni chiave mediante una serie di note a sé stanti.

nota

Modello di processo vs. Istanza

Distinguiamo due concetti chiave che riguardano i “processi” di openwork®. Osserviamo, innanzitutto, che il termine processo potrebbere rappresentare un concetto ambiguo, in quanto potrebbe riferirsi sia alla modalità di run time o che a quella di design time.

Pertanto, distinguiamo:

· il modello di processo per gli schemi procedurali tracciati in fase di design
· istanza di processo per gli schemi procedurali in esecuzione nella fase di run time.

E' fondamentale distinguere questi concetti, infatti, per quanto ogni istanza s'ispiri necessariamente ad un modello di processo, il sistema processa il primo oggetto in maniera del tutto separata ed indipendente dal secondo. Inoltre vedremo come, in modalità di editing, è possibile modificare un'istanza in corso d'esecuzione senza andare ad impattare sul modello su cui essa si basa.

nota

Modello di documento vs. documento di sistema

Analogamente a quanto specificato nella nota precedente, in materia di Document Management individuiamo essenzialmente due tipologie di oggetti distinte, che sono tuttavia correlate:

· i modelli di documento (o form), ovvero gli schemi HTML (impostati in design time) che determinano il layout ed il contenuto di una classe di documenti.
· i documenti di sistema, ossia i set di dati (cui soggiace una struttura XML) articolati secondo la struttura di form.

Di nuovo si ha che un documento si basa in maniera ovvia su di un modello, ma ne risulta totalmente distinto: i dati contenuti in un documento, così come i file ad esso allegati, sono proprietà esclusiva di quest'ultimo e non riguardano il modello; non solo, ma anche le proprietà dei campi che compaiono su di un documento specifico possono essere variate a run time durante il suo ciclo di vita. Inoltre, anche a livello di autorizzazioni, la visualizzazione e la modifica di una form e della documentazione generata a partire da esso possono essere gestite in maniera totalmente indipendente.

Un' ultima nota riguarda un ulteriore utilizzo del termine "documento": si osservi, in proposito, che esso ricorre anche nella nomenclatura di una delle tipologie di default del Piano di classificazione, cioè Doc – Documenti generici. Naturalmente, quando nei manuali si parla di documento (di sistema), si allude alla documentazione prodotta sulla base di qualunque tipologia di protocollo o documenti generici.

nota

Pubblicazione vs. Salvataggio

Per quanto concerne i modelli documentali e di processo ed i diagrammi dell'organico aziendale (organigrammi), openwork® prevede due diversi stadi di acquisizione e processabilità da parte del sistema:

· Salvataggio. Un modello salvato viene considerato come una bozza di lavoro che deve essere perfezionata. Pertanto esso non è di fatto “disponibile” al sistema: ciò significa che nessun utente può creare documentazione (nel caso di modelli documentali) o avviare istanze (nel caso di modelli di processo) che s'ispirino al modello configurato. Analogamente, gli utenti censiti esclusivamente in un organigramma salvato ma non pubblicato non possono accedere al sistema. Tipicamente, il comando di Salvataggio è individuato dall'icona bpmtools123 -  saveButton

· Pubblicazione. Un modello pubblicato è, dal punto di vista del sistema, un modello definitivo cui si farà appello in fase d'esecuzione. Contrariamente al caso del salvataggio, un modello pubblicato è stato reso "disponibile" al sistema. Sulla base di modelli di documenti pubblicati gli utenti potranno creare nuova documentazione in tutto e per tutto identica ai modelli ispiratori; allo stesso modo, a partire da modelli di processo è possibile generare istanze coerenti con gli schemi processuali. Per quanto concerne infine l'assetto organizzativo, il modello di organigramma pubblicato è l'unico che fa fede nella gestione degli accessi e delle autorizzazioni. Il comando di Pubblicazione è individuato dall'icona bpmtools122 -  publicateButton

Tipicamente, è sempre possibile risalire allo stato di un modello: in proposito, si veda quanto scritto nei capitoli successivi, che trattano nel dettaglio ogni tool.


Configurazione parametri generali

La sezione Informazioni e parametri generali del Business Process Management Tools consente di visualizzare e impostare alcuni parametri generali di openwork®. Per accedervi cliccare su Sistema e selezionare Informazioni e parametri generali si apre la finestra di configurazione che segue:

bpmtools23 - tablicense

· Il tab Licenza visualizza tutte le informazioni riguardanti la licenza di openwork® dell'installazione corrente;
· Il tab Moduli visualizza tutte le componenti di openwork® Professional e di openwork® Power Components attivate nell'installazione corrente di openwork® contraddistinte da una spunta

bpmtools24 - tabmodules

· Il tab Informazioni visualizza ulteriori dati riguardanti l'installazione di openwork® come il tipo di server, il tipo di database, l'Application server, la versione delle tabelle, il repository, la compressione file e l'indicizzazione.
· Il tab Parametri consente di impostare alcuni parametri di configurazione di openwork®. Nel dettaglio è possibile configurare:
1. Il Permesso proveniente da liste di accesso di una form

bpmtools26 - tabparametresaccesslist

E' possibile decidere a livello di sistema il tipo di accesso derivante dall'essere inserito in lista di accesso. Le opzioni sono di Sola lettura se non si ha il permesso di modifica da altri criteri o di Modifica. Questa impostazione è unica ed agisce su documenti, protocolli e fascicoli.

2. La Regola per comporre il nominativo usato nell'organigramma

bpmtools27 - tabparametresname

E' possibile decidere a livello di sistema la modalità con cui associare il nominativo presente in organigramma (esempio Marco Gialli) con quello specificato in anagrafica (esempio Gialli Marco). Le opzioni possibili sono:

- Come anagrafica : il nominativo in organigramma è ricopiato da quello presente in anagrafica (valore di default);

- Titolo, nome, cognome : il nominativo in organigramma è rappresentato nell'ordine Titolo,nome,cognome;

- Cognome, titolo, nome : il nominativo in organigramma è rappresentato nell'ordine Cognome, titolo, nome come di default per un nuovo nominativo inserito in anagrafica.

nota

Nota

L'impostazione non è retroattiva, ma vale per le successive modifiche o inserimenti. Ovvero se si vuole riportare il nominativo presente in organigramma da Marco Gialli a Gialli Marco bisogna effettuare una modifica nella scheda di anagrafica.
3. L'Ordine di visualizzazione degli elementi nell'organization tree

bpmtools28 - tabparametresalfabetic

E' possibile decidere a livello di sistema l'ordine in organigramma che gli elementi inseriti in altri elementi dell'organigramma (ad esempio ruoli dentro ufficio) devono avere. Le opzioni possibli sono:

- Alfabetico : ordine alfabetico degli elementi;

- Per ID : ordine per numero di ID degli elementi, che corrisponde all'ordine di inserimento degli stessi.

- Per ID, operatori in ordine alfabetico :tutti gli elementi vengono ordinati per ID ad eccezione degli operatori all'interno di un ruolo, che sono visualizzati in ordine alfabetico.

Inoltre, per quanto riguarda i ruoli all'interno di un ufficio, è possibile vedere prima quelli su cui c'è il flag "Responsabile" poi gli altri, seguento l'ordinamento specificato sopra.


Definizioni

Operatore di anagrafica

Quando in openwork® si crea un nuovo operatore viene creata la sua scheda anagrafica; l'operatore non è ancora in grado di compiere delle azioni nel sistema se non viene inserito nell'organigramma.

Operatore di organigramma

Ad un operatore definito in anagrafica si possono assegnare uno o più ruoli all'interno dell'organigramma. Questo si fa dallo strumento di disegno dell'organigramma nel BPM Tools (o richiamando apposite funzioni dei Web Services). Ogni volta che viene assegnato un ruolo ad un operatore viene creato un cosiddetto operatore di organigramma, che è contraddistinto da un proprio ID di organigramma. Da questo momento in poi l'operatore può fare il login nel sistema e compiere delle azioni (aprire documenti, eseguire attività).

Partecipante

Per partecipanti di una attività si intende tutti quelli che sono impostati dallo strumento di disegno dei processi. Questo si traduce in formule relative, cioè formule che contengono riferimenti indiretti all'organigramma e che il sistema esplicita al momento in cui servono.

CLib01 - partecipants

Partecipanti assoluti

Quando un'attività viene raggiunta dal flusso, cioè viene attivata, la formula dei partecipanti (relativa) viene risolta in formula assoluta, cioè una formula che contiene solo riferimenti a gruppi, uffici, ruoli ed utenti e memorizzata nell'attività. Questa formula viene poi usata per calcolare i partecipanti reali in ogni momento successivo in cui viene richiesto.

Partecipanti veri

Finchè l'attività rimane attiva, può servire in qualsiasi momento sapere quali sono gli operatori che effettivamente possono eseguirla. Per fare ciò viene utilizzata la formula dei partecipanti assoluti e tradotta in un elenco di soli operatori da organigramma, che sono i partecipanti veri. Questo meccanismo fa sì che se ci sono cambiamenti nel disegno dell'organigramma o nella definizione dei gruppi dopo l'attivazione di un'attività, la lista dei partecipanti è sempre aggiornata e permette anche una gestione flessibile dei carichi di lavoro, ad esempio cambiando opportunamente la definizione dei gruppi quando occorre.

Responsabile di processo (Process Owner)

Il responsabile di processo o process owner è un operatore che può richiedere un particolare tipo di lista delle attività che include tutte le attività da eseguire o completare dei processi di cui è owner. Per visualizzare da applicazione web tale lista delle attività occorre richiamare l'elenco delle attività con parametri listtype=400 e listsubtype=3 così come dettagliato nel paragrafo listtype - listsubtype - modelid. Inoltre il responsabile di processo può eseguire, completare o trasferire queste attività anche se non è partecipante delle stesse. Il responsabile di processo ha accesso in modifica alle istanze dei processi di cui è owner. E' possibile impostare il responsabile di processo nel pannello Autorizzazioni delle proprietà del modello di processo o direttamente da script nel modello di processo utilizzando il metodo SetAccessList della classe ProcessInstance.


Organization Manager

L'Organization Manager di openwork® è lo strumento atto alla creazione e alla gestione dell'organigramma aziendale, in particolare dell'organigramma funzionale relativo alla gestione dei processi che caratterizzano il flusso operativo e documentale.

Lo schema di riferimento non deve infatti necessariamente corrispondere all'assetto organizzativo reale dell'azienda, ma deve essere concepito in maniera tale da essere funzionale all'esecuzione dei processi ed all'accesso alla documentazione.

Si devono prevedere gerarchie e modalità di accesso alla documentazione differenziate a seconda delle aree organizzative, dei ruoli e delle attività che ogni operatore della piattaforma esplica nell'ambito dei processi. In altre parole, l'organigramma da configurarsi deve tenere conto essenzialmente del punto di vista del Business Manager, che, in fase di runtime di ogni processo, deve essere in grado di stabilire con precisione a quali ruoli, uffici, persone fisiche attiene una determinata attività e in che modo la documentazione coinvolta debba essere accessibile.

In quest'ottica, l'Organization Manager è impostato secondo le seguenti linee guida:

· Gerarchizzazione verticale dei ruoli aziendali. L'Organization Manager contempla essenzialmente rapporti di dipendenza gerarchica subordinativa (come, ad esempio, la relazione Responsabile-Dipendente) tra le diverse aree organizzative (uffici, divisioni, enti, etc.) e ruoli. Ciò consente una maggiore linearità nell'impostazione delle autorizzazioni d'accesso alla documentazione e nella definizione degli step processuali. Per la gestione di rapporti gerarchici coordinativi trasversali (come quelli esistenti tra i membri di uno Staff), è necessario utilizzare invece il Group Manager di openwork® oppure, come vedremo, una implementazione diretta nei processi di gruppi creati ad hoc in funzione delle esigenze;

· Divisione compartimentale delle aree organizzative. In conformità con l'organizzazione aziendale l'organigramma viene articolato in unità organizzative (Uffici, Divisioni ecc.) e ruoli diversi (Addetto, Responsabile ecc.) all'interno di ciascuna area secondo una precisa struttura ad albero.

· Distinzione tra ruoli e persone fisiche. openwork® Organization Manager distingue la persona fisica (anagrafica) degli operatori dal ruolo aziendale che essi esplicano. Ciò consente di associare più di un operatore allo stesso ruolo e di implementare modelli procedurali indipendenti dall'assetto reale dell'organico delle risorse. Allo stesso modo, l'accessibilità ai documenti non è legata alla persone fisiche ma ai ruoli ricoperti: ciò consente di gestire separatamente l'organigramma dal flusso processuale e documentale. All'installazione di openwork® viene creato un ruolo predefinito di amministratore di openwork® (con passwork ns) che consente di accedere senza alcuna restrizione a tutte le funzionalità esposte dalla piattaforma. Il ruolo di amministratore èriconosciuto attraverso una delle seguenti descrizioni, senza distinzione tra maiuscole e minuscole:

- amministratore di openwork®

- amministratore di openwork

- openwork administrator

- openwork® administrator

- system administrator

Possono esistere più ruoli di amministratore. Per ulteriori definizioni sugli operatori e partecipanti fare riferimento al paragrafo Definizioni.

· Individuazione dei responsabili. Per ciascuno dei ruoli o funzioni definiti è possibile stabilire se trattasi di responsabile oppure no all'interno di quella unità organizzativa. Tale impostazione permette di dare risposta, nella esecuzione dei processi, a situazioni del tipo “questa attività deve essere espletata dal capo di colui che ha inserito questo documento”.

· Gestione di funzioni speciali di default. Grazie alla struttura divisionale e subordinativa dell'Organization Manager, è possibile riferirsi nei modelli di processo e di documento a specifiche funzioni aziendali che caratterizzano il workflow in fase di runtime (p. es., Responsabile dell'operatore che ha avviato il processo ecc.): in letteratura tale caratteristica è chiamata routing delle attività in base a regole.

L'interfaccia grafica, particolarmente chiara e schematica, consente di modellare l'organigramma in maniera facile ed intuitiva. Nelle sezioni successive, vengono presentate le principali operazioni da compiere in fase di design.


Comandi di openwork® Organization Manager

Riportiamo un elenco dei comandi speciali che appaiono nella barra degli strumenti:

bpmtools43 - menutools

1. Nuova unità organizzativa.
2. Inserimento ruolo.
3. Inserimento operatore.
4. Nuovo operatore.
5. Collegamento tra unità organizzative.
6. Casella di testo
7. Seleziona tutto
8. Elimina gli elementi selezionati
9. Torna al foglio precedente
10. Torna al foglio principale
11. Allinea
12. Dimensiona


Definizione delle aree organizzative

La prima fase di creazione dell'organigramma consiste nella definizione delle aree organizzative e dei loro rapporti gerarchici.

Per aree organizzative si intendono le unità operative attinenti ad una determinata funzione.

Ribadiamo che è conveniente rappresentare la struttura organizzativa sulla base di requisiti funzionali all'espletamento delle attività del workflow (processi), anziché focalizzarsi sull'assetto reale dell'azienda. Ciò consente di ottimizzare l'esecuzione dei processi e di gestire più semplicemente le autorizzazioni d'accesso ai documenti, che possono appunto essere impostate per unità organizzativa.

Illustriamo come disegnare il diagramma delle aree organizzative attraverso una serie semplici screenshot:

1. Dal menu Organizzazione del Business Process Management Tools aprire lo strumento Organigramma: compare un piano di lavoro in cui è presente un primo riquadro del diagramma organigrafico. Sulla parte destra viene visualizzata una struttura ad albero che riassume in altra forma i dati.

Gli aggiornamenti dei due diagrammi vengono gestiti autonomamente dal software, pertanto è possibile operare indistintamente sull'uno o sull'altro diagramma.

I pulsanti di comando si trovano sulla barra in alto a sinistra.

bpmtools77 - startpage

nota

Nota

La figura corrisponde all'organigramma di default dell'installazione di openwork®.

La Ragione Sociale dell'azienda non può essere modificata: essa viene impostata una tantum al momento dell'installazione e dell'attivazione della licenza d'uso.

2. Cliccare sul primo pulsante indicato in figura: sul piano di lavoro è possibile tracciare un riquadro corrispondente ad una delle aree organizzative.

bpmtools130 -  organizationUnit

3. Ogni area aziendale (unità organizzativa) è caratterizzata dalla seguente maschera, che appare automaticamente in primo piano. Compilare la maschera in tutti i suoi campi, considerando che la Sigla è una chiave di classificazione univoca per le aree organizzative.

bpmtools110 -  organizationUnitForm

nota

Nota

Esistono due modalità grafiche di linking tra le aree organizzative, come viene indicato nella maschera di selezione che appare automaticamente. La scelta dell'una o dell'altra modalità è finalizzata solo ad ottenere maggiore chiarezza nel diagramma.

bpmtools102 -  linkFormat


Definizione ruoli e operatori

Illustriamo come inserire un nuovo ruolo ed un nuovo operatore all'interno di un'organigramma openwork attraverso una serie semplici screenshot:

1. Dal menu Organizzazione del Business Process Management Tools aprire lo strumento Organigramma: compare un piano di lavoro in cui è presente un primo riquadro del diagramma organigrafico. Sulla parte destra viene visualizzata una struttura ad albero che riassume in altra forma i dati. Gli aggiornamenti dei due diagrammi vengono gestiti autonomamente dal software, pertanto è possibile operare indistintamente sull'uno o sull'altro diagramma I pulsanti di comando si trovano sulla barra in alto a sinistra.
2. Per definire un nuovo ruolo cliccare sul secondo pulsante indicato in figura.

bpmtools154 - newRole

3. Specificare l'etichetta da assegnare al nuovo ruolo, ad esempio "Sviluppatore" e trascinare il ruolo sotto un'area organizzativa di proprio interesse come mostrato in figura.

bpmtools155 - dragRole

4. Per inserire un nuovo operatore cliccare sul quarto pulsante indicato in figura.

bpmtools156 - newOperator

5. Una nuova finestra permette di specificare la username utile ad accedere alla piattaforma openwork®, il nome, il cognome, la sigla ed il titolo dell'operatore che si desidera inserire come mostrato in figura.

cst12 - newoperator

attenzione

Attenzione

Al nuovo operatore creato sarà assegnata di default la password 'cambiami' se la lingua di default di openwork® è l'italiano, 'changeme' altrimenti. Per conoscere la lingua di default della piattaforma openwork® accedere dal menu Sistema del Business Process Management Tools alla voce Gestione localizzazioni. Una finestra mostra tutte le lingue disponibili, la lingua di default di openwork® è quella segnalata dall'apposita check box della colonna Default.
6. Il nuovo operatore creato risulta essere un operatore di anagrafica. Per renderlo operatore di organigramma occorre associare ad esso un ruolo. Per effettuare questa operazione cliccare sul terzo pulsante indicato in figura.

bpmtools157 - newRoleOperator

7. Selezionare dall'elenco degli operatori disponibili l'operatore di proprio interesse e trascinarlo sotto il ruolo per lui disegnato. Da questo momento in poi l'operatore può fare il login nel sistema e compiere delle azioni (aprire documenti, eseguire attività).


Classification Manager: Versioning del Titolario

Il Titolario, o Piano di classificazione, contiene tutti i modelli di documento e di processo necessari all'organizzazione.

In esso è possibile raggruppare e classificare ordinatamente tali modelli secondo le esigenze delle singole realtà, in modo tale da creare uno schema ad albero in cui ogni ramo racchiude una serie di voci.

bpmtools118 - classification

Durante la gestione, può essere necessario modificare il piano di classificazione poichè alcune voci devono essere classificate in un grado divisionale diverso, oppure non devono essere più utilizzate, oppure perché è necessario spostare interi rami.

Se, però, si desidera tenere traccia del Titolario prima delle modifiche, o comunque prima di una certa data, allora è necessario rendere obsoleto il ramo o la voce di classificazione in oggetto, e non eliminarli; questa operazione è necessaria anche quando non è possibile eliminare gli elementi.

Nel dettaglio di una voce di classificazione o di una cartella (grado divisionale), è presente una checkbox contrassegnata con l'etichetta "Non valido a partire da" che abilita o disabilita la corrispondente textbox in cui è possibile specificare la data oltre la quale la voce di classificazione (o l'intera cartella) è obsoleta: questo significa che da quel momento in poi non sarà più possibile creare documenti di quella tipologia. Nell'albero un elemento di questo tipo è distinguibile da una barra trasversale rossa, sia nell'interfaccia utente sia nell'interfaccia di amministrazione.

bpmtools16 - documentdetails

Rendere una voce di classificazione obsoleta o eliminarla dal Titolario sono due concetti differenti:

1. Eliminare una voce dal Titolario significa cancellarla fisicamente. L'eliminazione può essere fatta solo se non esiste nessun documento in essa classificato: quindi, se esistono dei documenti, essi vanno preventivamente eliminati. Non sempre però è possibile eliminare dei documenti: ad esempio non si possono eliminare dei documenti di protocollo se si adotta la protocollazione a norma CNIPA.

2. Rendere obsoleta una voce significa fissare la data oltre la quale non si potrà più utilizzare quella particolare voce per classificare i documenti, lasciando comunque nel sistema i documenti precedentemente classificati: questo significa che essi potranno essere usati in un qualsiasi momento. In questo caso, però, è possibile ripristinare la condizione iniziale rendendo nuovamente valido un modello: sarà sufficiente togliere il segno di spunta checkbox, in modo da eliminare la data di "obsolescenza". Quando un utente andrà a creare un documento non vedrà le voci non valide in quel momento.

nota

Nota

Rendere obsoleto un grado divisionale comporta l'obsolescenza di tutto il ramo

Se, però, si vuole ripristinare la condizione iniziale di un intero ramo, non è sufficiente rendere nuovamente valido il grado divisionale: lo stato dei modelli in esso classificati rimane inalterato, siano essi validi oppure no. Per modificarne lo stato bisognerà operare sui singoli modelli di documento.

Non è possibile rendere valido un documento obsoleto se prima non si è reso valido il grado divisionale in cui è classificato.

bpmtools96 -  obsoleteDocument

1. Esempio : Titolario completo

Questa funzionalità corrisponde alla voce "Tutti i documenti" nel menu del desktop standard di openwork® (o classificazione statica di tutti i documenti).

La chiamata al Web Server è la seguente:

var winSet = "status=yes, toolbar=no, menubar=no, location=no, scrollbars=no,

resizable=yes";

var URI = "classification.aspx?style=300";

var winName = "CLASSIFICATION" + rnd();

window.open(URI,winName,winSet);

bpmtools93 -  staticClassification

2. Esempio : Titolario valido al 1° gennaio 2007

Se si desidera sapere quale era il Titolario valido ad una certa data è necessario impostare un filtro sul campo termination, cioè il campo in cui è memorizzata la data di obsolescenza. In questo caso saranno selezionati tutti gli elementi per cui non è impostata la data di non validità oppure tale data è successiva a quella desiderata.

var winSet = "status=yes, toolbar=no, menubar=no,location=no, scrollbars=no, resizable=yes";

var LisrParameters = "<listparameters><filter>";

ListParameters += "<conditiongroup method=\"OR\"><condition field =\"termination\"        operator=\"gt\" value=\"2007-01-01\"/>";

ListParameters += "<condition field =\"termination\" operator=\"isnull\"/>";

ListParameters += "</conditiongroup></filter></listparameters>";

var URI="classification.aspx?style=300&listparameters=" +

encodeURIComponent(ListParameters);

var winName="CLASSIFICATION" + rnd();

window.open(URI,winName,winSet);

bpmtools92 -  obsoleteClassification

Si può notare che nella figura manca il grado divisionale "01 – Documenti di test - ramo 1" presente, invece, nella figura dell'esempio precedente.


Business Flow Designer

Il Business Flow Designer di openwork® è uno strumento grafico che consente di configurare, analizzare e testare il flusso di lavoro aziendale mediante una logica schematica che richiama la concreta struttura dei processi operativi.

Di seguito sono elencate le sezioni principali relative al Business Flow Designer:

· Introduzione
· Nozioni preliminari
· Creazione e personalizzazione di uno schema di processo
· Proprietà di un modello di processo
· Tipologie di attività nell'ambito di un processo
· Oggetti di scelta condizionale
· Controllo del flusso operativo
· Impostazione dei partecipanti ad un'attività
· Scripting e condizioni di completamento
· Generazione e controllo delle istanze in corso
· Debug e controllo delle istanze in corso
· Ottimizzazione delle risorse e gestione dell'errore


Introduzione

Il Business Flow Designer di openwork®, sulla base dei principi classici dell'Analisi Organizzativa, consente di configurare ogni processo aziendale sotto forma di flow-chart, specificando in maniera univoca e categorica i ruoli aziendali coinvolti e la documentazione associata all'espletamento di ogni singola attività; ciò assicura massima chiarezza, correttezza e tempestività nell'esecuzione delle procedure.

Le utilità di controllo di openwork® Business Flow Designer consentono inoltre di verificare in corso d'opera lo stato dei processi in esecuzione, gestendo in maniera flessibile eventuali situazioni di deroga o emergenza. In ogni momento è possibile appurare chi ha in carico una determinata attività da svolgere e da quanto tempo, imponendo eventualmente delle scadenze ed emettendo delle notifiche sullo stato dell'attività.

Il Business Flow Designer è caratterizzato dalle seguenti proprietà:

· Logica activity-based. In conformità con i modelli tradizionali dell'Analisi Organizzativa, lo strumento configura i diversi modelli di processo come una sequenza di attività logiche (automatiche e non) correlate a guisa di flow-chart. Ciò consente una maggiore linearità nel design dei processi, facilitando d'altro canto le fasi implementative di Business Re-engineering.

· Gestione del workflow associata al flusso documentale. Ogni processo può essere avviato dalla creazione di uno o più documenti specifici; allo stesso modo, ogni attività all'interno dello schema di processo agisce in termini di elaborazione, revisione, notifica etc. sulla documentazione in circolo nel corso di tutto il suo ciclo di vita.

· Gestione del workflow associata all'organigramma e alle autorizzazioni. Ogni attività definita all'interno di un diagramma di workflow viene eseguita automaticamente o associata ad uno o più operatori censiti nell'organigramma di openwork®. Ciò permette di definire univocamente i ruoli, i task, le tempistiche e le responsabilità che attengono alle diverse fasi procedurali del flusso operativo, impedendone l'arenarsi per questioni di ambiguità o errori procedurali.

· Indipendenza delle istanze dai modelli. openwork® Business Flow Designer processa separatamente l'esecuzione di un processo (istanza) dai modelli su cui essa si basa. Ogni istanza può essere modificata in run time, ovvero in corso di esecuzione delle attività che la compongono, senza che il modello cui essa s'ispira venga affatto alterato. Questa caratteristica permette di gestire agevolmente ed in maniera flessibile le emergenze e le eccezioni procedurali.

· Programmabilità e design. I tools che costituiscono il Business Flow Designer consentono di disegnare diagrammi di processo in maniera facile ed intuitiva, utilizzando strumenti grafici d'immediata accessibilità. La presenza di schemi di default preimpostati, che riproducono le attività aziendali più comuni, accelera notevolmente i tempi di design. Tuttavia, ogni attività può inoltre essere caratterizzata in maniera del tutto specifica mediante inserti di script prima e dopo l'esecuzione e/o il completamento.

· Controllo e debugging real - time. Il flusso operativo di istanze attive può essere verificato passo passo, rilevando in ogni momento lo stato delle attività in corso, gli operatori coinvolti nell'esecuzione e le tempistiche impiegate. Eventuali errori implementativi di un modello o di un'istanza possono poi essere corretti mediante appositi strumenti di debug on-line.


Nozioni preliminari

Illustriamo innanzitutto la logica da adottarsi nel design di un processo mediante l'openwork® Business Flow Designer, definendo un'adeguata terminologia specifica attraverso una serie di principi chiave.

1. Distinzione modello-istanza. Come si è detto, la logica di openwork® distingue nettamente tra i modelli di processo, che vengono definiti in fase di design-time, ed i processi in esecuzione (run-time), che vengono denominati istanze. Ogni istanza viene configurata sulla base di un modello di processo, ma, una volta avviata, essa ha un ciclo di vita del tutto indipendente. Accedendo alla modalità di editing è anzi possibile modificare le impostazioni di un'istanza senza alterarne il modello corrispondente.

2. Impostazione activity-based. I modelli di processo e le istanze si articolano in una sequenza logica ordinata di attività collegate. All'interno del flow-chart di processo, ogni attività è rappresentata da un riquadro (nodo) e ogni collegamento è raffigurato da un simbolo di giunzione (link); ad ogni nodo e ad ogni link è associato un numero identificativo (ID). Il primo e l'ultimo nodo che vengono eseguiti sono rispettivamente un nodo d'inizio (reimpostato dal sistema) e un nodo di fine.

bpmtools75 - signdocument

Esistono principalmente due macrocategorie cui i nodi appartengono, a seconda che l'attività da eseguirsi coinvolga l'intervento di un operatore o venga processata autonomamente dal sistema. Si parla rispettivamente di:

· attività in carico ad un partecipante. Si tratta di attività la cui esecuzione è subordinata all'intervento di un operatore del sistema, che deve essere dichiarato utilizzando il menu contestuale apposito. Una volta indicato un partecipante, appare sul riquadro corrispondente l'icona Partecipante;

bpmtools50 - partecipants

· attività di automazione pura. Esse vengono processate in maniera autonoma dal sistema a seconda dei dati del flusso operativo e documentale. Tipicamente prevedono l'esecuzione di uno script (condizione di completamento o script dopo il completamento) impostato in design-time, che viene contrassegnato dall'icona Script.

bpmtools70 - scriptaftercompletion

Per quanto concerne i link, essi possono essere:

· attivi o inattivi in fase di design-time. I link inattivi, cioè quelli in cui a priori non è previsto il transito di flusso, sono contrassegnati da un cerchietto bianco;

bpmtools38 - linkoff

· attivati o disattivati in fase di run-time. I link in cui è impedito il transito del workflow sono contrassegnati da un cerchietto nero.

bpmtools39 - linkoffonruntime

3. Status di un'attività. In corso di run-time di un'istanza procedurale, un'attività si può trovare in uno dei seguenti status:

· in attesa di attivazione: il flusso di lavoro non ha ancora interessato l'attività;
· attivata: il flusso di lavoro è giunto al nodo corrispondente;
· prenotata (per le attività con Partecipante): uno degli operatori coinvolti dall'attività ha preso in carico la stessa ma non ha ancora compiuto le operazioni richieste per l'esecuzione.
· eseguita: nel caso di attività con Partecipante, almeno uno degli operatori coinvolti ha esaminato l'attività ma non ha eseguito (se non parzialmente) le operazioni richieste perché il workflow possa procedere. L'attività rimane in carico dell'operatore stesso e deve essere completata. Nel caso di attività automatiche, tale status indica che le istruzioni impostate da script sono state processate.
· completata: almeno uno dei partecipanti ha compiuto tutte le operazioni necessarie per l'espletamento dell'attività, ovvero, nel caso di attività di pura automazione, è stato eseguito lo script di completamento. Affinché il flusso operativo possa procedere, è necessario che si verifichi una condizione di completamento, che può essere implicita (settata per default), esplicita (introdotta dall'utente mediante scripting) o esterna (l'avvenuto completamento viene dichiarato da un operatore). Le condizioni di completamento esplicite vengono indicate dall'icona Impostazione manuale: lo script attinente alla condizione viene rieseguito finché essa non è soddisfatta.

bpmtools42 - manualcondition

4.Eseguibilità di un'attività. Le attività che vengono disegnate in un diagramma di workflow si distinguono anche in base al fatto che la loro esecuzione in corso d'istanza sia tassativa o meno. Esistono pertanto:

· attività obbligatorie. Esse vengono necessariamente processate dal sistema nel corso dell'esecuzione di un'istanza. Il workflow si arresta sull'attività finché essa non viene completata (dall'operatore o automaticamente a seconda dello script di completamento).

· attività saltabili. Si tratta di attività subordinate all'intervento di un operatore la cui esecuzione risulta accessoria ai fini dello svolgimento del processo. Per dichiarare saltabile un'attività è necessario selezionare la voce corrispondente dal menu contestuale che appare cliccando sul tasto destro del mouse dopo essersi riportati al nodo corrispondente all'attività stessa. Il simbolo di linking entrante in un'attività saltabile viene contrassegnato con una freccia vuota.

bpmtools33 - jumpactivity

nota

Nota

L'esecuzione di un'attività saltabile all'interno di un'istanza di processo dipende, come si è detto, dalla scelta dell'operatore coinvolto. Infatti, quando quest'ultimo troverà la voce corrispondente all'attività suddetta nella propria agenda delle attività da iniziare, potrà scegliere tra l'opzione Esegui e l'opzione Salta. Nel primo caso, l'attività verrà appunto eseguita: altrimenti, il sistema processerà automaticamente l'eventuale condizione di completamento dell'attività e, qualora questa sia soddisfatta, farà procedere il flusso operativo.

bpmtools03 - activitylist


Creazione e personalizzazione di uno schema di processo

Elenchiamo di seguito la modalità con la quale è possibile disegnare uno schema di processo attraverso l'utilizzo del Business Flow Designer:

1. Selezionare dal menu Dati e Documenti la voce Piano di classificazione (Titolario d'archivio)
2. Per predisporre un nuovo elemento all'interno di un folder d'archivio trascinare sul piano di lavoro la voce Nuovo mediante drag&drop.

bpmtools47 - newelement

3. Selezionare l'opzione Modello di processo nella maschera che viene visualizzata caratterizzando gli attributi del nuovo elemento.

bpmtools59 - processmanagerda

4. Confermando, si visualizza una nuova icona indicante la presenza di un nuovo modello di processo.

bpmtools62 - rdaclassification

nota

Nota

La cornice intorno all'icona di modello di processo cambia a seconda dello stato del modello:

· se è rossa indica che il modello non è mai stato pubblicato;
· se è blu indica che esistono due versioni differenti del modello, cioè una copia di lavoro (salvata) ed una copia pubblicata;
· se è verde indica che il modello è stato pubblicato con successo nella versione in cui appare.

5. Selezionando il Dettaglio del modello (dal menu contestuale o cliccando sull‘apposito comando), si apre la finestra principale del Business Flow Designer.

6. È ora possibile tracciare lo schema processuale voluto. I nodi rappresentanti le attività vengono disegnati cliccando sul pulsante corrispondente nella barra di design e tracciandoli semplicemente;le relazioni di interdipendenza tra essi si ottengono cliccando sul pulsante di linking e posizionandosi ordinatamente sul nodo antecedente e sul nodo successivo con il puntatore è possibile infatti tracciare un segno di correlazione tra due nodi (link).

bpmtools37 - linking

nota

Nota

Qualora sia necessario introdurre nuovi nodi all'interno del diagramma tracciato, è possibile modificare il nodo d'origine e/o destinazione di ciascun link: a tale scopo, è sufficiente selezionare il simbolo di correlazione e scegliere l'opzione corrispondente dal menu contestuale che si ottiene cliccando sul tasto destro del mouse. Effettuata la selezione, si può procedere a ridisegnare il link.

bpmtools35 - linkchangedestination

bpmtools36 - linkchangedestinationstep2

nota

Nota

Per visualizzare gli identificativi (ID) delle attività è dei link che compaiono in uno schema di processo, occorre operare come segue.

· ID attività: selezionare l'attività corrispondente è cliccare sul tasto destro del mouse: appare un menu contestuale in cui è presente la voce Mostra identificativo. Scegliendo questa opzione, viene visualizzata un'etichetta numerica permanente accanto al riquadro dell'attività in esame.

bpmtools84 - viewid

· ID link: posizionare il puntatore del mouse sul link in oggetto: appare un'indicazione temporanea che specifica l'ID numerico della correlazione.

bpmtools108 -  link

nota

Nota

bpmtools11 - undoredo

Nel caso in cui si voglia ristabilire lo stato precedente all’ ultima azione compiuta è possibile farlo attraverso il tasto Undo. Le modifiche che è possibile ristabilire riguardano le proprietà delle attività, grafiche o logiche. Tra quelle grafiche è possibile ristabilire quelle relative a posizione, forma e colore o quelle effettuate in blocco, come gli allineamenti. Sono anche gestite le proprietà logiche, ottenibili mediante il menù contestuale delle attività (tasto destro sull’attività). Tra queste è possibile ristabilire lo stato dei partecipanti, dei documenti assegnanti, e degli script che sono stati salvati. Il Redo permette di ristabilire le modifiche che sono state effettuate sino all’ultimo Undo, come pure l’Undo permette di ristabilire le modifiche avvenute sino all’ultimo Redo. Per quanto riguarda gli script, solo il salvataggio determina la modifica dello stato dell’attività, per cui sarà possibile ristabilire solo script intermedi salvati. Gli script non salvati, sono recuperabili dalla interfaccia di script, ma solo per le modifiche avvenute quando questa è attiva e non si è effettuato il salvataggio. In ogni modo, dopo aver chiuso il piano di lavoro del processo, non sarà più possibile ristabilire le modifiche non salvate come processo (da non confondere con i precedenti salvataggi degli script, che cambiamo solo lo stato dell’ attività ma che non sono memorizzati sino al salvataggio dell’intero processo).

nota

Nota

Mediante l'utilizzo degli appositi pulsanti sulla barra dei comandi speciali, è possibile esportare o importare da file uno schema di processo preimpostato (file wfd). Un comando apposito permette inoltre di disporre di una copia grafica del modello.

bpmtools32 - import

nota

Nota

Qualora il Workflow Designer di openwork® rilevi errori o imprecisioni in fase di pubblicazione, è possibile ottenere un'analisi dettagliata dei problemi riscontrati cliccando sull’apposito pulsante della barra dei comandi speciali.

bpmtools20 - erroranalyzerbutton

bpmtools19 - erroranalyzer

nota

Nota

È possibile inoltre personalizzare l’aspetto grafico di tutti gli oggetti che compongono un diagramma di flusso operativo.

Per personalizzare il layout di un elemento (nodo o link) è sufficiente selezionare dal menu contestuale dell’oggetto la voce Impostazioni grafiche. Viene così visualizzata la seguente finestra di riassunto delle proprietà grafiche.

NODI

bpmtools29 - graphicdetails

Tre pulsanti della barra dei comandi speciali consentono poi di regolare la visualizzazione della griglia di riferimento e l’allineamento degli elementi su di essa.

bpmtools30 - grid

Ecco un esempio di diagramma di workflow personalizzato.

bpmtools85 - workflowpersonalization

Per variare la visualizzazione di ogni attività, si possono infine utilizzare le altre voci del menu contestuale.

bpmtools48 - onfirstlayer

Di particolare importanza è l’opzione Mostra identificativo: essa consente di visualizzare l’ID numerico con cui il sistema identifica ogni singolo nodo all’interno dello schema processuale.


Proprietà di un modello di processo

Come per tutti gli altri strumenti di BPM Tools di openwork®, anche per il Business Flow Designer è prevista una maschera riassuntiva che sintetizza le proprietà dei modelli di processo configurati: essa consente di gestirne non solo l’accessibilità e modificabilità ma anche le modalità di avvio ed esecuzione. Nel seguito, ne illustriamo le proprietà.

1. Accedere alla maschera delle proprietà di un modello di processo tracciato secondo quanto illustrato nella sezione precedente. A tale scopo, dalla finestra di Dettaglio, cliccare sul pulsante delle Proprietà mostrato in figura

bpmtools45 - modelproperty

2. Ecco come si presenta la maschera delle Proprietà del Modello.

bpmtools74 - showmodelproperty

nota

Nota

Si notino due voci di primaria importanza all’interno del menu Caratteristiche generali, che sono state evidenziate nella figura precedente.

1. L’Identificativo (ID) è il codice univoco che identifica il modello di processo creato.
2. Il check-box Istanza unica specifica se il modello di processo è ad istanza unica ovvero se da esso è possibile eseguire al massimo una sola istanza per volta; il check-box Avviabile manualmente invece, consente, di prevedere l’avvio manuale del processo da parte di un operatore autorizzato. Quest’ultima modalità risulta particolarmente indicata per i processi che non sono legati ad alcun flusso documentale.

La maschera delle Proprietà del Modello si articola nelle seguenti sezioni:

· Caratteristiche generali. Riporta gli identificativi e le proprietà di stato del processo.
· Durata prevista. Indica la durata tipica dell’esecuzione di un’istanza.
· Sottoprocesso. Specifica se le istanze processuali possano essere attivate in dipendenza ad altre istanze generate sulla base di altri modelli di processo.
· Avvio. Consente di visualizzare un determinato messaggio all’avvio di ogni istanza e/o di associare all’istanza un documento di una tipologia specifica del titolario.
· Autorizzazioni. Riassume le autorizzazioni alla visualizzazione e/o modifica del modello di processo e delle istanze da esso generate. Per default, l’unico utente autorizzato a qualunque intervento è l’utente Amministratore: utilizzando lo strumento di browsing apposito, è possibile settare un profilo differente per le autorizzazioni. La sezione Responsabili di processo consente di definire una lista di elementi organizzativi che rappresentano i responsabili di processo (process owner) che hanno accesso in modifica all'istanza di processo.


Tipologie di attività nell'ambito di un processo

Di seguito verranno illustrate tutte le attività di default impostabili in uno schema procedurale mediante il Business Flow Designer di openwork®. Si tratta di un'ampia gamma di task tipici che ricorrono nella gestione del flusso documentale e che costituiscono il nucleo del flusso operativo aziendale. Naturalmente, in conformità con la flessibilità che contraddistingue il sistema, è possibile personalizzare gli attributi di ciascuna attività di default sulla base delle necessità reali di gestione e addirittura creare nuove tipologie a partire da una struttura di attività generica.

Innanzitutto, osserviamo che è possibile raggruppare le attività presenti nella barra di design in sei macrocategorie:

1. Creazione di nuovi oggetti.
2. Elaborazione di oggetti esistenti.
3. Oggetti di scelta condizionale.
4. Attività generiche.
5. Controllo del flusso.
6. Notifica.

bpmtools04 - activitytype

Tale classificazione ha un significato meramente funzionale. All'interno della stessa categoria, per contro, le specifiche richieste da ciascuna tipologia (Partecipanti, Documenti associati) dipendono dalla logica intrinseca del task che l’attività esplica.

Dopo aver disegnato un'attività di qualsiasi tipo nel modello di processo è possibile aprire, cliccando col tasto destro su di essa, un menù contestuale con tutte le impostazioni che si possono definire per l'attività. Nel dettaglio la voce di menù:

· Descrizione attività: consente di modificare la descrizione testuale che rappresenta l'attività selezionata.
· Istruzioni operative: consente di impostare le istruzioni operative che saranno visualizzate all'atto dell'esecuzione dell'attività.
· Classe: consente di associare l'attività corrente ad una classe di attività esistente o di definire una nuova classe di attività. La classe viene creata all'interno dell'xml che, lato client, identifica l'attività. Per cui questa proprietà è utile ad individuare lato client (tramite xml) un'attività precedentemente definita lato server da disegno di processo. Un esempio di come è possibile sfruttare tale proprietà è la possibilità di creare filtri sulla lista delle attività che consentono di visualizzare lato client solo le attività che appartengono ad una classe specifica.

Per maggiore schematicità, forniamo una tabella che riassume le proprietà di tutti i comandi relativi alle attività di default, riservandoci di illustrare più dettagliatamente nel seguito l'utilizzo di nodi delle categorie 3 e 5. Con particolare attenzione si consideri l'ultima colonna: essa indica le specifiche (necessarie e/o eventuali) che contraddistinguono il tipo di attività in esame e che devono essere impostate mediante le voci corrispondenti del menu contestuale. Le specifiche obbligatorie sono indicate in grassetto.

ATTIVITA'

ICONA DI DEFAULT

CATEGORIA

FUNZIONALITA'

DA IMPOSTARE

Nuovo documento in entrata

bpmtools115 - newEntryDocument

Creazione nuovi oggetti

Creazione di un documento in entrata sulla base di un modello di protocollo in entrata presente nel piano di classificazione
· Scelta del modello
· Archiviabilità
· Numerabilità
· Impostazione dei partecipanti

Nuovo documento

in uscita

bpmtools116 - newOutDocument

Creazione nuovi oggetti

Creazione di un documento in uscita sulla base di un modello di protocollo in uscita presente nel piano di classificazione
· Scelta del modello
· Archiviabilità
· Numerabilità
· Impostazione dei partecipanti

Nuovo documento interno

bpmtools132 - newDocument

Creazione nuovi oggetti

Creazione di un documento in entrata sulla base di un modello di documento presente nel piano di classificazione
· Scelta del modello
· Archiviabilità
· Numerabilità
· Impostazione dei partecipanti

Creazione revisione documento

bpmtools133 - newRevision

Creazione nuovi oggetti

Creazione di una revisione del documento corrente (che viene classificata come un nuovo documento a sé stante)
· Scelta del documento associato all'attività
· Archiviabilità
· Numerabilità
· Impostazione dei partecipanti

Apertura fascicolo

bpmtools134 - openF

Creazione nuovi oggetti

Creazione di un fascicolo che includa documenti in circolo nell'istanza di processo in corso
· Scelta del modello
· Impostazione dei partecipanti

Creazione nuovo fascicolo

bpmtools135 - newF

Creazione nuovi oggetti

Creazione di un fascicolo (tipo fasc) che includa documenti anche esterni all'istanza di processo in corso

· Scelta del modello
· Scelta dei documenti da raggruppare nel fascicolo

Elaborazione documento

bpmtools136 - editDocument

Elaborazione oggetti esistenti

Visualizzazione e/o modifica di un documento in circolo
· Scelta del documento associato all'attività
· Accessibilità in lettura/scrittura
· Numerabilità
· Archiviabilità
· Impostazione dei partecipanti

Protocollazione/ elaborazione documento

bpmtools137 - numerate

Elaborazione oggetti esistenti

Modifica o impostazione della numerazione di un documento in circolo

· Scelta del documento associato all'attività
· Accessibilità in lettura/scrittura
· Archiviabilità
· Impostazione dei partecipanti

Firma documento

bpmtools138 - sign

Elaborazione oggetti esistenti

Vidima del documento in circolo (apposizione di firma)
· Scelta del documento associato all'attività
· Numerabilità
· Accessibilità in lettura/scrittura
· Archiviabilità
· Selezione della firma
· Impostazione dei partecipanti

Archiviazione documento

bpmtools139 - archivate

Elaborazione oggetti esistenti

Archiviazione del documento in circolo (inibizione di qualunque modifica)
· Scelta del documento associato all'attività
· Numerabilità
· Accesso in lettura/scrittura
· Impostazione dei partecipanti

Spedizione documento

bpmtools140 - sendDocument

Elaborazione oggetti esistenti

Apertura del documento in circolo allo scopo di effettuarne la spedizione
· Scelta del documento associato all'attività
· Accessibilità in lettura/scrittura
· Impostazione dei partecipanti

Elaborazione fascicolo corrente

bpmtools141 - edtiF

Elaborazione oggetti esistenti

Visualizzazione e/o modifica di un fascicolo di documenti
· Impostazione dei partecipanti

Archiviazione fascicolo

bpmtools142 - archivateF

Elaborazione oggetti esistenti

Archiviazione di un fascicolo di documenti
· Selezione del fascicolo da archiviare
· Impostazione dei partecipanti

Fascicolazione

bpmtools143 - fDocument

Elaborazione oggetti esistenti

Inserimento del documento in circolo in un fascicolo preesistente
· Selezione del fascicolo in cui inserire il documento
· Scelta del documento associato all‘attività
· impostazione dei partecipanti

Decisione manuale

bpmtools61 - questiondescription

Oggetti di scelta condizionale

Imposizione di una condizione che regoli il flusso su una o più alternative sulla base dell'esito di un'interrogazione dell'operatore.

· Impostazione del valore della selezione
· Impostazione della logica condizionale sui link uscenti
· Impostazione dei partecipanti

Decisione automatica

bpmtools72 - selectiondescription

Oggetti di scelta condizionale

Imposizione di una condizione che regoli il flusso su una o più alternative sulla base di una decisione automatica
· Impostazione del valore della selezione
· Impostazione della logica condizionale sui link uscenti

Decisione automatica multipla

bpmtools46 - multiselectiondescription

Oggetti di scelta condizionale

Imposizione di una condizione che regoli il flusso su tutte le alternative sulla base di una decisione automatica
· Impostazione del valore della selezione
· Impostazione della logica condizionale sui link uscenti

Attività generica

bpmtools02 - activitydescription

Attività generica

Qualunque tipo di attività automatica e/o con partecipante tipicamente regolata da script (attività custom)
· Impostazione della condizione di completamento/script dopo il completamento (attività automatiche)
· Impostazione dei partecipanti (attività con partecipante)
· Scelta del documento associato

Nodo AND

bpmtools05 - and

Controllo del flusso

Punto di convergenza di più rami di flusso in entrata o uscita. Il flusso procede quando tutti i rami in entrata sono attivi

Nodo OR

bpmtools49 - or

Controllo del flusso

Punto di convergenza di più rami di flusso in entrata o uscita. Il flusso procede quando almeno uno dei rami in entrata è attivo

Nodo XOR

bpmtools86 - xor

Controllo del flusso

Punto di convergenza di più rami di flusso in entrata o uscita. Il flusso procede quando uno ed uno solo dei rami in entrata è attivo

Nodo sottoprocesso

bpmtools144 - subProcess

Controllo del flusso

Attivazione di un'istanza di processo subordinata all'istanza corrente
· Selezione del modello di sottoprocesso da attivarsi
· Scelta del documento da trasmettere al sottoprocesso
· Opzione di attesa della fine del sottoprocesso

Nodo di nuovo sottoprocesso

bpmtools145 - newSubprocess

Controllo del flusso

Attivazione di un'istanza di un processo indipendenete
· Selezione del modello di sottoprocesso da attivarsi
· Scelta del documento da trasmettere al sottoprocesso

Nodo di controllo

bpmtools146 - controlNode

Controllo del flusso

(Da associarsi ad un contatore) Nodo di riferimento per la valutazione del transito del flusso

Contatore

bpmtools147 - counter

Controllo del flusso

(da associarsi ad un nodo di controllo di riferimento). Attivazione di rami di processi (connessi con il contatore) a seguito del passaggio ripetuto a un determinato nodo di controllo.
· Associazione ad un nodo di controllo di riferimento
· Impostazione della soglia di passaggio (numero di passaggi dal nodo di controllo di riferimento che precedono l'attivazione dei rami connessi con il contatore)

Timer

bpmtools148 - timer

Controllo del flusso

Attivazione di rami di processo (connessi con il timer stesso) a seguito del trascorre di un determinato lasso di tempo a partire da un evento fissato
· Impostazione della durata del periodo precedente all'attivazione dei rami connessi con il timer
· Impostazione dell'attivazione del computo temporale

Nodo di attivazione

bpmtools149 - linkOn

Controllo del flusso

(Da associarsi ad un elemento del diagramma) Attivazione di un elemento del diagramma (timer, contatore, link)
· Selezione dell'elemento da attivarsi

Nodo di disattivazione

bpmtools150 - linkOff

Controllo del flusso

(Da associarsi ad un elemento del diagramma) Disattivazione di un elemento del diagramma (timer, contatore, link)
· Selezione dell'elemento da disattivarsi

Fine

bpmtools18 - end

Controllo del flusso

Conclusione di un'istanza di processo

Notifica

bpmtools44 - message

Controllo del flusso

Invio di e - mail di notifica

Casella di testo

bpmtools151 - newLabel

Controllo del flusso

Visualizzazione di un commento testuale

In aggiunta alle attività di default è disponibile lo strumento lane con il compito specifico di organizzare e classificare gli oggetti appartenenti ad un modello di processo. Nel dettaglio si distinguono:

STRUMENTO

ICONA DI DEFAULT

CATEGORIA

FUNZIONALITA'

DA IMPOSTARE

Lane verticale

bpmtools83 - verticallane

Organizzazione e classificazione di oggetti esistenti

Creazione di una lane verticale nel modello del processo. Una lane serve ad organizzare e categorizzare oggetti esistenti. Il significato della lane è scelto da colui che disegna il modello di processo;spesso le lane identificano ruoli (per esempio manager, associate) o sistemi (per esempio l'impresa, l'applicazione). All'interno della lane vanno inseriti tutti gli oggetti del processo che coinvolgono la funzione che la lane rappresenta (ruoli, sistemi, dipartimenti, etc.).
· Descrizione della lane

Lane orizzontale

bpmtools31 - horizontallane

Organizzazione e classificazione di oggetti esistenti

Creazione di una lane orizzontale nel modello del processo. Una lane serve ad organizzare e categorizzare oggetti esistenti. Il significato della lane è scelto da colui che disegna il modello di processo;spesso le lane identificano ruoli (per esempio manager, associate) o sistemi (per esempio l'impresa, l'applicazione). All'interno della lane vanno inseriti tutti gli oggetti del processo che coinvolgono la funzione che la lane rappresenta (ruoli, sistemi, dipartimenti, etc.).
· Descrizione della lane


Oggetti di scelta condizionale

Gli oggetti di scelta condizionale corrispondono, in fase di esecuzione di un'istanza, ad attività che smistano il flusso operativo lungo percorsi differenti sulla base di condizioni definite nell'istanza stessa.

Come descritto in precedenza, il Business Flow Designer di openwork® prevede tre tipi di oggetti di scelta condizionale, due automatici e uno subordinato alla scelta di un operatore. Analizziamo come si configurano i seguenti nodi di processo.

Decisione manuale

1. Disegnare l'attività di decisione manuale con domanda all'operatore mediante lo strumento apposito Decisione manuale. Impostare il contenuto della domanda utilizzando il menu contestuale alla voce Descrizione Domanda. Tale descrizione corrisponde a quanto verrà visualizzato dall'operatore durante l'esecuzione di un'istanza.

2. Impostare i partecipanti dell'attività

3. Tracciare i rami uscenti dall'attività. Su ciascuno di essi viene richiesto di indicare un'alternativa di risposta alla domanda prevista: l'elenco delle alternative verrà visualizzato dagli operatori coinvolti nel corso dell'esecuzione di un'istanza in contestualmente con la domanda.

4. Ecco ciò che l'operatore visualizzerà da browser. A seconda dell'opzione indicata, il workflow procederà sull'una o sull'altra alternativa.

bpmtools08 - questiondescription

Decisione automatica

1. Disegnare l'attività di decisione automatica utilizzando l'apposito comando nella toolbar delle attività Decisione Automatica. Impostare la descrizione della selezione utilizzando il menu contestuale alla voce Descrizione selezione.
2. Tracciare i rami uscenti dall'attività di decisione automatica. Su ciascuno di essi impostare la descrizione della condizione di uscita corrispondente utilizzando il menu contestuale del link alla voce Descrizione della condizione.

3. Selezionare dal menu contestuale della decisione automatica la voce Valore della Selezione. Viene visualizzata una finestra di scripting.

bpmtools06 - automaticdecision

approfondimento

Approfondimento

Il valore della selezione è, per così dire, l'elemento discriminante su cui deve basarsi la scelta automatica.

Supponiamo, per esempio, che il flusso debba intraprendere percorsi differenti a seconda dell'ID del documento in circolo nell'attività corrente; imposteremo allora il seguente script:

bpmtools10 - scriptselection

4. Posizionandosi su ciascuno dei rami in uscita, selezionare la voce Condizione logica dal menu contestuale. Ancora viene visualizzata una finestra di scripting.

bpmtools07 - logiccondition

approfondimento

Approfondimento

La condizione logica identifica il valore della selezione che implica il transito del flusso sul ramo corrispondente.

Nella situazione dell'esempio precedente, se vogliamo che il flusso transiti per il ramo indicato dalla Condizione 1 qualora l'ID del documento in corso sia "7", imposteremo allora il seguente script

bpmtools09 - scriptcondition

5. Il sistema processerà automaticamente le condizioni e deciderà quale ramo di processo intraprendere.

Decisione automatica multipla

1. Disegnare l'attività di decisione automatica multipla utilizzando l'apposito comando nella toolbar delle attività Decisione Automatica multipla. Impostare la descrizione della selezione utilizzando il menu contestuale alla voce Descrizione selezione.
2. Tracciare i rami uscenti dall'attività di decisione automatica multipla. Su ciascuno di essi impostare la descrizione della condizione di uscita corrispondente utilizzando il menu contestuale del link alla voce Descrizione della condizione.
3. Selezionare dal menu contestuale della decisione automatica la voce Valore della Selezione. Viene visualizzata una finestra di scripting. Impostare il valore della selezione che corrisponde al discriminante della scelta automatica multipla.
4. Posizionandosi su ciascuno dei rami in uscita, selezionare la voce Condizione logica dal menu contestuale. Ancora viene visualizzata una finestra di scripting che consente di impostare la condizione logica del ramo selezionato.
5. Il sistema processerà automaticamente le condizioni e deciderà quali rami del processo intraprendere.


Controllo del flusso operativo

Com'è stato detto in precedenza, il Business Flow Designer di openwork® prevede una serie di nodi di diagramma che non corrispondono ad "attività" nel senso letterale del termine, ma la cui funzione reale è quella di monitorare il flusso nel corso dell'esecuzione. Esistono controlli temporali sulla durata (timer), controlli sull'iteratività (contatori), controlli sull'attivazione (semafori). Quanto segue illustra le diverse modalità di settaggio.

Settaggio di un timer

Un nodo di processo di tipo Timer si comporta come una sorgente di flusso che si origina successivamente ad un determinato evento (per es. l'avvio dell'istanza) dopo un lasso di tempo specificato. Il nodo si attiva (ovvero inizia il computo temporale) in concomitanza dell'evento indicato e, trascorso l'intervallo di tempo previsto, attiva a sua volta tutti i nodi ad esso collegati.

Tipicamente, pertanto, i timer vengono utilizzati per monitorare la durata dell'esecuzione di una o più attività e sono inseriti in rami paralleli al ramo principale di processo, in modo da gestire ritardi e/o scadenze. Elenchiamo di seguito le fasi operative che attengono al settaggio di un timer.

1. Tracciare un nodo Timer utilizzando il comando apposito della toolbar.

2. Selezionare la voce Impostazioni timer dal menu contestuale che appare cliccando sul tasto destro del mouse.

bpmtools82 - timersetting

3. Appare la maschera di settaggio del timer, in cui è necessario impostare il momento d'inizio del computo temporale e la durata che precede l'attivazione dei rami collegati al timer.

bpmtools80 - timerdelay

4. Se necessario (ovvero qualora selezionata l'opzione Data di attivazione del timer nella maschera sopra riportata), impostare il nodo di attivazione del timer (vedasi sezione successiva sui nodi di attivazione).

bpmtools79 - timeractivation

nota

Nota

Per attivare un timer (ovvero per dare inizio al computo temporale) all'avvio dell'istanza è sufficiente settare tale modalità dalla voce rispettiva (Attiva all'avvio del processo) del menu contestuale del nodo corrispondente.

Settaggio di nodi Contatore

Un nodo Contatore si comporta come una sorgente di flusso che si origina successivamente ad un numero fissato di iterazioni di transito da un nodo di controllo associato al contatore. Il nodo si attiva (ovvero inizia il computo delle iterazioni) in concomitanza con il primo passaggio dal nodo di controllo associato e, raggiunta la soglia di iterazioni stabilite, attiva a sua volta tutti i nodi ad esso collegati.

Tipicamente, pertanto, i contatori vengono utilizzati per monitorare la ricorrenza di una o più attività e sono inseriti in rami paralleli al ramo principale di processo. Ecco la procedura di design e settaggio di un contatore.

1. Tracciare, utilizzando l'apposito comando, un nodo di controllo in corrispondenza della posizione in cui si vuole rilevare l'iterazione di transito del flusso operativo.

bpmtools114 - controlNode

2. Disegnare un nodo Contatore. Viene visualizzata una finestra che richiede di specificare a quale nodo di controllo tale contatore debba essere associato; inoltre,è necessario indicare la soglia d'iterazione raggiunta la quale il nodo contatore deve attivare i nodi ad esso connessi.

bpmtools14 - count

3. A questo punto, tracciare i nodi connessi con il contatore: essi verranno eventualmente attivati qualora il flusso transiti dal nodo di controllo un numero di volte pari a quello indicato nel campo Soglia.

Impostazione di nodi di attivazione e disattivazione

I nodi di attivazione e disattivazione – contrassegnati dal simbolo di "semaforo" - servono a rendere attivi o disattivi alcuni oggetti del diagramma di workflow (ossia link, timer e contatori) nel corso dell'esecuzione di un'istanza. Non appena il flusso transita da un nodo del tipo suddetto, l'oggetto ad esso associato viene automaticamente attivato o disattivato.

Questa tipologia di nodi di controllo consente pertanto di gestire schemi processuali semistrutturati, ovvero modelli le cui istanze prevedono molteplici variazioni del flusso operativo a seconda di fattori definiti soltanto nel corso dell'istanza stessa (condizioni al contorno, scelte dell'operatore etc.) Diversamente dai nodi di controllo del flusso sinora analizzati, inoltre, i nodi di attivazione e disattivazione vengono tipicamente collocati all'interno di un ramo principale dello schema di processo.

Ecco come procedere operativamente per l'impostazione di un nodo di attivazione (o disattivazione).

1. Tracciare nel diagramma di workflow un nodo di attivazione (o disattivazione) mediante l'apposito comando della toolbar. Appare un messaggio che invita a selezionare l'elemento corrispondente da attivare (o disattivare).

bpmtools73 - selectobjecttoactivate

2. Effettuare la selezione richiesta (in figura, a titolo esemplificativo, riportiamo l'attivazione di un link). Si noti l'indicazione di match tra il nodo di attivazione ed il link, che vengono entrambi contrassegnati con la dicitura "link 2". Qualora sia verificata la Condizione 1, il flusso, transitando per il nodo di attivazione, renderà attivo il link indicato, consentendo il passaggio dalla seconda Attività generica, che, altrimenti, sarebbe inibito.

bpmtools81 - timerexample


Impostazione dei partecipanti ad un'attività

Come si è detto in precedenza, il Business Flow Designer di openwork® prevede la possibilità di disegnare attività automatiche, processate autonomamente dal sistema, e attività subordinate all'intervento di uno o più operatori che vengono definiti Partecipanti dell'attività. Ovviamente, in alcuni casi, la scelta di prevedere un partecipante o meno dipende intrinsecamente dalla natura dell'attività stessa. Alcune di esse, ad esempio, la Firma o l'Elaborazione di un documento, richiedono in maniera ovvia l'intervento di un operatore; altre, come l'Archiviazione di un documento, rientrano tendenzialmente nella categoria delle attività di pura automazione.

Quando ad un'attività viene assegnato almeno un Partecipante, il workflow si arresta sul nodo corrispondente sino a che essa non viene eseguita e completata dall'operatore che l'ha in carico. Per tali attività ha quindi senso la distinzione tra le fasi di:

· attivazione. Il flusso raggiunge il nodo e l'attività viene collocata nell'agenda delle attività da prenotare di ogni Partecipante - ovvero nell'elenco delle attività da iniziare, qualora vi sia un unico partecipante;
· prenotazione (qualora vi sia più di un Partecipante). Uno dei Partecipanti si prende carico dell'esecuzione dell'attività. La voce corrispondente sparisce dall'elenco delle attività da prenotare di tutti gli altri Partecipanti e viene collocata nell'agenda delle attività da iniziare a carico dell'operatore che ha effettuato la prenotazione;
· esecuzione. Uno dei Partecipanti prende visione del contenuto dell'attività e, eventualmente, porta a compimento almeno una parte dei task richiesti per l'espletamento della stessa. Dopo l'esecuzione, l'attività viene collocata nell'agenda delle attività da completarsi a carico dell'operatore che ha effettuato l'esecuzione. L'opzione di esecuzione di un'attività assegnata a più di un Partecipante ne implica automaticamente la prenotazione.
· completamento. I task richiesti dall'attività vengono integralmente espletati, in modo che la condizione di completamento sia soddisfatta. Il flusso procede in uscita dal nodo.

Vediamo quindi come impostare i Partecipanti di un'attività mediante il Business Flow Designer.

1. Selezionare l'attività in oggetto e scegliere la voce Partecipanti dal menu contestuale che appare cliccando sul tasto destro del mouse.

bpmtools52 - partecipantsselect

2. Appare una finestra composta da due sezioni: la prima, a sinistra, contiene un diagramma ad albero rappresentante i dati dell'organigramma; la seconda, invece, riporta l'elenco delle voci selezionate. Per scegliere un Partecipante è necessario cliccare due volte con il tasto sinistro del mouse sulla voce corrispondente dell'albero: questa viene così copiata sull'elenco di destra. Per deselezionare un Partecipante inserito, invece, cliccare due volte sulla voce in elenco con il tasto sinistro del mouse, oppure selezionare la voce e premere il tasto Canc.

bpmtools53 - partecipantsselection

nota

Nota

Per poter gestire processi semistrutturati in cui i Partecipanti di un'attività debbano essere impostati differentemente per ogni istanza, openwork® prevede una lista di Funzioni speciali che si riferiscono a partecipanti virtuali definiti a seconda del corso dell'istanza. Eccone l'elenco completo:

bpmtools76 - specialpartecipants

nota

Nota

Le voci Copia partecipante/Incolla partecipante del menu contestuale consentono di impostare gli stessi Partecipanti per attività diverse utilizzando la procedura usuale di copy&paste.

3. L'impostazione dei Partecipanti viene indicata sul nodo con un simbolo Partecipanti.

bpmtools51 - partecipantshead

approfondimento

Approfondimento

L'opzione del menu contestuale Replica l'attività per ogni partecipante fa sì che, assegnando più di un Partecipante, l'esecuzione dell'attività non venga presa in carico da un solo operatore ma da ciascun Partecipante. Più specificatamente, l'opzione indica che, in corso d'istanza, verranno generati più nodi identici (uno per Partecipante) corrispondenti alla medesima attività, che verranno collocati in parallelo nello schema dell'istanza. Ad esempio, nel caso di replica per quattro Partecipanti, si ha l'equivalenza delle due situazioni:

bpmtools64 - replicatepartecipants

Il diagramma così impostato prevede che l'attività venga assegnata in contemporanea a tutti e quattro i Partecipanti.Completata l'esecuzione da parte di uno di essi, il processo si conclude.

Qualora si voglia invece richiedere che il flusso prosegua soltanto a condizione che l'attività venga completata da parte di tutti i Partecipanti, è necessario predisporre un nodo AND in uscita dall'attività.

bpmtools63 - replicateandcomplete

Occorre prestare attenzione alla differenza tra la dinamica di replica dell’attività effettuata tramite flag Replica e assegna a ciascun partecipante e quanto accade replicando l’attività utilizzando il metodo Replicate della classe activity.

· Nel caso l’attività viene replicata utilizzando il flag Replica e assegna a ciascun partecipante, la creazione e attivazione delle Attività1, Attività2,...AttivitàN derivanti avviene al termine dell’evento di attivazione dell’attività di partenza. Quindi in presenza di uno script da eseguire dopo l’attivazione, tale script viene eseguito solo per l’attività padre e non per i suoi replicati (Attività1,.. AttivitàN). Come mostrato in figura che segue:

bpmtools65 - replicatepartecipantsbehavior

· Nel caso in cui l’attività viene replicata utilizzando il metodo replicate della classe activity le n-attività derivanti si comportano invece come in figura

bpmtools01 - actionreplicatebehavior


Scripting e condizioni di completamento

Al fine di poter assolvere in maniera ottimale le necessità di gestione del flusso operativo, le utilità di default del Business Flow Designer di openwork® possono essere ampiamente personalizzate mediante programmazione in VBScript. Ciò consente, ad esempio, di definire attività di pura automazione in cui il sistema esegua precise istruzioni sul flusso operativo, di impostare controlli ad hoc sul document flow e verifiche specifiche sul completamento dei diversi step. In questa sezione non ci proponiamo di illustrare tutti gli oggetti, metodi, proprietà ed attributi che attengono alla programmazione in VBScript di openwork®, ma vogliamo analizzare il significato e le modalità delle diverse impostazioni di scripting: per riferimenti tecnici rimandiamo invece al manuale Libreria di classi.

Osserviamo, innanzitutto, che ogni script deve essere impostato in corrispondenza di un'attività: più precisamente, è possibile settare l'esecuzione di script in concomitanza delle diverse fasi in cui un'attività specifica viene processata, in modo da regolarne opportunamente l'esito. In alcune fasi lo script può essere eseguito sia lato server sia lato client; in altre, invece, la scelta è naturalmente condizionata. Riassumiamo le informazioni attinenti a tale questione nel prospetto seguente.

Script eseguito | Esecuzione
Prima dell'esecuzione | Client
Dopo l'attivazione | Server
Dopo la prenotazione | Client e Server
Dopo l'esecuzione | Server
Dopo il completamento | Server

nota

Nota

Per le attività di pura automazione (ovvero prive di Partecipanti) l'unico stato rilevabile è il completamento. Di conseguenza è possibile impostare l'esecuzione di script soltanto in corrispondenza della condizione di completamento e dopo il completamento. Non solo, l'inserto di script in una delle due fasi risulta necessario perché il sistema possa rilevare e processare correttamente l'attività: nel caso in cui questo venga meno, non è neppure possibile pubblicare il modello di processo tracciato.

Ecco la procedura per impostare lo script in un modello di processo.

1. Selezionare nel diagramma di flusso l'attività su cui impostare lo script e visualizzare il menu contestuale che si apre cliccando sul tasto destro del mouse. Si osservino le voci: Script eseguito prima dell'esecuzione e Script eseguito dopo.

bpmtools66 - scriptafter

2. Scegliere la modalità di esecuzione desiderata. Viene visualizzata la finestra di scripting.

bpmtools67 - scriptafterbooking

nota

Nota

Lo Script Editor del Business Flow Designer di openwork® prevede le usuali funzioni di tipo cut, copy, paste nonché le funzioni standard di ricerca, bookmarking, stampa e salvataggio (file txt).

bpmtools68 - scriptafterbookingedit

3. La presenza di script in corrispondenza di un nodo viene segnalata dall'icona di Script.

bpmtools69 - scriptafterbookingend

Condizione di completamento di un'attività

Com'è stato precedentemente illustrato, il completamento di ogni attività – ovvero il raggiungimento dello status che consente il transito del workflow verso i rami di uscita – è valutato sulla base di una condizione di completamento. Tale condizione, si è detto, può essere:

· implicita. Il completamento dell'attività è determinato dalla corretta esecuzione dell'attività stessa secondo regole di default (per es. il completamento di un'attività di Firma è subordinato all'apposizione di una firma sul documento in circolo);

· esplicita. La condizione di completamento viene indicata dall'utente mediante un apposito script;

· esterna (per le attività con partecipante). Il completamento viene decretato dall'operatore che esegue l'attività mediante il tasto Completa della actionbar visualizzata da browser.

bpmtools12 - completeextern

Ovviamente, ciascuna eventualità esclude le altre due: in particolare, le condizioni di completamento esplicito risultano essere "più stringenti" delle altre, nel senso che prevalgono su qualunque condizione di tipo differente.

Mostriamo come impostare una condizione di completamento esplicito per un'attività:

1. Selezionare l'attività in oggetto e visualizzare l'opzione Condizione di completamento e quindi impostazione manuale dal menu contestuale cui si accede cliccando sul tasto destro del mouse.

bpmtools40 - manualcomplete

2. Selezionando come indicato, si apre una finestra di scripting di tipo Exit_ Condition.

bpmtools71 - scriptmanualexit

3. Confermata la condizione di completamento impostata, sul nodo dell'attività corrispondente viene indicata la presenza di tale condizione.

bpmtools41 - manualcompleteicon

approfondimento

Approfondimento

Qualora la condizione di completamento non venga soddisfatta, il transito del flusso si arresta, ma il sistema provvede a verificare ciclicamente la condizione finché essa non sia verificata. In particolare, tutto lo script contenuto nella finestra della condizione di completamento viene eventualmente indefinitivamente rieseguito. Pertanto, è consigliabile impostare in questa finestra solo lo script necessario per controllare la correttezza dell'esecuzione dall'attività stessa, collocando le altre specifiche nella sezione dello script eseguito dopo il completamento. Nel caso di Verifica della condizione di completamento solo dopo l'esecuzione da parte dell'operatore, il sistema non provvede a verificare ciclicamente la condizione, ma aspetta una esecuzione da parte dell'operatore.


Generazione e controllo delle istanze di processo

openwork® BPM Tools consente non solo di definire in design-time modelli di processo, ma è dotato di apposite utility che permettono di monitorare, gestire e modificare a run-time le istanze generate a partire dai suddetti modelli. La flessibilità del sistema fa sì che un'istanza, una volta originata, venga considerata come un oggetto a sé stante: ciò significa che tutte le modifiche che verranno ad essa apportate non avranno di fatto alcun effetto né sul modello di processo su cui l'istanza si basa né sulle altre istanze ispirate allo stesso modello.

Il monitoraggio dell'esecuzione delle istanze, inoltre, permette di verificare passo passo lo status di ciascuna attività all'interno di un processo, identificandone gli elementi caratteristici come i partecipanti effettivi, il tempo di esecuzione impiegato ed il flusso documentale associato. Gli strumenti di debug rendono inoltre possibile un controllo effettivo sullo script processato, rilevando errori sistematici e d'impostazione strutturale degli schemi di processo. Infine, la modalità di editing consente di variare la struttura ed i contenuti di un'istanza a run-time in modo da poter gestire casi eccezionali e/o correggere errori senza inibire il transito del flusso operativo.

Nel seguito analizzeremo alcuni strumenti di gestione e controllo delle istanze processuali nel corso delle diverse fasi d'esecuzione.

· Avvio di un'istanza di processo
· Monitoraggio di un'istanza in corso


Avvio di un'istanza di processo

Un'istanza di processo può essere avviata essenzialmente in due modi:

· Creazione di un documento associato al modello di processo. Qualora una tipologia documentale sia associata ad un modello di processo, ogni volta che viene creato un documento appartenente alla tipologia suddetta (da parte di un operatore o dal sistema mediante l'esecuzione di un'attività di creazione automatica), conseguentemente viene avviata un'istanza corrispondente al modello di processo associato. Tale modalità si imposta accedendo al Dettaglio del documento in oggetto dal Piano di classificazione e specificando il modello di processo da avviarsi in corrispondenza del campo indicato in figura.

bpmtools17 - documentmodeldetails

· Avvio manuale. Per i modelli di processo nel cui foglio di dettaglio delle Proprietà sia prevista l'opzione di attivazione manuale (vedasi sezione precedente Proprietà di un modello di processo) è possibile generare manualmente istanze ad essi correlate. Ecco come fare:
1. Accedere ai Modelli di processo attraverso il menu Processi.

bpmtools112 - processModels

2. Selezionare il modello sulla base del quale debba essere attivata un'istanza e cliccare sull'icona Avvia processo.

bpmtools78 - startprocess

3. Appare una richiesta di conferma e, dopo la risposta affermativa, un messaggio di avviso dell'avvio di un'istanza

bpmtools88 - startedInstance


Monitoraggio di un'istanza in corso
1. Accedere all'elenco delle Istanze attive di processo dal menu Processi.

bpmtools107 - onInstances

2. Appare un elenco recante tutte le istanze attive ed i relativi dettagli d'identificazione. Cliccando una volta sull'icona Dettaglio (oppure due volte sulla voce selezionata), si apre una schermata contenente il modello di processo su cui l'istanza si basa.

3. Si osservi che l'attività in corso d'esecuzione lampeggia.

bpmtools60 - processmonitoring

nota

Nota

Il lampeggiamento è il segnale grafico che individua l'attivazione. Quest'indicazione è particolarmente significativa per i nodi Timer e Contatore, che, tipicamente, iniziano a lampeggiare anche in contemporanea con altri nodi non appena il loro computo si attiva.

4. Cliccando (due volte) sul nodo attivato, è possibile visualizzare una descrizione delle proprietà ad esso attinenti. Osserviamo che viene indicato lo status dell'attività, gli eventuali partecipanti e la data di assegnazione a ciascuno di essi, la documentazione associata ed il numero di passaggi dal nodo.

bpmtools56 - processinstanceinfo

5. Il pulsante Aggiorna consente di verificare l'avanzamento del workflow aggiornando la visualizzazione corrente.

nota

Nota

Il transito in uscita del flusso da un'attività dopo che ne sia stato eseguito il completamento viene segnalato da un simbolo "ad orologio": esso indica che le attività successive a quella non appena processata sono in via di attivazione.

bpmtools57 - processistanceclock

6. La conclusione di un'istanza, ovvero il transito per il nodo di fine, viene segnalato da un' alert come quello in figura. L'istanza scompare dall'elenco dei Processi attivi.

bpmtools55 - processendok

approfondimento

Approfondimento

Un ulteriore cambio di visualizzazione in corso di esecuzione d'istanza interessa i link disattivati da modello.Qualora vengano attivati nel corso dell'istanza, essi vengono caratterizzati dalla stessa grafica dei link attivi.Nel caso in cui, invece, essi rimangano disattivi, dopo l'esecuzione dell'attività da cui i link escono compare sul simbolo di linking un circolo nero.

bpmtools152 - focus


Debug ed emendamento delle istanze in corso

Gli strumenti di controllo delle istanze presenti nel BPM Tools di openwork® consentono di rilevare ed analizzare in corso di esecuzione eventuali errori strutturali dei modelli processuali disegnati, eseguendo un attento debug sul funzionamento degli elementi di default e sugli script impostati. Non soltanto, ma, come anticipato, il sistema prevede in run-time una modalità di editing delle istanze: in tal modo è possibile emendare gli errori riscontrati senza di fatto interrompere l'avanzamento del flusso operativo né modificare i modelli realizzati in design-time.

Per maggiore chiarezza espositiva, illustriamo le modalità d'intervento su istanze che si trovano in stato critico attraverso una serie di note.

nota

Nota – Rilevazione degli errori

Osserviamo innanzitutto che, qualora openwork® identifichi un errore nel corso dell'esecuzione di un'attività, esso viene segnalato in corrispondenza del nodo da esso affetto.

bpmtools22 - erroristanceicon

Ciccando due volte sul nodo dell'attività corrispondente si visualizza una descrizione dell'errore. Nell'esempio specifico, lo script dopo il completamento richiama un metodo di un oggetto di tipo Document laddove non è presente alcun documento associato all'attività in corso: ciò spiega la situazione critica.

bpmtools21 - erroristance

Si osservi l'attivazione dei due pulsanti in basso a sinistra: il primo consente la riesecuzione dello script su sui è stato rilevato l'errore, il secondo premette invece di trascurare l'esecuzione dello script, in modo da far avanzare comunque il workflow.

nota

Nota – Debug in finestra immediata

Per poter verificare quali specifiche dello script generino l'errore evidenziato è consigliabile accedere alla finestra immediata: si tratta di uno strumento in cui, mediante comandi VBScript, è possibile interrogare direttamente il server che esegue l'istanza.

A tale scopo, selezionare la voce Finestra immediata dal menu contestuale dell'attività in cui è stato riscontrato l'errore.

bpmtools58 - processistancedebug

Viene così aperta la finestra immediata. Nel caso dell'esempio, conviene interrogare il sistema circa lo stato dell'attività e l'esistenza di un documento associato al processo: naturalmente, la risposta sarà negativa.

bpmtools15 - debugwindow

attenzione

Attenzione

La finestra immediata relativa ad un'attività restituisce, in linea di massima, informazioni attinenti agli oggetti coinvolti nell'attività stessa (documenti, partecipanti etc.) e alle loro proprietà nel momento di transito dal nodo corrispondente.

Esistono tuttavia alcuni oggetti(come le variabili di processo e alcuni oggetti della classe Process) che, per loro natura, sono “trasversali” rispetto al corso del workflow. Pertanto, qualora la finestra immediata di un'attività già completata e disattivata venga interrogata sulle proprietà di elementi siffatti, essa restituisce informazioni attinenti allo stato corrente degli oggetti e non allo stato concomitante con l'attività cui ci si riferisce.

nota

Nota – Modalità di editing

Vediamo ora come si procede per l'emendamento degli errori in corso d'istanza.

1. Selezionare la modalità di editing mediante l'apposito pulsante sulla barra dei comandi indicato in figura. Il corso del workflow viene temporaneamente sospeso.

bpmtools54 - processedit

2. Procedere alla correzione. Nel caso in esame, sarà necessario associare un documento all'attività in stato di errore.

3. Cliccare nuovamente sul testo di Editing e confermare l'opzione di salvataggio delle modifiche introdotte.

4. Selezionare nuovamente l'attività che presentava un errore: richiedere l'esecuzione dello script mediante l'apposito comando.

bpmtools125 - scriptAgain

5. Aggiornare la visualizzazione mediante il tasto di Refresh. Il simbolo di errore scompare dal nodo in oggetto.

bpmtools13 - correctexecution

6. Il flusso avanza ora correttamente: nel caso in esempio, esso si avvia verso la conclusione

approfondimento

Approfondimento

La maggior parte degli errori sistematici di un'istanza dipendono dall'impostazione di script erronei. Tuttavia, qualora i problemi riscontrati siano legati all'omissione o all'incongruenza di elementi indispensabili per l'esecuzione di un'attività (Partecipanti, Documenti associati, Corrispondenti etc.), è comunque consentito l'emendamento in modalità di editing.

In questi casi di norma l'errore viene riscontrato prima dell'attivazione del nodo corrispondente. Di conseguenza, diversamente dallo schema operativo sopra illustrato, quindi, nel corso dello step 4 bisognerà richiedere la riesecuzione dell'attività: ciò si effettua cliccando sul terzo tasto della barra della finestra di dettaglio dell'attività medesima. Nell'esempio viene mostrata un'attività di notifica cui, inizialmente, non era stato attribuito in maniera erronea alcun destinatario.

bpmtools152 - nodeerrore


Ottimizzazione delle risorse e gestione dell'errore

Nelle applicazioni in cui sono attive molte centinaia di istanze contemporaneamente è fondamentale ottimizzare l'utilizzo delle risorse.

Il concetto fondamentale che deve guidare in questa direzione è che si deve evitare di far fare lavoro inutile al motore di workflow; per fare ciò in openwork® sono state previste alcune funzionalità.

Ecco due esempi:

· se è certo che un documento verrà modificato solo con l'intervento di un operatore durante un'attività nel processo è inutile andare a verificare periodicamente lo stato del documento;
· se si sa che in un processo ci sono delle fasi che prevedono tempi molto lunghi è inutile andare a controllare ad ogni passo del motore di workflow se si sono verificate determinate condizioni, è buona regola inserire dei ritardi.

Alcuni strumenti a disposizione:

· per le attività con partecipanti e con condizione di completamento è utile (dove applicabile) impostare la verifica della condizione di completamento solo dopo l'esecuzione da parte dell'utente (con l'apposito flag nel disegno del processo).
· laddove si debbano controllare delle date o degli intervalli temporali utilizzare se possibile i timer; questi infatti vengono impostati all'attivazione o ad una eventuale modifica da script e non comportano nessun lavoro per il motore di workflow.
· può essere utile utilizzare le funzioni Freeze/Unfreeze dell'istanza di processo; Freeze sospende le attività automatiche sul processo fino ad una certa data: in questo stato tutte le attività di automazione (verifica condizioni, verifica selezioni automatiche, scadenze, etc.) non vengono svolte dal motore di workflow, ma gli utenti possono comunque eseguire le attività del processo presenti in agenda. In questo modo si può, ad esempio, far eseguire alcuni controlli solo una volta al giorno sospendendo di volta in volta il processo.

Altre considerazioni utili:

· non far creare ripetutamente gli stessi oggetti (la loro creazione e popolamento con i dati è una delle operazioni più costose); in genere le proprietà delle classi che restituiscono degli oggetti creano ogni volta l'oggetto necessario. Ad es. istruzioni del tipo

x = ThisActivity.Document.Id

y = ThisActivity.Document.Number

provocano la creazione di 2 oggetti Document e vanno sostituite con

Set Doc = ThisActivity.Document

x = Doc.Id

y = Doc.Number

· distruggere gli oggetti quando non servono più:

            Set Doc = Nothing

· raggruppare le operazioni di impostazione dei campi di un documento; istruzioni del tipo:

Doc.SetFieldValue "oggetto", "Comunicazione"

Doc.SetFieldValue "annotazioni", "Note"

provocano due volte la scrittura nel database e reinizializzazione; in questo caso conviene usare questa sequenza:

Doc.BeginTransaction

Doc.SetFieldValue "oggetto", "Comunicazione"

Doc.SetFieldValue "annotazioni", "Note"

Doc.CommitTransaction

che raggruppa in una sola le operazioni da effettuare sul database

· raggruppare gli script dove possibile; l'inizializzazione dell'ambiente e la successiva esecuzione di uno script sono operazioni molto costose per il motore di workflow; si deve cercare di disegnare il processo utilizzando la minore quantità possibile di script cercando di raggrupparli o sostituirli con altre tecniche

Gestione degli errori

Per la gestione degli errori, bisogna cercare di utilizzare il valore di ritorno delle funzioni, specialmente quelle critiche.

Non è corretto scrivere un flusso del tipo

...

ThisActivity.Save

...

ma, poiché la funzione Save restituisce il risultato dell'operazione, è corretto scrivere

...

If ThisActivity.Save Then

...

Else

Errore = ThisActivity.ErrDescription

...

End If

tutti gli oggetti espongono la proprietà ErrDescription che restituisce un eventuale errore.


Autocomposizione

Una utile funzionalità della componente di gestione documentale che la piattaforma openwork® rende disponibile è quella della autocomposizione documentale, ossia la possibilità di ottenere in allegato ad una form di openwork® un file di Microsoft® Word (.doc) compilato in base ad un template predefinito (.dot) e ai metadati contenuti nella form.

L'autocomposizione interpreta quindi in maniera inversa i principi tipici delle piattaforme puramente documentali, in cui i metadati di indicizzazione derivano dal contenuto del documento elettronico associato. A seguito di dati collezionati nella form - ad esempio in maniera incrementale e guidata da processo - tali dati convergono in un documento elettronico da essi derivante.

La costruzione del template avviene mediante uno strumento disponibile in openwork® BPM Tools (Menu Dati e Documenti a Modelli per autocomposizione).

Uno o più template possono essere associati ad una tipologia di archivio definita nel piano di classificazione. In tale caso una istanza di form di quell'archivio permetterà di procedere (dopo il salvataggio) all'autocomposizione di un file di Microsoft® Word (.doc) che sarà aggiunto ai file allegati alla form gestiti nello strumento di gestione documentale integrato.

· Esempio di costruzione di un modello
· Definizione di un template: tipologie di campi, origine informazioni ed altre opzioni
· Funzionalità avanzate


Esempio di costruzione di un modello

Immaginiamo di voler inviare una lettera ad un referente per una comunicazione generica. L'operazione potrebbe essere fatta mediante la protocollazione in uscita di una informazione che conterrà una serie di dati strutturati (numero, data, referente, oggetto, testo, etc…) ed un file di Microsoft® Word (dati destrutturati) che riporterà la comunicazione vera e propria utilizzando il layout istituzionale della organizzazione che la invia.

Supponiamo anche che l'azienda sia già in possesso di un proprio modello .dot utilizzato allo scopo prima della introduzione della piattaforma openwork®.

Chiamiamo comunicazione.dot tale modello. Il suo contenuto tipico potrebbe essere:

aut01 - modelExample

Immaginiamo che la protocollazione in uscita di una comunicazione avvenga tramite una form del tipo:

aut02 - comunicationForm

Si vuole che il file contenente la comunicazione vera e propria normalmente prodotto in Microsoft® Word venga prodotto dalla piattaforma tramite operazione di autocomposizione. Si vuole anche automatizzare il reperimento delle informazioni relative all'anagrafica del destinatario.

La prima operazione consiste nella costruzione del template utilizzando il modello già utilizzato in azienda come punto di partenza.

Da BPM Tools aprire lo strumento per la gestione dei modelli per autocomposizione:

aut03 - BPM tools

Quindi click su Nuovo: compare una form che richiede di indicare il modello .dot che si intende utilizzare, ad esempio Comunicazione.dot. Il modello viene trasferito nel repository dei modelli di openwork®:

aut04 - repositoryOpenwork

nota

Nota

Può accadere che non si abbiano a disposizione dei modelli precompilati ma si debba cominciare da modelli vuoti. In tale caso, per ognuno dei modelli, occorre dapprima creare (tramite Microsoft® Word) il relativo file .dot vuoto, quindi procedere come sopra mostrato

attenzione

Attenzione

Per poter procedere con la personalizzazione di un modello per autocomposizione (.dot) è necessario che sul PC ove è in esecuzione openwork® BPM Tools sia installato Microsoft® Word.

Le versioni supportate sono:

· Microsoft® Word 2000
· Microsoft® Office Word 2003

Nel caso in cui Microsoft® Word non sia installato, alla conferma della operazione di personalizzazione si otterrà un messaggio del tipo:

aut05 - wordError

Facendo click su Personalizza è possibile selezionare gli archivi da cui attingere i campi per la personalizzazione del modello:

aut06 - modelPersonalization

Facendo click su Personalizza viene mostrato il modello .dot aperto con Microsoft® Word e lo strumento per la scelta dagli archivi e l'inserimento nel modello dei campi.

aut07 - fieldForm

In luogo di <Referente> vogliamo inserire il campo destinatario\name (identifica la ragione sociale di quella scheda di anagrafica) dell'archivio delle form di tipo Comunicazione:

aut08 - selectField

Prima di inserire il campo (con un doppio click sullo stesso) occorre prestare attenzione a quanto riportato nella sezione Origine del campo.

Si intende per documento principale la form a partire dalla quale si è avviata l'operazione di autocomposizione (una form dell'archivio al quale, come vedremo tra breve, deve essere associato il modello .dot). Nel nostro caso destinatario è proprio un campo appartenente al documento principale. Selezionare sul file di Word la parola <Referente>, quindi doppio click su name sotto destinatario (è la ragione sociale del destinatario): sul modello avviene la sostituzione con il campo come mostrato in figura.

aut09 - recipientField

Il campo destinatario è associato ad un oggetto vettoriale o complesso (cfr. Definizione di un template) nel caso specifico, in fase di compilazione, esso sarà riempito con il contenuto dello stesso campo della form (Ragione sociale della scheda di anagrafica cui si riferisce). Contestualmente viene impostato un riferimento (ID) a quella scheda di anagrafica.

Tale riferimento diventa utile per rintracciare eventuali altri dati che si riferiscono alla scheda di anagrafica stessa qualora nel modello fosse richiesto.

L'esigenza è proprio quella di compilare i successivi campi <indirizzo>, <cap>, etc… proprio con elementi provenienti dalla scheda di anagrafica di quel referente.

Nel predisporre il modello si dovrà:

1. cambiare l'archivio dal quale scegliere il campo (nel nostro caso archivio Clienti);
2. nel riquadro Selezionare l'origine del campo fare click su Campo di un documento che si trova nel documento principale:si indica così che il valore del campo che si sta inserendo non deve essere preso dalla form corrente bensì da un altra form che è associata ad un campo della form corrente.
3. con un doppio click sul campo indirizzo si aprirà una form per la selezione del campo di riferimento: nella lista qui presente si trovano tutti i campi di tipo documento, anagrafica o operatore della form principale. Selezioniamo quindi il campo destinatario e confermiamo.

aut10 - anagraphicField

Naturalmente, nel nostro caso, per proseguire il completamento del modello occorre reimpostare la selezione dell'origine del campo sul documento principale:

aut11 - modelCompletation

A questo punto il nostro semplice modello è pronto: fare click su Conferma.

nota

Nota

E' possibile inserire più volte lo stesso campo nel modello: il suo valore sarà compilato correttamente in ciascuna delle occorrenze.

Per poter utilizzare il modello occorre associarlo all'archivio:

aut12 - modelArchive

Un operatore che accede alla piattaforma tramite browser può procedere alla creazione di un documento di tipo Comunicazione e quindi alla autocomposizione del file:

aut13 - autoForm

aut14 - autoDocument


Tipologia di campi

Abbiamo già accennato al fatto che si distinguono due tipologie di campi: scalari e vettoriali (oppure semplici e complessi).

I primi si riferiscono a campi che contengono un solo valore; gli altri si riferiscono a campi che possono contenere più valori ciascuno dei quali è possibile referenziare singolarmente.

Uno dei possibili valori può essere un campo ID che, utilizzato nel modello, ha la funzione di creare un riferimento verso un altro oggetto che può essere un documento oppure uno degli altri oggetti tipici della piattaforma come un ufficio, un ruolo, un operatore, una scheda di anagrafica, un file, etc…

Riportiamo di seguito un elenco di tutte le possibile tipologie di campi che possono essere utilizzati nei modelli per autocomposizione:

· Campo di classificazione
· Campo di numerazione
· Campo documento
· Campo di anagrafica
· Lista di anagrafica
· Firme
· File allegati
· Lista di documenti
· Tabella XML
· Variabili


Campo classificazione

classificazione identifica il campo che contiene i riferimenti alla classificazione della form nel piano di classificazione della piattaforma.

aut15 - fieldClassificatioNumerate

Nel caso in figura:

aut16 - classification

description = Comunicazione

label = COM

path = 01


Campo numerazione

numerodoc identifica il numero del documento.

Number il solo numero, description la numerazione completa di eventuali sigle.

Ad esempio se il numero del documento è RdA/00347-MA.2007 si ha:

number = 347

description = RdA/00347-MA.2007


Campo documento

Utilizzato per inserire nel modello un riferimento ad un altro documento (tramite ID, campo che non viene visualizzato nel coso in cui lo si inserisca).

E' possibile ottenere valori compilati anche per style (identificativo interno di archivio: 1 protocollo in entrata, 2 in uscita, 3 interno, etc…), number e date.

Non sono al momento utilizzati gli altri campi. Ciò non costituisce alcun problema: ad esempio se occorre riportare l'oggetto di un documento si può far riferimento direttamente al campo così come compare nel relativo archivio.

aut17 - typeDocumentField


Campo di anagrafica

Permettono di impostare l'ID di un ufficio (non presente in questa versione anagrafica ufficio, quindi di utilità relativa) recuperandone il nome completo.

Un campo di tipo listadistribuzione permette di portare in un file autocomposto il nome ed il ruolo di tutti i componenti di una lista di distribuzione..

aut18 - organizationField


Lista di anagrafica

Tali campi permettono di portare in un file di Microsoft® Word una lista di elementi di anagrafica. E' anche possibile fare poi riferimento ad altri campi presenti non nel documento principale bensì nelle singole schede di anagrafica referenziate.

aut19 - anagraphicList

Le immagini di seguito riportate mostrano alcune fasi dell'utilizzo del campo:

autg27 - recipientList

aut28 - listrecipientFields

nota

Nota

Tutti i tipi di campo lista ed i campi di tipo tabella XML, una volta inseriti nel modello di Word generano automaticamente un ulteriore campo di tipo OWK_END.

Si tratta di un delimitatore interno che non deve essere né modificato né eliminato la cui funzione è l'identificazione dell'area di pertinenza della lista oppure della tabella.

aut29 - recipientlistInsert

aut30 - listRecipientUse


Firme

Utilizzati per riportare nel documento informazioni sulle firme apposte nella form.

aut20 - signField aut21 - signField2


File allegati

Utilizzati per riportare nel documento informazioni sui file allegati alla form.

aut22 - attachmentsField


Lista di documenti

Dal funzionamento analogo alle liste di anagrafica con la differenza che i singoli elementi sono oggetti di tipo documento.

aut23 - documentList

nota

Nota

Non è attualmente possibile fare riferimento a campi che si trovano ad un livello oltre il secondo nella gerarchia di form. Questo significa che se nel documento principale c'è un campo di tipo documento che contiene una anagrafica di tipo cliente nel modello di autocomposizione non è possibile riportare un campo che venga compilato con la partita IVA del cliente.


Tabella XML

Tale tipologia di campo consente di portare in un file word autocomposto una intera tabella XML nella quale sono presenti riferimenti a campi di qualsiasi tipo, siano essi semplici i composti.

aut26 - tableXMLField


Variabili

E' possibile far compilare un campo con il valore di una delle tre tipologie di variabili disponibili.

E' sufficiente, dopo l'inserimento, indicare il nome della variabile. La variabile deve essere disponibile al momento della autocomposizione.

Una variabile di attività è disponibile esclusivamente se si sta realizzando l'autocomposizione durante l'esecuzione di una attività.

Una variabile è di processo se la form attraverso la quale si effettua l'autocomposizione è legata al processo.

aut24 - variableField


Origine del campo

Quando si inserisce un campo nel modello si deve scegliere, nel riquadro Selezionare l'origine del campo, l'opzione giusta che permetta di risalire correttamente ai dati.

Vediamo in dettaglio il significato delle tre opzioni disponibili:

· Campo del documento principale: Si intende per documento principale la form a partire dalla quale si è avviata l'operazione di autocomposizione; il campo inserito viene prelevato da questa form. E' possibile inserire un campo con questa opzione in un qualsiasi punto del modello, anche all'interno di una lista o tabella: in questo caso l'effetto ottenuto è che viene compilato sempre lo stesso valore per ogni riga della lista.
· Campo del documento nel contesto corrente: Questa opzione ha senso solo all'interno di liste e tabelle.

Vediamo un esempio: se si inserisce una lista di anagrafica, quando viene compilato il documento durante l'autocomposizione la procedura scorrerà la lista; in questa fase la scheda di anagrafica nella riga corrente rappresenta il contesto corrente. Se all'interno del blocco che racchiude la lista (ad es. [altridestinatari] .. [OWK_ENDLIST_altridestinatari_000]) si inserisce con questa opzione il campo indirizzo preso dall'archivio di anagrafica, la procedura inserirà in ogni riga l'indirizzo dell'elemento di anagrafica presente nella riga.

Il discorso è analogo per le liste di documenti e per le righe di una tabella.

Occorre fare attenzione ad un particolare: ogni campo inserito viene preso da un archivio (anagrafica, protocollo in entrata, etc.); quando si inserisce un campo con questa opzione deve esistere un campo dello stesso tipo di archivio che rappresenta il contesto corrente. Ad esempio, se il campo è preso dal protocollo in entrata ed inserito in un blocco di una tabella, deve esserci nella riga un campo di tipo documento contenente un protocollo in entrata.

nota

Nota

Nella lista di anagrafica e lista di documenti l'elemento della lista rappresenta automaticamente il contesto corrente; nella tabella invece, poichè in teoria è possibile inserire qualsiasi tipo di campo, il contesto corrente va creato esplicitamente inserendo, prima del campo interessato, l'id del documento da cui va preso.

Se nell'esempio seguente si vuole prendere informazioni dall'anagrafica del prodotto (il quale si trova all'interno della tabella), occorre inserire l'id del prodotto con l'opzione Campo del documento principale e poi i campi di interesse presi da un archivio di anagrafica con l'opzione Campo del documento nel contesto corrente. L'id del prodotto non sarà mostrato nel documento finale.

aut33 - currentDocumentField

· Campo di un documento che si trova nel documento principale

Se nel documento principale è presente un campo di tipo documento, anagrafica o operatore con questa opzione si preleva il valore dalla corrispondente form. Quando viene inserito un campo con questa opzione viene presentata una maschera che richiede la scelta del campo del documento principale a cui riferire il valore.

Esempio: abbiamo un protocollo in entrata con un campo mittente di tipo anagrafica; se vogliamo inserire nel documento dei dati presi dalla scheda anagrafica del mittente dobbiamo prenderli dall'archivio di anagrafica e riferirli al campo mittente del documento principale.

E' possibile inserire un campo con questa opzione in un qualsiasi punto del modello, anche all'interno di una lista o tabella: in questo caso l'effetto ottenuto è che viene compilato sempre lo stesso valore per ogni riga della lista.


Fuzionalità avanzate

Facendo click sul flag Inserisci un commento sui campi con il percorso completo si ottiene che oltre al nome del campo viene aperta una casella di commento nella quale è riportato il percorso completo che identifica quel campo:

aut25 - fieldComment

Il flag campo aggiornabile:

aut31 - refreshbleField

permette la predisposizione all'aggiornamento (richiamando apposita funzione o action) del valore di quel campo.

Molto utile se si vuole riaggiornare un file word allegato a seguito delle variazioni dei dati strutturati nella form.

Per questi campi esistono le seguenti limitazioni:

· il testo in essi contenuto non può superare i 255 caratteri, pena il troncamento dei caratteri in eccesso in fase di autocomposizione.
· i campi devono trovarsi nel documento principale

Per predisporre l'aggiornamento di un allegato è necessario utilizzare la funzione

openAttach (mode,filepos,visible,fromclient) (cfr. Funzioni di attachments - openAttach)

con il seguente vincolo:

mode: la modalità di apertura deve assumere valore 2.

Se si vuole inserire un pulsante all'interno della form, mediante il quale, dopo aver selezionato l'allegato, aggiornare il medesimo, si deve definire un controllo di tipo Button:

<input onclick="openAttach(2);" type="button" value="Aggiorna" name="Aggiorna"/>

aut34 - refresh

In alternativa, si può decidere di inserire la chiamata alla funzione all'interno di un'action custom che sarà mostrata nella barra delle azioni della form. In tal caso, l'id dell'action viene richiamato dalla funzione customcommand (action) inserita in clibraries/document/document.js:

function customcommand(action)

{

switch (action)

{

case "UpdateAutocompo": //aggiornamento dell'allegato autocomposto

//UpdateAutocompo è l'id dell'action

//inserita nella form

openAttach(2);

break;

default:

return false;

break;

}

}

aut35 - refreshAttachment

E' anche possibile, tramite l'utilizzo del pulsante evidenziato:

aut32 - page

inserire campi nell'intestazione e/o nel piè di pagina di un file di Microsoft® Word. Le limitazioni sono le seguenti:

· lunghezza massima di 255 caratteri;
· gestione esclusivamente sull'intestazione/piè di pagina principale o comunque sul primo di questi elementi;
· è possibile inserire solo campi scalari, ossia sono escluse liste, tabelle, etc…

nota

Nota

In una form di openwork® il controllo per la scelta di un modello .dot e la relativa autocomposizione è referenziabile in javascript ("action_autocompile").

L'esempio che segue mostra come gestire tale controllo in funzione di una condizione. Il codice riportato può, ad esempio, essere inserito nella funzione customonload() di una Form per nascondere o visualizzare tale controllo:

try

{

document.getElementById("action_autocompile").style.display='none';

if (x.selectSingleNode("//owk:context/owk:activity/owk:id").text == "14")

document.getElementById("action_autocompile").style.display='';

}

catch(er){};


La libreria delle classi

· Definizioni
· Costanti
· Codici di errore generati dal Workflow Engine
· Libreria di oggetti di openwork®
· Dettagli delle classi
· Esempi di script commentati


Costanti

Actions

Azioni che è possibile eseguire su una attività in una istanza di processo.

Nome | Valore | Descrizione
acActivate | 1 | attivazione
acBook | 2 | prenotazione
acExecute | 3 | esecuzione
acComplete | 4 | completamento
acAssign | 5 | assegnazione a operatore
acTransfer | 6 | trasferimento
acSkip | 7 | salto
acContinueExecution | 8 | riservato

ActivityStatus

Descrive lo stato di una attività in una istanza di processo.

Nome | Valore | Descrizione
asDisabled | 0 | disabilitata
asWaiting | 1 | in attesa di prenotazione
asBooked | 2 | prenotata
asExecuting | 3 | in esecuzione
asError | 4 | in errore
asActivating | 5 | in corso di attivazione
asCompleting | 6 | in corso di completamento
asReserved1 | 7 | riservato
asReserved2 | 8 | riservato
asBeforeExecuteScriptBooked | 9 | l'attività sta eseguendo lo script prima dell'esecuzione ed è un'attività non ancora eseguita
asBeforeExecuteScriptExecuting | 10 | l'attività sta eseguendo lo script prima dell'esecuzione ed è un'attività già eseguita almeno una volta
asAfterBookScript | 11 | l'attività sta eseguendo lo script dopo la prenotazione
asAfterExecuteScript | 12 | L'attività sta eseguendo lo script dopo l'esecuzione
asDocumentBooked | 13 | è stato aperto il documento legato all'attività e l'attività non è stata ancora eseguita
asDocumentExecuting | 14 | è stato aperto il documento e l'attività è stata già eseguita almeno una volta

ActivityType

Tipi di nodi

Nome | Valore | Descrizione
tpnNone | 0 | non specificata
tpnStart | 1 | inizio processo
tpnNewDocIn | 2 | nuovo documento in entrata
tpnNewDocOut | 3 | nuovo documento in uscita
tpnNewDoc | 4 | nuovo documento/protocollo interno
tpnFolder | 5 | nuovo fascicolo
tpnDOC | 6 | elaborazione documento esistente
tpnGENERIC | 7 | generica
tpnAnd | 8 | nodo AND
tpnJunction | 9 | giunzione
tpnManualSel | 10 | selezione manuale
tpnAutomaticSel | 11 | selezione automatica
tpnSubProcess | 12 | sottoprocesso
tpnStop | 13 | fine processo
tpnLabel | 14 | etichetta
tpnNumber | 15 | numerazione documento
tpnFlag | 16 | nodo di controllo
tpnTimer | 17 | timer
tpnBreak | 18 | disattivazione timer, collegamento, contatore
tpnSold | 19 | attivazione timer, collegamento, contatore
tpnStore | 20 | archiviazione documento
tpnTrigger | 21 | contatore
tpnMail | 22 | notifica
tpnNewFolder | 23 | nuovo fascicolo
tpnSign | 24 | firma
tpnOpenFolder | 25 | apertura fascicolo
tpnSend | 26 | invio protocollo in uscita
tpnProcess | 27 | nuovo processo
tpnNewDocRev | 29 | revisione documento
tpnStoreFolder | 30 | archiviazione fascicolo
tpnInsertInFolder | 31 | fascicolazione documento
tpnReserved1 | 32 | riservato
tpnReserved2 | 33 | riservato
tpnReserved3 | 34 | riservato
tpnPrint | 35 | stampa documento

DocumentType

Specifica la natura di un documento

Nome | Valore | Descrizione
dtNoDocument | 0 | non specificato
dtInDocument | 1 | protocollo in entrata
dtOutDocument | 2 | protocollo in uscita
dtInnerDocument | 3 | documento/protocollo interno
dtFolder | 4 | fascicolo
obsoleto | 5 |
dtClient | 6 | scheda di anagrafica
dtMessage | 7 | messaggio interno

Process Status

Nome | Valore | Descrizione
psNode | 0 | Non ancora attivato
psActivate | 1 | Attivo
psComplete | 2 | Terminato normalmente, in attesa di passaggio in storico
psStoric | 3 | Terminato normalmente, passato in storico
psKilled | 4 | Interrotto
psPaused | 5 | In pausa
psToKill | 6 | In fase di interruzione
psToKillAndClear | 7 | In fase di interruzione, il dettaglio sarà eliminato


Errori generati dal Workflow Engine

Codice | Significato | Metodo richiamato | Saltabile | Ripristinato da
1 | Errore nella esecuzione dello script di completamento sul metodo completamento. Questo codice viene generato solo per i nodi di sottoprocesso, fascicolazione, selezione manuale, nuova pratica | Completa | Opzionale | WorkFlowDesigner
2 | Generazione sottoprocesso su nuovo documenti in entrata,uscita, interno | Completa |  | WorkFlowManager
3 | Generazione pratica su apri pratica | Completa |  | WorkFlowManager
4 | Si è cercato di resettare lo stato di errore dell'attività dopo che tutte le sue attività di destinazione, presenti nell'elenco delle attività da attivare, sono state correttamente attivate. L'operazione non è riuscita correttamente |  |  | WorkFlowManager
5 | Generazione processo su nuova pratica | Completa |  | WorkFlowManager
6 | Errore nell'esecuzione del metodo GOHAED | GOAHEAD |  | WorkFlowManager
7 | Impossibile impostare lo stato dopo l'attivazione. Nella variabile di attività ErrorStatus viene memorizzato quale sarebbe dovuto essere lo stato della attività |  |  | WorkFlowManager
8 | Impossibile completare il nodo di sottoprocesso dopo che il processo figlio è terminato |  |  | WorkFlowManager
9 | Errore nell'esecuzione dello Script dopo l'attivazione. Nella variabile di attività ErrorStatus viene memorizzato quello che sarebbe dovuto essere lo stato della attività | Activate | Opzionale | WorkFlowDesigner
10 | Errore nella esecuzione dello script dopo il completamento eseguito nel metodo Activate per i nodi di processo, per le attività di automazione e per il nodo di fine processo | Activate | Opzionale | WorkFlowDesigner
11 | Errore nella esecuzione dello Script dopo la prenotazione di una attività | Book | Opzionale | WorkFlowDesigner
12 | Errore nella esecuzione dello script dopo l'esecuzione | Execute | Opzionale | WorkFlowDesigner
13 | Non è riuscito a inserire l'attività IDO nello elenco delle attività da attivare. IDN è l'origine. In questo caso l'attività che è andata in errore è quella che doveva inserire |  |  | WorkFlowManager
14 | Impossibile impostare lo stato dell'attività dopo il metodo GOAHEAD. Nella variabile di attività ErrorStatus viene memorizzato quello che sarebbe dovuto essere lo stato della attività |  |  | WorkFlowManager
15 | Errore nella esecuzione dello script dopo l'esecuzione nel metodo ACTIVATE di un nodo di sottoprocesso | Activate | Opzionale | WorkFlowDesigner
16 | Errore nella esecuzione dello script dopo la prenotazione sul client | Book | Sempre | WorkFlowDesigner
17 | Errore nella esecuzione dello script prima delle esecuzione sul client |  | Sempre | WorkFlowDesigner
18 | Errore nella esecuzione dello script di completamento sul client | Completa | Sempre | WorkFlowDesigner
19 | Errore nella esecuzione dello script dopo l'esecuzione sul client | Execute | Sempre | WorkFlowDesigner
20 | Impossibile impostare lo stato dopo il resume |  |  | WorkFlowManager
21 | Impossibile impostare lo dell'attività dopo la prenotazione |  |  | WorkFlowManager
22 | Impossibile impostare lo stato dopo l'esecuzione della attività |  |  | WorkFlowManager
23 | Non è riuscito a impostare lo stato della attività in attesa dopo aver annullato l'operazione dal documento |  |  |
24 | Non è riuscito a impostare lo stato della attività dopo l'esecuzione sul client. Lo stato può essere in attesa oppure in esecuzione |  |  |
25 | Impossibile cancellare le variabili di errore con il metodo |  |  |
50 | Imposta lo stato dopo l'esecuzione dello script dopo la prenotazione sul client |  |  | WorkFlowManager
51 | Imposta lo stato dopo l'esecuzione dello script dopo l'esecuzione sul client |  |  | WorkFlowManager


Libreria di oggetti openwork®

In openwork® esistono già alcuni oggetti predefiniti creati dal sistema e utilizzabili negli script.

Essi sono:

· Openwork: oggetto della classe OWKConnection che identifica il sistema;
· ThisActivity: oggetto della classe Activity che identifica l'attività corrente;
· ThisProcess: oggetto della classe ProcessInstance che identifica il processo corrente;
· MainProcess: oggetto della classe ProcessInstance che identifica il processo principale (ha senso in un sottoprocesso);
· ThisFolder: oggetto della classe Folder che identifica (se esiste) il fascicolo legato al processo corrente;
· Functions: oggetto della classe OWKFunction;
· Globals: oggetto della classe ProcessInstance e serve per utilizzare negli script le variabili globali;
· Log: oggetto della classe OWKLog e serve per scrivere nel file di log di openwork®.


Dettaglio delle classi

Di seguito le classi disponibili con riferimento ai relativi metodi e proprietà.

Le classi non presenti nel seguente elenco rappresentano metodi e proprietà, obsoleti oppure riservati, in ogni caso non utilizzabili.

· Classe Activity
· Classe AttachedDocument
· Classe Client
· Classe Document
· Classe Folder
· Classe Link
· Classe Office
· Classe OrgDiagram
· Classe OWKConnection
· Classe OWKFunction
· Classe OWKLog
· Classe OWKOpticalStore
· Classe ProcessInstance


Classe Activity

Rappresenta un'attività all'interno di un processo.

Un oggetto di questa classe viene inizializzato specificando, nell'ordine, le proprietà ProcessID e ID. Negli script esiste un'istanza predefinita che rappresenta l'attività corrente: ThisActivity.

In questa sezione vengono riportati i Metodi e le Proprietà della classe Activity.


Metodi

Di seguito l'elenco dei metodi relativi alla classe Activity.

I metodi non presenti nel seguente elenco non sono utilizzabili.

· AddAbsolutePartecipant
· AddConfig
· AddContext
· AddPartecipant
· AddVar
· DeleteContext
· DeleteVar
· GetConfig

· GetVar
· IsPartecipant
· Replicate
· ResolveRelativeFormula
· Save
· SetSupposed
· SetTimer
· VarCount


AddAbsolutePartecipant

Function AddAbsolutePartecipant(vData As Variant) As Boolean

Aggiunge un elemento (vdata) ai partecipanti dell'attività.

Il parametro passato rientra in uno dei seguenti tipi:

Tipo | Descrizione
numerico | Viene interpretato come ID di un operatore di organigramma.
stringa | Può essere una formula assoluta che rappresenta un utente, ruolo, ufficio o gruppo.
oggetto | Può essere un oggetto correttamente inizializzato da una delle classi User, Role o Office.

Il metodo va richiamato solo quando all'attività cui vogliamo aggiungere uno o più partecipanti è nello stato "in attesa di prenotazione".

Esempio

Set part = thisprocess.activities(5)

part.AddAbsolutePartecipant(9)

part.save 'operazione obbligatoria affinché la funzione abbia effetto

Set part = Nothing

Per verificare l'inserimento del partecipante, è sufficiente fare doppio clic sull'attività (nell'istanza) oppure interrogare la proprietà RealPartecipants dell'attivita'.


AddConfig

Function AddConfig(Name As String, ParamArray Params())

Permette di eseguire alcune configurazioni particolari sull'attività. È possibile specificare per il parametro Name i valori:

· "fieldattribute": ha senso solo per le attività a cui è associato un documento e serve per impostare gli attributi di contesto (visibilità/modificabilità etc.) su un particolare campo del documento.

Nei parametri successivi vanno specificati nell'ordine: il fieldname del campo come definito nel modello HTML, il nome dell'attributo da settare ("visible", "changeable", etc.), il valore da impostare e opzionalmente un flag di permanenza.

L'impostazione degli attributi ha effetto solo durante l'esecuzione di questa attività, a meno che non si specifichi un valore diverso da zero come flag di permanenza. In tal caso l'impostazione resta memorizzata nel documento.

L'impostazione nella attività ha la prevalenza su quella nel documento, la quale a sua volta prevale su quella del modello.

La funzione restituisce un valore booleano Vero (true) o Falso (false) a seconda che l'operazione sia andata a buon fine oppure no.

Passando come valore del parametro Name una stringa del tipo action_nomeaction è possibile impostare, tramite contesto, la visibilità di un azione.

Esempio

Att.AddConfig("fieldattribute", "oggetto", "changeable", "R  12")

· "completeonclient": imposta o rimuove il flag che impone la verifica di una eventuale condizione di completamento solo dopo l'esecuzione da parte dell'utente.
· "printprofile": ha senso solo per le attività di tipo stampa lato server e serve per impostare o cambiare il profilo di stampa. Il secondo parametro è l'id o il nome del profilo, il terzo (opzionale) è il nome del file allegato a cui si vuole applicare questa impostazione, altrimenti sarà fatto su tutti i file che vanno in stampa.

Esempio

Att.AddConfig("printprofile", "stampa elenchi")

· "printcopies": ha senso solo per le attività di tipo stampa lato server e serve per impostare o cambiare il numero di copie dei documenti da stampare. Il secondo parametro è il numero di copie, il terzo (opzionale) è il nome del file allegato a cui si vuole applicare questa impostazione, altrimenti sarà fatto su tutti i file che vanno in stampa.

Esempio

Att.AddConfig("printcopies", 2, "Rapporto intervento")


AddContext

Function AddContext(FieldName As String, AttributeName As String,_

AttributeValue,[StoreInDocument As Boolean = False] ) As Boolean

Imposta gli attributi di contesto (visibilità/modificabilità etc.) su un particolare campo del documento associato all'attività. Il comportamento è analogo a quello del caso "fieldattribute" nella funzione AddConfig. Passando come valore del parametro FieldName una stringa del tipo action_nomeaction è possibile impostare, tramite contesto, la visibilità di un azione.


AddPartecipant

Function AddPartecipant(vdata) As Boolean

Aggiunge un elemento (vdata) ai partecipanti dell'attività.

Il parametro passato rientra in uno dei seguenti tipi:

Tipo | Descrizione
numerico | Viene interpretato come ID di un operatore di organigramma.
stringa | Può essere una formula assoluta che rappresenta un utente, ruolo, ufficio o gruppo.
oggetto | Può essere un oggetto correttamente inizializzato da una delle classi User, Role o Office.

Richiamare questa funzione ha senso solo se l'attività stessa si trova nello stato in attesa di prenotazione.

Esempio

Set part = thisprocess.activities(2)

part.AddPartecipant(9)

part.save 'operazione obbligatoria affinché la funzione abbia effetto

Set part = Nothing

Il/i partecipante/i aggiunto/i è visibile, tramite la proprietà PARTECIPANTI nel WorkFlow, solo dopo aver eseguito il Refresh dell'istanza.


AddVar

Function AddVar(Name As String, value As Variant[, Style As Integer = 0]) As Boolean

Permette di aggiungere una variabile di attività

Esempio

Dim Risultato

ThisActivity.AddVar "Costo", 2000

Risultato = 2 * CInt(ThisActivity.GetVar("Costo"))

Se la funzione restituisce 0 (Falso) vuol dire che la variabile non è stata creata e la proprietà ErrDescription conterrà la descrizione dell'errore avvenuto.

Se la variabile esisteva in precedenza, il valore sarà aggiornato.

Non possono essere utilizzati i seguenti nomi riservati: ERRORCODE; ERRORSTATUS; ERRORDESCRIPTION; ERRORSOURCE; SELECTEDOPTION; REPLICATEDID; REPLICATEDCOUNT.

In particolare, se l'attività è stata replicata, la variabile REPLICATEDID contiene l'identificativo della prima attività replicata che è stata creata e REPLICATEDCOUNT il numero di attività replicate create.


DeleteContext

Function DeleteContext(FieldName As String, AttributeName As String,

[RemoveFromDocument As Boolean = False]) As Boolean

Elimina l'impostazione degli attributi di contesto su un particolare campo del documento associato all'attività.

La modifica ha effetto solo durante l'esecuzione di questa attività, a meno che non si specifichi un valore vero per il parametro RemoveFromDocument.

· FieldName: l'attributo fieldname del campo come definito nel modello HTML
· AttributeName: il nome dell'attributo da rimuovere ("visible", "changeable", etc.)
· RemoveFromDocument: opzionale, flag che indica se rendere la modifica permanente, cioè rimuovere l'impostazione dall'istanza del contesto memorizzata nel documento.

La funzione restituisce Vero (true) o Falso (false) a seconda che l'operazione sia andata a buon fine oppure no.


DeleteVar

Function DeleteVar(Name As String) As Boolean

Elimina una variabile di attività. Se la funzione restituisce 0 (Falso) vuol dire che la variabile non è stata eliminata e la proprietà ErrDescription conterrà la descrizione dell'errore avvenuto.


GetConfig

Function GetConfig(Name As String, ParamArray Params())

Permette di leggere alcune configurazioni particolari sull'attività. È possibile specificare per il parametro Name i valori:

· context: ha senso solo per le attività a cui è associato un documento e serve per leggere gli attributi di visibilità/modificabilità etc. sui campi del documento. La funzione restituisce la parte <context> del documento.
· intervaltype: per un nodo di tipo timer restituisce il tipo di intervallo temporale impostato: "d" per giorni, "wd" per giorni lavorativi, "h" per ore o "n" per minuti.
· intervaldelay: per un nodo di tipo timer restituisce l'intervallo temporale impostato.


GetVar

Function GetVar(Index)

Restituisce il valore di una variabile di attività.

Il valore passato nel parametro Index può essere il nome della variabile oppure il suo indice (a partire da 1).

Esempio

valore = ThisActivity.GetVar("Importo")

valore = ThisActivity.GetVar(1)

restituiranno lo stesso valore se la variabile "Importo" è la prima variabile creata nell'attività "ThisActivity".

La variabile in questione può essere una di quelle aggiunte con la funzione AddVar o una di sistema (con nome riservato ERRORCODE, ERRORSTATUS, ERRORDESCRIPTION, ERRORSOURCE, SELECTEDOPTION, REPLICATEDID, REPLICATEDCOUNT).

Nel caso in cui la variabile richiesta non esiste viene restituito un Variant non inizializzato (Empty).

nota

Nota

Non è consigliabile fare affidamento sull'indice numerico a causa dell'esistenza delle variabili di sistema.


IsPartecipant

Function IsPartecipant(whatid As Long) As Boolean

Il metodo è applicabile quando l'attività è attiva, cioè il suo stato è diverso da zero, quindi anche nello script dopo il completamento. Il parametro passato è un ID di operatore da organigramma.


Replicate

Function Replicate(Mode As Long, Offset As Long, ParamArray Params()) As Boolean

Replica un'attività: all'interno del disegno dell'istanza verranno inserite attività "cloni" di quella su cui viene applicato la funzione.

Perchè il metodo sia eseguito correttamente è necessario che l'attività da replicare abbia un unico nodo in entrata e un unico nodo (o nessuno) in uscita;
La funzione non verrà eseguita correttamente nei seguenti casi:

· l'istanza di processo è in editing
· l'attività è nello stato "attiva" (sta lampeggiando)
· l'attività è nell'elenco delle attività in fase di attivazione

La funzione restituisce un valore booleano che indica se l'operazione è andata a buon fine.

Inoltre, in caso di successo, al termine dell'esecuzione vengono settate due variabili di attività:

· REPLICATEDCOUNT: restituisce il numero di attività cloni aggiunte
· REPLICATEDID: restituisce l'identificativo della prima attività aggiunta

Per cui se ad esempio ReplicatedCount = 3 e ReplicatedId = 5, saranno state aggiunte le attività con identificativo 5,6,7.
In caso di insuccesso, l'errore può essere ottenuto interrogando la proprietà ErrDescription della classe.

Mode

Offset

Altri parametri

Comportamento della funzione

0

N

Applicabile a tutti i tipi di attività. L'attività viene replicata

N-1 volte;tutte le proprietà non di runtime vengono ereditate dalla nuova attività.

Esempio

Nell'esempio l'attività con ID = 3, verrà replicata 9 volte

(in aggiunta a quella iniziale):

thisprocess.activities(3).replicate(0,10)

1

0

Operatori_interni as string,

Operatori_esterni as string

Almeno uno dei due parametri deve essere uguale alla stringa vuota.Applicabile ai seguenti tipi di attività:

tpnNewDocIn, tpnNewDocOut, tpnNewDoc, tpnDOC, tpnManualSel, tpnNewDocRev, tpnNewFolder,tpnFolder, tpnGENERIC

Il primo parametro è costituito da almeno una formula (relativa o assoluta) di operatori di organigramma la quale, però, non può contenere riferimenti all'attività precedente.

Il secondo parametro è costituito da almeno un codice di operatore di anagrafica; in questo caso solo se l'attività è di tipo tpnNewDoc, tpnGENERIC, tpnNewDocRev e tpnDoc la funzione andrà a buon fine.

Se Operatori_interni contiene N formule di operatori di organigramma e Operatori_esterni è una stringa vuota, l'attività verrà replicata N-1 volte.

Esempio

Ad esempio, per ottenere 3 attività uguali, ma con

partecipanti differenti:
Thisprocess.activities(3).replicate 1,0,

"U 23;G 14;R 3",""

Se Operatori_interni contiene N formule di operatori di organigramma e EXU(preExternalUser) l'attività viene replicata N - 1 volte.
Se Operatori_esterni è una stringa vuota l'ultima attività ha come partecipante tutti gli operatori esterni definiti in openwork®, e l'attività viene attivata nello stato "Da Prenotare".
Nel caso in cui è definito un unico operatore esterno l'attività viene attivata nello stato "Da Eseguire".

Esempio

In questo esempio l'attività viene replicata 3 volte, una con partecipante "U 23", una con "G 14" ed una ("da prenotare") con due partecipanti "000005" e "000006":
Thisprocess.activities(3).replicate 1,0,

"U 23;G 14;EXU", "000005;000006;"

Se Operatori_interni non contiene l'operatore EXU (preExternalUser) l'attività viene replicata tante volte quanti sono gli operatori di organigramma ivi
indicati, più quanti sono gli operatori di anagrafica indicati inOperatori_esterni;

Esempio

In questo esempio l'attività viene replicata 4 volte, una con

partecipante "U 23", una con "G 14", una con "000005"

e una con "000006":

Thisprocess.activities(3).replicate 1,0,

"U 23;G 14;","000005;000006;"

Per ogni attività, compresa l'originale, i partecipanti verranno impostati a uno degli operatori in Operatori_interni; solo per l'attività cui viene assegnato il partecipante preExternalUser i partecipanti vengono impostati a Operatori_esterni.

2

0

Collection di oggetti document

Applicabile per i seguenti tipi di attività:

tpnNewDocIn, tpnNewDocOut, tpnNewDoc

Il parametro è una formula di elementi di anagrafica.

L'attività viene replicata N-1 volte ovvero per il numero

dei Destinatari meno 1.

Per ogni attività, compresa l'originale, viene assegnato

un mittente predefinito o un destinatario predefinito

uguale ad un operatore della formula.

Esempio

Nell'esempio l'attività viene replicata 2 volte:

Thisprocess.activities(3).replicate 2,0,"000005;000006;"

3

0

Applicabile solo per attività di modifica documento(tpnDOC) e stampa(tpnPrint).
Se N sono il numero di documenti contenuti nella collection,

l'attività viene replicata N-1 volte. Alla attività originale

viene associato il primo documento della collection,

alle successive N-1 gli altri documenti della collection

in successione.

Esempio

Nell'esempio l'attività viene replicata 3 volte:

Set Coll=openwork.newobject("collection")

Set doc=openwork.newobject("document")

doc.style=1

doc.id=1

coll.add doc

Set doc=nothing

Set doc=openwork.newobject("document")

doc.style=1

doc.id=2

coll.add doc

Set doc=nothing

Set doc=openwork.newobject("document")

doc.style=1

doc.id=3

coll.add doc

Set doc=nothing

thisprocess.activities(5).replicate 3,0,coll

4

Riservato

5

Riservato


ResolveRelativeFormula

Function ResolveRelativeFormula(Formula As String, [Source As Activity = Nothing])

As String

Risolve una formula relativa in una formula assoluta (contenente cioè solo gruppi, uffici, ruoli e operatori). Con il parametro Source si può passare un riferimento ad un'altra attività che viene utilizzata nelle formule del tipo "Operatore che ha eseguito l'attività precedente"


Save

Function Save() As Boolean

Permette il salvataggio di eventuali modifiche eseguite sulle proprietà dell'attività. Restituisce valore vero se il salvataggio ha esito positivo.


SetSupposed

Function SetSupposed(vData) As Boolean

Permette l'impostazione della data pianificata (in agenda da un operatore) per l'esecuzione.

Esempio

Set act = thisprocess.activities(2)

act.setsupposed(<<gg/mm/aaaa>>)

act.save 'operazione necessaria affinché la modifica abbia effetto

data_prevista = act.supposed

Set act = Nothing


SetTimer

Sub SetTimer([Interval As String], [Quantity As Long = 0], [RifDate])

Modifica le impostazioni per un nodo di tipo timer; i parametri sono opzionali.

Interval può essere n (minuti) h (ore) d (giorni) e wd (giorni lavorativi).

Il metodo ha effetto solo se la proprietà "Impostazioni Timer" dell'attività è impostata come "Impostazione Manuale".

È possibile agire sui parametri evidenziati in figura:

CLib02 - timer

Esempio

'Settaggio timer

'calcola la nuova data da settare nel Timer togliendo 5 giorni dal valore contenuto

nel campo "data" del documento che ha avviato il processo

d1 = DateAdd("d", -5, CDate(ThisProcess.StartDocument.GetFieldValue("data")))

'il timer e' il nodo con ID=45

Set act = ThisProcess.Activities(45)

'setta il timer un minuto dopo la data calcolata "d1"

act.SetTimer "n", 1, d1

act.Save 'operazione obbligatoria affinché la modifica abbia effetto

Set act = Nothing


VarCount

Function VarCount() As Long

Restituisce il numero di variabili di attività definite per quella attività.

Esempio

Dim NumVar

ThisActivity.AddVar "Var1", 2000

ThisActivity.AddVar "Var2", "Seconda variabile"

NumVar = ThisActivity.VarCount

La variabile NumCount varrà 2.


Proprietà

Di seguito l'elenco delle proprietà relative alla classe Activity.

Le proprietà non presenti nel seguente elenco non sono utilizzabili.

· AbsolutePartecipants
· ActivationDate
· AdditionalID
· BookingDate
· CompletedLinks
· CompletionDate
· Counter
· DefaultAddresses
· Description
· DocModelID
· Document
· DocumentDescription
· DocumentId
· DocumentStyle
· ErrCode
· ErrDescription
· ExecutionDate
· FolderID
· HasExitCondition
· hProcess
· ID
· Memo
· MessageType
· NewModelID
· Numerable
· Partecipants
· Pkey
· Priority
· ProcessID
· ProcessModelID
· ReadOnly
· RealDefaultAddresses
· RealPartecipants
· SelectionValue
· SignNumber
· Skipable
· Status
· Storable
· Style
· Supposed
· TimeElapsed
· User


AbsolutePartecipants

Property AbsolutePartecipants As String

Permette di leggere e/o impostare i partecipanti assoluti di un'attività.

Leggere la proprietà ha senso quando l'attività è attiva, cioè il suo stato è diverso da zero, mentre impostarla ha senso solo se la stessa si trova nello stato "in attesa di prenotazione".


ActivationDate

Property ActivationDate As Date

Sola lettura. Restituisce la data dell'ultima attivazione di un nodo (vedi tabella degli stati di una attività). Un nodo è attivo quando è stato interessato dal flusso (sino a quel momento è nello stato disabilitato).

Nel caso in cui il flusso ritorna su di un nodo, la proprietà restituisce solo la data dell'ultimo passaggio. Per poter risalire alle date precedenti è possibile consultare il log del processo.

Nel caso in cui il nodo non sia mai stato attivato sarà restituito il valore "01/01/1001".


AdditionalID

Property AdditionalID As Long

Si tratta di una proprietà che assume significati diversi a seconda del contesto:

· in un nodo di processo o di sottoprocesso restituisce l'ID del processo creato;
· in un nodo di apertura fascicolo o creazione fascicolo restituisce l'ID del fascicolo creato;
· in un nodo di notifica restituisce l'ID del messaggio creato;
· in un nodo di fascicolazione documento restituisce l'ID del fascicolo in cui il documento viene inserito;
· in un nodo di archiviazione fascicolo restituisce l'ID del fascicolo da archiviare.

Negli altri casi restituisce il valore 0.

nota

Nota

Nel caso del nodo di apertura fascicolo AdditionalID assume lo stesso valore della proprietà FolderID.


BookingDate

Property BookingDate As Date

Sola lettura. Restituisce la data dell'ultima prenotazione di un nodo. (cfr. ActivationDate)

Se i partecipanti non sono settati viene restituita la data nel seguente formato: 01/01/1001.


CompletedLinks

Property CompletedLinks As String

Sola lettura. In un oggetto nodo di AND restituisce gli identificativi dei link che sono già giunti sul nodo di AND nella sintassi:

;IDLnk1;IDLnk2;…;IDLnkN;

ove IDlnk è l'identificativo del link (quello mostrato nella tooltip nello strumento di gestione delle istanze di processo nell'openwork® BPM Tools).


CompletionDate

Property CompletionDate As Date

Sola lettura. Restituisce la data dell'ultimo completamento di un nodo. Vedere ActivationDate.


Counter

Property Counter As Long

Sola lettura. Restituisce il numero di passaggi effettuati dal nodo.


DefaultAddresses

Property DefaultAddresses As String

A seconda del tipo di attività permette di leggere/impostare:

Tipo di attività | ActivityType | Cosa imposta
notifica | 22 | destinatari da anagrafica
elaborazione documento | 6 | partecipanti esterni
nuovo documento in entrata | 2 | mittenti predefiniti/partecipanti esterni
nuovo documento in uscita | 3 | destinatari predefiniti/partecipanti esterni
nuovo documento interno | 4 | corrispondenti predefiniti/partecipanti esterni

I destinatari di anagrafica si impostano tutti insieme concatenando, separandoli dal ";", i codici di anagrafica e le possibili formule di anagrafica:

o SPI - identifica il mittente del documento che ha avviato il processo.
o AA x - identifica il destinatario del documento dell'attività con identificativo x.
o AS x - identifica il mittente del documento dell'attività con identificativo x.

Anteporre il prefisso "CLI" poichè viene utilizzato il codice di anagrafica.

Esempio

Dim act

Set act = ThisProcess.Activities(10)

act.DefaultAddresses = ";R 4;U 11;PU ;SPI;CLI000517;"

act.save

Il mittente predefinito si imposta attraverso la proprietà Partecipants. Se vengono specificati più elementi verrà preso in considerazione solo il primo.

nota

Nota

Dopo aver impostato il valore della proprietà occorre richiamare il metodo Save per poter salvare le impostazioni.


Description

Property Description As String

Permette di leggere e/o impostare la descrizione di una attività. Nel caso di un nodo di notifica coincide con l'oggetto del messaggio. Il suo utilizzo è consigliato per rendere più chiare le attività presenti in agenda.

Esempio

tpr = thisprocess.startdocument.getfieldvalue("Tipo di richiesta")

au = thisprocess.startdocument.author

' ---------- Cambia descrizione attività ------------

descr = "Esaminare la richiesta di " & tpr & " da parte di " & au

Set act = ThisProcess.Activities(10)

act.description = descr

act.save

Set act = nothing


DocModelID

Property DocModelID As Long

Sola lettura. Restituisce un riferimento al documento o alla tipologia di documento da trattare nell'attività:

· in attività di creazione documento in entrata, uscita, interno restituisce l'ID della voce di classificazione del documento;
· negli altri casi ove utilizzabile restituisce uno dei seguenti valori all'attività con identificativo x.

-1 | indica un riferimento al documento associato all'attività precedente.
-2 | indica un riferimento al documento che ha avviato il processo.
-3 | indica un riferimento al fascicolo associato al processo.
-4 | indica un riferimento ad un documento impostato da script
0 | indica una assenza di riferimento ad un documento
x>0 | indica un riferimento al documento (dello stesso processo) associato


Document

Property Document As Object

Restituisce o imposta un oggetto delle classi Document o Folder che rappresenta il documento eventualmente associato all'attività.

Esempi

· L'esempio che segue permette di referenziare il valore del campo "Parere del dirigente" del documento elaborato o in elaborazione nell'attività corrente (ThisActivity).

ThisActivity.Document.GetFieldValue("Parere del dirigente")

nota

Nota

La funzione restituisce sempre un oggetto (tranne in caso di grave errore di automazione), quindi per verificare se l'attività ha un documento associato occorre verificare la proprietà ID dell'oggetto restituito da questa proprietà.

· Di seguito viene riportato uni script di esempio:

Dim f, att

Set f = Openwork.NewObject("folder")

f.AddNew 1, , , 4

f.SetFieldValue "oggetto", "creato da script"

If f.Update(False) Then

Set att = ThisProcess.Activities(2)

Set att.Document = f

If att.Save Then

activity_ExitCondition = True

Else

... gestione errore

End If

Else

... gestione errore

End If

Set f = Nothing

Set att = Nothing


DocumentDescription

Property DocumentDescription As String

Sola lettura. Restituisce la descrizione dell'eventuale documento associato all'attività.


DocumentId

Property DocumentId As Long

Sola lettura. Restituisce l'identificativo dell'eventuale documento associato all'attività.


DocumentStyle

Property DocumentStyle As Long

Sola lettura. Restituisce lo style - <DocumentType> - dell'eventuale documento associato all'attività.


ErrCode

Property ErrCode As Long

Sola lettura. Restituisce il codice dell'ultimo errore avvenuto nell'oggetto corrente.

nota

Nota

Dopo aver richiamato questa proprietà il codice dell'errore viene azzerato.


ErrDescription

Property ErrDescription As Long

Sola lettura. Restituisce la descrizione dell'ultimo errore avvenuto nell'oggetto della classe attività corrente.

nota

Nota

Dopo aver richiamato questa proprietà il codice dell'errore viene azzerato.


ExecutionDate

Property ExecutionDate As Date

Sola lettura. Restituisce la data dell'ultima esecuzione di un nodo. (cfr. ActivationDate)


FolderID

Property FolderID As Long

Restituisce l'identificativo del fascicolo associato al processo corrente, se esiste.


HasExitCondition

Property HasExitCondition As Boolean

Sola lettura. Restituisce un valore vero se l'attività possiede una condizione di completamento diversa da quella intrinseca (ossia se esiste uno script nella condizione di completamento).


hProcess

Property hProcess As Long

Sola lettura. In un sottoprocesso restituisce l'ID del processo principale (main process) in cui il sottoprocesso viene richiamato.

Assume lo stesso valore di ProcessID nel caso in cui non esiste un processo chiamante.

Esempio

La variabile SottoProcesso restituisce true o false a seconda che ci si trovi o meno in un sottoprocesso:

SottoProcesso = (ThisActivity.ProcessID <> ThisActivity.hProcess)


ID

Property ID As Long

Permette di impostare e/o leggere l'ID di un oggetto attività.

Nello script che segue viene creato un oggetto della classe Activity e lo si fa puntare all'attività n° 7 del disegno di flusso.

Una volta impostato il valore di ID (e solo dopo aver impostato anche il ProcessID) l'oggetto viene inizializzato in maniera da contenere tutte le proprietà di quella attività e poter eseguire metodi su quella attività.

Esempio

Dim attività

set attività = openwork.newobject("ACTIVITY")

attività.ProcessID = ThisActivity.ProcessID

attività.ID = 7


Memo

Property Memo As String

Permette di impostare e/o leggere le istruzioni operative di un nodo di attività che le prevede. Nel caso di un nodo di notifica permette di leggere/impostare il testo del messaggio. Nell'esempio che segue viene modificato il testo di un messaggio di notifica:

Esempio

Dim attività

set attività = openwork.newobject("ACTIVITY")

attività.ProcessID = ThisActivity.ProcessID

attività.id = 7

attività.memo = "Testo del messaggio"

attività.save


MessageType

Property MessageType As MessageType

Sola lettura. Valida in un nodo di notifica. Restituisce il tipo di messaggio:

· mtInner(0) messaggio interno
· mtMail(2) e-mail


NewModelID

Property NewModelID As Long

Imposta o restituisce:

· in una attività di creazione o apertura fascicolo l'ID del modello di fascicolo;
· in una attività di sottoprocesso o di nuovo processo l'ID del modello di processo indicato;
· in una attività di firma documento il numero della firma (da 1 a 10);


Numerable

Property Numerable As Boolean

Imposta o restituisce, nel caso in cui si stia operando in regime di numerazione manuale, il flag riguardante la possibilità, per l'operatotre che esegue l'attività, di numerare o meno il documento su cui si lavora. Ha effetto solo nell'attività corrente.


Partecipants

Property Partecipants As String

Imposta e/o restituisce i partecipanti di un'attività utilizzando una formula relativa.

La proprietà ha effetto solo quando un nodo viene attivato: ad ogni attivazione vengono risolti i partecipanti (indicati con espressioni relative) in partecipanti assoluti.

Attraverso la proprietà Partecipants è possibile impostare il mittente predefinito; se vengono specificati più elementi verrà preso in considerazione solo il primo.

Esempio

Esempio di stringa restituita : "U 1; R 3; U 10"


Pkey

Property Pkey As String

Imposta e/o restituisce una chiave associata all'attività.

Nel BPM Tools tale proprietà viene impostata scegliendo dal menù contestuale di un'attività del WorkFlow Designer la voce Classe e impostando la chiave prescelta.

<br> <br> Classe di un'attivita'

Classe di un'attivita'

Essa potrà essere utilizzata, ad esempio, per filtrare l'agenda delle attività in modo da visualizzare solo quelle attività "catalogate" con un determinato valore assegnato alla proprietà Pkey (ad esempio: "inserimento_firma"); oppure per visualizzare determinati campi all'interno di una Form solo quando questa viene aperta in associazione ad un'attività "catalogata" con una determinata Pkey, semplicemente effettuando un controllo sulla funzione CustomonLoad della Form.

Esempio

function customonload()

{

...

var x=doc();

var c_att=x.selectSingleNode("//owk:context/owk:activity/owk:pkey");

var classe = isNull(c_att) ? '0' : c_att.text; //la variabile classe viene

valorizzata solo se esiste una catalogazione dell'attività

...

}


Priority

Property Priority As Integer

Imposta e/o restituisce la priorità dell'attività (numero compreso tra 0 e 4).


ProcessID

Property ProcessID As Long

Imposta e/o restituisce l'ID del processo cui l'attività appartiene. Vedere anche ID per un esempio di inizializzazione dell'oggetto attività mediante l'impostazione del ProcessID e dell'ID.


ProcessModelID

Property ProcessModelID As Long

Restituisce l'ID del modello di processo cui l'attività appartiene.


ReadOnly

Property ReadOnly As Boolean

Può essere utilizzata per impostare o per leggere il valore del flag di sola lettura del documento associato all'attività. Ha effetto solo nell'attività corrente.


RealDefaultAddresses

Property RealDefaultAddresses As String

Sola lettura. Restituisce una stringa indicante i Codici Anagrafica di mittenti predefiniti, destinatari predefiniti, destinatari da anagrafica dopo aver risolto eventuali formule contenute nella DefaultAddresses. Il valore è disponibile solo dopo l'attivazione del nodo.


RealPartecipants

Property RealPartecipants([vType As Integer = 0]) As Variant

Sola lettura. Restituisce un riferimento ai partecipanti effettivi dell'attività. Il tipo di valore restituito dipende dal parametro vType:

Valore | Descrizione
0 | Parametro di default. Stringa contenente gli ID degli operatore di organigramma separati da ";"
1 | Vettore di stringhe che riportano il percorso completo nell'organigramma di ciascun operatore. ad es. "Andrea Bianchi (Responsabile\Ufficio Relazioni con il Pubblico)"
2 | Collection di oggetti della classe User.
3 | Oggetto di classe DOMDocument strutturato come segue: <realpartecipants xmlns="http://www.openwork.info/schema" <user id="23" name="Andrea Bianchi (Responsabile\Ufficio Relazioni con il Pubblico)"/> </realpartecipants>


SelectionValue

Property SelectionValue([Force As Boolean = Falso])

Sola lettura. Rappresenta il Valore della Selezione in un'attività di decisione automatica.

Utilizzata normalmente nelle condizioni logiche dei rami di uscita da un nodo di selezione automatica.

Passando il valore True per il parametro Force viene forzato il ricalcolo della funzione (il cui script è stato posto nella sezione "Valore della Selezione" dell'attività di decisione automatica).


SignNumber

Property SignNumber As Integer

Sola lettura. Restituisce il numero di firma (da 1 a 10) relativo ad un'attività di firma documento.


Skipable

Property Skipable As Boolean

Sola lettura. Indica se l'attività in questione può essere "saltata" dall'operatore mediante l'apposita funzione dell'agenda.


Status

Property Status As ActivityStatus

Restituisce o imposta lo stato dell'attività.

attenzione

Attenzione

L'impostazione dello stato di un'attività è un'operazione da effettuare con estrema cautela e solo con una motivazione ben precisa; normalmente lo stato viene impostato dal motore di workflow (openwork® Manager) in accordo con il flusso del processo. Se si imposta lo stato occorre utilizzare il metodo Save per memorizzare i dati.


Storable

Property Storable As Boolean

Indica se è possible o meno l'archiviazione del documento legato all'attività. Valido solo se nell'attività viene elaborato un documento.


Style

Property Style As ActivityType

Sola lettura. Restituisce il tipo di attività (consultare l'apposita tabella).


Supposed

Property Supposed As String

Sola lettura. Restituisce la data pianificata (in agenda da un operatore) per l'esecuzione.


TimeElapsed

Property TimeElapsed([Interval As String]) As Long

Sola lettura. Valido esclusivamente per un oggetto attività di tipo timer.

Restituisce il tempo trascorso (o mancante a seconda delle impostazioni del timer) dalla data che fa innescare il timer.

L'unità di misura è quella impostata nel timer. Il parametro Interval non è attualmente utilizzato.


User

Property User As User

Restituisce o imposta, per l'attività un oggetto di tipo User.

Per quanto riguarda una attività già eseguita viene restituito un oggetto User relativo all'operatore che ha eseguito l'attività. Per una attività in corso di esecuzione (oppure prenotata) restituisce l'oggetto User relativo all'operatore che sta eseguendo o che ha prenotato.

Per un'attività mai interessata dal flusso restituisce un oggetto non inizializzato (cioè con ID 0).


Classe AttachedDocument

Rappresenta un file allegato ad una form.

In questa sezione vengono riportate le Proprietà della classe AttachedDocument.


Proprietà

Di seguito l'elenco delle proprietà relative alla classe AttachedDocument.

Le proprietà non presenti nel seguente elenco non sono utilizzabili.

· AdditionalClass
· AdditionalClassID
· AttDate
· AttLockDate
· AttLockUser
· AttUser
· External
· ExternalID
· ExternalShow
· FileName
· FilePath
· FileSize
· ID
· LastVersion
· Note
· OriginalID
· Primary
· Repository
· Selection
· SendEMail
· SHA1
· Version


AdditionalClass

Property AdditionalClass As String

Sola Lettura. Restituisce la descrizione di un’ eventuale classificazione supplementare.


AdditionalClassId

Property AdditionalClassId As Long

Sola Lettura. Restituisce l'identificativo di un’ eventuale classificazione supplementare.


AttDate

Property AttDate As Date

Sola Lettura. Restituisce la data di inserimento di un file allegato.

Esempio

Dim att

Dim data

Set att=thisprocess.startdocument.attachments

If att.count <> 0 Then

For Each allegato In att

data = allegato.AttDate

thisprocess.writedebug "AttDate: " &data

Next

End If

Set att=Nothing

Risultato

18/05/2010 09:34 AttDate: 15/05/2010

18/05/2010 09:34 AttDate: 17/05/2010


AttLockDate

Property AttLockDate As Date

Sola Lettura. Restituisce la data in cui il file allegato è stato bloccato.

Esempio

Dim att

Dim dataLock

Set att=thisprocess.startdocument.attachments

If att.count <> 0 Then

For Each allegato In att

dataLock = allegato.AttLockDate

thisprocess.writedebug "AttLockDate :" &dataLock

Next

End If

Set att=Nothing

Risultato

18/05/2010 09:34 AttLockDate : 18/05/2010

18/05/2010 09:34 AttLockDate : 18/05/2010


AttLockUser

Property AttLockUser As Long

Sola lettura . Restituisce l’identificativo dell’utente che ha bloccato il file.

Esempio

Dim att

Dim userLock

Set att=thisprocess.startdocument.attachments

If att.count <> 0 Then

For Each allegato In att

userLock = allegato.AttLockDate

thisprocess.writedebug "AttLockUser :" &userLock

Next

End If

Set att=Nothing

Risultato

18/05/2010 09:41 AttLockUser: 4

18/05/2010 09:41 AttLockUser: 4


AttUser

Property AttUser As Long

Sola lettura . Restituisce l’identificativo dell’utente che ha inserito il file.

Esempio

Dim att

Dim userAtt

Set att=thisprocess.startdocument.attachments

If att.count <> 0 Then

For Each allegato In att

userAtt = allegato.AttUser

thisprocess.writedebug "AttUser :" &userAtt

Next

End If

Set att=Nothing

Risultato

18/05/2010 09:41 AttUser: 2

18/05/2010 09:41 AttUser: 2


External

Property External As Boolean

Sola lettura . Restituisce TRUE se il file allegato non è presente nel repository, FALSE se è presente in un repository esterno.


ExternalID

Property ExternalID As String

Sola lettura . Restituisce l' identificativo dell' allegato relativo al repository esterno.


ExternalShow

Property ExternalShow As Boolean

Proprietà obsoleta.


FileName

Property FileName As String

Sola lettura . Restituisce il nome del file allegato.

Esempio

Dim att

Dim nome

Set att=thisprocess.startdocument.attachments

If att.count <> 0 Then

For Each allegato In att

nome = allegato.FileName

thisprocess.writedebug "FileName:" &nome

Next

End If

Set att=Nothing

Risultato

17/05/2010 18:30 FileName: Test do2.doc

17/05/2010 18:30 FileName: Test doc2.txt


FilePath

Property FilePath As String

Sola lettura . Restituisce il percorso relativo all' interno del repository.

Esempio

Dim att

Dim path

Set att=thisprocess.startdocument.attachments

If att.count <> 0 Then

For Each allegato In att

path = allegato.FilePath

thisprocess.writedebug "FilePath:" path

Next

End If

Set att=Nothing

Risultato

18/05/2010 10:37 FilePath :INT\DIR0000000-0000199\000000068 (1)

18/05/2010 10:37 FilePath :INT\DIR0000000-0000199\000000068 (2)


FileSize

Property FileSize As Double

Sola lettura . Restituisce la dimensione del file allegato.


ID

Property ID As Long

Sola lettura . Restituisce l'identificativo del file allegato.


LastVersion

Property LastVersion As Boolean

Sola lettura . Restituisce TRUE se si tratta dell' ultima versione dell' allegato, FALSE altrimenti .


Note

Property Note As String

Sola lettura . Restituisce il contenuto del campo note presente nella sezione degli attachments.


OriginalID

Property OriginalID As Long

Sola lettura . Se si tratta di un link, restituisce l' identificativo dell' allegato originale, altrimenti restituisce 0.


Primary

Property Primary As Boolean

Sola lettura . Restituisce TRUE se il file allegato è primario, FALSE altrimenti.


Repository

Property Repository As String

Sola lettura . Restituisce il nome del repository esterno in cui si trova il file.


Selection

Property Selection As Boolean

Sola lettura . Restituisce TRUE se è impostato il flag di selezione, FALSE altrimenti.


SendEmail

Property SendEmail As Boolean

Proprietà obsoleta. cfr. Selection


SHA1

Property SHA1 As String

Sola lettura . Restituisce l' impronta del file allegato.

Esempio

Dim att

Dim SHA1

Set att=thisprocess.startdocument.attachments

If att.count <> 0 Then

For Each allegato In att

SHA1 = allegato.SHA1

thisprocess.writedebug "SHA1:" SHA1

Next

End If

Set att=Nothing

Risultato

18/05/2010 10:55 SHA1 :242DBD48751EB03DE12F7730C1ABA180206EDAB

18/05/2010 10:55 SHA1 :91102ACE2B30ADE316E539DDA5E424B229DE1B7C


Version

Property Version As Long

Sola lettura . Restituisce la versione del file allegato.


AttachedFile (checkmail)

Rappresenta una collezione di metodi e proprietà (metadati) associati ad un file allegato (Attachments) e-mail. Classe che appartiene alla libreria checkmail.

In questa sezioni vengono riportati i Metodi e le Proprietà della classe AttachedFile.

approfondimento

Approfondimento

Sono disponibili per gli sviluppatori le classi della libreria checkmail che permettono l'utilizzo, all’interno dei processi gestiti dal workflow manager di openwork®, di server POP3 ed SMTP per la ricezione e l’invio delle e-mail.

È dunque possibile realizzare processi in grado di monitorare caselle di e-mail e di conseguenza prendere decisioni in base alle e-mail pervenute oppure semplicemente procedere alla loro distribuzione, gestione, archiviazione.

È anche possibile inviare in modo automatico (in base a regole definite nel processo) e-mail.

La libreria checkmail è costituita dalle seguenti classi:

· Classe Mail
· Classe Attachments
· Classe AttachedFile


Metodi

Di seguito l'elenco dei metodi relativi alla classe AttachedFile:

· Save


Save

Function Save(DestinationPath As String) As Boolean

Permette di salvare un file allegato nel percorso specificato tramite il parametro DestinationPath.


Proprietà

Di seguito l'elenco delle proprietà relative alla classe AttachedFile:

· ErrDescription
· FileLength
· FileName


ErrDescription

Property ErrDescription As String

Sola lettura. Restituisce la descrizione dell’ultimo errore verificatosi. E’ buona norma richiamarla dopo la restituzione del valore False richiamando un metodo.


FileLength

Property FileLength As Long

Sola lettura. Restituisce la lunghezza del file allegato.


FileName

Property FileName As String

Sola lettura. Restituisce il nome del file allegato.


Classe Attachments (checkmail)

Rappresenta un file allegato ad un messaggio e-mail. Classe che appartiene alla libreria checkmail.

In questa sezione vengono riportate le Proprietà della classe Attachments.

approfondimento

Approfondimento

Sono disponibili per gli sviluppatori le classi della libreria checkmail che permettono l'utilizzo, all’interno dei processi gestiti dal workflow manager di openwork®, di server POP3 ed SMTP per la ricezione e l’invio delle e-mail.

È dunque possibile realizzare processi in grado di monitorare caselle di e-mail e di conseguenza prendere decisioni in base alle e-mail pervenute oppure semplicemente procedere alla loro distribuzione, gestione, archiviazione.

È anche possibile inviare in modo automatico (in base a regole definite nel processo) e-mail.

La libreria checkmail è costituita dalle seguenti classi:

· Classe Mail
· Classe Attachments
· Classe AttachedFile


Proprietà

Di seguito l'elenco delle proprietà relative alla classe Attachments.

· Count
· Item


Count

Property Count As Long

Sola lettura. Restituisce il il numero di file allegati al messaggio.


Item

Property Item(Index) As AttachedFile

Sola lettura. Restituisce un oggetto AttachedFile per l'allegato selezionato tramite il parametro Index.


Classe Client

Permette la gestione delle schede di anagrafica di persone fisico/giuridiche di openwork®.

Sono, inoltre, accessibili tramite oggetti della classe Client anche le informazioni anagrafiche degli operatori del sistema.

Un oggetto di questa classe viene inizializzato specificando una delle proprietà ID, NumericID, OpenworkUserID oppure usando la funzione FindClient.

In questa sezione vengono riportati i Metodi e le Proprietà della classe Client.


Metodi

Di seguito l'elenco dei metodi relativi alla classe Client.

I metodi non presenti nel seguente elenco non sono utilizzabili.

· AddAttachedDocument
· AddContext
· AddNew
· BeginTransaction
· CommitTransaction
· CopyAttachedDocument
· DeleteAttachedDocument
· FindClient
· Freeze
· GetFieldValue
· GetXML
· LinkAttachedDocument
· RollbackTransaction
· SaveAttachedDocument
· SetAttachmentProperty
· SetFieldValue
· UnFreeze
· Update


AddAttachedDocument

Function AddAttachedDocument(FilePath As String, _

[Description As String = ""], _
[UserID As Long = 0], _
[External As Boolean = False], _
[Selection As Boolean = False], _
[Size As Double = 0], _
[ExternalShow As Boolean = False], _
[Primary As Boolean = False], _
[SHA1 As String = ""], _
[Repository As String = ""], _
[ExternalID As String = ""], _
[AdditionalClass As String = ""], _
[AdditionalClassId As Long = 0], _
[NewVersion As Long = -1], _
[CompressionType As Long = 0], _
[FileName As String = ""], _
) As Boolean

Permette di allegare un file alla scheda di anagrafica puntata dall'oggetto Client.

In FilePath si deve passare la path completa del file da allegare; il nome del file sarà il nome che identificherà in seguito l'allegato, ad eccezione del caso in cui il file è informato compresso (si veda il significato del parametro FileName)

Significato dei parametri opzionali:

· Description: descrizione supplementare o annotazioni;
· UserID: ID dell'operatore (da organigramma) che effettua l'operazione. Se non viene specificato alcun ID di operatore il file risulterà allegato da parte del sistema;
· External: il file non è importato nel repository dei file di openwork® ma considerato come esterno;
· Selection: viene impostato il flag di selezione (utilizzato per l'invio con email o per la stampa su server);
· Size: dimensione del file; se questo parametro non viene passato la dimensione viene calcolata, se possibile;
· ExternalShow: mostra ad utenti esterni (attualmente non implementato);
· Primary: il file è primario per il documento;
· SHA1: impronta del file;
· Repository: nome del repository esterno in cui il file si trova o deve essere memorizzato (attualmente è implementato solo il caso in cui il file sia già presente nel repository);
· ExternalID: identificativo esterno nel caso di appartenenza ad un repository esterno;
· AdditionalClass: descrizione di una eventuale classificazione supplementare;
· AdditionalClassId: identificativo di una eventuale classificazione supplementare;
· NewVersion: può assumere diversi valori con i seguenti significati:

< 0: se è già allegato un file con lo stesso nome restituisce un errore (default);

0: se è già allegato un file con lo stesso nome sovrascrive l'ultima versione;

> 0: se è già allegato un file con lo stesso nome crea una nuova versione;

· CompressionType: specifica il tipo di compressione del file che è stato passato; può assumere i seguenti valori:

0: nessuna

1: compressione ZIP

· FileName: specifica, nel caso di file in formato compresso, il nome del file contenuto all'interno del pacchetto; se non è specificato il nome viene ricavato ispezionando il pacchetto.

N.B. questo nome sarà quello utilizzato in seguito per identificare l'allegato

Esempio

Dim objAnag

Dim strPercorso

Dim ok

Set objAnag = openwork.newobject("Client")

'inizializzazione dell'oggetto di tipo Client

objAnag.ID = "000068"

strPercorso = "D:\miaCartella\MioFile.doc"

'allega un file come primario; se il file esiste crea una nuova versione

ok = objAnag.AddAttachedDocument(strPercorso,,,,,,,1,,,,,,1)

if ok then

...

Else

'gestione dell'errore

End if


AddContext

Function AddContext(FieldName As String, AttributeName As String,AttributeValue)

As Boolean

Mediante questa funzione è possibile impostare i parametri di contesto (visibilità, modificabilità, etc.) su uno dei campi del documento; l'impostazione viene memorizzata nell'istanza del documento ed ha la prevalenza su quella impostata nel modello di form (se esiste un'impostazione specifica in una attività di un processo, quest'ultima ha la prevalenza sulle precedenti).

Inoltre passando come valore del parametro FieldName una stringa del tipo action_nomeaction è possibile impostare, tramite contesto, la visibilità di un azione.

La funzione restituisce Vero (true) o Falso (false) a seconda che l'operazione sia andata a buon fine oppure no. In caso negativo l'errore si legge con la proprietà ErrDescription

Esempio

Dim objAnag

Dim blnErr

Set objAnag = openwork.newobject("Client")

'inizializzazione dell'oggetto di tipo Client

objAnag.ID = "000089"

'il campo "sigla" diventa non modificabile lato client

blnErr = objAnag.AddContext("sigla", "changeable", 0)

if Not blnErr then

'gestione errore

End if


AddNew

Function AddNew([ModelID As Long][, IsCompany As Boolean = Vero]) As Boolean

Il metodo permette la creazione di una nuova scheda di anagrafica.

Il primo parametro da passare è l'ID della tipologia di scheda di anagrafica da creare. Tale valore può essere letto aprendo lo strumento per la Gestione delle tipologie di schede di anagrafica:

CLib03 - anagraphic

Il secondo parametro indica se deve essere creata una scheda di persona fisica oppure no (predefinito).

Esempio

Dim objAnag

Dim doc

Set doc = ThisActivity.Document

Set objAnag = openwork.newobject("Client")

objanag.addnew 4  'la tipologia 4 identifica i prodotti

objanag.setfieldvalue "Codice prodotto", doc.GetFieldValue("Codice prodotto")

objanag.setfieldvalue "Descrizione", doc.GetFieldValue("Descrizione prodotto")

objanag.update

Set objanag = Nothing

Set doc = Nothing

Deve essere sempre utilizzato il metodo Update dell'oggetto Client per poter memorizzare la scheda creata con Addnew.

attenzione

Attenzione

Il salvataggio del documento è subordinata alla valorizzazione dei campi obbligatori: se non vengono impostati tutti i campi obbligatori il salvataggio del documento (metodo Update) fallirà.


BeginTransaction

Function BeginTransaction() As Boolean

Inizia una transazione sull'oggetto client: da utilizzare nel caso in cui si voglia utilizzare il metodo SetFieldValue dell'oggetto più volte di seguito per memorizzare le informazioni in un'unica transazione.

Non può essere utilizzata all'interno di un blocco AddNew…Update.

Esempio

Dim objAnag

Set objAnag = openwork.newobject("Client")

objAnag.ID = ThisProcess.getvar("CodiceProdotto")

if objanag.BeginTransaction then

if not objAnag.SetFieldValue "Prezzo", ThisProcess.GetVar("Prezzo") then

objanag.RollbackTransaction

exit sub

end if

if not objAnag.SetFieldValue "Fornitore", ThisProcess.GetVar("Fornitore") then

objanag.RollbackTransaction

exit sub

end if

objanag.CommitTransaction

End if

Set objanag = nothing


CommitTransaction

Function CommitTransaction() As Boolean

Completa la transazione iniziata con il BeginTransaction. Vedere esempio riportato in BeginTransaction.


CopyAttachedDocument

Function CopyAttachedDocument(Att[, UserID As Long][, NewVersion As Long = -1])

As Boolean

Att è un oggetto della classe AttachedDocument che punta, ad esempio, un file allegato ad un documento o altro. Il metodo permette di ottenere in allegato alla scheda di anagrafica corrente un file copia del file passato attraverso l'oggetto Att. Inoltre è possibile impostare opzionalmente tramite UserID sia l'ID dell'operatore che si vuole, sia l'autore dell'operazione. Se non viene passato tale ID l'autore dell'operazione sarà il Sistema.

Il parametro NewVersion può assumere diversi valori con i seguenti significati:

· < 0 se è già allegato un file con lo stesso nome restituisce un errore (default).
· 0 se è già allegato un file con lo stesso nome sovrascrive l'ultima versione.
· > 0 se è già allegato un file con lo stesso nome crea una nuova versione.

Non può essere utilizzata all'interno di un blocco AddNew … Update.

Esempio

Copia in una scheda di anagrafica il file "Allegato.pdf" che è allegato ad un altro documento

'imposto la scheda anagrafica dell'Amministratore di Sistema su cui

'copiare gli allegati

Set FinishDoc = openwork.newobject("Client")

FinishDoc.numericid = 3 ' ID numerico di "Amministratore di Sistema"

'imposto il Documento Interno con ID=1 come documento da cui copiare gli allegati

Set StartDoc = openwork.newobject("Document")

StartDoc.style = 3

StartDoc.id = 1

'creo l'oggetto "allegati" valorizzato tramite la Collection Attachments di "doc"

Set allegati = StartDoc.Attachments

For nCiclo = 1 to allegati.Count

Set fileAllegato = allegati(nCiclo)

WriteDebug("ID allegato n. " & Cstr(nCiclo) & ": " & Cstr(fileAllegato.ID) )

blnErr = FinishDoc.CopyAttachedDocument(fileAllegato)

WriteDebug("Attachment n. " & Cstr(nCiclo) & ". Allegato? " & Cstr(blnErr))

Next

Set fileAllegato= Nothing

Set FinishDoc = Nothing

Set StartDoc = Nothing

Set allegati = Nothing


DeleteAttachedDocument

Function DeleteAttachedDocument(FileName As String[, Force As Boolean = Falso]

                               [, Version As Long]) As   Boolean

Il metodo permette di eliminare il file passato tramite il suo nome (FileName) e versione (Version). Se si omette la versione viene referenziata l'ultima disponibile per quel file. Il parametro Force non è attualmente utilizzato.

Non può essere utilizzata all'interno di un blocco AddNew…Update.

Esempio

Dim objAnag

Dim blnErr

Set objAnag = openwork.newobject("Client")

blnErr = objAnag.DeleteAttachedDocument("Offerte.doc",,2)

if (blnErr = false) then

'gestione errore

else

objAnag.Update

End if

Set objAnag = Nothing


FindClient

Function FindClient(ByName As String) As Boolean

Permette di cercare attraverso la Ragione Sociale (Persona Giuridica) o il Nominativo (Persona Fisica) la prima scheda di anagrafica che risponde al criterio. La funzione va utilizzata dunque solo ed esclusivamente se si ha garanzia di univocità dell'informazione memorizzata nei campi citati. Se la scheda viene trovata, la funzione restituisce valore vero e l'oggetto viene inizializzato puntando quella scheda di anagrafica.

Esempio

Dim objAnag

Dim blnErr

Set objAnag = openwork.newobject("Client")

blnErr = objAnag.FindClient("Net Sistemi s.r.l.")

if blnErr then

' trovata

End if

Set objAnag = Nothing


Freeze

Function Freeze([UserID As Long = 0]) As Boolean

Blocca la scheda impedendo modifiche dall'interfaccia operatore. La scheda sarà aperta in sola lettura, fino a che non verrà sbloccata da un operatore autorizzato o dalla funzione UnFreeze. Questa funzione non può essere utilizzata all'interno di un blocco AddNew…Update o di un blocco BeginTransaction... CommitTransaction.

Esempio

Dim objAnag

Dim blnErr

Set objAnag = openwork.newobject("Client")

'inizializzazione dell'oggetto di tipo Client

objAnag.ID = "000127"

blnErr = objAnag.Freeze(5) 'risulterà bloccata dall'utente con ID 5

if Not blnErr then

'gestione errore

End if

Set objAnag = Nothing


GetFieldValue

Function GetFieldValue(FieldName As String[, ResultType As Long = 0]) As Variant

Restituisce il valore del campo specificato.

nota

Nota

Il tipo del valore restituito può essere di vario genere a seconda del tipo di campo o del tipo di risultato richiesto.

Il parametro FieldName è il fieldname (attributo owk:fieldname) o la description (attributo owk:description) del campo definito nel modello HTML del documento. È anche possibile riferirsi al campo per source anziché per fieldname preponendo al nome del campo la stringa "source=".

Esempio

Set C = Doc.GetFieldValue("source=mittente")

È possibile referenziare i campi all'interno di una tabella o container con una delle seguenti sintassi:

nometabella:col_n

nometabella:nomecampo

nomecampo:row_m

nometabella:col_n:row_m

nometabella:row_m:col_n

nometabella:nomecampo:row_m

dove

nometabella è il fieldname della tabella o il source se è usata la sintassi specificata sopra

nomecampo è il fieldname della colonna

n ed m sono il numero di colonna o riga

Laddove non è specificata la riga si intende la prima (o l'unica nel caso di container)

Esempio

1. x = Doc.GetFieldValue("tabelladettaglio:col_3:row_5")
2. x = Doc.GetFieldValue("tabelladettaglio:totaleriga:row_5")
3. Set x = Doc.GetFieldValue("contenitore:riferimento_anagrafica")

Il parametro ResultType influisce sul tipo di risultato restituito dalla funzione e può assumere i seguenti valori:

· 0: si comporta nel modo classico, cioè il risultato dipende dal tipo di campo come indicato di seguito:

Tipo di campo | Tipo di risultato
testo, numero, data | valore effettivo
booleano | 0 oppure -1
user | oggetto della classe User oppure Nothing se il campo non contiene dati validi
role | oggetto della classe Role oppure Nothing se il campo non contiene dati validi
office | oggetto della classe Office oppure Nothing se il campo non contiene dati validi
client | oggetto della classe Client oppure Nothing se il campo non contiene dati validi
clientlist | collection di oggetti della classe Client, eventualmente vuota se non ci sono elementi nella lista
doc | oggetto della classe Document o della classe Folder a seconda del documento puntato oppure Nothing se il campo non contiene dati validi
doclist | collection di oggetti della classe Document e/o Folder, eventualmente vuota se non ci sono elementi nella lista
organizationlist | oggetto di tipo XML DOM document (rif. organizationlist)
userlist | collection che contiene come primo elemento (n°1) la formula che descrive il contenuto della lista e come elementi successivi oggetti della classe User
xml, annotation , table,container | oggetto di tipo XML DOM document (esempio oggetto di tipo XML DOM Document per il campo table, rif. table)
altro | non definito

· 1: restituisce un oggetto XML DOM node che rappresenta il nodo all'interno della form.
· 2: restituisce una stringa XML che rappresenta il nodo all'interno della form.
· 3: restituisce una formula (testo) per tutti i campi di tipo organizzativo: user, role, office, organizationlist e userlist.


GetXML

Function GetXML([ResultType As Long = 0])

Restituisce il documento in XML; il formato è simile a quello che si ottiene accedendo dall'applicazione web.

Con il parametro ResultType si specifica il formato in cui deve essere restituito il risultato; sono accettati i seguenti valori:

· 0: restituisce una stringa che contiene tutto l'XML (default)
· 1: restituisce un oggetto XML DOM Document


LinkAttachedDocument

Function LinkAttachedDocument(Att, [UserID As Long = 0]) As Boolean

Att è un oggetto della classe AttachedDocument che punta, ad esempio, un file allegato ad un documento o altro. Il metodo permette di ottenere in allegato alla scheda di anagrafica corrente un file che è il link del file passato attraverso l'oggetto Att (quindi il file non sarà ricopiato ma solamente puntato). Inoltre è possibile impostare opzionalmente tramite UserID, l'ID sia dell'operatore che si vuole sia l'autore dell'operazione. Se non viene passato tale ID l'autore dell'operazione sarà il sistema.

Non può essere utilizzata all'interno di un blocco AddNew…Update.

Esempio

Collega in una scheda di anagrafica tutti i file allegati ad un documento

di protocollo in entrata

Dim objAnag

Dim objDoc

Dim objAtt

Dim Res

'inizializzazione scheda Anagrafica

Set objAnag = openwork.newobject("Client")

objAnag.ID = "000127"

'inizializzazione documento di Protocollo in Entrata

Set objDoc = openwork.newobject("Document")

objDoc.Style = 1

objDoc.ID = 324

For Each objAtt In objDoc.Attachments

   Res = objAnag.linkAttachedDocument(objAtt)

   If Not Res Then

      '... gestione errore

   End If

Next

Set objDoc = Nothing

Set objAnag = Nothing


RollbackTransaction

Sub RollbackTransaction()

Annulla la transazione iniziata con il BeginTransaction. Vedere esempio riportato in BeginTransaction.


SaveAttachedDocument

Function SaveAttachedDocument(FileName As String[, SavePath As String]

[,Version As Long]) As String

Permette di estrarre dal repository di openwork® il file allegato specificato (mediante nome e versione, se non si indica la versione si intende l'ultima versione disponibile di quel file) salvandolo nel percorso indicato (o nella directory temporanea di openwork® se non viene indicato alcun percorso).

attenzione

Attenzione

Il percorso indicato deve essere valido, tenendo presenti due fattori: il server nel quale si sta eseguendo lo script e l'utente con cui vengono istanziati gli oggetti della libreria. In pratica occorre verificare che il percorso (locale o di rete) sia valido e che l'utente suddetto abbia i permessi per poter creare il file.

Restituisce il percorso completo del file salvato, compreso il nome, oppure una stringa vuota in caso di errore.

Esempio

Dim objAnag

Dim NomeFile

Set objAnag = openwork.newobject("Client")

'inizializzazione dell'oggetto di tipo Client

objAnag.ID = "000127"

NomeFile = objAnag.SaveAttachedDocument("Offerta.doc", "C:\DATI\OFFERTE\")

if NomeFile <> "C:\DATI\OFFERTE\Offerta.doc" then

'gestione errore

Else

objAnag.Update

End if

Set objAnag = Nothing


SetAttachmentProperty

Function SetAttachmentProperty(FileName As String, Version As Long,_

                               PropertyName As String, ParamArray PropertyValue())

As Boolean

Imposta una proprietà di un file allegato. Restituisce true se va a buon fine.

FileName indica il nome del file e Version specifica la versione (un numero minore o uguale a zero indica l'ultima versione).

PropertyName è la proprietà da impostare; i valori attualmente supportati sono

· primary: imposta o rimuove il flag Primario sull'allegato. Per poter impostare questa proprietà il file deve essere l'ultima versione; inoltre il flag viene eventualmente tolto da un altro allegato su cui era in precedenza. Il primo parametro di PropertyValue è un numero che indica se il flag va impostato o rimosso (0 = rimuovere, altrimenti impostare)
· locked: blocca o sblocca il file allegato (questa impostazione ha effetto sulle operazioni da interfaccia utente). Il primo parametro di PropertyValue è un numero che indica l'operazione da compiere (0 = sbloccare, altrimenti bloccare); nel caso in cui si debba bloccare, il secondo parametro di PropertyValue specifica l'utente da cui il file risulterà bloccato (se non si specifica sarà il Sistema).
· externalid: imposta l'identificativo esterno per un file allegato che risiede su repository esterno. Il primo parametro di PropertyValue è una stringa che indica il nuovo identificativo da impostare.
Restituisce True se l'operazione va a buon fine, False altrimenti; in quest'ultimo caso le informazioni sull'errore si possono leggere con le proprietà ErrCode ed ErrDescription.

nota

Nota

Nell'effettuare questa operazione non viene richiamato il DM Connector responsabile del repository su cui risiede il file, poichè si suppone che l'origine dell'operazione sia proprio il gestore del repository.


SetFieldValue

Function SetFieldValue(FieldName As String, FieldValue,_

                      [SourceType As Long = 0]) As Boolean

Assegna un valore al campo specificato. Restituisce true se va a buon fine.

Il parametro FieldName è il fieldname (attributo owk:fieldname) o la description (attributo owk:description) del campo definito nel modello HTML del documento. È anche possibile riferirsi al campo per source anziché per fieldname preponendo al nome del campo la stringa "source=".

Per tutti i campi di tipo organizzativo (user, role, office, organizationlist e userlist) è possibile passare come valore del parametro FieldValue una formula oppure per i campi di tipo organizzativo non lista un id (user, role, office).

Per tutti i campi di tipo documento (document) e di tipo lista di documenti (documentlist) è possibile passare come valore del parametro FieldValue un oggetto di tipo DOMDocument o una stringa XML.

attenzione

Attenzione

Eseguendo da script di processo una operazione di modifica su una form utilizzando la funzione SetFieldValue, questa è negata se la form è aperta in una sessione utente. Ciò significa che occorre gestire nello script di processo l'eccezione che viene lanciata qualora si verifica la situazione suddetta.

Esempio

  Doc.SetFieldValue "source=mittente", ObjClient

Doc.SetFieldValue "ufficiocompetenza", "N 2"

È possibile referenziare i campi all'interno di una tabella o container con una delle seguenti sintassi:

nometabella:col_n

nometabella:nomecampo

nomecampo:row_m

nometabella:col_n:row_m

nometabella:row_m:col_n

nometabella:nomecampo:row_m

dove

nometabella è il fieldname della tabella o il source se è usata la sintassi specificata sopra

nomecampo è il fieldname della colonna

n ed m sono il numero di colonna o riga e partono da 1

Dove non è specificata la riga si intende la prima (o l'unica nel caso di container). Affinché si possa utilizzare questa funzione deve esistere la cella nella posizione individuata dalla combinazione di parametri specificati: se ad esempio si vuole impostare il valore della cella nella riga 3 e colonna 4 la tabella deve avere almeno 4 colonne e devono essere state create almeno 3 righe.

Esempio

1. Doc.SetFieldValue "tabelladettaglio:col_3:row_5", x
2. Doc.SetFieldValue "contenitore:riferimento_anagrafica", ObjClient

Il parametro FieldValue è il valore da impostare e può essere di tipo diverso a seconda del tipo di campo che si vuole impostare (si veda la tabella riportata nella funzione GetFieldValue).

È possibile manipolare le righe all'interno di una tabella (le colonne sono fissate in fase di disegno del modello) con una delle seguenti sintassi:

nometabella:create_table

nometabella:insert_row

nometabella:delete_row

Con la sintassi create_table si può creare la struttura della tabella aggiungendo il numero di righe necessarie a raggiungere il valore desiderato, che si specifica con il parametro FieldValue. La funzione va a buon fine se riesce ad aggiungere le righe o se le righe presenti coprono già la richiesta.

Esempio

aggiunge le prime due righe se mancano

Doc.SetFieldValue "dettaglio:create_table", 2

Con la sintassi "insert_row" si inserisce una riga nella posizione specificata dal parametro FieldValue (contando le righe a partire da 1). Per poter usare questa funzione devono esistere almeno le righe fino alla posizione precedente, cioè se si vuole inserire una riga in posizione 3, come nell'esempio seguente, devono esistere almeno le prime due:

Esempio

inserisce una riga in posizione 3

Doc.SetFieldValue "dettaglio:insert_row", 3

Se per il parametro FieldValue viene specificato un valore minore o uguale a zero si intende che si vuole accodare una riga alla tabella.

Esempio

inserisce una riga in ultima posizione

Doc.SetFieldValue "dettaglio:insert_row", 0

Con la sintassi "delete_row" si elimina la riga nella posizione specificata dal parametro FieldValue. La funzione va a buon fine se la riga viene eliminata oppure se non esiste una riga nella posizione specificata.

Esempio

elimina la riga in posizione 3

Doc.SetFieldValue "dettaglio:delete_row", 3

nota

Nota

Una riga inserita in una delle funzioni precedenti contiene gli eventuali valori di default specificati in fase di disegno del modello di form.

Il parametro SourceType non è attualmente utilizzato.

La funzione non può essere utilizzata all'interno di un blocco AddNew…Update per campi di tipo lista di anagrafica.

Se la funzione va a buon fine il valore impostato viene salvato immediatamente nel database ad eccezione dei casi in cui la funzione venga richiamata all'interno di un blocco AddNew…Update oppure all'interno di un blocco BeginTransaction…CommitTransaction


UnFreeze

Function UnFreeze([UserID As Long = 0]) As Boolean

Sblocca una scheda precedentemente bloccata da un operatore o dalla funzione Freeze. Questa funzione non può essere utilizzata all'interno di un blocco AddNew…Update o di un blocco BeginTransaction... CommitTransaction.

Esempio

Dim objAnag

Dim blnErr

Set objAnag = openwork.newobject("Client")

'inizializzazione dell'oggetto

objAnag.ID = "000127"

Sblocco = objAnag.UnFreeze(2)

If Not Sblocco Then

    'gestione errore

End If

Set objAnag = Nothing


Update

Function Update() As Boolean

Permette di confermare il salvataggio di una scheda di anagrafica creata tramite il metodo AddNew .


Proprietà

Di seguito l'elenco delle proprietà relative alla classe Client.

Le proprietà non presenti nel seguente elenco non sono utilizzabili.

· Attachments
· CompanyName
· CompanyType
· EmailAddress
· ErrCode
· ErrDescription
· FirstName
· ID
· Initials
· IsCompany
· IsUser

· LastName
· Model
· Name
· NumericID
· OpenworkUser
· OpenworkUserID
· OpenworkUserName
· SMSAddress
· Title
· Users


Attachments

Property Attachments As Object

Sola lettura. Restituisce una collection di oggetti della classe AttachedDocument contenente i riferimenti di tutti i file allegati alla scheda di anagrafica in oggetto. E' possibile far riferimento agli elementi dell'insieme in una delle seguenti modalità:

· Object.Attachments(i) (dove i è un indice numerico)
· Object.Attachments(FileName)
· Object.Attachments(FileName, Version) (dove Version è il numero di versione a partire da 1 e compresa l'ultima)

Esempio

Cerca e salva in un percorso temporaneo l'ultima

versione dell'eventuale file PDF allegato al documento

Dim objAnag

Dim objAttColl

Dim nCiclo

Dim sFile

Set objAnag = openwork.newobject("Client")

'inizializzazione dell'oggetto di tipo Client

objAnag.ID = "000127"

Set objAttColl = objAnag.Attachments

For nCiclo = 1 to objAttColl.Count

If LCase(Right(objAttColl(nCiclo).FileName, 4)) = ".pdf" And

objAttColl(nCiclo).LastVersion Then

sFile=objAnag.SaveAttachedDocument(objAttColl(nCiclo).FileName) ' lo salvo

Exit For

End If

Next

Set objAnag = Nothing

Set objAttColl = Nothing


CompanyName

Property CompanyName As String

Proprietà obsoleta. Restituisce o imposta il campo Denominazione utilizzato poi, automaticamente in base alla regola impostata, per la composizione della Ragione Sociale (proprietà Name dell'oggetto Client) di una scheda di anagrafica di tipo Persona Giuridica.


CompanyType

Property CompanyType As String

Proprietà obsoleta. Restituisce o imposta il campo Tipo di società utilizzato poi, automaticamente in base alla regola impostata, per la composizione della Ragione Sociale (proprietà Name dell'oggetto Client) diuna scheda di anagrafica di tipo Persona Giuridica.


EmailAddress

Property EmailAddress As String

Sola lettura. Restituisce il valore del campo indirizzo e-mail della scheda di anagrafica.


ErrDescription

Property ErrDescription As String

Vedere la corrispondente proprietà ErrDescription della classe Activity.


FirstName

Property FirstName As String

Proprietà obsoleta. Restituisce o imposta il campo Nome utilizzato poi, automaticamente in base alla regola impostata, per la composizione del Nominativo (proprietà Name dell'oggetto Client) di una scheda di anagrafica di tipo Persona Fisica.


ID

Property ID As String

Permette di impostare e/o leggere l'ID di un oggetto scheda di anagrafica (oggetto Client). L'ID cui si fa riferimento è quello che all'interno del sistema viene chiamato Codice Anagrafica. Si tratta di un'eccezione valida solo per questi oggetti. In tutti gli altri casi infatti l'ID è sempre un valore di tipo Long. In ogni caso esiste comunque la proprietà NumericID dell'oggetto Client che si comporta come un normale ID di tipo Long.

L 'impostazione della proprietà ID comporta l'inizializzazione dell'oggetto sulla scheda di anagrafica puntata da quel Codice Anagrafica.


Initials

Property Initials As String

Proprietà obsoleta. Restituisce o imposta la Sigla dell'elemento di anagrafica.


IsCompany

Property IsCompany As Boolean

Proprietà di sola lettura. Se vero indica una scheda anagrafica di Persona Giuridica, altrimenti di Persona Fisica.


IsUser

Property IsUser As Boolean

Proprietà di sola lettura. Nel caso di una scheda di anagrafica di Persona Fisica indica se si tratta di un operatore del sistema.


LastName

Property LastName As String

Proprietà obsoleta. Restituisce o imposta il campo Cognome utilizzato poi, automaticamente in base alla regola impostata, per la composizione del Nominativo (proprietà Name dell'oggetto Client) di una scheda di anagrafica di tipo Persona Fisica.


Model

Property Model([ByName As Boolean = Falso])

Sola lettura. Restituisce la classificazione (tipologia) della scheda di anagrafica puntata dall'oggetto. Se il parametro ByName assume il vlore true allora verrà restituito il nome, altrimenti l'ID.


Name

Property Name As String

Sola lettura. Restituisce la Ragione Sociale nel caso di scheda di Persona Giuridica, il Nominativo per una scheda di Persona fisica.


NumericID

Property NumericID As Long

Permette di impostare e/o leggere l'ID numerico di un oggetto scheda di anagrafica. L'impostazione comporta l'inizializzazione dell'oggetto puntando alla scheda di anagrafica caratterizzata da quell'ID. Vedere la proprietà ID.


OpenworkUser

Property OpenworkUser As String

Sola lettura. Restituisce il nominativo utilizzato nell'organigramma per quell'operatore del sistema. È valida solo nel caso in cui l'oggetto punta ad una scheda anagrafica del tipo operatore di openwork®, altrimenti restituisce una stringa vuota


OpenworkUserID

Property OpenworkUserID As Long

Permette di impostare e/o leggere l'ID numerico di anagrafica di un operatore. L'impostazione comporta l'inizializzazione dell'oggetto puntando alla scheda di anagrafica caratterizzata da quell'ID. Tale ID non corrisponde ad un ID di operatore inserito in organigramma. Infatti esiste una corrispondenza uno a molti tra ID di anagrafica e ID di operatore (un operatore caratterizzato da un unico ID di scheda anagrafica può essere inserito in più punti dell''organigramma con diversi ID di operatore). Vedere la proprietà Users dello stesso oggetto.


OpenworkUserName

Property OpenworkUserName As String

Sola lettura. Restituisce lo UserName ossia l'alias utilizzato da un operatore del sistema per avere accesso al sistema stesso. È valida solo nel caso in cui l'oggetto punti ad una scheda anagrafica del tipo operatore di openwork®, altrimenti restituisce una stringa vuota.


SMSAddress

Property SMSAddress As String

Proprietà obsoleta. Restituisce il valore del campo Numero di Cellulare GSM della scheda di anagrafica.


Title

Property Title As String

Proprietà obsoleta. Restituisce o imposta il campo Titolo utilizzato poi, automaticamente in base alla regola impostata, per la composizione del Nominativo (proprietà Name dell'oggetto Client) della scheda di anagrafica di tipo Persona Fisica.


Users

Property Users([vType As Integer])

Sola lettura. Valido per una scheda di anagrafica di operatore diopenwork®.

Restituisce, a seconda del parametro passato:

vType | Users
0 (default) | stringa contenente gli ID da organigramma (separati da ";") che possiede l'operatore
1 | vettore contenente gli ID da organigramma che possiede l'operatore
2 | collection di oggetti User riferiti a ciascun ruolo dell'operatore


Classe Document

Permette la gestione dei documenti di openwork®, ossia Protocollo in Entrata, Protocollo in Uscita, Protocollo Interno, Documento Interno.

Sono esclusi i DocumentType dtClient (cui è dedicata l'apposita classe Client) e dtFolder (classe Folder).

Un oggetto di questa classe viene inizializzato specificando, nell'ordine, le proprietà Style e ID.

In questa sezione vengono riportati i Metodi e le Proprietà della classe Document


Metodi

Di seguito l'elenco dei metodi relativi alla classe Document.

I metodi non presenti nel seguente elenco non sono utilizzabili.

· AddAttachedDocument
· AddContext
· AddNew
· BeginTransaction
· CommitTransaction
· CopyAttachedDocument
· CreateRevision
· DeleteAttachedDocument
· Freeze
· GetFieldValue
· GetXML
· LinkAttachedDocument
· Numerate
· Publish
· RollbackTransaction
· SaveAttachedDocument
· SetAttachmentProperty
· SetFieldValue
· SetStatus
· Store
· UnFreeze
· Update


AddAttachedDocument

Function AddAttachedDocument (FilePath As String,_

[Description As String = ""],_

[UserID As Long = 0],_

[external As Boolean = False],_

[Selection As Boolean = False],_

[size As Double = 0],_

[ExternalShow As Boolean = False],_

[Primary As Boolean = False],_

[SHA1 As String = ""],_

[Repository As String = ""],_

[ExternalID As String = ""],_ [AdditionalClass As String = "" ],_

[AdditionalClassId As Long = 0],_

[NewVersion As Long = -1])

[CompressionType As Long = 0], _
[FileName As String = ""], _

) As Boolean

Permette di allegare un file al documento.

Si veda la corrispondente funzione AddAttachedDocument della classe Client.


AddContext

Function AddContext (FieldName As String,_

AttributeName As String, AttributeValue) As Boolean

Si veda la corrispondente funzione AddContext della classe Client.


AddNew

Function AddNew(Style As Long, [DocModelID As Long], [FolderID As Long],_

[ProcessID As Long], [UserId As Long]) As Boolean

Il metodo permette la creazione di un nuovo documento.

DocModelID specifica la voce di classificazione di appartenenza del documento: è chiaro che deve esistere congruenza tra lo Style (i valori validi sono 1,2,3) ed il DocModelID. Per ricavare il DocModelID occorre consultare il piano di classificazione:

CLib04 - zoom

Per creare un nuovo documento del tipo rappresentato in figura occorre la seguente istruzione:

Doc.AddNew 3, 108

Sono opzionali i parametri FolderID e ProcessID che permettono, rispettivamente, di legare il documento ad un fascicolo e/o ad un processo.

Se ProcessID viene impostato -1, quando il documento sarà salvato con il metodo <Update>, sarà avviato un eventuale processo associato

Se si specifica il parametro UserID, corrispondente ad un utente da organigramma, quell'utente risulterà essere l'autore del documento, altrimenti il documento risulterà creato dal Sistema.

Dopo il metodo AddNew è possibile utilizzare più volte il metodo SetFieldValue per impostare i campi del documento (ad eccezione dei campi di tipo lista di anagrafica che dovranno essere impostati successivamente). In questa fase il documento esiste solo in memoria fino a che non viene richiamato il metodo Update: solo se l'Update va a buon fine il documento sarà effettivamente creato. Inoltre, fino a che non viene richiamato il metodo Update, non è possibile aggiungere file allegati.

attenzione

Attenzione

Se da piano di classificazione un utente non è autorizzato alla creazione dell'oggetto documentale, egli non può impersonare il metodo AddNew (i.e. StartUserID As Long), pena messaggio di errore e fallimento del metodo stesso.

Esempio

Dim objDoc

Set objDoc = openwork.newobject("Document")

If objDoc.AddNew (3, 108) Then

objDoc.SetFieldValue "oggetto", "Test creazione nuovo documento"

objDoc.SetFieldValue "sigla", "ND"

objDoc.Update

Else

'gestione errore

End If

Set objDoc = Nothing


BeginTransaction

Function BeginTransaction() As Boolean

Si veda la corrispondente funzione BeginTransaction della classe Client.


CommitTransaction

Function CommitTransaction() As Boolean

Si veda la corrispondente funzione CommitTransaction della classe Client.


CopyAttachedDocument

Function CopyAttachedDocument(Att[, UserID As Long]) As Boolean

Si veda la corrispondente funzione CopyAttachedDocument della classe Client.


CreateRevision

Function CreateRevision([Publish As Boolean = Vero],_

                        [Numerate As Long = -1],_

                        [UserID As Long = 0],_

                        [PreserveProcess As Boolean = Vero],_

                        [PreserveFolder As Boolean = Vero]) As Long

Permette la creazione di una revisione del documento puntato dall'oggetto. Il documento corrente, se non archiviato, sarà forzatamente archiviato.

Con il parametro Publish si specifica se il nuovo documento deve essere pubblicato e deve essere obbligatoriamente vero se il documento corrente non è archiviato.

Con il parametro Numerate si specifica se il nuovo documento deve essere numerato, nel caso in cui venga pubblicato, e si possono specificare i seguenti valori:

· -1 il documento deve essere numerato
· 0 il documento non deve essere numerato
· 1 dipendente dalle impostazioni, ovvero se è impostata la numerazione automatica per quel particolare archivio allora il documento viene numerato

Se si specifica il parametro UserID, corrispondente ad un utente da organigramma, quell'utente risulterà essere l'autore del nuovo documento e dell'eventuale archiviazione del documento corrente, altrimenti le operazioni risulteranno effettuate dal Sistema.

Il parametro PreserveProcess indica se associare il nuovo documento allo stesso processo in cui si trova eventualmente quello originale.

Con il parametro PreserveFolder si indica invece se inserire il nuovo documento negli stessi fascicoli.

Il documento creato sarà una copia del documento originale, compresi i file allegati, ad eccezione dell'archiviazione, del blocco e di eventuali firme che saranno rimosse. La nuova numerazione terrà conto del numero di revisione.

Dopo questa funzione l'oggetto punterà alla revisione del documento originale.

Ovviamente il metodo non può essere utilizzato all'interno di un blocco AddNew…Update.


DeleteAttachedDocument

Function DeleteAttachedDocument(FileName As String[, Force As Boolean = Falso]_

                                [, Version As Long]) As Boolean

Il metodo permette di eliminare il file passato tramite il suo nome (FileName) e versione (Version). Se si omette la versione viene referenziata l'ultima disponibile per quel file. Se il parametro Force è vero viene forzata l'eliminazione del file anche se il documento che possiede il file è archiviato.

Il metodo non può essere utilizzato all'interno di un blocco AddNew…Update.

Si veda la corrispondente funzione DeleteAttachedDocument della classe Client.


Freeze

Function Freeze([UserID As Long = 0]) As Boolean

Si veda la corrispondente funzione Freeze della classe Client.


GetFieldValue

Function GetFieldValue(FieldName As String, [ResultType As Long = 0]) As Variant

Si veda la corrispondente funzione GetFieldValue della classe Client.


GetXML

Function GetXML([ResultType As Long = 0])

Si veda la corrispondente funzione GetXML della classe Client.


LinkAttachedDocument

Function LinkAttachedDocument(Att, [UserID As Long]) As Boolean

Si veda la corrispondente funzione LinkAttachedDocument della classe Client.


Numerate

Function Numerate([UserID As Long = 0], [NewNumber As Long = 0]) As Long

Permette la numerazione del documento puntato dall'oggetto. Se si specifica il parametro UserID, corrispondente ad un utente da organigramma, quell'utente sarà utilizzato nell'operazione di numerazione, altrimenti sarà utilizzato il Sistema.

Il parametro NewNumber non è attualmente utilizzato.


Publish

Function Publish([UserID As Long = 0]) As Boolean

Permette la pubblicazione del documento puntato dall'oggetto. Se si specifica il parametro UserID, corrispondente ad un utente da organigramma, quell'utente risulterà essere l'autore del documento, altrimenti sarà il Sistema.

nota

Nota

Se è impostata la numerazione automatica per quel particolare archivio, il documento sarà anche numerato.


RollbackTransaction

Sub RollbackTransaction()

Si veda la corrispondente funzione RollbackTransaction della classe Client.


SaveAttachedDocument

Function SaveAttachedDocument(FileName As String,_

                             [SavePath As String],_

                             [Version As Long]) As String

Si veda la corrispondente funzione SaveAttachedDocument della classe Client.


SetAttachmentProperty

Function SetAttachmentProperty(FileName As String,_

                              Version As Long,_

                              PropertyName As String,_

                              ParamArray PropertyValue()) As Boolean

Si veda la corrispondente funzione SetAttachmentProperty della classe Client.


SetFieldValue

Function SetFieldValue(FieldName As String,_

                      FieldValue,

                      [Force As Boolean = Falso],_

                      [SourceType As Long = 0]) As Boolean

Si veda la corrispondente funzione SetFieldValue della classe Client.

Il parametro Force non è attualmente utilizzato.


SetStatus

Function SetStatus(NewValue As Long) As Boolean

Imposta lo stato del documento con il valore numerico passato in NewValue.

Lo stato si definisce nel disegno del modello di form inserendo un campo (presente di default).

Esempio

<input type="text" class="textbox" owk:type="textbox" owk:fieldname="stato" owk:datatype="integer" owk:visible="0"/>

Questa funzione non può essere utilizzata all'interno di un blocco AddNew … Update o di un blocco BeginTransaction ... CommitTransaction.


Store

Function Store([UserID As Long = 0]) As Boolean

Archivia il documento. L'autore dell'archiviazione sarà lo UserID eventualmente specificato oppure il sistema. Non può essere utilizzata all'interno di un blocco AddNew…Update.


UnFreeze

Function UnFreeze([UserID As Long = 0]) As Boolean

Si veda la corrispondente funzione UnFreeze della classe Client.


Update

Function Update([Publish As Boolean = Vero], [Numerate As Long = 1]) As Boolean

Permette di confermare il salvataggio di un documento creato tramite il metodo AddNew.

Con il parametro Publish si specifica se il documento deve essere pubblicato.

Con il parametro Numerate si specifica se il documento deve essere numerato, nel caso in cui venga pubblicato, e si possono specificare i seguenti valori:

· -1 il documento deve essere numerato
· 1 dipendente dalle impostazioni, ovvero se è impostata la numerazione automatica per quel particolare archivio allora il documento viene numerato


Proprietà

Di seguito l'elenco delle proprietà relative alla classe Document.

Le proprietà non presenti nel seguente elenco non sono utilizzabili.

· Attachments
· Author
· Boss
· BossId
· CCAddresses
· Created
· CreatedProcess
· Description
· DistributionList
· DocDate
· ErrDescription
· ErrCode
· ID
· MainAddressee
· MainSender
· ModelDescription
· ModelID
· ModelName
· Number
· Office
· OtherAddressees
· OtherSenders
· ProcessToStart
· ProtocolOffice
· Revision
· Sent
· SignDate
· Signed
· Stored
· Status
· Style
· Subject


Attachments

Property Attachments As Object

Si veda la corrispondente proprietà Attachments della classe Client.


Author

Property Author([ByID As Boolean = Falso])

Sola lettura. Restituisce il nominativo (da organigramma) oppure l'ID dell'operatore che ha creato il documento. Passando il valore Vero per il parametro ByID si ottiene l'ID, altrimenti il nominativo (default).


Boss

Property Boss As User

Si veda la corrispondente proprietà Boss della classe Folder.


BossId

Property BossId As Long

Sola lettura. Restituisce l'ID dell'operatore responsabile del documento puntato dall'oggetto. Il responsabile si definisce nel disegno del modello di form inserendo un campo (presente di default).

Esempio

<input class="textbox" owk:type="user" owk:fieldname="responsabile" owk:required="1" owk:buttonclass="button" owk:officefieldname="ufficiocompetenza"/>


CCAddressees

Property CCAddressees As String

Sola lettura. Restituisce (valido solo per un documento di protocollo in uscita) i Codici Anagrafica, separati da ";" di tutti gli elementi inseriti nella lista dei destinatari per conoscenza del documento.


Created

Property Created As Boolean

Sola lettura. Restituisce vero se il documento cui punta l'oggetto è stato pubblicato.


CreatedProcess

Property CreatedProcess As Long

Sola lettura. Restituisce informazioni su un eventuale processo avviato a partire dal documento. I valori che può restituire sono i seguenti:

· < 0: è previsto che il documento avvii un processo, ma non lo ha ancora fatto.
· 0: il documento non deve avviare un processo.
· > 0: ID dell'istanza di processo avviata.

nota

Nota

Anche se l'istanza di processo è stata creata non è detto che il flusso sia partito: l'avvio del processo è compito del servizio openwork® Manager.


Description

Property Description As String

Sola lettura. Restituisce una stringa riportante numero e data del documento e che dipende dal tipo di documento:

DocumentType | Description
dtInDocument | Prot. entr. [Numero] del [Data]
dtOutDocument | Prot. usc. [Numero] del [Data]
dtInnerDocument (documento) | Doc. int. [Numero] del [Data]
dtInnerDocument (protocollo) | Prot. int. [Numero] del [Data]


DistributionList

Property DistributionList As String

Sola lettura. Restituisce una stringa di ID operatore separati da ";" che rappresenta la lista di distribuzione del documento. Nel caso in cui non ci sia nessuno nella lista verrà restituita la stringa vuota oppure il solo carattere ";".


DocDate

Property DocDate As String

Sola lettura. Restituisce una stringa riportante la data del documento.


ErrDescription

Property ErrDescription As String

Sola lettura. Restituisce la descrizione dell'ultimo errore avvenuto nell'oggetto corrente.

nota

Nota

Dopo aver richiamato questa proprietà l'errore viene azzerato.


ID

Property ID As Long

Permette di impostare e/o leggere l'ID di un oggetto document.

L'impostazione della proprietà ID (successivamente a quella della proprietà Style) comporta l'inizializzazione dell'oggetto sul documento puntato da quell'ID e del tipo specificato con la proprietà Style.

La proprietà non può essere impostata all'interno di un blocco AddNew…Update.


MainAddressee

Property MainAddressee As String

Sola lettura. Valido esclusivamente per un documento di protocollo in uscita (altrimenti è una stringa vuota), restituisce il Codice Anagrafica del destinatario del documento.


MainSender

Property MainSender As String

Sola lettura. Valido esclusivamente per un documento di protocollo in entrata (altrimenti è una stringa vuota), restituisce il Codice Anagrafica del mittente del documento.


ModelDescription

Property ModelDescription As String

Sola lettura. Restituisce la descrizione della classificazione del documento corrente.


ModelID

Property ModelID As Long

Sola lettura. Restituisce l'ID della classificazione del documento corrente.


ModelName

Property ModelName As String

Sola lettura. Restituisce il nome della classificazione del documento corrente (solo la parte relativa alla voce di classificazione).


Number

Property Number([ByDescription As Boolean = False]) As Variant

Sola lettura. Restituisce il numero del documento (tutta la descrizione se ByDescription è vero, altrimenti la parte numerica).

Se ad esempio il numero è 00456/05-OF.MA

la proprietà Number restituisce 456 oppure 00456/05-OF.MA


Office

Property Office As Office

Sola lettura. Restituisce un oggetto della classe Office relativo all'unità organizzativa di competenza del documento. L'unità organizzativa di competenza si definisce nel disegno del modello di form inserendo un campo (presente di default).

Esempio

<input type="text" class="textbox" owk:type="office" owk:fieldname"ufficiocompetenza" owk:buttonclass="button" owk:required="1" owk:locked="1"/>


OtherAddressees

Property OtherAddressees As String

Sola lettura. Restituisce (valido solo per un documento di protocollo in uscita) i Codici Anagrafica, separati da ";" di tutti gli elementi di anagrafica inseriti nella lista degli altri destinatari del documento.


OtherSenders

Property OtherSenders As String

Sola lettura. Restituisce (valido solo per un documento di protocollo in entrata) i Codici Anagrafica, separati da ";" di tutti gli elementi di anagrafica inseriti nella lista degli altri mittenti del documento.


ProcessToStart

Property ProcessToStart ([Options As Long = 0])

Sola lettura. Restituisce informazioni su un eventuale modello di processo associato al documento. Di questo modello viene creata una istanza quando il documento è pubblicato.
Attualmente per il parametro Options è supportato solo il valore 0, che indica di restituire l'ID del modello di processo (oppure 0 se non vi è nessun processo associato).


ProtocolOffice

Property ProtocolOffice As Office

Sola lettura. Restituisce un oggetto della classe Office relativo all'unità organizzativa che ha protocollato il documento. È valido esclusivamente per i documenti di protocollo in entrata, uscita ed interno. L'unità organizzativa che ha protocollato il documento si definisce nel disegno del modello di form inserendo un campo (presente di default).

Esempio

<input type="text" class="textbox" owk:type="office"

owk:fieldname="ufficioprotocollo" owk:buttonclass="button" owk:required="1"/>


Revision

Property Revision As Long

Sola lettura. Restituisce il numero di revisione del documento.

Se il documento non è una revisione restituisce 0.


Sent

Property Sent As Boolean

Sola lettura. Valido solo per un documento di protocollo in uscita, restituisce vero se il documento è stato spedito.


SignDate

Property SignDate(SignID As Long) As String

Sola lettura. Passando il numero di firma (SignID da 1 a 10) restituisce la data in cui tale firma è stata apposta oppure la stringa vuota se la firma non esiste o non è stata apposta.


Signed

Property Signed(SignID As Long, [Username As Boolean = Falso],_

               [Rolename As Boolean = Falso])

Sola lettura. Indicando in SignID il numero di firma (da 1 a 10) restituisce, a seconda degli altri parametri:

Username | Rolename | Signed
False | False | ID (da organigramma) dell'operatore che ha posto la firma, oppure 0
False | True | ruolo dell'operatore che posto la firma, oppure stringa vuota
True | nd | nominativo dell'operatore che ha posto la firma, oppure stringa vuota


Status

Property Status As Long

Sola lettura. Restituisce lo stato del documento (si veda il metodo SetStatus).


Stored

Property Stored As Boolean

Sola lettura. Restituisce Vero se il documento è archiviato.


Style

Property Style as DocumentType

Imposta o restituisce il DocumentType del documento.

Per istanziare un oggetto di tipo Document questa proprietà va impostata prima della proprietà ID.


Subject

Property Subject As String

Sola lettura. Restituisce l'oggetto del documento.

L'oggetto si definisce nel disegno del modello di form inserendo un campo (presente di default).

Esempio

<textarea class="textarea" rows="3" owk:type="memobox" owk:datatype="text"

owk:fieldname="oggetto" owk:required="1" owk:invalidable="1"></textarea>


Classe Folder

Permette la gestione dei fascicoli in openwork®.

Un oggetto di questa classe viene inizializzato specificando la proprietà ID.

Negli script ne esiste un'istanza predefinita, ThisFolder, che rappresenta l'eventuale fascicolo associato al processo corrente.

In questa sezione vengono riportati i Metodi e le Proprietà della classe Folder.


Metodi

Di seguito l'elenco dei metodi relativi alla classe Folder.

I metodi non presenti nel seguente elenco non sono utilizzabili.

· AddAttachedDocument
· AddContext
· AddNew
· BeginTransaction
· CommitTransaction
· CopyAttachedDocument
· DeleteAttachedDocument
· Freeze
· GetFieldValue
· GetXML

· LinkAttachedDocument
· RollbackTransaction
· SaveAttachedDocument
· SetAttachmentProperty
· SetFieldValue
· SetStatus
· Store
· UnFreeze
· Update


AddAttachedDocument

Public Function AddAttachedDocument (FilePath As String,_

[Description As String = ""],_

                                    [UserID As Long = 0],_

                                    [External As Boolean = False],_

                                    [Selection As Boolean = False],_

                                    [Size As Double = 0],_

                                    [ExternalShow As Boolean = False],_

                                    [Primary As Boolean = False],_

                                    [SHA1 As String = ""],_

                                    [Repository As String = ""],_

[ExternalID As String = ""],_

[AdditionalClass As String = ""],_

[AdditionalClassId As Long = 0],_

[NewVersion As Long = -1], _

[CompressionType As Long = 0], _

[FileName As String = ""], _

) As Boolean

Permette di allegare un file al fascicolo.

Si veda la corrispondente funzione AddAttachedDocument della classe Client.


AddContext

Function AddContext (FieldName As String,_

                    AttributeName As String,_

                    AttributeValue) As Boolean

Si veda la corrispondente funzione AddContext della classe Client.


AddNew

Function AddNew([ModelId As Long], [StartDocumentStyle As Long],_

[StartDocumentId As Long], [StartUserID As Long],_

[ProcessID As Long]) As Boolean

Il metodo permette la creazione di un nuovo fascicolo.

ModelID permette di specificare la tipologia del fascicolo definita nel piano di classificazione:

CLib05 - ID

per creare un nuovo fascicolo del tipo rappresentato in figura occorre la seguente istruzione:

Folder.AddNew 10

I parametri opzionali StartDocumentStyle e StartDocumentID permettono di specificare il documento che ha aperto il fascicolo.

Se si specifica il parametro UserID, corrispondente ad un utente da organigramma, quell'utente risulterà essere l'autore del fascicolo, altrimenti il fascicolo risulterà creato dal Sistema.

Con il parametro ProcessID si può legare il fascicolo ad un processo. Se ProcessID viene impostato -1, quando il documento sarà salvato con il metodo <Update>, sarà avviato un eventuale processo associato

Dopo il metodo AddNew è possibile utilizzare più volte il metodo SetFieldValue per impostare i campi del fascicolo (ad eccezione dei campi di tipo lista di anagrafica che dovranno essere impostati successivamente). In questa fase il fascicolo esiste solo in memoria fino a che non viene richiamato il metodo Update: solo se l'Update va a buon fine il fascicolo sarà effettivamente creato. Inoltre, fino a che non viene richiamato il metodo Update non è possibile aggiungere file allegati.

attenzione

Attenzione

Se da piano di classificazione un utente non è autorizzato alla creazione dell'oggetto documentale, egli non può impersonare il metodo AddNew (i.e. StartUserID As Long), pena messaggio di errore e fallimento del metodo stesso.

Esempio

Esempio: crea un fascicolo che risulterà aperto da un protocollo in entrata (con ID 437), creato dall'utente con ID 18 e non associato ad un processo

Dim objFolder

Set objFolder = openwork.newobject("Folder")

If objFolder.AddNew (10, 1, 437, 18) Then

   objFolder.SetFieldValue "oggetto", "Gestione protocollo"

   objFolder.Update

Else

   'gestione errore

End If

Set objFolder = Nothing


CopyAttachedDocument

Function CopyAttachedDocument

       (Att[, UserID As Long][, NewVersion As Long = -1]) As Boolean

Si veda la corrispondente funzione CopyAttachedDocument della classe Client.


DeleteAttachedDocument

Function DeleteAttachedDocument

     (FileName As String [, Force As Boolean = Falso][, Version As Long]) As Boolean

Si veda la corrispondente funzione DeleteAttachedDocument della classe Client.


GetFieldValue

Function GetFieldValue(FieldName As String[, ResultType As Long = 0]) As Variant

Si veda la corrispondente funzione GetFieldValue della classe Client.


GetXML

Function GetXML([ResultType As Long = 0]) As Variant

Si veda la corrispondente funzione GetXML della classe Client.


LinkAttachedDocument

Function LinkAttachedDocument(Att[, UserID As Long]) As Boolean

Si veda la corrispondente funzione LinkAttachedDocument della classe Client.


SaveAttachedDocument

Function SaveAttachedDocument

        (FileName As String[, SavePath As String][, Version As Long]) As String

Si veda la corrispondente funzione SaveAttachedDocument della classe Client.


SetAttachmentProperty

Function SetAttachmentProperty(FileName As String,Version As Long,_

                   PropertyName As String, ParamArray PropertyValue()) As Boolean

Si veda la corrispondente funzione SetAttachmentProperty della classe Client.


SetFieldValue

Function SetFieldValue(FieldName As String,_

        FieldValue[, Force As Boolean = Falso][, SourceType As Long = 0]) As Boolean

Si veda la corrispondente funzione SetFieldValue della classe Client.

Il parametro Force non è attualmente utilizzato.


SetStatus

Function SetStatus(NewValue As Long) As Boolean

Imposta lo stato del fascicolo con il valore numerico passato in NewValue.

Lo stato si definisce nel disegno del modello di form inserendo un campo (presente di default).

Esempio

<input type="text" class="textbox" owk:type="textbox" owk:fieldname="stato"

owk:datatype="integer" owk:visible="0"/>


Store

Function Store([UserID As Long = 0]) As Boolean

Archivia il fascicolo. L'autore dell'archiviazione sarà lo UserID eventualmente specificato oppure il sistema. Non può essere utilizzata all'interno di un blocco AddNew…Update.


Update

Function Update([Publish As Boolean = Vero][, Numerate As Long = 1]) As Boolean

Si veda la corrispondente funzione Update della classe Document.


Proprietà

Di seguito l'elenco delle proprietà relative alla classe Folder.

Le proprietà non presenti nel seguente elenco non sono utilizzabili.

· Attachments
· Author
· Boss
· Created
· CreatedProcess
· ErrCode
· ErrDescription
· ID
· ModelID
· ModelName
· Number
· Office
· ProcessID
· ProcessToStart
· SignDate
· Signed
· StartDocument
· Status
· Stored
· Users


Author

Property Author([ByID As Boolean = Falso])

Sola lettura. Restituisce il nominativo (da organigramma) oppure l'ID dell'operatore che ha creato il fascicolo. Passando il valore Vero per il parametro ByID si ottiene l'ID, altrimenti il nominativo (default).


Boss

Property Boss As User

Sola lettura. Restituisce l'oggetto della classe User corrispondente all'operatore che è il responsabile del fascicolo. Il responsabile si definisce nel disegno del modello di form inserendo un campo (presente di default).

Esempio

<input class="textbox" owk:type="user" owk:fieldname="responsabile"

owk:required="1" owk:buttonclass="button" owk:officefieldname=

"ufficiocompetenza"/>


BossId

Property BossId As Long

Sola lettura. Restituisce l'ID dell'operatore responsabile del fascicolo puntato dall'oggetto. Il responsabile si definisce nel disegno del modello di form inserendo un campo (presente di default).

Esempio

<input class="textbox" owk:type="user" owk:fieldname="responsabile" owk:required="1" owk:buttonclass="button" owk:officefieldname="ufficiocompetenza"/>


Created

Property Created As Boolean

Sola lettura. Restituisce Vero se il fascicolo cui punta l'oggetto è stato pubblicato.


CreatedProcess

Property CreatedProcess As Long

Sola lettura. Restituisce informazioni su un eventuale processo avviato a partire dal fascicolo. I valori che può restituire sono i seguenti:

· < 0 è previsto che il fascicolo avvii un processo, ma non lo ha ancora fatto.
· 0 il fascicolo non deve avviare un processo.
· > 0 ID dell'istanza di processo avviata.

nota

Nota

Anche se l'istanza di processo è stata creata non è detto che il flusso sia partito: l'avvio del processo è compito del servizio openwork® Manager.


FolderDate

Property FolderDate As String

Sola lettura. Restituisce una stringa riportante la data del fascicolo.


ID

Property ID As Long

Permette di impostare e/o leggere l'ID di un oggetto Folder.
L'impostazione della proprietà ID comporta l'inizializzazione dell'oggetto sul fascicolo puntato da quell'ID.

La proprietà non può essere impostata all'interno di un blocco AddNew…Update.


ModelID

Property ModelID As Long

Sola lettura. Restituisce l'ID della classificazione del fascicolo corrente.


ModelName

Property ModelName As String

Sola lettura. Restituisce il nome della classificazione del fascicolo corrente (solo la parte relativa alla voce di classificazione).


Number

Property Number([ByDescription As Boolean = False]) As Variant

Sola lettura. Restituisce il numero del fascicolo (tutta la descrizione se ByDescription è vero, altrimenti la parte numerica).

Se ad esempio il numero è 0000143-2005 la proprietà Number restituisce 143 oppure"0000143-2005".


Office

Property Office As Office

Sola lettura. Restituisce un oggetto della classe Office relativo all' unità organizzativa di competenza del fascicolo.

L' unità organizzativa di competenza si definisce nel disegno del modello di form inserendo un campo (presente di default) come nel seguente esempio:

Esempio

<input type="text" class="textbox" owk:type="office" owk:fieldname="ufficiocompetenza"

owk:buttonclass="button" owk:required="1" owk:locked="1"/>


ProcessID

Property ProcessID As Long

Sola lettura. Restituisce l'ID del processo eventualmente associato al fascicolo.


ProcessToStart

Property ProcessToStart([Options As Long = 0]) As Variant

Sola lettura. Restituisce informazioni su un eventuale modello di processo associato al fascicolo. Di questo modello viene creata una istanza quando il fascicolo è pubblicato.
Attualmente per il parametro Options è supportato solo il valore 0, che indica di restituire l'ID del modello di processo (oppure 0 se non vi è nessun processo associato).


Publish

Function Publish([UserID As Long = 0]) As Boolean

Permette la pubblicazione del fascicolo puntato dall'oggetto. Se si specifica il parametro UserID, corrispondente ad un utente da organigramma, quell'utente risulterà essere l'autore del fascicolo, altrimenti sarà il Sistema.


Signed

Property Signed (SignID As Long, [Username As Boolean = Falso],_

                 [Rolename As Boolean = Falso]) As Variant

Sola lettura. Indicando in SignID il numero di firma (da 1 a 10) restituisce, a seconda degli altri parametri:

Username | Rolename | Signed
False | False | ID (da organigramma) dell'operatore che ha posto la firma, oppure 0
False | True | ruolo dell'operatore che posto la firma, oppure stringa vuota
True | nd | nominativo dell'operatore che ha posto la firma, oppure stringa vuota


StartDocument

Property StartDocument As Document

Sola lettura. Restituisce un oggetto della classe Document che rappresenta il documento che ha aperto il fascicolo; se tale documento non esiste l'oggetto restituito non è inizializzato.


Stored

Property Stored As Boolean

Sola lettura. Restituisce Vero se il fascicolo è chiuso.


Users

Property Users As String

Sola lettura. Restituisce una stringa di ID operatore separati da ";" che rappresenta la lista di addetti all'elaborazione del fascicolo. Nel caso in cui non ci sia nessuno nella lista verrà restituita la stringa vuota oppure il solo carattere ";". Questa lista si definisce nel disegno del modello di form inserendo un campo (presente di default).

Esempio

<div class="div" owk:type="userlist" owk:fieldname="listaaddetti"

owk:tableclass="bodytable" owk:buttonclass="buttondiv"/>


Classe Link

Permette la gestione dei collegamenti (link) tra attività in un processo di openwork®.

Un oggetto di questa classe viene inizializzato specificando, nell'ordine, le proprietà ProcessID e ID.

In questa sezione vengono riportati i Metodi e le Proprietà della classe Link.


Metodi

Di seguito l'elenco dei metodi relativi alla classe Link:

· Save


Save

Function Save() As Boolean

Permette il salvataggio di eventuali modifiche eseguite sulle proprietà del collegamento. Restituisce valore vero se il salvataggio va a buon fine.


Proprietà

Di seguito l'elenco delle proprietà relative alla classe Link:

· Description
· DST
· ErrCode
· ErrDescription
· ID
· ORG
· ProcessID
· Script
· Status


Description

Property Description As String

Permette di leggere e/o impostare la descrizione di una attività. Nel caso di un nodo di notifica coincide con l'oggetto del messaggio. Il suo utilizzo è consigliato per rendere più chiare le attività presenti in agenda.


DST

Property DST As Long

Permette di leggere e/o impostare l'identificativo del nodo di destinazione del link.


ErrDescription

Property ErrDescription As String

Sola lettura. Restituisce la descrizione dell'ultimo errore avvenuto nell'oggetto corrente.

nota

Nota

Dopo aver richiamato questa proprietà l'errore viene azzerato


ID

Property ID As Long

Permette di impostare e/o leggere l'identificativo (ID) dell'oggetto.

Una volta impostato il valore di ID (e solo dopo aver impostato anche il ProcessID) l'oggetto viene inizializzato in maniera da contenere tutte le proprietà del collegamento specificato.


ORG

Property DST As Long

Permette di leggere e/o impostare l'identificativo del nodo di origine del link.


ProcessID

Property ProcessID As Long

Imposta e/o restituisce l'ID del processo cui il link appartiene. Questa proprietà, insieme alla proprietà ID, inizializza l'oggetto.


Script

Property Script As String

Sola lettura. Consente di leggere uno script presente sul link. Valido solo nel caso si tratti di una condizione, cioè un link uscente da un nodo di selezione (manuale o automatica).


Status

Property Status As Long

Permette di leggere e/o impostare lo stato del link. Lo stato di un link può assumere uno tra i seguenti valori:

0: attivo

1: disabilitato

2: disabilitato ma attivato, cioè raggiunto dal flusso

Esempio

Disattivazione di un link:

Dim Link

Set Link = Openwork.NewObject("Link")

Link.ProcessId = ThisProcess.ProcessId

Link.Id = 12

Link.Status = 1

Link.Save

Set Link = nothing


Classe Mail

Permette di connettersi ad un server POP3 per prelevare informazioni sui messaggi in esso ricevuti. E’ possibile conoscere il numero di messaggi presenti, leggere la testata di ciascuno di essi conoscendo dunque contestualmente il mittente, la data, l’oggetto; prelevare l’intero messaggio con tutti i suoi file allegati, eliminare un messaggio dall’Host. Inoltre espone un metodo che permette di inviare e-mail compresi gli attachment. La classe mail appartiene alla libreria checkmail.

approfondimento

Approfondimento

Sono disponibili per gli sviluppatori le classi della libreria checkmail che permettono l'utilizzo, all’interno dei processi gestiti dal workflow manager di openwork®, di server POP3 ed SMTP per la ricezione e l’invio delle e-mail.

È dunque possibile realizzare processi in grado di monitorare caselle di e-mail e di conseguenza prendere decisioni in base alle e-mail pervenute oppure semplicemente procedere alla loro distribuzione, gestione, archiviazione.

È anche possibile inviare in modo automatico (in base a regole definite nel processo) e-mail.

La libreria checkmail è costituita dalle seguenti classi:

· Classe Mail
· Classe Attachments
· Classe AttachedFile


Metodi

Di seguito l'elenco dei metodi relativi alla classe Mail:

· ConnectPOP3
· DeleteHostMessage
· Disconnect
· GetMessage
· GetMessageHeader
· SendMail


ConnectPOP3

Function ConnectPOP3(Host As String, UserName As String, Password As String) As Boolean

Apre una sessione di connessione al server POP3 indicato. La sessione rimane aperta sino a quando non viene utilizzato il metodo Disconnect oppure sino a quando non avviene una disconnessione del socket da parte del server (ErrDescription può contenere Socket has been disconnected).

Solo dopo aver creato con successo una connessione possono essere utilizzati i metodi DeleteHostMessage, Disconnect, GetMessage, GetMessageHeader.

Se richiamando il metodo si ottiene un valore True,vorrà dire che è stata effettuata una connessione al server indicato e sarà stato impostato il valore della proprietà NumberOfMessages.

Nel caso in cui la connessione non riesca la proprietà ErrDescription dell’oggetto conterrà il motivo del fallimento ed il metodo restituirà il valore False.

Esempio

Dim objM

Dim Quanti

Set objM = CreateObject("checkmail.mail")

If objM.ConnectPOP3("hostname", "username", "password") Then

   Quanti = objM.NumberOfMessages

   if Quanti >0 then

      msgbox "C'è nuova posta per te. Numero di messaggi: " & quanti

   Else

      msgbox "Nessun nuovo messaggio"

   End if

Else

   MsgBox objM.ErrDescription

End If

If not objM.Disconnect then

   MsgBox objM.ErrDescription

End if

Set objM = Nothing


DeleteHostMessage

Function DeleteHostMessage(Ordinal As Long) As Boolean

Permette di eliminare un messaggio sul server nella connessione corrente. E’ possibile eliminare anche messaggi che non sono stati mai letti. Il metodo va dunque utilizzato con cautela e solo dopo essersi assicurati che il messaggio in questione può essere eliminato. L’operazione è infatti irreversibile.

Il parametro che deve essere passato è il numero di messaggio compreso tra 1 e NumberOfMessages. Ricordiamo che il numero del messaggio è valido esclusivamente per la sessione corrente.

Se richiamando il metodo si ottiene un valore True,vorrà dire il messaggio con il numero indicato è stato eliminato dal server, altrimenti si è avuto un errore disponibile nella proprietà ErrDescription.


Disconnect

Function Disconnect() As Boolean

Chiude la connessione corrente. Nel caso in cui viene restituito il valore False vuol dire che si è avuto un errore disponibile nella proprietà ErrDescription. In tal caso la connessione sarà poi automaticamente chiusa dal server (oppure è già stata chiusa dal server e per questo si è avuto un errore).


GetMessage

Function GetMessage(Ordinal As Long) As Boolean

Permette di prelevare in maniera completa (header, testo e file allegati) un messaggio dal server. Il tale caso tutte le proprietà del tipo CurrentMessage (rif. Proprietà classe Mail) contengono un valore valido. Il messaggio rimane comunque sul server sino a quando non viene eliminato tramite il metodo DeleteHostMessage nella connessione corrente.

Il parametro che deve essere passato è il numero di messaggio compreso tra 1 e NumberOfMessages. Ricordiamo che il numero del messaggio è valido esclusivamente per la sessione corrente.

Se richiamando il metodo si ottiene un valore False, vorrà dire che il messaggio con il numero indicato non è stato prelevato in quanto si è verificato un errore la cui descrizione è disponibile nella proprietà ErrDescription.

Esempio

Viene qui riportato un esempio di ricezione e-mail con allegati:

Dim objM

Dim Quanti

Set objM = CreateObject("checkmail.mail")

If objM.ConnectPOP3("hostname", "username", "password") Then

   Quanti = objM.NumberOfMessages

   if Quanti >0 then

      msgbox "C’è nuova posta per te. Numero di messaggi:" & quanti

      if objM.GetMessage(1) then

         ' per test lavoro solo sul primo messaggio

         msgbox "Oggetto del messaggio: " & objM.CurrentMessageSubject

         if ObjM.CurrentMessageAttachments.Count >0 then

            ObjM.CurrentMessageAttachments(1).Save ("c:\temp") ' salvo il primo allegato

         end if

      else

          msgbox objM.ErrDescription

      end if

   Else

      msgbox "Nessun nuovo messaggio"

   end if

Else

   MsgBox objM.ErrDescription

End If

If not objM.Disconnect then

   MsgBox objM.ErrDescription

End if

Set objM = Nothing


GetMessageHeader

Function GetMessageHeader(Ordinal As Long) As Boolean

Permette di prelevare il solo header (testata) di un messaggio dal server. Il tale caso le sole proprietà del tipo CurrentMessage che contengono un valore valido sono: CurrentMessageDate, CurrentMessageFrom, CurrentMessageHeader, CurrentMessageLength, CurrentMessageSubject. Per poter ottenere anche il testo ed i file allegati occorre utilizzare il metodo GetMessage.

Il parametro che deve essere passato è il numero di messaggio compreso tra 1 e NumberOfMessages. Ricordiamo che il numero del messaggio è valido esclusivamente per la sessione corrente.

Se richiamando il metodo si ottiene un valore False, vorrà dire che l’header del messaggio con il numero indicato non è stato prelevato in quanto si è verificato un errore la cui descrizione è disponibile nella proprietà ErrDescription.


SendMail

Function SendMail(Host As String, FromName As String, From As String, Subject As String, MessageText As String, MailTo As String, [CC As String = ""], [BCC As String = ""], [Port As Long = 25], [MessageTextType As Long = 0], [MessageID As String = ""], [AttachedFiles As String = ""]) As Boolean

Permette di inviare una mail.

Esempio

Dal seguente esempio se ne deduce il funzionamento:

Set objMail = CreateObject("CheckMail.Mail")

host = "192.168.1.2"

fromname = "Info openwork"

from = "info@openworkbpm.com"

oggetto = "Invio file di prova"

testo = "In questa mail ti sono stati inviati due file per testare l'utilizzo del metodo SendMail della classe Mail"

destinatari = "mario.rossi@indirizzo.it;giuseppe.bianchi@indirizzo.it"

result = objMail.SendMail(cstr(host), cstr(fromname), cstr(from), cstr(oggetto), cstr(testo), cstr(destinatari),,,,,,” c:\temp\file1.pdf; c:\temp\file2.txt”)

If result Then

msgbox "e-mail inviata con successo!"

Else

msgbox "Problemi nell'invio della e-mail:" & objMail.ErrDescription

End If

Set objMail = Nothing


Proprietà

Di seguito l'elenco delle proprietà relative alla classe Mail.

· Busy
· ConnectionTimeout
· CurrentMessageAttachments
· CurrentMessageDate
· CurrentMessageFrom
· CurrentMessageHeader
· CurrentMessageHTML
· CurrentMessageLength
· CurrentMessageNumberOfAttachments
· CurrentMessageSubject
· CurrentMessageTempPath
· CurrentMessageText
· CurrentMessageUIDL
· ErrDescription
· NumberOfMessages
· POP3Object


Busy

Property Busy As Boolean

Sola lettura. Indica se c’è una operazione in corso.


ConnectionTimeout

Property ConnectionTimeout As Long

Permette di impostare e/o leggere il tempo, in secondi, di timeout della connessione. Se non viene impostata verrà utilizzato il tempo di default di 20 secondi.

Nel caso in cui vengano chiamati i metodi ConnectPOP3, DeleteHostMessage, Disconnect, GetMessage, GetMessageHeader, e non si ottiene risposta dal server entro il tempo impostato nella proprietà ConnectionTimeout, il metodo stesso restituirà un valore False e la proprietà ErrDescription il valore Operation timed out.


CurrentMessageAttachments

Property CurrentMessageAttachments([Index As Long]) As Object

Sola lettura. Può essere utilizzata solo dopo aver chiamato il metodo GetMessage.Se non viene passato il parametro opzionale Index restituisce un oggetto di tipo Attachment. In tal caso è possibile conoscere il numero di file allegati al messaggio utilizzando la proprietà Count.

Esempio

ObjM.CurrentMessageAttachments.Count restituisce il numero di file allegati al messaggio corrente.

ObjM.CurrentMessageAttachments(1).FileName restituisce il nome del primo file allegato, se esiste, altrimenti restituisce una stringa vuota ma la proprietà ErrDescription conterrà il valore Index out of the range.

ObjM.CurrentMessageAttachments(1).Save ("c:\temp") salva il primo file allegato, se esiste, nel percorso indicato (restituendo il valore True se l’operazione viene conclusa con successo), altrimenti restituisce il valore False In tal caso la proprietà ErrDescription conterrà il valore Index out of the range.

Inoltre la scrittura ObjM.CurrentMessageAttachments(1) è equivalente a ObjM.CurrentMessageAttachments.Item(1).


CurrentMessageDate

Property CurrentMessageDate() As String

Sola lettura. Può essere utilizzata solo dopo aver chiamato il metodo GetMessageHeader oppure il metodo GetMessage. Restituisce la data del messaggio corrente ricevuto nel formato “dd/mm/yyyy hh:nn:ss”.


CurrentMessageFrom

Property CurrentMessageFrom() As String

Sola lettura. Può essere utilizzata solo dopo aver chiamato il metodo GetMessageHeader oppure il metodo GetMessage. Restituisce il mittente del messaggio corrente ricevuto.


CurrentMessageHeader

Property CurrentMessageHeader() As String

Sola lettura. Può essere utilizzata solo dopo aver chiamato il metodo GetMessageHeader oppure il metodo GetMessage. Restituisce l’header del messaggio corrente ricevuto.


CurrentMessageHTML

Property CurrentMessageHTML() As String

Sola lettura. Può essere utilizzata solo dopo aver chiamato il metodo GetMessage. Restituisce il corpo del messaggio corrente ricevuto in versione HTML (se esiste).


CurrentMessageLength

Property CurrentMessageLength() As Long

Sola lettura. Può essere utilizzata solo dopo aver chiamato il metodo GetMessageHeader oppure il metodo GetMessage. Restituisce la lunghezza in bytes del messaggio corrente ricevuto.


CurrentMessageNumberOfAttachments

Property CurrentMessageNumberOfAttachments() As Long

Sola lettura. Può essere utilizzata solo dopo aver chiamato il metodo GetMessage. Restituisce il numero di file allegati al messaggio corrente ricevuto.


CurrentMessageSubject

Property CurrentMessageSubject() As String

Sola lettura. Può essere utilizzata solo dopo aver chiamato il metodo GetMessageHeader oppure il metodo GetMessage. Restituisce l’oggetto del messaggio corrente ricevuto.


CurrentMessageTempPath

Property CurrentMessageTempPath() As String

Sola lettura. Può essere utilizzata solo dopo aver chiamato il metodo GetMessage. Restituisce il percorso temporaneo dei file allegati scaricati con il messaggio.


CurrentMessageText

Property CurrentMessageText() As String

Sola lettura. Può essere utilizzata solo dopo aver chiamato il metodo GetMessage. Restituisce il corpo del messaggio corrente ricevuto in versione solo testo (se esiste).


CurrentMessageUIDL

Property CurrentMessageUIDL() As String

Sola lettura. Può essere utilizzata solo dopo aver chiamato il metodo GetMessageHeader oppure il metodo GetMessage. Restituisce l’UIDL del messaggio: identificatore del messaggio creato dal server e valido tra una sessione e l’altra.


NumberOfMessages

Property NumberOfMessages() As Long

Sola lettura. Può essere utilizzata solo dopo aver chiamato il metodo ConnectPOP3. Restituisce il numero di messaggi presenti sul server POP3.


POP3Object

Property POP3Object() As Object

Sola lettura. Può essere utilizzata solo dopo aver chiamato il metodo ConnectPOP3. Restituisce un riferimento all’oggetto della classe CSMAILLib.POP3Client che detiene la connessione. Può essere usato per accesso a basso livello alle funzioni della libreria.


Classe Office

Permette la gestione delle unità organizzative (uffici) in openwork®.

Un oggetto di questa classe viene inizializzato specificando la proprietà ID.

In questa sezione vengono riportati le Proprietà della classe Office.


Proprietà

Di seguito l'elenco delle proprietà relative alla classe Office.

Le proprietà non presenti nel seguente elenco non sono utilizzabili.

· AllOffices
· BossIDs
· ErrCode
· ErrDescription
· FullName
· ID
· Name
· Osolete
· Offices
· ORG
· Roles
· Users


AllOffices

Property AllOffices As String

Sola lettura. Restituisce una stringa di ID di ufficio separati da ";" che rappresenta gli uffici contenuti in quello corrente (con tutti i sotto-uffici).


BossIDs

Property BossIDs As String

Sola lettura. Restituisce una stringa di ID operatore separati da ";" che rappresenta la lista di tutti gli operatori che sono inseriti in un ruolo di tipo responsabile dell'ufficio. Nel caso in cui non ci sia nessuno nella lista verrà restituita la stringa vuota oppure il solo carattere ";".


FullName

Property FullName As String

Sola lettura. Restituisce il percorso completo nell'organigramma dell'unità organizzativa puntata dall'oggetto corrente.


ID

Property ID As Long

Permette di impostare e/o leggere l'ID di un oggetto Office. L'impostazione della proprietà comporta l'inizializzazione dell'oggetto.


Name

Property Name As String

Sola lettura. Restituisce il nome dell'unità organizzativa puntata dall'oggetto corrente.


Obsolete

Property Obsolete As Boolean

Sola lettura. Restituisce vero se l'unità organizzativa non fa più parte dell'organigramma (cioè è stata eliminata).


Offices

Property Offices As String

Sola lettura. Restituisce una stringa di ID di ufficio separati da ";" che rappresenta gli uffici direttamente contenuti in quello corrente.


ORG

Property ORG As Object

Sola lettura. Restituisce un oggetto della stessa classe Office che rappresenta l'ufficio che eventualmente contiene quello corrente.


Roles

Property Roles As String

Sola lettura. Restituisce una stringa di ID di ruolo separati da ";" che rappresenta tutti i ruoli definiti nell'ufficio corrente.


Users

Property Users As String

Sola lettura. Restituisce una stringa di ID di utente separati da ";" che rappresenta tutti gli operatori dell'ufficio corrente.


Classe OrgDiagram

Classe per la gestione dell'organigramma. Permette di aggiungere, spostare, rimuovere elementi dell'organizzazione.

Le funzioni di questa classe agiscono direttamente sull'organigramma pubblicato, quindi dopo la modifica, la copia pubblicata e la copia di lavoro non saranno allineate.

Inoltre, non si tiene conto delle proprietà grafiche degli elementi dell'organigramma, quindi se in seguito si utilizza lo strumento per l'editing incluso in openwork® BPM Tools occorrerà riaggiustare le posizioni e dimensioni degli oggetti.

In questa sezione vengono riportati i Metodi e le Proprietà della classe OrgDiagram.


Metodi

Di seguito l'elenco dei metodi relativi alla classe OrgDiagram:

· AddOffice
· AddRole
· AddUser
· FindOffices
· FindRoles
· FindUsers
· MoveUser
· RemoveOffice
· RemoveRole
· RemoveUser


AddOffice

Function AddOffice(Name As String, Label As String, Initials As String,_

                   ParentId As Long, ParamArray Params()) As Long

Aggiunge una unità organizzativa (ufficio) all'organigramma pubblicato.

Name è il nome della nuova unità organizzativa.

Label (non obbligatorio) è l'etichetta;

Initials è la sigla,

ParentId è l'identificativo dell'ufficio padre;

il parametro Params non è attualmente utilizzato.

Restituisce l'identificativo dell'ufficio creato, oppure un numero <= 0 in caso di fallimento.


AddRole

Function AddRole(Name As String, OfficeId As Long, IsBoss As Boolean,_

                 ParamArray Params()) As Long

Aggiunge un ruolo all'organigramma pubblicato.

Name è il nome del nuovo ruolo.

OfficeId è l'identificativo dell'ufficio in cui è creato il ruolo; se IsBoss è True allora il nuovo ruolo ha il flag Responsabile; il parametro Params non è attualmente utilizzato.

Restituisce l'identificativo dell'ufficio creato, oppure un numero <= 0 in caso di fallimento.


AddUser

Function AddUser(ClientId As String, RoleId As Long, ParamArray Params()) As Long

Inserisce un operatore in un ruolo esistente nell'organigramma pubblicato.

ClientId è il Codice anagrafica della scheda di anagrafica dell'operatore.

RoleId è l'identificativo del ruolo in cui inserire l'operatore

Il parametro Params non è attualmente utilizzato.

Restituisce l'identificativo dell'utente creato in organigramma, oppure un numero <= 0 in caso di fallimento.


FindOffices

Function FindOffices([Criteria As String = ""], [Options As Long = 0],_

                      [ResultType As Long = 0]) As Variant

Ricerca gli uffici nell'organigramma pubblicato secondo determinati criteri, che si specificano con i parametri Criteria e Options.

Options è una mappa di bit con cui si possono specificare diversi criteri, quelli attualmente supportati sono:

· bit 1 (valore 2): include nella ricerca la sigla dell'ufficio;
· bit 2 (valore 4) : include nella ricerca l'identificativo dell'ufficio padre.

Criteria è una stringa che contiene tutti i valori corrispondenti ai criteri specificati, separati da ";".

Ad esempio per cercare un ufficio che abbia sigla "URP" e si trovi in un ufficio che ha identificativo 12 occorre passare per il parametro Criteria il valore "URP;12" e per Options il valore 6 (cioè 2 + 4).

Con ResultType si specifica come deve essere restituito il risultato: attualmente è supportato solo il valore 0 che indica di restituire il risultato come concatenazione di id separati da ";" (ad es. "12;3;22;").

Restituisce, secondo il formato specificato in ResultType, la lista degli uffici che corrispondono ai criteri di ricerca specificati.


FindRoles

Function FindRoles([Criteria As String = ""],[Options As Long = 1],_

                    [ResultType As Long = 0]) As Variant

Ricerca i ruoli nell'organigramma pubblicato secondo determinati criteri, che si specificano con i parametri Criteria e Options.

Options è una mappa di bit con cui si possono specificare diversi criteri, quelli attualmente supportati sono:

· bit 0 (valore 1): include nella ricerca la descrizione del ruolo;
· bit 1 (valore 2) : include nella ricerca l'identificativo dell'ufficio padre.
· bit 3 (valore 8) : include nella ricerca il flag Responsabile.

Criteria è una stringa che contiene tutti i valori corrispondenti ai criteri specificati, separati da ";".

Ad esempio per cercare un ruolo denominato "Direttore" che sia responsabile e che si trovi in un ufficio che ha identificativo 12 occorre passare per il parametro Criteria il valore " Direttore;12;1" e per Options il valore 11 (cioè 1 + 2 + 8).

Con ResultType si specifica come deve essere restituito il risultato: attualmente è supportato solo il valore 0 che indica di restituire il risultato come concatenazione di id separati da ";" (ad es. "12;3;22;").

Restituisce, secondo il formato specificato in ResultType, la lista dei ruoli che corrispondono ai criteri di ricerca specificati.


FindUsers

Function FindUsers([Criteria As String = ""], [Options As Long = 1],_

                    [ResultType As Long = 0]) As Variant

Ricerca gli utenti nell'organigramma pubblicato secondo determinati criteri, che si specificando i parametri Criteria e Options.

Options è una mappa di bit con cui si possono specificare diversi criteri, quelli attualmente supportati sono:

· bit 0 (valore 1): include nella ricerca il nominativo dell'operatore;
· bit 1 (valore 2) : include nella ricerca lo username dell'operatore.
· bit 2 (valore 4) : include nella ricerca la sigla dell'operatore.
· bit 3 (valore 8) : include nella ricerca l'identificativo dell'ufficio di appartenenza.
· bit 4 (valore 16) : include nella ricerca l'identificativo del ruolo di appartenenza.
· bit 5 (valore 32) : include nella ricerca un eventuale identificativo esterno associato all'operatore.

Criteria è una stringa che contiene tutti i valori corrispondenti ai criteri specificati, separati da ";".

Ad esempio per cercare un utente con sigla "SC" che si trovi in un ufficio che ha identificativo 12 occorre passare per il parametro Criteria il valore " SC;12" e per Options il valore 12 (cioè 4 + 8).

Con ResultType si specifica come deve essere restituito il risultato: attualmente è supportato solo il valore 0 che indica di restituire il risultato come concatenazione di id separati da ";" (ad es. "12;3;22;").

Restituisce, secondo il formato specificato in ResultType, la lista dei ruoli che corrispondono ai criteri di ricerca specificati.


MoveUser

Function MoveUser(UserID As Long, DestRoleId As Long) As Boolean

Sposta un operatore in un altro ruolo (esistente) nell'organigramma pubblicato.

UserID è l'identificativo da organigramma dell'operatore, DestRoleId è l'identificativo del ruolo in cui inserire l'operatore.

Restituisce True se l'operazione va a buon fine, False in caso di fallimento.

attenzione

Attenzione

Se la funzione restituisce True, la versione dell'organigramma valida in precedenza diventa la "Copia di lavoro" dell'organigramma (e di conseguenza eventuali modifiche pendenti verranno perse). La nuova versione dell'organigramma diverrà automaticamente valida (e pubblicata).


RemoveOffice

Function RemoveOffice(OfficeId As Long) As Boolean

Rimuove una unità organizzativa (ufficio) e tutti gli elementi contenuti dall'organigramma pubblicato.

OfficeId è l'identificativo dell'ufficio da eliminare.

Restituisce True se l'operazione va a buon fine, False in caso di fallimento.


RemoveRole

Function RemoveRole(RoleId As Long) As Boolean

Rimuove un ruolo e tutti gli elementi contenuti dall'organigramma pubblicato.

RoleId è l'identificativo del ruolo da eliminare.

Restituisce True se l'operazione va a buon fine, False in caso di fallimento.


RemoveUser

Function RemoveUser(UserID As Long) As Boolean

Rimuove un operatore dall'organigramma pubblicato.

UserID è l'identificativo dell'operatore da eliminare.

Restituisce True se l'operazione va a buon fine, False in caso di fallimento.


Proprietà

Di seguito l'elenco delle proprietà relative alla classe OrgDiagram:

· ErrCode
· ErrDescription


Classe OWKConnection

Classe di base per la gestione degli oggetti della libreria di openwork®.

Negli script ne esiste un'istanza predefinita che rappresenta l'oggetto radice: Openwork.

In questa sezione vengono riportati le Metodi e Proprietà della classe OWKConnection.


Metodi

Di seguito l'elenco dei metodi relativi alla classe OWKConnection.

I metodi non presenti nel seguente elenco non sono utilizzabili.

· GetVar
· NewObject
· ResolveAbsoluteFormula


GetVar

Function GetVar(VName As String, [vType As Long])

Restituisce il valore di alcune variabili di sistema.

VName è il nome della variabile, vType il tipo di variabile (non è necessario specificarlo).

Le variabili attualmente gestite sono riportate di seguito:

Variabili | Descrizione
LibVersion | Versione libreria. es: 5.5.0.11
AdditionalVersion | Stringa aggiuntiva per indicare informazioni sulla versione di libreria.
DemoVersion | E' impostata a True se si tratta di versione demo.
LicenseType | Tipo di licenza. es: server, serverdemo, ASP oppure un errore del tipo Invalid pID.
ASPType | Tipo di licenza ASP. es. ASP, ASPDEV
ASPLicense | Intestatario della licenza ASP.
SystemPath | Percorso di installazione di openwork®.
MyTempPath | Percorso dei file temporanei. es: C:\Openwork\configurazioni\default\temp\
JobDirectory | Directory di servizio per i file del Job Engine. es: C:\Openwork\job\
RepositoryPath | Percorso del repository documentale interno di openwork®. es: C:\Openwork\configurazioni\default\repository\
AttachCompression | Tipo di compressione dei file nel repository. Possibili valori: 0 - nessuna 1 - ZIP
DefaultRepository | Se presente specifica un repository di default diverso da quello interno. E' valido solo nel caso sia attivo il modulo Document Management Connector.
LogFile | Percorso completo del file di log. es: C:\Openwork\log\openwork.log
MaxLogKb | Dimensione massima del file di log in Kb. Superata tale dimensione, il log viene troncato e creato nuovamente.
ListCachePath | Percorso per la cache degli elenchi su file. es: C:\Openwork\configurazioni\default\temp\listcache
DBType | Tipo di database. Possibili valori: 0 - MSSQL 1 - MSACCESS 2 - Oracle
DBVersion | Versione database (valido solo per MSSQL e Oracle). es: 2005
TablesVersion | Versione delle tabelle di openwork®. es: 15
MaxTextLength | Dimensione massima dei campi di tipo varchar (valido solo per MSSQL e Oracle). es: 255
DefaultRows | Valore di default per il numero di righe negli elenchi.
DefaultLanguage | Lingua di default di openwork®. es: it
CID | Stringa identificativa della configurazione (unica per ogni configurazione).


NewObject

Function NewObject(ClassName As String) As Object

Crea e restituisce un oggetto della stessa libreria di openwork®. Tutti gli oggetti della libreria da utilizzare negli script di openwork® devono essere creati con questa funzione, altrimenti non saranno utilizzabili. Ricordiamo che Openwork è un oggetto predefinito negli script ed è l' unico di questa classe utilizzabile.

Con questa funzione si possono inoltre creare oggetti Collection e XMLDocument.

Esempio

Dim att

Set att = Openwork.NewObject("ACTIVITY") 'crea un oggetto attività


ResolveAbsoluteFormula

Function ResolveAbsoluteFormula (Formula As String,_

                                [ResultType As Long = 0]) As Variant

Risolve una formula assoluta (cioè contenente solo gruppi, uffici, ruoli ed utenti) restituendo una stringa che contiene ID di utente separati da ";".

Il parametro ResultType non è attualmente utilizzato.

Esempio

partecipanti = Openwork.ResolveAbsoluteFormula("G 2;U 35;N 12;")


Proprietà

Di seguito l'elenco delle proprietà relative alla classe OWKConnection.

Le proprietà non presenti nel seguente elenco non sono utilizzabili.

· ErrCode
· ErrDescription
· OrganizationName


OrganizationName

Property OrganizationName As String

Sola lettura. Restituisce la denominazione dell'azienda/ente (come riportato nel blocco radice dell'organigramma).


Classe OWKFunction

Questa classe serve per eseguire alcune funzioni particolari.

Negli script esiste un'istanza predefinita: Functions.

In questa sezione vengono riportati le Metodi e Proprietà della classe OWKFunction


Metodi

Di seguito l'elenco dei metodi relativi alla classe OWKFunction.

· UserFunction


UserFunction

Function UserFunction(FunctionName As String, P1, .. ,PN) As Variant

Permette di eseguire diverse funzioni a seconda del parametro FunctionName; il numero ed il tipo degli altri parametri dipende dalla funzione.

FunctionName

Parametri

Risultato

Operazione

EXQUERY

Testo della query

Numero di record interessati

Esegue una interrogazione sul database

COUNT
· Tabella (o tipo tabella)
· Condizione

Numero di record che soddisfano la condizione

Conta i record di una tabella che verificano una condizione

LOOKUP
· Valore da cercare
· Tabella (o tipo tabella)
· Condizione

Valore ricercato o variabile empty

Cerca un valore (campo o espressione calcolata) in una tabella sotto una condizione

OPENRECORDSET

Testo della query

Oggetto recordset ADO

Apre un oggetto di tipo recordset in sola lettura

GETLIST
· ListType (richiesto): tipo di elenco
· Subtype (opzionale): sottotipo
· AdditionalID (opzionale): ID del modello o ID aggiuntivo
· Page (opzionale): numero di pagina richiesto
· RecordsPerPage (opzionale): numero di record per pagina da restituire
· Parameters (opzionale): stringa XML con cui è possibile specificare parametri vari tra cui filtri e ordinamenti
· UserId (opzionale): ID da organigramma dell'utente con cui si sta aprendo l'elenco
· ResultType (opzionale): tipo di variabile in cui restituire il risultato (0 = stringa (default), 1 = oggetto XML DOM, 2=file)
· FileName (opzionale, valido solo nel caso ResultType = 2): fornisce indicazioni sulla creazione dell'output. E' possibile specificare:

- un percorso completo di nome file;

- una directory (in questo caso la stringa deve terminare con "\", altrimenti l'ultima parte viene interpretata come nome di file): la directory viene creata se non esiste e al file viene assegnato un nome con un algoritmo casuale;

- solo il nome file: viene creata una directory con un algoritmo casuale in cui viene posto il file specificato;

- una stringa vuota: viene creata una directory con un algoritmo casuale in cui viene posto un file nominato "list.xml";

N.B. il nome di file è quello presente PRIMA di una eventuale compressione (si veda il parametro CompressionType), cioè se si vuole ad esempio una compressione ZIP non si deve aggiungere in questo parametro l'estensione ".zip" perchè viene aggiunta automaticamente (l'effetto che si otterrebbe è un file ".zip.zip")

· HostPath (opzionale, valido solo nel caso ResultType = 2): il valore specificato viene inserito nell'attributo "host" del nodo <table> dell'elenco (è utilizzato dal client per il rendering con fogli di stile XSL). Esempio: <table ... host= "C:\openwork\configurazioni \default\repository\webapp \default\prod" ... >
· XSLStyleSheet (opzionale, valido solo nel caso ResultType = 2) : viene aggiunta una direttiva con il riferimento ad un foglio di stile per il rendering. Esempio : <? xml - stylesheet type = text / xsl "href = "http://server/documenti/ documento1.xsl"?> <table ...
· CompressionType con valori 0 = nessuna, 1 = Zip.

ResultType = 0: stringa XML che contiene l'elenco

ResultType = 1: oggetto XML DOM

ResultType = 2: percorso completo del file di output (compresa una eventuale estensione dovuta alla compressione)

Restituisce un elenco in formato XML

CREATEJOB
• JobType (richiesto): stringa che specifica il tipo di conversione richiesta. I valori supportati sono:
- "PDF" per la conversione di documenti in PDF.
- "OCR" per il riconoscimento testo.
- "BARCODE" per la suddivisione di file in base ai codici a barre che identificano form di openwork® e inserimento automatico nelle form.
- “GENERALBARCODE” per la suddivisione di immagini multipagina a seconda di barcode di diverso tipo.
- “NCUTTING” per lo splitting o l'estrazione di TIF e PDF multipagina.
- “XTRANSFORM” per le trasformazioni xsl , xslt e fo.
- “CUSTOM” per eseguire compiti specifici in base alle esigenze tipiche dell'utente finale.

Stringa che indica il codice numerico (JobCode) assegnato al job appena avviato:
è necessario, allo scopo di monitorare l'andamento del JOB e reperirne il risultato, interrogare le funzioni JOBSTATUS e JOBRESULT.

Stringa vuota in caso di errore: è possibile reperire l'errore verificatosi interrogando la proprietà OwkFunction.Errdescription.

Crea un job per il motore di conversione documentale (deve essere attivato e configurato il relativo modulo)

JOBSTATUS
• JobCode (richiesto): stringa che specifica il codice associato al job, come restituito dalla funzione CREATEJOB

0: in elaborazione

1: terminato regolarmente

-1: terminato con errori (l'errore si preleva con la "JOBRESULT")

-2: errore in questa funzione (l'errore si preleva con la proprietà ErrDescription di questa classe)

Restituisce lo stato di un job

JOBRESULT
• JobCode (richiesto): stringa che specifica il codice associato al job
• ResultType (opzionale): specifica il tipo di risultato

- 0: percorso del file di output dove previsto (default)

- 1: risposta completa in formato stringa xml (default dove non è previsto un file di output: “BARCODE” , ”GENERALBARCODE" e "NCUTTING")

- 2: risposta completa in formato oggetto xml dom

- 3: eventuale descrizione dell'errore (se la "JOBSTATUS" ha restituito -1)

- 4: eventuale codice dell'errore (se la "JOBSTATUS" ha restituito -1)

Dipende dal parametro ResultType

Restituisce il risultato dell'elaborazione di un job

DELETEJOB
• JobCode (richiesto): stringa che specifica il codice associato al job

• DeleteSource (opzionale): effettua la cancellazione del/dei file sorgente; i possibili valori sono 1 (vero, default) e 0 (falso)

• DeleteDestination (opzionale): effettua la cancellazione del file in output o, nel caso ”BARCODE” e “NCUTTING” elimina la cartella in cui sono presenti tutti i file in output; i possibili valori sono 1 (vero, default) e 0 (falso).

1: eliminato correttamente

-1: errore (l'errore si preleva con la proprietà ErrDescription di questa classe)

Elimina o annulla un job

SAVEJOBRESULT
• JobCode (richiesto): stringa che specifica il codice associato al job
• MovingDir (richiesto): percorso in cui deve essere spostato il risultato (output e file .res)

1: funzione eseguita correttamente

-1: errore (l'errore si preleva con la proprietà ErrDescription di questa classe)

Questa funzionalità si occupa di spostare i file che, in seguito alla separazione “BARCODE”, hanno un codice d'errore diverso da 0. Questo si verifica quando il BarCode riconosciuto nel file in input è valido (secondo la convenzione usata da openwork® nella creazione) ma non identifica nessuna form

JOBPERCENTAGE

• JobCode (richiesto): stringa che specifica il codice associato al job

Numero che indica la percentuale oppure –1 in caso di errore (si veda la proprietà ErrDescription)

Restituisce la percentuale di avanzamento di un job sotto forma di stringa. Questa funzionalità attualmente è disponibile solo per le funzioni “CUSTOM”.

Le funzioni Count e Lookup riconoscono per il tipo di tabella i valori dtInDocument, dtOutDocument, dtInnerDocument, dtFolder, dtClient. La funzione openrecordset riconosce nel testo della query le stringhe "client", "indocument", "outdocument", "innerdocument ", "folder".

Esempi

Stringa = Functions.userfunction ("GetList",1,0,0,1,50,,,0) ' il risultato è una stringa

SET ObjXMLDOM = Functions.userfunction ("GetList",1,0,0,1,50,,,1) ' il risultato è un oggetto di tipo DOM Document


PDF

UserFunction("CREATEJOB", "PDF", FileId, FilePath, Destination, DeleteSource)

Converte il file in ingresso specificato mediante FileId o FilePath nel file in output in PDF specificato in Destination. Per l'elenco dei formati supportati consultare http://www.omniformat.com/faq.html

Gli altri parametri sono in ordine

Parametro | Significato | Possibili Valori | Note
FileId | ID dell'allegato su cui effettuare la conversione. | Intero positivo | Opzionale, da non specificare se è stato specificato FilePath
FilePath | Percorso del file su cui effettuare l'operazione (alternativo a FileId) | Stringa | Opzionale, da non specificare se è stato specificato FileId
Destination | Percorso e nome del file che deve essere prodotto in output | Stringa | Opzionale. Se non specificato il file di output è composto dal file in input con l'aggiunta dell'estensione ".pdf"
DeleteSource | Attraverso questo parametro è possibile indicare se il file di input debba essere cancellato. | 1: il file in input viene rimosso (default) 0: il file rimane nella posizione originaria. | Opzionale.

Esempi

1. Job = Functions.Userfunction("CREATEJOB", "PDF" , , "c:\temp\doc.tif")
2. Job = Functions.Userfunction("CREATEJOB", "PDF" , , "c:\temp\doc.tif", "c:\destination\doc.pdf", "0")

In questo caso il file in input non verrà cancellato e il risultato della

conversione sarà "c:\destination\doc.pdf"

3. Job = Functions.Userfunction("CREATEJOB", "PDF" ,123, ,"c:\destination\doc.pdf")

Il file in input è l'allegato il cui id è 123 e la destinazione è

"c:\destination\doc.pdf"


OCR (Optical Character Recognition)

Userfunction("CREATEJOB", "OCR" , FileId, FilePath,

Destination, ErrWordColor, LanguageOrder, DeleteSource)

Permette il riconoscimento del testo da un immagine e la trasformazione del riconoscimento in diversi formati.

Nei formati "ricchi" (RTF e DOC) mantiene la posizione del testo e delle immagini (timbri, firme , intestazioni , loghi e quant'altro di grafico) rispetto alla pagina. I tipi di file che possono essere riconosciuti sono: TIFF, TIFF-FX, PCX-DCX , BMP, JPG, PNG, PaperPort MAX, PDF, Xif.

I parametri sono i seguenti:

Parametro

Significato

Possibili Valori

Note

FileId

ID dell'allegato su cui effettuare il riconoscimento.

Intero positivo

Opzionale, da non specificare se è stato specificato FilePath

FilePath

Percorso del file su cui effettuare l'operazione (alternativo a FileId)

Stringa

Opzionale, da non specificare se è stato specificato FileId

Destination

Percorso e nome del file che deve essere prodotto in output

Stringa indicante nome, percorso e formato del file di output.

I Possibili formati di output sono:

"DOC" (documento Word 97, 2000, XP);

"TXT" (file di testo);

"RTF"(Rich text format);

"XML" (Xml in formato proprietario)

"PPT" (Powerpoint 97);

"MSP" (Publisher 98)

Opzionale. Se non specificato il file di output è composto dal file in input con l'aggiunta dell'estensione ".doc".

Se il percorso non esiste viene utilizzato il percorso del file in input e il nome del file specificato.

Se il nome del file non è valido viene utilizzato il nome del file originario e l'estensione ".doc"

ErrWordColor

Permette di effettuare la colorazione delle parole il cui riconoscimento è dubbio rispetto al vocabolario impostato nel parametro LanguageOrder.

I valori possibili sono:

4: rosso

1: blue

2: verde

"no": nessun colore

Opzionale.

LanguageOrder

Imposta l'ordine in cui devono essere elaborate le lingue per il riconoscimento. Se si prevede che ci siano poche lingue presenti sui documenti (tipo solo italiano e inglese), l'impostazione di questo parametro rende il riconoscimento più preciso.

Si può specificare un valore o una lista di valori separati da virgole come:

"13": italiano

"0": inglese,

"2": francese,

"1": tedesco,

"28": spagnolo,

"9": portoghese

Il default è "13,0,2,1,28,9" ma per documenti solo in italiano è molto utile specificare solo "13"

Opzionale.

DeleteSource

Attraverso questo parametro è possibile indicare se il file di input debba essere cancellato.

1: il file in input viene rimosso (default)

0: il file rimane nella posizione originaria.

Opzionale.

Esempi

1. Job = Functions.Userfunction("CREATEJOB", "OCR" , , "c:\temp\doc.tif", "DOC", 4, "13").

In questo caso abbiamo specificato che la funzione deve creare un Job di tipo OCR, con un file in ingresso (cancellato perché non diversamente indicato) che è specificato da un percorso ("c:\temp\doc.tif") e non dall'id dell'allegato, il cui output è in Word 2000 ("DOC"), con le parole di dubbio riconoscimento di colore rosso e con un dizionario di confronto in italiano.

2. Job = Functions.Userfunction("CREATEJOB", "OCR" , 123, "", "C:\temp\output.txt", , "13,0,2", 0).

In questo caso abbiamo specificato che la funzione deve creare un Job di tipo OCR con un file in ingresso che è specificato da dall'id dell'allegato (123) e non da un percorso ("") il cui output è un file di testo ("C:\temp\output.txt"), e con tre dizionari di confronto, in ordine italiano, inglese e francese. Il parametro 0 indica che il file in input non verrà rimosso.


BARCODE

UserFunction ("CREATEJOB", "BARCODE", FileId , FilePath o PollingDir,

OutputType, DeleteSource)

Questa funzionalità riconosce i codici a barre generati dall'interfaccia web di un documento openwork® separando le immagini multipagina in più file per ogni codice riconosciuto. I file ottenuti sono poi allegati alle form openwork® in cui sono stati generati i relativi codici a barre. Ogni file allegato ad una form openwork® viene memorizzato nel repository interno openwork® o in alternativa nel repository esterno di riferimento (cfr. openwork® e la gestione documentale). Nel caso in cui, dato un file multipagina in input alle funzionalità BarCode e/o GeneralBarcode, si verificano eccezioni dovute al riconoscimento da parte della libreria Com della Nuance®, queste vengono ignorate e le pagine che hanno lanciato l'eccezione vengono comunque aggiunte in coda al risultato precedente. La segnalazione dell'eccezione, con l'indicazione delle pagine coinvolte, viene riportata nel tag <messagedescription> del file risultato (.res) del riconoscimento.

Macroscopicamente, dopo aver posizionato (in qualsiasi orientamento) questi codici a barre sulla prima pagina di ogni "blocco" di pagine per una scansione massiva, il processo automaticamente separerà e posizionerà gli allegati nella relativa form openwork®.

Parametro

Significato

Possibili Valori

Note

FileId

ID dell'allegato su cui effettuare il riconoscimento.

Intero positivo

Opzionale, da non specificare se è stato specificato FilePath

FilePath o PollingDir

FilePath:

Percorso del file su cui effettuare l'operazione. Il formato del file in ingresso può essere PDF o TIF.

PollingDir

Directory su cui viene effettuato il polling dei file tif (alternativo a FileId). Il formato del file in ingresso deve essere un Tif multipagina.

Stringa

Opzionale, da non specificare se è stato specificato FileId.

Se il formato del file in ingresso è PDF, allora il formato del file di output (parametro OutputType) può essere solo PDF.

Se il formato del file in ingresso è TIF, allora il formato del file di output (parametro OutputType) può essere TIF o PDF.

OutputType

Tipo di file che devono essere prodotti in output.

Stringa indicante l'estensione dei file in Output:

"TIF"

"PDF"

I nomi dei file generati seguono una codifica progressiva.

DeleteSource

Attraverso questo parametro è possibile indicare se il file di input debba essere cancellato.

1: il file in input viene rimosso (default)

0: il file rimane nella posizione originaria.

Opzionale

Esempi

1. Job = Functions.Userfunction ("CREATEJOB", "BARCODE" , , "c:\temp\doc.tif", "PDF", 0)

In questo caso abbiamo avviato un job di separazione Barcode dove il file multipagina in input è "c:\temp\doc.tif" l'output è in PDF e il file in input non viene eliminato"

2. Job = Functions.UserFunction("CREATEJOB", "BARCODE", ,"C:\temp\", "TIF")

In questa maniera separiamo un Tif multipagina (che non viene eliminato) in altri Tif in base ai codici a barre ean13/8 con 8 caratteri numerici


GENERALBARCODE

Userfunction("CREATEJOB", "GENERALBARCODE" , FileId, FilePath, OutputType,

Literal, BarcodeType, DeleteSource).

Permette il riconoscimento e la separazione di immagini multipagina con dei particolari codici a barre. Nel caso in cui, dato un file multipagina in input alle funzionalità BarCode e/o GeneralBarcode, si verificano eccezioni dovute al riconoscimento da parte della libreria Com della Nuance®, queste vengono ignorate e le pagine che hanno lanciato l'eccezione vengono comunque aggiunte in coda al risultato precedente. La segnalazione dell'eccezione, con l'indicazione delle pagine coinvolte, viene riportata nel tag <messagedescription> del file risultato (.res) del riconoscimento. E' possibile, attraverso il tipo di barcode e una serie di "literal", limitare il range dei barcode da riconoscere in base ai quali avviene la separazione. Di seguito elencheremo i parametri della funzione in ordine mostrando i possibili valori che essi devono assumere:

Parametro | Significato | Possibili Valori | Note
FileId | ID dell'allegato su cui effettuare il riconoscimento. | Intero positivo | Opzionale, da non specificare se è stato specificato FilePath
FilePath | Percorso del file su cui effettuare l'operazione (alternativo a FileId) | Stringa | Opzionale, da non specificare se è stato specificato FileId
OutputType | Tipo di file che devono essere prodotti in output. | Stringa indicante l'estensione dei file in Output: "TIF" "PDF" | I nomi dei file generati seguono una codifica progressiva.
Literal | Serie di caratteri rappresentanti modelli di confronto per i barcode da riconoscere (matching pattern): è possibile infatti che debbano essere riconosciuti solo barcode che abbiano un determinato numero di caratteri e/o abbiano dei caratteri fissi all'interno del codice stesso. | Stringa. Si possono usare i seguenti caratteri jolly: "*" = zero o più caratteri "?" = un singolo carattere "#" = un singolo numero "[lista caratteri]"= ogni singolo carattere nella lista caratteri "[!lista caratteri]" = ogni singolo carattere non appartenente alla lista caratteri | Ad esempio "*" rappresenta tutti i barcode con un numero indefinito di caratteri, "?????" rappresenta tutti i barcode con 5 caratteri, "NS*" = tutti i barcode che iniziano con "NS".
BarcodeType | Tipo di barcode da riconoscere e in base al quale avviene la separazione | I possibili valori sono numeri rappresentanti i tipi di barcode supportati: 0: EAN 8/13 1: EAN/UPC con 2 oppure 5 cifre di supplemento 2: UPC-A 3: UPC-E (6 cifre) 4: ITF (2 cifre interlacciate di 5) 5: ITF (con la cifra di controllo) 6: Codice 39 (non supporta lettere minuscole) 7: Codice 39 con la cifra di controllo 8: Codice 39 con il carattere di trasmissione di stop e di start 9: Codice 39 modalità “full ASCII” (supporta sia le lettere minuscole che maiuscole) 10: Codice 128 11: Codice 128 CDT (Obsoleto. Tipo Codice 128)" 12: Codabar 13: Codabar con il carattere di trasmissione di stop e di start 14: Codice Postnet 15: Airline 2 di 5 16: UCC Codice 128 17: Codice 2 di 5 18: Codice 93 |
DeleteSource | Attraverso questo parametro è possibile indicare se il file di input debba essere cancellato. | 1: il file in input viene rimosso (default) 0: il file rimane nella posizione originaria. | Opzionale

Esempi

1. Job = Functions.Userfunction("CREATEJOB", "GENERALBARCODE" , , "c:\temp\doc.tif", "PDF","*",10).

In questo caso abbiamo avviato un job di separazione GeneralBarcode dove il file multipagina in input è "c:\temp\doc.tif", l'output è in PDF e la separazione avviene prendendo tutti i codici a barre "Code 128"

2. Job = Functions.UserFunction("CREATEJOB", "GENERALBARCODE", ,"C:\temp\molti cedolini.tif", "TIF", "########", 0,0)

In questa maniera separiamo un Tif multipagina(che non viene eliminato) in altri Tif in base ai codici a barre ean13/8 con 8 caratteri numerici


NCUTTING

UserFunction ("CREATEJOB", "NCUTTING", FileId , FilePath,

OutputType, PageBlock, StartPage, Endpage, DelSource )

Permette la separazione (o splitting) di file "TIF" o "PDF" e la trasformazione di TIF in PDF con la possibilità di specificare la pagina iniziale, la pagina finale, il numero di pagine per blocco e se cancellare o meno il file di input.

Potrebbe quindi essere usato per separare file multipagina o estrarre un certo numero di pagine da un file.

Parametro | Significato | Possibili Valori | Note
FileId | ID dell'allegato su cui effettuare il riconoscimento. Il formato del file in ingresso deve essere un Tif multipagina monocromatico (1bit) o un PDF multipagina. | Intero positivo | Opzionale da non specificare se è stato specificato FilePath.
FilePath | Percorso del file su cui effettuare l'operazione (alternativo a FileId). | Stringa | Opzionale, da non specificare se è stato specificato FileId
OutputName / OutputType | Tipo di file che devono essere prodotti in output. | Stringa indicante il nome e l'estensione di base (ad esempio se il valore è "output.pdf" otterrò i file output1.pdf, output2.pdf, outputN.pdf) o solamente l'estensione dei file in Output (ad esempio posso specificare ".TIF" e ottenere gli output nomefileorigine1.TIF, nomefileorigine2.TIF, nomefileorigineN.TIF). I possibili formati in output sono "TIF" "PDF" | Distinguiamo 3 casi possibili: 1) Input TIF, output TIF 2) Input TIF ,output PDF 3) Input PDF, output PDF
PageBlock | Numero di pagine per blocco: è possibile specificare il numero di pagine che costituisce ogni blocco di separazione nel range specificato (StartPage, Endpage). Se il documento iniziale ha 6 pagine, StartPage = 1, EndPage = 5 e pageBlock = 2 otterrò due documenti da 2 pagine e uno da una pagina (non viene inclusa l'ultima pagina del file originario nella separazione) | Intero positivo | Obbligatorio. In combinazione con Startpage e EndPage, può essere usato come estrattore di pagine invece che come separatore. Ad esempio se volessi estrarre di ogni documento la pagina 3, basterebbe impostare PageBlock=1, StartPage=3 ed EndPage=3
StartPage | Pagina da cui deve iniziare la separazione | Intero positivo | Opzionale, potrebbe non essere indicato e viene presa la pagina iniziale.
EndPage | Pagina da cui deve terminare la separazione | Intero positivo | Opzionale, potrebbe non essere indicato e viene presa l‘ultima pagina del documento
DeleteSource | Attraverso questo parametro è possibile indicare se il file di input debba essere cancellato. | 1: il file in input viene rimosso (default) 0: il file rimane nella posizione originaria. | Opzionale

Esempi

1. Job = Functions.UserFunction("CREATEJOB", "NCUTTING", , "C:\filetest\BARCODE\bn300dpi.tif", ".TIF", 2, 1, 43)

In questo caso abbiamo avviato un job di separazione NCUTTING dove il file multipagina in input è "C:\filetest\BARCODE\bn300dpi.tif" ogni blocco è formato da due pagine (massimo), inizia dalla pagina 1 e finisce alla 43, l'output è in TIF e il file in input viene eliminato. Il nome dei file risultanti è formato da numeri naturali progressivi che partono da 1 e hanno l'estensione prescelta: ad esempio: 1.tif, 2.tif,...., n.tif.

2. Job = Functions. UserFunction("CREATEJOB", "NCUTTING", , "C:\filetest\PDF\ paginavuota.pdf", "paginasingola.PDF", 1, 1, 3, 0)

In questa maniera separiamo un PDF multipagina (che non viene eliminato) in altri PDF in pagine singole e dalla prima alla terza del file in input. Il nome dei file in output sarà composto da "paginasingola" + numero progressivo +".PDF"


XTRANSFORM

UserFunction("CREATEJOB", "XTRANSFORM", FileId1, FilePath1, FileId2,

FilePath2, Destination, DeleteSource)

Attraverso questa funzionalità è possibile effettuare le seguenti transformazioni:

1) xsl e xml in xml: tag xml in tag xml

2) xsl e xml in html: tag xml in tag html

3) xsl e xml in pdf: l' xsl deve contenere le definizioni del FO per la trasformazione

4) xsl-fo in pdf: in questo caso il FO contiene già i dati, oltre che le informazioni di formattazione

La sostanziale limitazione è che se il file xsl contiene riferimenti relativi (tipo un altro xsl o un css riferiti attraverso path relative, come ad esempio "../libreria/menu.xsl" ) , non sarà possibile risolverli. Pertanto consigliamo, in questo caso, di rendere i riferimenti assoluti, specificando una cartella o un indirizzo web accessibile dal servizio openwork® Job Engine.

Possiamo notare, inoltre, che nei casi 1), 2) e 3) gli input sono due stringhe (FilePath1 o FilePath2) o identificativi di allegati, nel caso 4) un solo input.

Converte il file in ingresso specificato mediante FileId o FilePath nel file in output specificato in Destination

FilePath1 e FilePath2 possono essere percorsi o stringhe in maniera indipendente l'una dall'altra.

Gli altri parametri sono in ordine

Parametro | Significato | Possibili Valori | Note
FileId1 | ID dell'allegato su cui effettuare la trasformazione. | Intero positivo | Opzionale, da non specificare se è stato specificato FilePath1 .
FilePath1 /XSLString /FOString | Percorso del file su cui effettuare la trasformazione (alternativo a FileId1). Ricordiamo che questo input deve essere di tipo "XSL" nel caso in cui gli input sono due(caso 1, 2 e 3), altrimenti un "FO" . E' possibile specificare anche una stringa (XSL o FO) al posto di un percorso di file. | Stringa | Opzionale, da non specificare se è stato specificato FileId1
FileId2 | ID dell'allegato su cui effettuare la trasformazione. | Intero positivo | Opzionale, da non specificare se è stato specificato FilePath2. Per l'elenco dei formati supportati fare click qui
FilePath2 /XMLString | Percorso del file su cui effettuare la trasformazione (alternativo a FileId2). Ricordiamo che questo input deve essere di tipo "XML" nel caso in cui gli input sono due (caso 1, 2 e 3). E' possibile specificare una stringa XML al posto del percorso del file. | Stringa | Opzionale, da non specificare se è stato specificato FileId2
Destination | Percorso e nome del file che deve essere prodotto in output | Stringa. L'estensione del file di output deve essere "xml", "html" o "pdf". |
DeleteSource | Attraverso questo parametro è possibile indicare se il file di input debba essere cancellato. | 1: il file in input viene rimosso (default) 0: il file rimane nella posizione originaria. | Opzionale

Esempi

1. (xsl+xml=xml)

Job = Functions.Userfunction("CREATEJOB", "XTRANSFORM" , ,

"c:\temp\doc.xsl", , "c:\temp\doc.xml",

"c:\destination\doc2.xml", 0)

In questo caso il file in input non verrà cancellato e il risultato della conversione sarà "c:\destination\doc2.xml"

2. (xsl+xml=html)

Job = Functions.Userfunction("CREATEJOB", "XTRANSFORM" , ,

"c:\temp\doc.xsl", , "c:\temp\doc.xml",

"c:\destination\doc2.html", 1)

In questo caso il file in input non verrà cancellato e il risultato della conversione sarà "c:\destination\doc2.html"

3. (xsl+xml=pdf)

Job = Functions.Userfunction("CREATEJOB", "XTRANSFORM" , ,

"c:\temp\doc.xsl", , "c:\temp\doc.xml",

"c:\temp\doc.pdf")

In questo caso i dati contenuti nel file doc.xml verranno trasformati in un FO attraverso doc.xsl e trasformati in PDF nel file doc.pdf. Entrambi gli input (xsl e xml) saranno eliminati.

4. (xsl-fo=pdf)

Job = Functions.Userfunction("CREATEJOB", "XTRANSFORM" , ,

"<?xml version='1.0' encoding='UTF-8'?><fo:root xmlns:fo='http://www.w3.org/1999/XSL/Format'>

               <fo:layout-master-set><fo:simple-page-master master-name='simple'

            margin='2.5cm'><fo:region-body margin='2.5cm' margin-bottom='1cm region-name='body' background-color='#eeeeee'/><fo:region-after

            extent='1cm' region-name='footer' background-color='#dddddd'/>

           <fo:region-start extent='2.5cm'/><fo:region-end extent='2.5cm'/>

           </fo:simple-page-master></fo:layout-master-set>

           <fo:page-sequence master-reference='simple'><fo:static-content

            flow-name='footer'><fo:block text-align='center'>XSL-FO Example

           </fo:block></fo:static-content><fo:flow flow-name='body'>

           <fo:block>Ciao</fo:block></fo:flow></fo:page-sequence>

           </fo:root>", , , "c:\temp\doc.pdf")

Per convertire una form in pdf occorre applicare una una trasformazione xsl-fo sull'XML della Form stessa, riferirsi al capitolo cfr. Trasformazione di una form o di un elenco. L'esempio illustrato sopra mostra che è possibile ottenere un pdf in output passando una trasformazione xsl-fo come parametro nella chiamata della Userfunction.

Job = Functions.Userfunction("CREATEJOB", "XTRANSFORM" , 123, , , ,"c:\destination\doc.pdf")

Il file in input è l'allegato il cui id è 123 (ed è un fo) e la destinazione è "c:\destination\doc.pdf"


CUSTOM

UserFunction ("CREATEJOB", "CUSTOM", FileId, FilePath, CustomFunctionality, Output,

ConfigurationString, StartPage, EndPage, PageBlock, LiteralString

BarcodeType, ErrWordColor, LanguageOrder, DelSource, AssemblyPath)

Permette di richiamare una nuova funzionalità introdotta nel Job Engine che deve essere specificata in CustomFunctionality, prende in condiderazione tutti i campi delle funzionalità standard, introduce la possibilità di trasmettere altri campi nella ConfigurationString sotto forma di stringa XML e di indicare eventualmente quale debba essere il percorso e il nome dell'assembly che implementa la funzionalità richiesta.

E' chiaro che secondo il principio di reimplemetazione e personalizzazione delle funzionalità, tutti gli attributi tranne la funzionalità stessa sono opzionali e possono assumere un significato diverso da quello per cui sono stati concepiti, avendo delegato allo sviluppatore della funzionalità custom il compito di richiamarli e utilizzarli.

Pertanto il dettaglio che viene esplicitato in alcuni campi è dovuto all'utilizzo che ne è stato fatto, ma non ha nessun riscontro in altri ambiti.

Parametro | Significato | Possibili Valori | Note
FileId | ID dell'allegato su cui effettuare il riconoscimento. Il formato del file in ingresso deve essere un Tif multipagina monocromatico (1bit) o un PDF multipagina. | Intero positivo | Opzionale da non specificare se è stato specificato FilePath. E' possibile specificare più id di input se separati dal carattere "|".
FilePath | Percorso del file su cui effettuare l'operazione (alternativo a FileId). | Stringa | Opzionale, da non specificare se è stato specificato FileId. E' possibile specificare più percorsi di input se sono separati dal carattere "|".
CustomFunctionality | Nome della funzionalità custom che si vuole richiamare. | Stringa | Obbligatorio. I nomi delle funzioni Custom devono essere in caratteri maiuscoli.
Output | Tipo di file che devono essere prodotti in output. | Nome o percorso del file in output | Opzionale
ConfigurationString | Stringa di configurazione, in realtà viene data la possibilità di inserire stringhe XML per un successivo richiamo da parte del programmatore | Stringa o stringa xml | Opzionale
StartPage | Pagina da cui deve iniziare l'elaborazione | Intero positivo | Opzionale
EndPage | Pagina da cui deve terminare l'elaborazione | Intero positivo | Opzionale
PageBlock | Numero di pagine per blocco | Intero positivo | Opzionale
LiteralString | Serie di caratteri rappresentanti modelli di confronto stesso. | Stringa. Si possono usare i seguenti caratteri jolly: "*" = zero o più caratteri "?" = un singolo carattere "#" = un singolo numero "[lista caratteri]"= ogni singolo carattere nella lista caratteri "[!lista caratteri]" = ogni singolo carattere non appartenente alla lista caratteri | Opzionale Ad esempio "*" rappresenta tutti i barcode con un numero indefinito di caratteri, "?????" rappresenta tutti i barcode con 5 caratteri, "NS*" = tutti i barcode che iniziano con "NS".
BarcodeType | Tipo di barcode da riconoscere e in base al quale avviene la separazione | I possibili valori sono numeri rappresentanti i tipi di barcode supportati: 0: EAN 8/13 1: EAN/UPC con 2 oppure 5 cifre di supplemento 2: UPC-A 3: UPC-E (6 cifre) 4: ITF (2 cifre interlacciate di 5) 5: ITF (con la cifra di controllo) 6: Codice 39 (non supporta lettere minuscole) 7: Codice 39 con la cifra di controllo 8: Codice 39 con il carattere di trasmissione di stop e di start 9: Codice 39 modalità “full ASCII” (supporta sia le lettere minuscule che maiuscole) 10: Codice 128 11: Obsoleto. Tipo Codice 128 12: Codabar 13: Codabar con il carattere di trasmissione di stop e di start 14: Codice Postnet 15: Airline 2 di 5 16: UCC Codice 128 17: Codice 2 di 5 18: Codice 93 |
ErrWordColor | Permette di effettuare la colorazione delle parole il cui riconoscimento è dubbio rispetto al vocabolario impostato nel parametro LanguageOrder. | I valori possibili sono: 4: rosso 1: blue 2: verde "no": nessun colore | Opzionale.
LanguageOrder | Imposta l'ordine in cui devono essere elaborate le lingue per il riconoscimento. Se si prevede che ci siano poche lingue presenti sui documenti (tipo solo italiano e inglese), l'impostazione di questo parametro rende il riconoscimento più preciso. | Si può specificare un valore o una lista di valori separati da virgole come: "13": italiano "0": inglese, "2": francese, "1": tedesco, "28": spagnolo, "9": portoghese Il default è "13,0,2,1,28,9" ma per documenti solo in italiano è molto utile specificare solo "13" | Opzionale.
DeleteSource | Attraverso questo parametro è possibile indicare se il file di input debba essere cancellato. | 1: il file in input viene rimosso (default) 0: il file rimane nella posizione originaria. | Opzionale
AssemblyPath | Percorso e nome dell' assembly che viene richiamato per il job attuale. | Percorso completo e nel caso non venga specificato, sarà valutato se richiamare dalla cartella lib: 1)il valore di CustomFunctionality concatenato con .dll. Quindi se la funzionalità custom si chiama MYCUST la dll che viene cercata sarà dapprima MYCUST.dll 2)l'assembly CustomJob.dll | Opzionale

Esempi

1. Job=Functions.UserFunction("CREATEJOB","CUSTOM","" , "C:\filetest\cedolini\primo.pdf", "SPLITANDFILLFIELD", "C:\scarto\”, "" , "" , "" , "" , "" , "" , "" , "" , "" , "")

In questo caso è stato avviato un job di estrazione testo e separazione (SPLITANDFILLFIELD) dove il file multipagina in input è "C:\filetest\cedolini\primo.pdf" ed è stato inserito come output una cartella in cui saranno posizionati i file che non hanno avuto un corretto riconoscimento di campi. In questo caso non è stato introdotto alcun assembly di riferimento, pertanto sarà cercato il file SPLITANDFILLFIELD.dll o CustomJob.dll

2. Job = Functions.UserFunction("CREATEJOB", "CUSTOM","" , " C:\filetest\danneggiati\allegato.pdf", "REPAIR", "”, "<myxml><repairpath>//master/repair/</repairpath></myxml>" , "" , "" , "" , "" , "" , "" , "" , "" , "c:\assembly\assemblyriparazione.dll")

In questo caso è stato avviato un job di riparazione dei PDF (REPAIR) dove il file multipagina in input è "C:\filetest\danneggiati\allegato.pdf" ed è stato inserito come configurationString una cartella in cui andranno a essere elaborati i file. In questo caso è stato introdotto alcun assembly di riferimento, pertanto sarà caricato ed seguito l'assembly c:\assembly\assemblyriparazione.. Nella cartella "c:\assembly\" , non essendo la cartella di default, dovranno essere copiati gli assembly "Openwork.Jobs.dll", "O2S.Components.PDF4NET.dll" e "ICSharpCode.SharpZipLib.dll" .

3. Job = Functions.UserFunction("CREATEJOB", "CUSTOM", "" , "C:\filetest\xslfile.xsl|C:\filetest\xslfile.xml",

"XSLPDFPrint", "C:\filetest\ouput.pdf", "<root><foOutput>C:\filetest\output.fo</foOutput></root>" ,"" , "" , "" , "" , "" , "" ,"" ,"" ,"" )

In questo caso è stato avviato un job di riparazione di stampa unica di elenchi molto lunghi (XSLPDFPrint) dove i file in input sono due "C:\filetest\xslfile.xsl" e "C:\filetest\xslfile.xml" separati da un "|" ed è stato inserito come configurationString una il file fo intermedio. Inoltre verrà caricato l'assembly "XSLPDFPrint.dll" dal percorso di default "openwork\lib\" in quanto non è stato specificato alcun percorso alternativo nell'ultimo parametro.


Proprietà

Di seguito l'elenco delle proprietà relative alla classe OWKFunction.

· ErrCode
· ErrDescription


Classe OWKLog

Classe che permette di scrivere nel log del sistema.

Negli script esiste un'istanza predefinita: Log.

In questa sezione vengono riportati le Metodi e Proprietà della classe OWKLog.


Metodi

Di seguito l'elenco dei metodi relativi alla classe OWKLog.

I metodi non presenti nel seguente elenco non sono utilizzabili.

· WriteLog


WriteLog

Function WriteLog(Message As String,_[Application As String],_

                [Module As String],_[Procedure As String],_
[LogFile As String = ""],_ [MaxLogKb As Long = 0]_) As String

Scrive un messaggio nel file di log del sistema. Il parametro LogFile serve a specificare eventualmente il file di log in cui scrivere. Il parametro MaxLogKb serve a specificare la dimensione massima del file di log.


Proprietà

Di seguito l'elenco delle proprietà relative alla classe OWKLog.

Le proprietà non presenti nel seguente elenco non sono utilizzabili.

· ErrDescription


Classe OWKOpticalStore

Permette l'utilizzo delle funzionalità di conservazione sostitutiva in openwork®.

In questa sezione vengono riportati le Metodi e Proprietà della classe OWKOpticalStore.


Metodi

Di seguito l'elenco dei metodi relativi alla classe OWKConnection.

· CalculateHash
· ExtractTimeStampB64
· GenerateClosureFile
· PutTimeStamp
· SignFile
· VerifySignedFile


CalculateHash

Function CalculateHash(FileName As String) As String

Calcola l'impronta di un file con l'algoritmo SHA-256.

Parametri:

· FileName:Percorso completo del file di cui si vuole calcolare l'hash.

Valore restituito

· Stringa di 40 caratteri contenente l'impronta del file calcolato secondo l'algoritmo SHA-256.
· Stringa vuota in caso di errore.

Esempio

Dim OwkStore

Set OwkStore = Openwork.NewObject("OWKOPTICALSTORE")

hash = OwkStore.CalculateHash("C:\jump.pdf")' restituisce l' impronta SHA-256 del file passato come parametro del metodo


ExtractTimeStampB64

Function ExtractTimeStampB64(FileName As String) As String

Estrae da un file con marcatura temporale la codifica in base64 della marcatura temporale stessa.

Parametri

· FileName: Percorso completo del file da cui estrarre la marcatura temporale

Valore restituito

· Stringa in codifica base64


GenerateClosureFile

Function GenerateClosureFile(Path As String, [ClosureFile As String = ""],_

[Recursive As Boolean = False],_

[UniqueId As String = ""],_

[ExcludeFiles As String = ""]) As Boolean

Genera il file di chiusura di una directory.

Parametri

· Path:Contiene la directory di cui si vuole calcolare il file di chiusura.
· ClosureFile: Opzionale. Nome del file di chiusura che deve essere creato. Non contiene il percorso e viene posizionato nel percorso specificato dal parametro Path. Se non è specificato viene assegnato il nome Closure.xml
· Recursive: Opzionale. Permette di calcolare il file di chiusura anche sulle sottocartelle contenute nel percorso specificato in Path.
· UniqueID: Opzionale. Permette di inserire un identificativo che rende univoco il file di chiusura. Nel caso in cui non venga specificato, verrà creato utilizzando un criterio di tipo temporale progressivo.
· ExcludeFiles: Opzionale. Lista di nomi di file (separati dal carattere "|") che, se incontrati durante la scansione delle directory, vengono ignorati. Nell'esempio che segue viene passato il nome del file di chiusura, in modo che non includa se stesso, se già presente.

Valore restituito

· Vero se il file di chiusura è stato generato correttamente

· Falso altrimenti

Esempio

Dim OwkStore, errDescription

pathlavoro = "C:\myOptical"

Set OwkStore = Openwork.NewObject("OWKOPTICALSTORE")

If Not OwkStore.GenerateClosureFile(CStr(pathlavoro), "", True, "", "closure.xml") Then

errDescription= "Errore nella generazione del file di chiusura: " & OwkStore.ErrDescription

End If


PutTimeStamp

Function PutTimeStamp (InputFile As String, OutputFile As String) As Boolean

Appone una marcatura temporale ad un file.

Parametri

· InputFile: Percorso completo del file su cui si vuole apporre la marcatura temporale
· OutputFile: Percorso completo del file risultante, in formato PKCS#7, che conterrà sia il file originale che la marcatura temporale. Se viene passata una stringa vuota il nome viene costruito a partire dal file originale con l'aggiunta dell'estensione ".tsd"

Valore restituito

· Vero se l'operazione è stata eseguita correttamente
· Falso altrimenti

Esempio

Dim OwkStore

Set OwkStore = Openwork.NewObject("OWKOPTICALSTORE")

res = OwkStore.PutTimeStamp ("C:\jump.pdf.p7m", "")


SignFile

Function SignFile (InputFile As String,_

                   OutPutFile As String,_

                   PIN As String, [Timestamp As Boolean = False],_

                   [Options As Long = 0]) As Boolean

Firma digitalmente ed eventualmente appone la marca temporale ad un file specificato.

Parametri

· InputFile: Percorso completo del file da firmare ed eventualmente marcare
· OutputFile: Percorso completo del file risultante, in formato PKCS#7, che conterrà sia il file originale che la firma ed eventuale marcatura temporale. Se viene passata una s tringa vuota il nome viene costruito a partire dal file originale con l'aggiunta dell'estensione ".p7m" (se non c'è da apporre la marcatura) o ".tsd"
· PIN: Codice associato alla SmartCard, necessario per poterne utilizzare le funzioni
· Timestamp: Opzionale. Se il valore di questo parametro è Vero, viene inserita la marcatura temporale, con account predefinito in caso di account multipli
· Options: Opzionale. In questo parametro si può decidere se la verifica del certificato deve essere Strong (solo CA accreditate e attendibili) o Soft (Verifica basata solo sul DB locale dei certificati). I possibili valori sono i seguenti:
- 0 = Verifica Strong (default a valore non inserito)
- 1 = Verifica Soft

Valore restituito

- Vero se l'operazione è stata eseguita correttamente
- Falso altrimenti

Esempi:

Dim OwkStore

Set OwkStore = Openwork.NewObject("OWKOPTICALSTORE")

'Caso 1: è impostato firma, marcatura temporale e verifica Strong

If Not OwkStore.SignFile("c:\temp\dafirmareemarcare.tif”,

"c:\temp\firmatoemarcato.tif.p7m.tsd”, ”12345678”, True) Then

   errDescr= "Errore nella verifica del file di chiusura firmato: " & OwkStore.ErrDescription

End If

'Caso 2: è impostato solo la firma e la verifica Soft

If Not OwkStore.SignFile("c:\temp\dafirmare.tif",

" c:\temp\firmato.tif.p7m”,”12345678”, False, 1) Then

errDescr= "Errore nella verifica del file di chiusura firmato: " & OwkStore.ErrDescription

End If


VerifySignedFile

Function VerifySignedFile (InputFile As String,_

                          [OutPutFile As String],_

                          [ForceTimestamp As Boolean = False],_

                          [OffLine As Boolean = False]) As Boolean

Effettua la verifica dei certificati ed opzionalmente estrae il contenuto del file in un percorso specificato.

Parametri

· InputFile: Percorso completo del file da firmare ed eventualmente marcato da verificare
· OutputFile:Opzionale. Percorso completo del file in cui deve essere salvato il contenuto estratto da InputFile. Se viene passata una stringa vuota il contenuto non viene estratto
· ForceTimeStamp:Opzionale. Se il valore di questo parametro è True , viene forzata la verifica sulla marcatura temporale, quindi la funzione fallisce se essa fallisce
· OffLine: Opzionale. Se il valore di questo parametro è True, durante la verifica si utilizza il database locale dei certificati e non vengono consultate online le liste di revoca dei certificati pubblicate dagli enti certificatori. Questa opzione in pratica si utilizza nelle fasi di test per saltare le procedure che avvengono online e per usare firme digitali in modalità soft (non rilasciate da certificatori accreditati)

Valore restituito

· Vero se l'operazione è stata eseguita correttamente

· Falso altrimenti

Esempi:

Dim OwkStore

Set OwkStore = Openwork.NewObject("OWKOPTICALSTORE")

hash = OwkStore.CalculateHash("C:\jump.pdf")

If Not OwkStore.VerifySignedFile(CStr(pathlavoro & "\" & filefirmato),

CStr(pathlavoro & "\tmp_closure.xml"), True) Then

errDescr= "Errore nella verifica del file di chiusura firmato: " & OwkStore.ErrDescription

End If


Proprietà

Di seguito l'elenco delle proprietà relative alla classe OWKOpticalStore.

· ErrCode
· ErrDescription


Classe ProcessInstance

Rappresenta un'istanza di processo.

Negli script esistono tre istanze predefinite:

· ThisProcess: rappresenta il processo corrente.
· MainProcess: rappresenta il processo principale ed ha senso solo se il processo corrente è un sottoprocesso.
· Globals: oggetto che serve per gestire le variabili globali, mediante i metodi AddVar, GetVar e DeleteVar.

In questa sezione vengono riportati le Metodi e Proprietà della classe ProcessInstance.


Metodi

Di seguito l'elenco dei metodi relativi alla classe ProcessInstance

I metodi non presenti nel seguente elenco non sono utilizzabili.

· AddVar
· ClearDebug
· DeleteVar
· Freeze
· GetAccessList
· GetVar
· Pause
· Restart
· SetAccessList
· SetReference
· StartFromModel
· Terminate
· UnFreeze
· VarCount
· WriteDebug


AddVar

Function AddVar(Name As String, Value As Variant[, Style As Integer = 0]) As Boolean

Permette di aggiungere una variabile di processo: ThisProcess.AddVar "Totale", 475

Il parametro Style non è attualmente utilizzato.

Se la funzione restituisce falso vuol dire che la variabile non è stata creata, nel qual caso la proprietà ErrDescription dell'oggetto conterrà la descrizione dell'errore avvenuto.

Se la variabile esisteva in precedenza, il valore sarà sostituito con quello passato. Le seguenti variabili hanno un significato particolare:

Variabile | Significato
PROCESSDEBUG | Contiene le informazioni di debug scritte con il metodo WriteDebug.
NOLOG | Dal momento in cui viene settata ad un valore <> 0 non viene loggata più nessuna operazione nel processo, tranne il termine
DONTSTARTPROCESS | Indica se i documenti creati automaticamente (cioè in attività di tipo creazione che non hanno partecipanti) devono avviare eventuali processi (0 oppure <>0)
DONTPUBLISH | Indica se i documenti creati automaticamente devono essere resi disponibili (0 oppure <>0)
ASSIGNNUMBER | Indica se i documenti creati automaticamente come revisione devono essere numerati (0 oppure <>0)
AUTOUSERID | ID dell'operatore che sarà l'autore dei documenti creati automaticamente. La proprietà non si applica alle attività di creazione fascicolo.


ClearDebug

Function ClearDebug As Boolean

Elimina le informazioni di debug del processo.


DeleteVar

Function DeleteVar(Name As String) As Boolean

Elimina una variabile di processo. Se la funzione restituisce falso vuol dire che la variabile non è stata eliminata, nel qual caso la proprietà ErrDescription dell'oggetto conterrà la descrizione dell'errore avvenuto.

Esempio

ThisProcess.DeleteVar "NomeFile"


Freeze

Function Freeze(UntilDate As Variant) As Boolean

Sospende fino alla data specificata in UntilDate l'esecuzione di tutte le operazioni automatiche del processo, cioè quelle che vengono eseguite dal servizio openwork® Manager: queste comprendono l'esecuzione di attività di automazione (senza partecipanti), l'attivazione di nuove attività, la verifica periodica di condizioni di completamento e scadenze timer, la verifica di attività di selezione automatica.

Il processo risulta comunque in stato attivo e le attività in carico ad operatori restano comunque in agenda e possono essere eseguite.

Questa funzionalità è utile principalmente per diminuire il carico di lavoro dell'openwork® Manager che in questa situazione non ha bisogno di effettuare tutte le verifiche periodiche per il processo. Va utilizzata se si prevede che non ci saranno eventi significativi per l'evoluzione del processo in un certo intervallo di tempo, oppure per effettuare le verifiche periodiche sul processo ad intervalli più larghi rispetto alla normale temporizzazione del servizio.

Il processo può essere riportato nel suo stato normale prima della scadenza (UntilDate) con il metodo UnFreeze.

attenzione

Attenzione

Eseguendo da script di processo una operazione di blocco di una form utilizzando la funzione Freeze, questa è negata se la form è aperta in una sessione utente. Ciò significa che occorre gestire nello script di processo l'eccezione che viene lanciata qualora si verifica la situazione suddetta.

Esempio

Introduce un ritardo di 10 minuti

ThisProcess.Freeze DateAdd("n", 10, Now)


GetAccessList

Function GetAccessList(AccessType As String) As String

Restituisce, per una istanza di processo, la formula che costituisce la lista di accesso specificata con il parametro AccessType.

La formula restituita è del tipo ";N 23;G 2;"

I valori ammessi per il parametro AccessType sono i seguenti:

instanceaccess lista di elementi organizzativi che hanno accesso almeno in lettura alla istanza di processo;

processowners lista di elementi organizzativi che hanno accesso in modifica alla istanza di processo ossia i responsabili di processo;
reducedmode lista di elementi organizzativi che hanno accesso in modalità ridotta alla istanza di processo;


GetVar

Function GetVar(Index)

Restituisce il valore di una variabile di processo.

Il valore passato nel parametro Index può essere il nome della variabile oppure il suo indice (a partire da 1).

Esempio

valore = ThisProcess.GetVar("Totale")

valore = ThisProcess.GetVar(1)

Nel caso in cui la variabile richiesta non esiste viene restituito un Variant non inizializzato (empty).

La variabile PROCESSDEBUG contiene le informazioni di debug scritte con il metodo WriteDebug.

nota

Nota

Le variabili di processo vengono eliminate quando il processo termina.


Pause

Function Pause() As Boolean

Mette in pausa il processo corrente (ossia porta il suo stato su psPaused), con tutti gli eventuali sottoprocessi.


Restart

Function Restart() As Boolean

Fa ripartire un processo che era stato messo in pausa (ossia riporta il suo stato su psActive), con tutti gli eventuali sottoprocessi.


SetAccessList

Function SetAccessList(AccessType As String , Formula As String) As Boolean

Imposta, per una istanza di processo, una lista di accesso. Restituisce True se l'operazione va a buon fine, False altrimenti; in quest'ultimo caso le informazioni sull'errore si possono leggere con le proprietà ErrCode ed ErrDescription.

· Il parametro AccessType specifica quale lista di accesso si vuole impostare. I valori ammessi per il parametro AccessType sono i seguenti:

instanceaccess lista di elementi organizzativi che hanno accesso almeno in lettura alla istanza di processo;

processowners lista di elementi organizzativi che hanno accesso in modifica alla istanza di processo ossia i responsabili di processo;
reducedmode lista di elementi organizzativi che hanno accesso in modalità ridotta alla istanza di processo;
· Il parametro Formula contiene la formula organizzativa che si vuole impostare.

Esempio

Utilizzando il metodo SetAccessList è possibile impostare da script la lista di elementi organizzativi che rappresentano il process owner di una istanza di processo.

Ret = ThisProcess.SetAccessList("processowners", ";R 12;U 25;G 2;")


SetReference

Function SetReference(vData As Variant) As Boolean

Imposta il riferimento del processo. È possibile passare nel parametro vData un oggetto Client (scheda di anagrafica) oppure una stringa: in quest'ultimo caso resterà memorizzata solo una descrizione del riferimento.


StartFromModel

Function StartFromModel (ModelID As Long, [DocumentStyle As Long = 0],_

                         [DocumentId As Long = 0], [UserID As Long = 0]) As Boolean

Avvia un'istanza di processo a partire da un modello.

ModelID è l'identificativo del modello.

I parametri opzionali DocumentStyle e DocumentId servono a specificare l'eventuale documento associato all'istanza di processo (documento di avvio).
Il parametro UserID serve a specificare l'identificativo dell'operatore che risulta aver avviato il processo.

Se la funzione va a buon fine restituisce il valore True.

nota

Nota

Se il metodo viene istanziato attraverso l'oggetto predefinito ThisProcess, questi punterà al nuovo processo eventualmente creato utilizzando "StartFromModel".

E'consigliabile quindi definire un nuovo oggetto della classe ProcessInstance:

NewProc = openwork.newobject("ProcessInstance")

NewPRoc.StartFromModel


Terminate

Function Terminate([Kill As Boolean = Falso], [Clear As Boolean = Falso]) As Boolean

Termina un processo e lo mette nello storico.

Kill indica che il processo è interrotto e non terminato naturalmente; se Clear è vero tutte le attività del processo vengono eliminate e resta traccia solo nel log del processo (questo è il comportamento standard del sistema).


UnFreeze

Function UnFreeze() As Boolean

Riporta il processo nello stato normale, in cui le operazioni automatiche riprendono a funzionare.

Si veda la funzione Freeze.


VarCount

Function VarCount() As Long

Restituisce il numero di variabili di processo definite per il processo corrente.


WriteDebug

Function WriteDebug(Message As String)

Restituisce true se l'operazione va a buon fine. Scrive un messaggio nello spazio di debug del processo. Le informazioni di debug possono essere lette consultando la variabile di processo PROCESSDEBUG oppure dallo strumento di gestione delle istanze di processo nell'openwork® BPM Tools.


Proprietà

Di seguito l'elenco delle proprietà relative alla classe ProcessInstance.

Le proprietà non presenti nel seguente elenco non sono utilizzabili.

· Activities
· CanBeSubProcess
· Description
· ErrCode
· ErrDescription
· MainOrg
· Name
· Number
· Priority
· ProcessID
· Reference
· SingleInstance
· StartDocument
· Status


Activities

Property Activities(Index As Long) As Object

Restituisce un oggetto della classe Activity che rappresenta una attività del processo. In caso di errore restituisce Nothing. Index è l'identificativo dell'attività.

Esempio

Dim act

Set act = ThisProcess.Activities(12)


CanBeSubProcess

Property CanBeSubProcess As Integer

Sola lettura. Indica se il processo può essere usato come sottoprocesso.


Description

Property Description As String

Sola lettura. Descrizione del processo.


MainOrg

Property MainOrg As Long

Sola lettura. Restituisce l'ID del processo originale da cui il processo corrente deriva.


Name

Property Name As String

Sola lettura. Nome del processo.


Number

Property Number([ByDescription As Boolean = False]) As Variant
Number - proprietà che restituisce il numero del processo.
Se ByDescription è falso (default) restituisce il numero (es. 143), se è vero restituisce la descrizione (es. 00143/2008).


Priority

Property Priority As Integer

Imposta e/o restituisce la priorità del processo (numero compreso tra 0 e 4).


ProcessID

Property ProcessID As Long

Imposta o restituisce l'identificativo del processo. L'impostazione di questa proprietà causa l'inizializzazione dell'oggetto con i dati del processo specificato.


Reference

Property Reference([ByID As Boolean = Falso]) As String

Restituisce la descrizione o l'ID (Codice Anagrafica) dell'elemento di anagrafica che rappresenta il riferimento principale del processo. Ad esempio, se il processo è stato originato da un protocollo in entrata, il riferimento sarà il mittente del protocollo.


SingleInstance

Property SingleInstance As Boolean

Sola lettura. Indica se il processo è a singola istanza, ossia può esiste un'unica istanza attiva.


StartDocument

Property StartDocument As Object

Sola lettura. Restituisce il documento da cui si è originato il processo, se esiste.

Esempio

set Mitt = ThisProcess.StartDocument.GetFieldValue("Mittente")


Status

Property Status As ProcessStatus

Sola lettura. Restituisce lo stato del processo.

L'elenco dei possibili stati che il processo può assumere è disponibile nel paragrafo Costanti.


Classe Role

Permette la gestione dei ruoli in openwork®.

Un oggetto di questa classe viene inizializzato specificando la proprietà ID.

In questa sezione vengono riportati le Proprietà della classe Role.


Proprietà

Di seguito l'elenco delle proprietà relative alla classe Role.

Le proprietà non presenti nel seguente elenco non sono utilizzabili.

· ErrDescription
· FullName
· ID
· IsBoss
· Name
· Obsolete
· Office
· Users


FullName

Property FullName As String

Sola lettura. Restituisce il percorso completo nell'organigramma del ruolo puntato dall'oggetto corrente.


ID

Property ID As Long

Permette di impostare e/o leggere l'ID dell'oggetto. L'impostazione della proprietà ID comporta l'inizializzazione dell'oggetto.


IsBoss

Property IsBoss As Boolean

Sola lettura. Restituisce vero se il ruolo è Responsabile dell'unità organizzativa.


Name

Property Name As String

Sola lettura. Restituisce il nome del ruolo puntato dall'oggetto corrente.


Obsolete

Property Obsolete As Boolean

Sola lettura. Restituisce vero se il ruolo non fa parte dell'organigramma corrente (è stato eliminato).


Office

Property Office As Object

Sola lettura. Restituisce un oggetto della classe Office che rappresenta l'unità organizzativa a cui appartiene il ruolo corrente.


Users

Property Users As String

Sola lettura. Restituisce una stringa di ID di utente separati da ";" che rappresenta tutti gli operatori inseriti nel ruolo corrente (ad esempio "10;11;19;").


Classe User

Permette la gestione degli operatori inseriti in organigramma.

Un oggetto di questa classe viene inizializzato specificando la proprietà ID.

In questa sezione vengono riportate le Proprietà della classe User.


Proprietà

Di seguito l'elenco delle proprietà relative alla classe User.

Le proprietà non presenti nel seguente elenco non sono utilizzabili.

· Client
· ErrDescription
· FullName
· ID
· Name
· Obsolete
· Role


Client

Property Client As Object

Restituisce un oggetto della classe Client che contiene la scheda anagrafica dell'operatore puntato dall'oggetto corrente


FullName

Property FullName As String

Sola lettura. Restituisce il percorso completo nell'organigramma dell'operatore puntato dall'oggetto corrente.


Name

Property Name As String

Sola lettura. Restituisce il nominativo da organigramma dell'operatore puntato dall'oggetto corrente.


Obsolete

Property Obsolete As Boolean

Sola lettura. Restituisce vero se l'operatore non fa parte dell'organigramma (cioè è stato eliminato).


Role

Property Role As Object

Sola lettura. Restituisce un oggetto della classe Role che rappresenta il ruolo in cui è inserito l'operatore.


Esempi di script

Nellla seguente sezione sono riportati alcuni esempi di script di probaibli situazioni che si gestiscono attraverso la modellazione di processi.

In dettaglio:

· Microsoft Project: Importazioni di dati
· Microsoft Project: Stallo
· Variabile di processo
· Campi specifici
· Preparazione di liste
· Verifica operatore
· Lista di anagrafica
· Lista: Stallo
· Allegato: Stallo
· Trasferimento da MS Excel a openwork®
· Trasferiemento da openwork® a Miscrosoft Excel
· Trasferimento da openwork® al database


Microsoft Project: Importazione di dati

Il seguente script mostra un esempio d''imporatazione di dati provenienti da un progetto gestito in Microsoft Project:

Sub Activity15_AfterCompletion

Dim act

Dim Connessione, strconn

Dim record, query

Dim dest

Dim CodiceCorso, PeriodoCorso

Set act = openwork.newobject("ACTIVITY")

act.ProcessID = ThisActivity.ProcessID

act.ID = 5  ' proposta approvata dalla DG

CodiceCorso = thisprocess.getvar("Codice corso")

strconn = "Provider=Microsoft.Project.OLEDB.9.0;PROJECT NAME=c:\openwork\" &                   CodiceCorso & ".mpp"

'Apre la connessione

Set Connessione = CreateObject("ADODB.Connection")

Connessione.open strconn

Set record = CreateObject("ADODB.recordset")

record.Open "select TASKearlystart,TASKearlyfinish from TASKS where taskid=5", Connessione

PeriodoCorso = "Dal " & FormatDateTime(record("TASKearlystart"), 2) & " al " _& FormatDateTime (record("TASKearlyfinish"), 2)

act.document.SetFieldValue("Corso effettuato nel periodo"), PeriodoCorso

record.close

record.Open "select TASKText2 from TASKS where taskid=3", ConnessioneBase

act.document.SetFieldValue("Sede del corso"), record("TASKText2")

record.close

Set record = Nothing

Set Connessione = Nothing

Set act = Nothing

End Sub


Microsoft Project: Stallo

Il seguente script mostra un esempio di stallo di un processo legato al completamento di un progetto gestito in Microsoft Project

Function Activity14_ExitCondition

Dim Connessione, strconn

Dim record, query

Dim dest

Dim CodiceCorso

CodiceCorso = thisprocess.getvar("Codice corso")

strconn = "Provider=Microsoft.Project.OLEDB.9.0;PROJECT NAME=c:\openwork\" &   CodiceCorso & ".mpp"

'Apre la connessione

Set ConnessioneBase = CreateObject("ADODB.Connection")

Connessione.open strconn

Set record = CreateObject("ADODB.recordset")

record.Open "select TASKPerCentCOMPlete from TASKS where taskid=0", Connessione

Activity14_ExitCondition = (record("TASKPerCentCOMPlete") = 100)

record.close

Set record = Nothing

Set Connessione = Nothing

End Function


Variabile di processo

Il seguente script riguarda l'impostazione di una variabile di processo.

Il valore di questa variabile è contenuto in un campo specifico di un documento.

thisprocess.addvar "Codice corso", _

ThisActivity.Document.GetFieldValue("Corso").GetFieldValue("Codice corso")


Campi specifici

Il seguente script mostra un esempio in cui è possibile impostare valori in campi specifici.

In questo caso il documento viene creato con attività di automazione:

Sub Activity9_AfterCompletion

Dim act

Set act = openwork.newobject("ACTIVITY")

act.ProcessID = ThisActivity.ProcessID

act.ID = 5        ' doc ove la DG approva

ThisActivity.document.SetFieldValue("Altri destinatari"), _

act.document.GetFieldValue("Partecipanti al corso")

ThisActivity.document.SetFieldValue("IDDIAutoDoc"), act.document.id

ThisActivity.document.SetFieldValue("Ufficio protocollo"), _

act.document.GetFieldValue("Ufficio di competenza")

ThisActivity.document.SetFieldValue("Ufficio di competenza"), _

act.document.GetFieldValue("Ufficio di competenza")

End Sub


Preparazione di liste

Il seguente script mette in evidenza l'uso delle liste:

esse vengono preparate attraverso dati provenienti da altre liste

Sub Activity20_AfterActivate

Dim DocInterno

Dim dest

Dim Imputati, tempAnag

Dim Carcere,Domiciliari

Set DocInterno = OpenWork.NewObject("Document")

DocInterno.addnew 3, thisactivity.DocModelID  ' 3 = Documento interno ; 8 =        Lettera di trasmissione

Set dest = OpenWork.NewObject("Client")

dest.FindClient "DESTINATARI VARI"

DocInterno.SetFieldValue "Corrispondente esterno", dest

DocInterno.SetFieldValue "Riferimento pratica", ThisFolder.ID

DocInterno.update

Set ThisActivity.Document = DocInterno

ThisActivity.Save

Set Carcere = OpenWork.NewObject("Collection")

Set Domiciliari = OpenWork.NewObject("Collection")

Set Imputati = ThisFolder.GetFieldValue("Imputato/i")

On Error Resume Next

For Each tempAnag In Imputati

    Select Case tempAnag.GetFieldValue("Stato")

       Case "Detenuto in carcere"

Carcere.add tempAnag, tempAnag.ID

  Case "Detenuto agli arresti domiciliari"

Domiciliari.add tempAnag, tempAnag.ID

End Select

Next tempAnag

DocInterno.SetFieldValue "Detenuti", Carcere

DocInterno.SetFieldValue "Arresti domiciliari", Domiciliari

Set DocInterno = Nothing

Set dest = Nothing

Set Imputati = Nothing

Set Carcere = Nothing

Set Domiciliari = Nothing

Set tempAnag = Nothing

End Sub


Verifica operatore

Verifica che l'operatore che ha avviato il processo è lo stesso che ha messo una certa firma

Il seguente script mostra un esempio per verificare che, l'operatore che ha avviato il processo, è lo stesso che ha messo una certa firma

Function Activity4_SelectionValue

Dim IDRichiedente

Dim IDSegreteria

Dim IDAmministratore

Dim act

Set act = OpenWork.NewObject("ACTIVITY")

act.processid = ThisActivity.ProcessID

IDRichiedente= ThisProcess.StartDocument.Author (True)

act.id = 2        ' attività svolta dalla segreteria

IDSegreteria= act.document.signed (1)        ' è la firma n° 1 del documento

act.id = 3        ' attività svolta dall'amministratore

IDAmministratore = act.document.signed (2)        ' è la firma n° 2 del documento

Activity4_SelectionValue = (IDRichiedente= IDSegreteria) Or (IDRichiedente=IDAmministratore)

Set act = nothing

End Function


Lista di anagrafica

Il seguente script mostra un esempio di scorrimento e controllo degli elementi di una lista di

anagrafica:

Function Activity19_Condition27

Dim Imputati, Detenuti

Dim tempAnag

Set Imputati = ThisFolder.GetFieldValue("Imputato/i")' lista di anagrafica

On Error Resume Next

Detenuti = 0

For Each tempAnag In Imputati

    If tempAnag.GetFieldValue("Stato") = "Detenuto in carcere" _

    Or tempAnag.GetFieldValue("Stato") = "Detenuto agli arresti domiciliari"           Then

         detenuti = detenuti + 1

End If

Next tmpAnag

Activity19_Condition27 = (detenuti > 0)

End Function


Lista: Stallo

Il seguente script mostra una situazione di stallo sino a quando non ci sono elementi in una lista:

Function Activity24_ExitCondition

Activity24_ExitCondition = (ThisActivity.Document.GetFieldValue("Partecipanti    al corso").count > 0)

End Function


Allegato: Stallo

Il seguente script mosta una situazione di stallo di un processo sino a quando non si allega un file:

Function Activity10_ExitCondition

Activity10_ExitCondition = (ThisActivity.Document.Attachments.count > 0)

End Function


Trasferimento da MS Excel a openwork®

Il seguente script mostra un esempio in cui viene:

· prelevato il valore di di un dato in una cella di un file MS Excel autocomposto
· allegato ad un documento
· trasferito in un campo dei dati specifici del documento

Sub Activity2_AfterExecute

Dim NomeFileExcel

Dim objExcel

Dim importo

If thisactivity.document.attachments.count <> 0 Then

    NomeFileExcel = thisactivity.document.SaveAttachedDocument(  _ thisactivity.

                    document.Attachments(1).FileName)

Set objExcel = CreateObject("Excel.Application")

objExcel.workbooks.open (NomeFileExcel)

importo = objExcel.Range("importo").Value

objexcel.activeworkbook.close

Set objExcel = nothing

ThisActivity.Document.SetFieldValue "Importo fattura",importo

End If

End Sub


Trasferimento da openwork® a Microsoft Excel

Il seguente script mostra il trasferimento dati da openwork® ad un documento esterno di Miscrosoft Excel:

Sub Activity5_AfterCompletion

Dim Nome, Operatore

Dim Gi, Gf

Dim dData, dPrimaData

Dim nDifferenza

Dim objExcel

Set Operatore = openwork.newobject("USER")

Operatore.id = ThisProcess.StartDocument.BossID

nome = Operatore.name

Gi = ThisProcess.StartDocument.GetFieldValue("Giorno inizio ferie")

Gf = ThisProcess.StartDocument.GetFieldValue("Giorno fine ferie")

Set objExcel = CreateObject("Excel.Application")

objExcel.workbooks.open("c:\openwork\Planning Ferie.xls")

dData = CDate(Gi)

dPrimaData = CDate(objExcel.Range("PrimaData").Value)

nDifferenza = (dData - dPrimaData) + 2

objExcel.Cells.Find(Nome, objExcel.ActiveCell, -4123, 2, 1, 1, False).    Activate

objExcel.ActiveCell.Offset(0, nDifferenza).Select

objExcel.Selection.Interior.ColorIndex = 15

objExcel.Selection.Interior.Pattern = 1

objExcel.Selection.Interior.PatternColorIndex = 56

objexcel.activeworkbook.save

objexcel.activeworkbook.close

Set objExcel = Nothing

End Sub


Trasferimento da openwork® al database

Il seguente script mostra un esempio di trasferimento dei dati da un documento openwork® ad un database esterno:

Sub Activity5_AfterCompletion

Dim Connessione, strconn

Dim Tabella, record

Dim query

Dim Data, Numero, Settore

Dim Cliente

Dim Provincia

Dim Importo

strconn= "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\dati\fatture.mdb"

tabella = str(year(thisactivity.document.getfieldvalue("Data documento")))

Data = thisactivity.document.getfieldvalue("Data documento")

Numero = thisactivity.document.Number

Cliente = thisactivity.document.getfieldvalue("Corrispondente esterno").Name

Settore = thisactivity.document.getfieldvalue("Settore")

Provincia = thisactivity.document.getfieldvalue("Corrispondente esterno").getfieldvalue("Provincia")

Importo = thisactivity.document.getfieldvalue("Importo fattura")

'Apre la connessione

Set ConnessioneBase = CreateObject("ADODB.Connection")

ConnessioneBase.Mode = adModeReadWrite

ConnessioneBase.Open strconn

'Apre il recordset

Set Record = CreateObject("ADODB.Recordset")

record.open tabella, ConnessioneBase, 1, 3

record.addnew

record("data") = data

record("numero") = Numero

record("settore") = Settore

record("cliente") = Cliente

record("provincia") = Provincia

record("importo") = Importo

record.update

Set record = Nothing

Set ConnessioneBase = Nothing

End Sub


Componenti aggiuntive: openwork® Professional e Power Components

Per incrementare maggiormente le potenzialità di openwork® , sono disponibili componenti aggiuntivi.

In questa sezione analizzeremo in dettaglio:

· openwork® Professional components
· openwork® Power Components


openwork® Professional components

I moduli aggiuntivi classificati come openwork® Professional components comprendono:

· openwork® Authentication
· openwork® Document Management Connector
· openwork® Export
· openwork® FullText
· openwork® PDF converter


openwork® Authentication

La necessità di introdurre, a livello di applicazione, un modulo di autenticazione nasce dall'utilizzo ormai diffuso dei Directory Service, sistemi in grado di centralizzare la gestione delle risorse presenti in una rete. Esempi di Directory Service sono:

· Active Directory della Microsoft;
· eDirectory della Novell;
· Red Hat Directory Server;
· iPlanet e Sun ONE della Sun.

Per cui con il modulo di autenticazione di openwork® si vuole accedere a questi sistemi per verificare le credenziali di una risorsa, o entità, di tipo utente.

I sistemi di Directory Service con cui è in grado di comunicare direttamente openwork® sono quei sistemi che implementano il modello X.500 e che supportano il protocollo LDAP.

Sintetizzando, questo modulo permette l'autenticazione su sistemi di identity management esterni tramite:

· LDAP (su un Directory Service che supporta LDAP, quindi anche su Active Directory)
· Applicazione custom: personalizzando un componente la cui interfaccia è analizzata nelle sezioni successive

nota

Nota

E' opportuno precisare che il modulo Authentication viene utilizzato solo dai web services nella fase di login e deve essere acquistato e attivato sul server openwork®.


Interfacce di autenticazione supportate

L'autenticazione viene gestita da openwork® attraverso due possibili modalità:

1. interna: attraverso il provider Active Directory Service Interfaces(ADSI);
2. esterna: si utilizza un oggetto dedicato.

La modalità di autenticazione ed altre informazioni fanno parte dei parametri di configurazione.

E' stata prevista una modalità esterna per una serie di ragioni:

1. si vuole implementare un'autenticazione non LDAP attraverso il provider ADSI; in particolare il provider ADSI supporta i seguenti Directory Service:

a. Windows NT;

b. LDAP versione 2 e 3;

c. Novell NetWare Directory Service (NDS);

d. NetWare 3 bindery (NWCOMPAT);

2. si vuole implementare un particolare metodo di autenticazione o di cifratura non supportato dal provider ADSI;
3. si vogliono sfruttare metodi propri di un particolare SDK LDAP, infatti ogni vendor mette a disposizione un proprio SDK LDAP.


Sintassi del nome utente in openwork®

Lo username dell'opertaore di openwork® costituisce l'elemento di collegamento con un Directory Service:

name[@domain]

dove:

· name: rappresenta il nome utilizzato nell'autenticazione nel Directory Service o un attributo dell'utente; in questo secondo caso, come vedremo in seguito, si dovrà cercare, attraverso LDAP, prima l'oggetto Utente che contiene un particolare attributo con valore name per poi utilizzare il relativo Distinguished Name(DN) nell'autenticazione.

Più in generale il nome utente è il nome usato nell'autenticazione nel Directory Service; quindi, per esempio, in Active Directory si può utilizzare indistintamente il Distinguished Name(DN), il sAMAccountName o lo userPrincipalName;

· domain: rappresenta il nome DNS del dominio, per es. dominio.it.


Concetti base

Lo scopo del modulo di autenticazione è quello di permettere di eseguire l'autenticazione di un operatore di openwork® su un qualsiasi sistema di Directory Service basato sul modello X.500 e che in particolare supporti il protocollo Lightweight Directory Application Protocol (LDAP), versione semplificata del più complesso DAP.

Un Directory Service è un'applicazione in grado di gestire un insieme di entità di qualsiasi genere in una struttura gerarchica, da qui il nome directory:

auth01 - Directory Services

La struttura gerarchica garantisce efficienza nella fase di ricerca.

Un'entità viene localizzata in maniera univoca attraverso una stringa denominata adsPath:

LDAP://server:port/DN

Dove DN sta per Distinguished Name e rappresenta il percosro da seguire partendo dal nodo principale, o root, al fine di localizzare l'entità cercata:

CN=bianchi, OU=test, OU=sviluppo, DC=dominio, DC=it

Quindi partendo da destra, si può affermare che l'utente bianchi è contenuto nel dominio dominio.it quindi nell'unità organizzativa sviluppo ed in fine nell'unità organizzativa test.

Per ogni entità è possibile associare una serie di attributi definiti nello schema del Directory Service.

LDAP è un protocollo che permette la ricerca e la modifica delle entità del Directory Service. Riassumendo, autenticarsi tramite LDAP equivale alla ricerca autenticata di un'entità del Directory Service.

Nel modulo di autenticazione di openwork® è stato introdotto un grado di libertà in più prevedendo la possibilità di ricercare il DN di un'entità utente, nel Directory Service, conoscendo un suo particolare attributo (per openwork® è sempre lo username dell'operatore). Trovato il DN dell'utente lo si utilizza insieme alla password, inserita nella form di login, passata direttamente al metodo login dei Web Services, per eseguire l'effettiva autenticazione.


Parametri di configurazione

I parametri di configurazione devono essere inseriti in una stringa XML che deve essere memorizzata nel campo definizione di un record, della tabella defdati, avente le seguenti caratteristiche:

· id = x(>1)
· tipo = 1
· nome = LDAP

La stringa XML è composta da un nodo principale authentication e da una serie di nodi figli i cui dettagli sono riportati nei paragrafi che seguono.

E' possibile definire più record di questo tipo, per cui è necessario indicare quale modalità utilizzare a livello di sistema(cioè per tutti gli operatori) e/o a livello di operatore:

· Impostazione a livello di sistema: il campo da modificare è nvarorg del primo record della tabella parametrisistema; i valori ammessi sono:

- 1 per utilizzare l'autenticazione interna;

- x per utilizzare il modulo authentication.

attenzione

Attenzione

La tabella parametrisistema dalla versione 5.6 di openwork® è stata sostituita con la tabella configuration come da note di rilascio della versione 5.6 Appendice A.
· Impostazione a livello di operatore: il campo da modificare è idvarorg del record corrispondente nella tabella anagraficautenti; i valori ammessi sono:

- 0 (valore di default) per utilizzare la modalità definita a livello di sistema;

- 1 per utilizzare la modalità interna;

- x per utilizzare il modulo authentication.

dove x indica la particolare configurazione, del modulo Authentication, definita nella tabella definizione.

Analizziamo in dettaglio i parametri di configurazione:

· Legenda dei simboli
· Nodo principale: authentication
· Gruppo domaininfo
· Gruppo dnrule
· Nodo search


Legenda dei simboli

Nella seguente tabella viene riportato il significato dei simboli relativi ai parametri di configurazione:

auth02 - element | Nodo XML element
auth03 - mustElement | Nodo XML element con contenuto testo obbligatorio
auth03 - mustElement | Il dettaglio 0..8 indica che ci possono essere da 0 ad infiniti nodi element allo stesso livello; la linea tratteggiata indica che non è un nodo obbligatorio
auth05 - group | Indica un raggruppamneto di oggetti; a questo oggetto non corrisponde alcun nodo XML
auth06 - fatherNode1 | Indica che nel nodo padre, il nodo a sinistra di questo oggetto, ci potrà essere solo uno degli oggetti collegati a destra
auth07 - fatherNode2 | Indica che nel nodo padre, il nodo a sinistra di questo oggetto, ci saranno tutti gli oggetti collegati a destra
------ | Il bordo tratteggiato indica che l'oggetto è opzionale
____ | Il bordo continuo indica che l'oggetto è obbligatorio


Nodo principale: authentication

Il nodo principale ha il seguente schema:

auth08 - mainNodeSchema

Dove il nodo radice authentication contiene da 0 a ¥ nodi otherdomain, un nodo opzionale domain e un gruppo di nodi obbligatori rappresentati da domaininfo; questi ultimi due oggetti contengono i parametri di autenticazione del dominio di default, cioè del dominio cui far riferimento quando nello username di openwork® manca l'indicazione del dominio o quando il domino indicato non corrisponde a nessuno di quelli riportati negli n nodi otherdomain.

Dettaglio dei nodi

· authentication: nodo complesso, contenente cioè altri nodi, che presenta solo l'attributo relativo al namespace.

Esempio:

<authentication xmlns="http://www.openwork.info/schema">

              .......

        </authentication>

· otherdomain: nodo complesso senza attributi.

Esempio:

      <otherdomain>

              .......

      </otherdomain>

· domain: nodo di tipo stringa che contiene il nome DNS del dominio.

Esempio:

<domain>dominio.it</domain>

· domaininfo: insieme delle informazioni da utilizzare nell'autenticazione per il dominio indicato nel nodo domain presente allo stesso livello. (cfr. Gruppo domaininfo)


Gruppo domaininfo

Al gruppo domaininfo corrisponde il seguente schema:

auth09 - gruppo domaininfo

Contiene tutte le informazioni relative alla locazione del dominio, alle regole per la costruzione dell'effettivo username ed eventualmente le informazioni necessarie per l'autenticazione esterna. Per l'autenticazione esterna, molti di questi nodi non hanno alcun senso.

Dettaglio nodi

· port: nodo di tipo intero che contiene la porta da utilizzare nella connessione

Esempio:

      <port>389</port>

Le porte più comuni utilizzate sono la 389 per connessioni in chiaro e la 636 per le connessioni criptate SSL.

· encrypt: nodo di tipo intero che permette di indicare, per il particolare dominio a cui è associato, se utilizzare un'autenticazione in chiaro o criptata.

nota

Nota

Solo i dati relativi all'autenticazione vengono criptati; per criptare tutta la connessione è necessario utilizzare attraverso un metodo esterno, per esempio, una connessione SSL.

Possibili valori:

- 0: autenticazione in chiaro (valore di default)

- <>0: autenticazione criptata

Esempio:

<encrypt>0</encrypt>

cioè autenticazione in chiaro

· server: nodo di tipo stringa che contiene il nome o l'IP del host o server DNS.

Esempio:

<server>128.0.0.1</server>

· external: nodo di tipo intero che permette di indicare se utilizzare l'autenticazione esterna con un oggetto COM il cui ProgID è indicato nel nodo class.

Possibili valori:

· 0: autenticazione interna(valore di default)
· <>0: autenticazione esterna

Esempio:

<external>0</external>

· class: nodo di tipo stringa che contiene il ProgID dell'oggetto COM da utilizzare nell'autenticazione esterna, cioè quando il nodo external è impostato ad un valore <>0.

Esempio:

<class>oggetto.auth.1</class>

· setdomain: nodo di tipo intero che permette di indicare se aggiungere, se manca, il dominio al nome utente openwork®.

Possibili valori:

· 0: non aggiunge il dominio (valore di default)
· <>0: aggiunge il dominio

Esempio:

<setdomain>1</setdomain>

quindi se il nome utente inserito nella maschera di login di openwork® è bianchi allora il nome effettivo utilizzato nell'autenticazione tramite LDAP è bianchi@dominio.it.

In realtà quale sia il nome effettivo dipende anche da altri nodi:

· context: nodo di tipo stringa che contiene il contesto in forma di DN cui accedere in fase di autenticazione. L'autenticazione, in realtà, viene eseguita collegandosi ad un'entità del Directory Service rappresentata, sotto forma di DN, dal contenuto di questo nodo. Di default si accede alla root del dominio, che equivale al contenuto del nodo domain espresso in forma di DN; quindi se domain=dominio.it il relativo DN è DC=domain,DC=it .

Questo nodo è necessario in quanto non è detto che gli utenti abbiano l'accesso a tutti gli oggetti gestiti dal Directory Service.

Esempio:

<context>OU=Unità Organizzativa,DC=dominio,DC=it</context>

· dnrule: insieme delle regole da utilizzare nella composizione del nome utente da utilizzare nell'autenticazione. (cfr. Gruppo dnrule)


Gruppo dnrule

Quando viene inserito uno dei nodi di questo gruppo vuol dire che il nome dell'utente in openwork® non è quello che permette l'autenticazione tramite LDAP.

Al gruppo dnrule corrisponde il seguente schema:

auth10 - gruppo dnrule

Quindi si può inserire un nodo search o un nodo basedn; se vengono inseriti entrambi allora verrà considerato solo il nodo search.

Dettaglio nodi

· basedn: nodo di tipo stringa che contiene il DN relativo degli utenti di openwork®. Quindi può essere, per esempio, il DN dell'unità organizzativa in cui sono contenuti tutti gli utenti di openwork® che presentano il dominio domain. Il DN di autenticazione è la concatenazione del basedn e dello username.

Questo nodo presenta un attributo opzionale prefix che è il prefisso da utilizzare nella composizione del DN di autenticazione.

Sintassi di composizione:

                            prefix = <nome utente in openwork®>[@domain], basedn

Esempio:

              <basedn prefix="CN">OU=Unità Organizzativa,DC=dominio,DC=it</basedn>

quindi se il nome utente in openwork® è bianchi e se il nodo setdomain è impostato a 0 allora il nome dell'utente utilizzato nell'autenticazione sarà :

CN=bianchi, OU=Unità Organizzativa, DC=dominio, DC=it

· search: nodo complesso che contiene le informazioni necessarie per la ricerca dell'utente. Con la ricerca è possibile individuare il DN dell'utente partendo da un particolare attributo il cui valore è proprio lo username di openwork®.

(cfr. Nodo search)

Esempio:

                   <search>

                 …………………

                               </search>


Nodo search

Al nodo search corrisponde il seguente schema:

auth11- nodo search

Dettaglio nodi

· search: nodo complesso che contiene le informazioni necessarie alla ricerca da effettuare.

    Esempio:

<search>

…………………

</search>

· byuser: nodo complesso che contiene le informazioni dell'utente che dovrà effettuare la ricerca. Questo nodo e i nodi figli, username e password, sono necessari solo quando non è consentita la ricerca anonima.

nota

Nota

Se il nodo encrypt è <>0 allora anche l'autenticazione della fase di ricerca viene cripata, mentre la fase di ricerca vera e propria è sempre in chiaro.

Esempio:

        <search>

…………………

</search>

· username: nodo di tipo stringa che contiene il nome effettivo dell'utente con cui effettuare la ricerca.

  Esempio:

      <username>CN=pippo,OU=Unità Organizzativa,DC=dominio,DC=it</username>

· password: nodo di tipo stringa che contiene la password dell'utente username.

   Esempio:

<password>myOWKName</password>

· attribute: nodo di tipo stringa che contiene il nome dell'attributo a cui si riferisce il nome utente in openwork®.

Esempio:

<attribute>CN</attribute>

quindi attraverso una ricerca LDAP verrà cercato l'oggetto che contiene l'attributo CN = <nome utente in openwork®>. La ricerca restituisce un oggetto ADSI che ha tra le proprietà standard la proprietà adsPath ottenuto dalla concatenazione tra il tipo di richiesta (LDAP, WinNT, ecc.), il nome del server e il DN dell'oggetto trovato. Con il DN estratto dall'adsPath e la password inserita nella maschera di login di openwork® è possibile effettuare l'autenticazione.

· startcontext: nodo di tipo stringa che contiene il contesto in forma di DN da cui cominciare la ricerca. Questo contesto di partenza potrebbe essere necessario quando l'attributo da cercare è a valori univoci all'interno del contesto startcontext e a valori non univoci nel dominio. Di default assume il valore di context o di domain in forma di DN se manca il context.

Esempio:

                  <startcontext>OU=Unità Organizzativa,DC=dominio,DC=it</startcontext>


Autenticazione

In particolare l'algoritmo implementato è schematizzato di seguito:

auth12 - algoritmo

Il nodo di riferimento dal quale reperire le informazioni di autenticazione sarà il nodo otherdomain, che contiene il nome del dominio indicato nello username, oppure il nodo principale authentication in tutti gli altri casi.

Nella figura il punto di partenza è la form di login, in realtà in modulo Authentication viene utilizzato a livello di Web Services e quindi in seguito ad una chiamata al metodo login


Dettaglio Procedure

La procedura di autenticazione è suddivisa nelle seguenti sezioni.

· Caricamento Informazioni dominio
· Caricamento impostazioni di ricerca (nodo search)
· Caricamento del DN relativo (nodo basedn)
· Autenticazione interna
· Autenticazione esterna
· Esempio di nodo authentication


Caricamento Informazioni dominio

I campi caricati sono:

· domain : se presente, viene considerato quello definito nello username
· port
· encrypt
· server: obbligatorio
· external
· class: obbligatorio se external<>0
· setdomain
· context


Caricamento impostazioni di ricerca (nodo search)

I campi caricati sono:

· attribute: obbligatorio
· username: obbligatorio se definito il nodo padre byuser
· password: caricato solo se definito il nodo username


Caricamento del DN relativo (nodo basedn)

I campi caricati sono:

· basedn: obbligatorio
· prefix: attributo obbligatorio del nodo basedn


Autenticazione interna

Sostanzialmente può essere riassunta nei seguenti passi:

1. trasformazione del nome DNS del dominio nel formato DN; viene utilizzato come contesto nella ricerca dell'AdsPath dell'utente, se manca il nodo startcontext nel nodo search, e/o nell'autenticazione vera e propria, se manca o è vuoto il nodo context;
2. se sono definite le impostazioni di ricerca allora viene cercata l'ADsPath dell'utente che ha come attributo attribute lo username inserito nella fase di login di openwork®; se nel nodo search è definito il nodo byuser allora viene effettuata una ricerca non anonima, anonima altrimenti;
3. a questo punto lo username da utilizzare nell'autenticazione può assumere uno dei seguenti valori:
a. il DN dell'utente trovato nella ricerca LDAP se è definito il nodo search. Il DN viene estratto dall'AdsPath dell'utente trovato;
b. il DN costruito utilizzando l'attributo prefix, il contenuto del nodo basedn e lo username di openwork® se è definito il nodo basedn;
c. lo username di openwork®, eventualmente depurato dell'indicazione del dominio, nel caso in cui non sia definito né il nodo search né il nodo basedn.
4. ricavate tutte le informazioni necessarie si effettua l'autenticazione su un contesto che può essere uno dei seguenti:

a.il contenuto del nodo context, se definito;

b. il domain relativo in formato DN;

se si sceglie di criptare l'autenticazione allora il provider ADSI, attraverso un meccanismo di handshaking con il Directory Service, stabilisce l'algoritmo di cifratura; se il client non supporta nessuno degli algoritmi di cifratura supportati dal sistema di Directory Service allora l'autenticazione criptata non potrà essere usata a meno di una implementazione esterna (Autenticazione esterna).


Autenticazione esterna

Per poter operare l'autenticazione con una procedura esterna oltre a settare il contenuto del nodo external ad un valore diverso da 0 e del nodo class bisogna creare un componente COM che esponga almeno il seguente metodo:

Function AuthenticateUser ( Username As String,

Password As String,

Domain As String,

Port As String,

Encrypt As String,

Server As String,

OrganizationName As String ) As Long

dove

· Username e Password sono quelli inseriti nella form di login di openwork®;
· Domain viene ricavato dallo Username o preso dal nodo domain;
· Port è il contenuto del nodo port;
· Encrypt è il contenuto del nodo encrypt;
· Server è il contenuto del nodo server;
· OrganizationName è il nome dell'organizzazione in openwork®.

Il valore di ritorno rappresenta il codice di errore e può assumere i seguenti valori:

· 0 : l'autenticazione è avvenuta con successo
· <>0 : si è verificato un errore ed il codice di ritorno rappresenta appunto il codice di errore

In aggiunta al codice di errore, opzionalmente è possibile implementare, nel componente COM, un metodo per ottenere la descrizione dell'ultimo errore verificatosi; il metodo citato deve avere la seguente sintassi:

Function ErrDescription (language As String) As String

Dove language rappresenta la lingua di sistema e permette, la gestione, da implementare,della di avere una descrizione in lingua dell'errore. In ogni caso il modulo di autenticazione tenta, in caso di errore, di utilizzare questo metodo, se non ci riesce ritornerà una descrizione generica concatenata al codice di errore ritornato appunto dal metodo AuthenticateUser().


Esempio di nodo authentication

<authentication xmlns="http://www.openwork.info/schema">

<otherdomain>

<domain>test.domain.it</domain>

<port>389</port>

<encrypt>0</encrypt>

<server>128.0.0.1</server>

<external>0</external>

<setdomain>0</setdomain>

<context>o=test</context>

<basedn prefix="uid">o=test</basedn>

</otherdomain>

<otherdomain>

<domain>netsistemi.loc</domain>

<server>cc-test01</server>

<external>1</external>

<class>objcetcom.ldap.1</class>

</otherdomain>

<otherdomain>

<domain>OpenLDAP.Org</domain>

<server>www.openldap.com</server>

<setdomain>1</setdomain>

<search>

<byuser>

<username>rossi</username>

<password>rossi</password>

</byuser>

<attribute>mail</attribute>

<startcontext>ou=People,dc=OpenLDAP,dc=Org</startcontext>

</search>

</otherdomain>

<domain>owkdom.test</domain>

<port>389</port>

<encrypt>1</encrypt>

<server>server-test01</server>

</authentication>

Guardando il nodo authentication si evince che openwork® gestisce gli utenti di 4 domini:

· test.domain.it: autenticazione interna (external=0) non criptata (encrypt=0) effettuata attraverso l'host con IP=127.0.0.1 (server) sulla porta 389 (port). Il nodo setdomain impostato a 0 fa sì che venga rimossa l'indicazione del dominio presente sicuramente nel nome utente gestito da openwork®; infatti per indicare il nodo otherdomain da utilizzare per l'autenticazione l'unica maniera possibile è quella di riportare il contenuto del nodo domain nel nome utente gestito da openwork®. Inoltre l'autenticazione viene effettuata sul contesto con DN=o=test e con uno username così composto (basedn):

uid=<username openwork® privato dell'indicazione di dominio>, o=test

· netsistemi.loc: autenticazione esterna (external=1) non criptata (valore di default per encrypt) effettuata attraverso l'host con nome DNS pari a cc-test01 (server) sulla porta 389 (valore di default per port). Il nodo class contiene il ProgID del componente COM, utilizzato per l'autenticazione, che espone il sopraccitato metodo AuthenticateUser().
· OpenLDAP.Org: autenticazione interna (valore di default per external) non criptata (valore di default per encrypt) effettuata attraverso l'host con nome DNS pari a www.OpenLDAP.org (server) sulla porta 389 (valore di default per port). La presenza del nodo search indica che lo username da utilizzare nell'autenticazione LDAP non è quello gestito da openwork®, piuttosto bisogna cercare il DN dell'utente che ha come attributo mail il nome utente openwork® (compresa l'indicazione del dominio visto che setdomain è <> 0) . La ricerca di questo DN deve essere effettuata dall'utente rossi (username) a partire dal contesto ou=People,dc=OpenLDAP,dc=Org (startcontext).
· Owkdom.test: autenticazione interna (valore di default per external) criptata (encrypt=1) effettuata attraverso l'host con nome DNS pari a server-test01 (server) sulla porta 389 (port). Questo è il dominio di default cui si fa riferimento quando nel nome utente di openwork® non è indicato il dominio o quando è indicato ma non corrisponde a nessuno di quelli riportati nei nodi otherdomain.

Quindi la corrispondenza utente openwork® e utente del Directory Service, per alcuni utenti di esempio, sarà:

· rossi@test.domain.it -> uid=rossi, o=test;
· bianchi@netsistemi.org -> bianchi@netsistemi.org; rimane invariato a meno di modifiche apportate all'interno del metodo AuthenticateUser();
· rossi@OpenLDAP.org -> cn=Sig Antonio Rossi, ou=People,dc=OpenLDAP,dc=Org per esempio;
· rossi -> rossi; rientra nel gruppo di utenti del dominio di default;
· gialli@errore.com -> gialli; rientra nel gruppo di utenti del dominio di default. Quindi l'indicazione di un dominio non definito in questo caso non ha alcun senso visto che il nodo setdomain non è definito ed ha quindi valore di default 0.


openwork® Document Management Connector

openwork® Document Management Connector offre strumenti per l'integrazione con altri sistemi documentali, ovvero permette di:

· Salvare i documenti, prodotti all'interno dei processi, in repository documentali esterni.
· Visualizzare e modificare, all'interno dei processi, i documenti residenti in repository esterni.
· Estendere le funzionalità di un sistema documentale con un motore di workflow esterni.

E' possibile quindi utilizzare contemporaneamente il repository di openwork® e diversi repository documentali in modo da realizzare un ambiente di gestione documentale integrato orientato ai processi.

Per comprendere correttamente il presente documento è necessario conoscere l'architettura generale della piattaforma openwork®.

In dettaglio, nelle seguenti sezioni, gli strumenti chiave per realizzare una corretta e completa integrazione:

· openwork® e la gestione documentale
· L'allegato
· Creazione e modifica di un allegato
· Struttura di un allegato
· Definizione e integrazione delle specifiche per una integrazione
· Esempio di connettore


openwork® e la gestione documentale

Un sistema di gestione documentale è fondamentalmente composto da un repository (archivio di file o documenti) e da un gestore di record (database) per memorizzare dati relativi ai file (indicizzazione); per ogni file viene creato un record all'interno del database.

In genere è possibile:

· creare collegamenti tra diversi record;
· revisionare i file;
· classificare i file;
· definire campi di indicizzazione in base alla classificazione.

Il sistema di gestione documentale integrato in openwork® ricalca fondamentalmente gli stessi principi ma con un'importante differenza: a uno stesso record possono essere associati più file o, secondo la terminologia propria della piattaforma openwork®, a una stessa form possono essere associati più allegati, come mostrato nel grafico:

DM01 - grafico

Questa impostazione si giustifica pienamente se consideriamo il “compito” di una form all'interno della piattaforma openwork®: trasferire informazioni e documenti tra attori di un processo.

La form può contenere campi non solo di tipo scalare ma anche di tipo complesso (documento, lista di operatori, tabelle, ecc…) non strettamente necessari all'indicizzazione dei documenti ma funzionali al processo; gli allegati possono essere più di uno per la presenza, ad esempio, di file di servizio per l'esecuzione delle attività nel processo.

Le form sono classificate secondo un piano di classificazione definito all'interno di openwork® BPM Tool. Per ogni tipologia di form è possibile definire liberamente le proprietà tag di tipo stringa e ntag di tipo numerico.

Per ogni campo della form è possibile definire liberamente le proprietà tag1, tag2, e tag3 di tipo stringa.


L'allegato

L'allegato è un record associato univocamente alla form di cui riportiamo una rappresentazione in XML.

<attachment>

<id>5255</id>

<filename>Integrazione con sistemi di gestione documentale.doc</filename>

<extension>doc</extension>

<creationdate>2005-10-12</creationdate>

<author>

   <id>5</id>

   <name>Antonio Rossi</name>

   <role>Responsabile Area Ricerca & Sviluppo</role>

</author>

<locking>

   <value>1</value>

   <date>2005-10-12T10:27:00</date>

   <user>

     <id>5</id>

     <name>Antonio Rossi</name>

     <role> Direttore Area Ricerca & Sviluppo</role>

   </user>

   <checkout>0</checkout>

</locking>

<version>1</version>

<filesize>520</filesize>

<linked>0</linked>

<external>0</external>

<byemail>1</byemail>

<extshow>0</extshow>

<primary>0</primary>

<sha1/>

<notes>Questo file contiene informazioni....</notes>

<repository>depositodoc</repository>

<extid>135</extid>

<extclass/>

<extclassid>0</extclassid>

</attachment>

In particolare:

id | identificativo univoco dell'allegato all'interno di openwork®
version | versione dell'allegato: possono essere presenti più allegati con lo stesso filename ma con diversa versione; revisionare un allegato in openwork® equivale a creare un nuovo allegato con numero di versione diverso
linked | se questo elemento è diverso da zero indica che si tratta di un allegato collegato e non incluso
repository | nome del repository in cui il file relativo all'allegato è salvato
extid | identificativo dell'allegato in un eventuale repository esterno
extclass | stringa descrittiva di un'eventuale classificazione dell'allegato
extclassid | identificativo descrittivo di una eventuale classificazione dell'allegato

Ad ogni allegato corrisponde un file che può essere incluso o collegato:

· se il file è incluso, eliminando l'allegato verrà eliminato anche il file: esso può essere modificato, revisionato, può essere eseguito il checkin/checkout;
· se il file è collegato l'eliminazione dell'allegato non comporta l'eliminazione del file collegato: esso non può essere modificato, revisionato e non può essere eseguita l'operazione di checkin/checkout.

Un allegato può essere classificato indipendentemente dalla form tramite gli elementi extclass e extclassid.

Il file incluso o collegato a un allegato può esistere nel repository interno, e in tal caso il campo repository è vuoto, o in un repository esterno, e in tal caso repository e extid sono valorizzati.


Creazione e modifica di un allegato

I metodi per associare un allegato a una form sono diversi, alcuni di questi sono:

· creare un allegato incluso con l'applicazione client web di openwork®; in questo caso l'allegato viene creato all'interno del repository di default (impostabile tramite il Server Manager).
· creare un allegato incluso o collegato in uno dei qualsiasi repository disponibili dall'applicazione client web di openwork® (consultare Funzioni di attachment.js).
· creare un allegato tramite Web Services.
· creare un allegato con automazione lato server tramite scripting sulle attività.

Quando viene salvata una form se vi sono allegati che fanno riferimento a un repository esterno l'applicazione openwork® richiama funzioni definite nella classe

                                               openwork.<nomerepository>.repository

che chiameremo Connettore. Per cui se per esempio il repository si chiama depositodoc openwork® cercherà di utilizzare la classe

openwork.depositodoc.repository

il cui assembly dovrà essere stato preventivamente registrato e inserito nella Global Assembly Cache (G.A.C.) di .NET.

Il Connettore deve essere creato con Inherits della classe ExtRepositoryManager definita nell'assembly Openwork.Common.dll installato con il setup di openwork®. Nel Connettore dovranno essere definite le seguenti funzioni come override delle omologhe funzioni definite nella classe ExtRepositoryManager. In questo modo si possono realizzare connettori diversi per ogni applicazione documentale con cui ci si vuole integrare. Un semplice esempio di connettore è riportato in appendice.


Stuttura del connettore

Poiché il connettore viene definito come Inherits della classe ExtRepositoryManager eredita le variabili di classe di seguito elencate.

UserName | Nome dell'utente che sta salvando la form
OrganizationName | Nome dell'organizzazione cui appartiene l'utente che sta salvando la form
RepositoryName | Nome del repository, da inizializzare sul metodo new della classe
ErrCode | Codice di errore, da impostare nel caso in cui si generi un errore
ErrDescription | Descrizione dell'errore, da impostare nel caso in cui si generi un errore
Form | Puntatore alla form che si sta salvando
XMLForm | Documento XML contenente la form deserializzata
File | Puntatore all' attachment
FileID | Identificativo dell'allegato nel repository
Path | Path locale del file

I metodi disponibili sono:

· AddFileToRepository
· BeginTransOnRepository
· CommitTransOnRepository
· DeleteFileFromRepository
· RollbackTransOnRepository
· TakeFileFromRepository
· UpdateFileInRepository


AddFileToRepository

La funzione viene richiamata quando è stato aggiunto un allegato incluso o collegato.

Sono valorizzate le variabili di classe Username, OrganizationName, Path (da cui prendere il file se esso è incluso), Form, XMLForm.

Deve essere valorizzata la variabile FileID con l'identificativo del file creato nel repository.

Se si genera un errore devono essere valorizzate le variabili ErrCode e ErrDescription.


BeginTransOnRepository

È utilizzata per eseguire in un'unica transazione una sequenza di chiamate alle funzioni relative al repository (non ancora implementata).

Sono valorizzate le variabili Username, OrganizationName, Form e XMLForm.

Se si genera un errore devono essere valorizzate le variabili ErrCode e ErrDescription.


CommitTransOnRepository

Richiamata per completare una transazione sul repository (non ancora implementata).

Sono valorizzate le variabili Username, OrganizationName, Form e XMLForm.

Se si genera un errore devono essere valorizzate le variabili ErrCode e ErrDescription.


DeleteFileFromRepository

Richiamata quando viene eliminato un allegato incluso o collegato.

Sono valorizzate le variabili Username, OrganizationName, FileID, Form, XMLForm, File.

Nel codice bisogna controllare se il file è incluso o collegato in quanto un file collegato non deve essere eliminato dal repository.

Se si genera un errore devono essere valorizzate le variabili ErrCode e ErrDescription.


RollbackTransOnRepository

Richiamata per annullare una transazione sul repository (non ancora implementata).

Se si genera un errore devono essere valorizzate le variabili ErrCode e ErrDescription.


TakeFileFromRepository

Richiamata quando viene richiesta l'apertura di un allegato.

Sono valorizzate le variabili Username, OrganizationName, Path in cui salvare il file, FileID.

Se si genera un errore devono essere valorizzate le variabili ErrCode e ErrDescription.


UpdateFileInRepository

Richiamata quando viene modificato un allegato salvato nel repository.

Sono valorizzate le variabili Username, OrganizationName, Path, FileID, Form, XMLForm, File.

Se si genera un errore devono essere valorizzate le variabili ErrCode e ErrDescription.


Esempio di connettore

Nell'esempio riportato è codificato in VB.NET un semplice connettore di nome depositodoc che salva gli allegati in una directory contrassegnandoli con un numero identificativo incrementale salvato in un file.

Option Strict Off

Option Explicit On

Imports System

Imports System.IO

Imports OpenWork

Imports System.Reflection

Imports Microsoft.VisualBasic

<Assembly:AssemblyKeyFile("depositodoc.snk")>        'Al fine di poterlo registrare nella GAG

<Assembly:AssemblyVersionAttribute("5.3.0.0")>

<Assembly:AssemblyTitleAttribute("openwork® depositodoc repository")>

<Assembly:AssemblyCompanyAttribute("NET Sistemi")>

<Assembly:AssemblyCopyrightAttribute("(c) 2002-2005 by NET Sistemi")>

<Assembly:AssemblyDescription("openwork® depositodoc repository")>

Namespace openwork.depositodoc

Public Class Repository

Inherits ExtRepositoryManager

Private LPath AS string = 'Da valorizzare opportunamente

Public Sub New()

    Me.RepositoryName = "depositodoc"

End Sub

Private Function LegginCont as string

    'Funzione di ausilio per leggere e incrementare il contatore da un file

    Dim cont as string

    Try

       Dim sr As StreamReader = New StreamReader(LPath + "cont.txt")

       cont = sr.ReadLine()

       sr.Close()

       cont = cstr(val(cont)+1)

       Dim sw As StreamWriter = New StreamWriter(LPath+ " cont.txt")

       sw.write(cont)

       sw.Close()

       return cont

    Catch E As Exception

       Errcode = 555 'codice qualsiasi di errore

       ErrDescription = E.Message

    End Try

End Function

Protected Overrides Sub AddFileToRepository()

    FileID = LegginCont

    If errcode <> 0 then return

    try

  filecopy(Path, LPath & FileID & "_" & file.filename)

    Catch E As Exception

  ErrCode = 555

       ErrDescription = E.Message

End Try

    try

       kill(path)

    Catch E As Exception

End Try

End Sub

Protected Overrides Sub UpdateFileInRepository()

    Try

  Kill(LPath & FileID & "_" & file.filename)

       filecopy(Path, LPath & FileID & "_" & file.filename)

Catch E As Exception

  Errcode = 555

  ErrDescription = E.Message

End Try

try

  kill(path)

Catch E As Exception

End Try

End Sub

Protected Overrides Sub TakeFileFromRepository()

    Dim k as integer

Dim fname as string

k = Path.Lastindexof("\")

fname = Path.Substring(k+1)

try

  filecopy(LPath & FileID & "_" & fname,path)

Catch E As Exception

  Errcode = 555

  ErrDescription = E.Message

End Try

End Sub

Protected Overrides Sub DeleteFileFromRepository()

    try

  Kill(LPath & FileID & "_" & file.filename)

Catch E As Exception

  Errcode = 555

  ErrDescription = E.Message

End Try

End Sub

End Class

End Namespace


Definizione e integrazione delle specifiche per un'integrazione

· Documentale - openwork®
· openwork® - Documentale


Documentale - openwork®

Perché un sistema documentale esterno possa interagire con openwork®, ovvero creare form ed avviare quindi un processo, allegare file, etc., deve far uso dei Web Services per i quali si rimanda al documento.

Le possibili procedure da eseguire sono:

· Inserimento in una form di openwork® di un allegato con file incluso salvato nel documentale: seguire la procedura prevista per l'inserimento di un allegato in una form e valorizzare opportunamente gli elementi repository, extid ed eventualmente gli elementi extclass ed extclassid.
· Inserimento in una form di openwork® di un allegato con file collegato salvato nel documentale: seguire la procedura prevista per l'inserimento di un allegato in una form e valorizzare opportunamente gli elementi repository, extid ed eventualmente gli elementi extclass ed extclassid. L'elemento linked deve essere posto a 1.
· Creazione di una nuova form di openwork® e inserimento di un allegato con file incluso salvato nel documentale: creare un nuova form con il metodo NewDocument del Web Service wsdocument e procedere come nei casi precedenti.
· Classificazione: per stabilire un'associazione tra una classe documentale nel sistema esterno ed una o più classi di openwork® si possono utilizzare gli attributi tag ed ntag della form impostabili nel BPM Tools. È possibile ottenere l'elenco delle classi che soddisfano un determinato criterio per i parametri tag e ntag mediante il metodo GetClassificationTree del Web Service wsdocument.


openwork® - Documentale

Perché openwork® possa interagire con un sistema documentale bisogna creare un Connettore.

E' possibile che si verifichino le seguenti situazioni:

· Aggiunta di un nuovo allegato con file incluso: questa situazione si verifica tipicamente quando è stato impostato un repository di default esterno. Viene richiamata la funzione AddFileToRepository del Connettore. L'oggetto File risulta così valorizzato:
id | 0
version | 1
linked | 0
repository | coincide con quello del connettore
extid | ""
extclass | Eventuale descrizione classe
extclassid | Eventuale id classe

Il Connettore dovrà salvare il file che trova in Path e valorizzare la variabile FileID con l'identificativo del file creato nel repository. Eventualmente il connettore gestirà le informazioni di indicizzazione ed i collegamenti.

· Aggiunta di un nuovo allegato con file incluso già esistente nel repository: questa situazione si può creare usando la funzione newAttach di attachments.js quando si vuole inserire in una form un riferimento a un file già presente nel repository. Viene richiamata la funzione AddFileToRepository del Connettore. L'oggetto File risulta così valorizzato:

id | 0
version | 1
linked | 0
repository | coincide con quello del connettore
extid | Id file nel repository
extclass | Eventuale descrizione classe
extclassid | Eventuale id classe

Il connettore dovrà gestire le eventuali informazioni di indicizzazione ed i collegamenti.

· Aggiunta di un nuovo allegato con file collegato già esistente nel repository:Viene richiamata la funzione AddFileToRepository del Connettore. Da gestire come nel caso precedente ma linked deve essere impostato a 1. Il connettore dovrà gestire le eventuali informazioni di indicizzazione ed i collegamenti.

· Modifica di un allegato con file incluso memorizzato nel repository: Questa situazione si verifica tipicamente quando un operatore dall'applicazione web di openwork® apre e modifica un allegato salvato in un altro repository. Viene richiamata la funzione UpdateFileInRepository del Connettore. L'oggetto File risulta così valorizzato:

id | >0
version | >0
linked | =0
repository | coincide con quello del connettore
extid | Id file nel repository
extclass | Eventuale descrizione classe
extclassid | Eventuale id classe

Il Connettore dovrà salvare nel repository il file che trova in Path. Eventualmente dovrà aggiornare le informazioni di indicizzazione.

· Eliminazione di un allegato: Questa situazione si verifica tipicamente quando un operatore, dall'applicazione web di openwork®, elimina un allegato incluso salvato in un altro repository.

Il Connettore dovrà eliminare il file che ha identificativo FileId dal repository. Eventualmente dovrà aggiornare i collegamenti.

· Revisione di un allegato: Revisionare un allegato equivale in openwork® ad aggiungere un nuovo allegato. Viene richiamata la funzione AddFileToRepository del Connettore per il quale è noto che trattasi di revisione in quanto la proprietà id del File è 0 e version > 1.
· Informazioni di indicizzazione: Per mettere in relazione i campi di un documento di openwork® con quelli di indicizzazione del documentale si possono utilizzare opportunamente i parametri tag1, tag2 e tag3 dei campi nel Form Designer di openwork®. L'oggetto Form nella sezione indexing riporta il loro valore e quindi il Connettore può implementare il codice per ricostruire le associazioni
· Classificazione: Per stabilire un'associazione tra le classi di openwork® e quelle del documentale si possono utilizzare le proprietà tag e ntag della form impostabili da BPM Tools. Gli allegati, tramite le funzioni newAttach e classifyAttach di attachments.js, possono essere classificati in maniera diversa dalla form. In tal caso risultano eventualmente valorizzate le proprietà extclass ed extclassid dell'oggetto File nel connettore.


openwork® Export

Qualsiasi elenco o documento di un'applicazione openwork® può essere esportato in PDF, Word, Excel, ma anche in qualsiasi altro formato file si desideri. Questa funzionalità utilizza trasformazioni XSL.


openwork® FullText

Questo modulo aggiuntivo permette di effettuare delle ricerche testuali oltre che su tutti i campi presenti in un documento openwork® anche all'interno dei file, ad esso, allegati.

L'attivazione di questa componente avviene per mezzo del Server Manager.


openwork® PDF converter

Attraverso questo modulo di openwork® è possibile convertire immagini, documenti office o pagine web in formato PDF (Portable Document Format). Questa funzionalità è il risultato dell'integrazione tra openwork® ed un qualsiasi PDF converter basato su hot directory.

La funzionalità può essere utilizzata in due maniere:

· da interfaccia web per convertire un file allegato ad una form openwork®
· da script in un processo per convertire un file lato server

Prima di utilizzare questa funzionalità è necessario che vengano soddisfatti i prerequisiti.

Le linee guida per l'utilizzo sono riportate nella sezione Utilizzo da interfaccia web e Utilizzo da processo.


Installazione e configurazione di Omniformat

Per poter installare Omniformat è necessario prima scaricare e installare PDF995 in due componenti. Il link http://www.software995.com/bin/pdf995s.exe permette di scaricare il 'Printer Driver' e http://www.software995.com/bin/ps2pdf995.exe, il 'Free Converter' di PDF995.

Solo dopo l'installazione di entrambi è possibile procedere alla installazione di OmniFormat, scaricabile dal link http://www.software995.com/omniformat/omniformat.exe .

Alla fine della installazione comparirà una pagina del browser che spiega i possibili utilizzi, le configurazioni possibili e i componenti aggiuntivi che si possono scaricare.

Prima di poter utilizzare la conversione PDF è necessario eseguire OmniFormat che mostrerà la seguente interfaccia:

Le impostazioni necessarie per eseguire correttamente la conversione PDF sono:

1. Impostare la 'Hot Directory' (in questo caso chiamata 'Watch Folder') di conversione dei file: ricordiamo che Omniformat tenterà di convertire tutti i file che vengono spostati in questa cartella tranne quelli che hanno la stessa estensione dell' “Output Format” .
2. Impostare il percorso corretto alla Hot Directory di Omniformat (definita al passo 1) tramite Server Manager alla voce 'inoltro' del PDF presente nel tab openwork® Manager, selezionando il tab Job.
3. Premere il tasto 'Options…' e nella interfaccia successiva selezionare 'Install OmniFormat as a Service': in questa modo viene aggiunto il servizio Windows Omniformat from Pdf995 (da avviare manualmente).

Conversione di file Excel e Powerpoint in PDF

Nella cartella pdf995\res è presente un file di inizializzazione (pdf995.ini) che occorre modificare per poter convertire file Excel (.xls) o Power Point (.ppt).

Questo file, dopo aver installato le tre componenti necessarie precedentemente trattate presenta il seguente contenuto:

[Parameters]

Quiet=0

[OmniFormat]

Stop Service=0

Per poter convertire file Excel si deve inserire la stringa System on=su (oppure System on= [parola che traduce “su” nel linguaggio del sistema operativo corrente], ad es. "on" in Inglese, "en" in Spagnolo, "auf" in Tedesco) nella prima riga della sezione [Parameters]

Ad esempio, se il linguaggio del sistema operativo è in tedesco, si avrà:

[Parameters]

System on=auf

Quiet=0

[OmniFormat]

Stop Service=0

Per poter convertire file Power Point si deve inserire la stringa Powerpoint Outputtype=[numero di slide per ogni pagina di PDF] nella sezione [Omniformat].

Ad esempio, se il linguaggio del sistema operativo è l'italiano e si vuole una slide per ogni pagina di PDF si deve scrivere:

[Parameters]

System on=su

Quiet=0

[OmniFormat]

Powerpoint Outputtype=1

Stop Service=0

nota

Nota

Questa impostazione non ha effetto se l'impostazione di stampa di un file Power Point alla voce 'Stampa di' è settato a 'Stampati': in tal caso la sua conversione avverrà seguendo il numero di diapositive per pagina impostato nella sezione 'Stampati'.

attenzione

Attenzione

La versione free di omniformat Pdf995 prevede che venga aperta una pagina sponsor nel browser ogni volta che l'applicazione viene lanciata tramite interfaccia utente. In alternativa, all'avvio manuale del servizio Windows di Omniformat (senza aprire l'interfaccia utente), viene visualizzato un messaggio popup che richiede l'attenzione dell'utente e relativa conferma tramite tasto Ok, come mostrato nella figura che segue:

pdf04 - screenshotOmniformat

Per i sistemi operativi Windows 2003 server e superiori, il messaggio popup non viene visualizzato correttamente perchè alcune protezioni di Windows non consentono al servizio di Omniformat di aprire nuove finestre sul desktop. Risultato: apparentemente il servizio risulta avviato, ma in realtà è in attesa della chiusura della finestra di popup che non riesce a visualizzare. Occorre quindi acquistare la licenza di omniformat per disabilitare la pagina di sponsor e il messaggio popup lanciato dal servizio Omniformat.


Utilizzo

Per implementare la conversione PDF è possibile scegliere una qualsiasi delle tecnologie di conversione PDF basate sul meccanismo hot directory: quando un file viene copiato o spostato in una particolare directory monitorata dal software, un apposito servizio lo convertirà in PDF.

In dettaglio:

· Prerequisiti
· Utilizzo da interfaccia web
· Utilizzo da processo


Prerequisiti

Il convertitore attualmente testato con openwork® è OmniFormat (http://www.omniformat.com). Questo convertitore riconosce una grande varietà di formati tra cui HTML, DOC, XLS, WPD, PDF, XML, JPG, GIF, TIF, PNG, PCX, PPT, PS, TXT, PhotoCD, FAX, MPEG.

La procedura di installazione e configurazione di OmniFormat è contenuta nella sezione Installazione e configurazione di OmniFormat.

Per poter utilizzare la funzionalità di conversione in PDF è necessario:

· aver installato, configurato e avviato correttamente OmniFormat (o un altro sofware che usa il meccanismo di hot directory) indicando quale sia la hot directory (cartella in cui i file vengono posizionati e convertiti);
· aver configurato l'openwork® Server Manager indicando la stessa hot directory di OmniFormat
· aver avviato il servizio openwork® Job Engine
· aver installato Microsoft Word nel caso di conversioni da doc a pdf, Microsoft Excel per conversioni da xls in pdf e così via.


Utilizzo da interfaccia web

Per poter utilizzare la conversione in PDF si deve::

1. Aprire una form openwork®
2. Se non è già presente l'allegato da convertire, allegare un file e salvare il documento.
3. Selezionare il file allegato da convertire
4. Premere il tasto 'Converti in Pdf '

pdf01_converti in PDF

nota

Nota

Questo tasto appare se sono soddisfatte tutte le seguenti condizioni:

· si ha la licenza del modulo Openwork® PDF Converter
· la corrispondente action è impostata come visibile nella form
· la form è stata salvata
· la directory dei job è stata definita correttamente nell'openwork® Server Manager

5. Specificare il nome del file risultante e confermare

pdf02_conversione allegato in PDF

6. Il file viene convertito in PDF e allegato alla form.

nota

Nota

Durante la conversione viene mostrata una finestra di attesa contenente un pulsante con il quale si può anche annullare l'operazione.

·


Utilizzo da processo

Per poter utilizzare la conversione PDF da processo è necessario utilizzare da script la funzione UserFunction, richiamando le funzionalità di creazione del job (CREATEJOB), di controllo dello stato (JOBSTATUS), di reperimento del risultato (JOBRESULT) o di cancellazione del risultato e dei file(DELETEJOB)


openwork® Power Components

A complemento delle funzionalità di openwork®, le Power Components rappresentano componenti aggiuntive, basate su tecnologie di terze parti.

Il dettaglio dei moduli nelle seguenti sezioni:

· openwork® Digital Sign (firma digitale)
· openwork® Document Store (conservazione sostitutiva)
· openwork® BarCode e openwork® OCR
· openwork® Business Console
· Advanced Job Engine


openwork® Digital Sign (firma digitale)

Attraverso l'integrazione della firma digitale, la piattaforma openwork® consente di attribuire identità del titolare, integrità e riservatezza ai documenti elettronici prodotti con strumenti informatici.

Essa difatti, secondo la normativa CNIPA (DPR 445-00 art. 23/2), equivale alla firma di propria mano su un documento cartaceo: “L'apposizione e l'associazione della firma digitale al documento informatico equivale alla sottoscrizione prevista per gli atti e documenti in forma scritta su supporto cartaceo”. E' possibile, selezionando un file allegato a un form openwork®, visualizzarne il contenuto e firmarlo digitalmente. Sempre attraverso l'interfaccia web di openwork® e un opportuno processo personalizzabile nelle azioni e negli attori, questo documento firmato potrà essere visionato, approvato, controfirmato o respinto. Infine, a conclusione del processo o in una sua fase è possibile apporre la marcatura temporale, una sorta di “timbro” che porta le informazioni certe inerenti il momento in cui è stata richiesta tale marcatura. openwork® permette la riduzione dei tempi, la personalizzazione delle attività con la possibilità di automatizzare qualsiasi fase, per mezzo della interfaccia web in cui si può apporre sia la firma che la marcatura in un unica pagina o per mezzo delle funzioni automatiche presenti nei processi.

Per realizzare ciò openwork® integra la tecnologia per la firma digitale DigitalSign® sviluppata da Comped, leader nel campo della firma digitale in Italia.

Alcune note relative all'installazione, attivazione e configurazione della componente Comped sono presenti nella sezione Installazione, mentre le informazioni relative all'utilizzo in openwork® sono comprese nella sezione Utilizzo.


Installazione, registrazione, attivazione e configurazione

Le funzionalità di firma digitale integrate in openwork® permettono di apporre direttamente, attraverso un client web di una applicazione openwork®, una firma digitale (ma anche una marcatura temporale) a normativa CNIPA su un file allegato, ottenendo in risposta il file (allegato automaticamente) in formato .p7m (e nel caso di marcatura temporale .tsd).

openwork® integra la tecnologia Digital Sign fornita da CompEd Software Design. La licenza d'uso fornita da Comped ed inclusa nel modulo openwork® Digital Sign permette l'utilizzo della tecnologia in modalità integrata nella piattaforma openwork®.

Ogni altro uso deve essere concordato direttamente con Comped Software Design.

Per poter usufruire correttamente delle funzionalità di firma digitale e conservazione sostitutiva occorre (per postazione) seguire la seguente procedura:

1. essere in possesso di un codice di attivazione della tecnologia Digital Sign 3.1 Pro rilasciati da openwork®;
2. Verificare che sia abilitata la licenza openwork® per l'uso della funzionalità richiesta;
3. installare il lettore di smartcard ed il relativo driver (tranne sul server nel caso di conservazione sostitutiva in cui il firmatario appone la firma da interfaccia web);
4. procurarsi una smartcard crittografica contenente la chiave privata ed il relativo certificato di chiave pubblica rilasciato da uno dei certificatori accreditati dal CNIPA, con i driver di interfacciamento(tranne sul server nel caso di conservazione sostitutiva in cui il firmatario appone la firma da interfaccia web);
5. installare la tecnologia Digital Sign 3.1 Pro (installazione per macchina);
6. configurare Digital Sign 3.1 Pro (per utente);

Di seguito si riporta l'analisi dettagliata dei punti soparcitati , delle similitudini e delle differenze tra l'installazione e la configurazione di Digital sign 3.1 Pro per un utilizzo lato server (openwork® Document Store) e lato client (openwork® Digital Sign), tenendo conto che la configurazione varia anche a seconda dell'ambiente operativo.

1. In questa fase è necessario richiedere all'Help Desk del produttore il codice di attivazione della componente Comped Digital Sign Pro, comunicando le condizioni di licenza e la versione in presenza di vecchie installazioni di openwork® (in alcuni casi è previsto un upgrade di licenza e eventualmente un upgrade di openwork®). E' possibile verificare le licenze relative alle componenti openwork® sia nell'openwork® Server Manager (tab “Installazioni” -->tab “Generale”--> tasto “Info Licenza”) o nel BPM Tools (menù “Sistema”-->voce di menù “Informazioni e parametri generali”). Nel caso in cui si disponga già di una precedente versione licenziata di Comped Digital Sign Pro Integrated non è necessario disinstallarla, ma basta avviare un ulteriore installazione che sovrascriva la precedente.
2. Occorre tener presente che i driver dei lettori smartcard possono essere compresi nella confezione del lettore stesso, o distribuiti sul sito del produttore e che la loro installazione può variare a seconda del sistema operativo.

Nel caso di particolari restrizioni sulle autorizzazioni alla installazione di software e hardware, bisogna avere a disposizione username e password di un utente amministratore del computer su cui si vuole installare il dispositivo.

Non è necessario tuttavia installare lettori smartcard e driver di interfacciamento alla smartcard stessa su server per un normale processo di “conservazione sostitutiva”, tranne quando il cliente finale decida (sotto responsabilità propria) di utilizzare le funzioni di firma automatica lato server.

3. Anche in questo caso valgono le considerazioni fatte per il punto 2. I driver di interfacciamento alle smartcard sono rilasciati dai distributori o dai produttori delle smartcard stesse. In molti casi è necessario sbloccare le smartcard attraverso altri software (tipo Dike della Infocamere). Benchè i problemi di installazione, di seguito si riporta la descrizione di alcuni driver di SmartCard, alcuni dei quali inclusi nel CD

Nome

Descrizione

File su CD / riferimenti

PKCS#11-Siemens CardOS 2.4.0

Richiede installazione.

Può essere distribuito con DigitalSign unicamente al fine di utilizzare smartcard Siemens/Actalis fornite da CompEd. Tecnicamente risulta compatibile anche con alcune smartcard distribuite da Infocamere (serie 14) e con i token USB Eutron forniti sia da Infocamere che da Actalis. Anche altri certificatori possono fornire schede di questo tipo.

PKCS#11-Siemens CardOS 2.4.0/ ci5-itsec_API_2.4.0_build10.exe

PKCS#11-GemPlus GEMPKCS 4.6.006

Tecnicamente risulta compatibile anche con le smartcard distribuite da Postecom sino a tutto il 2004. Si tratta comunque di una versione notoriamente vecchia, che presenta alcuni problemi in caso di inserimento/disinserimento di smartcard di diversi utenti sulla stessa postazione. Il problema pare superato sostituendo una DLL del package con una più aggiornata prelevata dal package PosteCom

GemPKCS 4_6_006/ SETUP.EXE

PKCS#11-Sysgillo CSP & PKCS#11 v.2.3

Richiede installazione.

Si tratta del modulo PKCS#11 distribuito da Postecom per interfacciare le recenti smartcard Incard/Postecom (a partire da inizio 2005). Si osserva che funziona anche per interfacciare smartcard Infocamere serie 1204 e serie 7420 (L'installazione di software Dike in questo caso oltre all'attivazione fornisce i Driver per la Smartcard). Questo modulo ha un problema riconosciuto: poiché queste nuove schede sono conformi alla regolamentazione sulle Carte Nazionali dei Servizi, esse contengono due sezioni: una per l'autenticazione ed una per la firma digitale. L'utente potrebbe usare due diversi PIN per le due sezioni. Per gestire questa situazione il PKCS#11 chiede espressamente all'utente di digitare il PIN ad ogni firma, fuori dal controllo di DigitalSign ed indipendentemente dal fatto che la scheda risulti già in stato di LogOn. Questo problema è particolarmente fastidioso in caso di procedure automatiche di firma, perché il ciclo si interrompe ad ogni passo per richiedere il PIN.

Richiedere al Customer Care di openwork®

PKCS#11-Sysgillo CSP & PKCS#11 v.2.3 modificato

Richiede installazione.

Si tratta di una versione speciale del componente di cui al punto precedente, fornito su richiesta da Postecom per ovviare al problema sopra descritto (reiterata richiesta del PIN da parte del PKCS#11). Si noti che - a detta di PosteCom - questo modulo non può funzionare se l'utente imposta due PIN differenti per l'area di autenticazione e quella di firma digitale.

Richiedere al Customer Care di openwork®

PKCS#11-Siemens SISS per “Carta SISS” Regione Lombardia (API R2.0.7)

Richiede installazione.

Interfaccia le smartcard denominate "Carta SISS" del progetto sanitario della Regione Lombardia. Queste smartcard sono conformi alle specifiche "Carta Nazionale dei Servizi" (CNS).
Analogamente alle smartcard CNS distribuite da Postecom, presentano il problema della doppia richiesta del PIN. Ma in questo caso il problema si può risolvere in modo brillante perché questo modulo PKCS#11 supporta una modalità "callback" per il passaggio silente del PIN di firma.
DigitalSign implementa il relativo callback che può essere attivato mediante modifica del file devices.ini.
Si vedano i commenti all'interno di tale file, anche riguardo alla precauzione di usare PIN carta e PIN firma settati allo stesso valore.

Richiedere al Customer Care di openwork®

4. L'installazione della componente Comped DigitalSign® Pro Integrated ha diverse Release Candidate (RC), dovute soprattutto agli aggiornamenti normativi e tecnologici che riguardano la firma digitale, i produttori di smartcard, gli standard di comunicazione, il sistema operativo. Pertanto faremo riferimento al file di installazione come DS30_ProInt_RCN.exe, dove N indica la versione di RC.

Avviare l'installazione di Comped DigitalSign® (DS30_ProInt_RCN.exe in setup\power_components\DigitalSign). Verranno chieste informazioni riguardanti

- Accettazione del contratto, quindi selezionare “Accetto i termini del contratto” e premere avanti;
- Informazioni Utente, quindi inserire il nome utente e società;
- Percorso di installazione, la scelta è libera;
- Tipo di installazione, selezionare “Full”;
- Nome nel menù di avvio;
- Premere infine Installa.

Procedere con la registrazione e l'attivazione del componente

· Premere Registra ora
· Immissione delle informazioni utente, fornitore e metodo di registrazione. Per il “Vendor ID” bisogna fare richiesta all'apposito servizio messo a disposizione dal produttore. La registrazione non procede se non si autorizza al trattamento dei dati personali.

fir01 - procedura installazionel

· Proseguendo, se si sceglie come metodo di registrazione “Trasmetti on-line” si inviano attraverso internet questi dati e sarà comunicato il codice di attivazione all'indirizzo di posta elettronica indicato dall'utente nella form. A volte questo tipo di registrazione non è possibile per vari motivi tra cui:
- Presenza di un proxy: procedere come nel punto 5.2 e riaccedere alla registrazione del componente
- Assenza di connessione internet ma presenza di outlook : premere Genera email , salvare la mail così generata, inviare la mail per mezzo di un'altra postazione con connessione internet.
- Assenza di connessione ad internet e di client di posta elettronica riconosciuta da comped: premere Genera fax, stamparlo e inviarlo all'indirizzo indicato.

L'esperienza ha dimostrato che, nell'arco di un'ora, viene recapitata la mail con il codice di attivazione al destinatario.

· Ricevuta la e-mail, copiare nel successivo form il codice e l'attivazione sarà completa.

fir02 - codice attivazione

5. Attenzione: la configurazione del Software Comped deve essere fatta per utente e quindi tutta la configurazione deve essere effettuata in base a questo principio. Questo significa che, se l'utente che deve apporre la firma digitale e la marcatura temporale è diverso da quello con cui si è effettuata l'installazione, bisogna configurare per l'utente che deve effettivamente utilizzarlo. Distinguiamo pertanto i seguenti casi:

· Caso Client con utente firmatario amministratore di macchina: l'installazione e la configurazione possono avvenire con le stesse credenziali
· Caso Client in cui l'utente firmatario non è amministratore di macchina: l'installazione e attivazione di Comped Digital Sign Pro viene effettuata come amministratore, l'installazione di owkds.msi e la configurazione (che verrà dettagliata in seguito) di Comped Digital Sign Pro per utente.
· Caso Server (conservazione sostitutiva): in questo caso comunque l'installazione deve avvenire come amministratore, mentre la configurazione (marcatura temporale, proxy, eventuale smartcard) deve avvenire con l'account che esegue gli script di automazione di openwork®.

Ci sono diversi interventi da effettuare per configurare Comped Digital Sign Pro Integrated. In generale queste configurazioni riguardano la modalità di connessione alla rete internet, modalità di autenticazione per la verifica dei certificati e per la marcatura temporale, il riconoscimento dei lettori e driver smartcard. I passi per avere un corretto funzionamento della firma digitale sono:

5.1 Configurare dispositivi di lettura e smartcard accedendo alla barra dei menu->Programmi->CompEd DigitalSign 3.1 Pro-> DigitalSignPro -> Dispositivo di Firma -> Configurazione: attraverso i tab Configurazione dispositivo e Configurazione Automatica del Dispositivo di Firma è possibile impostare rispettivamente l'interfaccia e ricercare automaticamente la DLL relativa al dispositivo lettore. Consigliamo di scegliere autoconfigurazione nel Profilo di configurazione e di premere Nuova scansione dei lettori per autorilevare il lettore. Nel caso di Conservazione Sostitutiva non è necessario installare le Smartcard né i lettori, pertanto bisogna impostare nel Profilo di configurazione la voce “02-Disabilita il lettore di Smartcard”

5.2 Configurare (se presente) il server Proxy: In presenza di un Proxy Server, la comunicazione verso Internet potrebbe non essere subito disponibile e quindi tutte le transazioni in rete (tra cui anche la Registrazione e il download della lista dei certificatori) non sono possibili. E' possibile configurare il Proxy attraverso Start-> Programmi-> CompEd DigitalSign 3.1 Pro-> DigitalSignPro -> Strumenti -> Opzioni. Si aprirà così una maschera in cui sono presenti diversi tab tra cui Configurazione Internet. In questa scheda è possibile impostare l'indirizzo del server, porta, username e password.

fir04 - opzioni

5.3 Gestire i certificati e il tipo di verifica del certificato : dal menù Start-> Programmi-> CompEd DigitalSign 3.1 Pro-> DigitalSignPro -> Strumenti selezionare “Opzioni di security”. Il valore consigliato del tipo di verifica è Strong, in quanto la verifica della firma viene superata solo se il certificato “root” (cioè il livello superiore della catena di certificazione) appartiene alla lista degli enti di certificazione riconosciuti da CNIPA. L'elenco dei certificatori attendibili è scaricata in fase di installazione, ma è possibile scaricarla in seguito dal tab “CA Accreditate/attendibili”. Inoltre è possibile impostare una verifica on-line del certificato: ogni qual volta si appone una firma viene verificato se il certificato contenuto sulla smartcard non sia scaduto o revocato (CRL=Certificate Revocation List). Una volta scaricato l'elenco dei certificatori, è necessario che il certificato di firma contenuto nella smartcard sia confrontato con la lista di quelle revocate. Per fare questo, le Certification Autority espongono il sevizio attraverso il protocollo LDAP. Pertanto, la macchina e l'utente che devono effettuare la verifica del certificato contenuto sulle smartcard, devono necessariamente avere i permessi (ad esempio in presenza di proxy e active directory) per accedere ad internet attraverso i protocolli HTTP/HTTPS (per scaricare almeno la prima volta i certificatori) e LDAP

fir05 - opzioni sicurezza

fir06 - elenchi Ldap

5.4 Configurare l'account di marcatura temporale : per l'utilizzo della marcatura temporale è necessario preventivamente acquistare marche temporali, solitamente a lotti, non necessariamente dall'ente che ha rilasciato la smartcard (ma che deve essere riconosciuto da CNIPA). Per poter acquistare i lotti di marche temporali, è necessaria la registrazione, di un account di marcatura temporale (TSA). Accedendo da Start-> Programmi-> CompEd DigitalSign 3.1 Pro-> DigitalSignPro -> Strumenti -> Configurazione servizi -> Marcatura temporale, viene mostrata la maschera in cui è possibile inserire il proprio account (Nuovo) e verificare il numero di marche disponibili (se è stata aperta la porta sul server per LDAP).

fir07 - account marcatura temporale

nota

Nota

Al momento dell'apposizione della firma digitale da interfaccia web di openwork®, se non presente, verrà chiesto di installare la componente aggiuntiva openwork® Digital Sign. Seguire i passi riportati a video ed installare tale componente.

Nel caso in cui la componente openwork® Digital Sign, già installata sul client, non corrisponde all'ultima versione disponibile verrà richiesto all'utente di effettuare l'upgrade.


Utilizzo

Per poter utilizzare la firma digitale l'utente deve preventivamente :

1. Aprire un documento openwork®
2. Se non è già presente l'allegato da convertire, allegare un immagine ( o PDF) e salvare il documento
3. Selezionare il file allegato da firmare
4. Premere il tasto “Firma digitale”

actatt14 - sign

Firma

Una nuova finestra permette di utilizzare tutte le funzionalità legate alla firma digitale.

dsign01 - digitalsign

E' tuttavia possibile personalizzare l'accesso alla funzionalità, accedendo direttamente alla finestra con le seguenti funzionalità posizionate nella barra superiore:

1. Firma digitale

2. Marcatura temporale

Inoltre saranno presenti nel riquadro inferiore tutte le informazioni relative al documento e, una volta apposta la firma digitale, all'intestatario della firma e al certificato.

Premendo il tasto Firma digitale sarà visualizzata la maschera di richiesta inserimento del Pin. Qualora il Pin inserito è corretto, una nuova finestra consente di impostare la proprietà signing time per la firma che si sta apponendo come mostrato nella seguente figura.

dsign04 - signingTime

Il signing time rappresenta il riferimento temporale della firma e comparirà nelle voci signed nelle proprietà della firma digitale. La data e l’ora proposte vengono impostate di default prelevando tali valori da sistema operativo. E' possibile modificare il valore del signin time (ma l’utente potrà modificarlo) e normalizzate secondo il GMT, tenendo conto del fuso orario e dell’ora legale impostate nel sistema operativo.

Inoltre , sempre all'interno di questa form, è possibile apporre la marcatura temporale premendo l'apposito tasto. Confermando le modifiche (tasto Conferma) verrà chiesto di sostituire il file originario o aggiungere il file modificato come nuovo allegato.

Cliccare su Firma per apporre la firma digitale il cui avvenuto inserimento si evince nella parte sottostante la finestra corrente

dsign02 - digitalsignok

Terminata l'operazione di Firma una nuova finestra richiede come comportarsi con il documento firmato appena creato, scegliere l'opzione desiderata.

In ogni caso il nome del file creato sarà composto dal nome del file originario con l'aggiunta dell'estensione “.p7m”. Ad esempio, se si firma il file dal nome “Documento.tif”, il file risultante avrà nome “Documento.tif.p7m”.

Nel caso in cui si apponga la marcatura temporale al file verrà aggiunta l'estensione “.tsd”.

Sono presenti inoltre altre funzionalità relative alla visualizzazione del documento (ad es. zoom, anteprima, rotazione) per formati supportati dal controllo della CompEd.

Nel caso in cui il lettore smartcard, la smartcard stessa o il token usb non siano stati inseriti, configurati o installati correttamente sul pc client, sarà proposta la maschera di configurazione della componente Digital Sign. Dopo aver inserito il dispositivo o la smartcard, è possibile selezionare il tab di Configurazione Automatica del Dispositivo di Firma e premere il pulsante Nuova scansione dei lettori. Questo permetterà di aggiornare la lista di dispositivi installati e collegati, e eventualmente di trovare il modulo PKCS#11 adatto attraverso l’apposito tasto, come nella seguente figura

dsign03 - configureDS


openwork® Document Store (archiviazione sostitutiva)

openwork® Document Store (conservazione sostitutiva)

Il processo di conservazione sostitutiva di documenti è il processo con il quale vengono trasferiti su un supporto digitale i documenti digitali o informatici, eventualmente con le relative impronte (sequenza di simboli binari di lunghezza predefinita generata mediante l'applicazione di una opportuna funzione di hash).

Questo processo termina con l'apposizione della marcatura temporale e della firma digitale da parte del responsabile dell'archiviazione, operazione che attesta il corretto svolgimento del processo stesso. La marcatura temporale consente di apporre un ulteriore “sigillo” con riferimenti temporali opponibili a terzi e quindi validabili.

Per maggiori dettagli sulla conservazione sostitutiva si rimanda alla Deliberazione CNIPA 11/2004 e relative Note Esplicative (DPR 445/2000).

Consultare il sito del CNIPA (Centro Nazionale per l'Informatica nella Pubblica Amministrazione) http://www.cnipa.gov.it/ per maggiori informazioni.

In openwork®, conformemente alla filosofia di tutta la piattaforma, sono state rese disponibili le funzionalità di conservazione sostitutiva (attraverso un insieme di API) che permettono di disegnare un processo di conservazione sostitutiva utilizzando il designer dei processi di openwork®.

In dettaglio nella seguente sezione:

· Installazione
· Utilizzo


Installazione

Per poter utilizzare la funzionalità di conservazione sostitutiva è necessario:

· Aver installato openwork® sul server e abilitato la licenza della funzionalità openwork® Document Store.
· aver installato e configurato la componente Comped Digital Sign Pro.


Utilizzo

In questa sezione sono riportate le fasi relative ad un processo di conservazione sostitutiva.

Nella sezione relativa al glossario è possibile consultare le definizioni degli elementi chiave coinvolti nel processo di conservazione sostitutiva.


Le fasi

Qualsiasi processo di conservazione sostitutiva di documenti informatici può essere scomposto nelle seguenti fasi:

FASE 1 – Selezione e salvataggio dei file da archiviare nel repository di archiviazione

In questa fase si spostano i file all'interno della cartella di archiviazione, ovvero all'interno della cartella su cui dovrà essere calcolato il file di chiusura. L'integrazione di questa funzionalità in un processo openwork® consente di impostare criteri personalizzabili di creazione delle directory o di selezione dei file da archiviare. Inoltre è possibile impostare diversi criteri per la partenza e ripartenza del processo di archiviazione: questo può essere automatico (ad esempio polling, dimensioni di cartelle, naming convention, periodicità e scadenze), semi-automatico (ad esempio dopo una serie di scansioni) o può richiedere l'intervento umano diretto (ad esempio attraverso l'interfaccia web di openwork®). La malleabilità di quest' approccio permette di automatizzare qualsiasi azione di controllo preventivo rendendo il processo di archiviazione completamente trasparente all'utente.

Dopo aver posizionato i file nelle cartelle da archiviare e aver deciso il momento in cui il direttorio (una cartella root che contiene eventualmente sottodirectory e comunque i file) è pronto per l'archiviazione, si deve generare il file di chiusura.

FASE 2 - Firma del file di chiusura e marcatura temporale.

Questa procedura, che in generale richiede l'intervento dell'operatore, è necessaria per rendere effettivamente valido ai termini di legge e garantire il contenuto delle cartelle di archiviazione. L'utente deve visionare il file di chiusura, firmarlo (mediante una smartcard contenente un certificato valido) e marcarlo temporalmente.

Nel client web standard di openwork® sono presenti le funzionalità per effettuare queste operazioni (cfr. openwork® Digital Sign). Anche questa fase può essere personalizzata; è possibile:

1. ridurre il numero di iterazioni da parte dell'utente finale per apporre la firma e la marca

2. rendere non sostituibile il file allegato e comunque visibile nel momento opportuno

3. lasciare che l'utente archiviatore abbia piena consapevolezza di tutti i file coinvolti o presenti nella form

4. configurare Digital Sign in maniera tale che ogni volta si effettui un' azione, ci sia una verifica dei certificati

FASE 3 – Verifica della corrispondenza tra file firmato e marcato e file di chiusura

In questa fase viene verificato che il file di chiusura sia stato firmato (ed eventualmente marcato) con certificati validi. Opzionalmente il direttorio e il file di chiusura possono essere registrati su supporto ottico (cd o dvd).


Glossario

· Documento analogico ovvero un documento formato “utilizzando una grandezza fisica che assume valori continui” ad esempio documenti cartacei, radiografie, microfiche, microfilm, pellicole fotografiche, cassette e nastri magnetici audio e video. Si distingue in documento originale e copia.
· Documento digitale ovvero testi, immagini, dati strutturati, disegni, programmi, filmati formati “tramite una grandezza fisica che assume valori binari” in forma di file, ottenuti attraverso un processo di elaborazione elettronica.
· Documento informatico ovvero un documento digitale sottoscritto con firma digitale ai sensi della normativa prevista (articolo 8 del Testo unico approvato con decreto del Presidente della Repubblica 28 dicembre 2000, n. 445 e del decreto del Presidente del Consiglio dei Ministri 8 febbraio 1999 e successive modificazioni).

· Riferimento temporale ovvero l'informazione contenente la data e l'ora che viene associata ad uno o più documenti informatici.

Questa informazione rappresenta il momento in cui viene chiuso il direttorio (cartella che contiene i file pronti per l'archiviazione). Il responsabile dell'archiviazione avrà a disposizione questa informazione nel momento in cui dovrà firmare digitalmente il file di chiusura.

· Firma digitale é un particolare tipo di firma elettronica qualificata basata su un sistema di chiavi asimmetriche a coppia, una pubblica e una privata, che consente al titolare tramite la chiave privata e al destinatario tramite la chiave pubblica, rispettivamente, di rendere manifesta e di verificare la provenienza e l'integrità di un documento informatico o di un insieme di documenti informatici.

In pratica, la firma digitale consiste nella applicazione al file originario di una sorta di “contenitore” che incapsula le informazioni riguardanti il firmatario (titolare smartcard o token), il file firmato (tipo la sua “impronta”) e la CA (Certification Authority: ente che certifica l'identità dell'utente e la validità del suo certificato di firma). Fisicamente un file firmato appare con lo stesso nome ed estensione del file non firmato, con un ulteriore estensione aggiunta .p7m

· File di chiusura è una evidenza informatica (sequenza di bit che può essere elaborata da una procedura informatica) contenente una o più impronte dei documenti o di insiemi di essi. Nel nostro caso il file di chiusura (solitamente “closure.xml”) è una descrizione in formato xml delle informazioni relative ai file e alle directory da archiviare tra cui la loro “impronta”, il risultato di una funzione che, calcolata rispetto a una chiave, permette l'identificazione del contenuto (a livello di bit) di ogni file e ne garantisce la sua integrità. Inoltre è presente come primo attributo della radice del file xml di chiusura il “riferimento temporale”, la data e l'ora del momento in cui è stato generato il file stesso.

· Marca temporale evidenza informatica che consente la validazione temporale. La marca temporale estende il concetto di riferimento temporale in quanto, oltre a contenere altre informazioni riguardanti algoritmi utilizzati, certificato e identificativo dell'utente, è opponibile a terzi. Questo significa che la data e l'ora non solo non dipendono dalla particolare macchina da cui queste informazioni vengono ottenute, ma sono universalmente riconosciute e validabili. La validazione consiste nella verifica che queste informazioni (come pure il file firmato a cui si riferiscono) siano corrette e che il certificato della marca non sia scaduto. La marca temporale, dal punto di vista fisico, potrebbe essere visto come un “contenitore” del file marcato e della data e dell'ora, con la stesso nome ed estensione del file originario e con un ulteriore estensione aggiunta .tsd


openwork® Barcode e openwork® OCR

Il modulo openwork® BarCode permette l'utilizzo di due funzionalità, relative la riconoscimento di codici a barre:

· BARCODE

Questa funzionalità è studiata per facilitare le procedure di creazione massiva di documenti contenenti file allegati creati attraverso acquisizione da scanner, automatizzando la fase di inserimento degli allegati.

Dopo aver creato una form in openwork® è possibile generare e stampare dal client una etichetta contenente un codice a barre univoco ad essa associato. Applicando tale etichetta sulla prima pagina dei corrispondenti documenti cartacei, ed effettuando una scansione massiva di questo blocco di documenti, si ottiene un file multipagina (generalmente TIFF o PDF). Questo file viene poi sottoposto ad una procedura automatica (cfr. Separazione Barcode da processo) che separa il file in base ai codici a barre riconosciuti all'interno ed allega ciascun file ottenuto alla corrispondente form.

Le istruzioni per generare e stampare i codici a barre sono presenti nella sezione Generazione Barcode da interfaccia web.

· GENERALBARCODE

Molti documenti (immagini multipagina formati da uno o più blocchi) hanno già sulla prima pagina di ogni blocco un codice a barre proprietario che lo identifica o categorizza. Questa funzionalità permette di separare i blocchi e riconoscere il valore del codice in essi contenuto. E' possibile impostare diversi criteri per identificare il particolare codice a barre presente sui documenti (tipo, lunghezza, caratteri di controllo)

La componente è realizzata grazie alla partnership tecnologica con Nuance® (ex Scansoft®) relativamente alla tecnologia OmniPage®.

La procedura di installazione delle librerie di riconoscimento e attivazione della licenza - similmente alla funzionalità OCR - è presente nella sezione Installazione.

Le istruzioni per richiamare le funzionalità sono presenti nel paragrafo Separazione Barcode da processo.

Il modulo openwork® OCR di openwork® consente di trasformare un file contenente un'immagine grafica (per esempio un fax oppure la scansione di un qualsiasi documento cartaceo) in un file editabile, con la possibilità di selezionare il formato desiderato (documento WORD, RTF, XML o file di testo puro). Le singole parole riconosciute nella conversione vengono validate utilizzando i dizionari delle lingue più diffuse, mentre opzionalmente i termini per i quali il riconoscimento non va a buon fine vengono evidenziati visivamente. La funzionalità è disponibile sia lato client per conversioni di allegati (cfr. Riconoscimento OCR da interfaccia web), sia lato server per conversioni governate da processo (cfr. Riconoscimento OCR da processo).

La componente è realizzata grazie alla partnership tecnologica con Nuance® (ex Scansoft®) relativamente alla tecnologia OmniPage®.

La procedura di installazione delle librerie di riconoscimento e attivazione della licenza - similmente alla funzionalità Barcode - è presente nella sezione Installazione.


Installazione

Nella seguente sezione sono dettagliate le procedure necessarie per installare il modulo openwork® BarCode e openwork® OCR:

· Prerequisiti
· Setup e installazione delle librerie Scansoft
· Scansoft License Manager


Prerequisiti

Per utilizzare le funzionalità di OCR e Barcode è necessario:

· Essere in possesso dell'Authorization Code e del Product Code rilasciati da openwork®.
· Verificare che sia abilitata la licenza openwork® per l'uso della funzionalità richiesta.
· Impostare la directory dei job nell' openwork® Server Manager , impostando anche i diritti di accesso 'full control' alla cartella dei job da parte dell'utente con cui viene eseguito il servizio openwork® Job Engine .


Setup e installazione delle librerie Scansoft/Nuance

L'installazione delle librerie OmniPage® e la registrazione delle librerie necessarie al funzionamento dell'OCR e della separazione barcode avviene seguendo questi passi:

1. Arrestare il servizio openwork® Job Engine, soprattutto in presenza di una precedente versione di OmniPage®.
2. Eseguire il file owkRecognition.msi (presente nel cd di openwork®, cartella setup\power_components\OCR_Barcode), quindi proseguire premendo Avanti .

3. E' possibile scegliere un volume e una cartella di destinazione diversa da quella di default.

BarOcr12 - Installazione - SelectFolder ùù

Alla fine del Setup si avvia automaticamente lo License Manager della Scansoft, necessario alla attivazione.

Nel caso in cui sia stato effettuato un upgrade dalla versione licenziata 12.5 di OmniPage® alla 12.7, continua a essere valida la precedente configurazione (Identificativo dell'utente e licenza) e pertanto è possibile chiudere la maschera di registrazione.


Scansoft License Manager

Prima di poter usare i moduli della Scansoft dobbiamo effettuare la registrazione On-Line attraverso lo Scansoft License Manager utilizzando i codici ottenuti mediante richiesta al customer care di openwork®.

BarOcr03_on line registration

Per poter ottenere la chiave di attivazione (calcolata in base alle informazioni relative al cliente ed alla macchina) è necessaria una connessione web.

Ottenuta la chiave si può verificare l'attivazione dei moduli necessari al riconoscimento (OCR e Separazione Barcode) andando sulla scheda 'Show Licenses':

Nel caso in cui si acquistino licenze illimitate per alcuni particolari moduli il campo Expiration riporterà la dicitura 'Does not Expire'.

Nel caso in cui non fosse possibile procedere con la Registrazione On-line (per mancanza di connettività o perché in presenza di firewall/Proxy) è possibile procedere con la Registrazione Off-line.

Si dovrà generare un file con estensione .LMX premendo il tasto 'Save Proxy File' contenuto nella registrazione On-line.

Esistono due maniere a questo punto per proseguire e ottenere la licenza:

1. Nel caso in cui si disponga di un computer che ha l'accesso a internet, copiare qui il file LICMGR12.exe contenuto nella cartella selezionata dall'utente durante l'esecuzione di owkRecognition.msi.
· Eseguire questo file (Scansoft license manager) e selezionare On-line registration.
· Premere il tasto Process Proxy File.
· Selezionare il file .LMX precedentemente salvato sull'altro server.
· Verrà creato un file .LMZ con lo stesso nome del precedente .LMX e nella stessa cartella.
· Copiare il file .LMZ sul computer server originario.
· Aprire sul server originario lo Scansoft license manager.
· Nel tab On-line Registration premere il tasto 'Load Key File' e selezionare il file .LMZ .
· Verificare nel tab 'Show Licenses' se sono stati attivati i moduli acquistati.

2. Inviare il file .LMX al Customer Care openwork®


Utilizzo

Per poter utilizzare la conversione in PDF o OCR si deve::

1. Aprire un documento openwork®
2. Se non è presente già l'allegato da convertire, allegare una immagine e salvare il documento
3. Selezionare il file allegato da convertire

A questo punto è possibile utilizzare una delle seguenti funzionalità:

· Riconoscimento OCR da interfaccia web
· Riconoscimento OCR da processo
· Generazione Barcode da interfaccia web
· Separazione Barcode da processo


Riconoscimento OCR da processo

Per poter utilizzare il riconoscimento OCR da processo è necessario utilizzare da script la funzione Userfunction , richiamando le funzionalità di creazione del job (CREATEJOB), di controllo dello stato (JOBSTATUS), di reperimento del risultato (JOBRESULT) o di cancellazione del risultato e dei file(DELETEJOB)

La creazione del job e il reperimento del risultato sono operazioni asincrone, e pertanto è necessario controllare se il risultato sia disponibile attraverso la funzione “Userfunction JOBSTATUS”. Solo quando il JOBSTATUS restituisce i valori “1” (terminato regolarmente) o “-1” (terminato con errori), la funzione “Userfunction JOBRESULT” può fornire il risultato o il messaggio di errore. Eventualmente è possibile cancellare il file (.res) che lo contiene (attraverso il DELETEJOB).

Di seguito sono riportati l'immagine e gli script di un processo che preleva gli allegati, converte i PDF in DOC e allega il risultato ad una form.

BarOcr13 - processo

Il seguente esempio di script contiene solo le funzioni relative al job, senza scendere nei dettagli dei valori dei parametri, variabili e delle altre funzioni.

' creazione del job in una attività con condizione di completamento: sin quando il job non viene creato non andiamo all'attività successiva (Attività “Conversione PDF --> OCR”

JobCode=Functions.Userfunction("CREATEJOB","OCR",,filesalvato,"DOC",4,"13",0)

If JobCode <> "" Then

activity9_ExitCondition = true

Else

   Exit Function

End If

' attendiamo fino a quando non arriva il risultato, reiterando attraverso un timer l'attività di selezione (Attività ”il Job è terminato?”)

Function activity5_SelectionValue

     Dim fileconvertito

    JobCode=thisprocess.getvar("JobCode")

     res = Functions.Userfunction("JOBSTATUS", JobCode)

    If res = -1 Then ' si è verificato un errore

           activity5_SelectionValue = 99 'attivo nodo errore

     Else

        If res = 1 Then 'è andato a buon fine  e chiamo il result

               fileconvertito = Functions.Userfunction("JOBRESULT", JobCode, 0)

                 If cstr(fileconvertito) <> "" Then

                       activity5_SelectionValue = 1

                 Else

                       activity5_SelectionValue = 0

                End If

           Else 'è ancora in elaborazione e loop

                activity5_SelectionValue = 0

           End If

           If activity5_SelectionValue = 1 Then

'viene aggiunta una variabile  di processo per elaborazione successiva

                thisprocess.addvar "fileconvertito", fileconvertito

          End If

     End If

End Function

' cancelliamo il .res e, opzionalmente, i file di input e di output

res = Functions.Userfunction("DELETEJOB", JobCode)


Generazione Barcode da interfaccia web

Ricordiamo che la funzionalità di separazione dei documenti multipagina in blocchi attraverso codici a barre deve essere installata e configurata nella stessa maniera dell'OCR. La generazione del barcode relativo a un documento openwork® viene attivata solo se il componente Nuance (Scansoft) è stato registrato e la configurazione è completa.

Nella seguente immagine mostriamo come effettuare la generazione:

nota

Nota

E' possibile che le immagini multipagina da separare contengano codici a barre indipendemente da quelli creati per essere allegati automaticamente a form openwork®. In questo caso vengono riconosciuti solo quelli generati dalla nostra funzionalità e ignorati gli altri, anche se sono sulla stessa pagina.

nota

Nota

I criteri per un corretto riconoscimento dei codici a barre sono i seguenti:

Qualità: immagini sporche -soprattutto in presenza di barre che attraversano il codice a barre- o con una definizione inferiore a 300 dpi non vengono riconosciute.

Dimensione: barcode con una dimensione inferiore a 2,5 cm non vengono riconosciuti, si raccomanda una dimensione di almeno 3 cm. É possibile creare una personalizzazione del barcode in cui si ridimensiona larghezza o altezza, introducendo il file openwork\configurazioni\default\webserver\clibraries\barcodeg\barcodeg.js copiandolo dalla openwork\configurazioni\default\webserver\libraries\barcodeg\barcodeg.js.

Nella personalizzazione si dovrebbe modificare nella funzione 'Genera' il valore espresso in pixel delle variabili “alto=40” e “ largo=1”

Profondità del colore: immagini acquisite mediante scanner con scale di grigi a 8 bit generano errori nel caricamento. Una profondità maggiore produce file di grandi dimensioni, mentre è raccomandato utilizzare immagini a b/n (2 bit) .


Riconoscimento OCR da interfaccia web
1. Premere il tasto Riconosci testo

2. Selezionare il nome e il tipo del file risultante, e premere Conferma

3. L'immagine (o file PDF) viene riconosciuta, salvata nel formato richiesto dall'utente e allegata al documento openwork® corrente


Separazione Barcode da processo

Attualmente è possibile effettuare le separazioni Barcode solo da processo, sia quella in cui i codici a barre sono stati generati in una form openwork® (BARCODE) e i file separati saranno allegati alle rispettive form, sia quella in cui vengono riconosciuti codici generici (GENERALBARCODE) e per ognuno viene creato un file.

Per poter utilizzare la funzione BARCODE e GENERALBARCODE è necessario richiamare le funzioni Userfunction, richiamando le funzionalità di creazione del job (CREATEJOB) , di controllo dello stato (JOBSTATUS), di reperimento del risultato (JOBRESULT), dello spostamento del risultato( SAVEJOBRESULT) o di cancellazione del risultato e dei file (DELETEJOB)


openwork® Business Console

La Business Console è uno strumento, integrato in openwork®, che consente il monitoraggio in tempo reale e l'analisi dei dati relativi al contesto organizzativo rappresentato e gestito con openwork®.

Questo strumento è realizzato integrando in openwork® la tecnologia di Business Intelligence di QlikViewTM.

Un modello di analisi della Business Console è costituito da un file contenente sia i dati da analizzare che la relativa rappresentazione grafica: è possibile creare N tipologie di analisi creando N modelli di analisi.

Ogni parte di questo modello può essere personalizzata utilizzando uno specifico editor di QlikViewTM .

La Business Console si occupa, quindi, di riversare, nel modello utilizzato, i dati contenuti nel database di openwork®.

Fondamentalmente la Business Console consente quindi di gestire in openwork®, modelli di analisi dei dati basati sulla tecnologia QlikViewTM.

L'introduzione di questa nuova funzionalità, si traduce, ad esempio, nella possibilità di inserire un link alla pagina ASP.NET della Business Console, dopo aver naturalmente specificato il corrispondente modello di analisi.

Per ulteriori informazioni sulla componente openwork® Business Console contattare il supporto openwork®.


Advanced Job Engine

L'Advanced Job Engine è un modulo che permette di estendere le funzionalità base del Openwork® Job Engine, racchiudendone tutti i vantaggi (asincronicità, indipendenza, parallelismo dei task) e aggiungendo la possibilità di creare, utilizzare, collegare componenti personalizzati, rispondenti ad esigenze specifiche.

A corredo di questo modulo è presente una libreria di supporto che permette la gestione delle informazioni (input e output) semplice e basata sul modello OOP (Object Oriented Programming), raccoglie alcune utility per lo splitting e il merging dei PDF, permette di utilizzare IDE avanzati di programmazione, come Visual Studio .NET o IDE free come SharpDevelop.

Per mezzo di questo modulo è ad esempio possibile utilizzare agevolmente oggetti remoti e provenienti da altre tecnologie (attraverso il Remoting .NET e/o Web Services), includere e usare oggetti COM, DLL ed eseguibili. Questo permette di riutilizzare ad esempio il “legacy code”, patrimonio software di ogni azienda che ha già investito in altri applicativi, di integrare un nuovo software che esponga un'interfaccia e di distribuire il carico computazionale e di memoria su macchine diverse.

La costruzione e l'interfaccia di questo modulo personalizzabile è illustrata nel capitolo Assembly personalizzati. Per l'utilizzo da processi openwork® si veda la USERFUNCTION CREATEJOB CUSTOM.

Vengono inoltre rese disponibili due funzionalità aggiuntive, incluse nel modulo Advanced:

► Separazione, estrazione per blocchi e conversione: separa documenti multipagina in base al numero di pagina iniziale, finale e a blocchi di n-pagine. Questa funzionalità permette anche di avere un input in “TIF” e un output in “PDF”(cfr. Userfunction CREATEJOB NCUTTING).
► Trasformazione XSL e XSL-FO: Permette di trasformare mediante fogli di stile (XSL oppure XSL-FO) un XML in un HTML, XML e PDF (cfr. Userfunction CREATEJOB XTRANSFORM).


openwork® PEC

openwork® PEC è la componente integrata che rende possibile il colloquio tra il mondo openwork® e la Posta Elettronica Certificata.

openwork® PEC si interfaccia con i servizi PEC consentendo:

· Invio/ricezione di messaggi di posta elettronica certificata direttamente da processi di workflow;
· Polling su una o più caselle di posta elettronica certificata;
· Operazione di registrazione di un unico protocollo in entrata per ogni messaggio PEC ricevuto;
· Riconoscimento automatico del mittente del messaggio PEC censito in anagrafica;
· Invio automatico tramite PEC del protocollo in uscita;
· Gestione automatica dei messaggi di ritorno (notifiche generate dal server PEC di avvenuta consegna e accettazione);
· Gestione dei messaggi di conferma, notifica di eccezione, aggiornamento e annullamento di protocollazione

Inoltre openwork® PEC rispetta i requisiti previsti dalla normativa CNIPA:

· Gestione della comunicazione con i punti di accesso e di consegna PEC attraverso canali di trasmissione sicuri;
· Gestione dell’autenticazione dell’utente sia in fase d’invio che di ricezione dei messaggi;
· Gestione della firma elettronica apposta sui messaggi e sulle ricevute, nonché sugli eventuali avvisi;
· Equivalenza del documento scambiato con una raccomandata A/R.

Per ulteriori informazioni sulla componente openwork® PEC contattare il supporto openwork®.


How to openwork®

Nella seguente sezione vengono illustrati alcuni strumenti ed informazioni utili per muovere i primi passi con la piattaformaè disponibile l' implementazione di un case study.


Case study

Nella seguente sezione vengono descritte le operazioni per realizzare la gestione di una richiesta d'acquisto (RDA) per conto di una ipotetica azienda. Le specifiche e le regole procedurali da considerare sono di seguito riportate.

Supponiamo che l'organizzazione aziendale sia la seguente:

Ufficio | Responsabile | Altri dipendenti | Ufficio da cui dipende
Amministrazione | Luigi Bianchi | Enzo Pisani |
Commerciale | Renato Rosa | Guido Carli |
Tecnico | Marco Gialli | Claudio Renzi |
Acquisti | Mario Rossi | Anna Luisi | Amministrazione
Produzione | Franco Neri | Eleonora Conti | Tecnico
Prototipazione | Giovanni Verdi | Luisa Giuliani | Tecnico
Ricerca e Sviluppo | Roberto Celeste | Carlo Basile | Tecnico

Consideriamo le seguenti specifiche e regole procedurali:

· I Richiedenti possono appartenere all'Ufficio Tecnico oppure all'Ufficio Commerciale.
· Ogni richiesta deve essere visionata dal Responsabile diretto del Richiedente della RdA: solo se viene approvata allora è sottoposta al Responsabile dell'Ufficio Acquisti.
· Se il Responsabile diretto non approva la richiesta, questa viene archiviata (nessuno potrà apporvi modifiche) e viene inviata una e-mail di notifica al Richiedente.
· Il Responsabile dell'Ufficio Acquisti può esprimere direttamente un parere oppure richiedere l'intervento di un altro Responsabile di funzione da lui stabilito al momento dell'esame della RdA (le altre Aree coinvolte sono Produzione, Ricerca e Sviluppo, Prototipazione).
· Nel caso in cui invece sia il Responsabile dell'Ufficio Acquisti e/o un Responsabile di Funzione a non approvare la richiesta, allora viene inoltrata nuovamente al Richiedente per richiedere un'eventuale conferma.
· Se la RdA non viene confermata, il processo termina con una notifica al Responsabile diretto del Richiedente. Se invece è confermata, viene emessa una revisione della RdA e il ciclo viene ripetuto a partire dall'approvazione del Responsabile Diretto.

Di seguito viene riportato uno schema esemplificativo della form mediante cui viene inoltrata la RdA che può contenere degli documenti in allegato.

Data |  |  |  |  |
Numero |  |  |  |  |
Oggetto |  |  |  |  |
Motivazione del fabbisogno |  |  |  |  |
Materiale da acquistare |  |  |  |  |
Codice | Descrizione | UM | Quantità | Prezzo unitario | Importo
Autorizzazione del responsabile |  |  |  |  |
Autorizzazione del responsabile acquisti |  |  |  |  |
Autorizzazione del responsabile di funzione |  |  |  |  |

L'implementazione avviene esaminando in maniera dettagliata i seguenti argomenti: Creazione dell'organigramma


Creazione dell'organigramma

Argomenti trattati - Passo 1

· Accesso ad openwork® Business Process Management Tools.
· Gestione dell'organigramma.
· Schede anagrafiche degli operatori di openwork®.

Obiettivo

Impostare l'organigramma dell'azienda a partire dalla suddivisione gerarchica degli Uffici:

· Amministrazione (Resp. Luigi Bianchi; Enzo Pisani)
· Commerciale (Resp. Renato Rosa; Guido Carli)
· Tecnico (Resp. Marco Gialli; Claudio Renzi)
· Acquisti (Resp. Mario Rossi; Anna Luisi) subordinato ad Amministrazione
· Produzione (Resp. Franco Neri; Eleonora Conti) subordinato a Tecnico
· Prototipazione (Resp. Giovanni Verdi; Luisa Giuliani) subordinato a Tecnico
· Ricerca e sviluppo (Resp. Roberto Celeste; Carlo Basile) subordinato a Tecnico

Operazioni

1. Accedere al web server della configurazione in cui si vuole implementare il Case Study utilizzando il BPMTools (utente: Amministratore, Password: ns). Per l'implementazione corrente è stata creata una nuova configurazione la cui ragione sociale è casestudy e sigla è CS.

nota

Nota

Proseguire con i passi successivi che consentono la creazione manuale dell'organigramma. In alternativa importare nella configurazione casestudy creata al passo 1, l'organigramma disponibile sul cd di openwork® nella cartella \tutorial\case_study\Files Integrativi Case Study\Organigramma . Per fare ciò utilizzare il Server Manager, tab Installazioni, selezionare la configurazione casestudy e cliccare su Importa (cfr. La sezione installazioni).

2. Aprire openwork® Organization Manager dal menù Organizzazione -> Organigramma
3. Facendo uso del tasto Nuova unità organizzativa cst01 - buttonneworganization e il tasto Collegamento tra unità organizzative cst02 - buttonlink tracciare il seguente diagramma:

cst05 - diagram

nota

Nota

La creazione di una nuova unità organizzativa comporta la descrizione dei seguenti parametri: Etichetta, Nome, Sigla. In particoalre la Sigla rappresenta la chiave univoca di classificazione delle unità.

4. Utilizzando il tasto Inserimento Ruolo cst04 - buttoninsrole , inserire in ciascun Ufficio un ruolo con etichetta Responsabile ed uno con etichetta Addetto. Compilare manualmente l'apposito campo con le funzioni aziendali non disponibili tra quelle presenti. Trascinare (drag & drop) i campi così definiti sull'Ufficio attinente (nel piano di lavoro oppure nella struttura ad albero che compare sulla destra dello schermo).

nota

Nota

L'icona sulla struttura ad albero consente di identificare subito il ruolo del Responsabile. L'impostazione manuale del ruolo di Responsabile si effettua mediante il menu contestuale cliccando con il tasto destro del mouse in corrispondenza del ruolo.

nota

Nota

Si consiglia di posizionare le funzioni aziendali sul diagramma rispettando l'ordine gerarchico (collocando, ad esempio, i Responsabili sopra gli Addetti).

5. Creare le schede anagrafiche degli operatori attraverso il tasto Nuovo operatore cst08 - buttonnewoperator , compilando le informazioni nella maschera sottostante:

cst17 - newoperator

nota

Nota

Il completamento delle schede di anagrafica (così come la loro eliminazione) può essere gestito soltanto dall'interfaccia su browser dell'Amministratore di openwork®.

attenzione

Attenzione

Un operatore censito in anagrafica ma non inserito nell'organigramma non può avere accesso al sistema.

6. Utilizzando il tasto Inserimento operatore cst06 - buttoninsoperator , inserire (drag&drop) gli operatori nei rispettivi ruoli:

cst61 - insoperator

7. Spostare il ruolo Amministratore di openwork® all'interno dell'Ufficio Tecnico. Pubblicando l'organigramma attraverso il tasto Rendi disponibili a tutti l'organigramma, gli account degli operatori inseriti in organigramma vengono attivati (lo userid è quello indicato quando il nuovo operatore viene inserito, mentre la password di default è cambiami. Se la localizzazione dell'utente è diversa dall'italiano la password di default sarà changeme).

nota

Nota

In vista di ulteriori modifiche, è possibile salvare l'organigramma disegnato senza pubblicarne la copia; tale operazione non abilita gli account inseriti o modificati da organigramma.


Gestione Piano di classficazione

Argomenti trattati - Passo 2

· Creazione di un modello di form a partire da schemi di default.
· Gestione piano di classificazione.

Obiettivo

Definire un primo modello di form per la gestione RdA.

Operazioni

1. Aprire il piano di classificazione dal menù Dati e Documenti -> Piano di Classificazione dei documenti
2.

cst18 - folder

Creare una cartella trascinando con il mouse l'elemento Nuovo grado divisionale cst16 - buttonfolder sul piano di lavoro. Viene mostrata una maschera in cui è possibile indicare il nome della cartella ed eventualmente la caratterizzazione del grado divisionale.

3. Creare un modello di form per la gestione RdA trascinando sulla cartella l'elemento Nuovo cst19 - buttonnewform
4.

cst20 - typemodel

Caratterizzare il modello scegliendo l'opzione Modello di documento e compilando i campi Indice e Nome

nota

Nota

Sono previsti appositi modelli di form di default per la creazione del Protocollo. openwork® permette una gestione del Protocollo Informatico secondo le direttive del DPR 445/2000. Gli approfondimenti sulla gestione del protocollo non sono ed eventuali strumenti dedicati alla gestione non vengono riportati nel Manuale Prodotto openwork®.

5. Impostare le autorizzazioni accedendo tramite menù contestuale del modello di form (la schermata viene mostrata cliccando con il tasto destro del mouse sulla voce corrispondente).

cst21 - propertyform

6. Inserire nel campo Creazione permessa a l'opzione Tutta l'organizzazione attraverso il tasto di browsing. Salvare le modifiche.

cst22 - permissionform


Creazione di un semplice modello di processo

Argomenti trattati - Passo 3

Workflow Designer.

Obiettivo

Disegnare un primo schema di processo che contempli la revisione della RdA da parte del Responsabile del Richiedente.

Operazioni

1. Creare un modello di processo per la gestione RdA trascinando sulla cartella l'elemento Nuovo. In questo caso nella maschera corrispondente è sufficiente indicare il nome del processo (ad esempio Gestione processo RdA).
2. Aprire il dettaglio del processo creato (cliccando con il testo destro del mouse): viene visualizzato un foglio di lavoro del Workflow Designer per il disegno del modello di processo.

nota

Nota

L'apertura del Workflow Designer è vincolata alla presenta di una stampante configurata sulla workstation. Se assente si può procedere all'installazione dei driver di una qualsiasi stampante.

3. Attraverso l'icona Mostra casella degli strumenti cst23 - buttontools , viene mostrata lateralmente la barra degli strumenti del Workflow Designer .
4. Trascinare sul foglio di lavoro l'attività di Firma documento.

cst24 - signactivity

nota

Nota

Si osservino le due icone che compaiono all'interno del riquadro dell'attività: la prima indica la tipologia dell'attività, ossia di Firma documento, mentre la seconda indica la proprietà di sola lettura che sarà associata al documento.

5. Trascinare sul foglio di lavoro il nodo di Fine processo e unire gli oggetti attraverso il tasto Collegamento tra attività cst10 - buttonlink .

cst25 - processstep1

nota

Nota

Per poter generare un'istanza dal modello di processo tracciato è necessario introdurre ulteriori attributi caratteristici (partecipanti di ogni attività, documenti in circolo, condizioni di completamento dei diversi step, etc).

6. Cliccando con il tasto destro del mouse sull'attività di firma, scegliere la voce Selezione del documento associato all'attività. Nella maschera mostrata, scegliere Documento che ha avviato il processo. Questa impostazione indica che il documento associato all'attività di firma sarà quello che ha avviato l'istanza.

cst27 - selectdocument

7. Cliccando nuovamente con il tasto destro del mouse sull'attività, scegliere la voce Partecipanti. Selezionare tra le Funzioni speciali l'impostazione Responsabile operatore che ha creato il documento di avvio processo (mediante doppio clic) ed assegnare come livello di appartenenza del responsabile il valore di default 0.
8. cst28 - selectpartecipants

nota

Nota

openwork® prevede una serie di funzioni speciali associate ai ruoli che consentono di gestire processi semistrutturati. In questo caso il partecipante dell'attività viene definito nel corso dell'esecuzione dell'istanza.

nota

Nota

Per eliminare i partecipanti coinvolti in un'attività è sufficiente selezionare l'icona corrispondente nella parte destra della maschera e premere il tasto di cancellazione (oppure con il doppio clic sull'elemento selezionato).

9. Pubblicare il modello di processo utilizzando l'apposito comando. cst29 - buttonpublish
10. Chiudere il modello. Osservare l'icona dl modello di processo: il colore verde indica che il processo è stato pubblicato, quindi pronto per avviare istanze.
11. Cliccando con il tasto destro del mouse sul modello di form, accedere alle Proprietà. Impostare nel campo Nuovo processo il modello Gestione processo RdA utilizzando il pulsante di ricerca. Salvare le impostazioni prima di chiudere.

cst30 - processassociation

nota

Nota

Quando viene associato un modello di processo ad un documento, cambia la nota riportata in basso nel piano di classificazione. Infatti, prima dell'associazione la notazione riportata è "I documenti di questo tipo non hanno impostazioni di fascicolazione e non avviano processi", mentre a seguito dell'associazione il messaggio riportato sarà "I documenti di questo tipo originano un processo del seguente tipo: Gestione processo RdA".


Primo accesso e utilizzo degli elementi creati

Argomenti trattati - Passo 4

· Interfaccia operatore in Internet Explorer
· Esecuzione di un'istanza di processo

Obiettivo

Creare un documento di RdA dall'interfaccia operatore ed avviare un'istanza di processo.

Operazioni

1. Accedere dal browser all'applicazione (http://localhost/casestudy) con l'operatore Renzi (Utente: Renzi – Password: cambiami).

nota

Nota

Prima dell'inserimento dei dati in organigramma, l'unico account valido dopo l'installazione di openwork® è quello dell'amministratore (Utente: Amministratore - Password:ns). L'amministratore possiede di default tutti i privilegi d'accesso.

Il primo accesso comporta un tempo di attesa maggiore in quanto vengono scaricati ed installati alcuni oggetti client necessari al corretto funzionamento di openwork®.

2. Viene visualizzato il desktop di default. Attraverso il menù Nuovo ->Documento selezionare la tipologia del documento da creare. La struttura mostrata è quella predisposta mediante Business Process Management Tools.

cst31 - newdocument

cst32 - ClassificationTree

3. Selezionare RdA – Richiesta di acquisto. Viene aperta la form di default di openwork®.

nota

Nota

La form di default non può rappresentare correttamente le informazioni che verranno gestite, pertanto il modello di base, opportunamente riadattato mediante il Form Editor, permette di costituire uno standard adeguato alle proprie esigenze gestionali.

nota

Nota

I campi in grassetto sono da compilare obbligatoriamente. Il salvataggio della form senza aver specificato l'Oggetto (obbligatorio), genera il seguente messaggio: "Errore nell'operazione Salva. Il documento non è stato compilato correttamente (oggetto)".

Questa è una proprietà intrinseca del sistema. Si può specificare una classe differente (definita in un apposito file CSS) per formattare diversamente un'etichetta che indichi un campo obbligatorio.

nota

Nota

I campi Classificazione, Data, Numero sono campi automatici, gestiti dal sistema e non modificabili dall'utente:

· Classificazione viene compilato nel momento in cui si è scelto il tipo di documento dall'apposito strumento;
· Data indica per default la data di pubblicazione del documento (o della creazione nel caso di documenti non ancora pubblicati);
· Numero viene impostato dal sistema al momento della pubblicazione secondo un ordine progressivo che rispetta le regole di numerazione fissate per l'archivio di appartenenza.

Inoltre, per ogni documento esistono alcuni campi automatici che lo contraddistinguono (ad es. Classificazione, Ufficio di competenza, Responsabile, Numero). Per quanto possano essere resi invisibili nella maschera del documento che appare dall'interfaccia operatore, essi devono necessariamente essere inclusi nel modello di form.

approfondimento

Approfondimento

Il sistema gestisce in maniera intrinseca alcuni stati di ogni form.

· una form non pubblicata (non possiede cioè ancora alcun numero identificativo) viene considerata come documento non disponibile o bozza. Form di questo tipo sono visibili (tramite chiamata dell'apposito elenco) solo all'operatore che li ha creati, a meno che non si disponga di un'autorizzazione che consenta l'accesso anche agli altri operatori.
· Una form pubblicata è contrassegnata da un numero e risulta comunque modificabile finché rimane nel suo ciclo di vita.
· Una form archiviata, invece, non può più essere modificata.

4. Si osservi che nella form è riportata una sezione che indica l'associazione ad un eventuale processo il quale viene attivato nel momento in cui la form, dopo la pubblicazione, viene chiusa.

cst33 - InfoDocument

5. Dopo la pubblicazione (che si effettua cliccando sul corrispondente pulsante sulla barra delle action), alla form viene associato un numero.

cst34 - NumDoc

nota

Nota

In seguito alla pubblicazione appaiono nuovi pulsanti nella sezione delle action. Infatti, le action predefinite dipendono dallo stato della form. La visibilità delle action può essere gestita dal Business Process Management Tools.

6. Chiudere la form ed Effettuare il Logout (Utilità ->Logout). Accedere al sistema mediante l'account del Responsabile di chi ha inoltrato la richiesta, cioè l'operatore Gialli (password di default è cambiami).
7. Attraverso il menù Attività -> In carico è possibile visualizzare l'attività:

cst35 - ToDoList

nota

Nota

Se non compare alcuna attività, allora verificare che il servizio openwork® Manager sia attivo.

nota

Nota

Che cosa è avvenuto nel sistema?

La form di tipo RdA ha generato un evento che ha pemesso l'avvio di istanza di processo basata sul modello disegnato. L'esecuzione del processo è dunque giunta all'attività di elaborazione firma in carico all'operatore Gialli.

Si distingue l'istanza di processo dal modello su cui essa si basa, infatti ogni istanza può essere eventualmente modificata indipendentemente dal modello cui fa capo e dalle altre istanze ricavate dallo stesso modello.

approfondimento

Approfondimento

Esistono tre modi per avviare un'istanza di processo: manualmente, in seguito alla creazione di un documento, automaticamente. All'interno di un'istanza, gli oggetti del workflow (attività, link etc.) possono trovarsi nello stato attivato, completato oppure in attesa di attivazione. Quando un oggetto viene attivato, il sistema processa il flusso corrispondente secondo le modalità indicate:

· Se il nodo attivato non prevede partecipanti, si tratta di un nodo di automazione: esso viene eseguito autonomamente dal Workflow Manager.
· Se c’è un solo partecipante, l'attività viene collocata nell'agenda dell'operatore corrispondente nell'ambito delle Attività in carico;
· Se sono previsti più partecipanti, l'attività viene collocata nell'agenda delle Attività da prenotare. Quando uno di essi deciderà di prenotarla, essa scomparirà dall'agenda delle attività prenotabili.

8. Nel BPMTools, attraverso il menù Processi->Istanza di Processo Attive, si può verificare la presenza di un'istanza attiva. Aprendo il modello si può notare che l'attività firma lampeggia. Doppio click su questa attività: vengono visualizzate le relative informazioni (quale operatore ha in carico l'attività e da quando).
9. Loggarsi nuovamente da browser utilizzando l'account Gialli. Selezionare l'attività in esame dall'elenco delle attività da iniziare (Attività -> In carico). Cliccare su Esegui.
10. La form viene aperta in sola lettura: non è consentita alcuna modifica , è possibile solo spuntare il check box (Firmato/Non firmato):

cst36 - ActivitySignature

11. Effettuare la seguente verifica: utilizzando l'apposita icona delle action, chiudere la form appena aperta senza spuntare il checkbox di firma. Innanzitutto, si osserva che il record dell'attività è scomparso dall'elenco poichè trasferito nella lista delle attività da completare.
12. Chiudere la sessione per l'operatore Gialli e iniziare una nuova sessione con l'operatore Renzi che ha creato il documento e che ha avviato il processo. Selezionare il menu Consultazione-> Tutti i Documenti (alternativamente iniziare una sessione per l'operatore Amministratore e selezionare il menù Consultazione->Documenti->Da archiviare). Aprire la form attraverso l'action Apri. Viene mostrato il seguente messaggio: "Attenzione! Ci sono attività in corso sul documento specificato e pertanto non è possibile apportarvi modifiche".

'

approfondimento

Approfondimento

Quando ad una form è associata un'attività in corso collocata nell'agenda di un operatore (To Do List o Work Item List), nessun utente - nemmeno l'operatore stesso – è autorizzato ad aprire il documento ed apportarvi le modifiche.

nota

Nota

Ogni attività (sia automatica che subordinata all'intervento di un operatore) possiede una propria condizione di completamento, al verificarsi della quale l'attività stessa viene portata a compimento ed il processo può andare oltre.

approfondimento

Approfondimento

Il passaggio dallo stato di attivazione allo stato di completamento di un'attività è vincolato al verificarsi di una condizione di completamento. Essa può corrispondere al completamento manuale (ovvero tramite il comando Completa delle action) o essere gestita in maniera automatica (mediante script).

Nel nostro caso la condizione di completamento è rappresentata dall'apposizione della firma stessa mediante il check box. Un tentativo di completamento manuale genera un messaggio di errore. L'apposizione di firma rappresenta quindi una condizione di completamento implicita, definita dal default dell'attività. É comunque possibile predisporre una condizione di completamento esplicita tramite script.

nota

Nota

Nello specifico, l'attività di firma è legata ad un documento che deve essere esaminato ma non modificato: per tale motivo il documento viene aperto in sola lettura. E' possibile verificare tale impostazione dal BPMTools:

cst37 - PropertyRead

13. Completare l'attività (ora presente nell'elenco delle attività da completare), apponendo la firma richiesta. Salvando e chiudendo la form si può notare che:
· il processo avanza e si conclude;
· il processo viene storicizzato;
· la form viene registrata con la stessa indicazione di stato che aveva al termine del processo.
14. Verifica: cercare il documento nell'elenco dei documenti registrati (dal menu Consultazione). Si osservi che ora il documento è disponibile in apertura ed è possibile apportarvi delle modifiche. É presente un link che rimanda allo storico del documento nel processo. Notare inoltre che non è possibile rimuovere la firma.


Criteri di accesso alle form

Argomenti trattati - Passo 5

Criteri di accesso alle form di openwork®.

Obiettivo

Definire opportune limitazioni e autorizzazioni d'accesso ai documenti in consultazione.

Operazioni

1. Accedere al sistema tramite l'account Renzi. Selezionare Consultazione-> Tutti i documenti. L'elenco dei documenti non compare poichè non sono state impostate le autorizzazioni opportune.
2. Aprire il dettaglio del modello RdA – Richiesta d'Acquisto dal BPMTools e copiare l'impostazione Tutta l'organizzazione anche nei campi Accesso in sola lettura a e Accesso in lettura/scrittura a.

attenzione

Attenzione

L'elenco che compare eredita le impostazioni di default. E' possibile personalizzare tale elenco in tutte le sue parti.

3. Accedere al sistema mediante l'utente Gialli: visualizzando lo stesso elenco, non viene rilevata alcuna voce. L'operatore Gialli non ha infatti creato alcuna form, quindi non può accedere alla RdA inoltrata.

nota

Nota

Di seguito verranno ricapitolate le modalità di accesso. Innanzitutto si osserva la presenza di campi compilati automaticamente dal sistema:

cst38 - InfoForm

Questi campi attribuiscono la competenza di un documento ad un determinato Ufficio o operatore. L'accesso può quindi essere regolato in base alla competenze oppure accesso in base ai criteri impostati dal dettaglio nel piano di classificazione. In questo caso valgono le seguenti regole:

· il responsabile del documento può sempre accedere;
· l'operatore accede al documento solo se autorizzato. Tali impostazioni possono essere gestite dal BPMTools (Organizzazione -> Gestione delle autorizzazioni).

cst39 - Authorization

In questo caso, Renzi e Gialli hanno le stesse impostazioni personali. Renzi è abilitato a visualizzare il documento presente nel suo elenco in consultazione poichè è il responsabile del documento, stesso mentre a Gialli non è consentito visualizzarlo. E' possibile verificare tali impostazione clicccando su Mostra il profilo dell'operatore.

4. Modificare dalla maschera delle autorizzazioni (Organizzazione -> Gestione delle autorizzazioni) l'impostazione di accesso dell'operatore Gialli (Resp. Ufficio Tecnico), assegnando un accesso di tipo Unità org. (poichè il documento compete all'ufficio di competenza dell'operatore).

cst40 - AccessAuthorization

5. Ritornando all'elenco di documenti in consultazione dell'operatore Gialli, viene visualizzato un nuovo elenco in cui compaiono le stesse voci dell'elenco attinente a Renzi.

nota

Nota

Le impostazioni consentono a Gialli anche l'accesso alla visualizzazione al dettaglio della form. É possibile escludere quest'eventualità modificando l'impostazione della voce Accesso ai dettagli: invece di selezionare l'opzione Unità org, selezionare l'opzione Personali. In questo modo, accedendo al dettaglio della form, viene restituito il seguente messaggio: "Il documento richiesto non è di competenza dell'operatore".

nota

Nota

Esiste un altro metodo per impostare le autorizzazioni d'accesso ai documenti in base ai criteri definiti nell'archivio corrispondente. É sufficiente visualizzare i campi Accesso in lettura e Accesso in lettura/scrittura del dettaglio dell'archivio e verificare che il valore assegnato in entrambi sia diverso da Tutta l'organizzazione. In tal modo le limitazioni d'accesso definite nell'archivio hanno precedenza rispetto alle impostazioni in base alla competenza.

6. Visualizzare le impostazioni dell'archivio RdA – Richiesta d'Acquisto e configurare la maschera secondo le seguenti impostazioni:
· Creazione permessa a: Tutta l'organizzazione.
· Accesso in sola lettura a: Ufficio Commerciale.
· Accesso in lettura/scrittura a: Ufficio Tecnico.
7. Accedere tramite l'operatore Gialli (Resp. Ufficio Tecnico) all'elenco dei documenti in consultazione. Appare la stessa lista di documenti vista in precedenza; l'accesso a ciascuno è consentito in modalità di lettura/scrittura.
8. Disconnettere l'utente Gialli ed accedere al sistema tramite l'operatore Rosa (Resp. Ufficio Commerciale).
9. Visualizzare l'elenco delle RdA: compaiono tutte le stesse voci apparse all'utente Gialli, ma tutti i documenti sono accessibili soltanto in modalità di sola lettura.

attenzione

Attenzione

I criteri appena illustrati riguardano l'accesso ad un documento al di fuori dell'esecuzione di un processo. Invece, ad ogni operatore coinvolto in un processo in atto, vengono automaticamente attribuiti i diritti di necessari per l'esecuzione delle attività di competenza.

attenzione

Attenzione

Nel caso in cui un operatore autorizzato tenti la modifica di un documento mentre lo stesso è in carica ad uno o più operatori per lo svolgimento di un'attività in corso, l'accesso in modifica sarà comunque inibito.


Archiviazione dei documenti

Argomenti trattati - Passo 6

· Stati di un documento nel suo ciclo di vita
· Attività di archiviazione manuale ed automatica

Obiettivo

Gestire l'archiviazione dei documenti elaborati.

Operazioni

1. Aprire dal BPMTools lo strumento per la Gestione delle autorizzazioni (Organizzazione -> Gestione delle autorizzazioni).
2. Autorizzare il Responsabile dell'Ufficio Tecnico (Gialli) all'Archiviazione dei documenti interni.

cst41 - AuthorizationDoc

3. Accedere al sistema tramite l'utente Gialli. Aprendo la form è possibile notare, nella barra delle action, la presenza del pulsante Archivia.
4. Cliccare sul pulsante Archivia. Il documento subisce un importante passaggio di stato e viene classificato come archiviato, per cui non sarà più consentita alcun tipo di modifica, indipendentemente dalla configurazione dei permessi d'accesso.

nota

Nota

É buona norma che un documento che abbia terminato il suo regolare ciclo di vita gestito in un processo venga automaticamente archiviato prima del termine del processo stesso. All'interno del Workflow Designer esiste un'apposita attività di archiviazione che può essere gestita in automatico.

5. Modificare il dettaglio del processo aggiungendo l'attività di archiviazione, utilizzando lo strumento di archiviazione. Indicare l'opzione Documento associato all'attività precedente nelle proprietà relative al documento coinvolto:

cst42 - ModifyProcess

nota

Nota

Al fine di evitare di dover ridisegnare i link di correlazione tra le attività, si può fare uso delle funzioni Cambia nodo di destinazione e Cambia nodo di origine: esse sono disponibili sul menu contestuale, che appare facendo clic con il tasto destro del mouse su un simbolo di link.

6. Creare una nuova istanza di processo inoltrando un'altra RdA: tutti i documenti emessi sulla base di questo nuovo modello verranno automaticamente archiviati.
7. Tentando di accedere al nuovo documento mediante l'elenco di consultazione (opzione Tutti i documenti), verrà visualizzato il seguente messaggio: "Attenzione! Il documento è stato archiviato e pertanto non è possibile apportvi delle modifiche "
8. Allo stesso modo, accedendo dal BPMTools alla lista di processi attivi, si può notare che l'istanza non è presente nell'elenco.


Istruzioni condizionali

Argomenti trattati - Passo 7

· Attività decisionali in un flusso
· Personalizzazione modelli HTML dei documenti
· Programmazione degli oggetti della libreria di classi openwork®

Obiettivo

L'operatore che esegue l'attività di firma esprime un giudizio in base la quale si determina il flusso che il processo deve seguire.

Operazioni

1. Accedere al dettaglio del modello di processo per modificare il disegno. Inserire uno step condizionale di selezione automatica "La richiesta è stata(accettata/respinta)". Sulla base della decisione del Responsabile che esegue l'attività, il flusso procede su due rami differenti. Se la richiesta viene accettata, allora è necessario informare l'operatore che l'ha inoltrata: ciò si traduce nell'inserimento di un'attività di elaborazione documento:

cst43 - ModifyProcess

nota

Nota

Procedendo alla pubblicazione del modello sopra riportato, viene mostrato il seguente messaggio: "Il grafico non può essere pubblicato perchè contiene degli errori". E' possibile verificare gli errori utilizzando l'apposita funzione di Analisi degli errori cst44 - buttonerror che riporta sia gli Errori, sia i Warning. In questo caso gli errori riguardano la mancanza del documento associato all'attività di elaborazione e le mancata descrizione delle condizioni di uscita nel nodo di decisione.

2. Sull'attività Elaborazione documento, selezionare con il tasto destro del mouse la funzione Selezione del documento, indicando Documento associato all'attività precedente.
3. Utilizzando la funzione Copia partecipanti ed Incolla partecipanti, impostare lo stesso partecipante dell'attività di Firma documento per l'attività Elaborazione documento.
4. Salvare il modello.

nota

Nota

Si osservi il messaggio riportato in basso a destra: "Copia di lavoro e copia pubblicata diverse". Infatti, dopo l'operazione di salvataggio, esistono due copie diverse dello stesso modello: una attualmente in uso, l'altra a disposizione per avviare nuove istanze (copia pubblicata).

nota

Nota

Per gestire il flusso attraverso il nodo condizionale è necessario introdurre uno script (VBScript). Innanzitutto è necessario impostare il modello di documento attinente, in modo che possa contenere l'informazione circa l'approvazione o meno della richiesta. Il sistema, infatti, utilizza ancora un modello di default: esso deve essere sostituito con una struttura contenente l'informazione che si deve materialmente gestire.

5. Aprire il modello RdA – Richiesta d'Acquisto (Dati e Documenti -> Piano di classificazione dei documenti) e selezionare con il tasto destro del mouse l'opzione Apri modello form. Poichè il modello non ha subito alcuna personalizzazione, viene aperto il modello di default di openwork® nel Form Editor. E' possibile anche passare all visualizzazione in HTML, oppure visualizzare l'anteprima ottenendo una rappresentazione del modello simile a quella che verrà visualizzata nel browser.

nota

Nota

I modelli di default contenuti nell'installazione di openwork® sono personalizzabili attraverso apposite funzioni disponibili nel menu Dati e Documenti.

nota

Nota

L'anteprima del modello non è una visualizzazione attendibile in quanto non si tiene conto del contesto in cui l'informazione viene visualizzata. Inoltre ad ogni utente in fase di run time vengono mostrati i campi di propria competenza. L'anteprima non contiene le trasformazioni che vengono eseguite nel Web Server come, ad esempio, l'aggiunta di pulsanti di alcuni controlli predefiniti.

6. Ecco una rielaborazione del modello RdA. Per ottenere la seguente struttura è sufficiente importare il file presente nel cd di installazione di openwork®, utilizzando la funzione apposita Importa un file HTML esterno cst45 -buttonimport presente nel menù del tab HTML delle modello della form. Durante il caricamento potrebbe esser mostrato un avviso relativo alle specifiche degli attributi di alcuni controlli; consentire all'aggiornamento automatico alle specifiche più recenti. Salvare e pubblicare la form. Inserire il file sign.gif (presente nel cd di openwork®) nella cartella webserver/cimages. In questa cartella sono collocati i file che definiscono gli oggetti grafici personalizzati della configurazione.

nota

Nota

Il campo contenente l'informazione relativa all'autorizzazione della richiesta è descritto nel seguente codice:

<table cellspacing="0" cellpadding="0" width="100%" border="0">

<tbody>

<tr>

<td width="1%">

</td>

<!-- LABEL -->

<td width="12%">

<label class="label" owk:type="label" owk:fieldname="autorizzazionerichiesta" owk:requiredclass="labelbold">Autorizzazione richiesta</label>

</td>

<!-- INPUT -->

<td width="36%">

<select class="combobox" owk:type="combobox"

owk:fieldname="autorizzazionerichiesta" owk:datatype="text"

owk:datafield="libero1" owk:mode="list">

<option selected="selected"></option>

<option>Accettata</option>

<option>Respinta</option>

</select>

</td>

<td width="54%">

</td>

<td width="3%">

</td>

</tr>

</tbody>

</table>

approfondimento

Approfondimento

Notare i simboli che compaiono sulla barra di stato a seconda delle diverse situazioni:

cst46 - savecopy É presente una copia di lavoro (solo salvata) del modello.

cst47 - CopyPublish Sono presenti una copia di lavoro ed una pubblicata del modello.

cst48 - CopyPublish É presente una copia pubblicata del modello.

Assicurarsi che si verifichi la terza eventualità.

7. É ora possibile aggiungere uno script che consenta la scelta automatica del giusto ramo di processo nel modello in esame. Nel modello di processo, selezionare sull'attività di selezione attraverso il tasto destro del mouse la voce Valore della selezione. Impostare il seguente script nella finestra apparsa:

Function Activity6_SelectionValue

Activity6_SelectionValue=ThisActivity.Document.GetFieldValue("autorizzazionerichiesta")

End Function

Impostare il seguente script sul ramo ACCETTATA:

Function Activity6_Condition8

Activity6_Condition8 = (ThisActivity.SelectionValue="Accettata")

End Function

Impostare il seguente scriptsul ramo RESPINTA:

Function Activity6_Condition9

Activity6_Condition9 = (ThisActivity.SelectionValue<>"Accettata")

End Function

attenzione

Attenzione

Porre attenzione quando gli script vengono riportati nel proprio modello di processo poichè gli identificati, assegnati automaticamente dal sistema, cambiano in base all'identificativo assegnato nel modello ai nodi e ai link.

8. Disattivare il flag di Sola lettura dall'attività di firma (dal menu contestuale che si visualizza cliccando con il tasto destro del mouse). Pubblicare il modello di processo.

9. Verificare dal browser il procedere del flusso nei due casi previsti.

attenzione

Attenzione

Di norma la condizione di completamento predefinita per un'attività di elaborazione documento si realizza mediante l'action Completa.

Nel corso dell'esecuzione delle due istanze, si riscontrano due problemi strutturali:

· il campo riservato all'autorizzazione del progetto risulta visibile e compilabile subito da parte del richiedente della RdA;
· il campo di approvazione della RdA (Accettata/Respinta) non risulta obbligatorio. Qualora non venga specificata una selezione, il Workflow Manager assume - a norma dello script dell'attività 4 - che la richiesta sia stata respinta.


Primo miglioramento del processo

Argomenti trattati - Passo 8

· Personalizzazione modelli HTML dei documenti: XSL e proprietà changeable
· Impostazione da script della proprietà fieldattribute

Obiettivo

Rendere visibile (e mandatorio) il campo Autorizzazione Richiesta solo a partire dalla attività di firma in poi; permettere le modifiche al campo suddetto solo a chi esegue l'attività stessa.

Operazioni

1. Dal BPMTools, cliccare con il pulsante destro del mouse su ogni singola attività e selezionare Mostra identificativo in modo da visualizzare per ogni attività il rispettivo id.

approfondimento

Approfondimento

Il flusso attraverso i diversi oggetti del diagramma di workflow viene gestito attraverso l'inserimento di opportuni script, che vengono eseguiti in run time, in corrispondenza di attività specifiche. Ad esempio, selezionando l'attività 3 e cliccando con il tasto destro del mouse, la voce Script eseguiti dopo, consente di inserire gli script in base alle seguenti opzioni:

· prima dell'esecuzione (solo lato client);
· dopo l'attivazione (solo lato server);
· dopo la prenotazione (sia lato server che lato client);
· dopo l'esecuzione (sia lato server che lato client);
· dopo il completamento (solo lato server).

2. Per rendere il campo visibile e modificabile solo da parte del responsabile del richiedente della RDA occorre intervenire sul modello HTML, inserendo il codice del campo Autorizzazione Richiesta all'interno di una specifica istruzione xsl:if. Così facendo, il campo in oggetto, viene mostrato solo se l'identificativo del processo è diverso da zero, ovvero solo se se il processo è stato già avviato. In questo caso quindi, in fase di creazione, il campo rimane non visibile. Di seguito il codice che consente di realizzare tale funzione:

<xsl:if test="//owk:form/owk:document/owk:processi/owk:process/owk:id!='0'">

  <table border="0" cellpadding="0" cellspacing="0" width="100%">

<tr>

<td width="1%"/>

<!-- LABEL -->

<td width="12%">

<label owk:type="label" class="label" owk:requiredclass="labelbold"

         owk:fieldname="autorizzazionerichiesta">Autorizzazione richiesta</label>

</td>

<!-- INPUT -->

<td width="36%">

<select owk:type="combobox" class="combobox" owk:datatype="text"

owk:mode="list"owk:fieldname="autorizzazionerichiesta"

owk:datafield="libero1">

<option></option>

<option>Accettata</option>

<option>Respinta</option>

</select>

</td>

<td width="54%"/>

<td width="3%"/>

</tr>

</table>

<br/>

</xsl:if>

nota

Nota

Per quanto riguarda la possibilità di effettuare modifiche solo da parte dei responsabili dei richiedenti della RDA, è possibile procedere in due modalità:

· Inserimento dell'attributo changeable del campo direttamente nel modello HTML: questo è possibile solo se si conosce a priori chi è autorizzato a modificare l'informazione attinente al campo.
· Se invece l'informazione deve essere modificata solo all'interno di una certa attività del processo, è opportuno impostare la proprietà changeable a 0 nel modello (nessuno può cambiare il campo), per poi modificarla in run time nel processo.

Di seguito verrà implementata la seconda modalità esposta.

3. Inserire inoltre uno script da eseguire in run time dopo l'attivazione dell'attività 2:

Sub Activity2_AfterActivate

               ThisActivity.AddConfig "fieldattribute","autorizzazionerichiesta","changeable", 1

End Sub

4. Rendere infine obbligatoria la compilazione del campo Autorizzazione Richiesta mediante il seguente script, che deve essere eseguito dopo l'attivazione dell'attività 2:

         ThisActivity.AddConfig "fieldattribute","autorizzazionerichiesta","required", 1

5. Verifica: Inoltrare una nuova RdA accedendo al sistema mediante l'operatore Renzi. il campo Autorizzazione richiesta non viene visualizzato. Pubblicare il documento ed uscire.

6. Effettuare il Log out di sistema per l'utente Renzi e riconnettersi tramite l'account Gialli.

7. Eseguendo l'attività (Attività -> In carico) viene mostrato nella form il campo Autorizzazione richiesta che consente di scegliere i valori (Accettata/Respinta) che condizionano il flusso.

8. Verifica: il campo relativo all'autorizzazione della RdA è divenuto obbligatorio e compare in grassetto (classe labelhold per i campi obbligatori). Infatti, tentando di salvare la form senza selezionare il campo Autorizzazione, viene mostrato un messaggio di errore.

9. Impostare il valore Accettata al campo Autorizzazione, apporre la firma spuntando il check box e chiudere la form.

10. Riaccedere al sistema mediante l'operatore Renzi. Visualizzare il documento in carico tra le attività in carico.

nota

Nota

Si osservi che il campo Autorizzazione richiesta e la check box di Firma risultano compilati correttamente e non modificabili. L'attività che stiamo eseguendo è una generica attività di elaborazione su documento che non prevede alcuna condizione di completamento implicita (diversamente dalle attività di firma). Qualora non sia stata imposta alcuna condizione da script, come nel nostro caso, l'attività può essere portata a termine attraverso l'action Completa.

11. Completare l'attività (clic sul tasto Completa nella barra delle action). Verificare che la lista delle istanze attive sia vuota aprendo dal BPMTools.


Completamento del modello di RdA

Argomenti trattati - Passo 9

· Tabelle XML in un form
· Javascript nei modelli di documenti
· Funzioni custom lato client nei modelli di documenti
· Visibilità dei campi

Obiettivo

Elaborare un modello documentale conforme con le richieste relative alla RdA secondo quanto rilevato da una Analisi preliminare:

· Oggetto della RdA (obbligatorio);
· Giustificazione dell'esigenza (obbligatorio);
· Autorizzazione del Responsabile ed eventuale giustificazione della mancata approvazione;
· Autorizzazione del Responsabile Acquisti ed eventuale giustificazione della mancata approvazione;
· Autorizzazione del Responsabile di Funzione ed eventuale giustificazione della mancata approvazione;
· Dettaglio RdA (N righe, colonne: Codice Descrizione, U.M., Quantità, Prezzo Unitario, Importo; Eventuali file allegati).

Operazioni

1. Aggiungere, dopo il campo Oggetto nel modello del form RdA, un nuovo campo Motivazione fabbisogno inserendo nel modello HTML le seguenti righe di codice:

<table border="0" cellpadding="0" cellspacing="0" width="100%">

<tr>

<td width="1%"/>

<!-- LABEL OGGETTO -->

<td width="12%" valign="top">

<label owk:type="label" class="label" owk:requiredclass="labelbold"

            owk:fieldname="motivazionefabbisogno">Motivazione del fabbisogno

</label>

</td>

<!-- INPUT OGGETTO -->

<td width="84%">

<textarea owk:type="memobox" class="textbox"

              owk:fieldname="motivazionefabbisogno" owk:datafield="libero2"

            owk:datatype="text" owk:visible="1" owk:changeable="1"

            owk:secret="0" owk:required="1" rows="3"></textarea>

</td>

<td width="3%"/>

</tr>

</table>

2. Inserire una tabella Dettaglio RdA utilizzando il seguente codice HTML:

  <table border="0" cellpadding="0" cellspacing="0" width="100%">

<tr>

<td width="1%"/>

<td width="96%">

<table width="100%" border="1" id="tblrda" owk:type="table"

      owk:fieldname="dettagliorda" owk:datafield="libero37">

<thead>

<tr align="left" class="text">

<td colspan="7">Dettaglio RdA</td>

</tr>

     <tr>

<td width="10%" align="left" class="text">

<label owk:type="label" id="dettagliordaH1" owk:mode="normal">

Codice</label>

</td>

<td width="20%" align="left" class="text">

<label owk:type="label" id="dettagliordaH2" owk:mode="normal">

Descrizione</label>

</td>

<td width="10%" align="left" class="text">

<label owk:type="label" id="dettagliordaH3" owk:mode="normal">

U.M.</label>

</td>

     <td width="10%" align="left" class="text">

<label owk:type="label" id="dettagliordaH4" owk:mode="normal">

     Quantità</label>

</td>

<td width="10%" align="left" class="text">

<label owk:type="label" id="dettagliordaH5" owk:mode="normal">

     Prezzo unitario</label>

</td>

<td width="20%" align="left" class="text">

<label owk:type="label" id="dettagliordaH6" owk:mode="normal">

Importo</label>

</td>

<td width="20%" align="left" class="text">

     <label owk:type="label" id="dettagliordaH7" owk:mode="normal">

Importo IVA</label>

</td>

</tr>

</thead>

<tbody>

<tr width="100%">

<td class="bodytable" width="10%">

<input style="width:100%" class="textbox" owk:type="textbox"

     owk:datafield="col_1"></input></td>

<td class="bodytable" width="20%">

<input style="width:100%" class="textbox" owk:type="textbox"

     owk:datafield="col_2"></input>

</td>

<td class="bodytable" width="10%">

<input style="width:100%" class="textbox" owk:type="combobox"

     owk:datafield="col_3">

<option>mt</option>

<option>mq</option>

<option>kg</option>

</input>

</td>

<td class="bodytable" width="10%">

<input style="width:100%" class="textboxn" owk:fieldname="qta"

     owk:type="textbox" owk:datatype="integer" owk:datafield="col_4"

     owk:default="0"></input>

</td>

<td class="bodytable" width="10%">

<input style="width:100%" class="textboxn" owk:fieldname="ctot"

     owk:type="textbox" owk:datatype="currency" owk:datafield="col_5"

     owk:default="0" owk:mask="€ ;.;,;2"></input>

</td>

<td class="bodytable" width="20%">

<input style="width:100%" id="sommariga" class="textboxn" owk:type="textbox"

     owk:datatype="currency" owk:default="0" owk:mask="€ ;.;,;2"

     owk:formula="owk:qta*owk:ctot" owk:datafield="col_6"

     owk:fieldname="totriga"></input>

</td>

<td class="bodytable" width="20%">

<input style="width:100%" id="ivariga" class="textboxn" owk:type="textbox"

     owk:datatype="currency" owk:default="0" owk:mask="€ ;.;,;2"

     owk:formula="owk:totriga*$doc/owk:coeffiva div 100" owk:datafield="col_7"

     owk:fieldname="ivariga"></input>

</td>

</tr>

</tbody>

</table>

</td>

<td width="3%"/>

</tr>

   </table>

3. In fondo alla tabella collocare un campo (Importo RdA) che mostra l'importo complessivo della RdA:

   <table border="0" cellpadding="0" cellspacing="0" width="100%">

<tr>

<td width="1%"/>

<td width="60%"/>

<td width="12%">

<label owk:type="label" class="label" owk:requiredclass="labelbold"

     owk:fieldname="importorda">Importo RdA</label>

</td>

<td width="19%">

<input type="text" owk:type="textbox" class="textboxn" owk:locked="1"

      owk:uppercase="0" owk:datatype="currency" owk:fieldname="importorda"

      owk:datafield="libero28" owk:mask="€ ;.;,;2"

      owk:formula="sum($doc/owk:totriga) + sum($doc/owk:ivariga)"

      owk:visible="1">

</input>

</td>

<td width="8%"/>

</tr>

   </table>

4. Modificare i campi Ufficio di competenza e Responsabile, rendendoli invisibili. Essi vengono comunque lasciati nel modello in modo da gestire l'attribuzione delle competenze attinenti al documento:

  <table border="0" cellpadding="0" cellspacing="0" width="100%">

<tr>

<td width="1%"/>

<td width="12%">

<label owk:type="label" class="label" owk:requiredclass="labelbold"

     owk:lang_default="it" owk:fieldname="ufficiocompetenza">

Ufficio di competenza</label>

</td>

     <td width="84%">

<input type="text" class="textbox" owk:buttonclass="button"

     owk:locked="1" owk:type="office" id="ufficiocompetenza"

     owk:fieldname="ufficiocompetenza" owk:visible="0" owk:changeable="1"

     owk:secret="0" owk:required="1"/>

</td>

<td width="3%"/>

</tr>

  </table>

  <table border="0" cellpadding="0" cellspacing="0" width="100%">

<tr>

<td width="1%"/>

<td width="12%">

<label owk:type="label" class="label" owk:requiredclass="labelbold"

owk:lang_default="it" owk:fieldname="responsabile">Responsabile</label>

</td>

<td width="84%">

<input type="text" owk:type="user" class="textbox" owk:buttonclass="button" id="responsabile"                owk:fieldname="responsabile" owk:visible="0" owk:changeable="1" owk:secret="0" owk:required="1"        owk:officefieldname="ufficiocompetenza"/>

</td>

<td width="3%"/>

</tr>

  </table>

5. Nel blocco xsl:if, del codice, immediatamente sotto le righe che si riferiscono all'autorizzazione del Responsabile, inserire il campo atto a giustificare l'eventuale mancata autorizzazione della RdA:

<div id="motivo_na" style="display:none">

<table border="0" cellpadding="0" cellspacing="0" width="100%">

   <tr>

     <td width="1%"/>

     <!-- LABEL -->

     <td width="12%">

       <label owk:type="label" class="labelbold" owk:requiredclass="labelbold"

        owk:fieldname="motivonoaut">Motivo della non autorizzazione</label>

     </td>

     <!-- INPUT -->

     <td width="36%">

       <textarea id="motivonoaut" owk:fieldname="motivonoaut"

       owk:datafield="libero7" owk:type="memobox" class="textarea"

       owk:changeable="1" owk:locked="0" owk:uppercase="0" rows="2">

       </textarea>

     </td>

     <td width="54%"/>

     <td width="3%"/>

   </tr>

</table>

</div>

6. Nella sezione sottostante alla parte di codice che gestisce l'apposizione delle firme (di default in openwork®), inserire le seguenti righe:

<div owk:type="signcontainer" owk:signclass="sign" owk:labelclass="label"

owk:inputclass="textbox" owk:locked="0"/>

7. Il campo che giustifica la mancata autorizzazione deve essere invisibile a meno che la richiesta non sia stata respinta. É dunque necessario inserire la riga iniziale come segue:

<div id="motivo_na" style="display:none">

Chiudere opportunamente il tag </div> dopo la chiusura del tag </table> della tabella che rappresenta il campo Motivo della non autorizzazione.

Si scriva poi la seguente funzione che gestisce la visualizzazione del campo:

function f_redraw()

{

try{

var aut = document.getElementById("autorizzazionerichiesta");

var x=doc();

if ((aut.selectedIndex == "2") ||

(x.selectSingleNode("//owk:form/owk:document/owk:autorizzazionerichiesta").text =="Respinta"))

{

document.getElementById("motivo_na").style.display = '';}

else

{

  document.getElementById("motivo_na").style.display = 'none';

}

}

catch(er){}

}

Nella customonload la chiamata di tale funzione viene associata all'evento change sul campo autorizzazionerichiesta:

function customonload()

{

var x=doc();

try

{

if (x.selectSingleNode("//owk:context/owk:activity/owk:id").text == "20")

document.getElementById("wizardrow").style.display='';

}

catch(er){};

try

{

var autrcq = document.getElementById("autorizzazionerichiesta");

autrcq.onchange=function(){f_redraw();}

f_redraw();}

catch(er){};

}

Infine, per ottenere l'obbligatorietà del campo Motivo della non autorizzazione occorre ora agire sul lato client nella funzione customvalidation:

function customvalidation()

{

try{

if (document.getElementById("autorizzazionerichiesta").selectedIndex == "2")

     {

if (document.getElementById("motivonoaut").value == "")

{

msgbox ("Motivo della non autorizzazione della richiesta obbligatorio!",vbCritical,boxtit);

return false;

}

else

return true;

}

else

return true;

}

catch(er){};

return true;

}

8. Verifica: a seguito di tali modifiche, verificare come viene visualizzata la form in fase di inserimento di una nuova RdA, in fase di approvazione da parte del responsabile, a seguito della mancata autorizzazione (cioè quando il campo Autorizzazione assume come valore Respinta).

nota

Nota

A norma di quanto rilevato nell'Analisi, è necessario prevedere un ulteriore step di approvazione da parte del Responsabile dell'Ufficio Acquisti qualora la RdA sia stata accolta dal Responsabile dell'Ufficio emittente. Inoltre, è possibile che il documento di richiesta debba venire poi esaminato e vidimato da un altro Responsabile di funzione prima che la RdA diventi esecutiva. Nel seguito vengono descritte le operazioni necessarie per definire i campi attinenti a questi step d'approvazione.

9. Nel modello HTML di RdA - Richiesta d'acquisto, immediatamente sotto le righe di codice relative al campo Annotazioni, aggiungere quanto segue il codice di seguito riportato . Viene creata una tabella in cui la prima riga è riservata al Responsabile Acquisiti; la seconda prevede che l'operatore inserisca una specifica nei campi corrispondenti all'approvazione da parte di un Responsabile di funzione (ciò spiega la caratterizzazione di tipo user).

<xsl:if test="//owk:form/owk:document/owk:processi/owk:process/owk:id!='0'">

<table border="0" cellpadding="0" cellspacing="0" width="100%">

<td width="1%"/>

<td width="96%">

<table border="1" cellspacing="0" width="100%">

  <tr>

<td width="30%">

<label owk:type="label" class="labelbold" owk:mode="normal" id="y1">

Ulteriore funzione coinvolta</label>

</td>

<td width="10%">

<label owk:type="label" class="labelbold" owk:mode="normal" id="y2">

Decisione</label>

</td>

<td width="36%">

<label owk:type="label" class="labelbold" owk:mode="normal" id="y4">

Commento</label>

</td>

<td width="14%">

<label owk:type="label" class="label" owk:mode="normal" id="y5">

Data/Firma</label>

</td></tr><tr><td>

     <label owk:type="label" class="label" owk:requiredclass="labelbold"

     owk:mode="normal" id="yy6">Responsabile acquisti</label>

</td>

<td id="rsc1">

<select owk:type="combobox" class="combobox" owk:locked="0"

     owk:uppercase="0" owk:datatype="text" owk:mode="list"

     owk:buttonclass="button" owk:fieldname="decisione_acquisti"

     owk:datafield="libero11" id="decisione_acquisti" owk:changeable="0">

<option></option>

<option>Accettata</option>

<option>Respinta</option>

</select>

     </td>

<td>

<table width="100%" border="0" cellspacing="0" cellpadding="0">

<tr>

<td width="90%">

     <input type="text" owk:type="textbox" class="textbox" owk:locked="0"

     owk:uppercase="0" owk:datatype="text" owk:fieldname="commento_acquisti"

     owk:datafield="libero64" id="commento_acquisti" owk:changeable="0">

</input>

</td>

<td width="10%">

<a><img src="cimages/sign.gif" border="0" onclick="firmare(1)" style="cursor:hand">

</img></a></td></tr>

</table>

</td>

<td>

<input type="text" owk:type="textbox" class="textbox" owk:locked="0"

      owk:uppercase="0" owk:datatype="text" owk:fieldname="firma_1"

      owk:datafield="libero15" id="firma_1">

</input>

</td></tr><tr><td>

<input type="text" owk:type="user" class="textbox" owk:locked="0"

      owk:buttonclass="button" owk:fieldname="funzione_coinvolta"

      owk:datafield="libero43" id="funzione_coinvolta" owk:changeable="0">

</input>

</td>

<td id="rsc2">

<select owk:type="combobox" class="combobox" owk:locked="0"

      owk:uppercase="0" owk:datatype="text" owk:mode="list"

      owk:buttonclass="button" owk:fieldname="decisione_funzione"

      owk:datafield="libero12" id="decisione_funzione"

      owk:changeable="0">

<option></option>

<option>Accettata</option>

<option>Respinta</option>

</select>

</td>

<td>

<table width="100%" border="0" cellspacing="0" cellpadding="0">

<tr>

<td width="90%">

<input type="text" owk:type="textbox" class="textbox" owk:locked="0"

      owk:uppercase="0" owk:datatype="text" owk:fieldname="commento_funzione"

      owk:datafield="libero65" id="commento_funzione" owk:changeable="0">

</input>

</td>

<td width="10%">

<a>

<img src="cimages/sign.gif" border="0" onclick="firmare(2)" style="cursor:hand">

</img></a>

</td></tr></table>

</td><td>

<input type="text" owk:type="textbox" class="textbox" owk:locked="0"

      owk:uppercase="0" owk:datatype="text" owk:fieldname="firma_2"

      owk:datafield="libero16" id="firma_2">

</input>

</td>

</tr>

</table>

</td>

<td width="3%"/>

</table>

</xsl:if>

nota

Nota

Notiamo che i campi indicati nel codice come decisione_acquisti, commento_acquisti, funzione_coinvolta, decisione_funzione, commento_funzione hanno la proprietà changeable impostata a zero: ciò indica che, al principio, essi non sono modificabili, ma lo diventeranno durante il run time sull'attività di competenza.

L'implementazione della funzione di firma è realizzata tramite il seguente script:

function firmare(quale)

{

var idActivity;

var x = doc();

switch(quale)

{

case 1:

idActivity = "5"; //resp. acquisti

break;

case 2:

idActivity = "11"; //resp. designato

break;

}

if (x.selectSingleNode

("//owk:form/owk:context/owk:activity/owk:id").text!=idActivity)

{

alert("Non si è autorizzati a mettere questa firma!");

}

else

{

if (x.selectSingleNode

("//owk:form/owk:document/owk:firma_"+quale).text=="")

{

fr = x.selectSingleNode

("//owk:form/owk:context/owk:userprofile/owk:user/owk:name").text;

fr = todayFormatDate() + " " + fr;

x.selectSingleNode("//owk:form/owk:document/owk:firma_"+quale).text = fr;

document.getElementById("firma_"+quale).value = fr;

document.XMLDocument=x;

}

else

{

x.selectSingleNode("//owk:form/owk:document/owk:firma_"+quale).text = "";

document.getElementById("firma_"+quale).value = "";

document.XMLDocument=x;

}

}

}

Vanno sostituiti i valori corretti degli ID delle attività di firma (che ancora non è possibile conoscere finché non sarà stato ridefinito il processo) alle righe: idActivity = "X" ed idActivity = "Y".


Autocomposizione

Argomenti trattati - Passo 10

Modelli per autocomposizione MS Word.

Obiettivo

Generare automaticamente un documento di Word che contenga le informazioni contenute nel flusso documentale.

Operazioni

1. Creare un file vuoto di MS Word ("rda.dot").
2. Aprire dal BPMTools la gestione dei modelli di autocomposizione (Dati e Documenti - > Modelli per autocomposizione). Cliccare su Nuovo e indicare il file rda.dot. Selezionare la riga corrispondente e cliccare su Personalizza.
3. Sul pop-up apparso a sinistra, selezionare l'archivio RdA – Richiesta d'acquisto espandendo il menu ad elenco e mediante clic sul tasto destro del mouse scegliere l'opzione Inserisci per personalizzare il modello:

cst49 - ModelSelfComposition

4. Appare sul pop-up di destra il modello di documento da utilizzare (RdA – Richiesta d'acquisto). Cliccare su Personalizza.
5. Viene mostrato l'elenco dei campi contenuti nel modello di form che è possibile predisporre nel modello word attraverso il doppio click. E' possibile ad esempio costruire un modello word di questo tipo:

cst50 - WordModel

attenzione

Attenzione

Per importare correttamente la tabella XML presente nel documento, è necessario predisporne la struttura all'interno del modello di Word.

6. Accedendo al dettaglio del modello RdA – Richiesta d'acquisto l'uso, indicare il rispettivo Modello per autocomposizione rda.dot:

cst51 - AssociateModel

attenzione

Attenzione

Per garantire una situazione di perfetto allineamento tra un documento di openwork® e la sua versione doc autocomposta, è necessario considerare che i dati di campi di tipo Numero, Data etc. vengono esportati nel file di MS Word nel momento in cui viene attivata l'autocomposizione. Se il documento è in circolo nel corso dell'esecuzione di un'istanza di processo, esso potrebbe venir modificato successivamente: tali aggiornamenti, ovviamente, non troverebbero corrispondenza nel file autocomposto.

Pertanto è opportuno applicare la funzione di autocomposizione soltanto a documenti che hanno terminato il loro ciclo di vita.

7. Effettuando l'accesso dal browser, è possibile verificare che al modello di form specificato viene associato il corrispondente modello di autocomposizione.


Completamento del modello di processo

Argomenti trattati - Passo 11

· Invio di messaggi e-mail da processo
· Esame di un modello di processo completo

Obiettivo

Adeguare il diagramma di processo alla struttura reale del workflow.

Operazioni

1. Accedere al dettaglio il modello di processo tracciato nel Workflow Designer.
2. Adeguare il modello di processo alle richieste rilevate in fase di Analisi. Attraverso l'attività di notifica fare in modo che, nel caso in cui la richiesta venga respinta dal Responsabile dell'Ufficio emittente, venga recapitato un messaggio (di posta interna) al richiedente della RdA. Tale messaggio deve riportare in allegato documento di richiesta (con le modifiche riportate dopo la mancata approvazione). Queste opzioni si impostano mediante il menu contestuale dell'attività di notifica (cliccare con il tasto destro del mouse sull'attività)
3. Caratterizzare il messaggio con un Oggetto del tipo "Comunicazione RdA non accettata dal tuo responsabile" ed impostare Contenuto del messaggio ad esempio con il seguente testo: "La tua RdA non è stata accettata dal tuo diretto Responsabile: aprire il documento allegato per conoscere i dettagli".
4. Impostare il destinatario (cliccare sul tasto destro e quindi selezionare Destinatari da organigramma), selezionando Operatore che ha creato il documento di avvio processo.
5. Impostare la scelta del documento allegato al messaggio. Tasto destro del mouse sull'attività di notifica, selezionare la voce Selezione del documento da allegare al messaggio e indicare come documento quello che ha avviato il processo.
6. Modificare la descrizione dell'attività di firma indicando Approvazione Richiesta.
7. Modificare la descrizione dell'attività di elaborazione inserendo la dicitura Approvazione del Responsabile Acquisti. Modificarne contestualmente il partecipante, selezionando appunto il Responsabile Acquisti da organigramma
8. Utilizzando il menu contestuale (clic sul tasto destro del mouse) impostare l'attivazione dell'esecuzione del seguente script dopo l'attivazione dell'attività Approvazione del Responsabile Acquisti (Script eseguito dopo Attivazione).

Sub Activity5_AfterActivate

ThisActivity.AddConfig "fieldattribute","decisione_acquisti","changeable",1

ThisActivity.AddConfig "fieldattribute","decisione_acquisti","required",1

ThisActivity.AddConfig "fieldattribute","commento_acquisti","changeable",1

ThisActivity.AddConfig "fieldattribute","funzione_coinvolta","changeable",1

End Sub

nota

Nota

La modifica applicata fa sì che il Responsabile Acquisti possa modificare i campi di sua competenza durante l'esecuzione dell'attività. Essi risulterebbero infatti bloccati a norma di quanto specificato nel modello HTML, in cui è impostata la proprietà changeable = “0”.

attenzione

Attenzione

L'attività 5 è un'attività di firma di tipo custom, ovvero non implementata dal controllo di default di openwork®. Per tale motivo, occorre impostare tramite codice la condizione di completamento: essa corrisponde all'apposizione di firma da parte del Responsabile.

Function Activity5_ExitCondition

Activity5_ExitCondition = cstr(thisactivity.document.getfieldvalue("firma_1")) <> ""

End Function

9. Disegnare, un'altra attività di elaborazione da eseguire solo eventualmente: si tratta dell'approvazione da parte del Responsabile di funzione, che può essere richiesta dal Responsabile Acquisti. Si osservi che i link contrassegnati da un cerchio bianco risultano a priori disabilitati: essi devono essere attivati a seconda delle opzioni di ciascuna istanza di processo. Per disattivare i link, cliccare sul simbolo di giunzione e scegliere dal menu contestuale l'opzione Disabilita.

cst52 - LinkDisable

10. Completare logicamente gli attributi che caratterizzano l'attività (documento associato, partecipante etc.)

11. L'attivazione del link corretto in corso d'istanza verrà eseguita in base ai requisiti del processo dell'ulteriore step d'approvazione da parte del Responsabile di funzione. Tale attivazione viene gestita mediante il seguente script:

Sub Activity5_AfterCompletion

Dim objlnk

Dim objdoc

Dim idlink1

Dim idlink2

Set objlnk = openwork.newobject("link")

Set objdoc = thisprocess.startdocument

idlink1 = 8

idlink1 = 11

objlnk.processid = ThisActivity.processid

If clng(doc.getfieldvalue("funzione_coinvolta").id) <> 0 Then

' se il campo user è stato compilato attivo il link

objlnk.id = idlink1

objlnk.status = 0 ' i link attivi hanno status = 0

Else

objlnk.id = idlink2

objlnk.status = 0 ' i link attivi hanno status = 0

End If

objlnk.save

Set objlnk = nothing

Set objdoc = nothing

End Sub

attenzione

Attenzione

Da questo punto in avanti, le modifiche da apportare allo schema di processo non richiedono l'introduzione di ulteriori concetti. Si consiglia pertanto di importare il modello disponibile nel cd di openwork®.

nota

Nota

Relativamente al modello di processo, osserviamo i seguenti inserti:

· sono state inserite delle istruzioni operative attraverso pop up al fine di agevolare l'esecuzione di diverse attività;
· sono stati introdotti nodi di attivazione e disattivazione di link per illustrare una soluzione alternativa a quella mostrata nello script:ciò rende lo schema di processo più facilmente leggibile;
· è stato introdotto un nodo di revisione automatica del documento, il cui effetto è la creazione di una copia identica del documento originario (escluse eventuali firme embedded di openwork®) ma modificabile. La numerazione di tali documenti riporta l'indicazione Rev.
· è stata utilizzata la formula o funzione Operatori da definire nell'impostazione dei partecipanti dell'attività 11;
· è stata introdotta l'attività Trasferimento a sistema esterno. Si tratta di un'attività di automazione pura (ossia non subordinata all'intervento di un operatore): essa è interamente caratterizzata dallo script impostato per la condizione di completamento;
· si è dovuto cambiare il documento associato all'attività di firma (attività 2) con documento proveniente dall'attività precedente, in modo che il processo possa essere eseguito in maniera ciclica.
· è stato definito uno script, eseguito dopo l'attivazione del nodo d'inizio, che modifica la denominazione delle attività 2 e 5 in run time a seconda dell'informazione attinente al documento che avvia l'istanza processuale.

Per quanto riguarda il modello di documento HTML:

· è stata aggiunta in testa al documento una sezione relativa alle action;
· è stato inserito un blocco di codice racchiuso nella condizione

<xsl:if test="//owk:form/owk:document/owk:nrev!='0'">

che permette di valutare se il documento in elaborazione è una revisione di quello originale;

· all'interno nella condizione

<xsl:if test="//owk:context/owk:activity/owk:id='23'">

è stato previsto un blocco di codice che permette di richiedere una riconferma eventuale dell'attività 23;

· è stato aggiunto codice javascript nella funzione customonload per far apparire il tasto di autocomposizione (wizardrow) solo nel momento opportuno (attività 20).
· nella funzione javascript firmare sono stati sostituiti X ed Y con i valori corretti.

nota

Nota

Quando si imposta un'attività di automazione pura, è consigliabile che l'esito atteso sia impostato come condizione di completamento per l'attività stessa. La condizione di completamento è infatti la conditio sine qua non per l'avanzamento del workflow: utilizzando questo accorgimento, lo script contenuto nell'attività viene rieseguito ad ogni ciclo del Workflow Manager finché essa non va a buon fine.


Personalizzazione desktop

Argomenti trattati - Passo 12

· Personalizzazione dell'interfaccia
· Personalizzazione dei desktop e menu

Obiettivo

Implementare alcune migliorie dell'interfaccia che sovvengano ai seguenti problemi:

· Sia il desktop che il menu sono poco adatti ai requisiti dell'Analisi Funzionale.
· Sarebbe auspicabile disporre direttamente nel menu o sul desktop di una funzione per la creazione di una nuova RdA, senza dover ricorrere allo strumento di selezione del tipo d'archivio associato al documento.
· La barra delle action che appare in corrispondenza dell'apertura di un form sembra alquanto disordinata; le diciture corrispondenti ai comandi, sia prima che dopo la pubblicazione, non sono di immediata interpretazione.
· L'elenco delle attività include spesso informazioni non utili.

Operazioni

attenzione

Attenzione

La componente per la modifica del desktop non è attualmente disponibile. Le modifiche possono essere effettuate intervenendo direttamente sui file di struttura.

nota

Nota

La struttura grafica del desktop è determinata principalmente in due file collocati nelle cartella webserver/desktop/default: il file workarea.xml imposta il layout del desktop, mentre il file workarea.css indica le caratteristiche grafiche degli elementi.

1. Introdurre sul desktop un link per la creazione diretta di RdA. Aprire il file le workarea.xml e modificarlo come segue:

<?xml version="1.0" encoding="UTF-8"?>

<workarea xmlns="http://www.openwork.info/schema" userid="" background="sfondo.jpg">

<folder left="0" top="47" width="20%" height="90%" title="Funzioni">

<link left="10" top="20" class="link" description="Nuova richiesta di acquisto" function="2000" picture="frecciabianca_dx.gif"/>

</folder>

</workarea>

2. Sostituire quanto segue al contenuto del file workarea.css:

.foldertitle{

font-family: arial,verdana,helvetica,sans-serif;

font-size:8pt;

font-weight: bold;

color: white;

background-color: #153b63

}

.link{

font-family: arial;

font-size:8pt;

color: #FFFFFF;

}

.folder{

border: 2px solid #00468E;

margin: 10px;

padding: 0;

background-color: #153b63

}

3. Inserire il file frecciabianca_dx.gif (presente nel cd di openwork®) nella cartella desktop/default/images. In questa folder sono collocati i file che definiscono gli oggetti grafici del desktop.

nota

Nota

A questo punto è necessario rendere attivo il link. Se si osservano le righe di codice introdotte nel file XML, si nota la specifica function="2000": essa richiama una funzione javascript dichiarata nel file webserver/clibraries/menu.js. É proprio questa funzione a determinare il tipo di azione corrispondente al link, ovvero l'apertura del modello di documento in esame; nel seguito, vengono descritti i parametri che descrivono la funzione.

nota

Nota

Tutti i file per la definizione di funzioni custom sono collocati all'interno della cartella webserver/clibraries.

4. Inserire nel file menu.js della cartella clibraries inserendo le seguenti righe:

case 2000: // Nuova RdA

var wins="status=yes,toolbar=no,menubar=no,location=no,scrollbars=no,resizable=yes";

var newURI="document.aspx?ActionType=4&Style=3&ModelID=12";

var winname="NEWDOC" + rnd();

window.open(newURI,winname,wins);

break;

nota

Nota

La specifica modelID=12 si riferisce al modello di RdA precedentemente costituito, la cui ID, attribuita automaticamente dal sistema, è uguale a 12. ActionType=4 indica invece la creazione del documento.

cst53 - idmodel

5. In questo modo il link viene attivato e accedendo dal browser è possibile creare direttamente un modello di RdA dal desktop.
6. Per modificare invece il menù, accedere dal BPMTools il Menu Editor (Sistema -> Menu Editor).
7. Il menu corrente visibile dal browser è rappresentato mediante una struttura ad albero sulla colonna sinistra. Trascinare in drag&drop una nuova voce (es. Nuovo documento) posizionandola nell'unità gerarchica Nuovo.
8. Indicare i parametri della voce di menu: rinominare la voce creata, chiamandola RdA – Richiesta d'Acquisto, ed associarle la funzione di apertura del modello attinente, che è stata definita in precedenza (ID=2000).

9. Mediante i pulsanti di posizionamento, collocare la voce inserita nella posizione desiderata all'interno del menu.

10. Salvare e pubblicare. Accedendo dall'interfaccia utente (es. Renzi) nel menù Nuovo verrà visualizzata la nuova voce.

11. Per reimpostare le etichette delle action nella form è necessario aprire il modello HTML di RdA - Richiesta d'Acquisto

12. La prima parte del codice HTML definisce la sezione delle action che compariranno nella form in funzione del suo ciclo di vita in un'istanza di processo:

<owk:actions xmlns:owk="http://www.openwork.info/schema">

<owk:action enabled="1" type="base" lang_it="Avvia gestione RdA" id="publish"/>

<owk:action enabled="1" type="empty" length="10" id=""/>

<owk:action enabled="0" type="base" lang_it="Fascicola" id="insertinfolder"/>

...

</owk:actions>

nota

Nota

Osserviamo che è possibile cambiare la descrizione delle etichette attraverso l'attributo lang_it. In questo caso è stata modificata la descrizione della action che consente di pubblicare la form.

nota

Nota

openwork® consente anche l'introduzione di pulsanti di action custom. Nella sezione </owk:actions> del documento attinente è sufficiente inserire una riga del tipo

<owk:action enabled="1" type="custom" lang_it="Nuova_funzione"

id="Funzione_custom"/> dove:

· Custom : rappresenta l'ID assegnato alla funzione
· Nuova_funzione:Etichetta della funzione
· Nuova_custome:Attributo che indica una funzione personalizzata

Lo script invocato dalla funzione definite deve essere dichiarato nel file

webserver/clibraries/common.js, dove deve essere specificata la funzione

customcommand(“Funzione_custom”).

Infine, l'cona da associarsi alla nuova action deve essere inserita in webserver/actions/cimages e rinominata con lo stesso ID (Funzione_custom). Essa apparirà accanto all'etichetta Nuova_funzione nella form.


Le sostituzioni

Scopo delle sostituzioni è permettere all'utente Y di poter consultare l'agenda delle attività dell'utente X, cioè di sostituire integralmente un utente nello svolgimento delle sue mansioni nell'ambito di openwork®; il sostituto è in grado di:

· vedere le attività non prenotate di X e prenotarle;
· vedere le attività di X in esecuzione e eseguirle/completarle (in questo caso il sistema effettua un trasferimento di attività da X ad Y prima di far eseguire/completare la stessa da Y).

E' possibile (ed è consigliato) definire un intervallo temporale entro il quale sono attive o possono essere attivate le sostituzioni .

La data di fine range può essere omessa per indicare che una determinata sostituzione, una volta attivata lo è a tempo indeterminato.

La sostituzione non può essere attivata al di fuori dell'intervallo prestabilito.

Sono previste due tipi di sostituzioni:

1. sostituzione di tipo push;
2. sostituzione di tipo pull.

Per le sostituzioni di tipo push se l'utente X nomina suo sostituto l'utente Y questi sostituisce immediatamente il primo utente.

Per le sostituzioni di tipo pull l'utente X nomina l'utente Y suo sostituto, ma la sostituzione rimane inattiva, per cui Y non può ancora vedere le attività presenti nell'agenda di X sino ad attivazione della sostituzione. Questo può essere utile in caso di improvvisa assenza di un utente che ha in agenda attività improcrastinabili: il sostituto può operare al posto del partecipante originale solo in caso di necessità.

Nel momento in cui il sostituto (Y nel nostro esempio) esegue la sostituzione allora questa diventa attiva ed Y può essere sostituto di X a tutti gli effetti.

Per la gestione delle sostituzioni le informazioni vengono memorizzate nella tabella Sostituzioni. Al momento non esiste un modello ad oggetti per gestire le sostituzioni: è necessario scrivere direttamente nella tabella del database.

Descriviamo, adesso, i campi della tabella:

Nome campo | Tipo campo | Descrizione
ID | Numerico | Identificativo della riga, viene calcolato automaticamente dal sistema
IDTitolare | Numerico | Identificativo del titolare delle attività
IDSostituto | Numerico | Identificativo del sostituto
Dal | Data/ora | Inizio dell' intervallo temporale di validità della sostituzione
Al | Data/ora | Fine dell' intervallo temporale di validità della sostituzione; se omesso l' intervallo non ha fine
Attiva | Numerico | Se diversa da zero la sostituzione è attiva
SostPush | Numerico | Se diversa da zero la sostituzione è di tipo push

È possibile richiedere al server un elenco dei sostituti tramite la pagina list.aspx con gli opportuni parametri listtype e listsubtype.

I meccanismi descritti possono essere per esempio utilizzati per l'implementazione di un processo di gestione delle sostituzioni come quello di seguito rappresentato.

SB01 - SostitutionProcess

Il processo viene avviato dalla pubblicazione di una opportuna form.

Lo script eseguito al completamento dell'attività "Popola tabella delle sostituzioni" aggiorna, inserisce o elimina record dalla tabella delle sostituzioni in funzione delle scelte effettuate nel documento che avvia il processo.

L'opzione sulla form (assegna o esegui sostituzioni) permette di gestire le sostituzioni dell'utente che sta compilando la form (assegna sostituzioni) o le sostituzioni che gli sono state assegnate (esegui sostituzioni):

· opzione assegna sostituzioni: in questo caso è possibile sia stabilire l'intervallo in cui si possono attivare le sostituzioni sia selezionare nella casella combinata (combobox) una fra le seguenti voci di cui si riportano il valore dei campi impostati e l'azione sulla tabella Sostituzioni:

Opzione | Attiva | SostPush | Operazione in tabella
Abilita sostituto | 0 | 0 | INSERT
Designa sostituto | 1 | 1 | INSERT
Revoca sostituzione | -- | -- | DELETE
Termina sostituzione | 0 | x | UPDATE

È quindi evidente che la creazione di una sostituzione può essere attivata immediatamente (opzione "Designa sostituto") oppure essere differita (opzione "Abilita sostituto"): in quest' ultimo caso il sostituto dovrà attivare la sostituzione. Inoltre c'è differenza fra l' opzione "Revoca sostituzione" "Termina sostituzione": in tal caso è possibile riattivare la sostituzione una seconda volta, sempre che ci si trovi nell' intervallo temporale specificato.

Elem06 - sostituzioni

· esegui sostituzioni: in questo caso si hanno a disposizione soltanto le seguenti possibilità:

Opzione | Attiva | SostPush | Operazione in tabella
Avvia sostituzione | 1 | x | UPDATE
Termina sostituzione | 0 | X | UPDATE

Il sostituto, dunque, può solo attivare una sostituzione o terminane una già attiva.

Elem07 - sostituzioni

Il listbutton contrassegnato con la label Sostituisci permette di selezionare la sostituzione oggetto dell' operazione. L'elenco aperto dal listbutton è contestuale alle opzioni prescelte.

La particolarità di utilizzare un processo sta nel fatto che la gestione delle sostituzioni può essere adattata alle diverse esigenze organizzative secondo il paradigma di openwork® (es. se la sostituzione deve essere autorizzata si può inserire un' attività di firma prima di rendere effettive le modifiche).

Di seguito lo script che viene eseguito dall' attività "Popola tabella delle sostituzioni":

Function activity2_ExitCondition

  Dim SQLcmd

  Dim id

  Dim TipoSost

  Dim doc

'valorizza la variabile doc al documento che ha avviato il processo

Set doc = thisprocess.startdocument

'valorizza la variabile TipoSost al tipo di sostituzione

TipoSost = cint(doc.GetFieldValue("tiposostituzione"))

'selezione del tipo di sostituzione

          Select Case TipoSost

Case 0,1

'operazioni di INSERT: TipoSost=0 Abilita sostituto

'TipoSost=1 Designa sostituto

Set sost = doc.GetFieldValue("sostituto")

'calcola l'ID del nuovo record

id = Functions.userfunction("LOOKUP","MAX(id)","sostituzioni") + 1

lafine = doc.GetFieldValue("al")

'la variabile SQLcmd contiene la query per inserire il nuovo record nella tabella

SQLcmd = "INSERT INTO Sostituzioni (ID, IDTitolare, IDSostituto, Dal, "

If lafine <> "" Then

SQLcmd = SQLcmd & "Al, "

                   End If

                  SQLcmd = SQLcmd & "Attiva, SostPush)"

                  SQLcmd = SQLcmd & " VALUES (" & id & "," & doc.Author(True) & "," & sost.id_& ",'"

& doc.GetFieldValue("dal") & "',"

If lafine <> "" Then

SQLcmd = SQLcmd & "'" & doc.GetFieldValue("al") & "', "

End If

If TipoSost = 0 Then

SQLcmd = SQLcmd & "0, 0)"  'Attiva=0 SostPush=0

                   Else

SQLcmd = SQLcmd & "1, 1)"  'Attiva=1 SostPush=1

                   End If

      Case 2,3,5

       'operazioni di INSERT: TipoSost=2 Avvia sostituzione

       'TipoSost=3 Termina sostituzione

       'TipoSost=5 Termina sostituzione

       id = doc.getFieldValue("idsost")

             SQLcmd = "UPDATE Sostituzioni Set attiva="

             If TipoSost = 2 Then

                     SQLcmd = SQLcmd & "1"

        Else

SQLcmd = SQLcmd & "0"

             End If

               SQLcmd = SQLcmd & " where id = " & id

      Case 4

               'operazione di DELETE

                ID = doc.getFieldValue("idsost")

                SQLcmd = "Delete FROM Sostituzioni WHERE id = " & ID

       End Select

       Functions.userfunction "EXQUERY", SQLcmd

      'condizione di completamento

        activity2_ExitCondition = (Functions.errdescription = "" And err.number = 0)

       Set doc = Nothing

End Function

Al momento non è prevista la possibilità di sostituzione limitata ad alcune attività o a determinati processi: se un utente viene nominato sostituto di un altro il primo ha accesso a tutte le attività del secondo, senza possibilità di filtraggi.


Glossario

A - B - C

D - E - F

G - H - I - J

K - L - M - N

O - P - Q

R - S - T

U - V - W

X - Y - Z


A - B - C
· Advanced Job Engine - Power Component che permette di estendere le funzionalità base del openwork® Job Engine, racchiudendone tutti i vantaggi (asincronicità, indipendenza, parallelismo dei task) e aggiungendo la possibilità di creare, utilizzare, collegare componenti personalizzati.
· Attività - Rappresenta l' unità di base con cui viene descritto un processo.
· Autocomposizione - Funzionalità di gestione documentale che consente di ottenere in allegato ad una form, un file Microsoft® Word (.doc) compilato in base ad un template definito (Modello di autocomposizione) e ai metadati contenuti nella form.
· Autorizzazione - Impostazione che consente ad un elemento dell' organizzazione di eseguire specifiche operazioni.
· Authorization Manager - Utility accessibile attraverso BPM Tools con il quale è possibile gestire e modificare le autorizzazioni.
· Business Flow Designer - Utility accessibile attraverso BPM Tools con cui è possibile definire la sequenza logica e temporale di attività, definire i modelli di form associati all'attività, i partecipanti, etc. Questo strumento integra un ambiente di programmazione in linguaggio di scripting con il quale è possibile far eseguire, dal motore di workflow (Business Flow Manager), codice custom (lato server) al verificarsi di determinati eventi (avvio, esecuzione o completamento di una attività, ecc.) o condizionare il completamento di un' attività al verificarsi di determinate condizioni.
· Business Flow Manager - Componente dell' openwork® Manager Services che rappresenta il workflow engine, ossia il motore che assegna le attività, esegue attività automatiche, effettua verifiche temporali, etc.
· Classification Manager - Utility accessibile attraverso il BPM Tools per la gestione del piano di classificazione, ossia per la gestione dei modelli di form e dei modelli di processo necessari all' organizzazione.
· Controlli - Insieme degli elementi HTML gestiti da openwork® che consentono di creare un modello di form attraverso il Form Designer.


D - E - F
· Dati & Documenti - Costituiscono l'insieme delle informazioni strutturate (metadati) e/o destrutturate (file o documenti) che possono essere gestite.
· Documento interno - Documenti che permangono nell' organizzazione e che seguono proprie serie numeriche.
· Elenco - Una o più pagine, contenenti una proiezione di informazioni provenienti da viste e tabelle sul database. In particolare si definisce elenco la visualizzazione di dati interni e/o esterni all' applicazione openwork®. Se la definizione della vista comprende documenti interni e/o esterni all' applicazione, allora chiamiamo ricerca tale elenco .
· Elemento dell' organizzazione - operatore, ruolo, ufficio, o gruppo.
· Fascicolo - Rappresentazione documentale di un raggruppamento logico di form.
· Form Editor - Utility accessibile attraverso il BPM Tools con il quale è possibile disegnare modelli di form per la rappresentazione dei dati utilizzando, oltre ad oggetti standard web (controlli standard HTML), anche una collezione completa di controlli openwork® che permettono di creare facilmente interfacce evolute per la gestione dei dati nell'ambito dei processi di un' organizzazione.
· Formula - Rappresenta una concatenazione di stringhe separate da un punto e virgola, indispensabili per identificare chi può eseguire un' attività, chi può visualizzare un' istanza di form, a chi è indirizzata un' istanza di form, etc. Le formule processate all'occorrenza da specifiche funzioni restituiscono elenchi di operatori (formule di organigramma) o elenchi di anagrafica (formule di anagrafica).
· Formula assoluta - Particolare tipologia di formula che rappresenta la concatenazione di stringhe di un operatore che fa riferimento a un preciso elemento dell' organizzazione, per esempio un gruppo, un ruolo, etc.
· Formula relativa - Particolare tipologia di formula che rappresenta la concatenazione di stringhe di un operatore che fa riferimento al contesto in cui viene risolta un' attività, un' istanza di processo, una particolare istanza di form, etc.


G - H - I - J
· Group Manager - Ulilty accessibile attraverso il BPM Tools per la gestione dei gruppi trasversali all' organizzazione.
· Gruppo - Insieme di operatori selezionati in base a criteri di tipo organizzativo.
· Informazioni - cfr. Dati & Documenti.
· Indexing Manager - Componente dell' openwork® Manager Services che consente di richiamare il motore di indicizzazione sui documenti presenti.
· Istanza di form (o form) - E' la rappresentazione del modello di form poiché eredita tutte le caratteristiche definite in fase di disegno del modello. L' istanza di form è rappresentata da una struttura XML sulla quale è possibile applicare diverse trasformazioni XSL (sia client – side sia server – side) in modo da ottenerne diverse rappresentazioni.
· Istanza di processo - Rappresenta l' oggetto derivato dal modello di processo, creato a run-time. Pur ereditando tutte le caratteristiche e le proprietà del modello di processo, ogni singola istanza è oggetto di elaborazione autonoma e separata, in modo indipendente dal modello. Essa è inoltre modificabile a run-time senza che ciò impatti in alcun modo sul modello di processo di origine.


K - L - M - N
· Link - Descrittore della transizione, definisce come avviene il passaggio da un'attività ad un'altra.
· Mail Manager - Componente dell' openwork® Manager Services per la gestione della posta elettronica secondo gli standard SMTP e POP3.
· Menu Desktop & List Editor - Utility accessibile attraverso il BPM Tools per la personalizzazione dei menù, del desktop e degli elenchi. Attualmente è disponibile solo l' utility per la modifica dei menù.
· Metadati - Insieme di dati che consentono di individuare e identificare un modello di form, fornendo informazioni circa le sue caratteristiche.
· Modello Business Console - File con estensione .qvw creato con l' editor di QlikViewTM e memorizzato in una sottocartella del Web Server di openwork®: esso è quindi condiviso da tutti gli utenti autorizzati alla relativa analisi Business Console.
· Modello di autocomposizione (Modello .dot) - Rappresenta un template predefinito che consente di compilare un file di Microsoft® Word (.doc) a partire da metadati esistenti.
· Modello di documento - cfr. Modello di form
· Modello di form - Definisce quali sono i metadati, le regole con cui essi vengono inseriti, modificati e visualizzati e le caratteristiche di base su cui si poggeranno le istanze di form.
· Modello di processo - Rappresentazione grafica e concettuale di un processo di business; in esso sono mappati attività, partecipanti e regole tali da rappresentare in modo corretto e coerente l'iter procedurale dell'organizzazione. Presentando parallelismi con il concetto di classe, è assimilabile al concetto di classe di processo e la sua definizione avviene in design-time. Sul modello si poggiano le istanze di processo.


O - P - Q
· openwork® Authentication - Professional Component che consente di gestione di single-sign-on per l' autenticazione degli utenti (es. Active Directory, LDAP o altro).
· openwork® BarCode - Power Component per generare e stampare di codici a barre al fine di facilitare l' acquisizione massiva di documenti cartacei.
· openwork® business components - Componente architetturale che espone interfacce di tipo DCOM (Distributed Component Object Model) e Web Services.
· openwork® Business Console - Power Component che consente il monitoraggio in tempo reale e l'analisi dei dati relativi al contesto organizzativo rappresentato e gestito con openwork®.
· openwork® Business Process Management Tools (BPM Tools) - Rappresenta lo strumento per costruire applicazioni (fruibili in modalità web based dagli operatori) secondo i paradigmi della tecnologia openwork®. E' composto dai seguenti moduli: Organization Manager, Form Editor, Business Flow Designer, Authorization Manager, Menu Desktop & List Editor, Group Manager, Classification Manager.
· openwork® Digital Sign - Power Component che consente di gestire la funzionalità di firma digitale integrata per apporre una firma o una marcatura temporale su un file, nel rispetto delle norme CNIPA.
· openwork® Document Management Connector - Professional Component che offre strumenti per l' integrazione con altri sistemi documentali, data l'esigenza di operare anche su repository documentali esterni alla suite.
· openwork® Document Store - Power Component che consente di gestire il processo di conservazione sostitutiva di documenti nel pieno rispetto della normativa italiana.
· openwork® Export - Professional Component che consente di esportare elenchi e documenti in PDF, Word, Excel, o in qualsiasi formato si desideri.
· openwork® FullText - Professional Component che consente di effettuare ricerche testuali oltre che su tutti i campi presenti in una istanza di form, anche all'interno dei file, ad esso, allegati.
· openwork® Job Engine - Servizio che agevola l' integrazione di openwork® con qualsiasi tipologia di architettura esterna, soprattutto per quanto riguarda l' esecuzione di operazioni batch, anche di lunga durata, in cui l' esecuzione della richiesta e della risposta avviene in maniera asincrona.
· openwork® Manager Services - Servizio di Microsoft Windows 2000/XP/2003 il cui compito principale è quello di eseguire i processi attivi sulla piattaforma, monitorando e risolvendo situazioni anomale che possono crearsi nel flusso di dati e attività. Implementa le funzionalità di Business Flow Manager, Mail Manger, Print Manger, Indexing Manager.
· openwork® OCR - Power Component per la trasformazione di file grafico in un file editabile in formato WORD, RTF, XML o file di testo puro.
· openwork® PDF converter - Professional Component in grado di convertire immagini, documenti office o pagine web in formato PDF (Portable Document Format).
· openwork® Power Components - Componenti aggiuntive che fanno uso di tecnologie di terze parti integrate. Sono inclusi i seguenti moduli: openwork® Digital Sign, openwork® Document Store, openwork® BarCode, openwork® OCR, openwork® Business Console, Advanced Job Engine
· openwork® Professional Components - Componenti aggiuntive sviluppate interamente nei laboratori openwork®. Sono inclusi i seguenti moduli: openwork® Authentication, openwork® Document Management Connector, openwork® Export, openwork® FullText, openwork® PDF converter.
· Operatore - Persona (o risorsa) interna o esterna all' organizzazione aziendale, alla quale possono essere associati uno o più ruoli.
· Operatore di anagrafica - Identifica un nuovo operatore inserito nell' organizzazione. Quando viene inserito un nuovo operatore viene creata direttamente la sua scheda di anagrafica, ma tale operatore non è ancora in grado di compiere delle azioni nel sistema fino a quando non viene inserito nell' organigramma.
· Operatore di organigramma - Operatore definito in anagrafica può essere associato a uno o più ruoli all' interno dell' organigramma. Ogni volta che un operatore viene associato a un ruolo, viene creato un operatore di organigramma, che è contraddistinto da un proprio identificativo, consentendo alla persona di effettuare il login nel sistema ed eseguire le attività previste per il ruolo.
· Organigramma - Insieme delle relazioni gerarchiche tra i vari elementi dell' organizzazione.
· Organization Manager - Utility accessibile attraverso il BPM Tools, atto alla creazione e alla gestione dell'organigramma aziendale, in particolare dell' organigramma funzionale relativo alla gestione dei processi che caratterizzano il flusso operativo e documentale.
· Organizzazione - Insieme di unità organizzative, ruolo/i e operatori e relazioni che fra essi intercorrono e che concorrono alla gestione delle informazioni e all'avanzamento dei processi in un organizzazione. In generale essa contempla sia relazioni di natura gerarchica (Organigramma) sia di natura trasversale/orizzontale (Gruppi) anche combinate in forma di matrici organizzative.
· Partecipante - Elemento dell' organizzazione che può svolgere un' attività determinando l' avanzamento del flusso di processo.
· Piano di classificazione - Strumento che consente l' ordinamento e l' organizzazione funzionale dei modelli di form, atto a favorire la ricerca e il reperimento degli stessi, consentendone l' indicizzazione.
· Print Manager - Componente dell' openwork® Manager Services per la gestione della stampa con lo scopo di alleggerire i client che non hanno bisogno di software per la gestione dei dispositivi di stampa, consentire la stampa di documenti da postazioni remote e soprattutto centralizzare la gestione dei documenti da stampare eliminando gli errori (documenti sbagliati, versioni sbagliate, etc).
· Processo - Rappresenta una serie di una o più procedure o attività collegate che collettivamente realizzano un processo di business chiaramente identificabile, entro il contesto di una struttura organizzativa che definisce i ruoli funzionali e le relazioni.
· Processo destrutturato - Sono legati prevalentemente alla capacità d' intervento dei singoli operatori che collaborano all' esecuzione del processo eseguendo le azioni appropriate per svolgere le proprie attività.
· Processo strutturato - Si caratterizzano per un' elevata strutturazione, sono ben definiti, ripetitivi e guidati da schemi prefissati. Tutti gli elementi necessari alla realizzazione del processo sono forniti dall' operatore in forma automatizzata. Il flusso è paragonabile ad una catena di montaggio.
· Protocollo in entrata - Documenti che entrano nell' organizzazione.
· Protocollo in uscita - Documenti che escono dall' organizzazione.
· Protocollo interno - Documenti che, pur permanendo nell' organizzazione, richiedono la registrazione del protocollo generale.


R - S - T
· Ricerca - Visualizzazione di un elenco di dati e documenti presenti nel sistema basato su criteri personalizzati.
· Ruolo - Contestualizzazione di una tipologia di ruolo nell'ambito dell'unità organizzativa (e del ramo organizzativo relativo) cui viene associata (Es. un Tipo ruolo “Direttore” collocato all'interno dell' unità organizzativa “Area Finanza” definisce il ruolo "Direttore Area Finanza"). Un operatore non può accedere alla piattaforma se non viene associato ad almeno un ruolo nell' organigramma. Ogni operatore può avere anche più ruoli.
· Tipo Ruolo (o Tipologia Ruolo) - Tipologia di ruolo al quale si fa solitamente corrispondere una definita classe di responsabilità (Direttore, Manager, Operatore, ecc.), in generale senza riferimenti a specifiche aree dell'organizzazione.


U - V - W
· Ufficio - cfr. Unità organizzativa.
· Unità organizzativa - Entità elementare dell' organigramma utilizzata per descrivere la struttura dell'organizzazione aziendale (Es. Area, Ufficio, Divisione, Reparto, ecc.).
· Web Services - Espongono la logica del framework openwork® secondo lo standard WSDL (Web Services Description Language) , garantendone la ricusabilità da parte di qualunque applicativo o ambiente di sviluppo.


X - Y - Z

Al momento non è prevista alcuna voce.


Note di rilascio della versione 6.1.

Nella seguente sezione è possibile consultare le informazioni relative alla versione openwork® 6.1.

In particolare è possibile consultare le Principali novità e i Miglioramenti che la versione mette a disposizione; inoltre sono presenti altre sezioni che riportano informazioni relative ai bug noti e ai bug risolti rispetto alla versione precedente.


Principali novità

Applicazione web

· E’ ora possibile definire agende delle attività personalizzate.
· Al fine di poter entrare velocemente in modalità ricerca su un elenco, è possibile aprire lo stesso senza richiedere i record risultato dell’interrogazione. In tal modo l’elenco, non riportando a video nessun risultato, è subito disponibile per ricerche semplici o ricerche avanzate abbattendo così i tempi legati al caricamento dei dati (cfr. Parametri di apertura).
· Abilitando il modulo di ricerca full-text, è possibile nelle ricerche semplici utilizzare la funzionalità di ricerca “Parole esatte”. Attraverso questa funzionalità, openwork® cerca e restituisce i documenti che contengono nei campi soggetti a ricerca le parole esatte inserite nel campo di ricerca. Ad esempio se nel campo di ricerca viene inserita la parola "Poli" il risultato della ricerca riporterà tutti i documenti che contengono la parola esatta "Poli" e non i documenti che contengono la parola "Politecnico" come accade per le ricerche effettuate con le altre opzioni di ricerca (“Tutte le parole”, “Almeno una parola”, “Frase intera”).

Acquisizione immagini

· E’ ora possibile specificare, tramite opportuno file di configurazione, le impostazioni che la pagina di acquisizione immagini deve assumere (ad esempio DPI e profondità della scansione) durante l’acquisizione degli allegati di openwork®, oltre che dei file esterni.


Miglioramenti

Applicazione web

· In openwork® è possibile aumentare il livello di sicurezza dell’applicazione web grazie alla gestione di un ulteriore cookie di sicurezza legato alla sessione ASP.NET. La verifica aggiuntiva del cookie openwork® è di default disattivata e può essere attivata impostando una specifica chiave di applicazione così come riportato nel manuale prodotto (cfr. Sessione sicura).

Application server

· Per la lettura del modello HTML di form non è più necessario avere l'autorizzazione “Gestione del piano di classificazione”; questa modifica è stata introdotta per compatibilità con il nuovo Multiplatform Client, che utilizza tale modello per renderizzare le form.
· Il limite al numero di righe in un elenco (impostabile mediante l'opzione rowlimit nel file di configurazione openwork.xml) viene ora applicato a monte (nella interrogazione al database) e non a valle (nella costruzione della pagina di elenco).
· Per le configurazioni con database Oracle è presente una opzione per aggiungere l'hint ALL_ROWS alle query che contengono una condizione WHERE e una paginazione con ROWNUM; questo serve ad aggirare alcune inefficienze dell'ottimizzatore di Oracle che in presenza di una condizione con ROWNUM può scegliere un piano di esecuzione non ottimale (cfr. Installazione Database Oracle).


Bug risolti
· Bug: quando viene effettuato il riconoscimento Barcode su file contenenti tabelle, in alcuni casi le tabelle vengono riconosciute come una serie di "0" e questo viene interpretato come un codice valido. Dopo la correzione questo valore viene scartato.


Bug noti

Bug: Se si utilizza Internet Explorer 9 con una versione di IIS precedente alla 7 ci potrebbero essere problemi nella visualizzazione delle pagine dell'applicazione web di openwork®. Ciò è dovuto al cambiamento nella gestione dei mime types da parte del suddetto browser rispetto alle versioni precedenti.

Per risolvere il problema occorre modificare la lista dei mime types aggiuntivi presente nelle proprietà dell'applicazione web di openwork e precisamente:

· eliminare il tipo .* (application/octet-stream).
· aggiungere tutte le estensioni di file presenti nell'applicazione web che non siano già presenti nativamente nella gestione di IIS, escludendo i file che non devono essere forniti dal web server (ad esempio le librerie .dll). Nel dettaglio occorre aggiungere i seguenti mime types:

.it (text/plain)

.en (text/plain)

.qvw (application/octet-stream)

.fo (text/plain)

.inc (text/plain)


table

 Top
Proprietà | Descrizione
Style | Stile del documento.
ID | ID del documento.
ClientID | Nel caso in cui style = 6 questo parametro di tipo stringa indica il codice di anagrafica ed è alternativo all’ID.
ModelID | Modello di documento.
ReadOnly | Può assumere valori true o false, specifica se il documento è aperto in sola lettura, valore di default false.
Emergency | Specifica se il documento è stato registrato in emergenza.
Reserved | Specifica se il documento è riservato.
XMLDoc | Oggetto XML che contiene il documento.

Problema: IIS non rilevato

Sintomo:

Durante l'installazione, il setup non rileva la presenza di IIS anche se correttamente installato.

Soluzione:

La causa potrebbe essere la disattivazione del sito web di default, in quanto il setup rileva IIS basandosi su esso. In tal caso attivare il Default Web Site da Strumenti di Amministrazione -> Gestione Internet Information Services (IIS) e ritentare.