Skip to content

ProEngineer Webschnittstelle (Teil 4)

So heute gibts nur einen Kurzeintrag zur Ausweisung von Parametern um diese z.B. mit externen Programmen auslesbar zu machen.
Das ganze ist wirklich simpel, nachdem die Verbindung zur ProEngineer Sitzung bereits hergestellt ist (davon gehe ich einfach mal aus ;-))

Ruft ihr entweder pwlParameterDesignationAdd oder pwlParameterDesignationRemove auf übergebt den Dateinamen,
einer Datei die sich in der aktiven Sitzung befindet und den Parameter der ausgewiesen oder die Ausweisung entfernt werden soll.

Das ganze könnte in einer kleinen Funktion etwa so aussehen:
function Designation ( Dateiname , Parameter , Mode )
{
        if ( Mode == "add" )
        {
                document.pwl.pwlParameterDesignationAdd ( Dateiname , Parameter );
        }
        else
        {
                document.pwl.pwlParameterDesignationRemove ( Dateiname , Parameter );
        }
}


Designation ( 'test.prt' , 'Benennung', 'add');
Designation ( 'test.prt' , 'Werkstoff', '');

Das Beispiel würde z.B. den Parameter Benennung lesbar in der Modelldatei stehen, der Werkstoff würde nicht mehr auftauchen.
Alle Parameter die nicht genannt werden, bleiben unverändert, d.h. ihr müsst für jeden Parameter die Funktion aufrufen, wenn ihr alle ändern möchtet.

So das war's für heute, ich versuche zum Wochenende mal die Bibliothek zum Auslesen der ProEngineer Dateien aufzuarbeiten,
damit könntet ihr dann die Parameter, welche ausgewiesen sind auslesen. Allerdings befindet sich die Bibliothek in einer frühen Alphaphase,
d.h. es könnte bei bestimmten Parametern und Wertkombinationen zu Fehlern kommen.
Die ProEngineer Daten sind natürlich nicht dazu da von externen Programmen ausgelesen zu werden, sonst wäre die Software unbrauchbar ^^

ProEngineer Webschnittstelle (Teil 3)

Naja, da diese Funktion in etwa der ähnelt für die Erzeugung eines Parameters,
werde ich nur noch die Änderung angeben, da die ersten Zeilen bei den Parameterfunktionen eigentlich weitestgehend identisch sind.

Wir verwenden nur statt document.pwl.pwlParameterValueCreate eine andere Funktion
        document.pwl.pwlParameterValueSet (
        Dateiname,
        ItemType,
        featureID,
        Parameter, ValueType,
        IntValue, FloatValue, StringValue, BoolValue);


Diese Änderung und es wird der entsprechende Parameter geupdatet, wenn der Parameter nicht existiert wird kein Fehler ausgegeben,
aber auch kein Parameter erzeugt, weswegen ich in meiner Toolsammlung meist so vorgegangen bin:
Zuerst hab ich Funktion für die Parameter Erzeugung aufgerufen und direkt danach diese Funktion hier. Es ist eigentlich ganz einfach erklärt,
wieso es keine Probleme gemacht hat, die Funktion zum Erzeugen ändert den Parameter nicht wenn dieser bereits existiert.
Die Vorteile dieser zwei Funktionen sind gleichzeitig ihre Schwachstellen, sie geben bei vorhanden bzw. nicht vorhanden Parametern keine Fehler aus,
dies müsste über zwei weitere Funktionen geprüft werden, erstens Abfrage der vorhandenen Parameter und zweitens überprüfen, ob der Parameter existiert. "ProEngineer Webschnittstelle (Teil 3)" vollständig lesen

ProEngineer Webschnittstelle (Teil 2)

So wie bereits erwähnt gibts heute den Auszug aus der Toolbox zum Erzeugen eines Parameter in ProEngineer mit Hilfe der Webschnittstelle.

