Servus Major,
ich beziehe mich jetzt mal auf das Datenbank-Modell von Compass2005, denke aber, dass sich hier nicht maßgeblich etwas geändert hat. Hier mal ein paar Eckpunkte zum Thema:
Prinzipiell kannst du die Datensätze einfach in die entsprechenden Tabellen der PSP-Datenbank einfügen, die Daten sind dann sofort im Programm verfügbar.
AIMKEY
Der AIMKEY ist der Primärschlüssel, der in allen Tabellen, die Anwender-Daten beinhalten, vorzufinden ist. Der AIMKEY eines Objekts ist systemweit eindeutig. Theoretisch kannst dort also irgendeine beliebige Nummer verwenden, zumindest die Seriennummer solltest aber als Dezimale verwenden (siehe unten), könnte durchaus sein, dass mal jemand auf die Idee kommt, auf diese Nummer abzufragen (was durchaus praktisch sein kann).
PSP selbst erstellt den AIMKEY über eine gespeicherte Prozedur, die in der Datenbank gespeichert ist. Diese wiederum tut nichts anderes, als die Daten aus der Tabelle AIMKEY auszulesen und zu aktualisieren. Der nächste freie AIMKEY setzt sich zusammen aus dem ganzzahligen Teil des Feldes AIMKEY und der konstanten 5stelligen Dezimale aus dem Feld SNR (welche früher noch der Seriennummer der Lizenz entsprach). Nach dem Auslesen wird der Wert im Feld AIMKEY um 1 erhöht.
Durch den Aufruf der Datenbank-Prozedur, die du auch selbst verwenden kannst, wird über eine explizite Transaktion zusätzlich noch sichergestellt, dass das Update des AIMKEYs abgeschlossen ist, bevor der nächste ausgelesen wird.
Wenn die sicher gehen kannst, dass kein Anwender PSP anrührt während deinem Import, kannst du also einfach den Wert aus AIMKEY nehmen und nach dem Import mit dem höchsten AIMKEY + 1 wieder aktualisieren.
Einfügen in die Tabellen
Jeder Datensatz ist in mindestens zwei Tabellen einzutragen, nämlich in der ELEMENT und in der objektspezifischen Tabelle, bei den Artikeln ist das die Tabelle PART. Die Verknüpfung erfolgt über den AIMKEY. Die Datensätze sind aufgrund der Constraints erst in die ELEMENT-Tabelle einzufügen.
A C H T U N G ! ! !
Die ELEMENT-Tabelle hat noch weitere Besonderheiten, die unbedingt beachtet werden müssen.
ENTITY_TYPE ist der Objekttyp, bei Artikeln ist das AIM.PART. Muss befüllt werden.
STATUSKEY ist der Status der Artikels, also freigegeben, in Arbeit etc. Der entsprechende 5stellige Nummerncode ist dort einzutragen.
CREATE_DATE (Anlagedatum) sollte unbedingt befüllt werden, es kann hier sonst zu Probleme mit dem Abfragen des Bearbeitungsstatus eines Datensatzes kommen. Achte darauf, dass die Uhrzeit dabei immer 00:00 Uhr haben muss.
Die Felder OWNER und OWNER_GROUP sind unbedingt zu füllen. OWNER ist für gewöhnliche der Benutzer, der den Artikel angelegt hat, in Form des PSP-Logins. Nachdem hier die ganze Rechteverwaltung dranhängt, ist unbedingt darauf zu achten, was hier eingetragen wird.
Für OWNER_GROUP gilt dasselbe. Früher wurde im Standard ENGINEERING_EMPLOYEES oder OFFICE_EMPLOYEES eingetragen, genau weiß ich es nicht mehr. Kannst dir die Standard-Gruppe aber aus der Konfiguration am EntityType auslesen. Solltet ihr spezielle Rechte-Konfigurationen haben, ist darauf zu achten, welche Gruppe hier eingetragen wird.
RIGHTS: auch hier hängt die Rechteverwaltung dran, vor allem die dynamischen Rechte werden hier gesteuert. Es handelt sich um ein Bit-Muster, das aus einem Binär-Code errechnet wird, der sich wiederum daraus zusammensetzt, welche Rechte ein Benutzer oder eine Gruppe auf den Datensatz besitzt, als L, R, A, W etc. Am einfachsten für dich wird es sein, einen bestehenden Datensatz in der Datenbank anzusehen, der in Status, Owner und Owner-Group dem entspricht, was du eintragen willst, und den Bit-Code einfach als konstanten Wert zu übernehmen. Achte darauf, dass dieser Code sich beim Statuswechsel zum Beispiel ändert, schau also genau hin, welchen Datensatz zu als Vorlage nimmst!
Ich weiß nicht, ob die WORLD_GROUP standardmäßig abgefragt wird, auch hier gilt: sieh dir einfach an, wie die bestehenden Datensätze vom System gefüllt werden.
Verknüpfungen:
Alle Verknüpfungen (abgesehen von der Sachmerkmalleiste) sind in der Tabelle XREF_ELEMENT zu finden. Sollten die Artikel also zu Stücklisten zusammengebastelt werden, musst die entsprechenden Einträge dort einfügen.
PARENT_AIMKEY und CHILD_AIMKEY sind jeweils die AIMKEYs der zu verknüpfenden Artikel, wobei der CHILD_AIMKEY immer eine Komponente eines anderen Aritkels darstellt. Der Relationship_ID ist der Typ der Verknüpfung, in deinem Fall Artikel zu Artikel, müsste meines Wissens AIM.XREF.PART sein. Die restlichen Felder der Tabelle beinhalten unter anderem die restlichen Daten der Stückliste, wie Positionsnummer und Menge.
Natürlich kannst du auch noch Verknüpfungen zu anderen Objekten, z.B. Konstruktionsdokumenten herstellen. Deren AIMKEY ließe sich z.B. über den IDENT der Tabelle DOCUMENTS auslesen (nicht vergessen, die Eindeutigkeit ist durch IDENT und REVISION) definiert.
Welcher der AIMKEYs dann im PARENT und im CHILD zu stehen hat, findest über die Tabelle RELATIONSHIP_TYPE raus. Dort sind alle möglichen Verknüpfungen aufgelistet, Parent und Child geben an, wo der jeweilige AIMKEY in der XREF_ELEMENT zu stehen hat. Die Relationship_Id findest ebenfalls in der Tabelle RELATIONSHIP_TYPE.
Deine Fehlermeldung mit dem NULL übrigens sagt dir eigentlich eh schon, was los ist. NULL bedeutet, dass in dem Feld noch kein Wert eingetragen ist. NULL ist übrigens nicht zu verwechseln mit einem Leerstring, also mit einem String der Länge 0. Das ist nicht dasselbe.
Einige Felder sind so definiert, dass sie keine NULL-Werte zulassen, einfach gesagt, diese Felder sind Muss-Felder laut Tabellen-Definition. Darunter fallen z.B. AIMEKY und IDENT. Welche Felder davon betroffen sind, lässt sich recht einfach über Enterprise-Manager oder QueryAnalyzer bzw. mit dem Studio bei SQL-2005 rausfinden.
So, das war's mal für's erste für Punkt 1.
Zu Punkt 2:
Ja, solche Anzeigen sind prinzipiell möglich. Voraussetzung: die Felder müssen gefüllt sein, gerade im Hinblick auf deinen Datenimport. Ohne SHORT_DESC der ELEMENT-Tabelle auch keine Kurzbezeichnung, um nur ein Beispiel zu nennen.
Desweiteren - ich nehme übrigens an dass du von den Struktur-Darstellungen sprichst - lässt sich die Anzeige im entsprechenden GUIView in der Konfiguration ändern. Nachdem dort Compass-Ausdrücke verwendbar sind, kannst so ziemlich alles an Daten anzeigen, was dir gefällt oder was gebraucht wird. Früher waren die Befehle alle in der Entwickler-Doku zu finden, haben sich mit der Zeit dann in die diversen Hilfe-Dateien verlagert. Keine Ahnung, wo sie heute sind. Nehme aber an, wenn noch so gar nichts damit zu tun hattest, wirst sicher etwas Einarbeitungszeit dafür brauchen.
A C H T U N G ! ! !
Ich mache nochmal darauf aufmerksam, gerade was den Import betrifft, dass mein Wissen doch schon relativ alt ist, und ich übernehme keine Garantie, dass meine Angaben hier vollständig sind oder dass sich diverse Einträge nicht schon grundlegend geändert haben!!!
Hoffe geholfen zu haben. Schönen Abend, WolfgangE
------------------
An Optimist Is A Person Who Has Not Been Shown All The Facts Yet!!!
[Diese Nachricht wurde von WolfgangE am 28. Aug. 2007 editiert.]
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP