L'automatisation des tâches analytiques via l'API REST de SAS© Viya™ est une pratique courante pour intégrer la puissance de SAS© dans des pipelines externes. Cependant, une erreur fréquente survient lors de l'utilisation de l'action runCode pour manipuler des tables situées dans des bibliothèques CAS (Caslibs) dont le nom dépasse la limite historique de 8 caractères.
Cet article détaille l'origine de cette limitation et présente la syntaxe correcte pour contourner le problème sans avoir à renommer vos bibliothèques.
Lorsque vous soumettez du code Data Step via une requête HTTP POST vers l'endpoint runCode de CAS, vous pourriez être tenté d'utiliser la syntaxe classique à deux niveaux (Libref.Table).
Si votre nom de bibliothèque (Caslib) est long, par exemple mycaslibdatasaviya (qui dépasse largement 8 caractères), vous rencontrerez l'erreur suivante si vous tentez d'utiliser une référence explicite :
Pourquoi cette erreur ?
Dans l'environnement SAS© classique, les références de bibliothèques (librefs) sont strictement limitées à 8 caractères. Bien que SAS© Viya™ et CAS supportent des noms de Caslibs beaucoup plus longs, l'interpréteur Data Step invoqué par runCode conserve certaines contraintes syntaxiques héritées lorsqu'on utilise la notation Bibliothèque.Table.
De plus, tenter de définir une LIBNAME à l'intérieur de l'appel runCode (ex: libname myref cas caslib=mycaslibdatasaviya ...) échouera souvent avec une erreur indiquant que l'instruction n'est pas valide ou mal placée, car LIBNAME est une instruction globale qui ne peut pas être exécutée dans le contexte restreint de l'action runCode.
La documentation et les messages d'erreur suggèrent d'utiliser "l'option de data set CASLIB=". Concrètement, cela signifie qu'au lieu de préfixer le nom de la table par le nom de la bibliothèque, vous devez spécifier la bibliothèque comme une option entre parenthèses juste après le nom de la table.
Cette méthode permet de s'affranchir totalement de la limite des 8 caractères et fonctionne pour tous les noms de Caslibs, quelle que soit leur longueur.
Syntaxe incorrecte (provoque l'erreur)
Dans cet exemple, l'utilisation du point (.) pour séparer la bibliothèque de la table provoque l'échec car mycaslibdatasaviya est trop long pour être interprété comme une libref classique.
Syntaxe correcte (La solution)
Pour corriger le tir, retirez le nom long du préfixe et placez-le explicitement dans l'option caslib=.
Voici à quoi ressemble le corps JSON final de votre requête API avec la correction appliquée. Notez que nous n'avons plus besoin de créer de références temporaires.
Résumé
N'utilisez pas la notation LongCaslibName.TableName dans l'action runCode.
N'essayez pas d'exécuter une instruction LIBNAME à l'intérieur d'un runCode.
Utilisez l'option (caslib='NomDeVotreCaslib') directement après le nom de la table.
Cette approche est plus robuste, standardisée, et vous évite les casse-têtes liés aux limites de caractères héritées.