Die Inventor FAQ wird unterstützt von:

Inventor FAQ Logo

09.11.2009

PSP Versteher werden: Kleine Einführung in technische Hintergründe von Productstream Professional: Teil 2

Nach dem der erste Teil des Artikel für euphorische Kommentare gesorgt hat :), hier der zweite Teil.

Die PSP-Shell

Wer sich als Admin anmeldet, der kann über RMT > Shell die PSP Shell aufrufen, die die direkt Eingabe von PSP Funktion erlaubt. Nützlich ist die Shell, um Datenbankwerte auszulesen (oder auch zu ändern) und PSP Funktionen auszuführen. Hier ein paar Beispiele, die auch einen kleinen Einblick in die Programmierung von PSP erlauben.

Datenbankfeld auslesen

Fangen wir mit einem einfachen Beispiel an, dem Auslesen eines Datenbankfeldes zum markierten Datensatz. Dazu ein Konstruktionsdokument wählen und RMT > Shell ausführen. Nun in das Shellfenster eingeben:

read() #IDENT

image

Nach einem Klick auf OK bekommt ihr die Antwort auf eure Eingabe.

image

In dem Fall die Dokumentnummer des markierten Dokuments. read() heisst: “Mach ein Ausgabefenster auf und schreibt rein, was ich dahinter hingeschrieben habe”. #IDENT bedeutet: “Lies mir das Datenbankfeld mit Namen IDENT aus”. Stell sich die Frage, was soll das “#” vor IDENT, den das Datenbankfeld heisst IDENT und nicht #IDENT. # ist als eine Funktion zu sehen, die den Inhalt des dahinter angegeben Datenbankfeldes ausgibt. Soll ein Text davor stehen schreibst du einfach:

read() Die Dokumentnummer lautet: #IDENT

Das Ergebnis sieht dann so aus:

image

Woher weiß ich, welche Datenbankfelder es gibt und wie diese heißen?

Um ein Datenbankfeld auszulesen sollte man wissen, wie es heißt. Das kann man über die Konfiguration oder direkt im SQL Server nachschauen. Um in den SQL Server “hineinzuschauen”nutzt man das SQL Server Management Studio. Dort findet man z.B. an der entsprechenden View (Sicht) die Felder für einem bestimmten Entitytype, u.a. unseren IDENT.

image

Variablen auslesen

Variablen werden beim Start von PSP oder auch während der Arbeit gesetzt und enthalten gewisse “Einstellungen”, wie etwa den Benutzernamen. Variablen kann man mittels $<Variablename> auslesen, z.B. den Benutzernamen mittels

read() $USERNAME

Wie wir im ersten Beitrag gesehen haben, werden in der compass.ini verschiedene Variablen gesetzt, wie etwa DATPATH die sich so auch auslesen lassen.

Neue Variable erstellen

Über die Shell können wir alle PSP Funktion ausführen, auch solche, die für die Programmierung verwendet werden. Es gibt z.B. die Funktion ___Environment (3 Unterstríche vorweg!) mittels der sich Variablen mit Werten versehen lassen. Mittels dieses Ausdrucks kann eine neue Variable “test” erstellt und mit dem Wert “12345” gefüllt werden.

___Environment (test=12345)

Ausgelesen wir die Variable wie? Richtig mittels: read() $test

