Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  Autodesk Productstream Professional
  Ident generieren (in DB)

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
  
Phoenix/PDM-Lösung mit Anbindung ans ERP - Abläufe optimieren , ein Anwenderbericht
Autor Thema:  Ident generieren (in DB) (916 mal gelesen)
AWagner
Mitglied
Software-engineer


Sehen Sie sich das Profil von AWagner an!   Senden Sie eine Private Message an AWagner  Schreiben Sie einen Gästebucheintrag für AWagner

Beiträge: 32
Registriert: 27.11.2007

erstellt am: 30. Jun. 2008 17:09    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Leute,

ich wollte mal fragen ob von euch jemand weiß ob es eine Stored Procedure gibt die einen Ident generieren kann. So wie es auch die Funktion aim_generate_aimkey gibt - die mir einen neuen aimkey erstellt.

Warum ich die Funktion brauche:
ich möchte meine PSP-Datenbank mit einer anderen Datenbank synchronisieren. Wenn also in der externen DB eine Organisation dazugekommen ist muss ich in meiner PSP-DB ein Insert durchführen. Den Aimkey lass ich mir von der aim_generate_aimkey erstellen - jedoch ist auch der IDENT unique.
Also brauche ich eine Funktion die mir aus dem zB. Org-00112 ein Org-00113 generiert.

Wär toll wenn mir jemand weiterhelfen könnte.

mfg Andreas

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

T to the F
Mitglied



Sehen Sie sich das Profil von T to the F an!   Senden Sie eine Private Message an T to the F  Schreiben Sie einen Gästebucheintrag für T to the F

Beiträge: 398
Registriert: 06.06.2007

Win 7 x64 SP1
PrDS 2012 Ultimate
Vault Pro 2012
i7 M640
8 GB
Quadro FX 1800M

erstellt am: 01. Jul. 2008 08:46    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für AWagner 10 Unities + Antwort hilfreich

Hi,
also innerhalb von Compass kannst du dir den IDENT ausgeben lassen mit #(GetMaxKey IDENT="Org-00000" 4 5) und dann den Wert hochzählen.

Ich würde die Stored Procedure so machen:
Einen select max auf den ident machen in der tabelle wo dus brauchst: etwa so...:
SELECT MAX (IDENT) FROM dbo.DOCUMENT WHERE IDENT IS NOT NULL

das in eine Variable schreiben und +1 machen und fertig...


ich hoffe das entspricht etwas was du dir vorstellst.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

AWagner
Mitglied
Software-engineer


Sehen Sie sich das Profil von AWagner an!   Senden Sie eine Private Message an AWagner  Schreiben Sie einen Gästebucheintrag für AWagner

Beiträge: 32
Registriert: 27.11.2007

erstellt am: 01. Jul. 2008 09:20    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hy,

ja die Funktion - "#(GetMaxKey IDENT="Org-00000" 4 5)" kenn ich - kann ich aber hier nicht benutzen da die Synchronisation rein auf Datenbankebene geschehen soll.

bezüglich deinem Vorschlag: ich kann doch keinen String + 1 zählen! oder doch? (mit den Typkonvertierungen in TSQL hab ich noch etwas probleme)

Hab folgendes versucht:

DECLARE @Ident as varchar(15);

SELECT @Ident = MAX(IDENT) FROM CONTACT WHERE IDENT IS NOT NULL
PRINT @Ident; 
SET @Ident = @Ident + 1  --Folgender Fehler: Fehler beim Konvertieren des varchar-Wertes 'PER-0001' in den int-Datentyp.
PRINT @Ident;

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

T to the F
Mitglied



Sehen Sie sich das Profil von T to the F an!   Senden Sie eine Private Message an T to the F  Schreiben Sie einen Gästebucheintrag für T to the F

Beiträge: 398
Registriert: 06.06.2007

Win 7 x64 SP1
PrDS 2012 Ultimate
Vault Pro 2012
i7 M640
8 GB
Quadro FX 1800M

erstellt am: 02. Jul. 2008 09:47    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für AWagner 10 Unities + Antwort hilfreich

Boah... So ich hab etz weng getüftelt^^

Code:

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[GetParent]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[GetParent]
GO
CREATE PROCEDURE GetParent @Ident INT OUTPUT
AS
BEGIN

SELECT @Ident=  MAX (CAST((SUBSTRING (IDENT,5,7)) as int)) FROM DOCUMENT WHERE IDENT IS NOT NULL AND IDENT LIKE 'TRA-%';
SET @Ident = @Ident +1
SELECT  REPLACE(STR(@Ident,7),' ',0) AS RetValue
END


