SOG-Helpcenter Logo SOG Business - Software

sogconstep - Schrittweise Ausführung von BAT-Anweisungen


Mit dem Kommando "sogconstep" können spezielle Anweisungsdateien ausgeführt werden.
Die Ausführung kann im Einzelschritt oder im Gesamtausführungsmodus durchgeführt werden.
Kommt es zu Fehlern, wird die aktuelle Fehlersituation dargestellt und auf eine Benutzerreaktion gewartet. Wenn das Problem behoben ist, kann der Benutzer die Ausführung fortsetzen. Dabei kann entweder das aktuelle Kommando erneut durchgeführt werden, oder es kann übersprungen, und bei dem nächsten Kommando fortgesetzt werden.
Kann das Problem nicht geklärt werden, kann beim Schließen von sogconstep eine Status-Datei ausgegeben werden. Diese Statusdatei, ggf. auch von einem anderen Benutzer, verwendet werden, um sogconstep erneut aufzurufen, und an der gleichen Stelle mit der Abarbeitung fortzufahren.

Aufruf



    sogconstep [Optionen] Ausführungsdatei [Parameter1 [Parameter2 [Parameter 3]]]

    sogconstep -edit [-file Dateiname] [-content Inhalt] [Parameter1 [Parameter2 [Parameter 3]]]

Folgende Optionen sind möglich:

 

-x

Ausführung startet sofort. Beim Ende der Abarbeitung hält sogconstep an.

-X

Ausführung startet sofort. Bricht die Verabreitung nie ab, wird sogconstep am Ende automatisch geschlossen. Tritt ein Fehler auf, wird die automatische Beendigung abgeschaltet.

-nosavestate

Keine Möglichkeit zum Speichern des aktuellen Verabreitungsstatus durch den Benutzer.

-init Dateiname

Übergabe einer Datei mit zusätzlichen Initialisierungen. Die Datei muss das Format einer "COMFILE" haben (Siehe unten).

-nofg

Kein in den Vordergrund schalten. Ist die Option nicht angegeben, versucht "sogconstep" bei Benutzer-Interaktionen in den Vordergrund zu kommen, um den Benutzer auf die Eingabe aufmerksam zu machen.
Durch Setzen der Variablen "SOGConStepNoForeground" auf den Wert "1" kann die Option von außen erzwungen und sichergestellt werden.

-showlog

Vorranige Anzeige der Protokollansicht an Stelle der Übersicht.

-min

SOGCONSTep wird bei Ausführung minimiert. Wirkt einmal pro Programmlauf.

-sema SemaName#SemaAnzahl

Geben Sie mit dieser Option einen Semaphorennamen und eine maximale Anzahl von Parallelausführungen an (mit '#' getrennt) wird über eine Systemsemaphore dafür gesorgt, das immer nur die angegeben Maximalanzahl von Parallelausführungen gleichzeitig aktiv ist.

Ausführungsdatei

Datei mit der Endung ".sogconstep" oder ".sogconstepstate".

Parameter1

Parameter an die Ausführungsdatei. Der Parameter wird dem Script in der Variablen "sogconsteppara1" übergeben.

Parameter2

Parameter an die Ausführungsdatei. Der Parameter wird dem Script in der Variablen "sogconsteppara2" übergeben.

Parameter3

Parameter an die Ausführungsdatei. Der Parameter wird dem Script in der Variablen "sogconsteppara3" übergeben.

-edit

Anzeige eines Dialoges, über den das auszuführende Kommando festgelegt werden kann.

-file

Vorgabe des Auszuführenden Kommandos über eine Datei.

-content

Vorgabe des auszuführenden Kommandos.

Erfolgt der Aufruf mit einer ".sogconstepstate" Datei, die den Zustand eines vor fehlgeschlagenen Durchlaufes einer ".sogconstep" Datei enthält, so muss vor dem Start in das gleiche Verzeichnis gewechselt werden, wie vor dem Start der originalen .sogconstep Datei. Die Parameter haben immer den Wert, den sie bei Aufruf der Originaldatei hatten.

Die Ausführungsmaske



Der Anwender soll normalerweise die einfache Ansicht der Ausführungsmaske zu sehen bekommen. Solange keine Fehler auftreten, oder Eingaben abgefragt werden, verbleibt sogconstep in dieser Ansicht.

 

Ausführung (F5)

Startet die Ausführung beim aktuellen Kommando und setzt solange fort, wie die Kommandoausführung fehlerfrei ist.

Abbrechen

Bricht die Verarbeitung der Ausführung ab.

Ende

Schließt die Anwendung.

