2
votes

Obtenez tous les éléments de certains types sur un site Web

J'ai besoin de trouver tous les éléments d'entrée ( sap.m.Input ) sur un site Web. Je sais que je peux trouver un élément par son ID via sap.ui.getCore (). ById () mais cela ne m'aide pas ici.

Je recherche quelque chose comme sap.ui.getCore (). getByType ("sap.m.Input") . Comment puis-je faire cela?

Edit: Je n'ai pas accès au code source du site, j'injecte un javascript via une extension chrome sur les sites qui utilisent SAPUI5


3 commentaires

Par "site Web", voulez-vous dire tous les contrôles d'entrée qui ont été créés au cours du cycle de vie de l'application? Ou simplement ceux de la page que l'utilisateur consulte actuellement?


Votre deuxième hypothèse est correcte, j'ai juste besoin de ceux de la page que l'utilisateur consulte actuellement.


Maintenant, la dernière modification change tout: P Je ne sais pas si ma réponse aide


3 Réponses :


0
votes

Depuis la page actuelle
const allRegisteredControls = sap.ui.getCore().byFieldGroupId(""); // From https://stackoverflow.com/a/54227512/5846045
const inputControls = allRegisteredControls.filter(c => c.isA("sap.m.Input"));
// In the Controller
this.getView().getControlsByFieldGroupId("myInputs").filter(c => c.isA("sap.m.Input"));

Depuis l'ensemble de l'application

Tirer parti de cette solution dans Obtenez la liste de tous les contrôles instanciés dans le registre : p>

<mvc:View ...>
  <Input fieldGroupIds="myInputs" />
</mvc:View>

Référence API: sap.ui.base.Object # isA

Ceci renvoie toutes les instances enregistrées du type donné. Veuillez noter que les éléments déjà détruits ne seront pas inclus.


3 commentaires

Je n'ai pas accès au code source du site Web, je ne peux donc pas ajouter des fieldGroupIds personnalisés à chaque entrée. J'aime bien votre deuxième solution, mais pourriez-vous clarifier ce que signifie «Pour toute l'application» ici?


@KonstantinDobler Par "application", j'entends l'application Web UI5 que l'utilisateur utilise actuellement. J'ai utilisé le terme application pour indiquer que la deuxième solution est de récupérer tous les contrôles (dans notre cas, des instances de sap.m.Input ) qui ont été créés, et non encore détruits, depuis le démarrage de l'application Web. Étant donné que les applications UI5 se composent généralement de plusieurs vues / pages, vous pouvez obtenir des faux positifs qui ont été créés à un moment donné mais qui ne sont pas inclus dans la vue / page actuelle que l'utilisateur consulte.


J'ai trouvé cette méthode pour vérifier si un contrôle donné est actuellement visible par l'utilisateur. En utilisant cela, je pourrais modifier la solution «Pour toute l'application» pour n'inclure que les contrôles sur la page en cours.



0
votes

ce que vous pouvez faire est de définir chaque champ d'entrée sur un groupe de champs spécifique comme celui-ci

var aMyGroupControls = sap.ui.getCore().byFieldGroupId("MyGroup");

, puis d'obtenir tous ces champs en utilisant byFieldGroupId comme celle-ci

<input fieldGroupIds="MyGroup" />

aMyGroupControls sera rempli d'un tableau de contrôles


0 commentaires

0
votes

J'ai trouvé cette solution:

J'obtiens tous les éléments de la classe sap.m.Input du DOM-Tree avec document.getElementsByClassName ("sap.m.Input") `.

J'obtiens ensuite les éléments UI5 correspondants en appelant sap.ui.getCore (). byId () sur l'ID de chaque élément de ce tableau.


0 commentaires