2017-04-27 1 views
0

J'ai besoin à la variable qui passe de la valeur de java script modifié et passer à l'entrée table de requêtevariables passant Pentaho de la valeur de java script modifié à l'entrée de la table

ceci est mon enter image description here

Si je clique sur un aperçu du résultat

initator_reference | a | '' | 
1     | a | null | 
2     | a | null | 
3     | a | null | 
4     | a | null | 

il ne devrait pas être nulle, mais la chaîne « test » sur ce troisième champ et ne me demandez pas pourquoi je mets cette variable dans select, son juste pour tester avant de le mettre dans "where condition = variable"

Répondre

1

L'entrée de table prend en charge deux méthodes différentes de création de la dynamique SQL: Variable Substitution et insertion de données d'un flux entrant.

substitution variable

Voici ce que vous avez actuellement configuré dans le tableau d'entrée: Vous mettez $ {variable} quelque part et lorsque l'étape initialise, la valeur est collée sous forme de texte dans le SQL.

Parce que toutes les étapes initialisent en même temps dans une transformation, votre étape Javascript n'a pas eu le temps de définir la valeur. Dans PDI vous ne pouvez pas définir et utiliser une variable dans la même transformation.

données d'insertion à partir de l'étape

La deuxième façon est utilisée en sélectionnant une étape de source dans l'option « Insérer des données à partir de l'étape » dans l'entrée de table. Dans ce mode, l'entrée de table prend une ligne de l'étape sélectionnée et insère des champs (dans l'ordre) dans le SQL aux points d'interrogation (?) Que vous insérez. Normalement, il attend une seule ligne, mais vous pouvez choisir de l'exécuter pour CHAQUE ligne.

De cette façon devrait fonctionner pour votre scénario:

  1. Mettre une Générez des lignes étape au début et à définir pour générer 1 rang.
  2. Connectez-le à l'étape Javascript.
  3. Dans l'étape Javascript, spécifiez la variable de retour comme un champ de sortie dans la grille du bas, il sera ajouté au flux.
  4. Dans l'entrée de table, sélectionnez l'étape Javascript à "Insérer les données de l'étape"
  5. Dans votre SQL, insérer? à la position de la variable. Vous pouvez avoir besoin de guillemets simples si la valeur est une chaîne: WHERE colonne = '?'.
  6. Aperçu de la transformation pour voir le résultat, l'aperçu de Table Input est désactivé en raison de la dépendance.

Notes:

  • Étape 1 et 2 ne peuvent pas être nécessaires, je ne sais pas si l'étape JS génère une ligne par lui-même. J'aime être explicite à ce sujet, nommant souvent l'étape Générer des lignes "Générer 1 ligne".
  • Si vous avez un flux existant ou plusieurs champs à insérer, vous pouvez utiliser l'étape Sélectionner les valeurs pour placer les champs dans l'ordre dans lequel ils doivent être insérés dans le SQL.
+0

déjà fait votre démarche mais son erreur sur la table entrée , voir ma section de réponse pour l'image (deuxième image) –

+0

@AlexanderChandra: Dans votre deuxième image, je ne vois pas de guillemets autour de la? dans votre entrée de table. Vous obtenez probablement une erreur "colonne inconnue ...". Essayez des guillemets simples. – Cyrus

0

Eh bien je l'ai trouvé moi-même solution La première étape est modifié java script forte valeur> variables set et obtenir Variable-> entrée de table (cocher Remplacer variable script) et vous avez juste besoin de placer « ? » à votre requête (ce « ? » string est votre variable, je ne sais pas s'il y a une autre façon d'appel variable) enter image description here

et comme rappel javascript sur Pentaho est un peu différent avec réel javascript enter image description here

+0

Peut-être qu'ils ont changé quelque chose dans les versions ultérieures, bu de mon expérience, cela ne devrait pas fonctionner. D'après ce que je sais, l'étape JS ne devrait pas être traitée du tout, si elle n'a pas d'entrée. Et l'étape Get Variable doit être traitée en parallèle avec les étapes JS et Set Variables. Etes-vous sûr, que la valeur, qui vient est celle définie dans l'étape JS? Ce n'est pas simplement une valeur par défaut, définie dans l'étape Get Variables ou dans les propriétés de ktr? Et la valeur de JS est ramassée une première fois de ktr après le redémarrage de Spoon? – user4637357

+0

Eh bien, je viens de trouver le problème, pour la première fois que je cours aperçu il montre aujourd'hui date - 10 (mon javascript) puis je change mon javascript à aujourd'hui-8 et son spectacle encore aujourd'hui-10. Avez-vous une solution? –

+0

L'approche proposée par @Cyrus devrait fonctionner. Fondamentalement, vous devez mettre une seule ligne à l'étape JS (vous pouvez utiliser l'étape Détecter le flot vide pour cela: elle ne génère pas de colonnes, vous n'aurez donc pas besoin de les supprimer), placez votre entrée Table à la place de vos variables Set étape et remplacez «Données d'entrée de l'étape» pour pointer vers l'étape JS. Et enfin supprimer les étapes variables Set/Get. Ça devrait marcher. – user4637357