Ce point d’entrée permet d'ignorer certaines demandes ou ressources pour le calcul des affectations, ou de considérer des critères d'affectations spécifiques en conjonction avec le point d'entrée MTOLINK_RULES.
Au chargement des tableaux (mémoire) des demandes et des ressources, il est possible d'ignorer l'ordre en cours (dans la classe [F:ORDB]) en positionnant GPE à 1, ou de valoriser jusqu'à 3 champs utilisateurs (chaines de 50 max) en testant MTOLINK_PE_MODE :
- MTOLINK_PE_MODE = "D" pour les demandes :
TDEM_USRFLD1(NDEM)
TDEM_USRFLD2(NDEM)
TDEM_USRFLD3(NDEM)
- MTOLINK_PE_MODE = "R" pour les ressources :
TRESS_USRFLD2(NRESS)
TRESS_USRFLD2(NRESS)
TRESS_USRFLD3(NRESS)
L'ensemble des ordres concernés par le calcul est chargé en mémoire et pour des raisons de performance il est judicieux de stocker ici tout élément à prendre en compte.
A ce propos, il est conseiller d'ajouter les champs utilisateurs directement dans la table ORDERS pour de meilleures performances.
Dans l'exemple de code donné plus bas, le champ utilisateur XUSRFLD est copié dans la variable mémoire
Ce point d’entrée permet, en conjonction avec le point d'entrée MTOLINK_PRP, d'activer des contraintes supplémentaires (règles) dans l'algorithme de calcul des affectations.
Au début du calcul des affectations, les règles de priorisation des ressources (cf règles d’affectation) sont chargées en mémoire avec WUSRFLT(I_RULE)=1.
Juste avant, un premier appel au point d'entrée MTOLINK_RULES est effectué en mode "activation" avec MTOLINK_PE_MODE = 'ACT'. Il permet d'indiquer au calcul :
- 1 ou 3 règles spécifiques supplémentaires et prioritaires à considérer, en affectant WUSRFLT(WNBRULE)=2 et en incrémentant le compteur de règle (WNBRULE)
- ou de gérer des conditions spécifiques ajoutées au paramétrage des règles standards.
Un second appel au point d'entrée MTOLINK_RULES est ensuite effectué en mode "application" avec :
- MTOLINK_PE_MODE = 'APP' pour une règle spécifique (si WUSRFLT(I_RULE)=2)
- MTOLINK_PE_MODE = 'BPP' pour toute règle spécifique ou standard (quelque soit WUSRFLT(I_RULE))
Positionner alors GPE à 1 pour indiquer l'incompatibilité entre la demande en cours (variables TDEM_...(I)) et la ressource en cours (variables TRESS_...(K)) pour la règle en cours (W...(I_RULE)).
Remarque : R_USRFLD1..3 = TDEM_USRFLD1..3 (I)
#----------------------------------------------------------------------------------
$ACTION
When "MTOLINK_PRP" : Gosub MTOLINK_PRP
When "MTOLINK_RULES" : Gosub MTOLINK_RULES
Endcase
Return
#----------------------------------------------------------------------------------
# Entry point triggered when loading demand(s) and resource(s) lists
# Can be use either to store user data (for later use when applying rules)
# Or to skip an order (return GPE = 1)
$MTOLINK_PRP
# in this example, we store XUSRFLD in user fields
GPE = 0
Case MTOLINK_PE_MODE
When "D": TDEM_USRFLD1(NDEM) = [F:ORDB]XUSRFLD
When "R": TRESS_USRFLD1(NRESS) = [F:ORDB]XUSRFLD
Endcase
Return
#----------------------------------------------------------------------------------
# Here we use the user fields stored using MTOLINK_PRP entry point
# Assignments will only be generated for compatible user fields
$MTOLINK_RULES
Case MTOLINK_PE_MODE
When "ACT": # rule activation
WUSRFLT(WNBRULE) = 2
WNBRULE += 1
When "APP": # rule application
# matching user fields
GPE = 0
If TRESS_USRFLD1(K) <> TDEM_USRFLD1(I) : GPE = 1 : Endif
Endcase
Return