Bonjour,
Peut-on utiliser du SQL ou du C# dans le fichier xml (fldtype_xxx) d'un custom field ?
Merci pour vos réponses
Version imprimable
Bonjour,
Peut-on utiliser du SQL ou du C# dans le fichier xml (fldtype_xxx) d'un custom field ?
Merci pour vos réponses
Sans aucune certitude, je dirais non. Car le xml est utilisé comme source de données et ne sera donc pas "exécuté".
Si la question est peut-on mettre du C# ou du SQL pour le récupérer après et l'exécuter depuis un composant tiers, je dirais oui pour du SQL et peut-être pour du C#.
En fait l'idée c'est que mon custom field enregistre une valeur telle un ID d'une table SQL et affiche le nom correspondant dans l'affichage de la liste.
Je ne pense pas que ce soit possible de faire ca directement. A mon avis il faudra passer par un dev spécifique pour l'affichage de la liste.
Je suppose que tu ne peux pas stocker directement le nom dans ton customfield ?
Ben pour l'instant j'ai le nom et l'id qui s'affichent dans mon custom field dans l'affichage de liste mais on m'a fait la remarque comme quoi il serait bien de n'enregistrer que l'id et d'afficher le nom en fonction de cet id dans la liste.
Salut,
ta question m'a intéressé et j'y ai réfléchi et j'ai fini par développer un petit truc. Bon je ne suis pas sur que cela fasse partie des "best practice" mais cela fonctionne. L'idée est de continuer à stocker l'id et la valeur mais sous forme "id#;valeur". Ensuite, ton RenderPattern aurait cette allure :
J'explique un peu. L'idée c'est de créer un div avec comme ID un guid (car on va s'en resservir après). Étant donné qu'on se servir du GUID à deux endroits, il faut que ce soit deux fois le même, donc j'utilise SetVar pour stocker la valeur de ce GUID dans la variable nommée... GUID. Ui c'est bien trouvé. J'utilise également GetVar pour récupérer la valeur.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 <RenderPattern Name="DisplayPattern"> <SetVar Name="GUID"> <GUID /> </SetVar> <HTML> <![CDATA[<div id="]]> </HTML> <GetVar Name="GUID" /> <HTML> <![CDATA["></div>]]> </HTML> <HTML> <![CDATA[ <script language="Javascript" type="text/javascript"> var value = "]]> </HTML> <Column HTMLEncode="TRUE" /> <HTML> <![CDATA["; document.getElementById("]]> </HTML> <GetVar Name="GUID" /> <HTML> <![CDATA[").innerHTML = value.substr(value.indexOf("#;") + 2);; </script>]]> </HTML> </RenderPattern>
Une fois le div créé et le GUID stocké, on appelle une p'tite fonction JavaScript qui fait simplement un substring sur la valeur de la colonne et qui ne récupère que ce qui suit le #;.
C'est p'tet pas la meilleure solution, mais elle m'a quand même pas l'air trop moche ;-)
ça peut être utile mais le problème c'est que si le nom change (pour x raisons) il ne va pas le changer dans l'affichage de ma liste tant que j'aurais pas été dans l'élément pour le modifier.
Salut,
effectivement c'est un problème... Si tu veux que cela se fasse je pense que c'est carrément de l'AJAX que tu devras implémenter dans ton javascript. Et ce code AJAX irait vérifier la valeur de la donnée et modifierait celle de ta colonne en conséquence mais ça deviendrait vite lourd...
Ben c'est une demande qui m'a été faite mais j'ai tout de suite pensé que ça serait lourd vu que pour chaque ligne il faut contacter le serveur sql pour vérifier la valeur.
Ué c'est effectivement la contrainte que je voyais... Une autre idée serait de créer un Job qui serait charger de mettre à jour la valeur dans la liste toutes les X heures ou autres. Le résultat ne sera pas forcément en temps réel mais bon. Je suis pas sur que faire une requête SQL par item d'une liste soit forcément une bonne idée...
Non c'est clair je vais voir.
Mais le problème c'est qu'en fait je veux stocker mon id et afficher le nom donc un job n'ira pas.
Merci en tout cas.
Ca ne change rien ça. Dans ton job, tu t'arranges pour qu'il browse toute ta liste, et fasse les mises à jour. Les données peuvent très bien être sauvegardées sous forme de ID#;Valeur et là, dans le render pattern de ton custom field, tu utilises celui que j'ai codé quelques posts plus haut, il fonctionne je l'ai testé.
C'est simple de résoudre ce type de problème.
Dans la classe contrôle de votre Custum field au lieu de mettre
if (ControlMode == Microsoft.SharePoint.WebControls.SPControlMode.Display)
{
return;
}
Fait une modification pour votre champs (ce n'est pas une vraie modification)
Juste affectation de la même valeur.
Es-tu sur que ce code sera appelé lors de l'affichage de la liste ?
Ce code est appelé lors de l'affichage d'un élément et non pas d'une liste.
Pour l'affichage de la liste il faut que tu fait un appel à une autre page avec Httprequest dans ton ficher XML(c'est la seule solution que j'ai trouvé); et dans cette page tu fait l'affectation ou la modification de la liste par code.
C'est vrai c'est vraiment chiant mais j'ai passé beaucoup de temps de chercher une solution meilleur et en vain.
:(
Ah il me semblait bien, je croyais que tu amenais une solution nouvelle, en fait tu me répète en d'autres mots :-p Le soucis était surtout l'affichage de la liste ^^
Oui c'est ça pour l'affichage de la liste j'ai fait un appel à l'aide de HTTPRequest à une autre page juste pour faire la modification!