Du musst:
FROM DOCUMENT in dein FROM CONTACT oder so umändern und

des 'TRA-%' mit 'ORG-%' oder was du brauchst ersetzten.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

AWagner
Mitglied
Software-engineer


Sehen Sie sich das Profil von AWagner an!   Senden Sie eine Private Message an AWagner  Schreiben Sie einen Gästebucheintrag für AWagner

Beiträge: 32
Registriert: 27.11.2007

erstellt am: 02. Jul. 2008 10:31    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hey, wow, vielen dank ...
ne schöne, einfache, kurze Lösung ...

hab mich gestern noch ziemlich lange mit dem Problem rumgeschlagen und bin auf eine ziemlich komplizierte und lange Variante gekommen.

in einer eigenen Procedure CREATEIDENT mit Input+Outputwert @Startwert

SET @Count = LEN(@Startwert);
SET @Ident = SUBSTRING(@Startwert, @Count-1, @Count)
WHILE ISNUMERIC(@Ident) = 1
BEGIN
  SET @Count = @Count - 1
  SET @Ident = SUBSTRING(@Startwert, @Count-1, @Count)
END
SET @Ident = SUBSTRING(@Startwert, 1,@Count)
SET @Temp = SUBSTRING(@Startwert, @Count + 1, LEN(@Startwert) - @Count);
SET @Zahl =  CAST(@Temp as int); --CONVERT(int, SUBSTRING(@Startwert, @Count + 1, LEN(@Startwert) - @Count - 1))
SET @Zahl = @Zahl + 1
SET @TempZahl = FLOOR(log10(@Zahl))
SET @Ident = @Ident + REPLICATE(0,LEN(@Startwert)-@Count-FLOOR(log10(@Zahl))-1) + STR(@Zahl, @TempZahl + 1);

einziger vorteil dabei - der Inputwert (@Startwert) kann dynamisch sein (ORG-xxx | PER-xxxxx | A-xxx)

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

WolfgangE
Mitglied



Sehen Sie sich das Profil von WolfgangE an!   Senden Sie eine Private Message an WolfgangE  Schreiben Sie einen Gästebucheintrag für WolfgangE

Beiträge: 1006
Registriert: 29.01.2003

erstellt am: 02. Jul. 2008 12:05    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für AWagner 10 Unities + Antwort hilfreich

Spät aber doch noch eine andere Variante. Stammt zwar noch aus Compass2000-zeiten, könnte aber immer noch funktionieren, einfach mal testen:

Declare @myStartKey varchar(2048)
--Startwert für den IDENT. Entweder fix mitgeben oder z.B. alla "Select Max(IDENT) From VIEW_CONTACT Where ENTITY_TYPE = 'AIM.CONTACT'" auslesen. Geschmack- und Performance-Sache;

DECLARE @table varchar(128)
DECLARE @range char(1)
DECLARE @colid varchar(2048)
DECLARE @collen varchar(512)

SET @myNewIdent = 'ORG-00001' -- Startwert für die Ident-Generierung
SET @table = 'VIEW_ALL_CONTACT'
SET @range = '0'
/*
0 = numerisch (0-9)
a = Kleinbuchstaben (a-z)
A = Großbuchstaben (A-Z)
x = alphanumerisch (0-9 und a-z)
*/

SET @colid = 'IDENT'
SET @collen = '15' -- Länge des IDENT-Feldes, bei Bedarf anpassen;

EXEC aim_create_key @myNewIdent OUTPUT , @table, @range, @colid, @collen
Set @myNewIdent = CONVERT(nvarchar,@myNewIdent)
--Ident generiert in: @myNewIdent


Ciao, WolfgangE

------------------
An Optimist Is A Person Who Has Not Been Shown All The Facts Yet!!!

