Configurer une "Child list with creation"

Request description

Bonjour,

Pour certains de nos objets qui ont des relations N,N présentés en onglet, nous souhaiterions pouvoir créer en liste directement l’objet lié et non la relation.
Par exemple nous avons des Domaines reliés à des Flux par un objet DomFlux qui ne contient que les clés étrangères. Sur le Domaine, nous voudrions afficher en onglet les Flux et non les DomFLux, et pouvoir créer des Flux en liste (le DomFLux correspondant se créerait donc automatiquement)

Y a-t-il un paramétrage permettant de le faire ? Sinon une méthode adaptée avec une clé virtuelle ?

Merci d’avance pour votre aide !
Emmanuelle

Steps to reproduce

This request concerns an up-to-date Simplicité instance
and these are the steps to reproduce it:

Technical information

Instance /health
---paste the content of your-instance.com/health---
Simplicité logs
---paste the content of the **relevant** server-side logs---
Browser logs
---paste content of the **relevant** browser-side logs---
Other relevant information

----E.g. type of deployment, browser vendor and version, etc.----

Bonjour,

Il existe le hook getTargetObject qui permet d’ouvrir un objet plutôt qu’un autre que vous pouvez implémenter sur DomFlux qui ouvrirait Flux.
Pour la création vous pouvez créer une action de liste sur DomFlux qui ouvrirait le formulaire de Flux en initialisant un paramètre d’objet égal au rowid du Domaine et ce afin de créer automatiquement le DomFlux correspondant dans le postCreate de Flux.

Bonjour Nathalie,

Merci pour ton retour rapide !
Oui pour l’ouverture cette solution convient bien, ce qui est plus compliqué c’est qu’on voudrait pouvoir créer des Flux en liste et non en formulaire. Donc je me dis que je dois peut-être ramener l’objet Flux dans les onglets avec une clé virtuelle - mais je ne vois pas comment vu qu’un flux peut correspondre à plusieurs domaines !

Oui c’est une autre solution.
Tu créés un lien virtuel entre Flux et Domaine qui sont les flux du domaine via la relation DomFlux.
Et tu codes dans le postCreate du Flux la création de l’objet DomFlux en fonction du getParentObject().getRowId() du Domaine et getRowId() du Flux.

Mais ça fonctionne une clé virtuelle sur une N,N ? Mon filtre SQL va ramener plusieurs domaines.

Le lien virtuel est entre le Flux et le Domaine.
Ce sont tous les flux qui se trouvent dans la N-N DomFlux.

1 Like

Par exemple dans la formation ou la demo tu pourrais créer un lien virtuel entre le client et le produit.
Dans le produit on voit les clients qui ont fait des commandes (N-N)

Le filtre de la relation vituelle serait

t.row_id in (select c.row_id from trn_customer c
left join trn_order o on o.trn_ord_cus_id = c.row_id
left join trn_product p on o.trn_ord_pro_id = p.row_id
where p.row_id = [row_id]
)

1 Like

Merci Nathalie j’ai créé la clé virtuelle avec création du lien N,N dans le postCreate ça fonctionne parfaitement.
Il me reste à faire apparaître le bouton Associate, est-ce que je dois faire une fausse action Associate ? Car même en mettant le Associate visible il n’apparaît pas sur mon onglet.

Merci !

Tu veux mettre une association entre Domaine et DomFlux ? ou entre Domaine et Flux ?

Entre Domain et Flux. Quand je suis sur un Domaine, j’ai mon onglet des Flux grâce à la clé virtuelle. Je voudrais voir apparaître le bouton Associate qui ouvre la liste des Flux. Au clic sur Select, je pourrais créer par code les liens DomFlux correspondants.

Je pense que ma question correspond à ce ticket, je vais essayer et je reviens faire un retour :slight_smile:

Oui l’association ne marche pas sur une relation virtuelle.
Tu peux essayer de faire une action qui fait le $ui.displayAssociate
https://docs.simplicite.io/5/jsdoc/Simplicite.UI.Engine.html#displayAssociate

Je n’ai pas réussi à faire fonctionner le DisplayAssociate donc j’ai mis ce code dans mon script.
J’ai déplacé mes filtres du InitAssociate vers le PreSearch et tout fonctionne comme souhaité.
Merci pour ton aide !

Emmanuelle

function associateFlows(obj) {

var app = $ui.getAjax();
var domflow = app.getBusinessObject("RciDomFlow");
var domId = obj.getParentObject().getRowId();
var appDom = obj.getParentObject();
// multiple flows selection
$ui.selectObject(null, "RciFlow", {context: Simplicite.CONTEXT_REFSELECT, parent: { name: appDom.getName(), inst: appDom.getInstanceName(), rowId: appDom.getRowId(), object: appDom } , selectRows: true }, function(ids) {

	var nbSelected = $(ids.selectedIds).length;	
  $(ids.selectedIds).each(function(i,id) { 
  	
  	domflow.getForCreate(function(item) {
	    console.log(item); // initialized record for creation

	    item.rciDflFlowId = id;
		item.rciDflDomId = domId;
	    domflow.create(function(item){if (i === nbSelected - 1) $("[data-action=reload]").click();},item,null);
	});
	
  });
});

}

This topic was automatically closed 60 minutes after the last reply. New replies are no longer allowed.