It is currently 8 June 2025, 22:20 Advanced search

ServerSession, ServizioBatch o .... ?

Domande e risposte su come utilizzare Instant Developer Foundation al meglio

Re: ServerSession, ServizioBatch o .... ?

Postby lucabaldini » 8 January 2016, 16:10

Printerlist è il nome della tua videata? Se la risposta è sì potrebbe essere dovuto al fatto che il file PrinterLib.cs (il cui contenuto ti ho scritto sotto) non è stato copiato nella directory App_Code...

Probabilmente l'applicazione non è stata correttamente personalizzata con il file in più... Verifiche da fare:
- hai messo il file dentro alla directory custom della tua applicazione?
- e l'hai messo dentro ad una cartella chiamata App_Code?
- e hai creato, dentro alla directory custom, un file di testo chiamato FileList.txt contenente una sola riga "App_Code/PrinterLib.cs"?
User avatar
lucabaldini
Pro Gamma
Pro Gamma
 
Posts: 4990
Joined: 1 October 2010, 17:03
Location: Bologna

Re: ServerSession, ServizioBatch o .... ?

Postby lucabaldini » 8 January 2016, 16:12

La riga 331 del file Printerlist.cs è, per caso, la chiamata alla funzione che ti dicevo di aggiungere in libreria?

Perché l'errore dice "non conosco PrinterLib"... ma PrinterLib è il nome della classe contenuta nel file PrinterLib.cs... se è nella cartella App_Code (o meglio, se la custom della tua applicazione è stata correttamente configurata) quel nome dovrebbe essere noto al compilatore .NET
User avatar
lucabaldini
Pro Gamma
Pro Gamma
 
Posts: 4990
Joined: 1 October 2010, 17:03
Location: Bologna

Re: ServerSession, ServizioBatch o .... ?

Postby r.bennati » 8 January 2016, 17:07

Non avevo creato il file FileList.txt
Ora si fa seria:
d:\INDE\csharp\App_Code\Printerlist.cs(331): error CS0117: 'PrinterLib' non contiene una definizione per 'GetPrinterList'.
d:\INDE\csharp\App_Code\PrinterLib.cs(14): error CS0246: Impossibile trovare il tipo o il nome dello spazio dei nomi 'PrintDocument'. Probabilmente manca una direttiva using o un riferimento a un assembly
d:\INDE\csharp\App_Code\PrinterLib.cs(14): error CS0246: Impossibile trovare il tipo o il nome dello spazio dei nomi 'PrintDocument'. Probabilmente manca una direttiva using o un riferimento a un assembly
d:\INDE\csharp\App_Code\PrinterLib.cs(17): error CS0103: Il nome 'PrinterSettings' non esiste nel contesto corrente.
d:\INDE\csharp\App_Code\PrinterLib.cs(21): error CS1656: Impossibile effettuare un'assegnazione a 'strPrinter'. Ô un elemento 'variabile di iterazione foreach'.


Questa è la funzione:
Immagine.png
Immagine.png (21.33 KiB) Viewed 4886 times


Printerlist è il nome della videata
User avatar
r.bennati
 
Posts: 487
Joined: 29 April 2013, 12:38
Location: Novi Ligure (AL)

Re: ServerSession, ServizioBatch o .... ?

Postby lucabaldini » 8 January 2016, 17:26

No, è facile...

'PrinterLib' non contiene una definizione per 'GetPrinterList'.

il metodo l'ho chiamato GetPrintersList (Printers, plurale... :-))

