Ajout de pillbox temporaires en cas de copie

Request description

Bonjour,

Dans un contexte de copie, je souhaite initialiser les pillbox du formulaire de création de ma copie avec les liens N,N de mon objet source.
J’essaie de mettre ceci en place dans le form.preload en manipulant le paramètre d’objet tmppb, mais je n’y arrive pas.

Voici ma tentative (les valeurs sont en dur, j’essaie juste de voir si cela crée des pillbox et la réponse est non car mon objet tag n’a pas la même valeur que celui de la pillbox)

tag = app.getBusinessObject("RciFormApiTagTrace");
local = obj.localParameter("tmppb") || {};
                    obj.localParameter("tmppb", local);
                    local[0] = local[0] || [];
                    local[0].push({
                        object: tag,
                        parent: obj,
                        childfk: "rciFormApiTagFormApiId",
                        id: "13",
                        label: "KMR"
                    });

EDIT : j’ai résolu le problème de l’objet tag, mais je bloque maintenant sur la fonction Create qui ne m’est pas accessible. J’arrive donc bien à afficher les pillbox, mais le save ne sait pas quoi en faire.

				p.form.preload = function(ctn, obj, p) {
					
					tag = app.getBusinessObject("RciFormApiTagTrace");
					
					local = obj.localParameter("tmppb") || {};
                    obj.localParameter("tmppb", local);
					
					local[0] = local[0] || [];
					
					let lp = obj.metadata.links[2];
					
					ui.getNavObject(ctn, tag, "panel_ajax_RciFormApiTagTrace_rciFormApiTagFormApiId", o => {
		                tag = o;
		                let oldParentId = o.parent ? o.parent.rowId : null;

	                		local[0].push({
	                           create: create,
	                            object: tag,
	                            parent: obj,
	                            childfk: "rciFormApiTagFormApiId",
	                            id: "13",
	                            label: "KMR"
	                        });

		            }, lp);
					
				};

Est-ce la bonne méthode ? Si oui auriez vous un exemple, et si non, une alternative ?

Merci pour votre aide !
Emmanuelle

Bonjour,

Il faudrait prévoir cette fonction en standard, à savoir qu’une création par copie affiche les liens N,N de type pillbox via le tmppb interne d’avant création.

En attendant, il te faut implémenter la fonction create de la relation N,N :

// Promise to create the N,N in DB
function create(o, field, pid, child, id) {
	return new Promise((ok,ko) => {
		o.getForCreate({
			parent: p.parent
		})
		.then(item => {
			item[field] = pid;
			item[child] = id;
			return o.create(item, { metadata: true });
		})
		.then(res => {
			// remove from local
			if (local) {
				local[index] = local[index].filter(x => x.childfk!=child || x.id!=id);
				if (!local[index].length)
					delete local[index];
			}
			ok(res);
		})
		.catch(ko);
	});
}

Et au niveau de ton hook preload, il faudrait tester si tu es dans un cas de recopie :
p.copy == true

1 Like

Bonjour Emmanuelle,

L’évolution sera disponible en 6.3 LTS.
Lors d’une copie d’objet, ses liens ramenés en pillbox seront également copiés/préremplis et modifiables temporairement avant d’enregistrer la copie en base.

1 Like

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

C’est backporté en 6.2.18

Par ailleurs suite à analyse, pour être homogène avec le fonctionnement d’un attribut simple en recopie :

  • il faudra que le Lien affiché en pillbox ait aussi la propriété cascade copy = yes.
  • sinon la pillbox sera vide en cas de copy du parent même avec des liens existants

@Emmanuelle

1 Like