Mercator 11.0 ou ultérieur permet d'afficher dans une expression des informations provenant de colonnes du LinesEditor, sur la ligne active. Ceci concerne
- les ventes
- les achats
- les transferts de dépôts
- les inventaires
Pour cela, l'expression doit utiliser la méthode CurrentRowCellValue existant dans les écrans de type
- BillingForm
- TransferForm
- InventoryForm
Cette méthode requiert un paramètre de type string qui permet d'identifier la colonne dans le LinesEditor, via une de ces propriétés :
- Source
- SourceReadOnly
- Formula
Il est donc nécessaire que ces colonnes existent dans le LinesEditor. La méthode CurrentRowCellValue ne fait que reprendre la valeur en cours d'affichage. Si ce système est mis en place parce que le nombre de colonnes est important et que cela nuit à la lisibilité de l'écran, il est parfaitement possible de réduire la largeur de ces colonnes afin de les rendre invisibles.
Cette méthode renvoie toujours une chaîne de caractères, même si la colonne utilisée est de type numérique. Dans ce cas, c'est la valeur numérique formattée selon les propriétés de la colonne qui est rendue.
Il n'est pas nécessaire d'indiquer un ou plusieurs ID dans la propriété RefreshedBy. Mercator rafraîchit automatiquement cette expression lors du changement de cellule dans le LinesEditor et lors du recalcul de l'écran.
Le nombre d'expressions utilisant la méthode CurrentRowCellValue n'est pas limité.
Cette méthode est appelée à de très nombreux moments : il est dès lors strictement déconseillé d'y placer du code qui accède à la base de données (xLookup, Zselect, ...)
Ci-dessous un exemple de code pour un document de vente, qui reprend respectivement :
- 3 colonnes standards : id_article, pu et q
- 1 colonne ReadOnly : DISPO.DISPO
- 1 colonne Formula : q * 2
- la clé 3 de l'article, qui ne correspond à aucune colonne du LinesEditor, mais qui est déterminé par
- l'identifiant de l'article, trouvé par billingForm.CurrentRowCellValue("id_article")
- la collection BillingEngine.StockRecords, dans laquelle on trouve l'élément souhaité via l'identifiant de l'article déterminé ci-dessus
public static String Evaluate(MercatorUi.MovableControls.MovableExpression currentExpression)
{
// enter your customized code here
MercatorUi.Forms.Billing.BillingForm billingForm = (MercatorUi.Forms.Billing.BillingForm)currentExpression.Form;
return "Article = " + billingForm.CurrentRowCellValue("id_article")
+ " | PU = " + billingForm.CurrentRowCellValue("pu")
+ " | Q = " + billingForm.CurrentRowCellValue("q")
+ " | Dispo = " + billingForm.CurrentRowCellValue("DISPO.DISPO")
+ " | Q * 2 = " + billingForm.CurrentRowCellValue("q * 2")
+ " | CLE = " + (billingForm.CurrentRowCellValue("id_article") != "" ? billingForm.BillingEngine.StockRecords[billingForm.CurrentRowCellValue("id_article")]?.S_CLE3 ?? "" : "");
}
L'affichage de cette expression se présentera comme ceci :