Lien indirect entre 2 objets métier

Lien indirect entre 2 objets métiers via l’éditeur de code

Bonjour, je débute sur simplicité avec une application de logistique. J’essaye d’implémenter la fonction d’ajout de stock du tutoriel à mon cas mais mes objets métiers ne sont pas directement liés.

Voici l’extrait de mon modèle de données concerné. Mon code se situe sur l’objet “SeccoEntree” qui est l’équivalent de ma commande et je veux impacter le stock de mon objet “SeccoStockReferent” en conséquences.

Et voici mon code :

Je n’arrive pas à trouver le bon code à écrire, peu importe ce que je tente, j’ai énormément d’erreurs qui apparaissent m’indiquant un “unknown field” que je n’arrive pas à identifier. Je pense que mes liens entre objets ne sont pas les bons mais je ne saurais dire pourquoi.

Merci d’avance pour votre aide.
Cordialement,
Manon

Bonjour Manon,

Ce que vous présentez indique que vous souhaitez mettre à jour SeccoStockReferent suite à la mise à jour de SeccoEntree (puisque vous implémentez votre règle de gestion dans SeccoEntree.postUpdate). L’objet SeccoEntree n’est pas directement lié au produit, je ne comprends donc pas quel produit vous souhaitez impacter.

Pouvez vous décrire plus précisément ce que vous souhaitez accomplir et de quelle façon?

Bonjour,

Oui c’est bien ce que je souhaite faire.

Mon objet SeccoEntree est reliée à SeccoProduit par une relation n,n :

Pour clarifier mon propos, j’ai un SeccoEntree qui contient x produits. En parallèle j’ai un SeccoEntrepotRef qui contient autant de SeccoStockReferent que de produits existants.

Je souhaite, lors du changement de statut de mon entrée et pour chaque article contenu dans ma SeccoEntree, incrémenter la quantité de cet article dans le SeccoStockReferent correspondant. Or, je n’arrive pas à traduire cela en code dans mon objet SeccoEntree.

Je ne sais pas si je suis claire dans mon propos et vous remercie d’avance pour votre appui.

Cordialement,
Manon

Bonjour,

Merci, c’est très clair.

Sauriez-vous écrire le pseudocode de cette règle de gestion, que nous puissions identifier le ou les connaissances qui vous font défaut?

Suite à notre entretien téléphonique, voici la correction “au plus propre” (vs le “plus pédagogique” que nous avons réalisé ensemble)

package com.simplicite.objects.SECCo;

import java.util.*;

import com.simplicite.util.*;
import com.simplicite.util.exceptions.*;
import com.simplicite.util.tools.*;

/**
 * Business object SeccoEntree
 */
public class SeccoEntree extends ObjectDB {
	private static final long serialVersionUID = 1L;
	
	@Override
	public String postUpdate() {
		// pour chacune des SeccoEntreeProd de ce SeccoEntree (rechercher au préalable)
			// charger le SeccoStockReferent correspondant à 1) l'entrepot de l'entrée, 2) au produit 
			// augmenter la quantité d'autant qu'indiqué dans SeccoEntreeProd
			// sauvegarder
		
		if(this.getOldStatus().equals("EN_COURS") && this.getStatus().equals("VALIDEE")){
			ObjectDB entreePrd = getGrant().getTmpObject("SeccoEntreeProd");
			ObjectDB stockRef = getGrant().getTmpObject("SeccoStockReferent");
			
			synchronized(entreePrd.getLock()){
				for(String[] row : entreePrd.getTool().search(Map.of("seccoEntreeprodEntreeId", getRowId()))){
					entreePrd.setValues(row);
					synchronized(stockRef.getLock()){
						try{
							stockRef.getTool().get(Map.of(
								"seccoStockrefEntrefId", this.getFieldValue("seccoEntreeEntrefId"),
								"seccoStockrefProdId", entreePrd.getFieldValue("seccoEntreeprodProdId")
							));
							stockRef.setFieldValue("seccoStockRefQuantite", 
								stockRef.getField("seccoStockRefQuantite").getInt(0)
								+
								entreePrd.getField("seccoEntreeprodQuantite").getInt(0)
							);
							stockRef.getTool().validateAndSave();
						}
						catch(Exception e){
							AppLog.error("error updating stock", e, getGrant());
						}
					}
				}
			}
		}
		return null;
	}
}

[Message prédéfini]

Nous conseillons aux utilisateurs de marquer comme “solution” la réponse résolvant leur problématique pour permettre au support de mieux suivre les sujets non résolus, et à la communauté de trouver plus facilement la bonne réponse.

Vos messages indiquant une résolution du problème, nous avons réalisé cette opération pour vous.