Objet inaccessible via script front, la méthode "search" ne ramène rien

Bonjour,

J’ai un problème avec le script front ci-dessous, je n’arrive pas à accéder à un objet métier.
J’ai simplifié au maximum pour identifier le problème mais je ne trouve pas.

	function pushFirstNodes()
	{
		var appSearch = app.getBusinessObject("RciAppSub"), listAppSearch = [];
		
		console.log(appSearch);
		appSearch.search(function(listAppSearch) {
           //Je n'atteins pas cette partie du code
		},{

		});
	}

Par contre si je remplace RciAppSub par d’autres objets, le search les atteint bien.
Je ne vois pas de différence entre les paramétrages de mes objets métier.

Sauriez vous me donner des pistes pour identifier mon problème ?

Merci d’avance pour votre aide
Emmanuelle

/health
Version=4.0.P25
BuiltOn=2021-08-31 22:38 (revision 97272cb9362c8966378105679b80fa488568a5e1)

Bonjour,

Avez-vous des messages d’erreurs dans la console du navigateur , dans l’onglet Network ?
Comment avez-vous déclarer app ?

oui
et dans les paramètres du “search” front, on peut préciser un callback en cas d’erreur :

	appSearch.search(function(listAppSearch) {
           //Je n'atteins pas cette partie du code
		},{
			error: function(err) {
				debugger;
				console.error(err);
			}
		});

Autres pistes d’analyse :

  • L’objet fonctionne-t-il par ailleurs depuis la UI/menu ?
  • Votre User n’a pas les droits de lecture ?

Merci pour ces pistes !

Je n’ai pas d’erreur dans la console ni dans l’onglet network.
Ma déclaration de app : app = $ui.getAjax() (avec un autre objet cela fonctionne)
J’arrive à lister l’objet via la UI et aussi à le fetcher en code Java, mon user a bien les droits.
Dans les logs SQL je vois que la table rci_app_sub n’est pas requêtée, alors qu’avec un autre objet métier je vois passer la requête.

C’est au niveau du bundle UI ligne 53 que je n’ai pas le même comportement
if(a)xhr.onreadystatechange=function(){self._callResponse(xhr,callback,scope);};xhr.send(p);if(!a)return this._callResponse(xhr,callback,scope);}

Avec un autre objet le traitement retourne dans ma fonction de search, mais avec RciAppSub je reste dans le code du bundle, puis mon traitement s’arrête.

Je vais essayer avec le callback !
[EDIT] Je ne passe pas dans le callback non plus …

Dans ce cas, regardez la requête XHR dans le debugger du navigateur, onglet Network.

obj?action=search&object=...

il y a peut être un problème HTTP ou de format JSON des données en retour.

Coté serveur ajoutez des traces dans pre + postSearch pour savoir si la requête arrive.
.

Merci beaucoup je n’aurais jamais trouvé toute seule.

Dans la réponse de la requête XHR j’ai une erreur “Filter required”.
C’est un champ qui était paramétré en Required search : required, quand je change en Non required mon search fonctionne.

Problème résolu, un grand merci !

Cette erreur n’a pas été catchée par la fonction d’erreur (à passer en option du search comme indiqué par @Francois )?

obj.search(function(rows) { ... }, { error: function(err) { console.error(err); }});

Si ce n’est pas le cas il y a un pb.

Quel est la réponse exacte dans la vue network du navigateur ?

Non je n’ai rien dans la console mais dans la vue network j’ai ça

{"type":"error","response":{"messages":["Required search filter: Application"],"level":2}}

Ok la réponse d’erreur semble correcte (le MIME type de la réponse est bien application/json ?). Elle devrait donc être catchée par le handler d’erreur passé en option.

Avant qu’on investigue ça de plus près pourriez vous vous mettre à jour car il y a eu qques corrections depuis votre révision de fin Août. Je ne pense pas que ça change quelque chose sur ce point particulier mais on ne sait jamais.

1 Like

On va faire le test, il y a peut être un pb quand ça remonte un tableau d’erreur au front (messages), la UI s’attend peut être à une seule erreur (message) pour un “search”.

Tout va bien, ce sont les paramètres d’appel qui ne sont pas bon dans ma réponse, le 2eme argument ce sont les filtres/tris, les autres paramètres sont ensuite :

appSearch.search(function(listAppSearch) {
			// success
		},{
			myField: "filter",
			order__otherField: -1
		},{
			error: function(err) {
				debugger;
				// err = {"type":"error","response":{"messages":
				// 	["Required search filter: ..."],"level":2}}
				console.error("error", err);
 			}
		});

Autres choses à savoir sur les filtres obligatoires :

  • le contrôle de filtre obligatoire n’est bloquant que pour les objets UI (comme l’instance the_ajax_xxx) sauf pour un panel (panel_ajax_xxx déjà filtré sur l’objet parent)
  • donc pour requêter sans contrainte en front = il faut utiliser une instance tmp, comme par exemple :
var appSearch = app.getBusinessObject("RciAppSub", "tmp_ajax_RciAppSub");
1 Like

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