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

Comentarios