Erreur du générateur de flux de travail pour l'action personnalisée (Erreur : Envoyer attend un objet inscriptible)J'ai ajouté le JSL ci-dessous en tant qu'action personnalisée dans le générateur de flux de travail.
L'erreur s'est produite au niveau de la boucle For (Erreur : Envoyer attend un objet inscriptible).
Lors de l'exécution de ce script dans la fenêtre de script, il fonctionne correctement pour renommer l'en-tête des colonnes contenant "%, ".
Une idée sur la façon de résoudre ce problème pour rendre le flux de travail plus fluide? sinon, vous devez vous arrêter à cette étape pour exécuter le script de changement de nom de colonne en dehors de WorkFlow Builder.
dt = Current Data Table();
searchWords = "%, ";
columnName = dt << Get Column Names;
N = N Items( columnName );
For(j=1, j<= N, j++,
x = contains(columnName[j], searchWords);
name = Substr(columnName[j] << Get Name(), x+3);
If(x > 0,
columnName[j] << Set Name(Left(name, Length(name)-1));
);
);
Automatisation et scriptRe : Erreur du générateur de flux de travail pour l'action personnalisée (Erreur : Envoyer attend un objet inscriptible)Vous pourriez demander Obtenir les noms de colonne avec l'option "Chaîne".
Ensuite, vous n'avez pas besoin de redemander le nom de la colonne :
dt = Current Data Table();
searchWords = "%, ";
columnName = dt << Get Column Names("String");
N = N Items( columnName );
For(j=1, j<= N, j++,
x = contains(columnName[j], searchWords);
If(x > 0,
name = Substr(columnName[j], x+3);
Column(columnName[j]) << Set Name(Left(name, Length(name)-1));
);
);Re : Erreur du générateur de flux de travail pour l'action personnalisée (Erreur : Envoyer attend un objet inscriptible)PS : n'utilisez pas les noms de variables de cette liste :
{ nom , âge, sexe, taille, poids}

Re : Erreur du générateur de flux de travail pour l'action personnalisée (Erreur : Envoyer attend un objet inscriptible)Question complémentaire (légèrement liée):
Pourquoi appeler une entrée de liste modifier l'entrée de la liste ?
Exécution de la première partie de
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
searchWords = "%, ";
:sex << set name ("test%, SEX#");
columnName = dt << Get Column Names;
show(columnName);
columnName[1] << Get Name();
columnName[2] << Get Name();
columnName[3] << Get Name();
columnName[4] << Get Name();
columnName[5] << Get Name();
show(columnName);
N = N Items( columnName );
For(j=1, j<= N, j++,
x = contains(columnName[j], searchWords);
myName = Substr(columnName[j] << Get Name(), x+3);
If(x > 0,
columnName[j] << Set Name(Left(myName, Length(myName)-1));
);
);ajoute deux-points devant les noms de colonnes :

puis le pour la boucle fonctionne comme prévu *) 
*) hm un peu surprenant que cela fonctionne - esp.
contains(columnName[j], searchWords);
Re : Erreur du générateur de flux de travail pour l'action personnalisée (Erreur : Envoyer attend un objet inscriptible)salut hogi
Merci pour le conseil.
J'ai ajouté votre code dans l'étape Workflow Builder. Il a été exécuté sans code d'erreur, mais rien n'a changé dans la table de données.
A noté que nos deux codes (avec et sans "chaîne") fonctionnent correctement lors de l'exécution avec la fenêtre de script, mais d'une manière ou d'une autre, cela ne fonctionne pas dans le WorkFlow Builder.
Je comprends que nous devons utiliser ceci à la place.
Column(dt, columnName[j])
Voici le code qui fonctionne avec Workflow Builder.
searchWords = ", ";
columnName = dt << Get Column Names("String");
N = N Items( columnName );
For(j=1, j<= N, j++,
x = contains(columnName[j], searchWords);
colName = Substr(columnName[j], x+length(searchWords));
If(x > 0,
Column(dt, columnName[j]) << Set Name(Left(colName, Length(colName)-1));
);
);
Re : Erreur du générateur de flux de travail pour l'action personnalisée (Erreur : Envoyer attend un objet inscriptible)salut hogi
Merci pour le conseil.
J'ai ajouté votre code à l'étape Workflow Builder. Il a été exécuté sans code d'erreur, mais rien n'a changé dans la table de données.
A noté que nos deux codes (avec et sans "chaîne") fonctionnent correctement lors de l'exécution avec la fenêtre de script, mais d'une manière ou d'une autre, cela ne fonctionne pas dans le WorkFlow Builder.
Je comprends que nous devons utiliser ceci à la place.
Column(dt, columnName[j])
Voici le code qui fonctionne avec Workflow Builder.
searchWords = ", ";
columnName = dt << Get Column Names("String");
N = N Items( columnName );
For(j=1, j<= N, j++,
x = contains(columnName[j], searchWords);
colName = Substr(columnName[j], x+length(searchWords));
If(x > 0,
Column(dt, columnName[j]) << Set Name(Left(colName, Length(colName)-1));
);
);Re : Erreur du générateur de flux de travail pour l'action personnalisée (Erreur : Envoyer attend un objet inscriptible)Utiliser
dt << get column reference(cols);
pour obtenir des références de colonne stables.
je viens de le trouver dans Séance 6 : Tableaux de données des webinaires du JSL Scripters Club.
(hautement recommandé!!)
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
cols= dt << get column names();
colRefs = dt << get column reference(cols);
// {Column( "name" ), Column( "age" ), Column( "sex" ), Column( "height" ),Column( "weight" )}
// load another table
Open( "$SAMPLE_DATA/Big Class Families.jmp" );
//Column(cols[1]) << get name // doesn't work
colRefs[1] << get name; // still works