Zum Inhalt springen

Marionette Object mit fortlaufenden Nummern


ChristianETG

Frage

Geschrieben

Guten Tag,

 

ich brauch Ideen für ein Marionette Object.

 

Ich möchte in der Marionette Object erstellen welches in einem Datenbank-Feld eine Nummerierung bekommt. Aufbau der Nummer: <Prefix-Nummer>/<Nummerierung> (Beispiel: 01-0001)

Die Prefix nummer gebe ich über ein Feld in der OIP an. Die Nummerierung soll automatisch fortlaufend sein. Wenn das Object kopiert wird soll es in der reihenfolge die nächste Nummer erhalten. (ich denke da erstmal an die "add 1 node") Allerdings benötige ich die nummer vom vorherigen Objekt bzw. die höchste Nummer in der Datenbank.

 

Hat jemand Ideen wie man das umsetzen könnte?

7 Antworten auf diese Frage

Empfohlene Beiträge

Geschrieben

Vielleicht irgendwo die letzte Nummer speichern und dann bei "neuen" Objekten (muss man sich auch irgendwie merken) die nächsthöhere vergeben. Oder die Zeichnung durchsuchen (kann eine weile dauern) und dann <1+<Höchste gefundene Nummer>> vergeben.

Gruß


Stefan Bender

ComputerWorks GmbH

http://www.computerworks.de

Geschrieben
vor 2 Stunden schrieb Stefan Bender:

Vielleicht irgendwo die letzte Nummer speichern und dann bei "neuen" Objekten (muss man sich auch irgendwie merken) die nächsthöhere vergeben. Oder die Zeichnung durchsuchen (kann eine weile dauern) und dann <1+<Höchste gefundene Nummer>> vergeben.

 

Da ich ja die Nummern in eine Datenbank schreibe könnte man eventuell dort suchen. Allerdings habe ich keine Idee wie ich mit Nodes die Datenbank durchsuchen kann. 

Geschrieben
vor 53 Minuten schrieb ChristianETG:

Da ich ja die Nummern in eine Datenbank schreibe könnte man eventuell dort suchen. Allerdings habe ich keine Idee wie ich mit Nodes die Datenbank durchsuchen kann. 

schau dir meinen Beitrag an, der Node den ich dir erstellt habe macht ja genau das. Als Input gibst du den Name der Datenbank und das Feld an und es sucht die höchste Nummer und gibt dir diese zurück.

VWX24 SP8 | Architektur | MacOS 13.5 | M2 Max

Geschrieben
vor 1 Minute schrieb inderfab:

schau dir meinen Beitrag an, der Node den ich dir erstellt habe macht ja genau das. Als Input gibst du den Name der Datenbank und das Feld an und es sucht die höchste Nummer und gibt dir diese zurück.

hab ich gesehen, da ich aber nicht einfach so Code anderer verwenden darf (Firmenvorschriften) ist das einfach umständlicher. Trotzdem Danke für dein Angebot und wenn es keinen anderen Weg gibt, werde ich mir deine Node anschauen.

Geschrieben

Ohne Code wird es schwierig, da es kein Standardnode gibt der das kann. Hier der Code zur Prüfung: 

# MaxForField - Findet das Maximum eines numerischen Feldes über alle Objekte mit angehängtem Datenbankeintrag
# Eingaben: Record Name, Field Name
# Ausgabe: Maximaler Wert

@Marionette.NodeDefinition
class Params(metaclass = Marionette.OrderedClass):
	# Node-Name und Beschreibung
	this = Marionette.Node("Max Record Field Value")
	this.SetDescription("Gibt den höchsten Wert eines numerischen Feldes über alle Objekte mit passendem Datenbanknamen zurück.")

	# Eingänge
	recName = Marionette.PortIn('<Record Name>', 'sRecName')
	recName.SetDescription("Name des Datenbankeintrags (Record Format)")

	fldName = Marionette.PortIn('<Field Name>', 'sFldName')
	fldName.SetDescription("Name des numerischen Feldes innerhalb des Datenbankeintrags")

	# Ausgänge
	maxValue = Marionette.PortOut(0.0)
	maxValue.SetDescription("Höchster gefundener Wert (0.0, wenn keiner gefunden)")

	found = Marionette.PortOut(False)
	found.SetDescription("True, wenn mindestens ein gültiger Wert gefunden wurde")

def RunNode(self):
	# Eingaben holen
	recName = self.Params.recName.value
	fldName = self.Params.fldName.value

	# Startwerte
	max_val = float('-inf')
	found_valid = False

	def walker(h):
		nonlocal max_val, found_valid
		raw = vs.GetRField(h, recName, fldName)
		try:
			val = float(raw)
			if val > max_val:
				max_val = val
				found_valid = True
		except:
			pass  # Ignoriere alles, was keine Zahl ist

	# Alle Objekte mit dem Record durchsuchen
	vs.ForEachObject(walker, f"(R IN ['{recName}'])")

	# Ausgabe setzen
	self.Params.maxValue.value = max_val if found_valid else 0.0
	self.Params.found.value = found_valid

 

  • Like 1

VWX24 SP8 | Architektur | MacOS 13.5 | M2 Max

Geschrieben

Ich hab eine Lösung gefunden denke ich. Da ich nur den Wert benötige klappt es auch so: "Objs by Crit" und Filter auf die Datenbank, dann Get Record Field => float => Extrema => und dann add 1 und fertig.

 

Trotzdem danke 🙂

  • Like 2

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden
  • Forenstatistik

    • Themen insgesamt
      26,8Tsd
    • Beiträge insgesamt
      139,4Tsd
×
×
  • Neu erstellen...