Tritt eine Fehler auf, wird eine Eingabe abgefordert, die Verarbeitung abgebrochen, oder manuell auf den Reiter "Details" gewechselt, werden weitere Optionen sichtbar:

 

Bearbeiten

Ruft die zugrunde liegende sogconstep-Datei in einem Editor zur Bearbeitung auf. Nach dem Schließen des Editors wird die Datei neu gelesen, sodass die nachfolgenden Kommandoausführungen auf dem aktualisierten Stand der Datei basieren.

Umgebung

Zeigt die aktuelle Umgebung der Kommandoausführung. Die Umgebung kann dabei verändert werden.

Goto

Veränderung der Ausführungsposition innerhalb der sogconstep-Datei. Achtung: Dies sollte nur verwendet werden, wenn klar ist, was dabei passiert.

Protokoll

Anzeige des Protokolls in einem Editor. Nach Aufruf des Editors kann entschieden werden, ob das übergebene Protokoll in sogconstep gelöscht werden soll.

Schrittweise (F10)

Ausführung des aktuellen Kommandos im Einzelschritt-Modus. Nach Ende des aktuellen Kommandos wird, wenn es ohne Fehler durchgelaufen ist, auf das nächste Kommando umgeschaltet. Bei Fehler bleibt das zuletzt ausgeführte Kommando aktiv.

Zurück

Schaltet auf das vorherige Kommando zurück.

Überspringen

Überspringt das aktuelle Kommando und legt das nnachfolgende Kommando als aktuelles fest.

Senden

Erfordert die sogconstep-Datei eine Eingabe, kann hier die gewünschte Eingabe durchgeführt werden, und über "Senden" an den laufenden Prozess übergeben werden.

Aufbau einer sogconstep Datei


sogconstep Dateien sind in Verarbeitungseinheiten aufgeteilt, die jeweils als ein geschlossenes Kommando angesehen und ausgeführt werden.
Für die Abarbeitung des Kommandos wird der Block in eine TEMP-Datei geschrieben, und diese über "cmd.exe /c TempDatei.bat" ausgeführt.
Ansprungmarken gelten daher nur innerhalb eines Blockes.
Blöcke werden durch die Zeichenfolge "#-Name" am Anfang einer Zeile eingeleitet:

#-Start der Ausführung

Es hat sich bewährt, für die Blocknamen möglichst sprechende Bezeichnungen zu wählen, da diese auch über die "Goto" Schaltfläche der Oberfläche Verwendung finden.

Normalerweise erfolgt die Abarbeitung der Blöcke nacheinander.
Umgebungsvariable, die in einem Block gesetzt werden, werden nicht an Folgeblöcke durchgereicht. Es sei denn, sie werden in die Datei %COMFILE% geschrieben!

Deaktivieren eines Blockes


Soll ein Block verübergehend deaktiviert werden, ohne ihn jedoch aus der Script-Datei zu entfernen, so kann nach dem "-" ein "!" eingefügt werden:

#-!Start der Ausführung

Dieser Block ist deaktivert und wird weder in der Liste der möglichen Blocks angezeigt noch intern mit ausgeführt.
Durch Entfernung des "!" kann der Block wieder aktiviert werden.

Fehlerbehandlung


Kommt ein Kommando innerhalb eines Blockes auf Fehler, sollte die Verabreitung mit "exit 1" abgebrochen werden:

    if errorlevel 1 exit 1

Wird "exit 0" durchgeführt, wird der aktuelle Block ohne Fehler beendet, und die Ausführung setzt mit dem nächsten Block fort.
Vermeiden Sie die Abschaltung der echo-Ausgabe der ausgeführten Kommandos. Eine Fehleranalyse wird erheblich erschwert, wenn nicht mehr klar ist, welches Kommando das aktuelle Problem verursacht hat.

Tritt ein Fehler auf, kann dem Benutzer noch mit Hilfe von "echo" ein Hinweis gegeben werden, was genau schief gelaufen ist. Anschließend kann mit "exit 1" die Verarbeitung beendet werden.
Durch Verwendung von Klammern kann eine unnötige Verwendung der goto/label Syntax vermieden werden.

##################################################################################################
#-Quellprojekt prüfen
##################################################################################################

hhenvunload -e PROJ >> %COMFILE%
if errorlevel 1 exit 1
hhenvunload -ebase PROJ >> %COMFILE%
if errorlevel 1 exit 1
call %COMFILE%

if exist %PROJ%\hhups.lock (
    echo Quellprojekt %PROJ% ist fuer hhups gesperrt!
    exit 1
)

if exist %PROJ%\hhlockdir.txt (
    echo %PROJ%\hhlockdir.txt existiert!
    exit 1
)

Weitergabe von Variablen an Folgeblöcke


Sollen Werte an Folgeblöcke weitergegeben werden, müssen diese in die %COMFILE% geschrieben werden.
Beispiel:

    echo set variable=wert>> %COMFILE%

So gesetzt Variable sind auch in Folgeblöcken verfügbar.
Auch das Kommando hhenvunload kann direkt verwendet werden, um Variable zu entladen, und in Folgeblöcken verfügbar zu machen:

    hhenvunload -e PROJ >> %COMFILE%

Abfrage von Werten vom Benutzer


Ermöglicht der Block eine Interaktion mit dem Benutzer, sollte nach dem Blocknamen eine Zeile mit dem Inhalt "#PROMPT" gestellt werden.
Durch diese Option analysiert sogconstep den Output und reagiert bei Erkennung eines Eingabepromptes mit einer speziellen Farbgebung der Anwendung, die dem Benutzer zeigen soll, dass eine Eingabe erwartet wird.
Beispiel:

#-Eingabe
#PROMPT
echo Bitte drücken Sie Enter:
pause


Das Kommando "sogcon" kann verwendet werden, um Eingaben in Umgebungsvariablen zu erhalten:

    sogcon -tarfile %COMFILE% -msgprompt "Welches Projekt moechten Sie aktualisieren (z. B. sogdev): " TARPROJ
    if errorlevel 1 exit 1
    call %COMFILE%

Achtung: Nach sogcon sollte hier auf jeden Fall der Exit-Status geprüft werden!
Soll die Eingabe auch im aktuellen Block verfügbar sein, muss die verwendete Kommunikationsdatei per "call" aufgerufen werden.
Soll die Eingabe auch in Folgeblöcken bekannt sein, kann hier ebenfalls "COMFILE" Verwendung finden.
Achtung: Die Datei wird jedoch mit "OpenOutput" geöffnet. Das heißt, sollten bereits andere Variable in diesem Block in COMFILE gespeichert worden sein, gehen diese verloren.

Schützen einer Datei während der Ausführung der SOGConStep-Datei



#LOCKFILE:${PROJ}\dailybuild.lock

Die angegebene Datei wird für die Dauer der Ausfphrung des sogconstep-Kommandos blockiert.
Wird "dailybuild.lock" blockiert, kann z. B. während der Verarbeitung des sogconstep kein sogprojbuild oder sogtfs ausgeführt werden.

Aktueller Katalog


Wird in einem Block der aktuelle Katalog geändert, gilt diese Änderung auch für Folgeblöcke.
Dies gilt jedoch nur, wenn der Block fehlerfrei durch sein "natürliches" Ende beendet wird. Nicht wenn die Verabreitung mit "exit" beendet wird.

Wenn ein Wechsel des aktuellen Kataloges nicht erwünscht ist, kann mit Hilfe von "pushd" und "popd" wieder aif den alten Katalog zurückgewechselt werden.

    pushd %CONPROJ%
    sogcon -copyunittotar FileDb %SOGPUBPROJTAR%\%hhproj_msk%\files
    if errorlevel 1 exit 1
    popd

Setzen der Überschrift der Anwendung


Wird die Variable "sogtitel" über COMFILE gesetzt, so wird nach der Beendigung des aktuellen Blocks der in sogtitle angegebene Text oben links in der Titelzeile der Anwendung dargestellt. Er ist also dann auch sichtbar, wenn die Anwendung minimiert wird, und der Cursor über der minimierten Anwendung schwebt. Hier kann also z. B. angezeigt werden, für welches Projekt die Verarbeitung durchgeführt wird.

echo set sogtitel=HHUPS %TARPROJ%>> %COMFILE%

Minimieren der Anwendung


Wird ein Anwendungstitel über COMFILE gesetzt, der mit "~M" beginnt, so wird die Anwendung einmalig minimiert.

echo set sogtitel=~MUpdate %TARPROJ%>> %COMFILE%

Setzen einer SaveState-Datei


Wird die Variable "sogstatefile" über COMFILE gesetzt, so wird in einer Fehlersituation die dort hinterlegte Datei als "SaveState" Datei zum speichern des aktuellen Zustandes vorgeschlagen.

echo set sogstatefile=k:\%USERNAME%\hhups-%TARPROJ%.sogconstepstate>> %COMFILE%
if not exist k:\%USERNAME% mkdir k:\%USERNAME%

Setzen des nächsten Ausführungsblockes


Wird die Variable "sogconstepnext" über COMFILE gesetzt, so wird versucht, den nächsten Auführungsblock auf den hier hinterlegten Namen zu setzen.
Damit ist es dann also möglich, z. B. Schleifen zu programmieren:

set /a index=%index%+1
echo set index=%index% > %COMFILE%
echo set sogconstepnext=#-Nun aktuelles Projekt ermitteln >> %COMFILE%

In diesem Beispiel wird ein Zähler um 1 erhöht, und anschließend die Verarbeitung bei dem Label "#-Nun aktuelles Projekt ermitteln" fortgesetzt.
Wird sogconstepnext auf den Wert "*EOF*" gesetzt, beendet sich die Verarbeitung.

Nutzung einer eindeutigen ID


Über die Variable HHID wird JEDEM SCHRITT eine eigene, eindeutige ID zugeordnet, die z. B. verwendet werden kann, um TEMP-Dateien zu benennen.

hhenvunload -e SPOOLDIR >> %TEMP%\TT%HHID%.bat
if errorlevel 1 exit 1
call %TEMP%\TT%HHID%.bat
del %TEMP%\TT%HHID%.bat

Einstellen von Optionen


Durch Setzen der Variablen sogconstepoptions über COMFILE können Optionen gesetzt werden.
Folgende Optionen sind möglich:

 

NoSaveState

Keine Abfrage beim Schließen der Anwendung, ob der aktuelle Zustand gespeichert werden soll.

Beispiel:
    echo set sogconstepoptions=NoSaveState>> %COMFILE%

Starten einer externen, parallelen Verarbeitung


Mit dem folgenden Kommando kann eine externe parallele Verarbeitung eingeleitet werden. In diesem Beispiel wird wiederum "sogconstep" für die Verarbeitung verwendet.
Durch die Angabe der Semaphoren wird erreicht, dass immer nur 4 parallele Verarbeitungen gleichzeitig aktiv sein können.

hhexew -ni sogconstep -sema MeinName#4 -X c:\temp\x2.sogconstep
if errorlevel 1 exit 1

Paralellisierung der Verarbeitung mit Hilfe einer einzigen sogconstep Datei


Mit ein wenig Aufwand kann dafür gesorgt werden, dass die Ausführung mehrerer sogconstep-Programme, gesteuert aus einer einzigen sogconstep-Quelldatei heraus erfolgt.
Hier ein Beispiel für eine solche Verarbeitung:

#-1

# Weitergabe des Aufrufes
if "%para%" == "b24aadc2-fd4f-47da-92de-3582c65f2d0a" (
  echo set sogconstepnext=#-RunPerCall > %COMFILE%
  exit 0
)

#-2
set para=b24aadc2-fd4f-47da-92de-3582c65f2d0a
hhexew -ni sogconstep -X %sogconstepfile%

#-3
set para=b24aadc2-fd4f-47da-92de-3582c65f2d0a
hhexew -ni sogconstep -X %sogconstepfile%

#-4
set para=b24aadc2-fd4f-47da-92de-3582c65f2d0a
hhexew -ni sogconstep -X %sogconstepfile%

#-ENDE
echo set sogconstepnext=*EOF* > %COMFILE%


#-RunPerCall

@echo =========================================
@echo hier ist RunPerCall !!
@echo para=%para%
@echo sogconsteppara1=%sogconsteppara1%
@echo sogconsteppara2=%sogconsteppara2%
@echo sogconsteppara3=%sogconsteppara3%
@echo =========================================

sleep 5

Erklärung:
In Block #-2, #-3 und #-4 werden paralell abzulaufende "sogconstep" gestartet. Die Variable "sogconstepfile" enthält dabei automatisch den Namen der aktuellen Ausführungsdatei.
In Block #-1 wird durch Prüfung der Variablen "para" geschaut, ob es sich um einen Erstaufruf handelt, oder um einen "Parallelaufruf". Im Falle eines Paralllelaufrufes wird die Ausführung an das Label "#-RunPerCall" übergeben. Der String in para sollte möglichst pro sogconstep-Script eindeutig sein. Verwenden Sie das Kommando "sogid" um eine passende ID zu erzeugen.
In Block #-ENDE wird die Verarbeitung durch Setzen von sogconstepnext auf den Wert "*EOF*" beendet.
der Block #-RunPerCall wird in den 3 gestarteten Parallelverarbeitungen aufgerufen und durchgeführt.