Die ersten Zeilen haben wie beim Auslesen die Funktion die Berechtigungen zu Prüfen, dies ist bei allen Funktionen immer gleich.
function ParameterCreate(Dateiname,Parameter,Wert)
{
if (!pfcIsWindows())
    netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");


Es werden wieder die benötigten Variablen für die Funktion festgelegt, in diesem Fall ist es eh etwas seltsam,
die Funktion benötigt nicht nur den gewünschten Parameter (z.B. als String), sondern auch den Parameter in Float, Integer, Boolean,
erst über ValueType wird schließlich der Parametertyp hier String festgelegt.
    var ItemType;
    var StringValue = Wert;
    var FloatValue = parseFloat(Wert);
    var IntValue = parseInt(Wert);
    var BoolValue = (Wert.toLowerCase() == "true") ?
                    true : false;
    var ValueType = document.pwl.eval('PWL_VALUE_STRING');



    ItemType = document.pwl.eval('PWL_MODEL');
        featureID = -1;

Hier ist es wieder so wie bei der Funktion zum Auslesen, ItemType legt den Modelltyp fest (hier PWL_MODEL),
d.h. der Parameter wird in einem Bauteil (prt) oder Baugruppe (asm) erzeugt.

                document.pwl.pwlParameterCreate (
                        Dateiname,
                        ItemType,
                        featureID,
                        Parameter, ValueType,
                        IntValue, FloatValue, StringValue, BoolValue);

Diese Funktion ist das vorhin erwähnte seltsame, bevor ich einen String anlegen kann muss ich einen Integer und Float Wert festlegen,
welcher überhaupt nicht benötigt wird, aber diese Funktion ist allerdings nur ausgelegt um String in ProEngineer auch Zeichenketten festzulegen,
da es zum Zeitpunkt der Entwicklung nur für Text benötigt wurde und sich bis zur Einstellung der Entwicklung nicht geändert hat.

So das war die ganze Funktion, nachdem Aufruf von document.pwl.pwlParameterCreate wird versucht den Parameter zu erzeugen.

Das ganze Snippet erhaltet ihr gleich danach, so bis zum nächsten Mal



"ProEngineer Webschnittstelle (Teil 2)" vollständig lesen

Kleine Zwischeninfo zu den Tutorials aus der Toolsammlung

So nun ich möchte euch eine kleine Zwischeninfo bezüglich den geplanten Tutorials aus meiner Toolsammlung geben.
Nach einer kurzen Durchschau werde ich vorerst noch 3 Funktionen in Javascript veröffentlichen (Parameter erzeugen, ändern und ausweisen), die restlichen Teile der Sammlung müssen erst noch umgearbeitet werden,
da die geschriebenen Bibliotheken auf eine Einstellungsklasse zugreifen, müssen diese Teile natürlich erst entfernt und noch getestet werden ohne das andere Teile der Bibliotheken eingebunden sind.

D.h. es wird noch nach den 3 Parameterfunktionen noch etwas dauern bevor weitere Teile der Sammlung veröffentlicht werden, so viel von mir heute.

Ich werde öfters einmal einen kleinen Zwischenbericht darüber abgeben wie weit die Umarbeitung der Bibliotheken sind und welche Voraussetzungen dafür benötigt werden, bzw. auf welcher Konfiguration
die Bibliotheken gelaufen sind, eigentlich sollte es auf jedem normalen Webserver mit Apache, PHP5 und mySQL5 laufen, zusätzlich wird noch SQLite gelegentlich benötigt, aber ob diese Bibliotheken
veröffentlicht werden weiß ich jetzt noch nicht, da es eigentlich nur als Backup-System für die Datenbank im Einsatz war.

Morgen werde ich die nächste Funktion veröffentlichen, das Erzeugen eines Parameters.

So bis bald ;-)

ProEngineer Webschnittstelle (Teil 1)

So nun folgt der erste Teil der ProEngineer Webschnittstelle auch genannt Pro/Web.Link,
viele der zusätzlichen Tools, welche Händler mit liefern oder verkaufen, basieren darauf,
daneben existieren noch eine Schnittstelle für Java und eine für C.

Die Javascript/ActiveX Schnittstelle und die Java-Erweiterung werden kostenfrei mitgeliefert,
die Schnittstelle für C benötigt eine Extralizenz, welche sich die meisten wohl nicht anschaffen können,
werden oder wollen.

So nun kommen wir zur Funktion ParameterGet welche die vorhanden Parameter
aus einer aktiven Sitzung ausliest, es wird benötigt das sich das abzufragende Modell im Sitzungsspeicher befindet.

