Files
mcp-wms-wiki/wiki_old_13-05-2026/sources/archives/Revue_Code.md
T
2026-05-20 09:41:27 +02:00

113 lines
5.1 KiB
Markdown

# Revue - Code
> Source : [Confluence EasyWMS France](https://easywmsfrance.atlassian.net/wiki/spaces/EF/pages/3000399822888/Revue+-+Code)
> Dernière mise à jour : 08/01/2026 (v10)
---
## 1 - Check-liste des éléments
Lien MSS des check-listes à valider pour la revue de code : [Revue Mecalux Espagne](https://msscc.mecalux.com/documentation/Development/master/ES/map_development_concepts/code_review/index.md)
### 1.1 OutboundLines
> ⚠️ Attention sur le point suivant concernant les requêtes sur la **writing** :
Lorsque vous faites une requête pour récupérer les lignes d'un ordre de sortie, il est très important d'utiliser la propriété **`OutboundLines`** et non **`OutboundOrderLines`**, sinon lorsque vous avez une ligne annulée dans la commande, vous aurez cette erreur dans les logs :
```
Le nombre de ligne d'ordre d'expédition ne peut pas être négatif
```
### 1.2 Kit sans assemblage ? OutboundOrderOutboundOrderLineDetails
Si le projet utilise les **kits sans assemblage**, faire attention à l'utilisation entre `OutboundOrderOutboundOrderLineDetails` et `OutboundLines` :
- Dans `OutboundOrderOutboundOrderLineDetails` → vous trouverez **tous les composants**
- Dans `OutboundLines` → vous trouverez **uniquement le kit lui-même**
### 1.3 OutboundLine.ProductConversion
> ⚠️ Attention sur le point suivant concernant les requêtes sur la **writing** :
Dans les lignes des ordres de sortie, l'attribut **`ProductConversion`** peut être `null`.
*(Dans le cas où la commande demande un support spécifique, on aura le code support renseigné mais pas l'article, et donc pas sa conversion.)*
---
## 2 - Identification des customs
### 2.1 - Bloc de code / requête
Ajouter des commentaires permettant de délimiter le code modifié lorsqu'il se retrouve mélangé avec du code standard :
```csharp
potentiel code standard
//StartCustom
Code custom
//EndCustom
potentiel code standard
```
### 2.2 - Identification des éléments custom
Chaque nouvel élément ou élément modifié doit être identifié par le préfixe **`CST_`**, en se posant les questions suivantes :
| Question | Règle |
|----------|-------|
| **Est-ce que l'élément est visible par le client ?** | Pas d'ajout de préfixe (ex : les paramètres SmartUI ne prennent pas le préfixe) |
| **Est-ce que j'ai la possibilité de modifier le nom de l'élément ?** | Un workflow non en mode "full edition" ne permet pas de modifier le nom des éléments |
| **Est-ce qu'il s'agit de l'élément de plus "haut niveau" ?** | Tous les éléments d'un workflow custom ne prendront pas le préfixe — seul le **workflow** sera identifié. Inversement, dans un workflow standard, **tous** les éléments ajoutés/modifiés prennent le préfixe |
> ⚠️ **N'oubliez pas !**
> - Un dialogue est modifié même si on ne fait que changer l'implémentation de l'activité
> - Les **transitions** doivent aussi être identifiées
> ⚠️ Lorsqu'un workflow passe de "partial overriden" à "overriden" avec le mode "full edition", on perd l'identification de couleur des activités/transitions modifiées. Il faut alors préfixer **toutes** les activités modifiées par `CST_` (ouvrir le workflow dans sa version précédente en parallèle pour ne rien oublier).
---
## 3 - Nommage des éléments
Nomenclature générale de référence : [Nomenclature Espagne](https://msscc.mecalux.com/documentation/Development/master/ES/map_development_concepts/nomenclature/index.md)
Règles complémentaires :
- Les ressources des **viewfields** d'une vue prennent 2 préfixes suivis du code du viewfield
- Ex : viewfield `OutboundOrderStatus` de la vue `OutboundOrderVList``ViewField_OutboundOrderVList_OutboundOrderStatus`
- Les **paramètres SmartUI** sont plus parlants s'ils sont préfixés du process qu'ils impactent, en majuscules
- Ex : `EXPEDITION_ALLOWED_CONTAINER`
- Les **attributs** d'un workflow commencent par une **minuscule**, les **paramètres formels** par une **majuscule**
- Toutefois, ne pas oublier le préfixe `CST_` devant les attributs dans un workflow standard
- Les **paramètres d'un dialogue** commencent par une majuscule
- Les **paramètres d'une requête** commencent par une minuscule
---
## 4 - Utilisation du "code en dur"
- Dans les workflows, éviter au maximum le code en dur
- Notamment, les actions "Enter" et "Escape" après un dialogue devraient être testées avec les variables :
- `ProcessContext.EnterAction`
- `ProcessContext.EscapeAction`
---
## 5 - Null reference
Attention à l'utilisation de code pouvant induire des `NullReferenceException`, particulièrement la méthode `FirstOrDefault()` qui doit être sécurisée :
```csharp
// ❌ Dangereux - peut lever une exception si aucun ordre de sortie n'existe
Context.OutboundOrders.FirstOrDefault(s => s.Code == outboundOrderCode).OutboundLines
// ✅ Sécurisé
var order = Context.OutboundOrders.FirstOrDefault(s => s.Code == outboundOrderCode);
if (order != null) { ... }
```
Documentation Espagne sur la gestion des null reference : [Lien MSS](https://msscc.mecalux.com/documentation/Development/master/ES/map_application_development/null_management_best_practices/index.md)