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.