It is currently 8 June 2025, 17:08 Advanced search

ServerSession, ServizioBatch o .... ?

Domande e risposte su come utilizzare Instant Developer Foundation al meglio

ServerSession, ServizioBatch o .... ?

Postby r.bennati » 30 December 2015, 8:50

Ciao,
avendo dimestichezza ZERO con Server Sessions e Batch, cerco di spiegare cosa devo fare, in modo da permettervi di darmi i suggerimenti giusti.

Devo fare una applicazione web che "monitora" una attività di evasione ordini mostrando sostanzialmente la 'coda' degli ordini ancora da processare.
Deve però essere in grado di permettere la selezione di un gruppo di ordini da passare ad un sistema di evasione robotizzato, semplicemente scrivendo testa e righe su un db di transito su cui il robot è sempre in 'ascolto'. Di questi ordini inoltrati devono essere stampate le etichette attraverso delle stampanti per etichette dedicate allo scopo. Tali stampanti sono tutte 'visibili' al server e sono tre diverse, per questione di dimensioni carta. Di ogni articolo so su quale dimensione etichetta e quindi stampante andare. Ma come si sceglie la stampante sul server?
Ho escluso che sia il client a stampare perchè il processo deve essere automatico senza intervento dell'opratore, quindi non può passare per l'anteprima su PDF.

E ora viene la parte "sessionless": Il robot, man mano che evade gli ordini mi scrive in un'altra tabella del db gli ordini che ha processato.
Io vorrei realizzare un meccanismo automatico (indipendente dal fatto che ci siano o meno sessioni di monitoraggio attive) che legga i dati di ritorno dal robot e mi 'smarchi' gli ordini come evasi man mano che li 'vede'. Inoltre l'attività di invio degli ordini al robot sopra descritta deve poter funzionare anche in una maniera automatica secondo una priorità standard, senza l'intervento dell'operatore che seleziona e invia gli ordini a mano.

Qual'è il metodo migliore per fare tutto questo?

Grazie e Auguri
User avatar
r.bennati
 
Posts: 487
Joined: 29 April 2013, 12:38
Location: Novi Ligure (AL)

Re: ServerSession, ServizioBatch o .... ?

Postby r.bianco » 4 January 2016, 8:23

Senza entrare nel merito, una server session non è legata al browser, per cui è sempre attiva (impostando correttamente IIS) e non gestisce interfaccia. A naso sembra essere la soluzione corretta, per la parte che monitora, lavora con db e stampa.
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 » 4 January 2016, 9:15

r.bianco wrote:Senza entrare nel merito, una server session non è legata al browser, per cui è sempre attiva (impostando correttamente IIS) e non gestisce interfaccia. A naso sembra essere la soluzione corretta, per la parte che monitora, lavora con db e stampa.


Grazie,
infatti sospettavo fosse questa la via... Forse però avrei dovuto spiegare meglio gli ostacoli che vedo, magari separandoli in due post:

a) avviare una server session in automatico senza che sia lanciata da una interfaccia utente

b) come si ottiene l'elenco delle stampanti per scegliere/indirizzarne una specifica, nelle stampe lato server ?
User avatar
r.bennati
 
Posts: 487
Joined: 29 April 2013, 12:38
Location: Novi Ligure (AL)

Re: ServerSession, ServizioBatch o .... ?

Postby r.bianco » 4 January 2016, 10:00

a. Nelle proprietà dell'applicazione abiliti il check Avvia Server Session.
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.
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 » 4 January 2016, 11:13

r.bianco wrote:a. Nelle proprietà dell'applicazione abiliti il check Avvia Server Session.

Grazie, questa è un 'ottima notizia.
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.

Questa cosa invece per me è un problema. In effetti in InDE ho visto che si può definire il nome della stampante:
Code: Select all
string NomeStampante = "" // Nome della stampante utilizzata per la stampa
//
NomeStampante := Book.PrinterName

Però questo mi costringe ad installare sul server delle stampanti con un nome predefinito in partenza e non modificabile, e questo mi crea problemi quando le stesse stampanti sono usate da altri programmi.
L'ideale sarebbe ottenere tutte le printer installate esistenti e farle scegliere all'utente per poi selezionare la stringa corretta.

Qui ci vorrebbe una dritta di Baldini, il cui motto è "tutto quello che si può fare in C# si fa anche in InDe"... Forse si può fare qualcosa partendo da questo spunto (ma io non sono in grado):
How to Get the List of Printer(s) Installed on a Machine in C#
We can get the list of Printer(s) installed on a particular machine by using the following method.
First of all we have to use the "System.Drawing.Printing" namespace. PrintDocument and PrinterSettings classes are present inside this namespace. Using these classes we can easily get the list of Printer(s).

