Table of Contents

Wizardfunktion

Informationen

  • Kategorien: Kernel | Klassenformeln
  • Version: 12.1.0.1446
  • Veröffentlichungsdatum: Montag, 9. November 2009
  • Entwickler: Götzen
  • Benötigt Datenbankänderung: Ja
  • Betreff: Wizardfunktion

Beschreibung

Mit Hilfe der Klassenformeln ist es jetzt möglich Wizardfunktionalitäten für den Anwender bereitzustellen.

Dazu bekommt der ShowEntity() -Dialog jeweils eine "Weiter" und "Zurück" - Schaltfläche mit der nacheinander eine bestimmte Karteikarte des Objektes angezeigt werden kann.

Implementation:

  1. Man erstellt eine neue (Dialog) Klasse die alle vom Wizard zu erfragenden Attribute enthält. Diese Klasse ist vorzugweise Temporär, das heißt, alle Attribute dieser Klasse (auch die ID) sind als nicht speichern markiert. Alternativ kann man natürlich auch eine Klasse verwenden die in der Datenbank gespeichert wird.

  2. Man erstelle eine neue Eingabemaske zu dieser Klasse, und zwar eine Karteikarte für jede anzuzeigende Wizzardseite.

  3. Man erzeugt ein neues Objekt dieser Klasse mit CreateEntity()

  4. Man ruft den Wizzard auf indem man die Funktion ShowEntity( ) aufruft mit einer 3 als Argument für den Modus.

  5. Man erzeugt ein Event "onEvent_ShowEntityInWizardMode" für die Wizard-Klasse welches für die Steuerung der anzuzeigenden Karteikarten und Buttons zuständig ist.

  6. Nach Aufruf des Dialoges kann man sich die vom Anwender gefüllten Attribute aus der Klasse auslesen und das Objekt dieser Klasse wieder löschen.

Beispielcode


//*************************************************************
//  Aufruf:
//*************************************************************

oncallfunction
{
	var ::WizardclassXXX $WizardObject;

	$WizardObject = CreateEntity( "WizardclassXXX" );

	if( ShowEntity( $WizardObject, 1, 3, "Ergeinisassistent" ) == 1)
	{
	  // Todo Attribute aus $WizardObject auswerten
	  //
	  :Name = $WizardObject.Name;
	  :Displayname = $WizardObject.Displayname;
	}

	Delete( $WizardObject );
}

//*************************************************************
//  Event zur Steuerung der Wizardfunktionalität:
//*************************************************************

void onEvent_ShowEntityInWizardMode(string $EventId, 
				  byref int $iWizardState, 
				  byref int $iVisiblePage, 
				  byref int $iVisibleButtons, 
				  byref int $iEnabledButtons  )
{
	var int $bEnableBack;                 // Boolean Flags for Enabling Buttons
	var int $bEnableNext;
	var int $bEnableCancel;
	var int $bEnableFinish;

	var int $iLastPageIndex;            // Index of Last Propertypage to Show
	
	var int $eNextButtonFlag;          // Declaration Buttonflags
	var int $eFinishedButtonFlag;
	var int $eCancelButtonFlag;
	var int $eBackButtonFlag;
	
	$eNextButtonFlag = 1;              // Initialization Buttonflags
	$eFinishedButtonFlag = 2;
	$eCancelButtonFlag = 4;
	$eBackButtonFlag = 8;
	
	$bEnableCancel = 1;
	$iLastPageIndex = 2;

	if( $EventId == "OnInitWizard")    // The first Call of these Event after Calling Function ShowEntity( xxx, 1, 3 );
	{
		$iVisiblePage = 0;
		$iWizardState = 0;
	}

	if( $EventId == "OnNextButton")  // Nextbutton was Clicked
	{
		$iVisiblePage = $iVisiblePage + 1;
		$iWizardState = $iWizardState + 1;
	}

	if( $EventId == "OnBackButton")   // Previousbutton was Clicked
	{
		$iVisiblePage = $iVisiblePage - 1;
		$iWizardState = $iWizardState - 1;
	}

	if( $EventId == "OnFinishedButton")    // Finishedbutton was Clicked
	{
	      // Todo Wizard complete
	}

	if( $EventId == "OnCancelButton")  // CancelButton was Clicked
	{
	     // Todo Wizard canceled
	}

	//****************************************
	// Enable and Show available Wizard Buttons
	//
	$bEnableBack = $iWizardState != 0 && $iVisiblePage != 0;
	$bEnableNext = $iVisiblePage < $iLastPageIndex;
	$bEnableFinish = $iVisiblePage == $iLastPageIndex;

 	$iVisibleButtons = 0;
 	$iEnabledButtons = 0;
	
	if( $bEnableNext )   { $iVisibleButtons = $iVisibleButtons + $eNextButtonFlag; }
	if( $bEnableFinish ) { $iVisibleButtons = $iVisibleButtons + $eFinishedButtonFlag; }
	if( $bEnableCancel ) { $iVisibleButtons = $iVisibleButtons + $eCancelButtonFlag; }
	if( $bEnableBack )   { $iVisibleButtons = $iVisibleButtons + $eBackButtonFlag; }

	$iEnabledButtons = $iVisibleButtons;
}