Table of Contents

Drag&Drop im Scheduler

Informationen

  • Kategorien: GUI | Scheduler
  • Version: 14.0.0.1884
  • Veröffentlichungsdatum: Donnerstag, 1. Juli 2010
  • Entwickler: Götzen
  • Benötigt Datenbankänderung: Ja
  • Betreff: Erweiterung Scheduler um Drag&Drop Funktionalität

Beschreibung

Im Scheduler wird ein zusätzlicher Tabellenbereich angezeigt. Dieser kann "nicht zugeordnete" Appointments beinhalten die per Drag&Drop in das Schedulercontrol hinneingezogen werden können. Also z.B. Wartungen, die einem Ausführenden Mitarbeiter zuzuordnen sind.

Konfiguration siehe Beispielcode.

Beispielcode

1)Erweiterung der Registiryeinträge für den Sscheduler um den Schlüssel  "DRAGLIST"

[External\SYSTEMFUNCTION\STDREACTOR\RESSOURCESCHEDULER\2\DRAGLIST]
;Klasse der Drag-Objekte
CLASS=Task
;Filter für Drag-Objekte, der Parameter enthalten kann/sollte
FILTER=draglistTasks.flt
;Drag-Objekte, werden verschoben, d.h. sie verschwinden nach dem ziehen aus der ursprünglichen Liste
B_MOVEOBJECTS=TRUE


2) Implementierung zweier Events:

 a) onEvent_SchedulerDrag: wird gefeuert, wenn der User ein Objekt mit der Maus über das Schedulercontrol zieht:
  Parameter:
  - $eEventType: ist derzeit immer 1, sollte aber abgefragt werden, da es in Zukuft noch andere Typen geben wird.
  - $sSchedulerName: Name des Schedulers (entspricht der Nummer in der Regsitry unter RESOURCESCHEDULER )
  - $eDragEntity: Objekt das vom Anwender gzogen wird.
  - $eResourceEntity: Entity der Resource über der die Maus gerade steht.
  - $DragTime: Zeit des Schedulers auf der di e Maus gerade steht.
 Rückgabewert:
  Muss 1 zurück geben, wenn das Objekt fallen gelassen werden darf. Falls nicht, mmuss sie 0 zurückgeben.

Beispiel:
int onEvent_SchedulerDrag( string $sSchedulerName, 
                                                int $eEventType, 
                                                entity $eDragEntity, 
			entity $eResourceEntity, 
			time $DragTime,  
			byref string $DragOverMessage, 
			byref string $DragOverTitle, 
			byref string $DragOverImageName )
{
  var ::Task $Task;

   if( $sSchedulerName == "2" && $eEventType == 1 && IsKindOf( $eDragEntity, name_of(::Task )) )
   {
        $Task = $eDragEntity;
        $DragOverMessage =  $Task.$Displayname;
        $DragOverTitle   = "Drag allowed";
        $DragOverImageName = "ok";

        return 1;
   }

  // Default
   $DragOverMessage   = "Drag not allowed!";
   $DragOverImageName = "cancel";

    return 0;
}

b) onEvent_SchedulerDrop: wird gefeuert, wenn der User ein Objekt mit der Maus auf das Schedulercontrol fallen lässt:

  Parameter:
  - $eEventType: ist derzeit immer 1, sollte aber abgefragt werden, da es in Zukuft noch andere Typen geben wird.
  - $sSchedulerName: Name des Schedulers (entspricht der Nummer in der Regsitry unter RESOURCESCHEDULER )
  - $eDragEntity: Objekt das vom Anwender gzogen wird.
  - $eResourceEntity: Entity der Resource über der die Maus gerade steht.
  - $DragTime: Zeit des Schedulers auf der di e Maus gerade steht.
  - $eAppointmentEntity: Wenn dies Objekt vom Projektentwickler gesetzt und befüllt wird, dann wird aus diesem ein Balken erstellt.

 Rückgabewert:
  Muss 1 zurück geben, wenn ein Balken im Scheduler erzeugt werden soll. Falls nicht, mmuss sie 0 zurückgeben.

Beispiel:

int onEvent_SchedulerDrop( string $sSchedulerName, int $eEventType, entity $eDropEntity, entity $eResourceEntity, time $DropTime, byref entity $eAppointmentEntity )
{
	var ::Task $Appointment;
	var int $DiffHours;

	if( $sSchedulerName == "2" && $eEventType == 1 && IsKindOf( $eDropEntity, "Task" ) )
	{
		$Appointment =  $eDropEntity;

		// zuerst das Endedatum verschieben
		//
		$DiffHours = GetDiffHours( $DropTime, $Appointment.Start );
		$Appointment.End = AddHours( $Appointment.End,  $DiffHours );

		// Startdatum verschieben
		//
		$Appointment.Start = $DropTime;

		$Appointment.ref_executor_internal = $eResourceEntity;
	
		$eAppointmentEntity = $Appointment; 

		return 1;
	}
	return 0;
}

Genauso gut ist es möglich mit CreateEntity() ein neues Appointment Objekt zu erzeugen und dies mit Werten aus dem Dropentity zu befüllen.