Impossibile trovare il tipo o il nome dello spazio dei nomi 'PrintDocument'. Probabilmente manca una direttiva using o un riferimento a un assembly
manca "using System.Drawing.Printing" all'inizio (nel codice che avevi scritto tu non c'era :-))
(vedi qui https://msdn.microsoft.com/it-it/librar ... t(v=vs.110).aspx)

Impossibile effettuare un'assegnazione a 'strPrinter'. Ô un elemento 'variabile di iterazione foreach'.
giusto... mio errore... ti riscrivo il contenuto del file

Code: Select all
using System;
using System.IO;
using System.Text;
using System.Drawing.Printing
using com.progamma;

public class PrinterLib
{
  // **********************************************
  // Lista le stampanti
  // **********************************************
  public static IDArray GetPrintersList()
  {
    IDArray retVal = new IDArray();
    PrintDocument prtdoc = new PrintDocument();
    //
    string strDefaultPrinter = prtdoc.PrinterSettings.PrinterName;
    foreach (String strPrinter in PrinterSettings.InstalledPrinters)
    {
      // Se è la stampante predefinita metto un * all'inizio (lo toglierà l'app quando mostra i dati all'utente)
      var sPrint = strPrinter;
      if (sPrint.CompareTo(strDefaultPrinter) == 0)
        sPrint = "*" + sPrint;
      //
      retVal.add_Value(new IDVariant(sPrint));
    }
    //
    return retVal;
  }
}
User avatar
lucabaldini
Pro Gamma
Pro Gamma
 
Posts: 4990
Joined: 1 October 2010, 17:03
Location: Bologna

Re: ServerSession, ServizioBatch o .... ?

Postby r.bennati » 8 January 2016, 17:47

Mentre rispondevi ho viso anch'io che mancava la using System.Drawing.Printing (ah, manca il ; che ho aggiunto).
L'ho visto qui : https://msdn.microsoft.com/it-it/librar ... 10%29.aspx

Ho trovato però interessante il fatto che se non si usa un certo accorgimento NON VENGONO RILEVATE le stampanti di rete.
Se ne parla QUI: https://social.msdn.microsoft.com/Forum ... ?forum=wpf

GRANDE MAESTRO BALDINI !!!! FUNZIONA !!!

ma in riga 21 ci vuole :
Code: Select all
string sPrint = strPrinter;

con var dà errore
Last edited by r.bennati on 8 January 2016, 18:17, edited 1 time in total.
User avatar
r.bennati
 
Posts: 487
Joined: 29 April 2013, 12:38
Location: Novi Ligure (AL)

Re: ServerSession, ServizioBatch o .... ?

Postby r.bennati » 8 January 2016, 18:10

Ho cambiato leggermente il codice, ora restituisce per prima quella predefinita e poi tutte le altre:

Code: Select all
using System;
using System.IO;
using System.Text;
using System.Drawing.Printing;
using com.progamma;

public class PrinterLib
{
  // **********************************************
  // Lista le stampanti
  // **********************************************
  public static IDArray GetPrinterList()
  {
    IDArray retVal = new IDArray();
    PrintDocument prtdoc = new PrintDocument();
   
    // Per prima carica la default printer
    string strDefaultPrinter = prtdoc.PrinterSettings.PrinterName;
    retVal.add_Value(new IDVariant(strDefaultPrinter));

   
    foreach (String strPrinter in PrinterSettings.InstalledPrinters)
    {
      // Aggiunge ciascuna stampante non predefinita
      string sPrint = strPrinter;
      if (sPrint.CompareTo(strDefaultPrinter) != 0)
            retVal.add_Value(new IDVariant(sPrint));
    }
    //
    return retVal;
  }
}
User avatar
r.bennati
 
Posts: 487
Joined: 29 April 2013, 12:38
Location: Novi Ligure (AL)

Re: ServerSession, ServizioBatch o .... ?

Postby lucabaldini » 11 January 2016, 7:09

Perfetto! Sono contento funzioni (scusa per il "var" ma ultimamente sviluppo molto in Javascript :-DDDDDD).

Ciaooooooooo
User avatar
lucabaldini
Pro Gamma
Pro Gamma
 
Posts: 4990
Joined: 1 October 2010, 17:03
Location: Bologna

Re: ServerSession, ServizioBatch o .... ?

Postby r.bennati » 13 January 2016, 9:21

r.bianco wrote:b. Per creare una stampa diretta io faccio così: creo il pdf nella cartella temp del server e tramite shell chiamo ghostscript passandogli percorso file e stampante. Detto in altri termini, non c'è un modo interno ad InDe.

Ok,adesso che ho scoperto che NON FUNZIONA nè il parametro Book.PrintDestination = PRINT nè tantomento Book.printerName=<nomestampante> (alla faccia della documentazione contestuale che dà ancora tutto per valido) capisco questa tua risposta.

Ma a questo punto mi sfugge come tu faccia da una App WEB ad accedere alla shell al sistema. Ci vuole un qualche altro "artificio" stano ? Io ero rimasto che in una AppWEB non c'era la possibilità di usare la shell nativa come per le App Mobile.
User avatar
r.bennati
 
Posts: 487
Joined: 29 April 2013, 12:38
Location: Novi Ligure (AL)

Re: ServerSession, ServizioBatch o .... ?

Postby r.bianco » 13 January 2016, 9:48

Quello che intendevo è: eseguire un programma a linea di comando, diciamo come il vecchio DOS.

http://doc.instantdeveloper.com/?ARTID= ... 00&LANG=it
only work and no play makes jack a dull boy
r.bianco
 
Posts: 4979
Joined: 8 November 2010, 16:46

Re: ServerSession, ServizioBatch o .... ?

Postby r.bennati » 13 January 2016, 10:46

r.bianco wrote:Quello che intendevo è: eseguire un programma a linea di comando, diciamo come il vecchio DOS.

http://doc.instantdeveloper.com/?ARTID= ... 00&LANG=it


Capito.

Solo che:
1) NON si può usare PRINT per stampare perchè non funziona con i nomi di stampante non-dos. Al primo tentativo dice che stampa ma NON stampa niente:
C:\>print CodiciAlfa.pdf /D:"Xerox Phaser 3300MFP PCL 6"
C:\Users\rik\Documents\CodiciAlfa.pdf è attualmente in stampa

al secondo va in errore:
C:\>print CodiciAlfa.pdf /D:"Xerox Phaser 3300MFP PCL 6"
Impossibile inizializzare il dispositivo Xerox Phaser 3300MFP PCL 6


2) NON si può usare GhostScript perchè vuole il parametro "DEVICE" e non gestisce il "Nome Stampante" quindi stampi solo sulla default printer

3) Resta solo Acrobat Reader per stampare (https://forums.adobe.com/thread/1212491?start=0&tstart=0), solo che si introducono delicati problemi di configurazione di diritti dell'utente IIS_WEB sulla cartella dove acrobat è installato: C:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe

Oltretutto sono comunque "accrocchi" che trovo assurdo dover usare quando c'era una funzionalità di sistema pulita e regolare per fare una cosa SACROSANTA come la stampa diretta con output su device, che non si sa per quale motivo sia stata abbandonata in sordina da Progamma. Mi sembra troppo semplicistico aver escluso l'esigenza di dover gestire delle stampanti di sistema sulle quali il server deve poter stampare senza intervento umano.
Quantomeno non per un Framework che vuol essere uno strumento per creare App gestionali !
User avatar
r.bennati
 
Posts: 487
Joined: 29 April 2013, 12:38
Location: Novi Ligure (AL)

PreviousNext

Return to Tips & Tricks - Foundation

Who is online

Users browsing this forum: Google [Bot] and 57 guests