version mise à jour par claude , à tester

This commit is contained in:
Arthur Ria
2026-05-20 09:38:07 +02:00
commit b59cbb3546
58 changed files with 24548 additions and 0 deletions
+266
View File
@@ -0,0 +1,266 @@
/**
* Query Examples Resources
* Provides example LINQ queries and diagnostic recipes for WMS entities.
*/
function listResources() {
return [
{
uri: 'wms://query-examples',
name: 'Query Examples',
description: 'LINQ query examples and diagnostic recipes for WMS entities',
mimeType: 'text/markdown',
},
];
}
async function readResource(uri) {
let content;
switch (uri) {
case 'wms://query-examples':
content = getQueryExamples();
break;
default:
throw new Error(`Unknown query examples resource: ${uri}`);
}
return {
contents: [{
uri,
mimeType: 'text/markdown',
text: content,
}],
};
}
function getQueryExamples() {
return `# WMS LINQ Query Examples & Diagnostic Recipes
> **Reading model** — \`query_wms_entities\` / \`count_wms_entities\` use \`QueryExecute\`
> (QueryType=Reading). Status/enum fields are **strings** (enum names), never integers.
> Always verify enum values via \`docs://entities/\` or \`get_entity_metadata\` before filtering.
---
## Diagnostic Recipes
Recipes below were validated against a live WMS. Use them as-is, substituting the
\`X\` placeholders.
### OS incomplètes par classe d'expédition
Compter les ordres de sortie incomplets, actifs, d'une classe donnée
(\`OutboundClassCode\`). Fields verified on the \`OutboundOrder\` Reading entity:
\`OutboundClassCode\` (string), \`IncompleteOrder\` (bool), \`IsActive\` (bool).
\`\`\`
# Toutes classes confondues
count_wms_entities(
entity_type="OutboundOrders",
filter='z.IncompleteOrder == true && z.IsActive == true'
)
# Pour une classe précise
count_wms_entities(
entity_type="OutboundOrders",
filter='z.OutboundClassCode == "SHIPPING_GROUP_01" && z.IncompleteOrder == true && z.IsActive == true'
)
# Lister le détail des OS concernées
query_wms_entities(
entity_type="OutboundOrders",
filter='z.OutboundClassCode == "SHIPPING_GROUP_01" && z.IncompleteOrder == true && z.IsActive == true',
limit=200
)
\`\`\`
### Containers bloquants sur un emplacement
Identifier les conteneurs qui retiennent un emplacement parce qu'ils ont des tâches
en attente. Fields verified on the \`Container\` Reading entity:
\`LocationCode\` (string), \`NumContainerPendingTasks\` (long).
\`\`\`
# Combien de containers ont des tâches en attente sur l'emplacement
count_wms_entities(
entity_type="Containers",
filter='z.LocationCode == "QUAI_EXP_01" && z.NumContainerPendingTasks > 0'
)
# Lister ces containers (renvoie toutes les colonnes du container)
query_wms_entities(
entity_type="Containers",
filter='z.LocationCode == "QUAI_EXP_01" && z.NumContainerPendingTasks > 0',
limit=200
)
# Vue globale : tous les containers bloquants du WMS
count_wms_entities(
entity_type="Containers",
filter='z.NumContainerPendingTasks > 0'
)
\`\`\`
### Paramètres système d'un entrepôt
Pour lire les paramètres de configuration WMS et leurs valeurs par entrepôt,
utiliser l'outil dédié \`get_system_parameters\` plutôt qu'une requête LINQ :
\`\`\`
get_system_parameters(warehouse="DOMBASLE") # tous les paramètres
get_system_parameters(warehouse="DOMBASLE", param_class="Shipping")
get_system_parameters(search="CROSSDOCK")
\`\`\`
### Modèles d'expédition — suivi des exécutions
> ⚠️ L'API ne conserve que la **dernière** exécution de chaque modèle d'expédition
> (\`ShipmentTemplate.LastExecuteDate\`). L'historique complet des exécutions n'existe
> que dans les logs serveur \`ApplyShipmentTemplates\`, non exposés par ce MCP.
Fields verified on the \`ShipmentTemplate\` Reading entity: \`Code\`, \`Status\`,
\`IsEnabled\`, \`IsActive\`, \`LastExecuteDate\`, \`WarehouseCode\`, \`Priority\`,
\`DirectiveCode\`.
\`\`\`
# Tous les modèles d'un entrepôt + leur dernière exécution et leur statut
query_wms_entities(
entity_type="ShipmentTemplates",
filter='z.WarehouseCode == "DOMBASLE"',
limit=200
)
# Modèles activés mais jamais exécutés (LastExecuteDate null)
query_wms_entities(
entity_type="ShipmentTemplates",
filter='z.IsEnabled == true && z.LastExecuteDate == null',
limit=200
)
# Combien de modèles exécutés au moins une fois
count_wms_entities(
entity_type="ShipmentTemplates",
filter='z.LastExecuteDate != null'
)
# Modèles exécutés depuis une date (littéral DateTime obligatoire — voir Date filters)
count_wms_entities(
entity_type="ShipmentTemplates",
filter='z.LastExecuteDate >= new DateTime(2025, 1, 1)'
)
\`\`\`
---
## Counting (\`count_wms_entities\`)
Always prefer \`count_wms_entities\` for any "combien" / "how many" question — it uses
\`QueryScalarExecute\` and never materialises rows.
\`\`\`
count_wms_entities(entity_type="OutboundOrders")
count_wms_entities(entity_type="Tasks", filter='z.TaskStatus == "InProcess"')
\`\`\`
---
## Basic Queries
### Get rows (with limit)
\`\`\`
query_wms_entities(entity_type="Products", limit=100)
query_wms_entities(entity_type="Tasks", limit=50)
\`\`\`
> Note: the \`select_expression\` parameter (LINQ projections) is currently unreliable
> against \`QueryExecute\` — prefer querying full rows and reading the fields you need.
## Filtering Examples
### Status filters (string enum names)
\`\`\`
# Tâches en cours / en attente
query_wms_entities(entity_type="Tasks", filter='z.TaskStatus == "InProcess"', limit=100)
query_wms_entities(entity_type="Tasks", filter='z.TaskStatus == "Pending"', limit=100)
# Ordres de sortie lancés
query_wms_entities(entity_type="OutboundOrders", filter='z.OutboundOrderStatus == "Release"', limit=100)
\`\`\`
### Date filters
> ⚠️ \`AddDays()\` et les dates relatives (\`DateTime.Now\`, \`DateTime.Today\`) ne sont
> **pas traduisibles** par le moteur de requête — toujours utiliser un littéral
> \`new DateTime(année, mois, jour)\`. Le nom du champ date dépend de l'entité
> (\`LastExecuteDate\`, \`InternalInfo.CreationDate\`, …) — le vérifier via
> \`get_entity_metadata\` ou \`docs://entities/\`.
\`\`\`
# Éléments depuis une date donnée (littéral DateTime obligatoire)
count_wms_entities(
entity_type="ShipmentTemplates",
filter='z.LastExecuteDate >= new DateTime(2025, 1, 1)'
)
\`\`\`
### Numeric filters
\`\`\`
query_wms_entities(entity_type="Stocks", filter="z.Quantity > 0", limit=100)
\`\`\`
### String filters
\`\`\`
query_wms_entities(entity_type="Products", filter='z.Code.StartsWith("ABC")', limit=100)
query_wms_entities(entity_type="Products", filter='z.Code.Contains("test")', limit=100)
\`\`\`
## Complex Filters
### Multiple conditions (AND / OR)
\`\`\`
query_wms_entities(
entity_type="Tasks",
filter='z.TaskStatus == "Pending" && z.Priority > 50',
limit=100
)
query_wms_entities(
entity_type="OutboundOrders",
filter='z.OutboundOrderStatus == "Release" || z.OutboundOrderStatus == "Creating"',
limit=100
)
\`\`\`
## Common Patterns
### Find an entity by code
\`\`\`
query_wms_entities(entity_type="Products", filter='z.Code == "PROD123"', limit=1)
query_wms_entities(entity_type="OutboundOrders", filter='z.Code == "ORDER123"', limit=1)
\`\`\`
## Performance Tips
1. **Always use limits** — max 1000 rows per query.
2. **Use \`count_wms_entities\` for counts** — never fetch rows just to count them.
3. **Verify enum values first** — Reading model uses string enum names.
4. **Use specific filters** — narrow results at the API level.
---
**Note:** All queries respect the maximum limit of 1000 rows configured in the server.
`;
}
module.exports = {
listResources,
readResource,
};