Wie bei allen Schnittstellen benötigen wir ist einmal eine Verbindung zum Programm, diese liefert ProEngineer
mit der Dokumentation bereits mit die benötigten Dateien werde ich in einem späteren Beitrag erwähnen.

Nun gut, die ersten zwei Zeilen haben folgenden Sinn, diese Fragen nach wird die Seite über den Programm internen
Webbrowser aufgerufen oder nicht, es wird versucht die benötigten Berechtigungen zu erhalten.

function ParameterGet(Dateiname)
{
   if (!pfcIsWindows())
    netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");



Als nächstes legen wir die verschiedenen Parameter an.

    var ret;
    var ItemType;
        var FeatureID;
        var Daten = new Object();
        Daten['Daten'] = new Object();
        Daten['Parameter'] = new Array();



    if (Dateiname == "")
    {
        return ;
    }

Mit if (Dateiname == "") kann der Browser davor bewahrt werden eine Fehlermeldung
auszuspucken, weil die Datei nicht gefunden oder die Daten nicht geladen werden konnten.


    ItemType = document.pwl.eval('PWL_MODEL');
                FeatureID = -1;
        ret = document.pwl.pwlMdlParametersGet(Dateiname);

Diese drei Zeilen legen folgendes fest:
ItemType ist ein Modell, d.h. eine Baugruppe oder ein Bauteil.
FeatureID wird in diesem Fall ignoriert, da wir kein besonderes Konstruktionselement wählen wollen, sondern die Baugruppe bzw. -teil.
pwlMdlParametersGet liest nun alle verfügbaren Parameter des Modells aus.


Der nächste Abschnitt liest die Daten von ret in ein Array Daten,
da ProEngineer aber zwischen verschiedenen Parametertypen unterscheiden müssen diese Daten korrekt ausgelesen werden,
da es sonst zu Fehlermeldungen der Schnittstelle kommt.

ProEngineer unterscheiden zwischen Double, String, Integer und Boolean Parameter,
diese werden entsprechend ausgelesen, damit Javascript mit diesen Daten korrekt umgeht.

    for (i = 0; i < ret.NumParams; i++)
    {
        var val_ret = document.pwl.pwlParameterValueGet(
                          Dateiname,
                          parseInt(ItemType),
                          FeatureID,
                          ret.ParamNames.Item(i));
                                         
        var answer = "";
                var parameter = "";
        if (val_ret.ParamType == parseInt(document.pwlc.PWL_VALUE_DOUBLE))
        {
            answer = val_ret.ParamDoubleVal;
        }
        else if (val_ret.ParamType == parseInt(document.pwlc.PWL_VALUE_STRING))
        {
            answer = val_ret.ParamStringVal;
                        if(answer == ""){ answer = "&nbsp;"; }
        }
        else if (val_ret.ParamType == parseInt(document.pwlc.PWL_VALUE_INTEGER))
        {
            answer = val_ret.ParamIntVal;
        }
        else if (val_ret.ParamType == parseInt(document.pwlc.PWL_VALUE_BOOLEAN))
        {
            answer = (val_ret.ParamBooleanVal) ? "true" : "false";
                }
                parameter = ret.ParamNames.Item(i);
               
                Daten['Daten']['' + parameter.toLowerCase() + ''] = '' + answer + '';
                Daten['Parameter'] = '' + parameter.toLowerCase() + '';
       


Ich hoffe, ich konnte es wenigstens einigermaßen verständlich rüberbringen, da ich vor weit über einem Jahr,
mit dieser Schnittstelle aufgehört habe und die Dokumentation leider nicht parat habe, kann ich natürlich auch
nicht alle Funktionen mehr 100%ig nachvollziehen. Eins werde ich noch versuchen, die entsprechenden Dokumentationseinträge
der benutzen Funktionen etwas zu erklären, soweit es mit der leider ziemlich undurchsichtigen Dokumentation funktioniert.
Als diese Toolsammlung geschrieben wurde war es mehr ein Learning-by-doing mit Test und Fehlerfaktor ;-)


"ProEngineer Webschnittstelle (Teil 1)" vollständig lesen