Problème de création de liens spécifiques à l'utilisateur dans une table jmpProblème : j'ai un fichier jmp qui se trouve dans un dossier OneDrive partagé. D'autres collègues synchronisent ce dossier OneDrive sur leur bureau afin que nous ayons tous un accès facile au fichier jmp partagé. À l'intérieur du fichier jmp se trouvent des liens vers d'autres fichiers qui se trouvent dans le même dossier partagé que le fichier jmp. Étant donné que chaque personne dispose d'un chemin de fichier OneDrive spécifique à l'utilisateur, mes liens sont en fait des formules qui détectent le chemin de fichier spécifique à l'utilisateur pour ensuite définir le lien approprié spécifique à l'utilisateur. Malheureusement, ces formules ne sont pas automatiquement réexécutées lorsqu'une nouvelle personne ouvre le fichier jmp. J'ai exploré deux options pour résoudre ce problème et je ne suis fan d'aucune des deux :
1. avoir un script 'réexécuter les formules' que vous devez exécuter avant d'utiliser un lien : malheureusement, les gens oublient ce script. De plus, les utilisateurs créent généralement des sous-ensembles de données, puis tentent d'exécuter le script « Réexécuter les formules », mais cela ne fonctionne pas car les évaluations de formules sont supprimées par défaut.
2. enregistrez un script de « réexécution des formules » sous « OnOpen » afin qu'il s'exécute dès que quelqu'un ouvre la table jmp : malheureusement, cela entraîne l'apparition d'une invite (ci-jointe) et les gens ont trop peur pour dire « oui » lorsqu'elle s'ouvre car ils ont peur que ça gâche quelque chose (ils ne savent même pas à quoi ça sert)
Des questions
1. Existe-t-il un moyen de mettre à jour un lien hypertexte dès que l'on clique dessus ?
2. Puis-je supprimer la fenêtre contextuelle « OnOpen » ou la modifier pour expliquer ce que l'utilisateur doit faire ?
3. Existe-t-il un autre moyen qu'un script « OnOpen » qui permettrait aux formules de se mettre à jour dès qu'une table jmp est ouverte ?
Toute aide est appréciée. Merci!
Mat
Re : Problème de création de liens spécifiques à l'utilisateur dans une table jmpSalut @Matt_Converse . Bonne question. Je pense que votre meilleure option serait de généraliser les chemins dans le fichier partagé de telle sorte qu'ils soient construits au moment de l'exécution. Ne connaissant pas les détails de ce fichier, il serait impossible de donner des détails, mais cela pourrait très bien impliquer une manipulation d'expressions. Quant à vos trois autres options :
- Les hyperliens sont généralement codés en dur. Il faudrait que j'en sache plus sur comment et où vous les utilisez.
- Oui. Le problème est que vous devrez modifier les préférences utilisateur des utilisateurs avant l'exécution d'OnOpen.
- Pas à ma connaissance
Re : Problème de création de liens spécifiques à l'utilisateur dans une table jmpHé @DonMcCormack !
Merci pour la réponse rapide. Je suis heureux d'ajouter plus de détails. Voici un exemple de la façon dont les liens (c'est-à-dire les chemins vers les fichiers/dossiers) varient :
- mon chemin de fichier vers un dossier d'images SEM : C:\Users\ mconvers \OneDrive - WL Gore & Associates, Inc\Exemple de base de données partagée\Bibliothèque SEM\4391
- le chemin du fichier de mes collègues vers le même dossier : C:\Users\ mjohnson \OneDrive - WL Gore & Associates, Inc\Exemple de base de données partagée\Bibliothèque SEM\4391
Dans le tableau d'exemple ("Table1.jmp", ci-joint), vous verrez comment j'utilise une formule dans la colonne "Chemin du dossier SEM" pour déterminer un chemin de dossier spécifique à l'utilisateur. Il lit essentiellement le chemin du fichier de la table principale ("Table1.jmp") pour obtenir le répertoire spécifique à l'utilisateur, puis ajoute "Bibliothèque SEM..."
dt_name = "Table1" ;
dt = Table de données (nom_dt);
path_full = dt << Obtenir le chemin ();
nom_fichier = dt_name || ".jmp" ;
n = Munger( chemin_complet, 1, nom_fichier );
path_folder = Substr( path_full, 1, n - 1 );
chemin = dossier_chemin || "Bibliothèque SEM" || "\" || Char( :Numéro de base de données);
J'utilise ensuite un gestionnaire d'événements pour définir le lien hypertexte (colonne "SEM Folder Link"). J'ai joint un dossier zippé complet au cas où cela vous aiderait également à avoir une idée de la structure globale du fichier.
J'aimerais en savoir plus sur la façon dont je pourrais " généraliser les chemins dans le fichier partagé de telle sorte qu'ils soient construits au moment de l'exécution". Merci!
Mat
Re : Problème de création de liens spécifiques à l'utilisateur dans une table jmpVous pouvez utiliser la variable système Windows %OneDrive% pour obtenir le chemin de l'utilisateur vers le dossier du lecteur de base ;
utilisez Obtenir la variable d'environnement( "ONEDRIVE" ); pour l'appeler et l'utiliser dans l'URL.
Re : Problème de création de liens spécifiques à l'utilisateur dans une table jmpQue diriez-vous de quelque chose comme celui ci-joint ? J'ai raccourci le chemin du dossier pour contenir la partie commune à tous les utilisateurs et modifié le gestionnaire d'événements pour créer la partie restante (c'est-à-dire la partie unique) du chemin.
Re : Problème de création de liens spécifiques à l'utilisateur dans une table jmpVous pouvez également utiliser la variable d'environnement Get( "ONEDRIVE" ); dans le gestionnaire d'événements... car vous ne voulez pas qu'il s'exécute pour chaque ligne, juste au moment où cela est nécessaire 
De plus, cela ne fonctionne probablement pas pour les machines Mac et Linux à moins que la variable système OneDrive ne soit configurée...
Si le fichier JMP ne doit se trouver qu'à un seul endroit sur le réseau (par exemple dans le dossier "Exemple de base de données partagée"), vous pouvez également utiliser une URL formatée comme un chemin relatif.
c'est-à-dire chemin = "..\Bibliothèque SEM\" || Char( :Numéro de base de données);
Cela devrait même fonctionner sur Mac... mais le fichier jmp doit être dans le dossier directement depuis "Bibliothèque SEM".
Re : Problème de création de liens spécifiques à l'utilisateur dans une table jmpdoh... le chemin relatif serait un seul point pour le dossier actuel....
chemin = ".\Bibliothèque SEM\" || Char( :Numéro de base de données);
Re : Problème de création de liens spécifiques à l'utilisateur dans une table jmp@DonMcCormack , ça a très bien fonctionné ! (J'ai juste dû changer une barre oblique en une barre oblique inverse)
Je pense que votre script modifié répond à la première partie de mon problème, c'est-à-dire que les liens sont créés au moment de l'exécution. Cependant, le deuxième défi auquel mes utilisateurs sont généralement confrontés est qu'ils créent des sous-ensembles de ce tableau et espèrent ensuite suivre des liens. Malheureusement, les sous-ensembles ne sont pas enregistrés et n'ont donc pas de chemin de fichier à lire. Des suggestions ici ?
je pourrais utiliser @DByss La suggestion d'obtenir l'environnement spécifique à onedrive de l'utilisateur, mais il existe une structure de chemin de fichier entre cela et "Table1" que j'ai vu certains utilisateurs changer (donc même cela peut ne pas être cohérent d'un utilisateur à l'autre).
Merci pour votre aide!
Mat
Re : Problème de création de liens spécifiques à l'utilisateur dans une table jmpVoici une idée. Enregistrez les colonnes nécessaires pour accéder aux listes de répertoires. Ajoutez une colonne ID (numérotée séquentiellement de 1 à N lignes) comme première colonne. Remplacez le script du gestionnaire d'événements par ceci
Function( {thisTable, thisColumn, iRow},{rowID},
If(!Namespace Exists("myCustomFunctionNamespace"),
New Namespace("myCustomFunctionNamespace");
myCustomFunctionNamespace:thisPath = Substr(thisTable << Get Path,1,Contains(thisTable << Get Path,"/",-1));
myCustomFunctionNamespace:semFolderPath = Column(thisTable,"SEM Folder Path << Get Values");
);
rowID = Column(thisTable,1);
Open(Char(myCustomFunctionNamespace:thisPath || "/" || myCustomFunctionNamespace:semFolderPath[ rowID] ));
);
Les valeurs des colonnes sont chargées dans des listes et toutes les opérations sont basées sur ces valeurs plutôt que sur quelque chose qui doit être recherché dans une table (à l'exception de la valeur ID, qui fait référence au numéro de ligne de la table d'origine).
Re : Problème de création de liens spécifiques à l'utilisateur dans une table jmpMerci, @DonMcCormack ! J'ai ajouté une colonne ID et remplacé le gestionnaire d'événements ; cependant, j'obtiens cette erreur en cliquant sur le lien dans la ligne 1 : « Problème d'indice à la ligne 1 lors de l'accès ou de l'évaluation de 'myCustomFunctionNamespace:semFolderPath[ /*###*/rowID]' ». Comprenez-vous à quoi fait référence le "/*###*/" ? Je sais que nous sommes proches car je peux faire exécuter le script en dehors d'une fonction (voir mon script enregistré). Notez que je teste simplement le lien avant de créer un sous-ensemble (je ne l'ai pas encore essayé avec un sous-ensemble).
J'apprécie vraiment votre aide.
Mat
Re : Problème de création de liens spécifiques à l'utilisateur dans une table jmpDésolé pour ça @Matt_Converse . L'avant-dernière ligne de code doit être
rowID = Column(thisTable,1)[iRow]
Vous souhaitez référencer la valeur de la première colonne de la ligne sélectionnée (du sous-ensemble). D'après moi, il faisait référence à la colonne entière.
Re : Problème de création de liens spécifiques à l'utilisateur dans une table jmp@DonMcCormack , j'aurais dû comprendre ça ! Merci! Cela fonctionne également pour les sous-ensembles ! Je vais devoir commencer à utiliser les gestionnaires d'événements plus souvent ! J'apprécie vraiment l'aide.