1.7. La clase GanttClient
Ahora trabajaremos con nuestra clase client. Ésta se encargará de mostrar información al usuario y será la clase a la que llamaremos para lanzar nuestro Gantt.
Empezaremos creando una clase que extienda de la GanttClient y nos declararemos unas variables para mostrar en el diálogo en el que el usuario seleccionará las fechas a mostrar en el Gantt.
//XBB :: http://axlearn2012.blogspot.com.es/ :: XBB_Gantt :: 20141208
class XBB_GanttClient_SchedEmpl extends GanttClient
{
DialogField dlgFromDate;
DialogField dlgToDate;
}
public ClassDescription caption()
{
ClassDescription ret;
ret = "@SYS115410";
return ret
}
protected GanttData createGanttData()
{
return XBB_GanttData_SchedEmpl::newGanttClient(this);
}
protected GanttVisualization createGanttVisualization()
{
return XBB_GanttActiveXVarchart_SchedEmpl::newGanttClient(this);
}
Método sobrescrito que creará las modificaciones que se hacen en el Gantt.
protected GanttDataModification createModificationByRecords(
XBB_GanttTmpSchedEmpl _oldRecord,
XBB_GanttTmpSchedEmpl _newRecord)
{
GanttDataModification ganttDataModification = GanttDataModification::newModificationAction(GanttModificationAction::Update);
Map mapModifiedFields = new Map(Types::String, Types::String);
ganttDataModification.parmModifiedTableName(tablestr(XBB_GanttTmpSchedEmpl));
ganttDataModification.parmModifiedRecId(_oldRecord.RecId);
if (_oldRecord.PersonnelNumberId != _newRecord.PersonnelNumberId)
{
mapModifiedFields.insert(fieldstr (XBB_GanttTmpSchedEmpl, PersonnelNumberId),
_newRecord.PersonnelNumberId);
}
if (_oldRecord.StartDate != _newRecord.StartDate ||
_oldRecord.StartTime != _newRecord.StartTime ||
_oldRecord.EndTime != _newRecord.EndTime)
{
mapModifiedFields.insert(
fieldstr(XBB_GanttTmpSchedEmpl, tartDate), GanttVcDataTableField::dateValue2Str(_newRecord.StartDate));
mapModifiedFields.insert(
fieldstr(XBB_GanttTmpSchedEmpl, StartTime), GanttVcDataTableField::timeValue2Str(_newRecord.StartTime));
mapModifiedFields.insert(
fieldstr(XBB_GanttTmpSchedEmpl, EndTime), GanttVcDataTableField::timeValue2Str(_newRecord.EndTime));
}
if (_oldRecord.ProjId != _newRecord.ProjId)
{
mapModifiedFields.insert(
fieldstr(XBB_GanttTmpSchedEmpl, ProjId),
_newRecord.ProjId);
}
if (_oldRecord.ActivityNumber != _newRecord.ActivityNumber)
{
mapModifiedFields.insert(
fieldstr(XBB_GanttTmpSchedEmpl, ActivityNumber),
_newRecord.ActivityNumber);
}
ganttDataModification.parmMapModifiedFields(mapModifiedFields);
return ganttDataModification;
}
Crearemos el diálogo con el que el usuario seleccionará las fechas.
protected Object dialog()
{
DialogRunbase dialog = super();
dlgFromDate = dialog.addField(extendedtypestr(StartDate), "@SYS5209");
dlgFromDate.value(this.parmFromDate());
dlgToDate = dialog.addField(extendedtypestr(EndDate), "@SYS14656");
dlgToDate.value(this.parmToDate());
return dialog;
}
public boolean getFromDialog()
{
boolean ret;
ret = super();
this.parmFromDate (dlgFromDate.value());
this.parmToDate (dlgToDate.value());
if (dlgFromDate.value() > dlgToDate.value())
{
ret = checkFailed("@EVR263");
}
return ret;
}
En el método init insertaremos todos los métodos que inicializan los datos que utilizaremos en nuestra table (Panel izquierdo); para este ejemplo inicializaré el mapa de los empleados que todavía no utilizaré pero si en post posteriores.
public boolean init()
{
boolean ret;
this.loadWorkerIds();
ret = super();
return ret;
}
public container loadPersonnelNumberIds()
{
Query q = new Query();
QueryBuildDataSource qbds;
QueryRun qr;
HcmWorker worker;
ProjParameters parameters = ProjParameters::find();
container ret;
Worker.recordLevelSecurity(true);
qbds = q.addDataSource(tableNum(HcmWorker));
qr = new QueryRun(q);
while (qr.next())
{
if (qr.changed(tableNum(HcmWorker)))
{
worker = qr.get(tableNum(HcmWorker));
}
if(parameters.ShowInactiveEmployees == NoYes::Yes || parameters.ShowInactiveEmployees != NoYes::Yes && HcmWorkerLookup::newOnlyActiveEmployeesWithinCompany().validateWorker(worker.RecId)))
{
ret += [[worker.PersonnelNumber]];
}
}
return ret;
}
public void loadWorkerIds()
{
HcmPersonnelNumberId hcmPersonnelNumberId;
container containerPersonnelNumberIds;
int i;
#define.personnelNumberIdx(1)
this.resetLoadIds();
containerPersonnelNumberIds = this.loadPersonnelNumberIds();
for (i = 1; i <= conlen(containerPersonnelNumberIds); i++)
{
hcmPersonnelNumberId = conpeek(conpeek(containerPersonnelNumberIds, i), #personnelNumberIdx);
this.addLoadIds(hcmPersonnelNumberId);
}
}
protected void resetLoadIds()
{
setLoadIds = new Set(Types::String);
}
public static XBB_GanttClient_SchedEmpl construct()
{
return new XBB_GanttClient_SchedEmpl();
}
public static void main(Args _args)
{
XBB_GanttClient_SchedEmpl ganttClient;
if(_args == null)
{
throw error(strfmt("@SYS27147",
classstr(XBB_GanttClient_SchedEmpl)));
}
ganttClient = new XBB_GanttClient_SchedEmpl();
if(ganttClient.prompt())
{
ganttClient.run();
}
}
Descargar XBB_GanttClient_SchedEmpl
Empezaremos creando una clase que extienda de la GanttClient y nos declararemos unas variables para mostrar en el diálogo en el que el usuario seleccionará las fechas a mostrar en el Gantt.
//XBB :: http://axlearn2012.blogspot.com.es/ :: XBB_Gantt :: 20141208
class XBB_GanttClient_SchedEmpl extends GanttClient
{
DialogField dlgFromDate;
DialogField dlgToDate;
}
public ClassDescription caption()
{
ClassDescription ret;
ret = "@SYS115410";
return ret
}
protected GanttData createGanttData()
{
return XBB_GanttData_SchedEmpl::newGanttClient(this);
}
protected GanttVisualization createGanttVisualization()
{
return XBB_GanttActiveXVarchart_SchedEmpl::newGanttClient(this);
}
Método sobrescrito que creará las modificaciones que se hacen en el Gantt.
protected GanttDataModification createModificationByRecords(
XBB_GanttTmpSchedEmpl _oldRecord,
XBB_GanttTmpSchedEmpl _newRecord)
{
GanttDataModification ganttDataModification = GanttDataModification::newModificationAction(GanttModificationAction::Update);
Map mapModifiedFields = new Map(Types::String, Types::String);
ganttDataModification.parmModifiedTableName(tablestr(XBB_GanttTmpSchedEmpl));
ganttDataModification.parmModifiedRecId(_oldRecord.RecId);
if (_oldRecord.PersonnelNumberId != _newRecord.PersonnelNumberId)
{
mapModifiedFields.insert(fieldstr (XBB_GanttTmpSchedEmpl, PersonnelNumberId),
_newRecord.PersonnelNumberId);
}
if (_oldRecord.StartDate != _newRecord.StartDate ||
_oldRecord.StartTime != _newRecord.StartTime ||
_oldRecord.EndTime != _newRecord.EndTime)
{
mapModifiedFields.insert(
fieldstr(XBB_GanttTmpSchedEmpl, tartDate), GanttVcDataTableField::dateValue2Str(_newRecord.StartDate));
mapModifiedFields.insert(
fieldstr(XBB_GanttTmpSchedEmpl, StartTime), GanttVcDataTableField::timeValue2Str(_newRecord.StartTime));
mapModifiedFields.insert(
fieldstr(XBB_GanttTmpSchedEmpl, EndTime), GanttVcDataTableField::timeValue2Str(_newRecord.EndTime));
}
if (_oldRecord.ProjId != _newRecord.ProjId)
{
mapModifiedFields.insert(
fieldstr(XBB_GanttTmpSchedEmpl, ProjId),
_newRecord.ProjId);
}
if (_oldRecord.ActivityNumber != _newRecord.ActivityNumber)
{
mapModifiedFields.insert(
fieldstr(XBB_GanttTmpSchedEmpl, ActivityNumber),
_newRecord.ActivityNumber);
}
ganttDataModification.parmMapModifiedFields(mapModifiedFields);
return ganttDataModification;
}
Crearemos el diálogo con el que el usuario seleccionará las fechas.
protected Object dialog()
{
DialogRunbase dialog = super();
dlgFromDate = dialog.addField(extendedtypestr(StartDate), "@SYS5209");
dlgFromDate.value(this.parmFromDate());
dlgToDate = dialog.addField(extendedtypestr(EndDate), "@SYS14656");
dlgToDate.value(this.parmToDate());
return dialog;
}
public boolean getFromDialog()
{
boolean ret;
ret = super();
this.parmFromDate (dlgFromDate.value());
this.parmToDate (dlgToDate.value());
if (dlgFromDate.value() > dlgToDate.value())
{
ret = checkFailed("@EVR263");
}
return ret;
}
En el método init insertaremos todos los métodos que inicializan los datos que utilizaremos en nuestra table (Panel izquierdo); para este ejemplo inicializaré el mapa de los empleados que todavía no utilizaré pero si en post posteriores.
public boolean init()
{
boolean ret;
this.loadWorkerIds();
ret = super();
return ret;
}
public container loadPersonnelNumberIds()
{
Query q = new Query();
QueryBuildDataSource qbds;
QueryRun qr;
HcmWorker worker;
ProjParameters parameters = ProjParameters::find();
container ret;
Worker.recordLevelSecurity(true);
qbds = q.addDataSource(tableNum(HcmWorker));
qr = new QueryRun(q);
while (qr.next())
{
if (qr.changed(tableNum(HcmWorker)))
{
worker = qr.get(tableNum(HcmWorker));
}
if(parameters.ShowInactiveEmployees == NoYes::Yes || parameters.ShowInactiveEmployees != NoYes::Yes && HcmWorkerLookup::newOnlyActiveEmployeesWithinCompany().validateWorker(worker.RecId)))
{
ret += [[worker.PersonnelNumber]];
}
}
return ret;
}
public void loadWorkerIds()
{
HcmPersonnelNumberId hcmPersonnelNumberId;
container containerPersonnelNumberIds;
int i;
#define.personnelNumberIdx(1)
this.resetLoadIds();
containerPersonnelNumberIds = this.loadPersonnelNumberIds();
for (i = 1; i <= conlen(containerPersonnelNumberIds); i++)
{
hcmPersonnelNumberId = conpeek(conpeek(containerPersonnelNumberIds, i), #personnelNumberIdx);
this.addLoadIds(hcmPersonnelNumberId);
}
}
protected void resetLoadIds()
{
setLoadIds = new Set(Types::String);
}
public static XBB_GanttClient_SchedEmpl construct()
{
return new XBB_GanttClient_SchedEmpl();
}
public static void main(Args _args)
{
XBB_GanttClient_SchedEmpl ganttClient;
if(_args == null)
{
throw error(strfmt("@SYS27147",
classstr(XBB_GanttClient_SchedEmpl)));
}
ganttClient = new XBB_GanttClient_SchedEmpl();
if(ganttClient.prompt())
{
ganttClient.run();
}
}
Descargar XBB_GanttClient_SchedEmpl
Comentarios
Publicar un comentario