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.