Code: Select all
private bool GetPrinterList()
{
        bool retVal = false;

        PrintDocument prtdoc = new PrintDocument();

        //prt.PrinterSettings.PrinterName returns the name of the Default Printer
        string strDefaultPrinter = prtdoc.PrinterSettings.PrinterName;

        //this will loop through all the Installed printers and add the Printer Names to a ComboBox.
        foreach (String strPrinter in PrinterSettings.InstalledPrinters)
        {
             cmbPrinter.Properties.Items.Add(strPrinter);

             //This will set the ComboBox Index where the Default Printer Name matches with the current Printer Name returned by for loop
             if (strPrinter.CompareTo(strDefaultPrinter) == 0)
             {
                  cmbPrinter.SelectedIndex = cmbPrinter.Properties.Items.IndexOf(strPrinter);

                  retVal = true;
              }
         }

         return retVal;
}
User avatar
r.bennati
 
Posts: 487
Joined: 29 April 2013, 12:38
Location: Novi Ligure (AL)

Re: ServerSession, ServizioBatch o .... ?

Postby lucabaldini » 7 January 2016, 10:23

Vediamo se ho capito bene: vorresti che, quando l'utente crea il JOB, potesse scegliere anche la stampante su cui inviarlo.

Poi, da server session, vorresti stampare su quella stampante. Giusto?

La prima cosa si fa con il codice che hai scritto tu. Directory custom dell'applicazione, aggiunta di quel codice (adattato) per poter popolare una lista di stringhe che poi l'applicazione mostra all'utente (tramite un pannellino su tabella IMDB popolata da quel metodo?).

Io, aggiungerei un file alla custom chiamato PrinterLib.cs (premesso, non ho provato):
Code: Select all
using System;
using System.IO;
using System.Text;
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)
      if (strPrinter.CompareTo(strDefaultPrinter) == 0)
        strPrinter = "*" + strPrinter;
      //
      retVal.add_Value(new IDVariant(strPrinter));
    }
    //
    return retVal;
  }
}



Poi mapperei questa funzione dentro InDe così:
- tipo: funzione
- tipo dato ritornato: Object
- libreria: IDArray
- espressione: PrinterLib.GetPrintersList()

Poi, per inviare il PDF ad una stampante specifica, l'idea giusta è quella proposta da r.bianco... oppure provare direttamente lanciando un comando DOS... qualcosa del genere http://stackoverflow.com/questions/25137384/printing-pdf-file-directly-from-dos-command-line
User avatar
lucabaldini
Pro Gamma
Pro Gamma
 
Posts: 4990
Joined: 1 October 2010, 17:03
Location: Bologna

Re: ServerSession, ServizioBatch o .... ?

Postby lucabaldini » 7 January 2016, 10:24

A questo punto, quando l'utente crea il Job, chiami la funzione. Poi giri sull'IDarray e per ogni stringa fai una insert in una tua tabellina IMDB (a una colonna?)... Poi metti quel nome nel job, così la server session sa dove stampare.

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

Re: ServerSession, ServizioBatch o .... ?

Postby r.bennati » 7 January 2016, 11:44

Mitico Luca! Lo sapevo che avevi la soluzione!

Io ci provo, ma se fallisco, posso chiedere una sessione di assistenza per farmi assistere da te in questa cosa?
User avatar
r.bennati
 
Posts: 487
Joined: 29 April 2013, 12:38
Location: Novi Ligure (AL)

Re: ServerSession, ServizioBatch o .... ?

Postby lucabaldini » 7 January 2016, 13:12

Beh, puoi provare a scriverlo... purtroppo la mia pianificazione settimanale non si sposa bene con quella dell'assistenza... ma chiedere non costa nulla :-)

P.S. Comunuqe è una cosa che possono tranquillamente gestire anche i miei colleghi... e, se ci fosse bisogno, possono anche chiedermi info... Eventualmente scrivilo nella richiesta (dovesse esserci bisogno) così possono chiedermi comunque prima di gestirla.
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, 15:07

Fatto, ma ottengo questo errore:

\csharp\App_Code\Printerlist.cs(331): error CS0103: Il nome 'PrinterLib' non esiste nel contesto corrente.
User avatar
r.bennati
 
Posts: 487
Joined: 29 April 2013, 12:38
Location: Novi Ligure (AL)

Next

Return to Tips & Tricks - Foundation

Who is online

Users browsing this forum: No registered users and 64 guests

cron