2015-11-23 4 views
0

Je construis un travail de séquence qui contient une activité UserVariables (de ParamLoading) et, dans cet ordre l'activité de l'emploi (ExtractJob). ParamLoading crée 4 variables utilisateur et appelle une routine pour remplir chacune d'elles avec la valeur correspondante, puis appelle ExtractJob en lui appliquant les paramètres précédemment chargés.DSSetParam -4 erreur lors du remplissage d'un paramètre avec une routine

ParamLoading invoque une routine de serveur (GetParams) qui exécute simplement un script shell (ShellQuery) et capture le résultat; ce script shell exécute une requête SQL sur une base de données Oracle et imprime le résultat à l'écran.

En ce qui concerne les tests, ShellQuery fonctionne comme prévu et GetParams renvoie la valeur attendue. Mais quand GetParams est appelé à partir du travail de séquence (peu importe si elle est en ParamLoading ou ExtractJob) le travail échoue avec l'erreur suivante:

Test2..JobControl (@JOB033_TBK_026_EXT_PTLF): Controller problem: Error calling DSSetParam(RUTA_ORIGEN), code=-4 
[ParamValue/Limitvalue is not appropriate] 

J'ai vérifié les types de données, les noms de paramètres, tous, sans succès ou même un message disant ce qui pourrait arriver.

Code de ShellQuery:

value=$(sqlplus -s $1/[email protected]$3/$4 <<! 
     set heading off 
     set feedback off 
     set pages 0 
     select param_value from cfg_params where filter='$5' and param_name='$6'; 
!) 
echo $value 

Code de GetParams:

Call DSExecute("UNIX", Ruta_Programas:"getparams.sh ":Username:" ":Password:" ":Server:" ":ServiceId:" ":Filtro:" ":Parametro, Output, SystemReturnCode) 
    Ans = Output 
    Return(Ans) 

Répondre

0

Résolu. Pour ceux qui luttent avec un problème similaire, GetParams retournait la valeur capturée à ShellQuery en ajoutant un caractère spécial appelé "délimiteur de champ", et étant donné que le caractère est un ASCII 254, tout travail recevant le paramètre se plaignait d'une valeur non valide, était l'erreur.

Modification de la routine au suivant a résolu le problème:

Call DSExecute("UNIX", Ruta_Programas:"getparams.sh ":Username:" ":Password:" ":Server:" ":ServiceId:" ":Filtro:" ":Parametro, Output, SystemReturnCode) 
Ans = EReplace(Output, @FM, "") 
Return(Ans) 

Merci à Matt Calderon pour fournir un indice pour la résolution.

1

Qu'est-ce que vous retournerez en tant que valeurs de GetParams?

L'appel d'une fonction à partir d'une séquence attend une valeur entière et tout chiffre non nul retourné est évalué comme une erreur.

En tant que test, essayez de remplacer la valeur de retour des routines par les valeurs 0-4.

+0

Je renvoie une chaîne avec la valeur appropriée de GetParams. Disons que je veux récupérer la valeur d'un paramètre appelé HOME_PATH; GetParams est supposé renvoyer '/ projects/EDLANA', et il retourne réellement une telle valeur. J'ai ajouté un 'exit 0' au script shell et la routine montre que la valeur de retour capturée dans SystemReturnCode est 0. –