- This topic has 2 Antworten, 2 Stimmen, and was last updated vor 8 years by Hans Meidinger.
-
AutorBeiträge
-
10.12.2014 um 10:44 AM #14981wendorffParticipant
Für Objekt-IDs stellt IQ-RM PRO 6.5 zwei verschiedene Darstellungsweisen des Objekt-ID zur Verfügung: 1.) Standard 11-stellige Repräsentation), XML 15-stellige Repräsentation. In der Darstellung kann dies konfiguriert werden, jedoch im XML findet sich ausschließlich die 15-stellige Repräsentation. Leider findet man jedoch häufig bei manueller Übertragung die Standard Objekt-ID Darstellung. Wie könne die beiden Darstellungsweisen ineinander konvertiert werden? Hat hierzu jemand schon Erfahrung gemacht bezüglich der Kodierung?
Der Zahlen-Raum der beiden Darstellungsweisen ist zwar nicht identisch, jedoch in ähnlicher Größenordnung 34^11= 70.188.843.638.032.384 für die Standarddarstellung und 16^15 = 1.152.921.504.606.846.976 für die 15-stellige Darstellung. Somit sollte jede 11-stellige Darstellung eindeutig in eine 15-stellige Darstellung umzurechnen sein. Die XML Darstellung scheint eine unsigned Hexadezimalkodierung zu haben. Jedoch die Kodierung der Standarddarstellung schient exotischer Natur.11.12.2014 um 7:38 AM #17022wendorffParticipantKorrketur zum Zahlenraum:
XML:15-stellig +“U“ = 16^14 = 72.057.594.037.927.936
Standard: 11-stellig= 34^11 = 70.188.843.638.032.384Die von mir benutzte VBA-Routine zur Konvertierung der 15-stelligen XML ID in die Standard 11-stelligen Darstellung ist:
Public Function Convert_XML_ID(ByVal XML_ID As String) As String
‚ Convert_XML_ID(„U6116B7E650D091“)
‚ convert the XML 15-digit Object ID into standard 11-digit object IDDim S As String, temp As Variant, tmp As Variant, i As Long, lastI As Long
Dim BaseSize As Variant
Dim sNewBaseDigits As StringsNewBaseDigits = „0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ“
BaseSize = CDec(Len(sNewBaseDigits))If Left(XML_ID, 2) = „U5“ Then
temp = CDec(„&H“ & Replace(XML_ID, „U“, „1“)) + CDec(104) ‚magic adaptation
Else
temp = CDec(„&H“ & Replace(XML_ID, „U“, „1“)) + CDec(108) ‚magic adaptation
End If
Do While Val(temp) <> 0
tmp = CDec(temp)
i = 0
Do While tmp >= BaseSize
i = i + 1
tmp = CDec(CDec(tmp) / CDec(BaseSize))
Loop
If i <> lastI – 1 And lastI <> 0 Then S = S & String(lastI – i – 1, Left(sNewBaseDigits, 1)) ‚get the zero digits inside the number
tmp = Int(tmp)
S = S + Mid(sNewBaseDigits, tmp + 1, 1)
temp = CDec(temp – tmp * (BaseSize ^ i))
lastI = i
Loop
S = S & String(i, Left(sNewBaseDigits, 1)) ‚get the zero digits at the end of the number
Convert_XML_ID = S
End Function07.01.2015 um 12:12 PM #17023Hans MeidingerParticipantHallo,
die Darstellung der Identities in IQ-Fmea ist geknüpft an intern verwendete Algorithmen, die nicht öffentlich dokumentiert sind. Das ist auch deshalb so, weil diese Algorithmen u.U. von uns geändert werden müssen. Wenn für Ihre Problemlösung keine andere Möglichkeit besteht als diese Algorithmen nach dem selben Muster zu programmieren, dann bitte ich Sie mir eine Email mit Hinweis zu diesem Thema und meinen Namen an unseren Support zu senden. Ich werde Ihnen dann eine Pseudecode-Beschreibung zusenden. Diese ist allerdings nicht offiziell und ohne Gewährleistung, da die Implementierung wie erwähnt von uns geändert werden kann. -
AutorBeiträge
- Sie müssen angemeldet sein, um zu diesem Thema eine Antwort verfassen zu können.