Inhaltsverzeichnis
Compass
DEX
Ablage Ort fürs DEX Log :
C:\ProgramData\Autodesk\Productstream Data Export Utility\DataExportUtility.log
Filelinkname mit Pad belegen
___Selection ( enumerate __MARK__ ___XdwCmd "update DOCUMENT set FILE_LINKNAME=##(DOCNAME0) where AIMKEY=##(AIMKEY)" ); ___read() #DOCNAME0
Seletierte Daten ins DEX
___Selection ( enumerate __MARK__ ___XdwCmd "INSERT INTO PSP2VLT ( AIMKEY ) VALUES ( ##AIMKEY )" ); CREATE TABLE [dbo].[PSP2VLT]( [AIMKEY] [numeric](17, 5) NULL, [ID] [numeric](18, 0) IDENTITY(1,1) NOT NULL ) ON [PRIMARY] GO SELECT * FROM VIEW_ALL_DOCUMENT WHERE AIMKEY IN ( SELECT AIMKEY FROM PSP2VLT ) SELECT * FROM VIEW_ALL_PROJECT WHERE AIMKEY IN ( SELECT AIMKEY FROM PSP2VLT ) DELETE FROM PSP2VLT WHERE ID NOT IN (SELECT min(ID) FROM PSP2VLTxx Tab1 GROUP BY AIMKEY)
COMPASS JObserver
Allgemeines
Der Compass Jobserver stellt für die Bearbeitung von Inventor Dateien nur rudimentäre Funktionen zur Verfügung. Mit dem Tools INVEXP.EXE werden diese etwas erweitert. Damit ist eine wesentlich bessere Kontrolle der Konvertierung / Druck Vorgänge möglich.
Die aktuelle Version unterstützt
Inventor 2012 - 2018 AutoCAD 2012 - 2016 .Net Version : 4.0
Der aktuelle Stand ist 4.7.40.1134
Parameter
INVEXP.EXE ist eine Kommandozeilen Applikation, die über Parameter gesteuert wird.
Die Parameter sind:
Befehl <- Was soll gemacht werden Eingabe Datei <- Quell Datei Ausgabe Datei ( wenn Notwendig ) Parameter Datei ( wenn Notwendig )
Zur Übergabe stehen zwei Verfahren zur Verfügung :
Jeder Parameter einzeln
Invexp SOURCE ...xzy.ipt Invexp DESTINATION ...xzy.stp Invexp PARAMETER ...stp.ini Invexp STP
Alle Parameter gleichzeitig
InvExp MODUS QUELLE ZIEL INI
z.b.
Invexp STP xzy.ipt xzy.stp stp.ini
Einstellungen
Die Einstellung erfolgen in der Datei InvExp.exe.config Hierbei handelt es sich im eine XML Datei. Bitte nur mit dem Notepad bearbeiten. Bei Änderungen eine Sicherung der Ausgangsdatei anlegen !
Inventor
Gibt die Anzahl der Inventor Verwendungen an. Nach x Benutzungen wird der Inventor beendet, aus dem Speicher entfernt und neu gestartet. Defaultwert = 100, 0 - Inventor läuft ständig ( nicht empfohlen )
<setting name="COUNTER_MAX" serializeAs="String"> <value>100</value> </setting>
Log Datei
Bei der INVEXE.EXE wird eine Logdatei erstellt, in der alle Bildschirmausgaben geschrieben werden.
z.b. Log-10_01_2014.txt
Werte sind true / false
<setting name="LOG" serializeAs="String"> <value>True</value> </setting>
Debug
Im Debug Mode wird nach Ausführung eines Befehls auf ein RETURN des Anwenders gewartet. Damit kann der Ablauf besser verfolgt werden.
Werte sind true / false
<setting name="DEBUG" serializeAs="String"> <value>False</value> </setting>
Beispiel Batchdatei
SET PRG=d:\Jobs\InvExp SET DATA_IN=d:\Jobs\Testdaten SET DATA_OUT=d:\Jobs\temp cls "%PRG%\Invexp" SOURCE "%DATA_IN%\Fraese.iam" "%PRG%\InvExp" DESTINATION "%DATA_OUT%\Fraese.stp" "%PRG%\InvExp" PARAMETER "%PRG%\stp.ini" "%PRG%\InvExp" STP
Kommandos für die Ausführung
Es stehen die folgenden Befehle zur Verfügung :
PRT
drucken einer IDW
Invexp SOURCE ...xzy.idw Invexp PARAMETER ...my.settings Invexp PRT
Export einer PDF aus einer IDW. Die Parameter kommen aus der INI Datei
Invexp SOURCE ...xzy.idw Invexp DESTINATION ...xzy.pdf Invexp PARAMETER ...myPDF.ini Invexp PDF
DWG
Export einer DWG aus einer IDW. Die Parameter kommen aus der INI Datei Exportiert eine IDW als DWG
Invexp SOURCE ...xzy.idw Invexp DESTINATION ...xzy.dwg Invexp PARAMETER ...myDWG.ini Invexp DWG
DXF
Export einer DXF aus einer IDW. Die Parameter kommen aus der INI Datei
Invexp SOURCE ...xzy.idw Invexp DESTINATION ...xzy.dxf / ...xzy.zip Invexp PARAMETER ...myDXF.ini Invexp DXF
STP
Invexp SOURCE ...xzy.ipt / ...xyz.iam Invexp DESTINATION ...xzy.stp / ...xzy.zip Invexp PARAMETER ...msSTP.ini Invexp STP
STL
Export einer IPT oder IAM in STL Format. Empfehlung : immer nur IPTs !
Invexp SOURCE ...xzy.ipt / ...xyz.iam Invexp DESTINATION ...xzy.stl / ...xzy.zip Invexp PARAMETER ...mySTL.ini Invexp STL
Die Parameter für den Export liegen in der myStl.ini
[STL] ; ============================================ ; 0 = Binär 1 = Ascii OutputFileType=0 ; 2 = INCH ; 3 = FOOT ; 4 = CENTIMETER ; 5 = MILLIMETER ; 6 = METER ; 7 = MICRON ExportUnits=5 ; 0 = ONE FILE ; 1 = ONE FILE PER PART INSTANCE ExportFileStructure=0 ; 0 = HIGH ; 1 = MEDIUM ; 2 = LOW ; 3 = CUSTOM Resolution=1 ; Range 1 to 100. Value is used if Resolution is CUSTOM (3), otherwise value is ignored. ;SurfaceDeviation=20 ; Range 1 to 100. Value is used if Resolution is CUSTOM (3), otherwise value is ignored. ;NormalDeviation=20 ; Range 1 to 100. Value is used if Resolution is CUSTOM (3), otherwise value is ignored. ;MaxEdgeLength=20 ; Range 1 to 100. Value is used if Resolution is CUSTOM (3), otherwise value is ignored. ;AspectRatio=20 ; nicht in der Hilfe .... AllowMoveMeshNode=False ExportColor = Wahr
IGS
Invexp SOURCE ...xzy.ipt / ...xyz.iam Invexp DESTINATION ...xzy.igs / ...xzy.zip Invexp PARAMETER ...myIGS.ini Invexp IGS
DWF
Invexp SOURCE ...xyz.idw / ...xzy.ipt / ...xyz.iam Invexp DESTINATION ...xzy.dwf Invexp PARAMETER ...myDWF.ini Invexp DWF
DWFX
Wie DWF
SAT
Invexp SOURCE ...xzy.ipt / ...xyz.iam Invexp DESTINATION ...xzy.sat / ...xzy.zip Invexp PARAMETER ...mySAT.ini Invexp SAT
JT
—-
JPG
—–
BMP
—–
PNG
—-
TIFF
—-
XLS
—–
CSV
—-
ERSATZ
Erzeugen eines Ersatzmodels
Invexp SOURCE ...xyz.iam Invexp DESTINATION ...xyz.ipt Invexp PARAMETER ...mySet.ini Invexp ERSATZ
Aufbau der INI Datei
[ERSATZ] ; Steuerdatei für die erstellung eines Ersatzmodells ; Stand 28.08.2012 ; ============================================ ; IncludeAllSketches ; Method that includes all sketches from the source assembly. ; This includes top level sketches in the source assembly as well as sketches in sub-assemblies and parts. IncludeAllSketches=False ; ============================================ ; DeriveStyle ; kDeriveAsMultipleBodies = 80643 - as multiple bodie ; kDeriveAsSingleBodyNoSeams = 80642 - as a single body with no seams ; kDeriveAsSingleBodyWithSeams = 80641 - as a single body with seams ; kDeriveAsWorkSurface = 80644 - as work surfaces DeriveStyle=kDeriveAsSingleBodyNoSeams ; ============================================ ; IncludeAllTopLeveliMateDefinitions ; IncludeAllTopLevelWorkFeatures ; IncludeAllTopLevelSketches ; IncludeAllTopLevelParameters ; ; kDerivedBoundingBox = 27141 - the bounding box of the component will be used for the derivation ; die Bounding Box der Komponente wird für die Ableitung verwendet ; ; kDerivedExcludeAll = 27138 - all occurrences in the assembly will be ignored ; alle Vorkommen in der Baugruppe werden ignoriert ; ; kDerivedIncludeAll = 27137 - all occurrences in the assembly will be used and will ; add material to the solid body ; alle Vorkommen in der Baugruppe werden verwendet ; und wird zum Material des Festkörpers hinzufügen ; ; kDerivedIndividualDefined = 27140 - the suboccurrences define their behavior ; die sub Vorkommen definieren ihr Verhalten ; ; kDerivedIntersect = 27142 - the intersection of the component will be used for the derivation ; ; ; kDerivedSubtractAll = 27139 - all occurrences in the assembly will be used and will ; remove material from the solid body ; IncludeAllTopLeveliMateDefinitions=kDerivedIndividualDefined IncludeAllTopLevelWorkFeatures=kDerivedIncludeAll IncludeAllTopLevelSketches=kDerivedIncludeAll IncludeAllTopLevelParameters=kDerivedExcludeAll ; ============================================ ; ReducedMemoryMode ; Beim Erstellen eines Bauteils weniger Speicher verbraucht, ; indem Quellkörper aus dem Cache ausgeschlossen werden. Es werden ; keine Quellkörper im Browser angezeigt. Beim Auflösen oder Unterdrücken ; der Verknüpfung entfallen die Speichereinsparungen. ReducedMemoryMode=True ; ============================================ ; SetHolePatchingOptions ; kDerivedPatchAll = 88322 - all holes will be patched ; kDerivedPatchNone = 88321 - no holes will be patched ; kDerivedPatchRange = 88323 - holes within specified range will be patched ( Wird nicht unterstützt ) SetHolePatchingOptions=kDerivedPatchAll ; ============================================ ; SetHolePatchingOptions ; kDerivedRemoveNone = 88577 - no geometry will be removed ; kDerivedRemovePartsAndFaces = 88579 - invisible parts and faces will be removed ; kDerivedRemovePartsOnly = 88578 - whole invisible parts will be removed only ; ; Zahlenwert fest auf 25 ; Call oDerivedAssemblyDef. ; SetRemoveByVisibilityOptions(DerivedGeometryRemovalEnum.kDerivedRemovePartsAndFaces, 25) ; SetRemoveByVisibilityOptions=kDerivedRemovePartsAndFaces
—–
ERSUPD
Update eines Ersatzmodels
Invexp SOURCE ...xyz.ipt Invexp ERSUPD
—–
MIG
Die angegeben Datei wird migriert, wenn notwendig ( needsmigration = true )
Ein ev. vorhandener Schreibschutz wird für die Migration entfernt und im Anschluss wieder gesetzt
Invexp SOURCE ...xzy.idw / xyz.ipt / xyz.iam Invexp MIG
—–
Kundenspezifische Befehl
Mit dem Befehl DLL wird die INVEXP.EXE um Kundenspezifische Befehle erweitert.
Replikator
Compass Replikator
START.CMD
NET STOP "SQL Server-Agent (MSSQLSERVER)" PING 127.0.0.1 > NUL REM NET START "SQL Server-Agent (MSSQLSERVER)" PING 127.0.0.1 > NUL REM NET START "Autodesk Productstream Professional Replicator Service 2011" PING 127.0.0.1 > NUL
STOP.CMD
NET STOP "Autodesk Productstream Professional Replicator Service 2011" REM PING 127.0.0.1 > NUL PING 127.0.0.1 > NUL PING 127.0.0.1 > NUL REM KILL /IM /F COMPASS.EXE REM PING 127.0.0.1 > NUL REM NET STOP "SQL Server-Agent (MSSQLSERVER)" REM PING 127.0.0.1 > NUL PING 127.0.0.1 > NUL
RESTART.CMD
REM ###### REM REM Alles Stoppen REM REM ###### REM cd \ REM NET STOP "Autodesk Productstream Professional Replicator Service 2011" PING 127.0.0.1 > NULL REM NET STOP "SQL Server-Agent (MSSQLSERVER)" PING 127.0.0.1 > NULL REM KILL /IM /F COMPASS.EXE REM REM ###### REM REM repl Logs Speichern REM REM ###### REM DEL "C:\Dokumente und Einstellungen\All Users\Anwendungsdaten\Productstream Professional 2011\*.log" /s DEL "C:\Dokumente und Einstellungen\All Users\Anwendungsdaten\Productstream Professional 2011\*.Err" /s DEL "C:\Dokumente und Einstellungen\All Users\Anwendungsdaten\Productstream Professional 2011\*.trace" /s REM REM ###### REM REM Alles wieder speichern REM REM ###### REM NET START "SQL Server-Agent (MSSQLSERVER)" PING 127.0.0.1 > NULL REM NET START "Autodesk Productstream Professional Replicator Service 2011" PING 127.0.0.1 > NULL PING 127.0.0.1 > NULL PING 127.0.0.1 > NULL
Compass SQL - Scripte
Anbei eine Auflistung nützlicher SQL Scripte im Compass Umfeld. Die Scripte sind als Beispiel anzusehen ! Der Einsatz erfolgt aus eigenen Gefahr !!
Papierkorb löschen
select ENTITY_TYPE,count(*) from ELEMENT where DELETE_DATE is not null group by ENTITY_TYPE -- -- -- purge all deleted document -- delete from HISTORY_DOCUMENT where PARENT_AIMKEY in (select AIMKEY from ELEMENT where DELETE_DATE is not null and ENTITY_TYPE in ('AIM.DOC.ENG','AIM.DOC.OFF','AIM.DOC.SECONDARY') and (CHANGE_USER = 'Username') ) GO -- -- -- delete from XREF_ELEMENT where PARENT_AIMKEY in (select AIMKEY from ELEMENT where DELETE_DATE is not null and ENTITY_TYPE in ('AIM.DOC.ENG','AIM.DOC.OFF','AIM.DOC.SECONDARY')and (CHANGE_USER = 'Username')) GO -- -- -- delete from XREF_ELEMENT where CHILD_AIMKEY in (select AIMKEY from ELEMENT where DELETE_DATE is not null and ENTITY_TYPE in ('AIM.DOC.ENG','AIM.DOC.OFF','AIM.DOC.SECONDARY')and (CHANGE_USER = 'Username')) GO -- -- -- delete from DOCUMENT where AIMKEY in (select AIMKEY from ELEMENT where DELETE_DATE is not null and ENTITY_TYPE in ('AIM.DOC.ENG','AIM.DOC.OFF','AIM.DOC.SECONDARY') and (CHANGE_USER = 'Username' )) GO -- -- -- delete from ELEMENT where DELETE_DATE is not null and ENTITY_TYPE in ('AIM.DOC.ENG','AIM.DOC.OFF','AIM.DOC.SECONDARY') and (CHANGE_USER = 'Username' )
Finden doppelter Datensätze:
select ident,revision, count(*) from compass_pro_textar.history_document group by ident,revision having count(*)>1
????
SQL Script
select * from VIEW_DOCUMENT_ENGINEERING d where PART_NUMBER like '412%' and FILE_TYPE='A' and FILE_UTC>07/07/2004 and CUSTOM_1_SHORT like '\\CAD1%' and d.CUSTOM_1_SHORT in (select CUSTOM_1_SHORT from VIEW_DOCUMENT_ENGINEERING group by CUSTOM_1_SHORT having count(*) >1) order by d.CUSTOM_1_SHORT
????
select count(*) from (select count(*) num from part group by ident) where num > 1
—
????
select sum(num-1) from (select count(*) num from part group by ident) where num > 1
—
alles übertragen von ALT nach NEU (gleiche Struktur)
INSERT into NEU select * from ALT
????
</file> exec sp_changeobjectowner '[COMPASS].[aim_RPF_element]','dbo' exec sp_changeobjectowner '[COMPASS].[aim_RPF_xref_element]','dbo' </file>
Finden aller (mehrfachen) IDENT mit REVISION = 1 oder 01
SELECT * FROM DOCUMENT WHERE IDENT IN ( SELECT d.IDENT FROM DOCUMENT d WHERE ISNUMERIC(d.REVISION)=1 AND IDENT IN ( SELECT IDENT FROM DOCUMENT GROUP BY IDENT HAVING COUNT(1)>1 ) GROUP BY IDENT, CAST(d.REVISION AS NUMERIC) HAVING count(1)>1 )
Liste aller Komponenten die in einer Baugruppe verbaut sind mit Statuskey00003:
select * from VIEW_DOCUMENT_ENGINEERING where STATUSKEY<>'00003' and AIMKEY in (select X_CHILD_AIMKEY from VIEW_XREF_PARENT_DOCUMENT where X_RELATIONSHIP_ID='AIM.XREF.DOC.ENG' and STATUSKEY='00003') select PART_NUMBER, STATUSKEY from VIEW_DOCUMENT_ENGINEERING where STATUSKEY<>'00003' and AIMKEY in (select X_CHILD_AIMKEY from VIEW_XREF_PARENT_DOCUMENT where X_RELATIONSHIP_ID='AIM.XREF.DOC.ENG' and STATUSKEY='00003')
Alles was NULL (Leer) Ist aus der REVISION Aufliste
SELECT REVISION FROM DOCUMENT WHERE REVISION IS NULL ORDER BY REVISION
Und auf Startwert 00 setzen
UPDATE DOCUMENT SET REVISION = '00' WHERE REVISION IS NULL
Datenbak reparieren
Folgenden Script ermitteln Sie die fehlerverdächtige Datenbank(en) auf dem Server:
SELECT DBName=NAME, [Status]=state_desc FROM master.sys.databases WHERE state_desc='SUSPECT'
Im nächsten Schritt setzen Sie bringen Sie die Datenbank in den Notfallmodus, setzen dann Zugriff auf EInzelbenutzermodus und führen ein Prüfung der Datenbank durch:
USE master; GO
ALTER DATABASE [DATABASENAME] SET EMERGENCY GO
ALTER DATABASE [DATABASENAME] SET SINGLE_USER GO
DBCC CHECKDB ([DATABASENAME], REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS; GO
Anschließend wird nochmals eine Prüfung der Datenbank durchgeführt:
USE [DATABASENAME] GO
DBCC CHECKDB WITH NO_INFOMSGS; GO
Wenn diese letzte Prüfung fehlerfrei ausgeführt wurde, befindet sich die Datenbank immer noch im Einzelbenutzermodus. Die Modus Umschaltung auf den Mehrfachbenutzermodus wird mit folgendem Script durchgeführt:
USE master; GO
ALTER DATABASE [DATABASENAME] SET MULTI_USER GO
—
????
update ELEMENT set ENTITY_TYPE='AIM.DOC.ENG.STD' where AIMKEY in ( select AIMKEY from DOCUMENT where upper(FILE_LINKNAME) like '\\DATENCAD-SRV\COMPASS\DATA\INVENTOR_NORMTEILE%') update DOCUMENT set FILE_LINKNAME = replace(upper(FILE_LINKNAME),'\\DATENCAD-SRV\COMPASS\DATA\INVENTOR_NORMTEILE','#(INI:Inventor:StdPartPath_1)') where upper(FILE_LINKNAME) like '\\DATENCAD-SRV\COMPASS\DATA\INVENTOR_NORMTEILE%'
CheckCompass
Check aller Tabellen gegen die ELEMENT
Für alle Tabellen ( DOCUMENT / PART /…. ) muss es einen Eintrag auf in der ELEMENT geben oder Für alle Einträge in ELEMENT mit AIM.XXX.* muß es einen Eintrag in der entsprechenden Tabelle geben Die gelistet Einträge müssen aus der ELEMENT, XREF_ELEMENT, DOCUMENT, HISTORY_DOCUMENT raus ( AIM_SAVE Error )
Wenn Replikator auch REPL prüfen !!
-- (c) CAD Team Handzik -- -- COMPASS Integritäs Check -- -- V 0.9 Stand 13.02.2008 Hz - Start Version -- V 0.91 Stand 22.02.2008 Hz - Prüfen, was in der DOCUEMNT und nicht in der ELELEMT -- -- Name der Kundeumgebung -- USE compass_pro_cth -- -- Check aller Tabellen gegen die ELEMENT -- -- Für alle Tabellen ( DOCUMENT / PART /.... ) muss es einen Eintrag auf in der ELEMENT geben -- oder -- Für alle Einträge in ELEMENT mit AIM.XXX.* muß es einen Eintrag in der entsfile___chenden Tabelle geben -- -- Die gelistet Einträge müssen aus der ELEMENT -- XREF_ELEMENT -- DOCUMENT -- HISTORY_DOCUMENT raus ( AIM_SAVE Error ) -- Wenn Replikator auch REPL prüfen !! -- -- DECLARE @DEL AS INTEGER DECLARE @REPL AS INTEGER SET @REPL = 0 -------------------ACHTUNG SET @DEL = 0 --- ACHTUNG Bei 1 wird gelöscht -------------------ACHTUNG PRINT 'DOCUMENTE nicht ELEMENT >> Was ist in der DOCUMENT und nicht in der ELEMENT' SELECT E.AIMKEY, T.AIMKEY FROM ELEMENT AS E RIGHT OUTER JOIN DOCUMENT AS T ON E.AIMKEY = T.AIMKEY WHERE E.AIMKEY IS NULL PRINT '';PRINT ''; PRINT 'DOCUMENTE gegen ELEMENT >> Was ist in der ELEMENT und nicht in der DOCUMENT' SELECT E.AIMKEY FROM ELEMENT AS E LEFT OUTER JOIN DOCUMENT AS T ON E.AIMKEY = T.AIMKEY WHERE E.ENTITY_TYPE LIKE 'AIM.DOC%' AND T.AIMKEY IS NULL PRINT '';PRINT ''; PRINT 'DOCUMENTE gegen ELEMENT dann in die XREF_ELEMENT >> PARENT_AIMKEY abgeleichen' SELECT PARENT_AIMKEY FROM XREF_ELEMENT WHERE PARENT_AIMKEY IN ( SELECT E.AIMKEY FROM ELEMENT AS E LEFT OUTER JOIN DOCUMENT AS T ON E.AIMKEY = T.AIMKEY WHERE E.ENTITY_TYPE LIKE 'AIM.DOC%' AND T.AIMKEY IS NULL ) IF @DEL = 1 BEGIN DELETE FROM XREF_ELEMENT WHERE PARENT_AIMKEY IN ( SELECT E.AIMKEY FROM ELEMENT AS E LEFT OUTER JOIN DOCUMENT AS T ON E.AIMKEY = T.AIMKEY WHERE E.ENTITY_TYPE LIKE 'AIM.DOC%' AND T.AIMKEY IS NULL ) END PRINT '';PRINT ''; PRINT 'DOCUMENTE gegen ELEMENT dann in die XREF_ELEMENT >> CHILD_AIMKEY abgeleichen' SELECT CHILD_AIMKEY FROM XREF_ELEMENT WHERE CHILD_AIMKEY IN ( SELECT E.AIMKEY FROM ELEMENT AS E LEFT OUTER JOIN DOCUMENT AS T ON E.AIMKEY = T.AIMKEY WHERE E.ENTITY_TYPE LIKE 'AIM.DOC%' AND T.AIMKEY IS NULL ) IF @DEL = 1 BEGIN DELETE FROM XREF_ELEMENT WHERE CHILD_AIMKEY IN ( SELECT E.AIMKEY FROM ELEMENT AS E LEFT OUTER JOIN DOCUMENT AS T ON E.AIMKEY = T.AIMKEY WHERE E.ENTITY_TYPE LIKE 'AIM.DOC%' AND T.AIMKEY IS NULL ) END PRINT '';PRINT ''; PRINT 'DOCUMENTE gegen ELEMENT dann in die HISTORY_DOCUMENT AIMKEY abgleichen' SELECT PARENT_AIMKEY FROM HISTORY_DOCUMENT WHERE PARENT_AIMKEY IN ( SELECT E.AIMKEY FROM ELEMENT AS E LEFT OUTER JOIN DOCUMENT AS T ON E.AIMKEY = T.AIMKEY WHERE E.ENTITY_TYPE LIKE 'AIM.DOC%' AND T.AIMKEY IS NULL ) IF @DEL = 1 BEGIN DELETE FROM HISTORY_DOCUMENT WHERE PARENT_AIMKEY IN ( SELECT E.AIMKEY FROM ELEMENT AS E LEFT OUTER JOIN DOCUMENT AS T ON E.AIMKEY = T.AIMKEY WHERE E.ENTITY_TYPE LIKE 'AIM.DOC%' AND T.AIMKEY IS NULL ) END PRINT '';PRINT ''; IF @REPL = 1 BEGIN PRINT 'DOCUMENTE gegen ELEMENT dann in die REPL_DOCUMENT AIMKEY abgleichen' SELECT AIMKEY FROM REPL_DOCUMENT WHERE AIMKEY IN ( SELECT E.AIMKEY FROM ELEMENT AS E LEFT OUTER JOIN DOCUMENT AS T ON E.AIMKEY = T.AIMKEY WHERE E.ENTITY_TYPE LIKE 'AIM.DOC%' AND T.AIMKEY IS NULL ) PRINT '';PRINT '' PRINT 'DOCUMENTE gegen ELEMENT dann in die REPLICATORQ abgleichen' SELECT AIMKEY FROM REPLICATORQ WHERE AIMKEY IN ( SELECT E.AIMKEY FROM ELEMENT AS E LEFT OUTER JOIN DOCUMENT AS T ON E.AIMKEY = T.AIMKEY WHERE E.ENTITY_TYPE LIKE 'AIM.DOC%' AND T.AIMKEY IS NULL ) PRINT '' END -- Zuletzt alles aus der ELEMENT raus IF @DEL = 1 BEGIN PRINT 'DOCUMENT gegen ELEMENT löschen ...' DELETE FROM ELEMENT WHERE AIMKEY IN ( SELECT E.AIMKEY FROM ELEMENT AS E LEFT OUTER JOIN DOCUMENT AS T ON E.AIMKEY = T.AIMKEY WHERE E.ENTITY_TYPE LIKE 'AIM.DOC%' AND T.AIMKEY IS NULL ) PRINT 'ELEMENT gegen DOCUMENT löschen ...' DELETE FROM DOCUMENT WHERE AIMKEY IN ( SELECT T.AIMKEY FROM ELEMENT AS E RIGHT OUTER JOIN DOCUMENT AS T ON E.AIMKEY = T.AIMKEY WHERE E.AIMKEY IS NULL ) END PRINT '';PRINT ''; PRINT '#######################################################################################################################################################################################' PRINT 'ADDRESS gegen ELEMENT' SELECT E.AIMKEY FROM ELEMENT AS E LEFT OUTER JOIN ADDRESS AS T ON E.AIMKEY = T.AIMKEY WHERE E.ENTITY_TYPE LIKE 'AIM.ADR%' AND T.AIMKEY IS NULL PRINT '';PRINT ''; PRINT 'ADDRESS gegen ELEMENT in die XREF_ELEMENT >> PARENT' SELECT PARENT_AIMKEY FROM XREF_ELEMENT WHERE PARENT_AIMKEY IN ( SELECT E.AIMKEY FROM ELEMENT AS E LEFT OUTER JOIN ADDRESS AS T ON E.AIMKEY = T.AIMKEY WHERE E.ENTITY_TYPE LIKE 'AIM.ADR%' AND T.AIMKEY IS NULL ) IF @DEL = 1 BEGIN DELETE FROM XREF_ELEMENT WHERE PARENT_AIMKEY IN ( SELECT E.AIMKEY FROM ELEMENT AS E LEFT OUTER JOIN ADDRESS AS T ON E.AIMKEY = T.AIMKEY WHERE E.ENTITY_TYPE LIKE 'AIM.ADR%' AND T.AIMKEY IS NULL ) END PRINT '';PRINT ''; PRINT 'ADDRESS gegen ELEMENT in die XREF_ELEMENT >> CHILD' SELECT CHILD_AIMKEY FROM XREF_ELEMENT WHERE CHILD_AIMKEY IN ( SELECT E.AIMKEY FROM ELEMENT AS E LEFT OUTER JOIN ADDRESS AS T ON E.AIMKEY = T.AIMKEY WHERE E.ENTITY_TYPE LIKE 'AIM.ADR%' AND T.AIMKEY IS NULL ) IF @DEL = 1 BEGIN DELETE FROM XREF_ELEMENT WHERE CHILD_AIMKEY IN ( SELECT E.AIMKEY FROM ELEMENT AS E LEFT OUTER JOIN ADDRESS AS T ON E.AIMKEY = T.AIMKEY WHERE E.ENTITY_TYPE LIKE 'AIM.ADR%' AND T.AIMKEY IS NULL ) END PRINT '';PRINT ''; -- Zuletzt alles aus der ELEMENT raus IF @DEL = 1 BEGIN PRINT 'ADDRESS gegen ELEMENT löschen ...' DELETE FROM ELEMENT WHERE AIMKEY IN ( SELECT E.AIMKEY FROM ELEMENT AS E LEFT OUTER JOIN ADDRESS AS T ON E.AIMKEY = T.AIMKEY WHERE E.ENTITY_TYPE LIKE 'AIM.ADR%' AND T.AIMKEY IS NULL ) END PRINT '';PRINT ''; PRINT '#######################################################################################################################################################################################' PRINT 'CONTACT gegen ELEMENT' SELECT E.AIMKEY FROM ELEMENT AS E LEFT OUTER JOIN CONTACT AS T ON E.AIMKEY = T.AIMKEY WHERE E.ENTITY_TYPE LIKE 'AIM.CON%' AND T.AIMKEY IS NULL PRINT '';PRINT ''; </file> <file> PRINT 'CONTACT gegen ELEMENT in die XREF_ELEMENT >> PARENT' SELECT PARENT_AIMKEY FROM XREF_ELEMENT WHERE PARENT_AIMKEY IN ( SELECT E.AIMKEY FROM ELEMENT AS E LEFT OUTER JOIN CONTACT AS T ON E.AIMKEY = T.AIMKEY WHERE E.ENTITY_TYPE LIKE 'AIM.CON%' AND T.AIMKEY IS NULL ) IF @DEL = 1 BEGIN DELETE FROM XREF_ELEMENT WHERE PARENT_AIMKEY IN ( SELECT E.AIMKEY FROM ELEMENT AS E LEFT OUTER JOIN CONTACT AS T ON E.AIMKEY = T.AIMKEY WHERE E.ENTITY_TYPE LIKE 'AIM.CON%' AND T.AIMKEY IS NULL ) END PRINT '';PRINT ''; PRINT 'CONTACT gegen ELEMENT in die XREF_ELEMENT >> CHILD' SELECT CHILD_AIMKEY FROM XREF_ELEMENT WHERE CHILD_AIMKEY IN ( SELECT E.AIMKEY FROM ELEMENT AS E LEFT OUTER JOIN CONTACT AS T ON E.AIMKEY = T.AIMKEY WHERE E.ENTITY_TYPE LIKE 'AIM.CON%' AND T.AIMKEY IS NULL ) IF @DEL = 1 BEGIN DELETE FROM XREF_ELEMENT WHERE CHILD_AIMKEY IN ( SELECT E.AIMKEY FROM ELEMENT AS E LEFT OUTER JOIN CONTACT AS T ON E.AIMKEY = T.AIMKEY WHERE E.ENTITY_TYPE LIKE 'AIM.CON%' AND T.AIMKEY IS NULL ) END PRINT '';PRINT ''; -- Zuletzt alles aus der ELEMENT raus IF @DEL = 1 BEGIN PRINT 'CONTACT gegen ELEMENT löschen ...' DELETE FROM ELEMENT WHERE AIMKEY IN ( SELECT E.AIMKEY FROM ELEMENT AS E LEFT OUTER JOIN CONTACT AS T ON E.AIMKEY = T.AIMKEY WHERE E.ENTITY_TYPE LIKE 'AIM.CON%' AND T.AIMKEY IS NULL ) END PRINT '';PRINT ''; PRINT '#######################################################################################################################################################################################' PRINT 'PART gegen ELEMENT' SELECT E.AIMKEY FROM ELEMENT AS E LEFT OUTER JOIN PART AS T ON E.AIMKEY = T.AIMKEY WHERE E.ENTITY_TYPE LIKE 'AIM.PART' AND T.AIMKEY IS NULL PRINT '';PRINT''; PRINT 'PART gegen ELEMENT dann in die XREF_ELEMENT >> PARENT' SELECT PARENT_AIMKEY FROM XREF_ELEMENT WHERE PARENT_AIMKEY IN ( SELECT E.AIMKEY FROM ELEMENT AS E LEFT OUTER JOIN PART AS T ON E.AIMKEY = T.AIMKEY WHERE E.ENTITY_TYPE LIKE 'AIM.PART' AND T.AIMKEY IS NULL ) IF @DEL = 1 BEGIN DELETE FROM XREF_ELEMENT WHERE PARENT_AIMKEY IN ( SELECT E.AIMKEY FROM ELEMENT AS E LEFT OUTER JOIN PART AS T ON E.AIMKEY = T.AIMKEY WHERE E.ENTITY_TYPE LIKE 'AIM.PART' AND T.AIMKEY IS NULL ) END PRINT '';PRINT ''; PRINT 'PART gegen ELEMENT dann in die XREF_ELEMENT >> CHILD' SELECT CHILD_AIMKEY FROM XREF_ELEMENT WHERE CHILD_AIMKEY IN ( SELECT E.AIMKEY FROM ELEMENT AS E LEFT OUTER JOIN PART AS T ON E.AIMKEY = T.AIMKEY WHERE E.ENTITY_TYPE LIKE 'AIM.PART' AND T.AIMKEY IS NULL ) IF @DEL = 1 BEGIN DELETE FROM XREF_ELEMENT WHERE CHILD_AIMKEY IN ( SELECT E.AIMKEY FROM ELEMENT AS E LEFT OUTER JOIN PART AS T ON E.AIMKEY = T.AIMKEY WHERE E.ENTITY_TYPE LIKE 'AIM.PART' AND T.AIMKEY IS NULL ) END PRINT '';PRINT''; PRINT 'PART gegen ELEMENT dann in die HISTORY_PART AIMKEY abgleichen' SELECT PARENT_AIMKEY FROM HISTORY_PART WHERE PARENT_AIMKEY IN ( SELECT E.AIMKEY FROM ELEMENT AS E LEFT OUTER JOIN PART AS T ON E.AIMKEY = T.AIMKEY WHERE E.ENTITY_TYPE LIKE 'AIM.PART' AND T.AIMKEY IS NULL ) IF @DEL = 1 BEGIN DELETE FROM HISTORY_PART WHERE PARENT_AIMKEY IN ( SELECT E.AIMKEY FROM ELEMENT AS E LEFT OUTER JOIN PART AS T ON E.AIMKEY = T.AIMKEY WHERE E.ENTITY_TYPE LIKE 'AIM.PART' AND T.AIMKEY IS NULL ) END PRINT '';PRINT ''; -- Zuletzt alles aus der ELEMENT raus IF @DEL = 1 BEGIN PRINT 'PART gegen ELEMENT löschen ...' DELETE FROM ELEMENT WHERE AIMKEY IN ( SELECT E.AIMKEY FROM ELEMENT AS E LEFT OUTER JOIN PART AS T ON E.AIMKEY = T.AIMKEY WHERE E.ENTITY_TYPE LIKE 'AIM.PART' AND T.AIMKEY IS NULL ) END PRINT '';PRINT ''; PRINT '#######################################################################################################################################################################################' PRINT 'PROJECT gegen ELEMENT' SELECT E.AIMKEY FROM ELEMENT AS E LEFT OUTER JOIN PROJECT AS T ON E.AIMKEY = T.AIMKEY WHERE E.ENTITY_TYPE LIKE 'AIM.PRO' AND T.AIMKEY IS NULL PRINT '';PRINT''; PRINT 'PROJECT gegen ELEMENT dann in die XREF_ELEMENT >> PARENT' SELECT PARENT_AIMKEY FROM XREF_ELEMENT WHERE PARENT_AIMKEY IN ( SELECT E.AIMKEY FROM ELEMENT AS E LEFT OUTER JOIN PROJECT AS T ON E.AIMKEY = T.AIMKEY WHERE E.ENTITY_TYPE LIKE 'AIM.PRO' AND T.AIMKEY IS NULL ) IF @DEL = 1 BEGIN DELETE FROM XREF_ELEMENT WHERE PARENT_AIMKEY IN ( SELECT E.AIMKEY FROM ELEMENT AS E LEFT OUTER JOIN PROJECT AS T ON E.AIMKEY = T.AIMKEY WHERE E.ENTITY_TYPE LIKE 'AIM.PRO' AND T.AIMKEY IS NULL ) END PRINT '';PRINT ''; PRINT 'PROJECT gegen ELEMENT dann in die XREF_ELEMENT >> CHILD' SELECT CHILD_AIMKEY FROM XREF_ELEMENT WHERE CHILD_AIMKEY IN ( SELECT E.AIMKEY FROM ELEMENT AS E LEFT OUTER JOIN PROJECT AS T ON E.AIMKEY = T.AIMKEY WHERE E.ENTITY_TYPE LIKE 'AIM.PRO' AND T.AIMKEY IS NULL ) IF @DEL = 1 BEGIN DELETE FROM XREF_ELEMENT WHERE CHILD_AIMKEY IN ( SELECT E.AIMKEY FROM ELEMENT AS E LEFT OUTER JOIN PROJECT AS T ON E.AIMKEY = T.AIMKEY WHERE E.ENTITY_TYPE LIKE 'AIM.PRO' AND T.AIMKEY IS NULL ) END PRINT '';PRINT''; </file> <file> -- Zuletzt alles aus der ELEMENT raus IF @DEL = 1 BEGIN PRINT 'PROJECT gegen ELEMENT löschen ...' DELETE FROM ELEMENT WHERE AIMKEY IN ( SELECT E.AIMKEY FROM ELEMENT AS E LEFT OUTER JOIN PROJECT AS T ON E.AIMKEY = T.AIMKEY WHERE E.ENTITY_TYPE LIKE 'AIM.PRO' AND T.AIMKEY IS NULL ) END PRINT '';PRINT ''; PRINT '#######################################################################################################################################################################################' -- -- --############################################################################################# --############################################################################################# -- -- Hier ist der Ausgangswert REVISION wichtig -- Im Standard ist der Wert leer -- PRINT 'HISTORY_DOCUMENT gegen ELEMENT' SELECT E.AIMKEY FROM ELEMENT AS E LEFT OUTER JOIN HISTORY_DOCUMENT AS T ON E.AIMKEY = T.PARENT_AIMKEY WHERE E.ENTITY_TYPE LIKE 'AIM.DOC%' AND T.REVISION IS NOT NULL AND T.PARENT_AIMKEY IS NULL PRINT '';PRINT''; PRINT '#######################################################################################################################################################################################'
Tabelle erweitern
-- Tabelle DOCUMENT BEGIN TRANSACTION ALTER TABLE dbo.DOCUMENT ADD TEMPKOMNR varchar(30) NULL, TEMPGETRTYP varchar(30) NULL GO COMMIT GO -- Erweiterung der Sichten IF EXISTS (SELECT * FROM tempdb..sysobjects WHERE id=OBJECT_ID('tempdb..#tmpErrors')) DROP TABLE #tmpErrors CREATE TABLE #tmpErrors (ERROR INT, MODULE VARCHAR(30), OBJECT VARCHAR(128), POSITION INT, DESCRIPTION VARCHAR(256)) SET XACT_ABORT ON IF EXISTS (SELECT * FROM sysobjects WHERE id=object_id('VIEW_DOCUMENT') AND OBJECTPROPERTY(id, 'IsView')=1) BEGIN IF EXISTS (SELECT * FROM tempdb..sysobjects WHERE id=OBJECT_ID('tempdb..#AIM_UPD_VIEWS')) DELETE FROM #AIM_UPD_VIEWS ELSE CREATE TABLE #AIM_UPD_VIEWS (ALIAS sysname NULL, PCOLUMN sysname NULL, CHANGE_REQUEST VARCHAR(3)) INSERT INTO #AIM_UPD_VIEWS (ALIAS, PCOLUMN, CHANGE_REQUEST) VALUES ('TEMPKOMNR', 'D.TEMPKOMNR', 'ADD') INSERT INTO #AIM_UPD_VIEWS (ALIAS, PCOLUMN, CHANGE_REQUEST) VALUES ('TEMPGETRTYP', 'TEMPGETRTYP', 'ADD') EXECUTE aim_update_view 'VIEW_ALL_DOCUMENT' EXECUTE aim_update_view 'VIEW_DOCUMENT' EXECUTE aim_update_view 'VIEW_DOCUMENT_ENGINEERING' EXECUTE aim_update_view 'VIEW_XREF_DOCUMENT' EXECUTE aim_update_view 'VIEW_XREF_PARENT_DOCUMENT' EXECUTE aim_update_view 'VIEW_XREF_CHILD_DOCUMENT' END GO
Abgleich IDW in DOCUMENT
USE [compass_pro] GO /****** Objekt: Trigger [dbo].[CTH_UpdateDocumentIdw] Skriptdatum: 04/22/2009 10:45:40 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: Uwe Handzik -- Create date: 14.08.2007 -- Description: Abgleichen der IDW -- ============================================= ALTER TRIGGER [dbo].[CTH_UpdateDocumentIdw] ON [dbo].[DOCUMENT] FOR UPDATE NOT FOR REPLICATION AS BEGIN SET NOCOUNT ON; BEGIN TRY -- Alles über den AIMKEY DECLARE @newAIMKEY numeric(17,5) -- Ist das Doument eine IDW DECLARE @newIDW nvarchar(10) -- Abzugleichenden WERTE Start DECLARE @newCPR_ZEICHNR nvarchar(255) DECLARE @newCPR_ARTIKEL nvarchar(255) DECLARE @newCPR_ANLAGE nvarchar(255) DECLARE @newCPR_AUFTRAG nvarchar(255) DECLARE @newCPR_VTEIL nvarchar(255) DECLARE @newCPR_ERS_DURCH nvarchar(255) DECLARE @newMATERIAL nvarchar(255) DECLARE @newCPR_CFELD_11 nvarchar(255) DECLARE @newCPR_LOGOCAD nvarchar(255) DECLARE @newCPR_FARBE nvarchar(255) DECLARE @newCPR_FTEIL nvarchar(255) DECLARE @newCPR_ERS_FUER nvarchar(255) DECLARE @newCPR_MSTAB nvarchar(255) DECLARE @newCPR_TOLERANZ nvarchar(255) -- Die Englische Einträge DECLARE @newCPR_SHORT_ENU nvarchar(255) DECLARE @newCPR_LONG_ENU nvarchar(255) DECLARE @newCPR_MAT_ENU nvarchar(255) DECLARE @newCPR_STICH_ENU nvarchar(255) DECLARE @newCPR_FARBE_ENU nvarchar(255) DECLARE @newCPR_CFELD_19 nvarchar(255) -- Abzugleichenden WERTE Start SELECT @newAIMKEY = AIMKEY FROM Inserted SELECT @newCPR_ZEICHNR = CPR_ZEICHNR FROM Inserted SELECT @newCPR_ARTIKEL = CPR_ARTIKEL FROM Inserted SELECT @newCPR_ANLAGE = CPR_ANLAGE FROM Inserted SELECT @newCPR_AUFTRAG = CPR_AUFTRAG FROM Inserted SELECT @newCPR_VTEIL = CPR_VTEIL FROM Inserted SELECT @newCPR_ERS_DURCH = CPR_ERS_DURCH FROM Inserted SELECT @newMATERIAL = MATERIAL FROM Inserted SELECT @newCPR_CFELD_11 = CPR_CFELD_11 FROM Inserted SELECT @newCPR_LOGOCAD = CPR_LOGOCAD FROM Inserted SELECT @newCPR_FARBE = CPR_FARBE FROM Inserted SELECT @newCPR_FTEIL = CPR_FTEIL FROM Inserted SELECT @newCPR_ERS_FUER = CPR_ERS_FUER FROM Inserted SELECT @newCPR_MSTAB = CPR_MSTAB FROM Inserted SELECT @newCPR_TOLERANZ = CPR_TOLERANZ FROM Inserted -- Die Englische Einträge SELECT @newCPR_SHORT_ENU = CPR_SHORT_ENU FROM Inserted SELECT @newCPR_LONG_ENU = CPR_LONG_ENU FROM Inserted SELECT @newCPR_MAT_ENU = CPR_MAT_ENU FROM Inserted SELECT @newCPR_STICH_ENU = CPR_STICH_ENU FROM Inserted SELECT @newCPR_FARBE_ENU = CPR_FARBE_ENU FROM Inserted SELECT @newCPR_CFELD_19 = CPR_CFELD_19 FROM Inserted IF @newAIMKEY IS NULL SELECT @newAIMKEY = 11.11 IF @newCPR_ZEICHNR IS NULL SELECT @newCPR_ZEICHNR = '' IF @newCPR_ARTIKEL IS NULL SELECT @newCPR_ARTIKEL = '' IF @newCPR_ANLAGE IS NULL SELECT @newCPR_ANLAGE = '' IF @newCPR_AUFTRAG IS NULL SELECT @newCPR_AUFTRAG = '' IF @newCPR_VTEIL IS NULL SELECT @newCPR_VTEIL = '' IF @newCPR_ERS_DURCH IS NULL SELECT @newCPR_ERS_DURCH = '' IF @newMATERIAL IS NULL SELECT @newMATERIAL = '' IF @newCPR_CFELD_11 IS NULL SELECT @newCPR_CFELD_11 = '' IF @newCPR_LOGOCAD IS NULL SELECT @newCPR_LOGOCAD = '' IF @newCPR_FARBE IS NULL SELECT @newCPR_FARBE = '' IF @newCPR_FTEIL IS NULL SELECT @newCPR_FTEIL = '' IF @newCPR_ERS_FUER IS NULL SELECT @newCPR_ERS_FUER = '' IF @newCPR_MSTAB IS NULL SELECT @newCPR_MSTAB = '' IF @newCPR_TOLERANZ IS NULL SELECT @newCPR_TOLERANZ = '' -- Die Englische Einträge IF @newCPR_SHORT_ENU IS NULL SELECT @newCPR_SHORT_ENU = '' IF @newCPR_LONG_ENU IS NULL SELECT @newCPR_LONG_ENU = '' IF @newCPR_MAT_ENU IS NULL SELECT @newCPR_MAT_ENU = '' IF @newCPR_STICH_ENU IS NULL SELECT @newCPR_STICH_ENU = '' IF @newCPR_FARBE_ENU IS NULL SELECT @newCPR_FARBE_ENU = '' IF @newCPR_CFELD_19 IS NULL SELECT @newCPR_CFELD_19 = '' --- --- AIMKEY ermittelt, - In XREF_ELEMENT Child(er) Suchen --- declare @ChildAimKey numeric(17,5) declare @ParentAimKey numeric(17,5) DECLARE Document_Cursor CURSOR FOR SELECT PARENT_AIMKEY, CHILD_AIMKEY FROM XREF_ELEMENT WHERE CHILD_AIMKEY = @newAIMKEY OPEN Document_Cursor FETCH NEXT FROM Document_Cursor INTO @ChildAimKey, @ParentAimKey WHILE @@FETCH_STATUS = 0 BEGIN -- Nachschauen ob IDW SELECT @newIDW = (SELECT FILE_EXT FROM DOCUMENT WHERE AIMKEY = @ChildAimKey ) IF upper(@newIDW) = 'IDW' UPDATE DOCUMENT SET CPR_ZEICHNR = @newCPR_ZEICHNR , CPR_ARTIKEL = @newCPR_ARTIKEL , CPR_ANLAGE = @newCPR_ANLAGE , CPR_AUFTRAG = @newCPR_AUFTRAG , CPR_VTEIL = @newCPR_VTEIL , CPR_ERS_DURCH = @newCPR_ERS_DURCH, MATERIAL = @newMATERIAL , CPR_CFELD_11 = @newCPR_CFELD_11 , CPR_LOGOCAD = @newCPR_LOGOCAD , CPR_FARBE = @newCPR_FARBE , CPR_FTEIL = @newCPR_FTEIL , CPR_ERS_FUER = @newCPR_ERS_FUER , CPR_MSTAB = @newCPR_MSTAB , CPR_TOLERANZ = @newCPR_TOLERANZ , CPR_SHORT_ENU = @newCPR_SHORT_ENU, CPR_LONG_ENU = @newCPR_LONG_ENU , CPR_MAT_ENU = @newCPR_MAT_ENU , CPR_STICH_ENU = @newCPR_STICH_ENU, CPR_FARBE_ENU = @newCPR_FARBE_ENU, CPR_CFELD_19 = @newCPR_CFELD_19 WHERE AIMKEY = @ChildAimKey FETCH NEXT FROM Document_Cursor INTO @ChildAimKey, @ParentAimKey END CLOSE Document_Cursor DEALLOCATE Document_Cursor END TRY BEGIN CATCH INSERT dbo.cth_errorlog ( ERRORNUMBER, ERRORSEVERITY, ERRORSTATE, ERRORPROCEDURE, ERRORLINE, ERRORMESSAGE ) VALUES ( CAST ( Error_NUMBER() AS VARCHAR(5)) , CAST ( Error_SEVERITY() as VARCHAR(2)) , CAST ( Error_STATE() AS VARCHAR(3)) , Error_PROCEDURE(), CAST ( Error_LINE() AS VARCHAR(3)), Error_MESSAGE() ); END CATCH END --USE [compass_pro] --GO --/****** Objekt: Table [dbo].[cth_errorlog] / --SET ANSI_NULLS ON --GO --SET QUOTED_IDENTIFIER ON --GO --CREATE TABLE [dbo].[cth_errorlog]( -- [ERRORNUMBER] [nvarchar](50) NULL, -- [ERRORSEVERITY] [nchar](10) NULL, -- [ERRORSTATE] [nchar](10) NULL, -- [ERRORPROCEDURE] [nchar](255) NULL, -- [ERRORLINE] [nchar](10) NULL, -- [ERRORMESSAGE] [nchar](255) NULL --) ON [PRIMARY]
Abgleich IDW in ELEMENT
USE [compass_pro] GO /****** Objekt: Trigger [dbo].[CTH_UpdateElementIdw] Skriptdatum: 04/22/2009 10:46:43 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: Uwe Handzik -- Create date: 14.08.2007 -- Description: Abgleichen der IDW -- ============================================= ALTER TRIGGER [dbo].[CTH_UpdateElementIdw] ON [dbo].[ELEMENT] FOR UPDATE NOT FOR REPLICATION AS BEGIN SET NOCOUNT ON; BEGIN TRY -- Alles über den AIMKEY DECLARE @newAIMKEY numeric(17,5) -- Ist das Doument eine IDW DECLARE @newIDW nvarchar(10) -- Abzugleichenden WERTE Start DECLARE @newSHORT_DESC nvarchar(255) DECLARE @newLONG_DESC nvarchar(255) DECLARE @newCATEGORY nvarchar(255) DECLARE @newCUSTOM_1_SHORT nvarchar(255) -- Abzugleichenden WERTE Start SELECT @newAIMKEY = AIMKEY FROM Inserted SELECT @newSHORT_DESC = SHORT_DESC FROM Inserted SELECT @newLONG_DESC = LONG_DESC FROM Inserted SELECT @newCATEGORY = CATEGORY FROM Inserted SELECT @newCUSTOM_1_SHORT = CUSTOM_1_SHORT FROM Inserted IF @newAIMKEY IS NULL SELECT @newAIMKEY = 11.11 IF @newSHORT_DESC IS NULL SELECT @newSHORT_DESC = '' IF @newLONG_DESC IS NULL SELECT @newLONG_DESC = '' IF @newCATEGORY IS NULL SELECT @newCATEGORY = '' IF @newCUSTOM_1_SHORT IS NULL SELECT @newCUSTOM_1_SHORT = '' --- --- AIMKEY ermittelt, - In XREF_ELEMENT Child(er) Suchen --- declare @ChildAimKey numeric(17,5) declare @ParentAimKey numeric(17,5) DECLARE Document_Cursor CURSOR FOR SELECT PARENT_AIMKEY, CHILD_AIMKEY FROM XREF_ELEMENT WHERE CHILD_AIMKEY = @newAIMKEY OPEN Document_Cursor FETCH NEXT FROM Document_Cursor INTO @ChildAimKey, @ParentAimKey WHILE @@FETCH_STATUS = 0 BEGIN -- Nachschauen ob IDW SELECT @newIDW = (SELECT FILE_EXT FROM DOCUMENT WHERE AIMKEY = @ChildAimKey ) IF upper(@newIDW) = 'IDW' UPDATE ELEMENT SET SHORT_DESC = @newSHORT_DESC, LONG_DESC = @newLONG_DESC, CATEGORY = @newCATEGORY, CUSTOM_1_SHORT = @newCUSTOM_1_SHORT WHERE AIMKEY = @ChildAimKey FETCH NEXT FROM Document_Cursor INTO @ChildAimKey, @ParentAimKey END CLOSE Document_Cursor DEALLOCATE Document_Cursor END TRY BEGIN CATCH INSERT dbo.cth_errorlog ( ERRORNUMBER, ERRORSEVERITY, ERRORSTATE, ERRORPROCEDURE, ERRORLINE, ERRORMESSAGE ) VALUES ( CAST ( Error_NUMBER() AS VARCHAR(5)) , CAST ( Error_SEVERITY() as VARCHAR(2)) , CAST ( Error_STATE() AS VARCHAR(3)) , Error_PROCEDURE(), CAST ( Error_LINE() AS VARCHAR(3)), Error_MESSAGE() ); END CATCH END --USE [compass_pro] --GO --/****** Objekt: Table [dbo].[cth_errorlog] / --SET ANSI_NULLS ON --GO --SET QUOTED_IDENTIFIER ON --GO --CREATE TABLE [dbo].[cth_errorlog]( -- [ERRORNUMBER] [nvarchar](50) NULL, -- [ERRORSEVERITY] [nchar](10) NULL, -- [ERRORSTATE] [nchar](10) NULL, -- [ERRORPROCEDURE] [nchar](255) NULL, -- [ERRORLINE] [nchar](10) NULL, -- [ERRORMESSAGE] [nchar](255) NULL --) ON [PRIMARY]
}}
—
====Trigger Update Status
—
====SET_FILE_SHARE_WITH
—
====InsertDocumentsIntoAllLocations
—
====Repl Status
====Einsame IPTs
====Aufheben der Replikation
====Abgleich Karten 1.1
{{collapse(SQL Script ...) <file> -- -- Installation für Kartenabgleich IPT / IAM /IPN mit IDW -- -- (C) by CAD Team Handzik - Dipl. Ing. Uwe Handzik -- -- Version 2.1 Stand 30.04.2011 -- USE compass_easy GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO --############################################################################################################################## -- -- Error Tabelle anlegen -- IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'cth_errorlog') DROP TABLE cth_errorlog; GO CREATE TABLE [dbo].cth_errorlog( [pkErrorHandlingID] [int] IDENTITY(1,1) NOT NULL, [Error_Number] [int] NOT NULL, [Error_Message] [varchar](4000) COLLATE Latin1_General_BIN NULL, [Error_Severity] [smallint] NOT NULL, [Error_State] [smallint] NOT NULL DEFAULT ((1)), [Error_Procedure] [varchar](200) COLLATE Latin1_General_BIN NOT NULL, [Error_Line] [int] NOT NULL DEFAULT ((0)), [UserName] [varchar](128) COLLATE Latin1_General_BIN NOT NULL DEFAULT (''), [HostName] [varchar](128) COLLATE Latin1_General_BIN NOT NULL DEFAULT (''), [Time_Stamp] datetime NOT NULL, PRIMARY KEY CLUSTERED ( [pkErrorHandlingID] ASC )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] GO Print 'CREATE TABLE cth_errorlog' GO --############################################################################################################################## -- Store Procedure für CthErrorHandling löschen IF OBJECT_ID ('CthErrorHandling', 'P') IS NOT NULL DROP PROCEDURE CthErrorHandling GO Print 'DROP PROCEDURE CthErrorHandling' GO --############################################################################################################################## -- ============================================= -- Author : Uwe Handzik -- Ersellt am : 24.09.2009 -- Version : 1.0 -- Description : Error Handling für den Rest -- Aufruf mit EXEC dbo.CthErrorHandling -- ============================================= CREATE procedure dbo.CthErrorHandling AS BEGIN -- Declaration statements DECLARE @Error_Number int DECLARE @Error_Message varchar(4000) DECLARE @Error_Severity int DECLARE @Error_State int DECLARE @Error_Procedure varchar(200) DECLARE @Error_Line int DECLARE @UserName varchar(200) DECLARE @HostName varchar(200) DECLARE @Time_Stamp datetime -- Initialize variables SELECT @Error_Number = isnull(error_number(),0), @Error_Message = isnull(error_message(),'NULL Message'), @Error_Severity = isnull(error_severity(),0), @Error_State = isnull(error_state(),1), @Error_Line = isnull(error_line(), 0), @Error_Procedure = isnull(error_procedure(),''), @UserName = SUSER_SNAME(), @HostName = HOST_NAME(), @Time_Stamp = GETDATE(); -- Insert into the dbo.ErrorHandling table INSERT INTO dbo.cth_errorlog (Error_Number, Error_Message, Error_Severity, Error_State, Error_Line, Error_Procedure, UserName, HostName, Time_Stamp) SELECT @Error_Number, @Error_Message, @Error_Severity, @Error_State, @Error_Line, @Error_Procedure, @UserName, @HostName, @Time_Stamp END GO Print 'CREATE PROCEDURE CthErrorHandling' GO --############################################################################################################################## -- -- LOG Tabelle anlegen -- -- Handhabung : INSERT dbo.cth_log ( POS, MESSAGE ) VALUES 'Pos der MSG', 'Wert' -- IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'cth_log') DROP TABLE cth_log; GO Print 'DROP TABLE cth_log' GO CREATE TABLE [dbo].[cth_log]( [POS] [nVARCHAR] (50) NULL, [MESSAGE] [nchar] (255) NULL ) ON [PRIMARY] GO Print 'CREATE TABLE cth_log' GO --############################################################################################################################## -- -- Sync Felder in der DOCUMENT anlegen if not exists (select * from syscolumns where id=object_id('DOCUMENT') and name='CTH_SYNC') alter table DOCUMENT add CTH_SYNC varchar(4) NULL if not exists (select * from syscolumns where id=object_id('DOCUMENT') and name='CTH_SYNC_AT') alter table DOCUMENT add CTH_SYNC_AT varchar(30) NULL if not exists (select * from syscolumns where id=object_id('DOCUMENT') and name='CTH_SYNC_JN') alter table DOCUMENT add CTH_SYNC_JN varchar(4) NULL GO Print 'Sync Felder in der DOCUMENT anlegen' GO -- Erweiterung der Sichten IF EXISTS (SELECT * FROM tempdb..sysobjects WHERE id=OBJECT_ID('tempdb..#tmpErrors')) DROP TABLE #tmpErrors CREATE TABLE #tmpErrors (ERROR INT, MODULE VARCHAR(30), OBJECT VARCHAR(128), POSITION INT, DESCRIPTION VARCHAR(256)) SET XACT_ABORT ON IF EXISTS (SELECT * FROM sysobjects WHERE id=object_id('VIEW_DOCUMENT') AND OBJECTPROPERTY(id, 'IsView')=1) BEGIN IF EXISTS (SELECT * FROM tempdb..sysobjects WHERE id=OBJECT_ID('tempdb..#AIM_UPD_VIEWS')) DELETE FROM #AIM_UPD_VIEWS ELSE CREATE TABLE #AIM_UPD_VIEWS (ALIAS sysname NULL, PCOLUMN sysname NULL, CHANGE_REQUEST VARCHAR(3)) INSERT INTO #AIM_UPD_VIEWS (ALIAS, PCOLUMN, CHANGE_REQUEST) VALUES ('CTH_SYNC', 'D.CTH_SYNC', 'ADD') INSERT INTO #AIM_UPD_VIEWS (ALIAS, PCOLUMN, CHANGE_REQUEST) VALUES ('CTH_SYNC_AT', 'D.CTH_SYNC_AT', 'ADD') INSERT INTO #AIM_UPD_VIEWS (ALIAS, PCOLUMN, CHANGE_REQUEST) VALUES ('CTH_SYNC_JN', 'D.CTH_SYNC_JN', 'ADD') EXECUTE aim_update_view 'VIEW_ALL_DOCUMENT' EXECUTE aim_update_view 'VIEW_DOCUMENT' EXECUTE aim_update_view 'VIEW_DOCUMENT_ENGINEERING' EXECUTE aim_update_view 'VIEW_DOCUMENT_OFFICE' EXECUTE aim_update_view 'VIEW_XREF_DOCUMENT' EXECUTE aim_update_view 'VIEW_XREF_PARENT_DOCUMENT' EXECUTE aim_update_view 'VIEW_XREF_CHILD_DOCUMENT' END GO Print 'Erweiterung der Sichten' GO --############################################################################################################################## -- Store Procedure für DOCUMENT löschen IF OBJECT_ID ('CTH_Sync_IDW', 'P') IS NOT NULL DROP PROCEDURE CTH_Sync_IDW GO Print 'DROP PROCEDURE CTH_Sync_IDW' GO --############################################################################################################################## -- ============================================= -- Author : Uwe Handzik -- Ersellt am : 24.09.2009 -- Version : 1.1 -- Description : Abgleichen der IDW -- Trigger für die DOCUMENT -- Gleicht IDW ab wenn änderung in DOCUMENT -- -- 1.1 Alter Tabel raus -- ============================================= CREATE PROCEDURE [dbo].[CTH_Sync_IDW] @argAIMKEY NUMERIC(17,5) AS DECLARE @newAIMKEY NUMERIC(17,5) DECLARE @ChildAimKey NUMERIC(17,5) DECLARE @ParentAimKey NUMERIC(17,5) DECLARE @newIDW nVARCHAR(255) BEGIN SET @newAIMKEY = @argAIMKEY SET NOCOUNT ON; BEGIN TRY --- AIMKEY ermittelt, - In XREF_ELEMENT Child(er) Suchen DECLARE Document_Cursor CURSOR FOR SELECT PARENT_AIMKEY, CHILD_AIMKEY FROM XREF_ELEMENT WHERE CHILD_AIMKEY = @newAIMKEY AND RELATIONSHIP_ID = 'AIM.XREF.DOC.ENG' OPEN Document_Cursor FETCH NEXT FROM Document_Cursor INTO @ChildAimKey, @ParentAimKey WHILE @@FETCH_STATUS = 0 BEGIN -- Nachschauen ob IDW SELECT @newIDW = (SELECT FILE_TYPE FROM DOCUMENT WHERE AIMKEY = @ChildAimKey ) IF upper(@newIDW) = 'IDW' BEGIN -- -- Debug Info -- --INSERT dbo.cth_log ( POS, MESSAGE ) VALUES ( 'CTH_Sync_IDW UPDATE', CAST ( @ChildAimKey AS VARCHAR(30))) -- Sync Flag setzen UPDATE DOCUMENT SET CTH_SYNC = 'SYNC', CTH_SYNC_AT = CONVERT(varchar(20), GetDate()) WHERE AIMKEY = @ChildAimKey -- Stored Proc ist Kundenabhängig EXECUTE CTH_SYNC_KUNDEN_FELDER @ParentAimKey, @ChildAimKey END -- IS IDW FETCH NEXT FROM Document_Cursor INTO @ChildAimKey, @ParentAimKey END -- WHILE CLOSE Document_Cursor DEALLOCATE Document_Cursor END TRY BEGIN CATCH ROLLBACK TRANSACTION EXEC dbo.CthErrorHandling END CATCH RETURN END GO Print 'CREATE PROCEDURE CTH_Sync_IDW' GO --############################################################################################################################## -- -- Trigger für XREF löschen IF OBJECT_ID ('CTH_InsertDocIdw', 'TR') IS NOT NULL DROP TRIGGER CTH_InsertDocIdw GO Print 'DROP TRIGGER CTH_InsertDocIdw' GO --############################################################################################################################## -- -- Author : Uwe Handzik -- Ersellt am : 24.09.2009 -- Version : 1.0 -- Description : Abgleichen der IDW -- Trigger für die XREF_ELEMENT -- Gleicht IDW ab, die mit kopiert wird -- CREATE TRIGGER [dbo].[CTH_InsertDocIdw] ON [dbo].[XREF_ELEMENT] FOR INSERT NOT FOR REPLICATION AS BEGIN SET NOCOUNT ON; BEGIN TRY DECLARE @PARENT_AIMKEY NUMERIC(17,5) DECLARE @CHILD_AIMKEY NUMERIC(17,5) DECLARE @FILE_TYPE VARCHAR(10) SELECT @PARENT_AIMKEY = ( SELECT PARENT_AIMKEY FROM Inserted ) SELECT @CHILD_AIMKEY = ( SELECT CHILD_AIMKEY FROM Inserted ) SELECT @FILE_TYPE = ( SELECT FILE_TYPE FROM DOCUMENT WHERE AIMKEY = @PARENT_AIMKEY ) IF UPPER( @FILE_TYPE ) = 'IDW' BEGIN -- -- Debug Info -- --INSERT dbo.cth_log ( POS, MESSAGE ) VALUES ('CTH_InsertDocIdw', 'TRIGGER IDW' ) EXECUTE CTH_Sync_IDW @CHILD_AIMKEY END END TRY BEGIN CATCH ROLLBACK TRANSACTION EXEC dbo.CthErrorHandling END CATCH END GO Print 'CREATE TRIGGER CTH_InsertDocIdw' GO --############################################################################################################################## -- Trigger für ELEMENT löschen IF OBJECT_ID ('CTH_UpdateEleIdw', 'TR') IS NOT NULL DROP TRIGGER CTH_UpdateEleIdw GO Print 'DROP TRIGGER CTH_UpdateEleIdw' GO --############################################################################################################################## -- -- Author : Uwe Handzik -- Ersellt am : 24.09.2009 -- Version : 1.0 -- Description : Abgleichen der IDW -- Trigger für die ELEMENT -- Gleicht IDW ab wenn änderung in ELEMENT -- CREATE TRIGGER [dbo].[CTH_UpdateEleIdw] ON [dbo].[ELEMENT] FOR UPDATE NOT FOR REPLICATION AS BEGIN SET NOCOUNT ON; BEGIN TRY DECLARE @AIMKEY NUMERIC(17,5) DECLARE @FILE_TYPE VARCHAR(10) SELECT @AIMKEY = (SELECT AIMKEY FROM Inserted) SELECT @FILE_TYPE = (SELECT FILE_TYPE FROM DOCUMENT WHERE AIMKEY = @AIMKEY) IF @FILE_TYPE IS NOT NULL BEGIN IF UPPER(@FILE_TYPE) = 'IPT' OR UPPER(@FILE_TYPE) = 'IAM' OR UPPER(@FILE_TYPE) = 'IPN' BEGIN -- -- Debug Info -- --INSERT dbo.cth_log ( POS, MESSAGE ) VALUES ('CTH_UpdateEleIdw', 'TRIGGER' ) EXECUTE CTH_Sync_IDW @AIMKEY END END END TRY BEGIN CATCH ROLLBACK TRANSACTION EXEC dbo.CthErrorHandling END CATCH END GO Print 'CREATE TRIGGER CTH_UpdateEleIdw' GO --############################################################################################################################## -- Trigger für DOCUMENT löschen IF OBJECT_ID ('CTH_UpdateDocIdw', 'TR') IS NOT NULL DROP TRIGGER CTH_UpdateDocIdw GO Print 'DROP TRIGGER CTH_UpdateDocIdw' GO --############################################################################################################################## -- -- Author : Uwe Handzik -- Ersellt am : 24.09.2009 -- Version : 1.0 -- Description : Abgleichen der IDW -- Trigger für die DOCUMENT -- Gleicht IDW ab wenn änderung in DOCUMENT -- CREATE TRIGGER [dbo].[CTH_UpdateDocIdw] ON [dbo].[DOCUMENT] FOR UPDATE NOT FOR REPLICATION AS BEGIN SET NOCOUNT ON; BEGIN TRY DECLARE @AIMKEY NUMERIC(17,5) DECLARE @FILE_TYPE VARCHAR(10) SELECT @AIMKEY = (SELECT AIMKEY FROM Inserted ) SELECT @FILE_TYPE = (SELECT FILE_EXT FROM Inserted ) IF UPPER(@FILE_TYPE) = 'IPT' OR UPPER(@FILE_TYPE) = 'IAM' OR UPPER(@FILE_TYPE) = 'IPN' BEGIN -- -- Debug Info -- --INSERT dbo.cth_log ( POS, MESSAGE ) VALUES ('CTH_UpdateDocIdw', 'TRIGGER IPT/IAM/IPN' ) EXECUTE CTH_Sync_IDW @AIMKEY END END TRY BEGIN CATCH ROLLBACK TRANSACTION EXEC dbo.CthErrorHandling END CATCH END GO Print 'CREATE TRIGGER CTH_UpdateDocIdw' GO --############################################################################################################################## }} <file> ---- =====Compass Tipps und Tricks===== ---- ====Compass Password==== bis 2009 EASYcompass DBPASSWORD=CCRY00104709B69CDE85DB8529EC0312D5C5B30EC9 ab 2009 ADSKpspro5! DBPASSWORD=CCRY001015CE7934194891D6D49B8EC529380A33FA ---- ====Compass Inventor ADDin==== Die ClsId für das Compass Inventor ADDin: <file> 2008 {A8EE8583-8E6D-4042-9A89-1015560D3331} ? 2011 {02CCE528-B046-49BA-96F9-F6CDCF5F9B07} 2012 {0B874991-1A5B-4D21-B156-DF288BD8424A} 2013 {DFDECA20-9329-4E10-97E6-FF7AF0AD942E} 2014 {DFDECA20-9329-4E10-97E6-FF7AF0AD942E} 2015 {DFDECA20-9329-4E10-97E6-FF7AF0AD942E} 2015 {DFDECA20-9329-4E10-97E6-FF7AF0AD942E} </file> ===== Compass Jobserver ===== ==== VBA ==== <file> ApplCall AIMDOpenVBAProject "$CTH_IVBPATH\Export.ivb" ApplCall AIMDExecuteVBAMacro Export mod_STP PublishSTP </file> ====Property Update==== Mit Inventor : JBSPropUpdate; Mit Apfile___ntice <file> ___forceunlock; ApplCall AIMDUpdateProps2 #DOCNAME0 2; ___forceunlock; </file> Wenn Dirty Steuerung ___XDWCMD("UPDATE DOCUMENT SET CTH_DIRTY_H=#SYSDATE WHERE AIMKEY=#AIMKEY"); ==== User Name bei der Ausführung ==== Unter Befehle bei der Anlage: set MY_USER=$USERID; JBSSubstJobField (CMD_file____JOB); .... Unter Befehle vor der Ausführung: ... ___SHELL( md("\\Server\Export\$(MY_USER)\#(SYSDATE:s0.4)-#(SYSDATE:s4.2)-#(SYSDATE:s6.2)" ... ==== Anbindung INVEXP ==== in der Compass INI ;;; ;;; Einstellungen CTH für JobServer ;;; ;;; CTH_INVEXP : Kompletter Pfad incl. name der EXE Datei ;;; CTH_INVINI : Verzeichnis mit den INI Dateien ;;; CTH_INVEXP=D:\Compass\InvExp\InvExp.exe CTH_INVINI=D:\Compass\InvExp CTH_INVDST=C:\CompassExport systemx( "$(CTH_INVEXP)" SOURCE "#DOCNAME0" ); systemx( "$(CTH_INVEXP)" DESTINATION "#DOCNAME1" ); systemx( "$(CTH_INVEXP)" PARAMETER "$(CTH_INVINI)\PDF.INI" ); systemx( "$(CTH_INVEXP)" PDF );