Wie müsste des Ausdruck aussehen, um die Variable “test” mit dem IDENT des markierten Konstruktionsdokuments zu versehen? Genau, wieder richtig überlegt, lieber Leser :)  ___Environment (test=#IDENT)

Liste aller vergeben Variablen anzeigen

Wer eine Liste aller Variablen sehen möchte, ruft einfach auf:

___CmpUtility(WriteSyspar)

Pfad der Datei ermitteln

Im welchem Pfad die Datei zu aktuell markierten Datensatz gespeichert ist, zeigt die Funktion read() #DOCNAME0 an.

image

Aller Err-Log Dateien im Workverzeichnis löschen

Mittels

rmwild("$(WsPath:|+)*.err")

lassen sich alle Dateien mit der Endung “.err” aus dem Workverzeichnis löschen.

rmwild (“…”) ist die Funktion, um Dateien, die einem bestimmten Muster entsprechen, zu löschen.

$(WsPath:|+)*.err bedeutet: lies die Variable WsPath aus (= Workverzeichnis, wie an der Startverknüpfung angegeben), hänge an den Pfad einen Backslash an (:|+) und und lösche wähle alle Dateien mit der Endung .err aus.

Errlog.err anzeigen

Wer “mal schnell” die errlog.err öffnen will, dem hilft diese Zeile:

ShellExecute ( open "$(SystemRoot:|+)system32\notepad.exe" "$(WsPath:|+)Errlog.err")

Was soviel heisst wie: Starte das Programm notepad.exe aus dem Verzeichnis das sich aus der Variable SystemRoot (=Windowsverz.) und system32 zusammensetzt und übergeben an das Programm notepad.exe als Parameter die zu öffnende Datei die im Workverz. liegt und errlog.err heisst.

Feldinhalt an einem Datensatz ändern

Auch Feldinhalte lassen sich über die Shell ändern. Mittels

___Changefield "SHORT_DESC=TEST"

kann das Feld SHORT_DESC (=Bezeichnung) auf den Inhalt “TEST” geändert werden.

Für die komplette Verwirrung :)

Für eine Liste aller Funktionen im PSP ruf mal an der Shell auf:

___CmpUtility(WritePublic)

Du erhältst eine Liste aller Funktionen und wo sie definiert sind. Ist aber ein bisschen viel Info auf einmal, aber zu beginn der Liste findest du einige interne Funktionen wie etwa “___Changefield”.

Woher soll ich die ganzen Befehle wissen?

Stellt sich allgemein vielleicht für dich die Frage: Woher soll ich die ganzen Befehle wie ___Changefield, ShellExecute, ___CmpUtility usw. wissen? Antwort: Sie stehen in der Entwicklerdokumentation, wie sie bis PSP 2009 und wieder seit PSP 2010 in PSP enthalten ist. Suche mal im PSP Serververz. nach compass5developer.pdf, PSProfDeveloperManualEnglish 2010.pdf oder auch Entwicklerhandbuch_Pro_pro.pdf. Gibt dir aber bitte keine Mühe: ich verschicke das Dokument nicht und beantworte keine Mails diesbezüglich! Wende dich an deinen PSP-Händler für weitere Infos. Wenn ich dein PSP-Händler sein sollte: Mail an meine Geschäftsemailadresse genügt ;)

Und jetzt viel Spaß beim spielen und probieren, z.B. wie du mit einer Zeile Code in der Shell ein PDF-Nebendokument von einer Inventor 2009 oder 2010 IDW erstellen kannst:

ApplCall AIMDSaveAsAttachment #DOCNAME0 "PDF" 0

Kommentare:

  1. Ich find das recht gefährlich was du hier veröffentlichst.
    Schließlich kann man auf der Shell Ebene auch einiges manipulieren was über die Oberfläche nicht möglich ist.
    Und der unerfahrene User weiß letztendlich nicht was er da tut.

    AntwortenLöschen
  2. Ein unerfahrener User sollte auch keine Adminrechte haben.

    AntwortenLöschen
  3. Also ich find's top das du dein Wissen mit anderen teilst!
    Bin schon gespannt auf Teil 3 :)

    AntwortenLöschen
  4. Klasse Beitrag. Interessiert mich sehr.
    Bin auch schon gespannt auf mehr.
    Vielleicht ein kleines Programmierbeispiel und wie man es mit p2Q_2000.exe kompiliert und anschließend in die Oberfläche von PSP einbaut.
    Danke.

    AntwortenLöschen

War der Beitrag hilfreich oder hast du eine Ergänzung dazu?
Ist noch eine Frage offen?
Ich freue mich auf deine Rückmeldung!

Related Posts Plugin for WordPress, Blogger...
Inventor FAQ Newsletter. Emailadresse: