{"id":25841,"date":"2026-03-27T15:00:18","date_gmt":"2026-03-27T14:00:18","guid":{"rendered":"http:\/\/help.qualiware.it\/qw-help\/?p=25841"},"modified":"2026-03-27T21:53:36","modified_gmt":"2026-03-27T20:53:36","slug":"primitive-di-sistema","status":"publish","type":"post","link":"https:\/\/help.qualiware.it\/qw-help\/primitive-di-sistema\/","title":{"rendered":"Funzioni"},"content":{"rendered":"<p>La piattaforma mette a disposizione diverse procedure che consentono al programmatore di interagire con l&#8217;interfaccia di Qualiware e con il database.<\/p>\n<p>Le funzioni elencate sono <strong>utilizzabili in ogni script input all&#8217;interno di Qualiware &#8211; fatta eccezione per quelle che richiedono un parametro relativo al form di partenza<\/strong>, che si possono usare solamente all&#8217;interno degli <a href=\"https:\/\/help.qualiware.it\/qw-help\/fd-eventi\/\">eventi del Form Designer<\/a> o alle <a href=\"https:\/\/help.qualiware.it\/qw-help\/fd-schede-standard\/\">personalizzazioni delle pagine standard<\/a>.<\/p>\n<p>&nbsp;<\/p>\n<h2>Manipolazione dati nativi<\/h2>\n<p>Le seguenti funzioni sono semplici metodi per la manipolazione di tipi di dato nativi di Visual Basic e della libreria di Qualiware.<\/p>\n<h3 id=\"Array2String\"><span style=\"font-family: 'courier new', courier, monospace;\"><strong>Array2String<\/strong><\/span><\/h3>\n<p><code>Function Array2String(ByVal a As DBArray, Optional ByVal separator As String = \",\") As String<\/code><\/p>\n<p>Ritorna una stringa ottenuta concatenando gli elementi dell\u2019oggetto <span style=\"font-family: 'courier new', courier, monospace;\">DBArray<\/span> specificato nel primo parametro, e utilizzando il <code>separator<\/code> specificato.<\/p>\n<h3 id=\"String2Array\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">String2Array<\/span><\/strong><\/h3>\n<p><code>Function String2Array(ByVal s As String, Optional ByVal separator As String = \",\", Optional ByVal noRemoveEmpty As Boolean = True) As DBArray<\/code><\/p>\n<p>Ritorna un oggetto di tipo <span style=\"font-family: 'courier new', courier, monospace;\">DBArray<\/span> ottenuto dividendo la stringa&nbsp;<code>s<\/code>&nbsp;sulla base della stringa&nbsp;<code>separator<\/code>&nbsp;specificata. Se il terzo parametro \u00e8&nbsp;<code>True<\/code>, lascia eventuali elementi vuoti.<\/p>\n<h3 id=\"ctod\"><span style=\"font-family: 'courier new', courier, monospace;\"><strong>ctod<\/strong><\/span><\/h3>\n<p><code>Function ctod(ByVal dateValue As String As String) As Date<\/code><\/p>\n<p>Converte una stringa in una data, utilizzando il formato della lingua corrente.<\/p>\n<h3 id=\"dtoc\"><span style=\"font-family: 'courier new', courier, monospace;\"><strong>dtoc<\/strong><\/span><\/h3>\n<p><code>Function dtoc(ByVal dateValue As Date, Optional ByVal fmt As String = Nothing) As String<\/code><\/p>\n<p>Converte una data in una stringa, utilizzando il formato della lingua corrente o quello specificato nel secondo parametro, che \u00e8 opzionale.<\/p>\n<h3 id=\"Empty\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">Empty<\/span><\/strong><\/h3>\n<p><code>Function Empty(ByVal expression As Object) As Boolean<\/code><\/p>\n<p>Restituisce&nbsp;<code>True<\/code>&nbsp;se l\u2019espressione specificata (che pu\u00f2 essere anche una variabile) \u00e8 \u201cvuota\u201d. Il concetto di \u201cvuoto\u201d \u00e8 diverso a seconda del tipo, come dal seguente schema:<\/p>\n<ul>\n<li>Stringa:&nbsp;<code>\"\"<\/code>&nbsp;o&nbsp;<code>Nothing<\/code><\/li>\n<li>Numerico:&nbsp;<code>0<\/code><\/li>\n<li>Data: data vuota<\/li>\n<li>Booleano:&nbsp;<code>False<\/code><\/li>\n<li>Oggetto:&nbsp;<code>Nothing<\/code><\/li>\n<\/ul>\n<h3 id=\"max\"><span style=\"font-family: 'courier new', courier, monospace;\"><strong>max<\/strong><\/span><\/h3>\n<p><code>Function max(ByVal a As Object, ByVal b As Object) As Object<\/code><\/p>\n<p>Ritorna il maggiore tra due valori.<\/p>\n<h3 id=\"min\"><span style=\"font-family: 'courier new', courier, monospace;\"><strong>min<\/strong><\/span><\/h3>\n<p><code>Function min(ByVal a As Object, ByVal b As Object) As Object<\/code><\/p>\n<p>Ritorna il minore tra due valori.<\/p>\n<h3 id=\"replicate\"><span style=\"font-family: 'courier new', courier, monospace;\"><strong>replicate<\/strong><\/span><\/h3>\n<p><code>Function replicate(ByVal str As String, ByVal n As Integer) As String<\/code><\/p>\n<p>Ritorna una stringa ottenuta replicando la stringa <code>str<\/code>&nbsp;per un totale di&nbsp;<code>n<\/code>&nbsp;volte.<\/p>\n<h3 id=\"Str\"><span style=\"font-family: 'courier new', courier, monospace;\"><strong>Str<\/strong><\/span><\/h3>\n<p><code>Function Str(ByVal num As Object, Optional ByVal nChars As Integer = 15, Optional ByVal ndec As Integer = 0) As String<\/code><\/p>\n<p>Ritorna una stringa ottenuta trasformando&nbsp;<code>num<\/code>&nbsp;in una stringa di&nbsp;<code>nChars<\/code>&nbsp;caratteri con un numero di decimali pari a&nbsp;<code>ndec<\/code><\/p>\n<h3 id=\"Str\"><span style=\"font-family: 'courier new', courier, monospace;\"><strong>Val<\/strong><\/span><\/h3>\n<p><code>Function Val(ByVal s As String) As Double<\/code><\/p>\n<p>Converte la stringa <code>s<\/code> in un numero. N.B. il punto decimale deve sempre essere &#8220;.&#8221;<\/p>\n<h3 id=\"Str\"><span style=\"font-family: 'courier new', courier, monospace;\"><strong>ValDecimal<\/strong><\/span><\/h3>\n<p><code>Function ValDecimal(byval s As String, byval DecimalSeparator As string) As DoubleFunction Val(ByVal s As String) As Double<\/code><\/p>\n<p>Converte la stringa <code>s<\/code> in un numero. Nel parametro <code>DecimalSeparator<\/code> \u00e8 possibile specificare il separatore decimale da considerare.<\/p>\n<h2 id=\"gestione-ora\">Gestione ore<\/h2>\n<h3>Minuti2Stringa<\/h3>\n<p><code><\/code><code>Function Minuti2Stringa(ByVal minuti As Double, Optional ByVal pict As String = \"\") As String<\/code><\/p>\n<p>Converte un valore in minuti in una stringa nel formato specificato dal parametro pict, che pu\u00f2 essere &#8220;HH:MM&#8221; oppure &#8220;MM:HH:SS&#8221;. Se non specificato,&nbsp; il formato \u00e8 &#8220;HH:MM&#8221;.<\/p>\n<h3>Stringa2Minuti<\/h3>\n<p><code><\/code><code>Function Stringa2Minuti(ByVal s As String, Optional ByVal pict As String = \"\") As Double<\/code><\/p>\n<p>Converte in minuti un&#8217;orario indicato nella stringa &#8220;s&#8221; che ha il formato specificato dal parametro pict, che pu\u00f2 essere &#8220;HHMM&#8221;, &#8220;HH:MM&#8221; oppure &#8220;MM:HH:SS&#8221;. Se non specificato,&nbsp; il formato \u00e8 &#8220;HHMM&#8221;.<\/p>\n<h3 id=\"Str\"><span style=\"font-family: 'courier new', courier, monospace;\"><strong>Trascorsi<\/strong><\/span><\/h3>\n<p><code>Function Trascorsi(ByVal Ora_finale As String, ByVal Ora_iniziale As String) As Double<\/code><\/p>\n<p>Restituisce i minuti trascorsi da Ora_Iniziale a Ora_Finale. Entrambe le ore sono espresse nella forma HHMM.<br \/>\nN.B. tenere presente che nelle griglie con NuovoLayout=True i valori dei campi con formato HH:MM vengono restituiti col separatore &#8220;:&#8221;, che va quindi tolto per passarli questa funzione.<\/p>\n<h2 id=\"esportazioone-griglie\">Esportazione Griglie in Excel<\/h2>\n<h3>GridEJ2ExcelExport<\/h3>\n<p><code><\/code><code>Sub GridEJ2ExcelExport(ByVal form As qwWebControls.QWWebPage, ByVal obj As qwWebControls.QWWebGridEJ2)<\/code><\/p>\n<p>Esporta un oggetto Griglia o VistaDati con NuovoLayout=True in un file Excel, attivandone immediatamente il download. Esempio:<\/p>\n<p><code class=\"EnlighterJSRAW\" data-enlighter-language=\"visualbasic\">GridEJ2ExcelExport(form,&lt;oggetto griglia&gt;)<\/code><\/p>\n<h3>Grid2ExcelExport<\/h3>\n<p><code><\/code><code>Sub Grid2ExcelExport(ByVal form As qwWebControls.QWWebPage, ByVal obj As qwWebControls.QWWebGrid2)<\/code><\/p>\n<p>Esporta un oggetto Griglia o VistaDati con NuovoLayout=False in un file Excel, attivandone immediatamente il download. Esempio:<\/p>\n<p><code class=\"EnlighterJSRAW\" data-enlighter-language=\"visualbasic\">Grid2ExcelExport(form,&lt;oggetto griglia&gt;)<\/code><\/p>\n<h2 id=\"gestione-codici-documenti\">Gestione dei codici di documenti e registrazioni<\/h2>\n<p>Qualiware gestisce diverse tipologie di documenti e registrazioni, che hanno rappresentazioni molto differenti fra loro in termini di tabelle del database e di chiavi primarie. E&#8217; pertanto necessario potere identificare ciascun documento o registrazione in modo assoluto, attraverso una coppia di campi, che verranno utilizzati per fare riferimento ad esse nelle tabelle che contengono informazioni comuni a tutte le tipologie, come ad esempio la tabella <strong>LINKDOC<\/strong> che contiene i collegamenti, o la tabella <strong>DESCDOC<\/strong> che contiene le descrizioni.<\/p>\n<p>Della coppia di campi fanno parte il cosiddetto &#8220;IDDOC&#8221; che \u00e8 la tipologia del documento o registrazione, definita nella tabella <strong>TIDOCREG <\/strong>(es. &#8220;MN&#8221; sono i moduli non conformit\u00e0, &#8220;DW&#8221; i documenti gestiti nel modulo documentale) , e &#8220;CODDOC&#8221;, che rappresenta il vero e proprio codice che identifica univocamente il documento o la registrazione all&#8217;interno della sua tipologia, ed \u00e8 composto dalla concatenazione delle componenti della chiavi primaria separate dal carattere &#8220;|&#8221;.<\/p>\n<p>Tramite le seguenti due funzioni \u00e8 possibile determinare il codice assoluto a partire dalla tipologia e dai valori delle chiavi primarie, ed effettuare l&#8217;operazione contraria, determinando i valori delle chiavi primarie a partire dal codice assoluto.<\/p>\n<h3 id=\"PackCode\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">PackCode<\/span><\/strong><\/h3>\n<p><code>Function PackCode(ByVal IdDoc as String, Byval Fld1 as object, Optional Byval Fld2 as object=nothing, Optional Byval Fld3 as object=nothing, Optional Byval Fld4 as object=nothing, Optional Byval Fld5 as object=nothing, Optional Byval Fld6 as object=nothing) As String<\/code><\/p>\n<p>Questa funzione restituisce il codice assoluto a partire dalle chiavi primarie del documento o della registrazione.<\/p>\n<p><em>Parametri:<\/em><br \/>\nIdDoc-&gt; Codice della tipologia del documento o della registrazione<br \/>\nPar1-Par6 -&gt; Componenti della chiave primaria<\/p>\n<p>Ritorna: il codice assoluto.<\/p>\n<p><em>Esempi:<\/em><br \/>\nPackCode(&#8220;MN&#8221;,&#8221;2021&nbsp; &nbsp;3&#8243;) ritorna &#8220;20210003|&#8221;;<br \/>\nPackCode(&#8220;A&#8221;,&#8221;2021&nbsp; &nbsp;20&#8243;,2) ritorna &#8220;202100020|2|&#8221;;<br \/>\nPackCode(&#8220;DW&#8221;,&#8221;P&#8221;,&#8221;2021&#8243;,&#8221;00004&#8243;,1) ritorna &#8220;P|2021|00004|1|&#8221;.<\/p>\n<h3 id=\"UnPackCode\"><span style=\"font-family: 'courier new', courier, monospace;\"><strong>UnPackCode<\/strong><\/span><\/h3>\n<p><code>Sub UnPackCode(ByVal pTipoDoc As String, ByVal pCodDoc As String, ByRef fld1 As Object, Optional ByRef fld2 As Object = Nothing, Optional ByRef fld3 As Object = Nothing, Optional ByRef fld4 As Object = Nothing, Optional ByRef fld5 As Object = Nothing, Optional ByRef fld6 As Object = Nothing)<\/code><\/p>\n<p>Questa funzione restituisce le componenti della chiave primaria del documento o della registrazione a partire dal codice assoluto.<\/p>\n<p><em>Parametri:<\/em><br \/>\nIdDoc -&gt; Codice della tipologia del documento o della registrazione<br \/>\nCodDoc -&gt; Codice assoluto del documento<br \/>\nPar1-Par6 -&gt; Variabili di output che conterranno le componenti della chiave primaria<\/p>\n<p><em>Esempi:<\/em><br \/>\nUnPackCode(&#8220;MN&#8221;,&#8221;20210003|&#8221;, fld1) ritorna fld1=&#8221;2021&nbsp; &nbsp;3&#8243;;<br \/>\nUnPackCode(&#8220;A&#8221;,&#8221;202100020|2|&#8221;,fld1,fld2) ritorna fld1=&#8221;2021&nbsp; &nbsp;20&#8243; e fld2=2;<br \/>\nUnPackCode(&#8220;DW&#8221;,&#8221;P|2021|00004|1|&#8221;,fld1,fld2,fld3,fld4) ritorna fld1=&#8221;P&#8221;, fld2=&#8221;2021&#8243;, fld3=&#8221;00004&#8243; e fld4=1.<\/p>\n<p>&nbsp;<\/p>\n<h2 id=\"gestione-tabelle\">Gestione delle tabelle<\/h2>\n<h3 id=\"OpenTable\"><span style=\"font-family: 'courier new', courier, monospace;\"><strong>OpenTable<\/strong><\/span><\/h3>\n<p><code>OpenTable(ByVal DB As QWDatabase, ByVal sql As String, ByVal parameters As AssocArray, ByVal all_records As Boolean, ByVal in_scrittura As Boolean, Optional ByRef errmsg As String = Nothing) As QWTable<\/code><span style=\"color: #000000;\"><br \/>\n<\/span><\/p>\n<p>Questa funzione restituisce un oggetto di tipo <strong><a href=\"https:\/\/help.qualiware.it\/qw-help\/classi-di-supporto\/#ipt_kb_toc_27012_8:~:text=la%20riga%20corrente.-,QWTable,-La%20classe%20QWTable\">QWTable<\/a><\/strong> per la lettura oppure la scrittura di dati da o nel database.<\/p>\n<p><em>Parametri:<\/em><br \/>\nDB &#8211;&gt; Riferimento all&#8217;oggetto QWDatabase che rappresenta la connessione al database<br \/>\nSQL -&gt; \u00c8 necessario specificare l&#8217;esatta stringa SQL di lettura\/scrittura. Eventualmente comprensiva di parametri per la selezione dei record (essi dovranno essere preceduti dal carattere &#8220;:&#8221; ed il nome utilizzato per la loro identificazione sar\u00e0 case sensitive).<br \/>\nPARAMETERS -&gt; \u00c8 un array associativo gestito per mezzo di un campo chiave il cui nome \u00e8 il nome del parametro di selezione record da utilizzare ed il cui valore \u00e8 appunto il valore da ricercare.<br \/>\nALL_RECORDS -&gt; Questo parametro ha significato <strong>solo se<\/strong> la query SQL non ha clausola <code>where<\/code>. In questo caso, normalmente l&#8217;oggetto QWTable \u00e8 utilizzato non per recuperare tutti i record, ma per effettuare ricerche mirate utilizzando i metodi FindKey e SetRange dell&#8217;oggetto rowset. Per evitare di recuperare tutti i record, il parametro \u00e8 <strong>impostato a False di default<\/strong>. Cos\u00ec facendo, nel momento in cui la tabella viene aperta, l&#8217;oggetto RowSet non conterr\u00e0 record, e verr\u00e0 alimentato dalle registrazioni rilevanti solo dopo l&#8217;uso di FindKey e SetRange. Se, invece, si desidera recuperare tutti i record della tabella fin dall&#8217;apertura, mettere il parametro a &#8220;True&#8221;.<br \/>\nIN_SCRITTURA -&gt; Di default \u00e8 impostato a FALSE e cos\u00ec viene utilizzato nella maggior parte dei casi. Se viene impostato a TRUE l&#8217;oggetto recordset Qualiware restituito sar\u00e0 in grado di effettuare l&#8217;inserimento di nuovi record nella tabella, la modifica di record esistenti oppure la cancellazione di essi.<br \/>\nERRMSG -&gt; Nel caso in cui si verificasse qualche errore, il testo di quest&#8217;ultimo sarebbe reperibile all&#8217;interno di questa variabile.<\/p>\n<h3 id=\"CloseTable\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">CloseTable<\/span><\/strong><\/h3>\n<p><code>Sub CloseTable(ByRef recordset As QWTable)<\/code><span style=\"color: #993366;\"><strong><br \/>\n<\/strong><\/span><\/p>\n<p>Queste routine provvedono alla chiusura ed alla distruzione di un oggetto recordset generato per mezzo della funzione &#8220;<span class=\"highlight\">OpenTable<\/span>&#8220;.<br \/>\nDeve sempre essere utilizzata al termine dell&#8217;utilizzo della funzione &#8220;<span class=\"highlight\">OpenTable<\/span>&#8220;.<br \/>\nNon viene restituito alcun valore.<\/p>\n<p><em>Parametri:<\/em><br \/>\nRECORDSET -&gt; Oggetto da distruggere generato da &#8220;<span class=\"highlight\">OpenTable<\/span>&#8220;.<\/p>\n<p>&nbsp;<\/p>\n<h2 id=\"elaborazione-grafica\">Elaborazione grafica<\/h2>\n<h3 id=\"DiagramBuilder\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">DiagramBuilder<\/span><\/strong><\/h3>\n<p><code>Sub DiagramBuilder(ByVal PostbackProcedure As qwWebControls.QWWebProcedureCode, ByVal Diagram As String, Optional ByVal ExportPNG As Boolean = False, Optional ByVal ExportSVG As Boolean = False, Optional ByVal AlwaysUseNew As Boolean = False,<\/code><code>Optional ByVal NoSave As Boolean = False,<\/code><code>Optional ByVal FlowCharFile As String = Nothing<\/code><code>)<\/code><\/p>\n<p>Questa funzione attiva il Diagram Builder. Il suo funzionamento \u00e8 spiegato <a href=\"http:\/\/help.qualiware.it\/qw-help\/strumento-per-la-realizzazione-di-flow-chart-e-diagrammi\/\">qui<\/a>.<\/p>\n<h3 id=\"ImageEditor\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">ImageEditor<\/span><\/strong><\/h3>\n<p><code>Sub ImageEditor(Byval Image As QWWebImage, ByVal PostbackProcedure As qwWebControls.QWWebProcedureCode)<\/code><\/p>\n<p>Questa funzione attiva l&#8217;editor di immagini. Il suo funzionamento \u00e8 spiegato <a href=\"http:\/\/help.qualiware.it\/qw-help\/editor-di-immagini\/\">qui<\/a>.<\/p>\n<p>&nbsp;<\/p>\n<h2 id=\"creazione-documenti\">Archiviazione di documenti<\/h2>\n<h3 id=\"DW_Archivia\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">DW_Archivia<\/span><\/strong><\/h3>\n<p><code><span class=\"enlighter-g1\">Function DW_Archivia(ByVal QWSess As QWSession, ByVal pTipo As String, ByVal pTipo_Cont As String, ByRef pNumero As String, ByVal pInd_Rev As Integer, ByVal pTitolo As String, ByVal Campi As AssocArray, ByVal pPubblica As Boolean, ByVal pNomeFile As String, optional ByVal pData as object=nothing,Optional Byval pSovrascrivi As Boolean=false, Optional ByVal pNoAuditTrail As Boolean=false, Optional ByVal pResetWorkFlow As Boolean = False) As String<\/span><\/code><\/p>\n<p>Questa funzione consente di archiviare un documento.<\/p>\n<div class=\"\"><em>Parametri:<\/em><\/div>\n<div class=\"\">\n<div><span class=\"enlighter-text\">QWSess &#8211;<\/span><span class=\"enlighter-g1\">&gt;<\/span><span class=\"enlighter-text\"> Oggetto sessione (es. form.GetSession())<\/span><\/div>\n<\/div>\n<div class=\"\">\n<div><span class=\"enlighter-text\">pTipo &#8211;<\/span><span class=\"enlighter-g1\">&gt;<\/span><span class=\"enlighter-text\"> Tipo del <\/span><span class=\"enlighter-m0\">documento<\/span> <span class=\"enlighter-g1\">(<\/span><span class=\"enlighter-text\">codice categoria<\/span><span class=\"enlighter-g1\">)<\/span><\/div>\n<\/div>\n<div class=\"\">\n<div><span class=\"enlighter-text\">pTipo_Cont &#8211;<\/span><span class=\"enlighter-g1\">&gt;<\/span><span class=\"enlighter-text\"> Tipo_Cont del documento <\/span><\/div>\n<\/div>\n<div class=\"\">\n<div><span class=\"enlighter-text\">pNumero &#8211;<\/span><span class=\"enlighter-g1\">&gt;<\/span><span class=\"enlighter-text\"> Numero del documento. Se lasciato vuoto, il numero verr\u00e0 assegnato automaticamente come numero progressivo in base al contenuto del campo pTipo_Cont, con le stesse regole utilizzate per la scheda &#8220;Nuovo documento&#8221;. Il numero assegnato verr\u00e0 restituito nel parametro pNumero stesso.<\/span><\/div>\n<\/div>\n<div class=\"\">\n<div><span class=\"enlighter-text\">pInd_rev &#8211;<\/span><span class=\"enlighter-g1\">&gt;<\/span><span class=\"enlighter-text\"> Indice di revisione <\/span><\/div>\n<\/div>\n<div class=\"\">\n<div><span class=\"enlighter-text\">pTitolo &#8211;<\/span><span class=\"enlighter-g1\">&gt;<\/span><span class=\"enlighter-text\"> Titolo del documento <\/span><\/div>\n<\/div>\n<div class=\"\">\n<div><span class=\"enlighter-text\">campi &#8211;<\/span><span class=\"enlighter-g1\">&gt;<\/span><span class=\"enlighter-text\"> Array associativo contenente i valori degli altri campi del record di DOCUMENT. E&#8217; possibile specificare il valore le righe del documento in un campo chiamato &#8220;DOC_ROWS&#8221;. E&#8217; possibile anche specificare i Tag in un campo chiamato &#8220;TAG&#8221;. Vedere l&#8217;esempio riportato <a href=\"https:\/\/help.qualiware.it\/qw-help\/creazione-di-un-documento-in-unaltra-categoria-senza-intervento-dellutente\/\">qui<\/a>.<\/span><\/div>\n<\/div>\n<div class=\"\">\n<div><span class=\"enlighter-text\">pPubblica &#8211;<\/span><span class=\"enlighter-g1\">&gt;<\/span> <span class=\"enlighter-e0\">True<\/span><span class=\"enlighter-text\"> = il documento viene pubblicato <\/span><\/div>\n<\/div>\n<div class=\"\">\n<div><span class=\"enlighter-text\">pNomefile &#8211;<\/span><span class=\"enlighter-g1\">&gt;<\/span><span class=\"enlighter-text\"> Nome del file che costituisce il modello. Pu\u00f2 essere il nome di un modello locale alla categoria di destinazione, senza il percorso. Nel caso la categoria sia di tipo FORM, ed esista un template di <\/span>stampa HTML, questo parametro pu\u00f2 essere lasciato vuoto.<\/div>\n<div>pData -&gt; Data di redazione e di pubblicazione<\/div>\n<\/div>\n<div class=\"\">\n<div><span class=\"enlighter-text\">pSovrascrivi &#8211;<\/span><span class=\"enlighter-g1\">&gt;<\/span> <span class=\"enlighter-e0\">True<\/span><span class=\"enlighter-text\"> = sostituisce il file se esiste una versione non <\/span><span class=\"enlighter-m0\">pubblicata<\/span> <span class=\"enlighter-g1\">(<\/span><span class=\"enlighter-text\">opzionale, non specificato equivale a <\/span><span class=\"enlighter-e0\">false<\/span><span class=\"enlighter-g1\">)<\/span><\/div>\n<div><span class=\"enlighter-text\">pNoAuditTrail &#8211;<\/span><span class=\"enlighter-g1\">&gt;<\/span> <span class=\"enlighter-e0\">True<\/span><span class=\"enlighter-text\"> = non salva copia del documento nell&#8217;AuditTrail<\/span>&nbsp;<span class=\"enlighter-g1\">(<\/span><span class=\"enlighter-text\">opzionale, non specificato equivale a <\/span><span class=\"enlighter-e0\">false<\/span><span class=\"enlighter-g1\">)<\/span><\/div>\n<div><span class=\"enlighter-text\">pResetWorkFlow-<\/span><span class=\"enlighter-g1\">&gt;<\/span> <span class=\"enlighter-e0\">True<\/span><span class=\"enlighter-text\"> = resetta il workflow<\/span>&nbsp;<span class=\"enlighter-g1\">(<\/span><span class=\"enlighter-text\">opzionale, non specificato equivale a <\/span><span class=\"enlighter-e0\">false<\/span><span class=\"enlighter-g1\">)<\/span><\/div>\n<\/div>\n<div>&nbsp;<\/div>\n<div>Ritorna: stringa vuota se l&#8217;operazione \u00e8 andata a buon fine, il messaggio d&#8217;errore altrimenti.<\/div>\n<div>&nbsp;<\/div>\n<div>Per un esempio di utilizzo, vedere <a href=\"https:\/\/help.qualiware.it\/qw-help\/creazione-di-un-documento-in-unaltra-categoria-senza-intervento-dellutente\/\">qui<\/a>.<\/div>\n<h3 id=\"DW_Crea\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">DW_Crea<\/span><\/strong><\/h3>\n<div><code>Sub DW_Crea(ByVal Page As Object, ByVal pTipo As String, ByVal pTipo_Cont As String, ByVal pNumero As String, ByVal pInd_Rev As Integer, ByVal pTitolo As String, ByVal pNote As String, Optional ByVal pCampi As AssocArray = Nothing)<\/code><\/div>\n<div>&nbsp;<\/div>\n<div>\n<div class=\"\"><em>Parametri:<\/em><\/div>\n<div class=\"\">\n<div><span class=\"enlighter-text\">Page &#8211;<\/span><span class=\"enlighter-g1\">&gt;<\/span><span class=\"enlighter-text\"> Oggetto che indica la pagina in cui si trova lo script che attiva la procedura<\/span><\/div>\n<\/div>\n<div class=\"\">\n<div><span class=\"enlighter-text\">pTipo &#8211;<\/span><span class=\"enlighter-g1\">&gt;<\/span><span class=\"enlighter-text\"> Tipo del <\/span><span class=\"enlighter-m0\">documento<\/span> <span class=\"enlighter-g1\">(<\/span><span class=\"enlighter-text\">codice categoria<\/span><span class=\"enlighter-g1\">)<\/span><\/div>\n<\/div>\n<div class=\"\">\n<div><span class=\"enlighter-text\">pTipo_Cont &#8211;<\/span><span class=\"enlighter-g1\">&gt;<\/span><span class=\"enlighter-text\"> Tipo_Cont del documento <\/span><\/div>\n<\/div>\n<div class=\"\">\n<div><span class=\"enlighter-text\">pNumero &#8211;<\/span><span class=\"enlighter-g1\">&gt;<\/span><span class=\"enlighter-text\"> Numero del documento <\/span><\/div>\n<\/div>\n<div class=\"\">\n<div><span class=\"enlighter-text\">pInd_rev &#8211;<\/span><span class=\"enlighter-g1\">&gt;<\/span><span class=\"enlighter-text\"> Indice di revisione <\/span><\/div>\n<\/div>\n<div class=\"\">\n<div><span class=\"enlighter-text\">pTitolo &#8211;<\/span><span class=\"enlighter-g1\">&gt;<\/span><span class=\"enlighter-text\"> Titolo del documento<\/span><\/div>\n<div>pNote -&gt; Note relative al documento<\/div>\n<\/div>\n<div class=\"\">\n<div><span class=\"enlighter-text\">campi &#8211;<\/span><span class=\"enlighter-g1\">&gt;<\/span><span class=\"enlighter-text\"> Array associativo contenente i valori degli altri campi del record di DOCUMENT<\/span><\/div>\n<\/div>\n<\/div>\n<div>&nbsp;<\/div>\n<div>Questa funzione consente di aprire il form di creazione di un nuovo documento. Quando si attiver\u00e0, nel browser dell&#8217;utente verr\u00e0 aperta una nuova finestra che mostra la categoria documentale indicata da pTipo e la scheda di creazione di un nuovo documento. Tramite il parametro campi si possono specificare i valori che dovranno apparire di default in specifici input fields del form. Per fare in modo che sia l&#8217;utente (o appositi script del form di creazione) a dover specificare Tipo_Cont, numero, indice di revisione e titolo del documento, basta assegnare il valore Nothing ai rispettivi parametri.<\/div>\n<h3 id=\"DW_Pubblica\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">DW_Pubblica<\/span><\/strong><\/h3>\n<div>\n<p><code><span class=\"enlighter-g1\">Function DW_Pubblica(ByVal DB As QWDataBase, ByVal pCodDoc As String, ByVal pData_Pubbl As DateTime, Optional ByVal UpdateFields As Boolean = False, Optional ByVal CreatePdf As Boolean = False) As String<\/span><\/code><\/p>\n<p>Questa funzione consente di pubblicare un documento.<\/p>\n<div class=\"\"><em>Parametri:<\/em><\/div>\n<div class=\"\">\n<div class=\"\">\n<div><span class=\"enlighter-text\">DB &#8211;<\/span><span class=\"enlighter-g1\"><span class=\"enlighter-g1\">&gt;<\/span><\/span> Oggetto database<\/div>\n<\/div>\n<div class=\"\">\n<div><span class=\"enlighter-text\">pTipo &#8211;<\/span><span class=\"enlighter-g1\">&gt;<\/span><span class=\"enlighter-text\"> Tipo del <\/span><span class=\"enlighter-m0\">documento<\/span> <span class=\"enlighter-g1\">(<\/span><span class=\"enlighter-text\">codice categoria<\/span><span class=\"enlighter-g1\">)<\/span><\/div>\n<\/div>\n<div class=\"\">\n<div><span class=\"enlighter-text\">pTipo_Cont &#8211;<\/span><span class=\"enlighter-g1\">&gt;<\/span><span class=\"enlighter-text\"> Tipo_Cont del documento <\/span><\/div>\n<\/div>\n<div class=\"\">\n<div><span class=\"enlighter-text\">pNumero &#8211;<\/span><span class=\"enlighter-g1\">&gt;<\/span><span class=\"enlighter-text\"> Numero del documento <\/span><\/div>\n<\/div>\n<div class=\"\">\n<div><span class=\"enlighter-text\">pInd_rev &#8211;<\/span><span class=\"enlighter-g1\">&gt;<\/span><span class=\"enlighter-text\"> Indice di revisione<\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"\">Ritorna: stringa vuota se l&#8217;operazione \u00e8 andata a buon fine, il messaggio d&#8217;errore altrimenti.<\/div>\n<div>&nbsp;<\/div>\n<div>Per un esempio di utilizzo, vedere <a href=\"https:\/\/help.qualiware.it\/qw-help\/pubblicazione-di-un-documento-bpm\/\">qui<\/a>.<\/div>\n<\/div>\n<div>&nbsp;<\/div>\n<div>NOTA IMPORTANTE: l&#8217;aggiornamento del documento \u00e8 effettuato tramite QWay Office. Pertanto eventuali formattazioni presenti nei file di tipo Word 97\/2003 ed Excel 97\/2003 non compatibili con QWay Office verranno perse.<\/div>\n<div>\n<h3 id=\"DW_Revisiona\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">DW_Revisiona<\/span><\/strong><\/h3>\n<p><code><span class=\"enlighter-g1\">Function DW_Revisiona(ByVal DB As QWDataBase, ByVal pTipo As String, ByVal pTipo_Cont As String, ByVal pNumero As String,ByRef pInd_Rev As Integer) As String<\/span><\/code><\/p>\n<div class=\"\"><em>Parametri:<\/em><\/div>\n<div class=\"\">\n<div class=\"\">\n<div class=\"\">\n<div><span class=\"enlighter-text\">DB &#8211;<\/span><span class=\"enlighter-g1\"><span class=\"enlighter-g1\">&gt;<\/span><\/span> Oggetto database<\/div>\n<\/div>\n<div class=\"\">\n<div><span class=\"enlighter-text\">pTipo &#8211;<\/span><span class=\"enlighter-g1\">&gt;<\/span><span class=\"enlighter-text\"> Tipo del <\/span><span class=\"enlighter-m0\">documento<\/span> <span class=\"enlighter-g1\">(<\/span><span class=\"enlighter-text\">codice categoria<\/span><span class=\"enlighter-g1\">)<\/span><\/div>\n<\/div>\n<div class=\"\">\n<div><span class=\"enlighter-text\">pTipo_Cont &#8211;<\/span><span class=\"enlighter-g1\">&gt;<\/span><span class=\"enlighter-text\"> Tipo_Cont del documento <\/span><\/div>\n<\/div>\n<div class=\"\">\n<div><span class=\"enlighter-text\">pNumero &#8211;<\/span><span class=\"enlighter-g1\">&gt;<\/span><span class=\"enlighter-text\"> Numero del documento <\/span><\/div>\n<\/div>\n<div class=\"\">\n<div><span class=\"enlighter-text\">pInd_rev &#8211;<\/span><span class=\"enlighter-g1\">&gt;<\/span><span class=\"enlighter-text\"> Indice di revisione del documento revisionato<\/span><\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"\">Ritorna: stringa vuota se l&#8217;operazione \u00e8 andata a buon fine, il messaggio d&#8217;errore altrimenti.<\/div>\n<\/div>\n<div>\n<h3 id=\"DW_AggiornaCampi\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">DW_AggiornaCampi<\/span><\/strong><\/h3>\n<div>\n<p><code><span class=\"enlighter-g1\">Function DW_AggiornaCampi(ByVal DB As QWDataBase, ByVal pCodDoc As String) As String<\/span><\/code><\/p>\n<p>Questa funzione consente di aggiornare il documento o il report del form per riflettere il contenuto dei campi del database, in modo che, al momento della consultazione, mostri i dati aggiornati.<\/p>\n<div class=\"\"><em>Parametri:<\/em><\/div>\n<div class=\"\">DB &#8211;&gt; Oggetto database<br \/>\npCodDoc -&gt; Codice univoco documento da aggiornare<\/div>\n<div class=\"\">Ritorna: stringa vuota se l&#8217;operazione \u00e8 andata a buon fine, il messaggio d&#8217;errore altrimenti.<\/div>\n<\/div>\n<\/div>\n<div>&nbsp;<\/div>\n<div>NOTA IMPORTANTE: l&#8217;aggiornamento del documento \u00e8 effettuato tramite QWay Office. Pertanto eventuali formattazioni presenti nei file di tipo Word 97\/2003 ed Excel 97\/2003 non compatibili con QWay Office verranno perse.<\/div>\n<h3 id=\"DW_Elimina\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">DW_Elimina<\/span><\/strong><\/h3>\n<div>\n<p><code><span class=\"enlighter-g1\">Function DW_Elimina(ByVal DB As QWDatabase, ByVal pTipo As String, ByVal pTipo_Cont As String, ByVal pNumero As String) As String<\/span><\/code><\/p>\n<p>Questa funzione consente di eliminare tutte le revisioni di un documento.<\/p>\n<div class=\"\"><em>Parametri:<br \/>\n<\/em>DB &#8211;&gt; Oggetto database<br \/>\n<span class=\"enlighter-text\">pTipo &#8211;<\/span><span class=\"enlighter-g1\">&gt;<\/span><span class=\"enlighter-text\"> Tipo del <\/span><span class=\"enlighter-m0\">documento<\/span> <span class=\"enlighter-g1\">(<\/span><span class=\"enlighter-text\">codice categoria<\/span><span class=\"enlighter-g1\">)<br \/>\n<\/span><span class=\"enlighter-text\">pTipo_Cont &#8211;<\/span><span class=\"enlighter-g1\">&gt;<\/span><span class=\"enlighter-text\"> Tipo_Cont del documento<br \/>\n<\/span><span class=\"enlighter-text\">pNumero &#8211;<\/span><span class=\"enlighter-g1\">&gt;<\/span><span class=\"enlighter-text\"> Numero del documento<\/span><\/div>\n<div class=\"\">\n<div class=\"\">\n<div>&nbsp;<\/div>\n<div>Ritorna: stringa vuota se l&#8217;operazione \u00e8 andata a buon fine, il messaggio d&#8217;errore altrimenti.<\/div>\n<div>\n<h3 id=\"DW_Clona\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">DW_Clona<\/span><\/strong><\/h3>\n<div>\n<p><code><span class=\"enlighter-g1\">Function DW_Clona(ByVal DB As QWDataBase, ByVal pTipo1 As String, ByVal pTipo_Cont1 As String, ByVal pNumero1 As String, ByVal pTipo2 As String, ByVal pTipo_Cont2 As String, ByVal pNumero2 As String, ByVal pPubblica As Boolean, Optional ByVal pData As Object = Nothing, Optional ByVal pTitolo As String = Nothing, Optional ByVal Campi As AssocArray = Nothing) As String<\/span><\/code><\/p>\n<p>Questa funzione consente di clonare un documento.<\/p>\n<div class=\"\"><em>Parametri:<br \/>\n<\/em>DB &#8211;&gt; Oggetto database<\/p>\n<div>\n<div>pTipo1 -&gt; Tipo del documento d&#8217;origine<\/div>\n<div>pTipo_Cont1 -&gt; Tipo_Cont del documento d&#8217;origine<\/div>\n<div>pNumero1 -&gt; Numero del documento d&#8217;origine<\/div>\n<div>pTipo2 -&gt; Tipo del documento di destinazione<\/div>\n<div>pTipo_Cont2 -&gt; Tipo_Cont del documento di destinazione<\/div>\n<div>pNumero2 -&gt; Numero del documento di destinazione<\/div>\n<div>pPubblica -&gt; True = il documento viene pubblicato<\/div>\n<div>pData -&gt; Data di redazione e di pubblicazione<\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<div class=\"\">\n<div>pTitolo -&gt; Titolo (opzionale)<br \/>\nCampi -&gt; Campi da sostituire a quelli del documento origine (opzionale)<\/div>\n<div>Ritorna: stringa vuota se l&#8217;operazione \u00e8 andata a buon fine, il messaggio d&#8217;errore altrimenti.<\/div>\n<\/div>\n<\/div>\n<div>\n<h3 id=\"DW_Ricodifica\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">DW_Ricodifica<\/span><\/strong><\/h3>\n<p><code><span class=\"enlighter-g1\">Function DW_Ricodifica(ByVal DB As QWDataBase, ByVal old_tipo As String, ByVal old_tipo_cont As String, ByVal old_numero As String, ByVal new_tipo As String, ByVal new_tipo_cont As String, ByVal new_numero As String) As String<\/span><\/code><\/p>\n<p>Questa funzione consente di archiviare un documento.<\/p>\n<div class=\"\"><em>Parametri:<\/em><\/div>\n<div class=\"\">\n<div><span class=\"enlighter-text\">DB-<\/span><span class=\"enlighter-g1\">&gt;<\/span><span class=\"enlighter-text\"> Oggetto database (es. form.GetDatabase())<\/span><\/div>\n<\/div>\n<div class=\"\">\n<div><span class=\"enlighter-text\">old_tipo-<\/span><span class=\"enlighter-g1\">&gt;<\/span><span class=\"enlighter-text\"> Tipo del <\/span><span class=\"enlighter-m0\">documento<\/span> da ricodificare <span class=\"enlighter-g1\">(<\/span><span class=\"enlighter-text\">codice categoria<\/span><span class=\"enlighter-g1\">)<\/span><\/div>\n<\/div>\n<div class=\"\">\n<div><span class=\"enlighter-text\">old_tipo_cont &#8211;<\/span><span class=\"enlighter-g1\">&gt;<\/span><span class=\"enlighter-text\"> Tipo_Cont del documento da ricodificare<\/span><\/div>\n<\/div>\n<div class=\"\">\n<div><span class=\"enlighter-text\">old_numero &#8211;<\/span><span class=\"enlighter-g1\">&gt;<\/span><span class=\"enlighter-text\"> Numero del documento da ricodificare<\/span><\/div>\n<\/div>\n<div class=\"\">\n<div class=\"\">\n<div><span class=\"enlighter-text\">new_tipo-<\/span><span class=\"enlighter-g1\">&gt;<\/span><span class=\"enlighter-text\"> Tipo del <\/span><span class=\"enlighter-m0\">documento<\/span> ricodificato <span class=\"enlighter-g1\">(<\/span><span class=\"enlighter-text\">codice categoria<\/span><span class=\"enlighter-g1\">)<\/span><\/div>\n<\/div>\n<div class=\"\">\n<div><span class=\"enlighter-text\">new_tipo_cont &#8211;<\/span><span class=\"enlighter-g1\">&gt;<\/span><span class=\"enlighter-text\"> Tipo_Cont del documento ricodificato<\/span><\/div>\n<\/div>\n<div class=\"\">\n<div><span class=\"enlighter-text\">new_numero &#8211;<\/span><span class=\"enlighter-g1\">&gt;<\/span><span class=\"enlighter-text\"> Numero del documentoricodificato<\/span><\/div>\n<\/div>\n<\/div>\n<div>&nbsp;<\/div>\n<div>Ritorna: stringa vuota se l&#8217;operazione \u00e8 andata a buon fine, il messaggio d&#8217;errore altrimenti.<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div>\n<div class=\"\">\n<div class=\"\">\n<div>\n<div>\n<div class=\"\">\n<div class=\"\">\n<div>\n<h3 id=\"DW_Replace\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">DW_Replace<\/span><\/strong><\/h3>\n<div>\n<p><code><span class=\"enlighter-g1\">Function DW_Replace(ByVal DB As QWDataBase, Byval Path As String, Byval Search As String, Byval Replace As String, Optional ByVal CaseSensitive As Boolean=false) As String<\/span><\/code><\/p>\n<p>Questa funzione consente di sostituire un testo con un altro in un documento in formato DOC o DOCX.<\/p>\n<div class=\"\"><em>Parametri:<br \/>\n<\/em>DB &#8211;&gt; Oggetto database<br \/>\nPath -&gt; Percorso del file<\/div>\n<div class=\"\">\n<div>\n<div>Search -&gt; Testo da sostituire<\/div>\n<div>Replace -&gt; Testo in sostituzione<\/div>\n<div>CaseSensitive -&gt; True = il testo viene confrontato rispettando maiuscole e minuscole<\/div>\n<div>&nbsp;<\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<div class=\"\">\n<div>Ritorna: stringa vuota se l&#8217;operazione \u00e8 andata a buon fine, il messaggio d&#8217;errore altrimenti.<\/div>\n<div>&nbsp;<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div>N.B. Se il documento \u00e8 in formato DOC l&#8217;elaborazione avviene usando librerie non native, e potrebbero verificarsi alterazioni nel layout<\/div>\n<\/div>\n<div>\n<h3 id=\"DW_SostituisciFile\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">DW_SostituisciFile<\/span><\/strong><\/h3>\n<div>\n<p><code><span class=\"enlighter-g1\">Function DW_SostituisciFile(ByVal DB As QWDataBase, ByVal pTipo As String, ByVal pTipo_Cont As String, ByVal pNumero As String, ByVal pInd_Rev As integer, ByVal Path As String) As String<\/span><\/code><\/p>\n<p>Questa funzione consente di sostituire il file associato ad un documento, in qualsiasi stato esso si trovi (bozza, pubblicato, obsoleto).<\/p>\n<div class=\"\"><em>Parametri:<br \/>\n<\/em>DB &#8211;&gt; Oggetto database<\/p>\n<div>\n<div>pTipo -&gt; Tipo del documento<\/div>\n<div>pTipo_Cont -&gt; Tipo_Cont del documento<\/div>\n<div>pNumero -&gt; Numero del documento<\/div>\n<div>pInd_Rev -&gt; Indice di revisione del documento<\/div>\n<div>pPath -&gt; Percorso del file in sostituzione<\/div>\n<div>&nbsp;<\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<div class=\"\">\n<div>Ritorna: stringa vuota se l&#8217;operazione \u00e8 andata a buon fine, il messaggio d&#8217;errore altrimenti.<\/div>\n<div>\n<h3 id=\"DW_AnnullaPubblica\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">DW_AnnullaPubblica<\/span><\/strong><\/h3>\n<div>\n<p><code><span class=\"enlighter-g1\">Function DW_AnnullaPubblica(ByVal DB As QWDataBase, ByVal pTipo As String, ByVal pTipo_Cont As String, ByVal pNumero As String) As String<\/span><\/code><\/p>\n<p>Questa funzione consente di annullare la pubblicazione di un documento.<\/p>\n<div class=\"\"><em>Parametri:<br \/>\n<\/em>DB &#8211;&gt; Oggetto database<\/p>\n<div>\n<div>pTipo -&gt; Tipo del documento<\/div>\n<div>pTipo_Cont -&gt; Tipo_Cont del documento<\/div>\n<div>pNumero -&gt; Numero del documento<\/div>\n<div>&nbsp;<\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<div class=\"\">\n<div>Ritorna: stringa vuota se l&#8217;operazione \u00e8 andata a buon fine, il messaggio d&#8217;errore altrimenti.<\/div>\n<\/div>\n<div>\n<h3 id=\"DW_AnnullaRevisione\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">DW_AnnullaRevisione<\/span><\/strong><\/h3>\n<div>\n<p><code><span class=\"enlighter-g1\">Function DW_AnnullaRevisione(ByVal DB As QWDatabase, ByVal pTipo As String, ByVal pTipo_Cont As String, ByVal pNumero As String) As String<\/span><\/code><\/p>\n<p>Questa funzione consente di annullare la revisione di un documento, ripristinando l&#8217;ultima versione pubblicata<\/p>\n<div class=\"\"><em>Parametri:<br \/>\n<\/em>DB &#8211;&gt; Oggetto database<\/p>\n<div>\n<div>pTipo -&gt; Tipo del documento<\/div>\n<div>pTipo_Cont -&gt; Tipo_Cont del documento<\/div>\n<div>pNumero -&gt; Numero del documento<\/div>\n<div>&nbsp;<\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<div class=\"\">\n<div>Ritorna: stringa vuota se l&#8217;operazione \u00e8 andata a buon fine, il messaggio d&#8217;errore altrimenti.<\/div>\n<\/div>\n<div>\n<h3 id=\"DW_Obsoleto&lt;\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">DW_Obsoleto<\/span><\/strong><\/h3>\n<div>\n<p><code><span class=\"enlighter-g1\">Function DW_Obsoleto(ByVal DB As QWDatabase, ByVal pTipo As String, ByVal pTipo_Cont As String, ByVal pNumero As String) As String<\/span><\/code><\/p>\n<p>Questa funzione consente di rendere osboleta la versione pubblicata di un documento.<\/p>\n<div class=\"\"><em>Parametri:<br \/>\n<\/em>DB &#8211;&gt; Oggetto database<\/p>\n<div>\n<div>pTipo -&gt; Tipo del documento<\/div>\n<div>pTipo_Cont -&gt; Tipo_Cont del documento<\/div>\n<div>pNumero -&gt; Numero del documento<\/div>\n<div>&nbsp;<\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<div class=\"\">\n<div>Ritorna: stringa vuota se l&#8217;operazione \u00e8 andata a buon fine, il messaggio d&#8217;errore altrimenti.<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<div class=\"\">\n<div>\n<div>\n<div class=\"\">\n<div>\n<h3 id=\"GetDocumentTags\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">GetDocumentTags<\/span><\/strong><\/h3>\n<div>\n<p><code><span class=\"enlighter-g1\">Function GetDocumentTags(ByVal DB As QWDatabase, ByVal iddoc As String, ByVal coddoc As String) As DBArray<\/span><\/code><\/p>\n<p>Questa funzione consente di recuperare i tag attribuiti ad un documento.<\/p>\n<div class=\"\"><em>Parametri:<br \/>\n<\/em>DB &#8211;&gt; Oggetto database<\/p>\n<div>IdDoc -&gt; Tipo di documento o di registrazione da condividere<br \/>\nCodDoc -&gt; Codice del documento o della registrazione da condividere<\/div>\n<\/div>\n<div class=\"\">\n<div class=\"\">\n<div>&nbsp;<\/div>\n<div>Ritorna: un oggetto di tipo DBArray contenente i tag attribuiti al documento specificato.<\/div>\n<\/div>\n<div>\n<h3 id=\"SetDocumentTags\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">SetDocumentTags<\/span><\/strong><\/h3>\n<div>\n<p><code><span class=\"enlighter-g1\">Function SetDocumentTags(ByVal DB As QWDatabase, ByVal iddoc As String, ByVal coddoc As String, Byval Tags As DBarray) As String<\/span><\/code><\/p>\n<p>Questa funzione consente di assegnare i tag ad un documento.<\/p>\n<div class=\"\"><em>Parametri:<br \/>\n<\/em>DB &#8211;&gt; Oggetto database<\/p>\n<div>IdDoc -&gt; Tipo di documento o di registrazione da condividere<br \/>\nCodDoc -&gt; Codice del documento o della registrazione da condividere<\/div>\n<div>Tags &#8211;&gt; Oggetto di tipo DBArray contenente i tag da attribuire al documento specificato<\/div>\n<\/div>\n<div class=\"\">\n<div class=\"\">\n<div>&nbsp;<\/div>\n<div>Ritorna: stringa vuota se l&#8217;operazione si \u00e8 conclusa con successo, altrimenti il messaggio d&#8217;errore.<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p>&nbsp;<\/p>\n<h2 id=\"collegamento-tra-documenti\">Collegamento tra documenti<\/h2>\n<h3 id=\"Link_Doc\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">Link_Doc<\/span><\/strong><\/h3>\n<p><code>Function Link_Doc(ByVal DB As QWDatabase, ByVal IDDOC1 As String, ByVal CODDOC1 As String, ByVal IDDOC2 As String, ByVal CODDOC2 As String, ByVal tipo_operazione As Integer, Optional ByRef record_set As QWTable = Nothing, Optional ByRef errmsg As String = Nothing, Optional ByVal nomefile As String = Nothing, Optional ByVal importa_nel_DB As Boolean = False) As Boolean<\/code><\/p>\n<p>Questa primitiva permette di effettuare un&#8217;operazione di collegamento tra due documenti. Ritorna <code>True<\/code> se l&#8217;operazione va a buon fine. In tal caso, all&#8217;interno del riquadro dei documenti collegati di ciascuno dei due documenti comparir\u00e0 un riferimento all&#8217;altro.<\/p>\n<p><em>Parametri<\/em>:<\/p>\n<p>DB -&gt; Riferimento all&#8217;oggetto QWDatabase che rappresenta la connessione al database<br \/>\nIDDOC1 -&gt; campo <code>_IDDOC<\/code> del primo documento coinvolto nell&#8217;operazione<br \/>\nCODDOC1 -&gt; campo <code>_CODDOC<\/code> del primo documento coinvolto nell&#8217;operazione<br \/>\nIDDOC2 -&gt; campo <code>_IDDOC<\/code> del secondo documento coinvolto nell&#8217;operazione (se presente)<br \/>\nCODDOC2 -&gt; campo <code>_CODDOC<\/code> del secondo documento coinvolto nell&#8217;operazione (se presente)<br \/>\ntipo_operazione -&gt; indica il tipo di operazione da effettuare, e pu\u00f2 assumere valori da 1 a 5 compresi:<\/p>\n<ul>\n<li>1 -&gt; INSERIMENTO COLLEGAMENTO -&gt; inserisce il collegamento al documento di Qualiware identificato da <code>IDDOC2<\/code> e <code>CODDOC2<\/code> nella lista di documenti collegati a quello identificato da <code>IDDOC1<\/code> e <code>CODDOC1<\/code>. \u00c8 possibile usare questa operazione anche per inserire un link ad una pagina esterna al sistema. In questo caso, al posto di <code>IDDOC2<\/code> va utilizzata la stringa wildcard <code>*E<\/code>, e al posto di <code>CODDOC2<\/code> la url al sito esterno. NOTA: i CODDOC dei documenti di Qualiware vanno passati senza la parte relativa all&#8217;indice di revisione.<\/li>\n<li>2 -&gt; RIMOZIONE COLLEGAMENTO SPECIFICO -&gt; rimuove il collegamento tra il documento identificato da <code>IDDOC1<\/code> e <code>CODDOC1<\/code> e quello identificato da <code>IDDOC2<\/code> e <code>CODDOC2<\/code><\/li>\n<li>3 -&gt; RIMOZIONE MASSIVA -&gt; rimuove tutti i collegamenti al documento identificato da <code>IDDOC1<\/code> e <code>CODDOC1<\/code><\/li>\n<li>4 -&gt; QUERY -&gt; ricava la lista di tutti i documenti collegati a quello identificato da <code>IDDOC1<\/code> e <code>CODDOC1<\/code><\/li>\n<li>5 -&gt; INSERIMENTO FILE -&gt; serve a collegare un file al documento identificato da <code>IDDOC1<\/code> e <code>CODDOC1<\/code>. In questo caso, similmente all&#8217;operazione 1, <code>IDDOC2<\/code> deve equivalere alla stringa <code>**<\/code>, mentre il <code>CODDOC2<\/code> al percorso del file all&#8217;interno del file system. Impostanto il parametro <code>importa_nel_DB<\/code> a <code>False<\/code> o a <code>True<\/code>, il file verr\u00e0 salvato rispettivamente nella cartella documentale di Qualiware, o in base64 all&#8217;interno del DB. Il nome che si vuole dare al file una volta che esso sar\u00e0 stato salvato va specificato nel posto del parametro <code>nomefile<\/code>. In caso di salvataggio del file nel DB, il codice in base64 viene memorizzato nella colonna <code>_FILE<\/code> della tabella <code>LINK_DOC<\/code>. Si tenga presente che la suddetta colonna, per ragioni di performance, non compare all&#8217;interno delle query di selezione fatte tramite l&#8217;editor SQL di Qualiware.<\/li>\n<\/ul>\n<p>record_set -&gt; oggetto di tipo QWTable che, in seguito ad una chiamata con <code>tipo_operazione = 4<\/code>, riporter\u00e0 la lista di documenti collegati a quello identificato da <code>IDDOC1<\/code> e <code>CODDOC1<\/code><br \/>\nerrmsg -&gt; stringa che riporta un eventuale messaggio di errore<br \/>\nnomefile -&gt; nome da dare al file una volta che sar\u00e0 memorizzato nella directory documentale di Qualiware (vedere operazioni 1 e 5)<br \/>\nimporta_nel_DB -&gt; se <code>True<\/code>, il file verr\u00e0 memorizzato nel database in formato base64 (vedere operazione 5)<\/p>\n<p>&nbsp;<\/p>\n<\/div>\n<\/div>\n<h2 id=\"condivisione-documenti\">Condivisione di documenti e registrazioni<\/h2>\n<h3 id=\"Make_HyperLink\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">Make_HyperLink<\/span><\/strong><\/h3>\n<p><code>Function Make_HyperLink(ByVal QWSess As QWSession, ByVal pTipoDoc As String, ByVal pCodDoc As String, Optional byval Action as integer=0, Optional byval id_activity as string=nothing, optional byval user as string=nothing, Optional byval tipo_ente As String=Nothing, Optional ByVal ente As String=nothing) As String<\/code><\/p>\n<p>Questa funzione consente di creare link che consentono di accedere ad un documento o ad una registrazione, oppure di approvarlo.<\/p>\n<p><em>Parametri:<\/em><br \/>\nQWSess -&gt; Oggetto sessione (es. form.GetSession())<br \/>\npTipoDoc -&gt; Tipo di documento o di registrazione da condividere<br \/>\npCodDoc -&gt; Codice del documento o della registrazione da condividere<br \/>\nAction-&gt; Tipo di link da produrre:<br \/>\n0 = Link di apertura semplice<br \/>\n1 = Link di apertura del documento o del form in scrittura&#8211;&gt; Valido solo per categorie documentali<br \/>\n2 = Link a pagina semplificata per Visto OK &#8211;&gt; Valido solo per workflow BPM<br \/>\n3 = Link a pagina semplificata per Visto KO &#8211;&gt; Valido solo per workflow BPM<br \/>\n4 = Link di condivisione, anche per distribuzione (vedere parametro <em>tipo_ente <\/em>ed <em>ente<\/em>)<br \/>\n5 = Link per la firma autografa<br \/>\n6 = Link di apertura del form dei dati &#8211;&gt; Valido solo per categorie documentali di tipo File<br \/>\n7 = Link di apertura della scheda DOCUMENT97.ASPX per modifica e approvazione documento con funzionalit\u00e0 ristrette (ONLYFORM=1)<br \/>\nid_activity -&gt; ID dell&#8217;attivit\u00e0 BPM per la quale si deve dare il visto (valido se <em>Action<\/em>=2 o <em>Action<\/em>=3 o <em>Action<\/em>=5)<br \/>\nuser -&gt; codice dell&#8217;utente che deve dare il visto (valido se <em>Action<\/em>=2 o <em>Action<\/em>=3), oppure nome utente ed e-mail dell&#8217;utente che deve apporre la firma autografa nella forma &#8220;Nome utente &lt;email&gt;&#8221; (valido se <em>Action<\/em>=5), oppure codice dell&#8217;utente che deve modificare il documento (valido se <em>Action<\/em>=7).<br \/>\ntipo_ente -&gt; tipo di destinatario del documento (valido se <em>Action<\/em>=4 e il documento \u00e8 stato distribuito). Pu\u00f2 essere &#8220;P&#8221; se \u00e8 una persona, &#8220;E&#8221; se \u00e8 un ente, &#8220;C&#8221; se \u00e8 un cliente\/fornitore<br \/>\nente -&gt; codice del destinatario (persona, ente o cliente\/fornitore)<\/p>\n<p>N.B. nel caso <em>Action<\/em>=4 e i parametri <em>tipo_ente<\/em> ed <em>ente<\/em> siano specificati, al momento dell&#8217;apertura del link viene attivato il flag LISTDIST.RICEVUTO.<\/p>\n<h3 id=\"ShareDocument\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">ShareDocument<\/span><\/strong><\/h3>\n<p><code>Function ShareDocument(Byval QWSess As QWSession,ByVal IdDoc As String, ByVal CodDoc As String,Byval share As Boolean, optional Byval Expires As DateTime=nothing) As String<\/code><\/p>\n<p>Questa funzione consente di creare o revocare la condivisione di un documento, restituendo il link per visualizzare il documento stesso.<\/p>\n<p><em>Parametri:<\/em><br \/>\nQWSess -&gt; Oggetto sessione (es. form.GetSession())<br \/>\nIdDoc -&gt; Tipo di documento o di registrazione da condividere<br \/>\nCodDoc -&gt; Codice del documento o della registrazione da condividere<br \/>\nShare -&gt; True=attiva condivisione, False=revoca condivisione<br \/>\nExpires -&gt; Data di termine della condivisione. Il parametro \u00e8 valido solo se Share=True, e pu\u00f2 essere omesso, nel qual caso la condivisione sar\u00e0 valida per 7 giorni a partire dalla data del richiamo della funzione.<\/p>\n<p>&nbsp;<\/p>\n<h2 id=\"chat\">Chat<\/h2>\n<h3 id=\"OpenChat\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">OpenChat<\/span><\/strong><\/h3>\n<p><code>Sub OpenChat(ByVal Form As QWWebControls.QWWebPage, ByVal IdDoc As String,ByVal CodDoc As String, Byval Recipients As DBArray)<\/code><\/p>\n<p>Questa funzione consente di aprire la chat per un determinato documento specificando una lista di destinatari permessi.<\/p>\n<p><em>Parametri:<\/em><br \/>\nForm -&gt; riferimento al form<br \/>\nIdDoc -&gt; Tipo di documento o di registrazione da condividere<br \/>\nCodDoc -&gt; Codice del documento o della registrazione da condividere<br \/>\nRecipients -&gt; Array dei codici dei destinatari. Il primo codice specificato comparir\u00e0 come destinatario predefinito all&#8217;apertura della finestra<\/p>\n<p>NOTA: questa funzione non \u00e8 disponibile sulla piattaforma mobile.<\/p>\n<p>Esempio<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"visualbasic\">OpenChat(form,\"MN\",\"20210001|\",new dbarray(\"GC\",\"AQ2\"))<\/pre>\n<p>&nbsp;<\/p>\n<h2 id=\"apertura-pagine\">Apertura di pagine interne ed esterne a Qualiware<\/h2>\n<h3 id=\"BrowserDo\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">BrowserDo<\/span><\/strong><\/h3>\n<p><code>Sub BrowserDo(ByVal Form, ByVal URL As String)<\/code><span style=\"color: #993366;\"><span style=\"color: #000000;\">&#8211;&gt; Versione desktop<\/span><strong><br \/>\n<\/strong><\/span><code>Sub BrowserDoMobile7(ByVal Form, ByVal URL As String)<\/code><span style=\"color: #993366;\"><span style=\"color: #000000;\">&#8211;&gt; Versione mobile<\/span><strong><br \/>\n<\/strong><\/span><\/p>\n<p>Questa funzione consentono di&nbsp; consente di aprire una funzione interna a Qualiware<\/p>\n<p><em>Parametri:<\/em><br \/>\nForm -&gt; riferimento al form<br \/>\nURL-&gt; nome della pagina ed eventuali parametri<\/p>\n<p>Esempio desktop<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"visualbasic\">BrowserDo(form,\"CAUSPAR.ASPX\")<\/pre>\n<p>Esempio mobile<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"visualbasic\">BrowserDoMobile7(form.page,\"MOBILE7_DOCUMENT97.ASPX?CODDOC=\" + escape(&lt;coddoc del documento&gt;))<\/pre>\n<h3 id=\"BrowserOpen\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">BrowserOpen<\/span><\/strong><\/h3>\n<p><code>Sub BrowserOpen(ByVal Form, ByVal URL As String)<\/code><span style=\"color: #993366;\"><span style=\"color: #000000;\">&#8211;&gt; Versione desktop<\/span><strong><br \/>\n<\/strong><\/span><code>Sub BrowserOpenMobile7(ByVal Form, ByVal URL As String)<\/code><span style=\"color: #993366;\"><span style=\"color: #000000;\">&#8211;&gt; Versione mobile<\/span><strong><br \/>\n<\/strong><\/span><\/p>\n<p>Questa funzione consentono di&nbsp; consente di aprire una pagina esterna a Qualiware<\/p>\n<p><em>Parametri:<\/em><br \/>\nForm -&gt; riferimento al form<br \/>\nURL-&gt; indirizzo della pagina<\/p>\n<p>Esempio<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"visualbasic\">BrowserOpen(form,\"https:\/\/www.google.com\")<\/pre>\n<p>&nbsp;<\/p>\n<h2 id=\"apertura-documenti\">Apertura di documenti e registrazioni<\/h2>\n<h3 id=\"OpenDocument\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">OpenDocument<\/span><\/strong><\/h3>\n<p><code>Sub OpenDocument(ByVal Form, ByVal IdDoc As String, ByVal CodDoc As String)<\/code><\/p>\n<p>Questa funzione consente di aprire un documento o una registrazione rispettando i diritti di modifica e lettura impostati.<\/p>\n<p>Parametri:<br \/>\nForm -&gt; riferimento al form<br \/>\nIdDoc -&gt; Tipo di documento o di registrazione da aprire<br \/>\nCodDoc -&gt; Codice del documento o della registrazione da aprire<\/p>\n<p>&nbsp;<\/p>\n<h2 id=\"anteprima-download\">Interazione con files<\/h2>\n<h3 id=\"File\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">File<\/span><\/strong><\/h3>\n<p><code>Function File(ByVal path As String) As Boolean<\/code><\/p>\n<p>Ritorna <code>True<\/code> se esiste il file con il path specificato.<\/p>\n<h3><strong><span style=\"font-family: 'courier new', courier, monospace;\">Sane_FileName<\/span><\/strong><\/h3>\n<p><code>Function Sane_FileName(ByVal s As String) As String<\/code><\/p>\n<p>Restituisce una stringa corrispondente al nome passato come argomento, con tutti i simboli vietati sostituiti da <code>_<\/code> (<em>underscore<\/em>) e troncamento a 150 caratteri.<\/p>\n<h3 id=\"CreatePreviewRequest\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">CreatePreviewRequest<\/span><\/strong><\/h3>\n<p><code>Sub CreatePreviewRequest(ByVal QWSess As QWSession, ByVal Filename As String, Optional ByVal name As String = Nothing, Optional ByVal share As Boolean = False, Optional ByVal title As String = Nothing, Optional Byval ForceBrowserPreview As Boolean=false, Optional Byval PageNo As Integer=0, Optional Byval Text As String=Nothing) As String<\/code><\/p>\n<p>Questa funzione restituisce la URL che consente di visualizzare l&#8217;anteprima di un file.<\/p>\n<p>Parametri:<br \/>\nQWSess -&gt; oggetto \u201csessione\u201d che pu\u00f2 essere recuperato con il metodo form.GetSession() nei form e DB.QWSession negli altri tipi di script.<br \/>\nFilename -&gt; Percorso del file<br \/>\nName -&gt; Nome del file da visualizzare nel download<br \/>\nShare -&gt; Se <em>True<\/em> l&#8217;anteprima verr\u00e0 mostrata nella finestra di condivisione<br \/>\nTitle -&gt; Titolo della finestra di anteprima (opzionale)<br \/>\nForceBrowserPreview -&gt; Se <em>True<\/em> l&#8217;anteprima verr\u00e0 visualizzata usando il visualizzatore PDF del browser (opzionale)<br \/>\nPageNo -&gt; Se specificato, l&#8217;anteprima si posizioner\u00e0 sulla pagina specificata<br \/>\nText -&gt; Se specificato, l&#8217;anteprima si posizioner\u00e0 sulla prima occorrenza del testo specificato<\/p>\n<h3 id=\"CreateEditRequest\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">CreateEditRequest<\/span><\/strong><\/h3>\n<p><code>Sub CreateEditRequest(ByVal Filename As String, Optional ByVal Name As String=Nothing, Optional Byval CodDoc As String=Nothing) As String<\/code><\/p>\n<p>Questa funzione restituisce la URL che&nbsp; consente di aprire un file in modifica con QWay Office.<\/p>\n<p>Parametri:<br \/>\nFilename -&gt; Percorso del file da modificare<br \/>\nName-&gt; Nome del file da visualizzare nel titolo della finestra di editing (opzionale)<br \/>\nCodDoc -&gt; Codice del documento da editare (opzionale). Se specificato, viene presentato il menu &#8220;Campi&#8221; che consente di inserire nel documento i &#8220;Campi Qualiware&#8221;.<\/p>\n<p>Esempio di utilizzo:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"visualbasic\">Dim CodDoc as string=PackCode(\"DW\",\"P\", \"ARC\",\"005\",9)\r\nDim path as string=form.GetSession().GetDocumentPath(CodDoc)\r\nDim url as String =CreateEditRequest(path,\"File da editare.docx\")\r\n\r\nBrowserOpen(form,url)<\/pre>\n<h3 id=\"EditDocumentCC\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">EditDocumentCC<\/span><\/strong><\/h3>\n<p><code>Sub EditDocumentCC(ByVal form As QWWebPage, ByVal coddoc As String)<\/code><\/p>\n<p>Questa funzione consente di aprire un file in modifica usando i Cloud Components<\/p>\n<p>Parametri:<br \/>\nForm -&gt; riferimento al form dal quale si richiama la funzione (N.B. \u00e8 utilizzabile solo in un form)<br \/>\nCodDoc -&gt; Codice del documento da editare, comprensivo di indice di revisione<\/p>\n<p>Esempio di utilizzo:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"visualbasic\">EditDocumentCC(form, \"P|0|00002|2|\")<\/pre>\n<h3 id=\"CreateDownloadRequest\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">CreateDownloadRequest<\/span><\/strong><\/h3>\n<p><code>Sub CreateDownloadRequest(ByVal Filename As String, Optional ByVal inline As Boolean = False, Optional ByVal name As String = Nothing) As String<\/code><\/p>\n<p>Questa funzione restituisce la URL che consente di effettuare il download di un file<\/p>\n<p>Parametri:<br \/>\nFilename -&gt; Percorso del file da scaricare<br \/>\ninline -&gt; lasciare false<br \/>\nName-&gt; nome del file scaricato<\/p>\n<h3 id=\"PrintExcelQuery\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">PrintExcelQuery<\/span><\/strong><\/h3>\n<p><code>Function PrintExcelQuery(ByVal session As QWSess, ByVal queryname As String, ByVal parameters As AssocArray, ByRef xlspath As String, ByRef htmpath As String) As String<\/code><\/p>\n<p>Questa funzione genera il report della query specificata in formato <code>.xlsx<\/code> (o <code>.xls<\/code>) e la salva nel path specificato.<\/p>\n<p>Ritorna un messaggio di errore se l&#8217;operazione non va a buon fine.<\/p>\n<p>Parametri:<br \/>\nsession -&gt; sessione corrente<br \/>\nqueryname -&gt; \u00c8 necessario indicare l\u2019intero percorso completo della query, fatta con l&#8217;<a href=\"https:\/\/help.qualiware.it\/qw-help\/queryform\/\">Esperto SQL<\/a> (va inclusa anche l&#8217;estensione <code>.sql<\/code>)<br \/>\nparameters -&gt; array associativo con i valori degli eventuali parametri richiesti dalla query<br \/>\nxlspath -&gt; path e nome del file con cui verr\u00e0 salvato il report (va inclusa anche l&#8217;estensione)<br \/>\nhtmpath -&gt; path e nome del file HTML contenente il grafico<\/p>\n<p>&nbsp;<\/p>\n<h2 id=\"bpm\">Gestione del workflow BPM<\/h2>\n<h3 id=\"BPMWorkflowAddPersons\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">BPMWorkflowAddPersons<\/span><\/strong><\/h3>\n<p><code> Function BPMWorkflowAddPersons(ByVal DB As QWDatabase, ByVal tipo As String, ByVal tipo_cont As String, ByVal numero As String, ByVal ind_rev As Integer, ByVal ActivityID As Integer, ByVal persons As DBArray, ByVal gg_rit As Integer) As String<\/code><\/p>\n<p><code>Function BPMWorkflowAddPersons(ByVal DB As QWDatabase, ByVal coddoc As String, ByVal ActivityID As Integer, ByVal persons As DBArray, ByVal gg_rit As Integer) As String<\/code><code><\/code><strong><br \/>\n<\/strong><br \/>\nQuesta funzione inserisce nello stesso tempo uno o pi\u00f9 utenti all&#8217;interno di una specifica attivit\u00e0 di workflow di un qualsiasi documento Qualiware in una categoria BPM.<br \/>\nLe persone vengono aggiunte alla fase specificata solamente se risultano gi\u00e0 come utenti coinvolgibili all&#8217;interno della fase in questione.<br \/>\nLa funzione restituisce il messaggio d&#8217;errore in caso di fallimento.<\/p>\n<p><em>Parametri:<\/em><br \/>\nDB -&gt; Oggetto database<br \/>\nTIPO -&gt; Codice della Categoria Documentale di Qualiware in cui risiede il documento target.<br \/>\nTIPO_CONT -&gt; Codice del documento target.<br \/>\nNUMERO -&gt; Numero del documento target.<br \/>\nIND_REV -&gt; Indice di Revisione del documento target.<br \/>\nCODDOC -&gt; codice univoco del documento.<br \/>\nACTIVITYID -&gt; ID dell&#8217;attivit\u00e0 in cui inserire l&#8217;elenco degli utenti specificati.<br \/>\nPERSONS -&gt; Array ad una sola dimensione che contiene l&#8217;elenco dei CODICI univoci degli utenti Qualiware da inserire nella fase di workflow.<br \/>\nGG_RIT -&gt; Giorni da aggiungere alla data corrente per calcolare la data di richiesta di completamento dell&#8217;attivit\u00e0.<\/p>\n<h3 id=\"BPMWorkflowDeletePersons\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">BPMWorkflowDeletePersons<\/span><\/strong><\/h3>\n<p><code> Function BPMWorkflowDeletePersons(ByVal DB As QWDatabase, ByVal tipo As String, ByVal tipo_cont As String, ByVal numero As String, ByVal ind_rev As Integer, ByVal ActivityID As Integer, ByVal persons As DBArray, ByVal all_not_signed As Boolean) As String<\/code><\/p>\n<p><code>Function BPMWorkflowDeletePersons(ByVal DB As QWDatabase, ByVal coddoc As String, ByVal ActivityID As Integer, ByVal persons As DBArray, ByVal all_not_signed As Boolean) As String<\/code><code><\/code><span style=\"color: #993366;\"><strong><br \/>\n<\/strong><\/span><br \/>\nQuesta funzione effettua l&#8217;eliminazione dell&#8217;elenco degli utenti specificato dalla attivit\u00e0 di workflow specificata. Se il dettaglio degli utenti non viene invece specificato, \u00e8 possibile cancellare da una attivit\u00e0 solo coloro i quali non hanno ancora espresso il proprio benestare o rifiuto.<br \/>\nSe il parametro ALL_NOT_SIGNED che per default \u00e8 FALSE viene impostato a TRUE, l&#8217;array dei CODICI utente non sar\u00f2 in alcun modo preso in considerazione.<br \/>\nLa funzione restituisce il messaggio d&#8217;errore in caso di fallimento.<\/p>\n<p><em>Parametri:<\/em><br \/>\nDB -&gt; Database<br \/>\nTIPO -&gt; Codice della Categoria Documentale di Qualiware in cui risiede il documento target.<br \/>\nTIPO_CONT -&gt; Codice del documento target.<br \/>\nNUMERO -&gt; Numero del documento target.<br \/>\nIND_REV -&gt; Indice di Revisione del documento target.<br \/>\nCODDOC -&gt; codice univoco del documento.<br \/>\nACTIVITYID -&gt; ID dell&#8217;attivit\u00e0 dalla quale eliminare le persone.<br \/>\nPERSONS -&gt; Array ad una sola dimensione contenente i CODICI univoci degli utenti Qualiware da cancellare.<br \/>\nALL_NOT_SIGNED -&gt; Di default \u00e8 impostato a FALSE e cos\u00ec viene utilizzato l&#8217;array PERSONS. Pu\u00f2 essere impostato a TRUE nel caso in cui si voglia cancellare tutti gli utenti che, come detto, ancora non hanno espresso alcuna preferenza.<\/p>\n<h3 id=\"BPMWorkflowGetPersons\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">BPMWorkflowGetPersons<\/span><\/strong><\/h3>\n<p><code> Function BPMWorkflowGetPersons(ByVal DB As QWDatabase, ByVal tipo As String, ByVal tipo_cont As String, ByVal numero As String, ByVal ind_rev As Integer, ByVal ActivityID As Integer) As DBArray<\/code><\/p>\n<p><code>Function BPMWorkflowGetPersons(ByVal DB As QWDatabase, ByVal coddoc As String, ByVal ActivityID As Integer) As DBArray<\/code><\/p>\n<p>Questa funzione restituisce un Array ad una sola dimensione per la lettura dell&#8217;elenco degli utenti presenti all&#8217;interno della attivit\u00e0 di workflow specificata.<\/p>\n<p><em>Parametri:<\/em><br \/>\nDB -&gt; Database<br \/>\nTIPO -&gt; Codice della Categoria Documentale di Qualiware in cui risiede il documento target.<br \/>\nTIPO_CONT -&gt; Codice del documento target.<br \/>\nNUMERO -&gt; Numero del documento target.<br \/>\nIND_REV -&gt; Indice di Revisione del documento target.<br \/>\nCODDOC -&gt; codice univoco del documento.<br \/>\nACTIVITYID -&gt; ID dell&#8217;attivit\u00e0 della quale recuperare le persone coinvolte.<\/p>\n<h3 id=\"BPMWorkflowSign\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">BPMWorkflowSign<\/span><\/strong><\/h3>\n<p><code>Function BPMWorkflowSign(ByVal DB As QWDatabase, ByVal tipo As String, ByVal tipo_cont As String, ByVal numero As String, ByVal ind_rev As Integer, ByVal ActivityID As Integer, ByVal name As String, ByVal date_sf As Date, ByVal sign As Boolean, ByVal refuse As Boolean, ByVal refuse_reason As String) As String<\/code><strong><br \/>\n<\/strong><\/p>\n<p><code>Function BPMWorkflowSign(ByVal DB As QWDatabase, ByVal coddoc As String, ByVal ActivityID As Integer, ByVal name As String, ByVal date_sf As Date, ByVal sign As Boolean, ByVal refuse As Boolean, ByVal refuse_reason As String) As String<\/code><strong><br \/>\n<\/strong><br \/>\nQuesta funzione appone il visto di benestare, oppure di rifiuto (con motivazione), di UN utente all&#8217;interno di una specifica attivit\u00e0 di workflow in una categoria BPM<br \/>\n\u00c8 quindi possibile, partendo da una categoria documentale X, apporre visti di persone all&#8217;interno del workflow di un documento della categoria documentale Y.<br \/>\nLa funzione restituisce il messaggio d&#8217;errore in caso di fallimento<\/p>\n<p><em>Parametri:<\/em><br \/>\nFORM -&gt; Oggetto chiamante.<br \/>\nTIPO -&gt; Codice della Categoria Documentale di Qualiware in cui risiede il documento target.<br \/>\nTIPO_CONT -&gt; Codice del documento target.<br \/>\nNUMERO -&gt; Numero del documento target.<br \/>\nIND_REV -&gt; Indice di Revisione del documento target.<br \/>\nCODDOC -&gt; codice univoco del documento.<br \/>\nACTIVITYID -&gt; ID dell&#8217;attivit\u00e0 in cui inserire il visto dell&#8217;utente specificato.<br \/>\nNAME -&gt; CODICE univoco dell&#8217;utente Qualiware per cui inserire il visto nella fase di workflow specificata.<br \/>\nDATE_SF -&gt; Data di apposizione del visto.<br \/>\nSIGN -&gt; Benestare.<br \/>\nREFUSE -&gt; Rifiuto.<br \/>\nREFUSE_REASON -&gt; Motivazione del Rifiuto.<\/p>\n<h3 id=\"BPMWorkflowWriteEvent\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">BPMWorkflowWriteEvent<\/span><\/strong><\/h3>\n<p><code> Sub BPMWorkflowWriteEvent(ByVal DB As QWDatabase, ByVal CODDOC As String, ByVal ActivityID As Integer, ByVal Description As String, Optional ByVal OTLP_TraceId As String=Nothing, Optional ByVal OTLP_SpanId As String=Nothing, Optional ByVal Level As Int16=0)<\/code><\/p>\n<p>Questa funzione registra un evento utente nella tabella degli eventi del Workflow WF_EVENTS e nella tabella LOGDOC<\/p>\n<p><em>Parametri:<\/em><br \/>\nDB -&gt; Database<br \/>\nCODDOC -&gt; Codice del documento<br \/>\nActivityId -&gt; ID dell&#8217;attivit\u00e0 alla quale si riferisce la registrazione nel log.<br \/>\nDescription -&gt; Descrizione dell&#8217;evento<br \/>\nOTLP_TraceID -&gt; TraceID del protocollo <a href=\"https:\/\/opentelemetry.io\/docs\/specs\/otel\/trace\/api\/#span\" target=\"_blank\" rel=\"noopener\">OTLP<\/a> (opzionale)<br \/>\nOTLP_SpanID -&gt; SpanID del protocollo <a href=\"https:\/\/opentelemetry.io\/docs\/specs\/otel\/trace\/api\/#span\" target=\"_blank\" rel=\"noopener\">OTLP<\/a> (opzionale)<br \/>\nLevel-&gt; Livello di gravit\u00e0 della registrazione. 0=Informazione (default), 1=Warning, 2=Error (opzionale)<\/p>\n<h3 id=\"BPMProcessWorkflow\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">BPMProcessWorkflow<\/span><\/strong><\/h3>\n<p><code>Function BPMProcessWorkflow(ByVal DB As QWDataBase, ByVal CODDOC As String) as String<\/code><\/p>\n<p>Questa funzione elabora il workflow di un documento, effettuando eventuali transizioni di stato e le azioni conseguenti<\/p>\n<p><em>Parametri:<\/em><br \/>\nDB -&gt; Database<br \/>\nCODDOC -&gt; Codice del documento<\/p>\n<p>Ritorna: l&#8217;eventuale messaggio di errore.<\/p>\n<h3 id=\"BPMRemoveWorkflow\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">BPMRemoveWorkflow<\/span><\/strong><\/h3>\n<p><code>Sub BPMRemoveWorkflow(ByVal DB As QWDataBase, ByVal CODDOC As String)<\/code><\/p>\n<p>Questa funzione effettua il reset del workflow di un documento<\/p>\n<p><em>Parametri:<\/em><br \/>\nDB -&gt; Database<br \/>\nCODDOC -&gt; Codice del documento<\/p>\n<h3 id=\"BPMGetCurrentWorkflowActivity\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">BPMGetCurrentWorkflowActivity<\/span><\/strong><\/h3>\n<p><code>Sub BPMGetCurrentWorkflowActivity(ByVal DB As QWDataBase, ByVal CODDOC As String, ByRef ActivitiesLabel As DBArray, ByRef ActivitiesDescription As DBArray, Optional ByRef ActivitiesID As DBArray=Nothing)<\/code><\/p>\n<p>Questa funzione determina le attivit\u00e0 in corso restituendone le lettere identificative e le descrizioni in altrettanti array<\/p>\n<p><em>Parametri:<\/em><br \/>\nDB -&gt; Database<br \/>\nCODDOC -&gt; Codice del documento<br \/>\nActivitiesLabel -&gt; Oggetto DBArray contenente le lettere identificative delle attivit\u00e0 aperte<br \/>\nActivitiesDescription -&gt; Oggetto DBArray contenente le descrizioni delle attivit\u00e0 aperte<br \/>\nActivitiesID -&gt; Oggetto DBArray contenente gli ID numerici delle attivit\u00e0 aperte (opzionale, disponibile dalla release 2025.00.05) <span style=\"font-size: 12pt; font-family: Wingdings; background: yellow;\">\u00df<\/span><span style=\"font-family: Aptos, sans-serif; font-size: 12pt; background: yellow;\"> Gli elementi sono di tipo \u201cInt16\u201d, e non \u201cinteger\u201d, pertanto se si utilizza la funzione \u201cscan\u201d \u00e8 necessario effettuare una conversione di tipo nell\u2019argomento ad essa passato.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h3 id=\"BPMSendMail\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">BPMSendMail<\/span><\/strong><\/h3>\n<p><code>Function BPMSendMail (ByVal DB As QWDatabase, ByVal CODDOC As String, ByVal recipients As DBArray, ByVal subject As String, ByVal text As String, ByVal attach As Boolean)<\/code><\/p>\n<p>Queta funzione pu\u00f2 essere utilizzata per inviare una email durante l\u2019esecuzione di un flusso BPM.<\/p>\n<p><em>Parametri:<\/em><br \/>\nDB -&gt; Database<br \/>\nCODDOC -&gt; codice univoco del documento.<br \/>\nRECIPIENTS -&gt; Array ad una sola dimensione contenente gli indirizzi email degli utenti a cui inviare il messaggio.<br \/>\nSUBJECT -&gt; oggetto del messaggio<br \/>\nTEXT -&gt; testo del messaggio<br \/>\nATTACH -&gt; allega una copia del documento alla mail<\/p>\n<p>&nbsp;<\/p>\n<h2 id=\"gestione-workflow-classico\">Gestione del workflow documentale di tipo classico<\/h2>\n<h3 id=\"WorkflowAddPersons\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">WorkflowAddPersons<\/span><\/strong><\/h3>\n<p><code>Function WorkflowAddPersons(ByVal form As Object, ByVal tipo As String, ByVal tipo_cont As String, ByVal numero As String, ByVal ind_rev As Integer, ByVal phase As String, ByVal persons As DBArray, ByVal gg_rit As Integer) As Boolean<\/code><strong><br \/>\n<\/strong><br \/>\nQuesta funzione inserisce nello stesso tempo uno o pi\u00f9 utenti all&#8217;interno di una specificata fase di workflow di un qualsiasi documento Qualiware.<br \/>\n\u00c8 quindi possibile, partendo da una categoria documentale X, inserire persone all&#8217;interno del workflow di un documento della categoria documentale Y.<br \/>\nLa funzione restituisce TRUE in caso di successo e FALSE in caso di fallimento.<\/p>\n<p><em>Parametri:<\/em><br \/>\nFORM -&gt; Oggetto chiamante.<br \/>\nTIPO -&gt; Codice della Categoria Documentale di Qualiware in cui risiede il documento target.<br \/>\nTIPO_CONT -&gt; Codice del documento target.<br \/>\nNUMERO -&gt; Numero del documento target.<br \/>\nIND_REV -&gt; Indice di Revisione del documento target.<br \/>\nPHASE -&gt; Fase del documento target in cui inserire l&#8217;elenco degli utenti specificati.<br \/>\nPERSONS -&gt; Array ad una sola dimensione che contiene l&#8217;elenco dei CODICI univoci degli utenti Qualiware da inserire nella fase di workflow.<br \/>\nGG_RIT -&gt; Giorni da aggiungere alla data corrente per calcolare la data di richiesta di completamento dell&#8217;attivit\u00e0.<\/p>\n<h3 id=\"WorkflowSign\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">WorkflowSign<\/span><\/strong><\/h3>\n<p><code>Function WorkflowSign(ByVal form As Object, ByVal tipo As String, ByVal tipo_cont As String, ByVal numero As String, ByVal ind_rev As Integer, ByVal phase As String, ByVal name As String, ByVal date_sf As Date, ByVal sign As Boolean, ByVal refuse As Boolean, ByVal refuse_reason As String) As Boolean<\/code><\/p>\n<p>Questa funzione appone il visto di benestare, oppure di rifiuto (con motivazione), di UN utente all&#8217;interno di una specificata fase di workflow.<br \/>\n\u00c8 quindi possibile, partendo da una categoria documentale X, apporre visti di persone all&#8217;interno del workflow di un documento della categoria documentale Y.<br \/>\nLa funzione restituisce TRUE in caso di successo e FALSE in caso di fallimento.<\/p>\n<p><em>Parametri:<\/em><br \/>\nFORM -&gt; Oggetto chiamante.<br \/>\nTIPO -&gt; Codice della Categoria Documentale di Qualiware in cui risiede il documento target.<br \/>\nTIPO_CONT -&gt; Codice del documento target.<br \/>\nNUMERO -&gt; Numero del documento target.<br \/>\nIND_REV -&gt; Indice di Revisione del documento target.<br \/>\nPHASE -&gt; Fase del documento target in cui inserire il visto dell&#8217;utente specificato.<br \/>\nNAME -&gt; CODICE univoco dell&#8217;utente Qualiware per cui inserire il visto nella fase di workflow specificata.<br \/>\nDATE_SF -&gt; Data di apposizione del visto.<br \/>\nSIGN -&gt; Benestare.<br \/>\nREFUSE -&gt; Rifiuto.<br \/>\nREFUSE_REASON -&gt; Motivazione del Rifiuto.<\/p>\n<h3 id=\"WorkflowGetPersons\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">WorkflowGetPersons<\/span><\/strong><\/h3>\n<p><code>Function WorkflowGetPersons(ByVal form As Object, ByVal tipo As String, ByVal tipo_cont As String, ByVal numero As String, ByVal ind_rev As Integer, ByVal phase As String) As DBArray<\/code><\/p>\n<p>Questa funzione restituisce un Array ad una sola dimensione per la lettura dell&#8217;elenco degli utenti presenti all&#8217;interno della fase di workflow specificata.<\/p>\n<p><em>Parametri:<\/em><br \/>\nFORM -&gt; Oggetto chiamante.<br \/>\nTIPO -&gt; Codice della Categoria Documentale di Qualiware in cui risiede il documento target.<br \/>\nTIPO_CONT -&gt; Codice del documento target.<br \/>\nNUMERO -&gt; Numero del documento target.<br \/>\nIND_REV -&gt; Indice di Revisione del documento target.<br \/>\nPHASE -&gt; Fase del documento target in cui inserire il visto dell&#8217;utente specificato.<\/p>\n<h3 id=\"WorkflowDeletePersons\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">WorkflowDeletePersons<\/span><\/strong><\/h3>\n<p><code>Function WorkflowDeletePersons(ByVal form As Object, ByVal tipo As String, ByVal tipo_cont As String, ByVal numero As String, ByVal ind_rev As Integer, ByVal phase As String, ByVal persons As DBArray, ByVal all_not_signed As Boolean) As Boolean<\/code><strong><br \/>\n<\/strong><\/p>\n<p>Questa funzione effettua l&#8217;eliminazione dell&#8217;elenco degli utenti specificato dalla fase di workflow specificata. Se il dettaglio degli utenti non viene invece specificato, \u00e8 possibile cancellare da una fase solo coloro i quali non hanno ancora espresso il proprio benestare o rifiuto.Se il parametro ALL_NOT_SIGNED che per default \u00e8 FALSE viene impostato a TRUE, l&#8217;array dei CODICI utente non sar\u00f2 in alcun modo preso in considerazione. La funzione restituisce TRUE in caso di successo e FALSE in caso di fallimento.<\/p>\n<p><em>Parametri:<br \/>\n<\/em>FORM -&gt; Oggetto chiamante.<br \/>\nTIPO -&gt; Codice della Categoria Documentale di Qualiware in cui risiede il documento target.<br \/>\nTIPO_CONT -&gt; Codice del documento target.<br \/>\nNUMERO -&gt; Numero del documento target.<br \/>\nIND_REV -&gt; Indice di Revisione del documento target.<br \/>\nPHASE -&gt; Fase del documento target in cui inserire il visto dell&#8217;utente specificato.<br \/>\nPERSONS -&gt; Array ad una sola dimensione contenente i CODICI univoci degli utenti Qualiware da cancellare.<br \/>\nALL_NOT_SIGNED -&gt; Di default \u00e8 impostato a FALSE e cos\u00ec viene utilizzato l&#8217;array PERSONS.&nbsp; Pu\u00f2 essere impostato a TRUE nel caso in cui si voglia cancellare tutti gli utenti che, come detto, ancora non hanno espresso alcuna preferenza.<\/p>\n<p>&nbsp;<\/p>\n<h2 id=\"invio-mail\">Invio di e-mail<\/h2>\n<h3 id=\"SendMail\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">SendMail<\/span><\/strong><\/h3>\n<p><code>Function SendMail(ByVal DB As Object, ByVal TipoDoc As String, ByVal CodDoc As String, ByVal aDest As DBArray, ByVal aDestCC As DBArray, ByVal aDestBCC As DBArray, ByVal Subj As String, ByVal Txt As String, ByVal show As Boolean, optional ByVal sender As String=Nothing) As Boolean<\/code><strong><br \/>\n<\/strong><br \/>\nQuesta funzione effettua l&#8217;invio di una email agli utenti oppure all&#8217;elenco di indirizzi di posta elettronica specificati.<br \/>\nSe i parametri TIPODOC e CODDOC vengono specificati, allora saranno aggiunti all&#8217;email i riferimenti Qualiware (allegato per la versione client\/server ed hyperlink per la versione web server) al documento referenziato da TIPODOC e CODDOC.<br \/>\nLa funzione restituisce TRUE in caso di successo e FALSE in caso di fallimento.<\/p>\n<p><em>Parametri:<\/em><br \/>\nDB -&gt; Database corrispondente alla sessione corrente.<br \/>\nTIPODOC -&gt; Codice del Modulo di Qualiware in cui risiede il documento target.<br \/>\nCODDOC -&gt; Codice univoco del documento target.<br \/>\nADEST -&gt; Array ad una sola dimensione contenente: l&#8217;elenco degli indirizzi email OPPURE i CODICI univoci degli utenti Qualiware OPPURE l&#8217;elenco dei NOMI (Cognome + Nome oppure Nome + Cognome) degli utenti Qualiware a cui inviare l&#8217;email. Questi saranno i destinatari diretti dell&#8217;email (A).<br \/>\nADESTCC -&gt; Array ad una sola dimensione contenente: l&#8217;elenco degli indirizzi email OPPURE i CODICI univoci degli utenti Qualiware OPPURE l&#8217;elenco dei NOMI (Cognome + Nome oppure Nome + Cognome) degli utenti Qualiware a cui inviare l&#8217;email. Questi saranno i destinatari in copia carbone dell&#8217;email (CC).<br \/>\nADESTBCC -&gt; Array ad una sola dimensione contenente: l&#8217;elenco degli indirizzi email OPPURE i CODICI univoci degli utenti Qualiware OPPURE l&#8217;elenco dei NOMI (Cognome + Nome oppure Nome + Cognome) degli utenti Qualiware a cui inviare l&#8217;email. Questi saranno i destinatari in copia carbone nascosta dell&#8217;email (CCN o BCC).<br \/>\nSUBJ -&gt; Oggetto dell&#8217;email. Se lasciato vuoto, sar\u00e0 inserito un oggetto standard con il riferimento univoco Qualiware al documento.<br \/>\nTXT -&gt; Testo dell&#8217;email.<br \/>\nSHOW -&gt; Di default \u00e8 impostato a FALSE e cos\u00ec l&#8217;email viene inviata automaticamente e silenziosamente senza alcun intervento da parte dell&#8217;utente. Pu\u00f2 essere impostato a TRUE nel caso in cui si voglia delegare l&#8217;invio dell&#8217;email ad un intervento da parte dell&#8217;utente.<br \/>\nSENDER -&gt; indirizzo del mittente (opzionale, se non specificato viene usato l&#8217;indirizzo e-mail specificato nel campo &#8220;Mittente e-mail&#8221; della scheda &#8220;Dati di configurazione generale&#8221;).<\/p>\n<h3 id=\"SendMail\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">CheckMail<\/span><\/strong><\/h3>\n<p><code>Function CheckMail(ByVal address As String) As Boolean<\/code><strong><br \/>\n<\/strong><br \/>\nQuesta funzione verifica la validit\u00e0 del formato di un indirizzo e-mail, ritornando TRUE se \u00e8 valido, FALSE altrimenti.<\/p>\n<p>&nbsp;<\/p>\n<h2 id=\"machine-learning\">Machine learning<\/h2>\n<h3><strong><span style=\"font-family: 'courier new', courier, monospace;\">Prediction<\/span><\/strong><\/h3>\n<p><code>Function Prediction(ByVal QWSess As QWSession, ModelCode As string, Byval Values As assocarray, optional byref errmsg As String=\"\", Optional ByRef Score As Single=0) As object<\/code><strong><br \/>\n<\/strong><br \/>\nEffettua la stima di un valore a partire dal modello con codice <strong>ModelCode <\/strong>e utilizzando i valori presenti nell\u2019array associativo <strong>Values<\/strong>. Eventuali errori sono restituiti nella variabile <strong>errmsg<\/strong>, mentre i il parametro opzionale <strong>Score <\/strong> rappresenta la \u201cprobabilit\u00e0\u201d del valore ed \u00e8 assegnata solo per Classificazione Multiclasse e Binaria. <strong>QWSess <\/strong> rappresenta l\u2019oggetto \u201csessione\u201d che pu\u00f2 essere recuperato con il metodo form.GetSession() nei form e DB.QWSession negli altri tipi di script.<\/p>\n<p>&nbsp;<\/p>\n<h2 id=\"barcode\">Barcode<\/h2>\n<h3 id=\"ReadBarcode\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">ReadBarcode<\/span><\/strong><\/h3>\n<p><code>Function ReadBarcode(nomefile As String, TypeToFind As Integer, Orientation As Integer, ScanArea As Integer, NMaxBarcode As Integer, ByRef errmsg As String) As DBArray&nbsp;<\/code><strong><br \/>\n<\/strong><\/p>\n<p>Effettua il riconoscimento di uno o pi\u00f9 barcode a partire da un file PDF o da un&#8217;immagine contenuta nel file il cui percorso \u00e8 contenuto nel parametro <strong>nomefile<\/strong>.<br \/>\nLa funzione restituisce un array contenente tutti i barcode individuati nell&#8217;immagine.<br \/>\nIl parametro <strong>TypeToFind<\/strong> contiene il tipo di barcode da riconoscere, e pu\u00f2 assumere i seguenti valori:<\/p>\n<ul>\n<li>0=Tutti<\/li>\n<li>1=EAN8<\/li>\n<li>2=EAN13<\/li>\n<li>4=UPCE<\/li>\n<li>8=UPCA<\/li>\n<li>16=Interleaved2of5<\/li>\n<li>32=Code39<\/li>\n<li>64=Code128<\/li>\n<li>128=EAN2<\/li>\n<li>256=EAN5<\/li>\n<li>512=GS1<\/li>\n<li>1024=Codabar<\/li>\n<li>10001=DataMatrix<\/li>\n<li>10002=PDF417<\/li>\n<li>10003=QRCode<\/li>\n<li>10004=Aztec<\/li>\n<li>10005=MaxiCode<\/li>\n<li>10006=MICR<\/li>\n<li>10007=CodablockF<\/li>\n<li>10008=Code16K<\/li>\n<li>10009=MicroPDF<\/li>\n<\/ul>\n<p>La specifica di un tipo da riconoscere rende l&#8217;elaborazione pi\u00f9 rapida.<\/p>\n<p>Il parametro <strong>Orientation<\/strong> consente di specificare l&#8217;orientamento dei barcode nell&#8217;immagine. Pu\u00f2 assumere i seguenti valori:<\/p>\n<ul>\n<li>0=Qualsiasi<\/li>\n<li>1= Orizzontale da sinistra a destra<\/li>\n<li>2=Verticale dall&#8217;alto al basso<\/li>\n<li>4=Diagonale dall&#8217;angolo superiore a sinistra all&#8217;angolo in basso a destra<\/li>\n<li>8=Diagonale dall&#8217;angolo in basso a sinistra all&#8217;angolo in alto a destra<\/li>\n<li>16=Orizzontale da destra a sinistra<\/li>\n<li>32768=Verticale dal basso in alto<\/li>\n<\/ul>\n<p>La specifica di un orientamento rende l&#8217;elaborazione pi\u00f9 rapida.<\/p>\n<p>Il parametro <strong>ScanArea<\/strong> permette di specificare l&#8217;area della pagina nella quale effettuare il riconoscimento. Pu\u00f2 assumere i seguenti valori:<\/p>\n<ul>\n<li>0=Intera pagina<\/li>\n<li>1=Quadrante in alto a sinistra<\/li>\n<li>2=Quadrante in alto a destra<\/li>\n<li>3=Met\u00e0 superiore<\/li>\n<li>4=Quadrante in basso a destra<\/li>\n<li>8=Quadrante in basso a sinistra<\/li>\n<li>12=Met\u00e0 inferiore<\/li>\n<\/ul>\n<p>NOTA: questo parametro non \u00e8 pi\u00f9 utilizzato dalla versione 2021.06+4. La scansione avviene sempre sull&#8217;intera pagina.<\/p>\n<p>Il parametro <strong>NMaxBarcode<\/strong> contiene il numero massimo di barcode da restituire.<\/p>\n<p>Nel parametro <strong>errmsg<\/strong> vengono restituiti eventuali messaggi d&#8217;errore (vuoto=nessun errore).<\/p>\n<p>Ad esempio, il seguente codice pu\u00f2 essere inserito in un oggetto &#8220;Procedura&#8221; che viene specificato come parametro nella chiamata di una funzione &#8220;form.AcquirePicture&#8221;.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"visualbasic\">dim err as string dim barcodes as dbarray \r\nbarcodes=ReadBarcode(Parameter1, 0, 0, 0, 1, err) \r\nform.alert(Array2String(barcodes)) \r\nform.alert(err)<\/pre>\n<h3><strong><span style=\"font-family: 'courier new', courier, monospace;\">GenerateBarCode<\/span><\/strong><\/h3>\n<p><code>Function GenerateBarCode(ByVal BarcodeType As Integer, ByVal value As string, Optional ByVal ShowText As Boolean=false) As String&nbsp;<\/code><strong><br \/>\n<\/strong><\/p>\n<p>Genera un&#8217;immagine contenente il barcode specificato e ritorna il nome del file, comprensivo di percorso, che la contiene.<br \/>\nIl parametro <strong>BarCodeType<\/strong> contiene il tipo di barcode da generare, e pu\u00f2 assumere i seguenti valori:<\/p>\n<ul>\n<li>1=QRCode<\/li>\n<li>2=Code39<\/li>\n<li>3=Code128<\/li>\n<li>4=EAN8<\/li>\n<li>5=EAN13<\/li>\n<\/ul>\n<p>Il parametro <strong>value <\/strong>contiene il testo da riportare nel barcode.<br \/>\nIl parametro opzionale <b>ShowText<\/b> se assegnato a <em>true<\/em> consente di visualizzare il testo sotto il barcode.<\/p>\n<p>&nbsp;<\/p>\n<h2 id=\"traduzione-testi\">Traduzione di testi<\/h2>\n<h3 id=\"QWTranslateBing\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">QWTranslateBing<\/span><\/strong><\/h3>\n<p><code> Function QWTranslateBing(ByVal s As String, ByVal lang As String) As String<\/code><strong><br \/>\n<\/strong><br \/>\nQuesta funzione consente di tradurre un testo specificato nel parametro <strong>s<\/strong>&nbsp;nella lingua specificata nel parametro <strong>lang<\/strong>.<\/p>\n<p>Il parametro <strong>lang<\/strong> contiene il codice della lingua (culture), che pu\u00f2 essere uno dei seguenti:<\/p>\n<p>it = italiano<br \/>\nen = inglese<br \/>\nde = tedesco<br \/>\nfr = francese<br \/>\nes = spagna<br \/>\nro = rumeno<br \/>\npt = portoghese<br \/>\nbg = bulgaro<br \/>\nel = greco<br \/>\nzh = cinese<br \/>\ncs = ceco<\/p>\n<p>&nbsp;<\/p>\n<h2 id=\"accesso-rete\">Accesso alla rete<\/h2>\n<h3 id=\"ConnectToShare\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">ConnectToShare<\/span><\/strong><\/h3>\n<p><code>Function ConnectToShare(ByVal resource As String, ByVal user As String, ByVal password As String, ByVal domain As String) As String<\/code><strong><br \/>\n<\/strong><br \/>\nQuesta funzione consente di aprire la connessione verso una share di rete presente su un altro dominio, specificando utente, password e dominio, e ritornando l&#8217;eventuale messaggio d&#8217;errore nel caso la connessione fallisca.<\/p>\n<h3 id=\"DisconnectFromShare\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">DisconnectFromShare<\/span><\/strong><\/h3>\n<p><code>Function DisconnectFromShare(ByVal path As String) As Boolean<\/code><\/p>\n<p>Questa funzione chiude la connessione, ritornando &#8220;true&#8221; se la disconnessione \u00e8 riuscita.<\/p>\n<p>Il seguente frammento di codice mostra un esempio di come sia possibile enumerare i file contenuti in una share utilizzando queste due primitive.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"visualbasic\">dim err as string\r\nerr=ConnectToShare(\"\\\\server\\share\",\"utente\",\"password\",\"dominio\")\r\n\r\nif err&lt;&gt;\"\"\r\n   form.alert(err)\r\n   return\r\nEnd If\r\n\r\ndim f as new dbarray()\r\nf.dir(\"\\\\server\\share\\sottocartella\\*.*\")\r\n\r\ndim i as integer\r\ndim files as string=\"\"\r\nfor i=1 to f.size\r\n    files+=f(i)+vbCr\r\nnext\r\n\r\nDisconnectFromShare(\"\\\\server\\share\")\r\n\r\nform.alert(files)<\/pre>\n<p>&nbsp;<\/p>\n<h2 id=\"Firma digitale\">Firma digitale<\/h2>\n<h3 id=\"P7MExtract\"><strong><span style=\"font-family: courier new, courier, monospace;\">P7MExtract<\/span><\/strong><\/h3>\n<p><code>Function P7MExtract(ByVal filename As string, Optional ByRef signer As string=nothing) As String<\/code><strong><br \/>\n<\/strong><br \/>\nQuesta funzione estrae e ritorna il percorso del file contenuto in un file P7M firmato digitalmente, il cui percorso \u00e8 specificato nel parametro &#8220;filename&#8221;. Nel parametro opzionale &#8220;signer&#8221; \u00e8 contenuta la descrizione delle firme digitali presenti nel file specificato.<\/p>\n<h3 id=\"ARSS_Sign\"><strong><span style=\"font-family: courier new, courier, monospace;\">ARSS_Sign<\/span><\/strong><\/h3>\n<p><code>Sub ARSS_Sign(obj As qwWebControls.QWWebProcedureCode, ByVal IDDOC As String, byval CODDOC As string, Optional ByVal UserCode As String = Nothing, Optional ByVal Pdf As Boolean = true, Optional byval [EventName] As String=\"onExecute\")<\/code><\/p>\n<p>La funzione consente di firmare un documento utilizzando la <a href=\"https:\/\/help.qualiware.it\/qw-help\/firma-digitale-qualificata-remota-con-aruba\/\">firma remota Aruba<\/a>. Verr\u00e0 aperta una finestra di dialogo per l&#8217;inserimento delle credenziali e, al termine della firma, verr\u00e0 richiamato l&#8217;EventoEsegui dell&#8217;oggetto obj, che presenter\u00e0 all\u2019interno del Parameter1 il percorso del file firmato.<br \/>\nSe la firma non viene applicata, non verr\u00e0 attivato l&#8217;evento.<\/p>\n<p><em>Parametri:<br \/>\n<\/em>obj -&gt; oggetto procedura da richiamare una volta completata la firma<br \/>\nIDDOC -&gt; ID del documento da firmare. es. \u201cDW\u201d<br \/>\nCODDOC -&gt; Codice univoco del documento da firmare<br \/>\nUserCode-&gt; Codice dell\u2019utente che inserisce la firma<br \/>\nPdf -&gt; se posto a True verr\u00e0 firmato il file PDF .pdf , altrimenti verr\u00e0 creato un .p7m<br \/>\nEventName -&gt; Nome dell\u2019evento di OBJ da richiamare al termine dell\u2019inserimento della firma (default: &#8220;onExecute&#8221;)<\/p>\n<h3 id=\"XMLSign\"><strong><span style=\"font-family: courier new, courier, monospace;\">XMLSign<\/span><\/strong><\/h3>\n<p><code>Function XMLSign(ByVal XMLToSignPath As String, ByVal P12Path As String, ByVal P12Password As String) As String<\/code><\/p>\n<p>La funzione consente di firmare un file XML utilizzando un certificato P12 e la relativa password. Ritorna il percorso del file firmato.<\/p>\n<p><em>Parametri:<br \/>\n<\/em>XMLToSignPath -&gt; percorso del file XML da firmare<br \/>\nP12Path -&gt; percorso del certificato P12<br \/>\nP12Password -&gt; password del certificato P12<\/p>\n<h2 id=\"Crittografia\">Crittografia<\/h2>\n<h3 id=\"Encrypt\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">Encrypt<\/span><\/strong><\/h3>\n<p><code>Function Encrypt(ByVal s As String) As String<\/code><strong><br \/>\n<\/strong><br \/>\nQuesta funzione consente di crittografare la stringa passata nel parametro &#8220;s&#8221;.<\/p>\n<h3 id=\"Decrypt\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">Decrypt<\/span><\/strong><\/h3>\n<p><code>Function Decrypt(ByVal s As String) As String<\/code><strong><br \/>\n<\/strong><br \/>\nQuesta funzione consente di decrittografare la stringa passata nel parametro &#8220;s&#8221;.<\/p>\n<h3 id=\"Codifica_PW\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">Codifica_PW<\/span><\/strong><\/h3>\n<p><code>Function Codifica_PW(ByVal CodiceUtente As String, ByVal password As String) As String<\/code><\/p>\n<p>Questa funzione restituisce la versione criptata della password specificata. Va passato anche il codice utente in quanto parte della chiave di codifica.<\/p>\n<h2 id=\"logging\">Logging<\/h2>\n<h3 id=\"WriteLog\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">WriteLog<\/span><\/strong><\/h3>\n<p><code>Sub WriteLog(ByVal message As String)<\/code><\/p>\n<p>Effettua il log del messaggio passato come argomento all&#8217;interno del file <em>error.log<\/em>.<\/p>\n<p>\u00c8 possibile trovare il suddetto file all&#8217;interno della directory principale di installazione di Qualiware. Di base la directory \u00e8 chiamata <em>Qualiware Web Server<\/em>.<\/p>\n<h3 id=\"Write_LogDoc\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">Write_LogDoc<\/span><\/strong><\/h3>\n<p><code>Function Write_LogDoc(ByVal QWSess As QWSession, ByVal iddoc As String, ByVal coddoc As String, ByVal top As Integer, ByVal note As String, Optional ByVal usercode As String = Nothing, Optional ByVal deleted_data As String = Nothing, Optional ByVal OTLP_TraceId As String=Nothing, Optional ByVal OTLP_SpanId As String=Nothing, Optional ByVal Level As Int16=0) As Boolean<\/code><\/p>\n<p>Questa funzione consente di registrare una voce di log nella tabella LOGDOC.<\/p>\n<p><em>Parametri:<\/em><br \/>\nQWSess -&gt; Riferimento alla sessione (es. reperita con form.GetSession() o DB.QWSession)<br \/>\niddoc -&gt; IdDoc del documento, oppure &#8220;**&#8221;<br \/>\ncoddoc -&gt; CodDoc del documento, oppure un valore arbitrario per registrare operazioni non legate ad un documento specifico<br \/>\ntop -&gt; codice tipo operazione. Usare valori superiori a 100 &#8211; vedere nota.<br \/>\nnote -&gt; testo da riportare nella registrazione.<br \/>\nusercode -&gt; codice dell&#8217;utente al quale attribuire l&#8217;operazione. Se non specificato, viene usato il codice dell&#8217;utente autenticato.<br \/>\ndeleted_data -&gt; uso interno, lasciare a nothing se si specificano i due parametri successivi.<br \/>\nOTLP_TraceID -&gt; TraceID del protocollo <a href=\"https:\/\/opentelemetry.io\/docs\/specs\/otel\/trace\/api\/#span\" target=\"_blank\" rel=\"noopener\">OTLP<\/a> (opzionale)<br \/>\nOTLP_SpanID -&gt; SpanID del protocollo <a href=\"https:\/\/opentelemetry.io\/docs\/specs\/otel\/trace\/api\/#span\" target=\"_blank\" rel=\"noopener\">OTLP<\/a> (opzionale)<br \/>\nLevel-&gt; Livello di gravit\u00e0 della registrazione. 0=Informazione (default), 1=Warning, 2=Error&nbsp;(opzionale)<\/p>\n<p><em>Ritorna:&nbsp;<\/em><em>true&nbsp;<\/em>se la registrazione \u00e8 avvenuta con successo, <em>false<\/em> altrimenti.<\/p>\n<p>NOTA: nel caso il metodo sia utilizzato in <a href=\"https:\/\/help.qualiware.it\/qw-help\/sd-task-scheduler\/\">Task<\/a>, per far s\u00ec che un eventuale errore venga conteggiato nell&#8217;Health Monitor, \u00e8 necessario passare i seguenti parametri:<br \/>\n&#8211; iddoc=&#8217;**&#8217;<br \/>\n&#8211; coddoc=&#8217;QWNTSEC&#8217;<br \/>\n&#8211; top=8001<br \/>\n&#8211; level=2<\/p>\n<p>&nbsp;<\/p>\n<h2 id=\"password\">Password<\/h2>\n<h3 id=\"GeneratePassword\"><strong><span style=\"font-family: 'courier new', courier, monospace;\">GeneratePassword<\/span><\/strong><\/h3>\n<p><code>Function GeneratePassword(ByVal n As Integer) As String<\/code><\/p>\n<p>Genera una password complessa della lunghezza specificata nel parametro<\/p>\n<p>&nbsp;<\/p>\n<h2>Indicizzazione<\/h2>\n<h3 id=\"IndexDocument\"><span style=\"font-family: 'courier new', courier, monospace;\"><strong>IndexDocument<\/strong><\/span><\/h3>\n<p><code>Sub IndexDocument(ByVal QWSess As QWSession, Byval IdDoc As String, ByVal CodDoc As String)<\/code><\/p>\n<p>Indicizza il documento specificato dai parametri IdDoc e CodDoc. Richiede la specifica della sessione di lavoro nel parametro QWSess.<\/p>\n<p>&nbsp;<\/p>\n<h2>Codifica\/decodifica base64<\/h2>\n<h3 id=\"ImageToBase64\"><span style=\"font-family: 'courier new', courier, monospace;\"><strong>ImageToBase64<\/strong><\/span><\/h3>\n<p><code>Function ImageToBase64(ByVal filename As String) As String<\/code><\/p>\n<p>Restituisce una stringa con la codifica base64 dell&#8217;immagine il cui percorso viene passato nel parametro filename.<\/p>\n<h3 id=\"ImageToBase64\"><span style=\"font-family: 'courier new', courier, monospace;\"><strong>FileToBase64<\/strong><\/span><\/h3>\n<p><code>Function FileToBase64(ByVal filename As String) As String<\/code><\/p>\n<p>Restituisce una stringa con la codifica base64 del file il cui percorso viene passato nel parametro filename.<\/p>\n<h3 id=\"ImageToBase64\"><span style=\"font-family: 'courier new', courier, monospace;\"><strong>Base64ToImage<\/strong><\/span><\/h3>\n<p><code>Function Base64ToImage(ByVal base64string As String) As System.Drawing.Image<\/code><\/p>\n<p>Restituisce un oggetto System.Drawing.Image contenente l&#8217;immagine la cui codifica base64 \u00e8 contenuta nel parametro base64string.<\/p>\n<h3 id=\"ImageToBase64\"><span style=\"font-family: 'courier new', courier, monospace;\"><strong>Base64ToFile<\/strong><\/span><\/h3>\n<p><code>Sub Base64ToFile(ByVal base64string As String, ByVal filename As String)<\/code><\/p>\n<p>Converte una stringa base64 contenuta nel parametro base64string in un file il cui percorso \u00e8 contenuto nel parametro filename.<\/p>\n<p>&nbsp;<\/p>\n<h2>QDaemonImportTable<\/h2>\n<p><code>QDaemonImportTable(&lt;oggetto database&gt;,&lt;nome tabella&gt;,&lt;oggetto TableDef&gt;)<\/code>, &nbsp;dove:<\/p>\n<ul>\n<li><strong> &lt;oggetto database&gt;<\/strong> \u00e8 l\u2019oggetto contenente il database rappresentato dalla variabile DB,<\/li>\n<li><strong>&lt;nome tabella&gt;<\/strong> \u00e8 una stringa contenente un nome convenzionale assegnato alla tabella\/file da importare e pu\u00f2 essere assegnato arbitrariamente,<\/li>\n<li><strong>&lt;oggetto QDaemonTableDef&gt;<\/strong> e l\u2019oggetto di tipo <em>QDaemonTableDef<\/em> contenente la definizione della tabella\/file da importare e la mappatura dei campi.<\/li>\n<\/ul>\n<p>La primitiva <strong>QDaemonImportTable<\/strong> registra gli eventi sulla tabella LOGDOC con CODDOC=\u2019QDAEMON.<br \/>\nPer verificare l\u2019esito delle importazioni ed eventuali errori si pu\u00f2 utilizzare la funzionalit\u00e0 <strong>Consultazione LOG Qualiware Server Daemon<\/strong> selezionando l\u2019opzione \u201c<em>Qdaemon<\/em>\u201d. Per maggiori informazioni, consultare la pagina <a href=\"https:\/\/help.qualiware.it\/qw-help\/qwntsec_task_cfgform\/\"><strong>Configurazione script per task<\/strong><\/a> dedicata all\u2019oggetto.\u201d<\/p>\n<h2>Esecuzione di report<\/h2>\n<p>Le seguenti funzioni consentono di eseguire report in formato REPX e RPT (Crystal Reports).<\/p>\n<h3 id=\"PrintReport2\">PrintReport2<\/h3>\n<p><code>Sub PrintReport2(ByVal form As qwWebControls.QWWebPage, ByVal nome As String, ByVal datafiles As DBArray, ByVal selection As String, ByVal formulas As DBArray, ByVal titolo As String, Optional ByVal formato As String = \"\", Optional ByVal no_pagine As Boolean = False, Optional ByVal parametri As AssocArray = Nothing, Optional ByVal samePage As Boolean=false)<\/code><\/p>\n<p>Esegue un report aprendo l&#8217;anteprima in una pagina o tab separati.<\/p>\n<p><em>Parametri:<br \/>\n<\/em>form -&gt; riferimento al form<br \/>\nnome -&gt; Nome del file .REPX o .RPT contenente il report<br \/>\ndatafiles -&gt; passare a Nothing<br \/>\nselection -&gt; stringa contenente la formula di selezione. Pu\u00f2 essere vuota se la formula viene cablata nel report e si usano i parametri<br \/>\nformulas -&gt; oggetto DBArray contenente le formule da assegnare. Pu\u00f2 essere passato a Nothing.<br \/>\ntitolo -&gt; Titolo della finestra di anteprima del report<br \/>\nformato -&gt; Formato di output. &#8220;&#8221;=pagina web, &#8220;PDF&#8221; scaricabile , &#8220;RTF&#8221; scaricbile<br \/>\nno_pagine -&gt; ignorato (passare False)<br \/>\nparametri -&gt; Oggetto AssocArray contenente i valori dei parametri (la chiave \u00e8 il nome del parametro)<\/p>\n<p>Esempio:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"visualbasic\">dim params as New AssocArray\r\nparams(\"NUMDOC\") = numdoc\r\nPrintReport2(form, \"STAMPA QUESTIONARIO.REPX\", null, \"\", null, \"Stampa questionario\",\"\",False,params)<\/pre>\n<h3 id=\"PrintReportWeb\">PrintReportWeb<\/h3>\n<p><code>Function PrintReportWeb(ByVal Sess As Object, ByVal nome As String, ByVal datafiles As DBArray, ByVal selection As String, ByVal formulas As DBArray, Optional ByVal params As AssocArray = Nothing, Optional ByVal formato As String = \"\") As String<\/code><\/p>\n<p>Esegue un report restituendo il nome del file esportato, che viene memorizzato nella cartella dei file temporanei, il cui percorso pu\u00f2 essere recuperato con la propriet\u00e0 TempDirectoryPath dell&#8217;oggetto <a href=\"https:\/\/help.qualiware.it\/qw-help\/classi-di-supporto\/#ipt_kb_toc_27012_20\" target=\"_blank\" rel=\"noopener\">QWSession<\/a>.<\/p>\n<p><em>Parametri:<br \/>\n<\/em>form -&gt; riferimento al form<br \/>\nnome -&gt; Nome del file .REPX o .RPT contenente il report<br \/>\nformulas -&gt; oggetto DBArray contenente le formule da assegnare. Se non ve ne sono, passare &#8220;New DBarray&#8221;<br \/>\nselection -&gt; stringa contenente la formula di selezione. Pu\u00f2 essere vuota se la formula viene cablata nel report e si usano i parametri<br \/>\ndatafiles -&gt; passare &#8220;New DBarray&#8221;<br \/>\nparams-&gt; Oggetto AssocArray contenente i valori dei parametri (la chiave \u00e8 il nome del parametro)<br \/>\nformato -&gt; Formato file di esportazione &#8220;&#8221;=HTML, &#8220;PDF&#8221;=PDF, &#8220;XLS&#8221;=Excel, &#8220;DOC&#8221;=Word<\/p>\n<p>Esempio:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"visualbasic\">Dim f as string\r\nDim par as new Assocarray()\r\npar(\"NUMDOC\") = CODDOC        \r\nf = PrintReportWeb(form.Session, \"OrderReport.repx\", New DBArray, nothing, New DBArray, par, \"PDF\")  \r\n\r\nf = form.GetSession().TempDirectoryPath+\"\\\"+f\r\n\r\nform.DownloadFile(f,\"ordine.pdf\")<\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>La piattaforma mette a disposizione diverse procedure che consentono al programmatore di interagire con l&#8217;interfaccia di Qualiware e con il database. Le funzioni elencate sono utilizzabili in ogni script input all&#8217;interno di Qualiware &#8211; fatta eccezione per quelle che richiedono un parametro relativo al form di partenza, che si possono usare solamente all&#8217;interno degli eventi&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"ngg_post_thumbnail":0,"footnotes":""},"categories":[97,75,6,60],"tags":[212,208,202,210,192,211,203,158,200,207,209,198,199,205,282,204,201,206],"acf":[],"_links":{"self":[{"href":"https:\/\/help.qualiware.it\/qw-help\/wp-json\/wp\/v2\/posts\/25841"}],"collection":[{"href":"https:\/\/help.qualiware.it\/qw-help\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/help.qualiware.it\/qw-help\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/help.qualiware.it\/qw-help\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/help.qualiware.it\/qw-help\/wp-json\/wp\/v2\/comments?post=25841"}],"version-history":[{"count":125,"href":"https:\/\/help.qualiware.it\/qw-help\/wp-json\/wp\/v2\/posts\/25841\/revisions"}],"predecessor-version":[{"id":38412,"href":"https:\/\/help.qualiware.it\/qw-help\/wp-json\/wp\/v2\/posts\/25841\/revisions\/38412"}],"wp:attachment":[{"href":"https:\/\/help.qualiware.it\/qw-help\/wp-json\/wp\/v2\/media?parent=25841"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/help.qualiware.it\/qw-help\/wp-json\/wp\/v2\/categories?post=25841"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/help.qualiware.it\/qw-help\/wp-json\/wp\/v2\/tags?post=25841"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}