[Diese Nachricht wurde von WolfgangE am 02. Jul. 2008 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

AWagner
Mitglied
Software-engineer


Sehen Sie sich das Profil von AWagner an!   Senden Sie eine Private Message an AWagner  Schreiben Sie einen Gästebucheintrag für AWagner

Beiträge: 32
Registriert: 27.11.2007

erstellt am: 02. Jul. 2008 12:42    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Juhuuu, ...

genau das wollte ich wissen.
Hab mir schon fast gedacht das evt. die Funktion aim_create_key die gute ist 
Jedoch wusste ich nicht mit welchen werten ich sie füttern muss um zum gewünschten ergebniss zu kommen. Hab einige varianten ausprobiert - hatte aber nie erfolg.

Vielen Dank euch beiden.

Ne kurze Frage hab ich aber noch.
Ist es nicht vielleicht besser als @Table die Tabelle dbo.CONTACT anzugeben?
Der View VIEW_ALL_CONTACT muss ja aus 2 Tabellen aufgebaut werden.
Müsste Performancemässig schneller sein oder?

mfg Andreas

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

WolfgangE
Mitglied



Sehen Sie sich das Profil von WolfgangE an!   Senden Sie eine Private Message an WolfgangE  Schreiben Sie einen Gästebucheintrag für WolfgangE

Beiträge: 1006
Registriert: 29.01.2003

erstellt am: 02. Jul. 2008 20:24    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für AWagner 10 Unities + Antwort hilfreich

 
Zitat:
Original erstellt von AWagner:

Ne kurze Frage hab ich aber noch.
Ist es nicht vielleicht besser als @Table die Tabelle dbo.CONTACT anzugeben?
Der View VIEW_ALL_CONTACT muss ja aus 2 Tabellen aufgebaut werden.
Müsste Performancemässig schneller sein oder?

mfg Andreas


so isses  
du könntest höchstens noch überlegen, anstatt der ganzen Tabelle CONTACT die View VIEW_CONTACT_PERSON bzw. VIEW_CONTACT_ORGANISATION zu verwenden, was eben brauchst. Je nach Datenmenge bei euch könnte das dann doch noch performanter sein als die CONTACT-Tabelle. Musst ausprobieren.

Ciao, WolfgangE

------------------
An Optimist Is A Person Who Has Not Been Shown All The Facts Yet!!!

[Diese Nachricht wurde von WolfgangE am 02. Jul. 2008 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

ShadowWriter
Mitglied



Sehen Sie sich das Profil von ShadowWriter an!   Senden Sie eine Private Message an ShadowWriter  Schreiben Sie einen Gästebucheintrag für ShadowWriter

Beiträge: 20
Registriert: 27.08.2007

erstellt am: 17. Jul. 2008 20:44    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für AWagner 10 Unities + Antwort hilfreich

Hallo WolfgangE,

da hat man dann aber keinen wirklichen Geschwindigkeitsvorteil.

Eine Einschränkung durch den ENTITY_TYPE wäre dann doch Sinnvoller.
Das ist auch in einem Beispiel am Anfang dieses Treaths wo der IDENT über die
DOCUMENT Tabelle erzeugt wird zwingend nötig, da sonst die IDENT Generierung über alle
Dokumente (Konst.Dok, Office.Dok,Secondary.Dok) geht und das zu Fehlern führen kann.

------------------
einen schönen Tag noch...

ShadowWriter

und angenehme Träume

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

WolfgangE
Mitglied



Sehen Sie sich das Profil von WolfgangE an!   Senden Sie eine Private Message an WolfgangE  Schreiben Sie einen Gästebucheintrag für WolfgangE

Beiträge: 1006
Registriert: 29.01.2003

erstellt am: 18. Jul. 2008 13:03    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für AWagner 10 Unities + Antwort hilfreich

völlig richtig, ShadowWriter, genau so ist es.

Aber weil grad von Performance die Rede ist. Wenn diese Form der Ident-Generierung für mehrere Datensätze in Folge verwendet wird, z.B. innerhalb einer Schleife,, lässt sich die Prozedur maßgeblich beschleunigen, indem der jeweils zuletzt erzeugte Ident als neuer StartKey für den nächsten Durchlauf verwendet wird.

Ciao, WolfgangE

------------------
An Optimist Is A Person Who Has Not Been Shown All The Facts Yet!!!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

AWagner
Mitglied
Software-engineer


Sehen Sie sich das Profil von AWagner an!   Senden Sie eine Private Message an AWagner  Schreiben Sie einen Gästebucheintrag für AWagner

Beiträge: 32
Registriert: 27.11.2007

erstellt am: 02. Okt. 2009 15:14    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Leute,

ich bin gerade auf PSP 2010 umgestiegen und habe nun ein Problem mit der aim_create_key - Funktion!
Diese hat sich nämlich geändert!
es ist ein zusätzlicher Parameter hinzugekommen! - @cacheargs

Leider weis ich nicht welche Eingangsparameter dieses Argument benötigt damit ich wieder einen korrekten Key bekomme!
Würde ich dringend brauchen weil sonst die Synchronisation zu einer anderen Datenbank still steht! 

Kann mir vielleicht jemand helfen?
Vielen dank schon mal !!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2025 CAD.de | Impressum | Datenschutz