Geïnstalleerde printers zoeken met de scripttaak

Van toepassing op:SQL Server SSIS Integration Runtime in Azure Data Factory

De data die door Integration Services-pakketten wordt getransformeerd, heeft vaak een geprint rapport als eindbestemming. De naamruimte System.Drawing.Printing in het Microsoft .NET Framework biedt klassen voor het werken met printers.

Note

Als je een taak wilt maken die je gemakkelijker kunt hergebruiken in meerdere pakketten, overweeg dan de code in dit scriptvoorbeeld als uitgangspunt voor een aangepaste taak. Zie Een aangepaste taak ontwikkelenvoor meer informatie.

Description

Het volgende voorbeeld vindt printers die op de server zijn geïnstalleerd en legal-formaat papier ondersteunen (zoals gebruikt in de Verenigde Staten). De code om ondersteunde papierformaten te controleren is ingekapseld in een privéfunctie. Om de voortgang van het script te kunnen volgen terwijl het de instellingen van elke printer controleert, gebruikt het script de Log methode om een informatiebericht te sturen voor drukkers met papierformaat van legale grootte, en om een waarschuwing te geven voor printers zonder papier van legale grootte. Deze berichten verschijnen in het Output-venster van de Microsoft Visual Studio Tools for Applications (VSTA) IDE wanneer je het pakket in de designer uitvoert.

Om dit voorbeeld van een scripttaak te configureren,

  1. Maak de variabele aan met de naam PrinterListObject.

  2. Voeg deze variabele toe aan de ReadWriteVariables-eigenschap op de Script-taakeditor op de Script-pagina van de Script Task Editor.

  3. Voeg in het scriptproject een referentie toe aan de naamruimte System.Drawing .

  4. Gebruik in je code Imports-instructies om de System.Collections en de System.Drawing.Printing-namespaces te importeren.

Code

Public Sub Main()  
  
    Dim printerName As String  
    Dim currentPrinter As New PrinterSettings  
    Dim size As PaperSize  
  
    Dim printerList As New ArrayList  
    For Each printerName In PrinterSettings.InstalledPrinters  
        currentPrinter.PrinterName = printerName  
        If PrinterHasLegalPaper(currentPrinter) Then  
            printerList.Add(printerName)  
            Dts.Events.FireInformation(0, "Example", _  
                "Printer " & printerName & " has legal paper.", _  
                String.Empty, 0, False)  
        Else  
            Dts.Events.FireWarning(0, "Example", _  
                "Printer " & printerName & " DOES NOT have legal paper.", _  
                String.Empty, 0)  
        End If  
    Next  
  
    Dts.Variables("PrinterList").Value = printerList  
  
    Dts.TaskResult = ScriptResults.Success  
  
End Sub  
  
Private Function PrinterHasLegalPaper( _  
    ByVal thisPrinter As PrinterSettings) As Boolean  
  
    Dim size As PaperSize  
    Dim hasLegal As Boolean = False  
  
    For Each size In thisPrinter.PaperSizes  
        If size.Kind = PaperKind.Legal Then  
            hasLegal = True  
        End If  
    Next  
  
    Return hasLegal  
  
End Function  
public void Main()  
        {  
  
            PrinterSettings currentPrinter = new PrinterSettings();  
            PaperSize size;  
            Boolean Flag = false;  
  
            ArrayList printerList = new ArrayList();  
            foreach (string printerName in PrinterSettings.InstalledPrinters)  
            {  
                currentPrinter.PrinterName = printerName;  
                if (PrinterHasLegalPaper(currentPrinter))  
                {  
                    printerList.Add(printerName);  
                    Dts.Events.FireInformation(0, "Example", "Printer " + printerName + " has legal paper.", String.Empty, 0, ref Flag);  
                }  
                else  
                {  
                    Dts.Events.FireWarning(0, "Example", "Printer " + printerName + " DOES NOT have legal paper.", String.Empty, 0);  
                }  
            }  
  
            Dts.Variables["PrinterList"].Value = printerList;  
  
            Dts.TaskResult = (int)ScriptResults.Success;  
  
        }  
  
        private bool PrinterHasLegalPaper(PrinterSettings thisPrinter)  
        {  
  
            bool hasLegal = false;  
  
            foreach (PaperSize size in thisPrinter.PaperSizes)  
            {  
                if (size.Kind == PaperKind.Legal)  
                {  
                    hasLegal = true;  
                }  
            }  
  
            return hasLegal;  
  
        }