Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    avril 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2010
    Messages : 26
    Points : 7
    Points
    7

    Par défaut utlisation de la transformation validation dans BODS

    I ENCOUTERED A technical problem with BODS SAP.
    The version is SAP BusinessObjects XI 3.2
    Database Oracle 11g

    I am using a function that return a output value from a input value.
    Ex:
    begin
    if ($ID_TxRbs = 1)
    Return 0;

    if ($ID_TxRbs = 2)
    Return 15;

    if ($ID_TxRbs = 3)
    Return 30;

    if ($ID_TxRbs = 4)
    Return 35;

    if ($ID_TxRbs = 5)
    Return 65;

    if ($ID_TxRbs = 6)
    Return 100;

    Return 300;
    End


    Than I have a transform Validation that returns an error if the value equal with 300



    Sometimes, it occurs that the function did not recognize the input value ( for ex input value = 5, and the function returns default value 300)
    And the validation transformation take the line with the value =300 to the Pass way flow instead of taking it in the fail way flow.

    This error happens randomly. For example, on 5 hundred lines, its occurs on only for two lines.

    The type of the field is VARCHAR2(1024) . the received number of character is 1 in the field à ( length (TAUXREMBOURSEMENT)=1).

    I don’t understand why this error occurs and why the validation transform doesn’t work properly all day.

    Can you help me please?

    Best regard
    Images attachées Images attachées  

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    avril 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2010
    Messages : 26
    Points : 7
    Points
    7

    Par défaut

    Bonjour Je rencontre le probleme suivant avec l'ETL BODS
    version SAP BusinessObjects XI 3.2
    Database Oracle 11g

    J'utilise une fonction personnalisée dans BODS me permettant de récupérer en entrée une valeur et de retourner une autre valeur en sortie
    begin
    if ($ID_TxRbs = 1)
    Return 0;

    if ($ID_TxRbs = 2)
    Return 15;

    if ($ID_TxRbs = 3)
    Return 30;

    if ($ID_TxRbs = 4)
    Return 35;

    if ($ID_TxRbs = 5)
    Return 65;

    if ($ID_TxRbs = 6)
    Return 100;

    Return 300;
    End

    Puis j'utilise la transformation validation de BODS pour envoyer un message d'erreur si la valeur retournée est égale à 300.

    Cependant, de façon très aléatoire, la valeur en entrée n'est plus reconnue par la fonction qui renvoie en retour '300'. et cette dernière valeur n'est pas correctement traitée par la fonction validation qui envoie la ligne dans le flux "réussite" ou Pass au lieu de "echec" ou Fail

    Je travaille avec des champs en varchar 2(1024) et si je fais un length sur mon champ lorsque l erreur se produit j'ai bien une valeur=1.

    Quant à la fonction validation, elle semble rencontrer ce problème que depuis qq jours. mais en relançant les même lignes ce matin, tout a correctement fonctionné.

    Avez vous déjà rencontré ce genre d instabilité avec BODS?

    je vous remercie de votre rertour

  3. #3
    Membre du Club
    Inscrit en
    décembre 2008
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : décembre 2008
    Messages : 27
    Points : 51
    Points
    51

    Par défaut

    J'ai déjà rencontrés des bug étranges mais c’était surtout sur des versions plus anciennes... Quand c'était le cas il était presque tout le temps possible des les contourner en modifiant légèrement les DF, soit en changeant une variable (voir en la renommant...), ou en utilisant une autre transformation.

    Donc si je comprend bien tu as deux problèmes à la suite? La fonction qui ne marche pas toujours correctement puis la validation qui se met aussi à déconner?

    Déjà est-ce que tu es sûr que ce n'est pas un problème au niveau de la conception du DF? En utilisant le mode debug pour voir ce qui se passe ou en traçant toutes les variables?
    Tu dis que si tu fais un length sur ton champ tu as bien une valeur=1, mais as-tu vérifié la valeur réel des champs?

    Sinon tu utilise du varchar2, tu peux déjà mettre les valeurs dans ta fonction entre quote pour éviter une conversion.

    Autre idée, est-ce que la fonction en entrée sert à autre chose qu'alimenter la Validation? Sinon pourquoi ne pas implémenter les conditions directement dans la validation?
    Une autre option, utilise un Case à la place de la validation pour voir si tu retrouve le même problème.

  4. #4
    Membre du Club
    Inscrit en
    décembre 2008
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : décembre 2008
    Messages : 27
    Points : 51
    Points
    51

    Par défaut

    Autre vérification, tu as bien dans l'onglet Action on Failure: 'Send to Fail'? Et tu te retrouve vraiment dans la table en sortie du Pass avec des valeurs '300' dans le champ en question?

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    avril 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2010
    Messages : 26
    Points : 7
    Points
    7

    Par défaut

    Bonjour mapk0

    merci pour ta reponse
    Alors tout d 'abord

    valeur des champs en entrée--> oui la valeur en entrée est correcte par rapport aux données cibles puis la valeur en sortie de la fonction est erronée avec la valeur 300;

    lenght sur le champ: j'ai fait cette opération pour vérifier que ma valeur en entrée ne comportait pas d espace ou de caractères "invisibles"

    => je vais tester avec les cotes dans la fonction et te donnerai les resultats

    le problème réside dans la reproductibilité aléatoire des erreurs. l'application est en prod depuis des mois et cela ne ct jamais produit ( sinon observé) auparavant. si je lance plusieurs fois la meme donnée, cela peut ne pas se produire du tout ou bien le faire une fois seulement

    je fais le test des côtes et te tiens au courant
    merci encore

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    avril 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2010
    Messages : 26
    Points : 7
    Points
    7

    Par défaut

    SALUT
    en ce moment avec ou sans cote la fonction renvoie les bonnes données valeurs.
    Cependant, un cas me turlupine: si le champ a la valeur nulle la fonction ne renvoie pas 300 mais nulle! Pourquoi?

    j ai mis les cotes dans la fonction
    f ($ID_TxRbs = '1')
    Return 0;

    if ($ID_TxRbs = '2')
    Return 15;

    if ($ID_TxRbs = '3')
    Return 30;

    if ($ID_TxRbs = '4')
    Return 35;

    if ($ID_TxRbs = '5')
    Return 65;

    if ($ID_TxRbs ='6')
    Return 100;

    Return 300;
    End

  7. #7
    Membre du Club
    Inscrit en
    décembre 2008
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : décembre 2008
    Messages : 27
    Points : 51
    Points
    51

    Par défaut

    Bon y a quelque chose d’étrange, j'ai testé ta fonction et je n'ai pas le même résultat:
    1 - J'ai créé une fonction personnalisée TEST avec un paramètre d'entrée (input) $ID_TxRbs de datatype varchar.
    ->Déjà je ne met pas de END à la fin sinon ça ne valide pas.

    2 - Dans une Query j'utilise la fonction sur un champ VARCHAR (en amont et dans la query): du genre TEST(MonChamp).

    3 - En entrée j'ai testé les valeurs null, 1 , 6, 'azd' etc et j’obtiens le résultat attendu à savoir : 300 , 0 , 100 , 300 etc

    Il y a forcement quelque chose de différent ou que je n'ai pas compris, car ce n'est pas normal que tu obtient du NULL. Est-ce que tu procède de la même façon que moi pour utiliser ta fonction? Est-ce que tu n'aurais pas une variable globale $ID_TxRbs qui pourrait écraser le paramètre?

    Tu ne l'utilise pas directement dans la validation? Car il y a l'option "Do not validate when NULL" sur la capture d'ecran

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    avril 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2010
    Messages : 26
    Points : 7
    Points
    7

    Par défaut

    MERCI
    alors mea culpa:
    Tu ne l'utilise pas directement dans la validation? Car il y a l'option "Do not validate when NULL" sur la capture d'ecran=> il y a un bien cocher la case DO not Validate when null image2

    ca fait déja un point en moins

    Sinon
    pour le reste je n'arrive plus à reproduire l'erreur!!
    je te joins une copie d'écran image1
    la fonction R9 etant celle que je t 'avais envoyé avant

    J'avais rencontré un problème similaire:
    je récupère une valeur de champ et en fonction je renvoie 1 ou 0, une fois il n ya pas eu de bonne mise à jour avec la bonne donnée renvoyée plusieurs fois via BODS image3: impossible de reproduire l'erreur depuis

    je ne comprends pas ce qui peut bien se passer
    Images attachées Images attachées    

  9. #9
    Membre du Club
    Inscrit en
    décembre 2008
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : décembre 2008
    Messages : 27
    Points : 51
    Points
    51

    Par défaut

    L'option "Do not validate when Null" n'influe pas sur le résultat de ta fonction on est bien d'accord? C'est ton ifthenelse qui renvoi Null:

    Voila ce qui doit se passer avec ton DF:

    1- ifthenelse ( TAUXREMBOURSEMENT is not null, r9(TAUXREMBOURSEMENT), null)
    => Si TAUXREMBOURSEMENT est null, la fonction n'est pas traitée donc il reste null

    2 - Validation sur TAUXREMBOURSEMENT <>300 et option "Do not validate when Null"
    => TAUXREMBOURSEMENT est null donc la validation n'a pas lieu et la ligne va dans le flux Pass.

    Concernant ton problème similaire avec l'image 3, tout ce que je peux dire c'est qu'il faut être sûr que le champ testé en entrée soit strictement égale à 'Prévisionnel' en tenant compte de la CASE (sinon utiliser la fonction UPPER par exemple si la CASE peut changer), ou encore être sûr que l’accent soit bien interprété (si jamais en amont il y a eu une mauvaise conversion due à des jeux de caractères différents).

    Après si vraiment tu tombe sur un Bug BODS et que le comportement devient aléatoire tu peux remplacer ifthenelse par decode, Validation par Case etc etc.
    Mais ça reste rare, en général c'est plutôt une erreur sur le flux quand un cas particulier n'a pas était vu.

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    avril 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2010
    Messages : 26
    Points : 7
    Points
    7

    Par défaut

    Salut

    alors pour la coche "no validate if null" c est ok le fonctionnement me convient donc pas de souci

    ensuite , je viens de me rende compte que la fonction gère des paramètres input et output en integer alors que le champ en entrée est en varchar: peut être il y a des problèmes aléatoires de conversions (comme tu disais) entre la valeur en entrée de type varchar et les paramètres de la fonction
    je fais modifier modifier ma fonction en insérant une variable de type varchar et faire un ltrim_black et retourner un varchar

    ce qui reste assez loufoque c est de modifier une fonction sur des données qui fonctionnent. le but c'est de ne pas faire de régression

Discussions similaires

  1. Validation dans les tables
    Par Isabelle27 dans le forum Access
    Réponses: 8
    Dernier message: 02/05/2006, 15h14
  2. Réponses: 23
    Dernier message: 11/04/2006, 17h33
  3. Réponses: 11
    Dernier message: 22/03/2006, 11h15
  4. [STRUTS][Validation] - Validation dans un execute
    Par SEMPERE Benjamin dans le forum Struts 1
    Réponses: 8
    Dernier message: 07/12/2004, 10h55
  5. Récupération de données validées dans une pop-up
    Par hdd dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 01/12/2004, 16h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo