Ayuda sobre productos BOLD:
Biblioteca de funciones externas
ATENCIÓN: El siguiente contenido es de uso avanzado y su utilización puede ocasionar daños irreparables en la configuración del sistema
Para la definición del convenio de nomenclatura de las funciones ver Creación de nuevas funciones.
Configurar nuevas funciones en una instalación
Hay que crear un fichero .xml (o varios mientras no haya funciones repetidas -en este caso se quedaría con la última que lea-) en cualquier carpeta que esté dentro de la carpeta «ext«. La carpeta «ext» debe estar creada en el mismo lugar que el fichero querycustom.xml. Si no existe la carpeta ext no se utilizará ninguna de las funciones.
A continuación insertar la función o función seleccionada así:
<?xml version="1.0" encoding="ISO-8859-1"?>
<Functions>
....mis funciones seleccionadas...
</Functions>
TimePeriod_End: Retorna la fecha de fin de un timeperiod en horas
<Function Name="TimePeriod_End" Type="dateTime" Description="Retorna la fecha de fin de un timeperiod en horas"> <Param Name="tp" Type="automat" ShowName="TimePeriod" Description=""/> <Expression> <![CDATA[ GetProperty(tp, "StartTime") + GetProperty(tp, "Duration") ]]> </Expression> </Function>
TodayPlus: Suma un número de días a la fecha actual
<Function Name="TodayPlus" Type="boldDate" Description="Suma un número de días a la fecha actual"> <Param Name="f" Type="int" ShowName="" Description=""/> <Expression> <![CDATA[ Today() + f ]]> </Expression> </Function>
HasTimePeriodLongerThan: Retorna true si existe algun tramo con una duración
<Function Name="HasTimePeriodLongerThan" Type="bool" Description="Retorna true si existe algun tramo con una duración superior a la indicada en horas (sólo comprueba los 3 primeros tramos del PL)"> <Param Name="PL" Type="periodList" ShowName="TimePeriod" Description=""/> <Param Name="maxDuration" Type="double" ShowName="Duracion" Description=""/> <Expression> <![CDATA[ IfElse( PL_NumPeriods(PL) == 1, IfElse( SimpleRoundTo(PL_DurationH(PL), -2) > maxDuration, true, false ), IfElse( PL_NumPeriods(PL) == 2, IfElse( SimpleRoundTo(AsHours(GetTimePeriod(PL, 0).Duration), -2) > maxDuration || SimpleRoundTo(AsHours(GetTimePeriod(PL, 1).Duration), -2) > maxDuration, true, false ), IfElse( PL_NumPeriods(PL) == 3, IfElse( SimpleRoundTo(AsHours(GetTimePeriod(PL, 0).Duration), -2) > maxDuration || SimpleRoundTo(AsHours(GetTimePeriod(PL, 1).Duration), -2) > maxDuration || SimpleRoundTo(AsHours(GetTimePeriod(PL, 2).Duration), -2) > maxDuration, true, false ), false ) ) ) ]]> </Expression> </Function>
WorkDays: Retorna el nº de días con presencia entre dos fechas para una persona empleada
<Function Name="WorkDays" Description="Retorna el nº de días con presencia entre dos fechas para un empleado" Type="int" Default="" > <Param Name="idPlan" Type="int" /> <Param Name="idWorker" Type="int" /> <Param Name="from" Type="dateTime" /> <Param Name="to" Type="dateTime" /> <Expression> <![CDATA[ Iterator_Count( Iterator_ByDay_ForWorkerPlanTasks(idPlan, from, to, idWorker), "PL_DurationH( PL_FilterByPeriodType( ActSched.PeriodList, 7, 5 ) ) > 0" ) ]]> </Expression> </Function>
GanttFixedOrder: Establece un orden fijo en el Gantt
Esta función se apoya en una segunda para facilitar las cosas:
<Function Name="GanttFixedOrder" Description="Establece un orden fijo en el Gantt" Type="int" Default="" > <Expression> <![CDATA[ GanttSortFixedByList( Obj1.ContractWorker.Worker.Name, Obj2.ContractWorker.Worker.Name, "1426,3845,4516,273,505,2748,3186,3774,4229,4146,2888,2795,3663,3839,544,4137,4307,4100,2244,4366,2766,2578,4304" ) ]]> </Expression> </Function> <Function Name="GanttSortFixedByList" Type="bool" Description="Genera un orden fijo según la posición de los elementos en una lista de strings separada por comas"> <Param Name="pLabel1" Type="string" ShowName="Clave1" Description="Clave 1 a comparar"/> <Param Name="pLabel2" Type="string" ShowName="Clave2" Description="Clave 2 a comparar"/> <Param Name="pList" Type="string" ShowName="Orden deseado" Description="Lista claves con el orden deseado (ej.: clave1,cleav2,..."/> <Expression> <![CDATA[ IfElse( PosIn(pLabel1, pList) == -1, false, IfElse( PosIn(pLabel2, pList) == -1, true, PosIn(pLabel1, pList) < PosIn(pLabel2, pList) ) ) ]]> </Expression> </Function>
GetIncidenceNameFromFirstPeriod: De un PL que contiene una lista de incidencias, extrae la primera
<Function Name="GetIncidenceNameFromFirstPeriod" Type="string" Description="De un PL que contiene una lista de incidencias, extrae la primera"> <Param Name="PL" Type="periodList" /> <Expression> <![CDATA[ IfElse( PL_NumPeriods(PL) > 0 , IfElse( GetTimePeriod(PL, 0).PeriodType == 2 /* incidence */ , GetTimePeriod(PL, 0).Incidence.Name , "" ) , "" ) ]]> </Expression> </Function>
GetAssignedAreaListForDay: Retorna la lista de áreas asociada a las necesidades asignadas de una jornada
<Function Name="GetAssignedAreaListForDay" Type="bool" Description="Retorna la lista de areas asociada a las necesidades asignadas de una jornada"> <Param Name="idCase" Type="int" /> <Param Name="idContractWorker" Type="int" /> <Param Name="fromDate" Type="dateTime" /> <Expression><![CDATA[ PL_CounterDef( PL_FilterByPeriodType( ActivitySch(idCase, idContractWorker, fromDate).PeriodList , 7 ) , "Need.PlanArea.Name + \",\"" , "" ) ]]></Expression> </Function>
CountNeed: Cuenta las horas asignadas a una necesidad
<Function Name="CountNeed" Type="double" ShowName="Cuenta necesidad" Description="Cuenta las horas asignadas a una necesidad" > <Param Name="PL" Type="periodList" ShowName="PL Plan" Description=""/> <Param Name="pStart" Type="dateTime" /> <Param Name="pEnd" Type="dateTime" /> <Param Name="pNeed1" Type="int" ShowName="" Description=""/> <Expression> <![CDATA[ AsHours( PL_Duration( PL_FilterByIdType( PL_FilterByPeriodType( PL_Interval(PL, pStart, pEnd, true, true), 7 ), pNeed1 ) ) ) ]]> </Expression> </Function>
GetIDClosedCW: Obtiene el ID contrato más próximo a una fecha para un empleado o empleada
<Function Name="internalIDClosedCW" Type="int" ShowName="internalIDClosedCW" Description="internalIDClosedCW" > <Param Name="aPLCW" Type="periodList" /> <Param Name="Forward" Type="bool" /> <Expression> <![CDATA[ IfElse(PL_NumPeriods(aPLCW)>0, IfElse(Forward, GetTimePeriod(aPLCW,0).IdType, GetTimePeriod(aPLCW,-1).IdType ) ,0) ]]> </Expression> </Function>
<Function Name="GetIDClosedCW" Type="int" ShowName="GetIDClosedCW" Description="GetIDClosedCW" > <Param Name="IDWorker" Type="string" /> <Param Name="pStart" Type="dateTime" /> <Param Name="pDays" Type="int" /> <Param Name="Forward" Type="bool" /> <Expression> <![CDATA[ IfElse(W_ContractWorkerForDate(IDWorker, pStart)>0, W_ContractWorkerForDate(IDWorker, pStart), IfElse(Forward, internalIDClosedCW(W_GetCWListAsPL(IDWorker,pStart, pStart+pDays,"GetContractWorkerListByWorkerDefault"),true), internalIDClosedCW(W_GetCWListAsPL(IDWorker,pStart-pDays, pStart,"GetContractWorkerListByWorkerDefault"),false) ) ) ]]> </Expression> </Function>