Hinweis:
Wurden weitere Umgebungsvariablen vor dem Aufruf der Parallelverarbeitung (z. B. in #-4) gesetzt, sollten diese zu Anfang in "#-RunPerCall" in die COMFILE geschrieben werden.
Ansonsten wären diese Werte nicht mehr gesetzt, wenn eine Parallelverarbeitung abbricht, und nach Restaurierung der sogconstate-Datei wieder fortgesetzt wird:

set curproj=xyz
hhexew -ni sogconstep -X %sogconstepfile%
if errorlevel 1 exit 1
...

##################################################################
#-StartPerProj
##################################################################

# Parameter in COMFILE merken!
echo set curproj=%curproj%>> %COMFILE%
echo set MODE=%MODE%>> %COMFILE%

# Überschrift einstellen
echo set sogtitel=Update %curproj%>> %COMFILE%

Außerdem scheint es sinnvoll, den Parallelverarbeitungsfenstern mit Hilfe von "sogtitel" eine eigene Überschrift zu geben.

Schreiben von Datendateien


Mit Hilfe der folgenden Syntax können Datendateien geschrieben werden.
Das kann z. B. für die Ausführung von SQL- oder CSharp-Scripten verwendet werden:

#-Start eines Sciptes
#DATA script .hhcsbat
using System;
using System.Text;
using System.IO;
using SOG.Base;
using SOG.Base.Helper;
namespace Script
{
    public class Main : SOGScriptBase
    {
        public static int Run( object[] parms )
        {
            string inpf = System.Environment.GetEnvironmentVariable("projcfg");

            Encoding enc = FileHelper.DetectEncoding(inpf);
            StreamReader rd = new StreamReader( inpf, enc);
            SOGTextOutputStream wr = new SOGTextOutputStream( inpf, enc);

            string line;
            while ((line=rd.ReadLine())!=null)
            {
                line = line.Replace("xxxx.Vacos", "SOG.ERP.Entity");
                line = line.Replace("xxxx.Vacos.VacosDatabase", "SOG.ERP.Entity.SOGERPDatabase");
                wr.WriteLine(line);
            }

            rd.Close();
            wr.Close();
            return 0;
        }
    }
}
#END

%hhcsbatexe% %script%
if errorlevel 1 exit 1

del %script%

In diesem Beispiel wird ein kleines CSharp-Script erstellt, dass in einer Datei die angegebenen Text-Ersetzungen vornimmt.
Das CSharp-Script wird über die automatisch gesetzte Variable %hhcsbatexe% aufgerufen.
Die Zeile "#DATA script .hhcsbat" legt dabei fest, dass das gewünscht Script mit der dateiendung ".hhcsbat" erstellt werden soll, und der Name des Scriptes in der Variable "script" zurückgeliefert wird.
Vergessen Sie nicht, diese Datei zu löschen, da sonst ggf. TEMP-Dateien stehen bleiben.
Innerhalb der Datendatei wird die Schreibweise "${variable}" direkt interpretiert und aufgelöst.
Achtung: Da in CSharp das Zeichen "\" eine Sonderbedeutung hat, ist bei der Verwendung von "${variable}" besondere Vorsicht geboten. Pfadnamen enthalten einfache Backslashes.

Entwicklerunterstützung


An der rechten Seite des Protokollfensters befindet sich ein Slider. Wird dieser weiter nach links verschoben, wird ein Fenster sichtbar, dass die aktuell über "COMFILE" gesetzten Variablen darstellt. Dieses Fenster erlaubt das Verfolgen der über COMFILE ausgetauschten Informationen. Durch einen Doppelklick auf eine der Variablen wird ein Fenster geöffnet, das es erlaubt, den Wert der Variablen zu verändern.
An der oberen Seite Protokollfensters befindet sich ein Slider, der ein weietres Textfenster sichtbar machen kann, über das das als nächstes ausgeführte Kommando sichtbar wird.

Fortsetzen einer Verarbeitung


Kommt die Verarbeitung einer sogconstep-Datei nicht zu einem Ende, entweder durch Verwendung der Einzelschritt-Option, oder durch Abbruch der laufenden Verarbeitung, oder nach einem aufgetretenen Fehler, wird das Programm "sogconstep" beim Schließen der Anwendung fragen, ob der aktuelle Zustand gespeichert werden soll.
Ein so gespeicherter Zustand enthält alle Startparameter, alle bislang gesetzten COMFILE-Variablen, das aktuelle Protokoll und die aktuelle Position der Verarbeitung.
Ein solcher "sogconstepstate" Zustand kann verwendet werden, um die Verarbeitung zu einem späteren Zeitpunkt fortzusetzen. Diese Forsetzung kann auch durch einen anderen Benutzer erfolgen, sofern dieser Zugriff auf den gespeicherten Zustand hat.

Die Abfrage zum Speichern kommt nicht, wenn sogconstep.exe mit der Option "-nosavestate" gestartet wird, oder wenn das Script die Scriptoption NoSaveState über die COMFILE Variable sogconstepoptions setzt.