Globale Konstante/Variable

cRM 11, Large

Hallo,
ich habe einen Wert (eine Rundungsfehlertoleranz), die ich gerne an einer Stelle setzen und verwalten möchte, auf die ich aber beim Erstellen von Filtern, in Skripten, in den Eingabemasken Zugriff habe (im Prinzip eine globale Variable).
Ich muss einfach an vielen Stellen |Wert1-Wert2|<Toleranzwert abprüfen…

Gibt es so etwas im cRM?

Hat jemand so etwas schon realisiert? Wenn ja, wie?

Danke schon mal im Voraus,
Wolfgang

Zwei Ideen dazu:

Sie könnten im Ereignis „Projekt wurde geöffnet“ eine Sessionvariable definieren (mal in der SDK Doku danach suchen), die Sie „Toleranz“ nennen. Ab dem Augenblick steht in sämtlichen Formeln unterhalb des cRM-Zweiges ein Unterordner „Session“ mit ebendieser Variablen zur Verfügung.

Dieser Wert sollte sich nicht besonders dynamisch verändern, da Formelergebnisse uU auch gecacht werden, d.h. ein Eingabemaskenelement, das per Formel diesen Wert nutzt, würde sich nicht automatisch aktualisieren, bloß weil ein Script diese Sessionvariable auf einen anderen Wert ändert.

Alternativ zur Session-Variablen könnten Sie auch ein neues Firmenstammdatenfeld spendieren und den Toleranzwert fest hinterlegen. Firmenstammdatenfelder stehen auch in der gesamten Anwendung in Formeln zur Verfügung. Dieser Ansatz ist dann statisch.

2 „Gefällt mir“

Vielen Dank für den schnellen Hinweis, ich konnte eine Session-Property realisieren :slight_smile:

Gruß
Wolfgang

Nun muss ich leider noch einmal nachhaken.
Ich finde die Session-Variable in den Formeln der Ansichtskonfiguration:

ich finde sie leider nicht in den Formeln für die Bestimmung der Hintergrundfarbe in der Listenansicht:

Mache ich da irgendetwas falsch oder geht das grundsätzlich nicht?

Danke und Gruß
Wolfgang

Die Preisfrage ist, zu welchem Zeitpunkt Sie die Sessionvariable zum aller ersten Mal definieren? Haben Sie das wie oben angegeben im „Projekt wurde geöffnet“ Ereignis gemacht?

Wenn Sie das erst später machen, kann es zu spät sein, wenn dann eine Ansicht beim Programmstart automatisch wieder-geöffnet wird, bevor das Script mit der Sessionvariable gelaufen ist. Dann sind vielleicht bei der Übersichtsliste die Variablen bereits schon „festgezurrt“ worden.

Wenn Sie es im „Projekt wurde geöffnet“ Ereignis gemacht haben, riecht es nach einem kleinen Fehler. :grimacing:

Ich habe das wie folgt realisiert:

Das Skript sieht aus wie folgt:

Sub InitializeToleranz
	Dim oProject 		: Set oProject = cRM.CurrentProject
	Dim oViewConfigs 	: Set oViewConfigs = oProject.ViewConfigs
	Dim oViewConfig  	: Set oViewConfig = oViewConfigs.ItemByName("Datenbankkonfiguration")
	
	Dim sStandardwert 	: sStandardwert = "1"

	Dim sWert

	Dim sFilter			: sFilter = "SetFilterDirectSQL: SELECT ""STRK_UID"" FROM ""dbo"".""v_archiv_DBConfiguration"" WHERE ""STRK_Id"" = 'PriceRoundingDifferences'"
	Dim oRecordSet  	: Set oRecordSet = oViewConfig.CreateRecordSet(sFilter)
	Dim oRecord
	
	If Not IsLeer(oRecordSet) Then
		oRecordSet.MoveFirst
		Set oRecord = oRecordSet.CurrentRecord
		
		If Not IsLeer(oRecord) Then
			sWert = CStr(oRecord.GetContentsByName("STRK_NUMERIC5_2Value"))
			
			If IsLeer(sWert) Then
				sWert = CStr(sStandardwert)
			End If
		Else
			sWert = CStr(sStandardwert)
		End If
	Else
		sWert = CStr(sStandardwert)
	End If	
	
	call oProject.SetSessionProperty ("Rundungstoleranz", sWert)
	
	
	Set oRecord = Nothing
	Set oRecordSet = Nothing
	Set oViewConfig = Nothing
	Set oViewConfigs = Nothing
	Set oProject = Nothing
End Sub

Die Funktion IsLeer wühlt sich nur durch die Variablentypen und -inhalte und liefert bei Nichtbelegung (Nothing, „“,…) true zurück.

Danke und Gruß
Wolfgang

cRM Solution „combit_Large“, Version: 11.002

Vielleicht ist diese Information noch wichtig.
Wolfgang

Sorry, das ist wohl ein kleiner Fehler, dass die dort fehlen. Wird mit Service Pack 11.007 (kommt in den nächsten 2-3 Wochen) gefixt. Wenn Sie vorher eine Prerelease-Version brauchen, damit Sie weitermachen können, nehmen Sie bitte Kontakt mit dem Support auf, wir organisieren dass dann. :slight_smile:

1 „Gefällt mir“