none
Developpement d'une webpart : organigramme RRS feed

  • Question

  •  

    Voila je creer un topic spécifique à ma tâche, qui consiste a développé une webpart relatant l'organigramme de la société.

    Je dispose de visual Studio 2005 et je vais probablement travailler sur une machine virtuelle,

     

    je débute totalement et pour le moment j'ai procedé comme cela :

     

    nouveau projet ---> C# ----> Webpart.

     

    Une fois cela fait j'ai eu un fichier cs, où il y aura le developpement C#

    et un fichier .webpart qui a la structure d'un fichier XML.

     

    Avant que je n'installe le pluggin Sharepoint pour visual Studio, j'avais des outils, là quand je creer un projet web part, je n'ai plus d'outil j'ai le message " il n'existe aucun contrôle utilisable dans ce groupe". est-ce normal?

     

    Dans mon fichier .cs, j'ai par default , l'utilisation de "librairie sharepoint" :

    Code Snippet

    using Microsoft.SharePoint;

    using Microsoft.SharePoint.WebControls;

    using Microsoft.SharePoint.WebPartPages;

     

     

    j'ai une classe qui contient 2 methode ( une fonction et une procédure) :

     

    Code Snippet

    {

    public devWebPartlivre()

    {

    this.ExportMode = WebPartExportMode.All;

    }

    protected override void CreateChildControls()

    {

    base.CreateChildControls();

    // TODO: add custom rendering code here.

    // Label label = new Label();

    // label.Text = "Hello World";

    // this.Controls.Add(label);

    }

    }

     

     

    Et voila en gros où j'en suis lol, je recherche de la documentation mais je me demande :

     

    - une webpart, c'est une seule classe?ou bien une webpart peut être composé de plusieur fichier .cs ?

    - j'ai pas bien compris ce bout de code :

     

    Code Snippet

    namespace devWebPartlivre

    {

    [Guid("cd8c628f-cdf3-4019-8bd3-0a5baf2d0074")]

     

     

    - est-ce que je dois penser comme si je developpais une application indépendante de WSS? j'entend par la, est-ce je peux me lancer à developper dans mon fichier  .cs :

     

    - une connection à la bdd ORACLE,

    - une Jframe,avec un Jpanel et j'y met mes éléments, à ces éléments j'y associe des actions( comme les requêtes à la bdd et leur traitement )

     

    voila , en gros comment je raisonne actuellement mais je ne suis pas sûr de bien raisonner, Tongue Tied

    lundi 28 janvier 2008 08:11

Réponses

  • Bonjour,

     

    pour ton message lors de la création du projet, il est possible qu'il y ait une différence de langue entre Visual Studio et les extensions que tu as installé, voir une différence de langue avec ton OS. Si c'est le cas, vas dans les options de Visual Studio, et modifie la langue (Paramètres internationaux).

     

    Pour tes reflexes Java avec les JPanel et les JFrame, il y a un peu de ça. La méthode CreateChildControls te permet d'ajouter... des contrôles enfant :-). Bref, dans cette méthode tu peux faire quelque chose comme :

     

    Panel myPanel = new Panel();

    myPanel.Width = 250;

    this.Controls.Add(myPanel );

     

    C'est relativement simple. Tu trouveras la liste des contrôles ici : http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.aspx

     

    Tu as également une autre solution. Créé une méthode comme suit :

     

    protected override void ...

     

    Tu verras Visual Studio te proposer une liste de méthode, dont la méthode Render. Sélectionne là. Elle reçoit un paramètre en entrée te permettant d'écrire dans le flux de sortie HTML. En gros, tu pourras l'utiliser pour écrire directement le code HTML qui t'intéresse. Un exemple :

     

    output.Write("\t");

    output.Write("<tr class=\"");

    output.Write(this.rowCssClass);

    output.Write("\">");

    output.Write("\n");

     

    Enfin, tu peux également utiliser la méthode Render pour faire appel aux méthode de transformation XSL .Net. Si cette solution t'interesse, regarde le namespace System.Xml.Xsl et la méthode XslTransform().

     

    Ces méthodes te permettent de faire appel à n'importe quel autre code ou méthode. Tu peux donc très bien créer une xonnexion à une base de données comme Oracle. Tu trouveras les infos nécessaires ici : http://msdn2.microsoft.com/en-us/library/system.data.oracleclient.aspx

     

    Attention, dans ce cas là certaines options seront à modifier dans le fichier de configuration de SharePoint (pour permettre la connexion à la base de donnée) : il te faudra abaisser le niveau de sécurité. Je te donne un exemple de ce qu'il faut faire pour que ça fonctionne, mais je t'invite à chercher d'avantages pour voir si cette solution est vraiment celle qui te convient.

     

    Ouvre le fichier web.config de ton application (probablement le répertoire C:\Inetpub\wwwroot\wss\VirtualDirectories\80 ou un autre numéro de port) et repère la ligne suivante : <trust level="WSS_Minimal" originUrl="" />. Remplace la valeur "WSS_Minimal" par "WSS_Medium". Sauvegarde et quitte le fichier de configuration.

     

    Voilà,

    Bons devs.

    lundi 28 janvier 2008 09:48
    Modérateur
  •  

    Une solution "propre" serait de permettre une navigation dans l'organigramme sans faire de retour serveur (pas de rafraichissement à l'écran). Pour celà, il te faut du script côté client. Si tu ne veux pas en ajouter, tu auras juste un postback (retour serveur). Ce n'est pas bien grave. Encore une fois, l'essentiel c'est que tu ailles au bout de ton projet... alors mieux vaut ne pas perdre de temps avec ça. Et pour faire propre, toujours, ma WebPart ferait une transformation XSL... dans un monde idéal. Mais je ne veux pas te faire perdre du temps, alors la situation la plus simple pour toi sera déjà pas mal (quitte à la reprendre plus tard pour l'améliorer si il y en a vraiment besoin).

     

     

    lundi 28 janvier 2008 14:38
    Modérateur
  • ###################

    Je comprend pas pourquoi j'ai besoin de savoir sur quel noeud ( service ou gd service) j'ai cliqué, j'ai juste besoin de savoir sur quel service j'ai cliqué .

    ###################

     

    On parle de la même chose :-)

    Avec ta solution, il te faudra réagir sur l'évenement Click de ton Panel et lire ses propriétés pour aller te connecter à ta base de données... et reconstruire ton arbre. C'est jouable... mais ne perds pas trop de temps sur cette dernière partie.

    mardi 29 janvier 2008 10:06
    Modérateur
  • Arrête de mettre des 'J' devant le nom de tes composants . Ce n'est pas du Java .

     

    Je ne peux pas répondre à ta question... mais à elle seule elle montre bien à quel point tu risques de perdre du temps sur la méthode de rendu de ta WebPart. Je t'assure, fais simple. Prends le temps de regarder les contrôles que tu peux utiliser, et parts sur la solution la plus simple... il sera toujours temps d'améliorer le rendu à la fin de ton stage.

     

    Je serai toi, j'aurai vraiment tendance à aller chercher toutes mes données d'un coup dans la base de données... pourquoi pas en reccupérant tes données dans un DataSet (System.Data.DataSet) ? Un simple DataAdapter, tu lui donnes ta requête et tu rempli le dataset avec. Le DataSet te permet de reccupérer les données sous format XML... donc tu n'as qu'à faire une transformation XSL pour afficher ton contrôle.

     

    La transformation XSL peut se contenter d'afficher du texte dans un premier temps... au moins ta WebPart fonctionnera et tu n'auras plus qu'à régler ton soucis d'affichage.

     

    C'est la méthode la plus simple, la moins risquée, la plus user friendly (parce que tu devras passer par du javascript pour afficher et masquer les services... donc pas de retour serveur)... d'autant que tu n'as pas un gros volume de données à remonter.

     

    Maintenant, tu peux aussi partir avec des controls... mais soit conscient que le risque de ne pas finir dans les temps est plus important.

    mardi 29 janvier 2008 10:49
    Modérateur
  • Tu ne peux pas utiliser le TreeView que tu as trouvé. Si tu regardes bien la page, le namespace auquel le treeview appartient est System.Windows.Forms.TreeView. Celà signifie qu'il est fait pour des applications client riche et non pour le web. Les composants utilisables sur le Web appartiennent généralement au namespace System.Web.UI.WebControls. Et à ma connaissance il n'y a pas de TreeView dans ce namespace. La liste complète des contrôles de ce namespace est sur la page dont je t'avais donné le lien (http://msdn2.microsoft.com/fr-fr/library/system.web.ui.webcontrols(VS.80).aspx).

     

    Pour le déploiement de la WebPart, c'est effectivement très simple avec le template de projet WebPart de Visual Studio. Prévoit tout de même du temps pour le déploiement, car ce n'est pas aussi simple lorsque tu dois procéder sans Visual Studio, lorsque tu veux déployer ta WebPart sur un serveur qui n'a pas VS par exemple.

    mardi 29 janvier 2008 23:17
    Modérateur
  • Malheuresement tu as raison...  Je t'ai bel et bien embrouillé en te disant qu'il n'y a pas de TreeView dans ce namespace. C'est d'autant moins pardonable que le menu de gauche dans les sites WSS est basé sur ce contrôle... bref, aucun problème, ce contrôle te permettra de réaliser un rendu rapide de ton organigramme.

     

    Sert toi bien des exemples de cette page MSDN. C'est presque exactement (j'aime beaucoup cette expression) ce que tu cherches à faire. Si besoin, suit les liens How to indiqués sur cette même page.

     

    Tout ceci devrait te permettre d'avancer assez vite. Bon courage pour la suite des devs.

     

    mercredi 30 janvier 2008 08:31
    Modérateur
  • Tu n'as pas à écrire d'autre classe que la WebPart. SharePoint a déjà tout ce qu'il lui faut pour utiliser le TreeView... pas besoin déployer autre chose.

     

    Au sein de ta WebPart, dans la méthode CreateChidControls(), tu as juste à écrire cette ligne :

     

    System.Web.UI.WebControls.TreeView myTreeView = new System.Web.UI.WebControls.TreeView();

     

    Ca suffit à créer ton TreeView. Bien sûr, il est vide et il n'est pas encore rattaché à ta WebPart... pour l'ajouter il te faudra écrire (toujours dans la méthode CreateChildControls()) :

     

    this.Controls.Add(myTreeView);

     

    Je te renvoi à l'exemple du MSDN pour lui ajouter des noeuds (des services et des personnes pour toi donc).
    mercredi 30 janvier 2008 12:46
    Modérateur
  • Je ne connais pas bien ce control, mais à priori la méthode NavigateUrl te permet de changer de page... et ce n'est pas ce que tu cherches à faire.

     

    A priori, chaque node de ton treeview devrait lever un évenement lors d'un clic. A toi de réagir sur cet évenement, de faire ta requête ORACLE pour aller chercher les personnes composant le service associé au noeud, puis d'ajouter des noeuds de personne au noeud SERVICE.

     

    Je ne sais pas si cette méthode est la plus simple à coder pour un début. Dans un premier temps, pourquoi ne créerais tu pas ton arbre complètement. Tu pourrais jouer sur la propriété Expanded des noeuds pour indiquer que seuls les services sont affichés. L'utilisateur pourrait manuellement déplier ton arbre pour afficher les personnes. C'est à mon avis le scénario le plus simple. Il te restera à l'améliorer si besoin.

     

    Petite astuce cependant : ta question n'ayant plus de lien avec SharePoint mais avec ASP.Net 2.0, tu trouveras peut être des réponses plus pertinentes que les miennes sur le forum MSDN consacré aux développements Web.

     

    mercredi 30 janvier 2008 14:05
    Modérateur
  • Salut,

     

    Voici un exemple de code classique et basique qui te permet de récupérer toutes des données de ta base de données Oracle dans un dataset.

    Code Snippet

    private DataSet GetEmployees(){

    string connectionString = "Provider = msdaora; Data Source = MyOracleDB; User Id = myUsername; Password = myPassword";

    string selectCommand = "select * from maTable";

    DataSet Employees = new DataSet();

    using (OracleConnection conn = new OracleConnection(connectionString)) {

    using(OracleCommand command = new OracleCommand(selectCommand)){

    OracleDataAdapter dataAdapter = new OracleDataAdapter(selectCommand);

    dataAdapter.Fill(Employees);}

    }

    return Employees;}

     

     

    Si jamais tu as des soucis au niveau de ta chaine de connexion, tu peux regarder ici > http://www.connectionstrings.com/?carrier=oracle

     

    Cependant, comme le précisait Sébastien, tu trouveras plus d'infos sur le forums dédié à asp.net ou meme ado.net

    jeudi 31 janvier 2008 13:49
  • Ah oui, il te faut importer des dll et ajouter des namespaces.

    dans visual studio, tu vas dans ton menu affichage et tu choisis explorateur de solution. ensuite dans ton explorateur de solution, tu vas dans ton dossier références, clic droit, puis ajouter une nouvelle, dans l'onglet .net, il faut ajouter system.data.dll et system.data.oracleclient.dll.

    Puis dans le fichier de code, au niveau des directives using, il faut ajouter

    Code Snippet

    using System.Data;

    using System.Data.OracleClient;

    using System.Web;

    using System.Web.UI.WebControls;

     

     

    ca devrait mieux fonctionner.
    jeudi 31 janvier 2008 14:58
  • Ok, tu obtiens ce qui me semble être le plus simple. La méthode Fill rempli ton dataset avec les données retournées par la requête. Ton dataset est sous forme XML. Si tu veux regarder ce qu'il y a dedans, tu peux débugger ta WebPart. regarde le contenu de ton dataset après l'appel à la méthode Fill... tu devrais trouver tes données.

     

    Ton dataset contient une liste de DataTables (probablement une seule). Une dataTable contient des DataRows (une DataRow par ligne retournée par ta requête). A toi de parcourir ensuite les DataColumn de chaque DataRow.

     

    lundi 4 février 2008 10:20
    Modérateur
  • Pour le mode debug, il te faut poser un point d'arrêt. Clic sur la marge de gauche à côté de ton code pour faire apparaitre un point rouge. Tu rentreras en mode pas à pas lorsque la ligne pointée par le rond rouge sera sur le point d'être exécutée.

     

    pour la lecture de ton dataSet :

     

    Code Snippet

    string valeur = null;

     

    foreach (DataRow dr in ds.Tables[0].Rows)
    {

    valeur  = dr["nom_colonne"];

    }

     

     

    lundi 4 février 2008 10:48
    Modérateur
  • Pour rentrer en mode debut tu as besoin de t'assurer de deux autres choses :

     

    - que ta WebPart soit placée sur la page que tu rafraichis .

    - que le code dans lequel tu as placé le point d'arrêt est bien appelé.

     

    Il te faut donc appeler la méthode SelectOracleSrvRows depuis ta méthode CreateChildControls() (c'est un mauvais exemple, mais ça fonctionnera bien comme ça dans un premier temps).

     

    lundi 4 février 2008 11:02
    Modérateur
  • Clic simplement sur la flêche verte en haut de Visual Studio pour lancer le mode debug. Une fois sur ton site SharePoint, place ta WebPart. Le code de ta WebPart ne peut pas s'éxécuter si ta WebPart n'est pas placée... c'est donc une condition indispensable.

     

    Une fois placée, ta webPart va executer la méthode CreateChildControls(). Autrement dit, si tu places un points d'arrêt sur la méthode CreateChildControls tu pourras voir l'état de tes variables à chaque ligne de code. L'idée c'est donc que ta méthode CreateChildControls appelle la méthode manipulant le dataset. Ainsi, tu pourras visualiser l'état et le contenu de ton Dataset lorsque tu seras en mode debug.

     

    lundi 4 février 2008 13:24
    Modérateur
  • Inséré dans le CreateChildControls, ce code devrait te permettre d'aller chercher les données dans ta base.

     

    Code Snippet

    DataSet ds = SelectOracleSrvRows(dataset, connection, query);

    foreach (DataRow dr in ds.Tables[0].Rows)

    {

    // Remplace "nom_colonne" par le nom d'une des colonnes de ta table ORACLE 

    valeur = dr["nom_colonne"] as string;

    this.Page.Response.Write(valeur);

    }

     

     

    Place un point d'arrêt sur la ligne DataSet ds = SelectOracleSrvRows(dataset, connection, query); Déploie ta WebPart avec le mode debug (comme expliqué juste avant). Normalement, Visual Studio devrait reprendre la main en pendant l'ouverture de la page. Cette ligne sera alors surlignée en jaune. Sert toi ensuite du bouton F11 pour avancer dans le programme. Tu pourras regarder le contenu de tes variables pendant l'execution simplement en les survolant à la souris.

    lundi 4 février 2008 14:35
    Modérateur
  • 1 - Vérifie si tu sais accéder à ta DB depuis le serveur ou tu développes ton webpart...

    2 - Si tu y a accès, vérifie les paramètres de ta connexion string...

    3 - Dans visual, dans tool, tu as un outils pour te connecter à un DB, c'est très utilie pcq'il créer lui mème la connexion stream que tu n'a plus qu'à recopier tel quel ;-)

    mardi 5 février 2008 12:40
  • Côté code il y a une chose qui ne va pas :

     

    tu appelles ta méthode SelectOracleSrvRow en fournissant 3 paramètres. A l'intérieur de cette méthode tu redéfinis ces paramètres... autrement dit, les paramètres que tu donne à la méthode ne seront jamais utilisé. Déjà, le paramètre DataSet n'est pas utilisé. Ensuite, la connexion et la query seront toujours ceux que tu as indiqué à l'intérieur de la méthode (query = "select count(nom) from intranet_employe"; connection = "Data Source=titan_ulisp;User ID=USER;Password=MDP;Unicode=True;"Wink

     

    Du coup (si tu veux garder tes paramètres en dur), ta méthode devrait être

     

    private DataSet SelectOracleSrvRows()

    {

       // ...

    }

     

    et ton appel : DataSet ds = SelectOracleSrvRows();

     

    Si la méthode s'éxécute sans erreur et que ton DataSet reste vide, c'est que ta requête Oracle ne retourne rien.

     

    mardi 5 février 2008 20:29
    Modérateur
  • Le compte qui fait tourner ton site WSS n'a visiblement pas les droits sur le répertoire ORACLE_HOME. Il faut juste que tu rajoutes les droits au bon compte sur ce répertoire.

     

    Plus d'infos ici : http://dotnetjunkies.com/WebLog/rtgurskevik/archive/2005/01/19/45958.aspx

     

    vendredi 8 février 2008 10:57
    Modérateur
  • Pourquoi as tu essayé de le déplacer ? Modifie juste les droits sur ce répertoire et redémarre ton serveur.

     

    vendredi 8 février 2008 13:06
    Modérateur
  • Tu te précipites un peu pour poser la question... tu as déjà la réponse sur une des pages MSDN dont on t'a parlé. 

     

    http://technet.microsoft.com/en-us/library/system.data.oracleclient.oracledataadapter.selectcommand(VS.80).aspx

     

    Il te suffit donc d'ajoute des Parameters à ton objet SelectCommand, et d'insérer un ":mon_parametre" dans ta requête.

     

    vendredi 8 février 2008 15:35
    Modérateur
  •  

    Bonjour,

     

    il est possible de connecter des WebParts entres elles (http://msdn2.microsoft.com/en-us/library/ms569191.aspx) mais je trouve celà un peu ambitieux compte tenu que tu débuts sur SharePoint et qu'il ne te reste qu'une semaine.

     

    Il peut en effet être plus simple pour toi d'avoir une seconde WebPart complètement décorellée de la première. Elle peut très bien aller reccupérer le nom de l'employé dans les paramètres de l'URL. Ta première WebPart n'aurait donc qu'à générer un lien permettant, lors d'un clic sur un employé, de relancer la page avec en paramètre ?EmployeeName=nom_employe.

     

    Ca te force à faire un refresh de la page, c'est certes un peu moins beau que la première solution, mais ça devrait être plus facile à réaliser / debugger.

    lundi 11 février 2008 12:29
    Modérateur
  •  

    Ok, je me suis peut être mal exprimé :

     

    ton clic doit déclencher une sorte de refresh de la page courant. Je dis une sorte de refresh, car l'URL doit être modifiée entre temps pour contenir le paramètre dont tu as besoin.

     

    Exemple :

     

    ta page est http://mon_serveur/mapage.aspx.

     

    Ta WebPart de tree est placée sur cette page. Lors d'un clic sur un employé, l'utilisateur est redirigé sur la page http://mon_serveur/mapage.aspx?employename=nom_employe

     

    Toujours sur cette page, une seconde WebPart est placée. Elle est chargée d'afficher le détail de l'employé. Elle commencerait par lire les paramètres de l'URL : HttpContext.Current.Request.Url.Query.Elle y trouvera employename=nom_employe. A toi de lancer ta requête à partir d'ici.

    lundi 11 février 2008 12:53
    Modérateur
  •  

    Je ne suis pas sûr de comprendre ton problème. La propriété NavigateUrl est propre à chaque noeud, donc rien ne t'empêche d'indiquer une valeur différente pour chaque service.
    lundi 11 février 2008 14:43
    Modérateur

Toutes les réponses

  • Bonjour,

     

    pour ton message lors de la création du projet, il est possible qu'il y ait une différence de langue entre Visual Studio et les extensions que tu as installé, voir une différence de langue avec ton OS. Si c'est le cas, vas dans les options de Visual Studio, et modifie la langue (Paramètres internationaux).

     

    Pour tes reflexes Java avec les JPanel et les JFrame, il y a un peu de ça. La méthode CreateChildControls te permet d'ajouter... des contrôles enfant :-). Bref, dans cette méthode tu peux faire quelque chose comme :

     

    Panel myPanel = new Panel();

    myPanel.Width = 250;

    this.Controls.Add(myPanel );

     

    C'est relativement simple. Tu trouveras la liste des contrôles ici : http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.aspx

     

    Tu as également une autre solution. Créé une méthode comme suit :

     

    protected override void ...

     

    Tu verras Visual Studio te proposer une liste de méthode, dont la méthode Render. Sélectionne là. Elle reçoit un paramètre en entrée te permettant d'écrire dans le flux de sortie HTML. En gros, tu pourras l'utiliser pour écrire directement le code HTML qui t'intéresse. Un exemple :

     

    output.Write("\t");

    output.Write("<tr class=\"");

    output.Write(this.rowCssClass);

    output.Write("\">");

    output.Write("\n");

     

    Enfin, tu peux également utiliser la méthode Render pour faire appel aux méthode de transformation XSL .Net. Si cette solution t'interesse, regarde le namespace System.Xml.Xsl et la méthode XslTransform().

     

    Ces méthodes te permettent de faire appel à n'importe quel autre code ou méthode. Tu peux donc très bien créer une xonnexion à une base de données comme Oracle. Tu trouveras les infos nécessaires ici : http://msdn2.microsoft.com/en-us/library/system.data.oracleclient.aspx

     

    Attention, dans ce cas là certaines options seront à modifier dans le fichier de configuration de SharePoint (pour permettre la connexion à la base de donnée) : il te faudra abaisser le niveau de sécurité. Je te donne un exemple de ce qu'il faut faire pour que ça fonctionne, mais je t'invite à chercher d'avantages pour voir si cette solution est vraiment celle qui te convient.

     

    Ouvre le fichier web.config de ton application (probablement le répertoire C:\Inetpub\wwwroot\wss\VirtualDirectories\80 ou un autre numéro de port) et repère la ligne suivante : <trust level="WSS_Minimal" originUrl="" />. Remplace la valeur "WSS_Minimal" par "WSS_Medium". Sauvegarde et quitte le fichier de configuration.

     

    Voilà,

    Bons devs.

    lundi 28 janvier 2008 09:48
    Modérateur
  •  

    ##########################

    pour ton message lors de la création du projet, il est possible qu'il y ait une différence de langue entre Visual Studio et les extensions que tu as installé, voir une différence de langue avec ton OS. Si c'est le cas, vas dans les options de Visual Studio, et modifie la langue (Paramètres internationaux).

    #########################

     

    Hm j'ai modifier la langue, j'ai mis "indentique à microsoft Windows" mais j'ai tjrs le même message..

     

    J'aimerais developper mon organigramme avec les JPANEL, enfin c'est ce qui me parait le plus familier.

    J'aurais besoin de conseils : l'organigramme comporte 5 Grand service, 35 sous service et environ 300 employé.

    Quelle serait la manière la plus propre de le présenter sous forme d'une webpart ?

     

    j'ai penser à une chose :

     

    dans une webpart on verrait les 5 grand service, lorsque l'on clique sur un des grand service, cela affiche les sous services dans la même webpart, et lorsque l'on clique sur un sous service, cela affiche les employé dans une autre webpart. envisageable ( pour moi ^^ ) ?

     

    Enfin en gros mon soucis c'est la présentation, si vous avez une meilleure idée ( vu que vous connaissez les possibilités et les limites) je suis preneur Smile

    lundi 28 janvier 2008 10:38
  • C'est envisageable.

     

    La difficulté n'est pas liée au langage. Que tu sois en Java ou en .Net il va te falloir construire un arbre à partir de tes données.

     

    En ce qui concerne l'affichage, je n'aime pas beaucoup la solution des Panels, mais c'est à toi de voir... vu le temps qu'il te reste il te faut trouver une solution sur laquelle tu es à l'aise. Reste cependant que tu ne peux pas te permettre de recharger la page à chaque clic sur un panel. Il va donc te falloir intégrer du javascript pour afficher/masquer les noeuds de l'organigramme.

     

    Autre chose, vu le nombre de services et de personnes, ta page sera relativement chargée... ce n'est pas l'idéal, mais vu le temps que tu as devant toi, encore une fois, pourquoi pas finalement.

     

    Pour ma part (avec les connaissances et le temps), je partirais certainement sur une solution à base d'Ajax.

     

    lundi 28 janvier 2008 13:11
    Modérateur
  • j'avoue que j m y perd un peu là Tongue Tied

     

    ################

    En ce qui concerne l'affichage, je n'aime pas beaucoup la solution des Panels, mais c'est à toi de voir...

    ################

     

    qu'est ce qui serait le mieux d'apres toi ?

     

    ##################

    Reste cependant que tu ne peux pas te permettre de recharger la page à chaque clic sur un panel. Il va donc te falloir intégrer du javascript pour afficher/masquer les noeuds de l'organigramme.

    ##################

     

    je ne suis pas obliger de recharger toute la page? enfin je vois pas pourquoi je ne pourrais pas Tongue Tied

    je vois pas du tout comment intégrer du javascript, et je ne cherche pas à cacher les noeuds, par exemple si je divise ma webpart en 3 :

     

    1 partie pour les grands services, une pour les sous services, et une dernière pour les personnes?

     

    ################

    Autre chose, vu le nombre de services et de personnes, ta page sera relativement chargée... ce n'est pas l'idéal, mais vu le temps que tu as devant toi, encore une fois, pourquoi pas finalement.

    ################

     

    heu oué, mais par exemple si dans une webpart j'afficher dans un premier temps les GRAND services, si on clique sur un des Grand service, cela affiche les sous service dans cette même webpart et si on clique sur un des sous service, cela affiche les employé dans une autre webpart, c'est fesable assez facilement ça ?

     

     

     

     

     

    lundi 28 janvier 2008 13:58
  •  

    Une solution "propre" serait de permettre une navigation dans l'organigramme sans faire de retour serveur (pas de rafraichissement à l'écran). Pour celà, il te faut du script côté client. Si tu ne veux pas en ajouter, tu auras juste un postback (retour serveur). Ce n'est pas bien grave. Encore une fois, l'essentiel c'est que tu ailles au bout de ton projet... alors mieux vaut ne pas perdre de temps avec ça. Et pour faire propre, toujours, ma WebPart ferait une transformation XSL... dans un monde idéal. Mais je ne veux pas te faire perdre du temps, alors la situation la plus simple pour toi sera déjà pas mal (quitte à la reprendre plus tard pour l'améliorer si il y en a vraiment besoin).

     

     

    lundi 28 janvier 2008 14:38
    Modérateur
  • Hm pour l'instant je vais faire une version light Smile on verra en fonction du temps que je mettrai mais déjà que penses-tu de cela :

     

     

     

    1ère solution :

    une webpart qui contient donc un jpanel partager en 2 : une partie qui contient les grand service, quand on clique sur des grand service, cela affiche dans la deuxième moitié du Jpanel les sous services. et quand on clique sur un des sous service, cela affiche les employé dans un deuxième webpart.

     

    2ème solution :

     

    partager mon jpanel en 3 : une partie pour les grand service, 1 autre pour les sous service, et une denrière pour les employés.

     

    je penses que la première solution serait plus propre, si jamais tu a une 3ème solution version simplifié n'hesite pas , mais c'est vrai que dans un premier temps je prèfere faire quelque chose de complet qui fonctionne même si ce n'est pas forcement extrement complexe.

     

    est-ce que mes solutions sont réalisable?

    lundi 28 janvier 2008 15:12
  • L'utilisation de plusieurs WebPart est plus difficile pour commencer. Donc j'opterai plus pour la seconde solution.

     

    Côté serveur, il va te falloir identifier sur quel noeud (service ou grand service) tu as cliqué. Ce n'est pas nécessairement le plus simple, c'est pour ça que le javascript aurait pu te rendre la tâche plus facile. Ca revient à faire ce que tu as prévu, mais avec des DIV (côté client donc) à la place des Panels (côté serveur).

     

    Côté client, ça donnerait quelque chose comme ça :

     

    Chaque noeud (ou service) contiendrait un élément avec l'attribut onclick="toggleService('this');" ou quelque chose de ce style,avec la méthode toggleService comme suit :

     

    Code Snippet

    toggleService(id_service)

    {

    panel = document.getElementById(id_service)

    if(panel.style.display == "none")

    {

    document.getElementById(id_service).style.display = "block";

    }

    else

    {

    document.getElementById(id_service).style.display = "none";

    }

    }

     

     

     

    mardi 29 janvier 2008 08:23
    Modérateur
  • hm je comprend sans comprendre Tongue Tied

     

    ##################

    L'utilisation de plusieurs WebPart est plus difficile pour commencer. Donc j'opterai plus pour la seconde solution.

    ##################

    ça ok je te fais confiance Smile

     

    #################

    Côté serveur, il va te falloir identifier sur quel noeud (service ou grand service) tu as cliqué. Ce n'est pas nécessairement le plus simple, c'est pour ça que le javascript aurait pu te rendre la tâche plus facile. Ca revient à faire ce que tu as prévu, mais avec des DIV (côté client donc) à la place des Panels (côté serveur).

    #################

     

    Les Grand service et sous services seront en "dur" dans mon programme, en fait il n y aura que quand on clique sur un sous service que cela entrainera une requête vers la bdd oracle pour récupérer les employés.

    Pour passer des grand service au sous service, ce sera comme un menu en gros.

    Je comprend pas pourquoi j'ai besoin de savoir sur quel noeud ( service ou gd service) j'ai cliqué, j'ai juste besoin de savoir sur quel service j'ai cliqué .

     

    Par exemple quand on clique sur un des grand services, cela entraine l'evenement ! affichage des sous services dans l'autre partie du panel.

     

    Ensuite quand on clique sur un sous service, là il faut pouvoir interroger la bdd et afficher les employés,

     

    Peut être que je raisonne mal..mais j'arrive pas à voir autrement pour l'instant Tongue Tied

     

     

     

    mardi 29 janvier 2008 09:32
  • ###################

    Je comprend pas pourquoi j'ai besoin de savoir sur quel noeud ( service ou gd service) j'ai cliqué, j'ai juste besoin de savoir sur quel service j'ai cliqué .

    ###################

     

    On parle de la même chose :-)

    Avec ta solution, il te faudra réagir sur l'évenement Click de ton Panel et lire ses propriétés pour aller te connecter à ta base de données... et reconstruire ton arbre. C'est jouable... mais ne perds pas trop de temps sur cette dernière partie.

    mardi 29 janvier 2008 10:06
    Modérateur
  •  

    J'ai trouver aussi les JTree , pour faire mon arborescence? bonne idée ou mauvaise idée?

    Comme ça j'affiche les Grand service avec leur service , et quand on clique sur un service on récupère les employé? à ce moment là j'aurais besoin de couper uniquement mon Jpanel en 2 .

    mardi 29 janvier 2008 10:12
  • Arrête de mettre des 'J' devant le nom de tes composants . Ce n'est pas du Java .

     

    Je ne peux pas répondre à ta question... mais à elle seule elle montre bien à quel point tu risques de perdre du temps sur la méthode de rendu de ta WebPart. Je t'assure, fais simple. Prends le temps de regarder les contrôles que tu peux utiliser, et parts sur la solution la plus simple... il sera toujours temps d'améliorer le rendu à la fin de ton stage.

     

    Je serai toi, j'aurai vraiment tendance à aller chercher toutes mes données d'un coup dans la base de données... pourquoi pas en reccupérant tes données dans un DataSet (System.Data.DataSet) ? Un simple DataAdapter, tu lui donnes ta requête et tu rempli le dataset avec. Le DataSet te permet de reccupérer les données sous format XML... donc tu n'as qu'à faire une transformation XSL pour afficher ton contrôle.

     

    La transformation XSL peut se contenter d'afficher du texte dans un premier temps... au moins ta WebPart fonctionnera et tu n'auras plus qu'à régler ton soucis d'affichage.

     

    C'est la méthode la plus simple, la moins risquée, la plus user friendly (parce que tu devras passer par du javascript pour afficher et masquer les services... donc pas de retour serveur)... d'autant que tu n'as pas un gros volume de données à remonter.

     

    Maintenant, tu peux aussi partir avec des controls... mais soit conscient que le risque de ne pas finir dans les temps est plus important.

    mardi 29 janvier 2008 10:49
    Modérateur
  •  

    Désolé pour les J ^^, je me reseigne depuis ce midi sur les arbre en C#, bon je suis pas sûr de bien comprendre...mais la présentation sous forme d'arbre me parait pas mal...

    j'ai trouvé ça : http://msdn.microsoft.com/library/fre/default.asp?url=/library/FRE/cpref/html/frlrfSystemWindowsFormsTreeViewClassTopic.asp

     

     

    mais j'ai pas encore réussi à l'adapter pour moi..pourtant ça n'a pas l'air compliquer...mais ce code je dois l'insérer comment par rapport à :

     

    Code Snippet

    public class WebPart4 : System.Web.UI.WebControls.WebParts.WebPart

    {

    public WebPart4()

    {

    this.ExportMode = WebPartExportMode.All;

    }

    protected override void CreateChildControls()

    {

    base.CreateChildControls();

    // TODO: add custom rendering code here.

    // Label label = new Label();

    // label.Text = "Hello World";

    // this.Controls.Add(label);

    }

    }

     

     

    j'ai tester la petite webpart hello world, d'ailleur avec VS 2005, il a fait le déploiement de la web part tout seul.
    mardi 29 janvier 2008 15:25
  • Tu ne peux pas utiliser le TreeView que tu as trouvé. Si tu regardes bien la page, le namespace auquel le treeview appartient est System.Windows.Forms.TreeView. Celà signifie qu'il est fait pour des applications client riche et non pour le web. Les composants utilisables sur le Web appartiennent généralement au namespace System.Web.UI.WebControls. Et à ma connaissance il n'y a pas de TreeView dans ce namespace. La liste complète des contrôles de ce namespace est sur la page dont je t'avais donné le lien (http://msdn2.microsoft.com/fr-fr/library/system.web.ui.webcontrols(VS.80).aspx).

     

    Pour le déploiement de la WebPart, c'est effectivement très simple avec le template de projet WebPart de Visual Studio. Prévoit tout de même du temps pour le déploiement, car ce n'est pas aussi simple lorsque tu dois procéder sans Visual Studio, lorsque tu veux déployer ta WebPart sur un serveur qui n'a pas VS par exemple.

    mardi 29 janvier 2008 23:17
    Modérateur
  • #########################

    La liste complète des contrôles de ce namespace est sur la page dont je t'avais donné le lien (http://msdn2.microsoft.com/fr-fr/library/system.web.ui.webcontrols(VS.80).aspx).

    ########################

     

    ben moi j y voi le Treeview dans la liste que tu m'a donner au niveau des classes Tongue Tied tu cherches à me faire déprimer c'est ça ? Stick out tongue

    Donc si je le vois, c'est que je peux l'utiliser?

    http://msdn2.microsoft.com/fr-fr/library/system.web.ui.webcontrols.treeview(VS.80).aspx

     

    j'espere que je me trompe pas lol Tongue Tied

     

    mercredi 30 janvier 2008 07:44
  • Malheuresement tu as raison...  Je t'ai bel et bien embrouillé en te disant qu'il n'y a pas de TreeView dans ce namespace. C'est d'autant moins pardonable que le menu de gauche dans les sites WSS est basé sur ce contrôle... bref, aucun problème, ce contrôle te permettra de réaliser un rendu rapide de ton organigramme.

     

    Sert toi bien des exemples de cette page MSDN. C'est presque exactement (j'aime beaucoup cette expression) ce que tu cherches à faire. Si besoin, suit les liens How to indiqués sur cette même page.

     

    Tout ceci devrait te permettre d'avancer assez vite. Bon courage pour la suite des devs.

     

    mercredi 30 janvier 2008 08:31
    Modérateur
  •  

    ##################

    Malheuresement tu as raison...  

    ##################

     

    j'aurais plutôt dis heuresement mais cela doit dépendre du point de vue Stick out tongue

     

    ##################

    C'est d'autant moins pardonable que le menu de gauche dans les sites WSS est basé sur ce contrôle

    ##################

     

    oui je suis plutôt daccord, j'irais même jusqua dire que c'est impardonnable, mais c'est encore une question de point de vue Stick out tongue

     

    J'aurais quand même une question Smile bien qu'en train d'essayer de suivre les exemples, quand j'insere du code sur Vs, c'est tout le tps souligné, ne connaissant pas tellement VS, j'ai une erreur de syntaxe.

    En fait je test un peu partout où je peux inserer mon code, déja quand je créer un nouveau projet --> webpart,

    j'ai ce code qui est contenue dans le namespace,

    Code Snippet

    public class WebPart4 : System.Web.UI.WebControls.WebParts.WebPart

    {

    public WebPart4()

    {

    this.ExportMode = WebPartExportMode.All;

    }

    protected override void CreateChildControls()

    {

    base.CreateChildControls();

    }

     

     

     

    Mais pour pouvoir utiliser les Treeview,il faudrait que je créer une nouvelle classe, or je sais pas trop comment faire?

    mercredi 30 janvier 2008 08:54
  • Ok, il faut commencer par les fondamentaux .Net... mais c'est un peu ambitieux pour un post de forum . Tu trouveras des tutoriels pour ça, et un coach ASP.Net : http://msdn2.microsoft.com/fr-fr/asp.net/bb330941.aspx

     

    Mais pour te permettre d'avancer, il te suffit juste de créer ton code dans la méthode CreateChildControls(), avant la ligne base.CreateChildControls() de la méthode. Pour créer ton TreeView, il te suffit d'ajouter ces lignes :

     

    Code Snippet

    System.Web.UI.WebControls.TreeView myTreeView = new System.Web.UI.WebControls.TreeView();

     

    // Le contrôle est créé, reste à lui donner ses propriétés

    myTreeView.BackColor = ...

     

    // Il faut ensuite lui ajouter des noeuds à l'aide des données que tu auras reccupérer d'Oracle (suit ce qui est dans l'exemple du MSDN pour ça)

    myTreeView.Node.ChildNodes.Add(...)

     

    // L'ajouter aux contrôles de ta WebPart

    this.Controls.Add(myTreeView);

     

     

     

    mercredi 30 janvier 2008 09:32
    Modérateur
  • En fait je crois que j'ai trouver comment creer une classe , mais je me pose des questions :

     

    - déjà est-ce que cette classe sera déployé en même temps que la classe principal de ma webpart?

    - en fait je vois pas trop comment définir la classe Treeview.. et apres y faire apelle dans mon programme principale ..

    - qu'est ce que je dois mettre dans le constructeur de la classe Treeview?

     

    mercredi 30 janvier 2008 09:33
  • Tu n'as pas à écrire d'autre classe que la WebPart. SharePoint a déjà tout ce qu'il lui faut pour utiliser le TreeView... pas besoin déployer autre chose.

     

    Au sein de ta WebPart, dans la méthode CreateChidControls(), tu as juste à écrire cette ligne :

     

    System.Web.UI.WebControls.TreeView myTreeView = new System.Web.UI.WebControls.TreeView();

     

    Ca suffit à créer ton TreeView. Bien sûr, il est vide et il n'est pas encore rattaché à ta WebPart... pour l'ajouter il te faudra écrire (toujours dans la méthode CreateChildControls()) :

     

    this.Controls.Add(myTreeView);

     

    Je te renvoi à l'exemple du MSDN pour lui ajouter des noeuds (des services et des personnes pour toi donc).
    mercredi 30 janvier 2008 12:46
    Modérateur
  •  

    yep mais je trouve que l'exemple du MSDN est pas top ^^

    Donc là j'ai bien mon arbre, et le déploiement dans la webpart s'est bien fait aussi sauf que ( et oui malheuresement) quand clique pour déployé l'arbre, il se déploie bien mais il me fait une copie de l'arbre.. je me retrouve avec 2 arborescence équivalente...

    alors je pense que ça viendrait de la methode NavigateUrl mais j'arrive pas à la changer

    #####################

    Un nœud peut se présenter sous l'un des deux modes suivants : mode de sélection et mode navigation. Par défaut, un nœud est en mode de sélection. Pour faire passer un nœud en mode navigation, affectez une valeur différente d'une chaîne vide ("") à la propriété NavigateUrl du nœud. Pour faire passer un nœud en mode de sélection, affectez une chaîne vide ("") à la propriété NavigateUrl du nœud.

    ######################

     

    Code Snippet

    protected override void CreateChildControls()

    {

    this.Controls.Clear();

    TreeView tree = new TreeView();

    this.Controls.Add(tree);

    TreeNode rootNode = new TreeNode("AQUITANIS");

    TreeNode firstNode = new TreeNode("Direction Générale");

    TreeNode secondNode = new TreeNode("Direction des ressources Humaines");

    TreeNode thirdNode = new TreeNode("Direction Financière");

    TreeNode fourthNode = new TreeNode("Direction de la Location");

    TreeNode fifthNode = new TreeNode("Direction du Patrimoine");

    tree.Nodes.Add(rootNode);

    rootNode.ChildNodes.Add(firstNode);

    rootNode.ChildNodes.Add(secondNode);

    rootNode.ChildNodes.Add(thirdNode);

    rootNode.ChildNodes.Add(fourthNode);

    rootNode.ChildNodes.Add(fifthNode);

    }

     

     

     

     

    mercredi 30 janvier 2008 13:33
  • Je ne connais pas bien ce control, mais à priori la méthode NavigateUrl te permet de changer de page... et ce n'est pas ce que tu cherches à faire.

     

    A priori, chaque node de ton treeview devrait lever un évenement lors d'un clic. A toi de réagir sur cet évenement, de faire ta requête ORACLE pour aller chercher les personnes composant le service associé au noeud, puis d'ajouter des noeuds de personne au noeud SERVICE.

     

    Je ne sais pas si cette méthode est la plus simple à coder pour un début. Dans un premier temps, pourquoi ne créerais tu pas ton arbre complètement. Tu pourrais jouer sur la propriété Expanded des noeuds pour indiquer que seuls les services sont affichés. L'utilisateur pourrait manuellement déplier ton arbre pour afficher les personnes. C'est à mon avis le scénario le plus simple. Il te restera à l'améliorer si besoin.

     

    Petite astuce cependant : ta question n'ayant plus de lien avec SharePoint mais avec ASP.Net 2.0, tu trouveras peut être des réponses plus pertinentes que les miennes sur le forum MSDN consacré aux développements Web.

     

    mercredi 30 janvier 2008 14:05
    Modérateur
  •  

    Hihi je revien ici, voila j'ai l'organigramme avec Les Grand service, il me reste donc à inclure les sous service + les employé.

    Pour ceux faire, je dipose d'une table avec les employé et l'abreviation du service auquel ils appartiennent + une autre table avec l'abreviation du service et le libellé du service,

     

    Je voudrais donc me connecter à ma base oracle, récupérer les donnés et faire une boucle dans ma webpart pour la création de mon arbre, c'est possible ça?

     

    Dans un premier temps je n'afficherai que le nom et prenom des employés apres on verra pour faire mieux ^^

    jeudi 31 janvier 2008 10:52
  • Salut,

     

    Voici un exemple de code classique et basique qui te permet de récupérer toutes des données de ta base de données Oracle dans un dataset.

    Code Snippet

    private DataSet GetEmployees(){

    string connectionString = "Provider = msdaora; Data Source = MyOracleDB; User Id = myUsername; Password = myPassword";

    string selectCommand = "select * from maTable";

    DataSet Employees = new DataSet();

    using (OracleConnection conn = new OracleConnection(connectionString)) {

    using(OracleCommand command = new OracleCommand(selectCommand)){

    OracleDataAdapter dataAdapter = new OracleDataAdapter(selectCommand);

    dataAdapter.Fill(Employees);}

    }

    return Employees;}

     

     

    Si jamais tu as des soucis au niveau de ta chaine de connexion, tu peux regarder ici > http://www.connectionstrings.com/?carrier=oracle

     

    Cependant, comme le précisait Sébastien, tu trouveras plus d'infos sur le forums dédié à asp.net ou meme ado.net

    jeudi 31 janvier 2008 13:49
  •  

    Hm pour l'instant c'est meme pas au niveau de la chaine de conection que j'ai un pb, c'est au niveau du dataset lol..

     

    il me dit que le type ou le nom d'espace de nom du dataset est introuvable,(une directive using ou une reference assembly est-elle manquante? )

     

    j'ai essayer ça :

     

    Code Snippet

    using System.ComponentModel.MarshalByValueComponent;

     

     

    mais ça marche pas..
    jeudi 31 janvier 2008 14:44
  • Ah oui, il te faut importer des dll et ajouter des namespaces.

    dans visual studio, tu vas dans ton menu affichage et tu choisis explorateur de solution. ensuite dans ton explorateur de solution, tu vas dans ton dossier références, clic droit, puis ajouter une nouvelle, dans l'onglet .net, il faut ajouter system.data.dll et system.data.oracleclient.dll.

    Puis dans le fichier de code, au niveau des directives using, il faut ajouter

    Code Snippet

    using System.Data;

    using System.Data.OracleClient;

    using System.Web;

    using System.Web.UI.WebControls;

     

     

    ca devrait mieux fonctionner.
    jeudi 31 janvier 2008 14:58
  •  

    j'ai pas trouver system.data.dll mais j'ai trouver system.data,

     

    maintenant j'ai les erreurs suivante :

     

    Erreur 1 La méthode surchargée correspondant le mieux à 'System.Data.OracleClient.OracleDataAdapter.OracleDataAdapter(System.Data.OracleClient.OracleCommand)' possède des arguments non valides C:\Documents and Settings\Administrateur\Mes documents\Visual Studio 2005\Projects\WebPart4\WebPart4\WebPart4\WebPart4.cs 43 53 WebPart4

    Erreur 2 Argument '1' : impossible de convertir de 'string' en 'System.Data.OracleClient.OracleCommand' C:\Documents and Settings\Administrateur\Mes documents\Visual Studio 2005\Projects\WebPart4\WebPart4\WebPart4\WebPart4.cs 43 75 WebPart4

    Ma requête est la suivante, j'avais mis une requete plus compliqué mais pensant que ça venait de là j'ai mis uen requete toute simple.

     

    string selectCommand = "select * from intranet_employe";

     

    jeudi 31 janvier 2008 15:12
  •  

    Oracle n'est pas sur le même serveur que Wss ça peutvenir de là?
    vendredi 1 février 2008 10:10
  • Tu trouveras un exemple de requête ORACLE depuis C# ici : http://www.csharpfr.com/codes/CLASSE-CONNEXION-ORACLE_25671.aspx.

     

    vendredi 1 février 2008 14:54
    Modérateur
  • hm j'ai un peu tout testé, et je me perds...

     

    est-ce qu'il est plus simple d'utiliser la classe que tu me donne dans le lien ou bien est-ce que je part sur la doc de microsoft avec les dataset?

     

    public DataSet SelectOracleSrvRows(DataSet dataset, string connection, string query)

    {

    connection = "Provider = msdaora; Data Source = Chaine hote? ; User Id = utilisateur ; Password = mdp";

    query = "select * from intranet_employe";

    OracleConnection conn = new OracleConnection(connection);

    OracleDataAdapter adapter = new OracleDataAdapter();

    adapter.SelectCommand = new OracleCommand(query, conn);

    adapter.Fill(dataset);

    return dataset;

    }

     

    quand je compile ce code je n'ai pas d'erreur, mais est-ce qu'il remplie réellement le dataset..ça je ne sais pas.

    est-il difficile d'utiliser les dataset?

    lundi 4 février 2008 09:37
  • Ok, tu obtiens ce qui me semble être le plus simple. La méthode Fill rempli ton dataset avec les données retournées par la requête. Ton dataset est sous forme XML. Si tu veux regarder ce qu'il y a dedans, tu peux débugger ta WebPart. regarde le contenu de ton dataset après l'appel à la méthode Fill... tu devrais trouver tes données.

     

    Ton dataset contient une liste de DataTables (probablement une seule). Une dataTable contient des DataRows (une DataRow par ligne retournée par ta requête). A toi de parcourir ensuite les DataColumn de chaque DataRow.

     

    lundi 4 février 2008 10:20
    Modérateur
  •  

    ###############

    Si tu veux regarder ce qu'il y a dedans, tu peux débugger ta WebPar

    ###############

     

    quand je fais Déboguer --> démarrer le débogage, ça me fait comme quand je deploie ma webpart mais j'ai aucun détails , a part le fait que le deploiement ait reussi.

    lundi 4 février 2008 10:28
  • Code Snippet

    using System;

    using System.Runtime.InteropServices;

    using System.Web.UI;

    using System.Web.UI.WebControls;

    using System.Web.UI.WebControls.WebParts;

    using System.Xml.Serialization;

    using Microsoft.SharePoint;

    using Microsoft.SharePoint.WebControls;

    using Microsoft.SharePoint.WebPartPages;

    using System.Data;

    using System.Data.OracleClient;

    using System.Web;

    using System.Collections;

     

     

     

    namespace WebPart4

    {

    [Guid("0781047e-d071-48d9-9ce7-463997e752ab")]

    public class WebPart4 : System.Web.UI.WebControls.WebParts.WebPart

    {

    public WebPart4()

    {

    this.ExportMode = WebPartExportMode.All;

    }

    public DataSet SelectOracleSrvRows(DataSet dataset, string connection, string query)

    {

    connection = "Provider = msdaora; Data Source =CHAINE HOTE ? ; User Id = utilisateur ; Password = mdp";

    query = "select * from intranet_employe";

    OracleConnection conn = new OracleConnection(connection);

    OracleDataAdapter adapter = new OracleDataAdapter();

    adapter.SelectCommand = new OracleCommand(query, conn);

    adapter.Fill(dataset);

    return dataset;

    }

    protected override void CreateChildControls()

    {

    this.Controls.Clear();

    TreeView tree = new TreeView();

    this.Controls.Add(tree);

    TreeNode rootNode = new TreeNode("AQUITANIS");

    TreeNode firstNode = new TreeNode("Direction Générale");

    TreeNode secondNode = new TreeNode("Direction des ressources Humaines");

    TreeNode thirdNode = new TreeNode("Direction Financière");

    TreeNode fourthNode = new TreeNode("Direction de la Location");

    TreeNode fifthNode = new TreeNode("Direction du Patrimoine");

    tree.Nodes.Add(rootNode);

    rootNode.ChildNodes.Add(firstNode);

    rootNode.ChildNodes.Add(secondNode);

    rootNode.ChildNodes.Add(thirdNode);

    rootNode.ChildNodes.Add(fourthNode);

    rootNode.ChildNodes.Add(fifthNode);

    rootNode.SelectAction = TreeNodeSelectAction.None;

    firstNode.SelectAction = TreeNodeSelectAction.None;

    secondNode.SelectAction = TreeNodeSelectAction.None;

    thirdNode.SelectAction = TreeNodeSelectAction.None;

    fourthNode.SelectAction = TreeNodeSelectAction.None;

    fifthNode.SelectAction = TreeNodeSelectAction.None;

    }

     

     

    }

    }

     

     

    ça c'est mon code, j'arrive pas récupérer les information de mon dataset..j'essaye toute le syntaxe possible mais j'ai des erreurs.

    peut-tu m'ecrire le code qui permet d'avoir la premiere ligne de résultat généré par ma requete stp ?

    lundi 4 février 2008 10:38
  • Pour le mode debug, il te faut poser un point d'arrêt. Clic sur la marge de gauche à côté de ton code pour faire apparaitre un point rouge. Tu rentreras en mode pas à pas lorsque la ligne pointée par le rond rouge sera sur le point d'être exécutée.

     

    pour la lecture de ton dataSet :

     

    Code Snippet

    string valeur = null;

     

    foreach (DataRow dr in ds.Tables[0].Rows)
    {

    valeur  = dr["nom_colonne"];

    }

     

     

    lundi 4 février 2008 10:48
    Modérateur
  •  

    Pour le mode debug, il te faut poser un point d'arrêt. Clic sur la marge de gauche à côté de ton code pour faire apparaitre un point rouge. Tu rentreras en mode pas à pas lorsque la ligne pointée par le rond rouge sera sur le point d'être exécutée.

     

    heu les points rouge ça marche, mais je vois toujours rien ^^ par contre je me demande si j'affiche bien la bonne fenetre :

    actuellement jaffiche la liste d'erreur et la liste des tache.

    c'est bon?

    je testerai le code apres ma pause du midi, j'ai la tete qui va exploser Tongue Tied

    lundi 4 février 2008 10:57
  • Pour rentrer en mode debut tu as besoin de t'assurer de deux autres choses :

     

    - que ta WebPart soit placée sur la page que tu rafraichis .

    - que le code dans lequel tu as placé le point d'arrêt est bien appelé.

     

    Il te faut donc appeler la méthode SelectOracleSrvRows depuis ta méthode CreateChildControls() (c'est un mauvais exemple, mais ça fonctionnera bien comme ça dans un premier temps).

     

    lundi 4 février 2008 11:02
    Modérateur
  • ptit pb avec internet,dsl de pas être revenu avant.

    y a un point qui me dit que je dois pas faire les chose bien ^^

     

     

    #################

    que ta WebPart soit placée sur la page que tu rafraichis .

    #################

     

    je suis sur VS, j'ai d'afficher, mon code, l'explorateur de solution et tout en bas, différente fénetres dont une qui me permet de cocher ou décocher mes point d'arrete.

    J'ai une autre fenetre : sortie, et je pensais que c'était la bonne mais elle ne m'affichait pas mon dataset :

     

    ------ Début de la génération : Projet : WebPart4, Configuration : Debug Any CPU ------

    WebPart4 -> C:\Documents and Settings\Administrateur\Mes documents\Visual Studio 2005\Projects\WebPart4\WebPart4\bin\Debug\WebPart4.dll

    ------ Début du déploiement : Projet : WebPart4, Configuration : Debug Any CPU ------

    ------ Deactivate and uninstall features in old solution ------

    Deactivating feature WebPart4_3b865a47-6864-4e0b-a428-50bb184083e9 ...

    Operation completed successfully.

    Uninstalling feature WebPart4_3b865a47-6864-4e0b-a428-50bb184083e9 ...

    Operation completed successfully.

    ------ Retract and delete old solution webpart4.wsp from the SharePoint ------

    Retracting solution ...

    Operation completed successfully.

    Deleting solution ...

    Operation completed successfully.

    ------ Generate sotluion file and setup batch file------

    Creating solution ...

    Operation completed successfully.

    Creating setup batch file ...

    Operation completed successfully.

    ------ Add and deploy the solution to the SharePoint ------

    Adding solution ...

    Operation completed successfully.

    Deploying solution ...

    Operation completed successfully.

    ------ Activate features in solution if necessary ------

    Activating feature WebPart4_3b865a47-6864-4e0b-a428-50bb184083e9 ...

    Operation completed successfully.

    Recycling application pool, SharePoint - 80...

    Operation completed successfully.

    ========== Génération : 1 a réussi ou est à jour, 0 a échoué, 0 a été ignoré ==========

    ========== Déploiement : 1 a réussi, 0 a échoué, 0 a été ignoré ==========

     

    Mais je dois pas être dans le bon truc ... Tongue Tied

    lundi 4 février 2008 12:56
  • Clic simplement sur la flêche verte en haut de Visual Studio pour lancer le mode debug. Une fois sur ton site SharePoint, place ta WebPart. Le code de ta WebPart ne peut pas s'éxécuter si ta WebPart n'est pas placée... c'est donc une condition indispensable.

     

    Une fois placée, ta webPart va executer la méthode CreateChildControls(). Autrement dit, si tu places un points d'arrêt sur la méthode CreateChildControls tu pourras voir l'état de tes variables à chaque ligne de code. L'idée c'est donc que ta méthode CreateChildControls appelle la méthode manipulant le dataset. Ainsi, tu pourras visualiser l'état et le contenu de ton Dataset lorsque tu seras en mode debug.

     

    lundi 4 février 2008 13:24
    Modérateur
  • j'ai virer ma webpart ensuite j'ai fais ce que tu m a dit :

     

    Clic simplement sur la flêche verte en haut de Visual Studio pour lancer le mode debug. Une fois sur ton site SharePoint, place ta WebPart. Le code de ta WebPart ne peut pas s'éxécuter si ta WebPart n'est pas placée... c'est donc une condition indispensable.

     

    ensuite j'ai replacer ma webpart, mais j'ai rien vu lol .. ( tu va t arracher les cheveux avec moi .. Tongue Tied lol )

     

     

    sinon chose à part, j'ai rajouter ça(a la fin) dans ma methode createChildControls mais ça ne marche pas :

     

    protected override void CreateChildControls()

    {

    this.Controls.Clear();

    TreeView tree = new TreeView();

    this.Controls.Add(tree);

    TreeNode rootNode = new TreeNode("AQUITANIS");

    TreeNode firstNode = new TreeNode("Direction Générale");

    TreeNode secondNode = new TreeNode("Direction des ressources Humaines");

    TreeNode thirdNode = new TreeNode("Direction Financière");

    TreeNode fourthNode = new TreeNode("Direction de la Location");

    TreeNode fifthNode = new TreeNode("Direction du Patrimoine");

    tree.Nodes.Add(rootNode);

    rootNode.ChildNodes.Add(firstNode);

    rootNode.ChildNodes.Add(secondNode);

    rootNode.ChildNodes.Add(thirdNode);

    rootNode.ChildNodes.Add(fourthNode);

    rootNode.ChildNodes.Add(fifthNode);

    rootNode.SelectAction = TreeNodeSelectAction.None;

    firstNode.SelectAction = TreeNodeSelectAction.None;

    secondNode.SelectAction = TreeNodeSelectAction.None;

    thirdNode.SelectAction = TreeNodeSelectAction.None;

    fourthNode.SelectAction = TreeNodeSelectAction.None;

    fifthNode.SelectAction = TreeNodeSelectAction.None;

     

     

    DataSet dataset;

    String connection;

    String query;

    DataSet ds = SelectOracleSrvRows(dataset, connection, query);

    foreach (DataRow dr in ds.Tables[0].Rows)

    {

    valeur = (string)dr["nom_colonne"];

    Console.Write(valeur);

    }

    }

     

     

    lundi 4 février 2008 13:53
  • Inséré dans le CreateChildControls, ce code devrait te permettre d'aller chercher les données dans ta base.

     

    Code Snippet

    DataSet ds = SelectOracleSrvRows(dataset, connection, query);

    foreach (DataRow dr in ds.Tables[0].Rows)

    {

    // Remplace "nom_colonne" par le nom d'une des colonnes de ta table ORACLE 

    valeur = dr["nom_colonne"] as string;

    this.Page.Response.Write(valeur);

    }

     

     

    Place un point d'arrêt sur la ligne DataSet ds = SelectOracleSrvRows(dataset, connection, query); Déploie ta WebPart avec le mode debug (comme expliqué juste avant). Normalement, Visual Studio devrait reprendre la main en pendant l'ouverture de la page. Cette ligne sera alors surlignée en jaune. Sert toi ensuite du bouton F11 pour avancer dans le programme. Tu pourras regarder le contenu de tes variables pendant l'execution simplement en les survolant à la souris.

    lundi 4 février 2008 14:35
    Modérateur
  •  

     

    Inséré dans le CreateChildControls, ce code devrait te permettre d'aller chercher les données dans ta base

    ça ok, encore que quand je déploie ma webpart j'ai une erreur, la page d'acceuil n'est plus accessible, alors peut être que ma connection a la bdd se fait mal ...

     

     

    Place un point d'arrêt sur la ligne DataSet ds = SelectOracleSrvRows(dataset, connection, query);

    ça ok aussi^^ .

     

    Déploie ta WebPart avec le mode debug (comme expliqué juste avant).

    au préalable je la désactive de l'affichage sur le site sharepoint.

     

    Normalement, Visual Studio devrait reprendre la main en pendant l'ouverture de la page.

    Perso Visual Studio ne m'a jamais ouvert de page ...

     

     

     Cette ligne sera alors surlignée en jaune. Sert toi ensuite du bouton F11 pour avancer dans le programme. Tu pourras regarder le contenu de tes variables pendant l'execution simplement en les survolant à la souris.

    nop moi quand le lance le mode débug, même en ayant mis le point rouge, il me déploie la webpart en 5 sec et comme si c'était normal..
    lundi 4 février 2008 14:52
  • Bon, étant donné que ma base oracle n'est pas sur le même serveur que sharepoint, j'ai cru comprendre qu'il fallai configurer le fichier tnsnames.ora, j'ai donc récupérer l'ip du serveur oracle+ le port. J'ai entrer ces informations dans le tnsnames.ora qui se situe sur le window 2k3 srv où il y a WSS.

    Mais ça ne marche toujours pas...ça m'énerve ...

     

    ce qui est étonnant c'est que c'est cette ligne qui déclenche l'erreur :

     

    DataSet ds = SelectOracleSrvRows(dataset, connection, query);

     

     

    Mais la connection en elle-meme ne genere pas d'erreur ....
    mardi 5 février 2008 08:45
  • 1 - Vérifie si tu sais accéder à ta DB depuis le serveur ou tu développes ton webpart...

    2 - Si tu y a accès, vérifie les paramètres de ta connexion string...

    3 - Dans visual, dans tool, tu as un outils pour te connecter à un DB, c'est très utilie pcq'il créer lui mème la connexion stream que tu n'a plus qu'à recopier tel quel ;-)

    mardi 5 février 2008 12:40
  • Salut,

    merci pour ta réponse, alors déja depuis le serveur ou je développe ma webpart, je peux lancer un ping sur le serveur oracle.

    Maintenant j'attend l'administrateur réseau, pour savoir si il peu m'installé un client oracle sur le serveur ou je developpe pour voir si la connection peut vraiment se faire.

     

    Les parametre de connection string je les ai tester et retester j'en ai une ribambelle ^^ :

     

    Code Snippet

    //connection = "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=xx.xx.xx.xxx)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ULISP)));User Id=USER;Password=MDP;";

    //connection = "Provider=msdaora;Data Source=ulisp;User Id=USER;Password=MDP;Server=xx.xx.xx.xxx;Integrated Security=no;";

    // this.connection = "Password=MDP;User ID=USER;Data Source=ULISP;Server=xx.xx.xx.xxx;";

    // connection = "Data Source=TITAN_ULISP;User Id=USER;Password=MDP;Server=xx.xx.xx.xxx;";

    // connection = "SERVER = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = xx.xx.xx.xxx)(PORT =1521))(CONNECT_DATA = (SERVICE_NAME = ULISP))); uid = USER; pwd = MDP;";

    connection = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=34.33.33.216)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ULISP)));User Id=intranet;Password=sb;";

     

     

    Mais une fois que l'admin réso m'aura installé un client oracle je pourrais vraiment tester si j y accès..m'enfin normalement je devrai y avoir accès.

     

    hey c'est trop stylé ton point 3 :

     

    alors j'ai essayer mais j'ai une erreur :

    ORA-12514 : TNS : le module d'écoute(listener) na pa pu résoudre le SERVICE_NAME figurant dans le descripteur de connection

    mardi 5 février 2008 13:27
  •  

    Par contre je remarque que quand je fais connecter à un serveur et que je met l'ip du serveur oracle ou son nom ben ça ne marche pas non plus, ça me dit erreur lors de la tentative blabla... donc si j'arrive pas a me connecter au serveur, je vais avoir du mal a me connecter la bdd qui se trouve sur le serveur non?
    mardi 5 février 2008 13:36
  • aprilia769 t une déesse ^^ ça marche !!!!enfin j'ai reussi a me connecter à oracle via visual Studio. maintenant faut que j'arrive à le faire avec WSS ..

     

     

    bon par contre ça marche toujours pas avec WSS lol

     

    mais je crois savoir pourquoi mais j'ai quand même bsoin d'aide :

     

    Code Snippet

    using System;

    using System.Runtime.InteropServices;

    using System.Web.UI;

    using System.Web.UI.WebControls;

    using System.Web.UI.WebControls.WebParts;

    using System.Xml.Serialization;

    using Microsoft.SharePoint;

    using Microsoft.SharePoint.WebControls;

    using Microsoft.SharePoint.WebPartPages;

    using System.Data;

    using System.Data.OracleClient;

    using System.Web;

    using System.Collections;

     

     

     

    namespace WebPart4

    {

    [Guid("0781047e-d071-48d9-9ce7-463997e752ab")]

    public class WebPart4 : System.Web.UI.WebControls.WebParts.WebPart

    {

    public WebPart4()

    {

    this.ExportMode = WebPartExportMode.All;

    }

    public DataSet SelectOracleSrvRows(DataSet dataset, string connection, string query)

    {

    query = "select count(nom) from intranet_employe";

     

    connection = "Data Source=titan_ulisp;User ID=USER;Password=MDP;Unicode=True;";

    OracleConnection conn = new OracleConnection(connection);

    OracleDataAdapter adapter = new OracleDataAdapter();

    adapter.SelectCommand = new OracleCommand(query, conn);

    adapter.Fill(dataset);

    return dataset;

    }

     

     

    DataSet dataset = null;

    string valeur = null;

    string connection = null;

    string query = null;

     

    protected override void CreateChildControls()

    {

    this.Controls.Clear();

    TreeView tree = new TreeView();

    this.Controls.Add(tree);

    TreeNode rootNode = new TreeNode("AQUITANIS");

    TreeNode firstNode = new TreeNode("Direction Générale");

    TreeNode secondNode = new TreeNode("Direction des ressources Humaines");

    TreeNode thirdNode = new TreeNode("Direction Financière");

    TreeNode fourthNode = new TreeNode("Direction de la Location");

    TreeNode fifthNode = new TreeNode("Direction du Patrimoine");

    tree.Nodes.Add(rootNode);

    rootNode.ChildNodes.Add(firstNode);

    rootNode.ChildNodes.Add(secondNode);

    rootNode.ChildNodes.Add(thirdNode);

    rootNode.ChildNodes.Add(fourthNode);

    rootNode.ChildNodes.Add(fifthNode);

    rootNode.SelectAction = TreeNodeSelectAction.None;

    firstNode.SelectAction = TreeNodeSelectAction.None;

    secondNode.SelectAction = TreeNodeSelectAction.None;

    thirdNode.SelectAction = TreeNodeSelectAction.None;

    fourthNode.SelectAction = TreeNodeSelectAction.None;

    fifthNode.SelectAction = TreeNodeSelectAction.None;

     

     

    DataSet ds = SelectOracleSrvRows(dataset, connection, query);

     

    foreach (DataRow dr in ds.Tables[0].Rows)

    {

    valeur = dr["nom"] as string;

    this.Page.Response.Write(valeur);

     

    }

    }

     

     

    }

    }

     

     

     

    plusieurs questions :

    Dans la methode SelectOracleSrvRow, je renseigne les champs de connection et je remplie mon dataset, que je retourne ensuite.

    l'interet ensuite est d'instancier mon dataset avec :

     

    DataSet ds = SelectOracleSrvRows(dataset, connection, query);

     

    Mais entre temps je fais ça :

     

    DataSet dataset = null;

    string valeur = null;

    string connection = null;

    string query = null;

     

     

    est-ce que mon erreur ne viendrait pas de là?

    mardi 5 février 2008 15:39
  • Côté code il y a une chose qui ne va pas :

     

    tu appelles ta méthode SelectOracleSrvRow en fournissant 3 paramètres. A l'intérieur de cette méthode tu redéfinis ces paramètres... autrement dit, les paramètres que tu donne à la méthode ne seront jamais utilisé. Déjà, le paramètre DataSet n'est pas utilisé. Ensuite, la connexion et la query seront toujours ceux que tu as indiqué à l'intérieur de la méthode (query = "select count(nom) from intranet_employe"; connection = "Data Source=titan_ulisp;User ID=USER;Password=MDP;Unicode=True;"Wink

     

    Du coup (si tu veux garder tes paramètres en dur), ta méthode devrait être

     

    private DataSet SelectOracleSrvRows()

    {

       // ...

    }

     

    et ton appel : DataSet ds = SelectOracleSrvRows();

     

    Si la méthode s'éxécute sans erreur et que ton DataSet reste vide, c'est que ta requête Oracle ne retourne rien.

     

    mardi 5 février 2008 20:29
    Modérateur
  • Code Snippet

    private DataSet SelectOracleSrvRows(DataSet dataset, string connection, string query)

    {

    query = "select count(nom) from intranet_employe";

    connection = "Data Source=titan_ulisp;User ID=USER;Password=MDP;Unicode=True;";

    OracleConnection conn = new OracleConnection(connection);

    OracleDataAdapter adapter = new OracleDataAdapter();

    adapter.SelectCommand = new OracleCommand(query, conn);

    adapter.Fill(dataset);

    return dataset;

    }

     

     

     

    protected override void CreateChildControls()

    {

    this.Controls.Clear();

    TreeView tree = new TreeView();

    this.Controls.Add(tree);

    TreeNode rootNode = new TreeNode("AQUITANIS");

    TreeNode firstNode = new TreeNode("Direction Générale");

    TreeNode secondNode = new TreeNode("Direction des ressources Humaines");

    TreeNode thirdNode = new TreeNode("Direction Financière");

    TreeNode fourthNode = new TreeNode("Direction de la Location");

    TreeNode fifthNode = new TreeNode("Direction du Patrimoine");

    tree.Nodes.Add(rootNode);

    rootNode.ChildNodes.Add(firstNode);

    rootNode.ChildNodes.Add(secondNode);

    rootNode.ChildNodes.Add(thirdNode);

    rootNode.ChildNodes.Add(fourthNode);

    rootNode.ChildNodes.Add(fifthNode);

    rootNode.SelectAction = TreeNodeSelectAction.None;

    firstNode.SelectAction = TreeNodeSelectAction.None;

    secondNode.SelectAction = TreeNodeSelectAction.None;

    thirdNode.SelectAction = TreeNodeSelectAction.None;

    fourthNode.SelectAction = TreeNodeSelectAction.None;

    fifthNode.SelectAction = TreeNodeSelectAction.None;

     

     

    DataSet ds = SelectOracleSrvRows();

    string valeur = null;

    foreach (DataRow dr in ds.Tables[0].Rows)

    {

    valeur = dr["nom"] as string;

    this.Page.Response.Write(valeur);

    }

     

     

     

    Salut,merci d'avoir répondu, alors j'ai tester comme tu as dit ( mais j'ai l'erreur suivante au déploiement :  Erreur 1 Le nom 'dataSet' n'existe pas dans le contexte actuel C:\Documents and Settings\Administrateur\Mes documents\Visual Studio 2005\Projects\WebPart4\WebPart4\WebPart4\WebPart4.cs 84 46 WebPart4)

     

    ce qui me parait normal puisque la methode selectOracleSrvRows a des paramètres donc quand on fait l'apel d'une méthode qui a des parametre on doit les rapeller non? mais si je lui met des parametres ,ça me dit qu'il n'existe pas dans le contexte actuel..

    mercredi 6 février 2008 07:48
  • j'ai tester ça :

     

    Code Snippet

    public DataSet SelectOracleSrvRows(string connection, string query)

    {

    DataSet dataset= null;

    OracleConnection conn = new OracleConnection(connection);

    OracleDataAdapter adapter = new OracleDataAdapter();

    adapter.SelectCommand = new OracleCommand(query, conn);

    adapter.Fill(dataset);

    return dataset;

    }

     

     

     

    protected override void CreateChildControls()

    {

    this.Controls.Clear();

    TreeView tree = new TreeView();

    this.Controls.Add(tree);

    TreeNode rootNode = new TreeNode("AQUITANIS");

    TreeNode firstNode = new TreeNode("Direction Générale");

    TreeNode secondNode = new TreeNode("Direction des ressources Humaines");

    TreeNode thirdNode = new TreeNode("Direction Financière");

    TreeNode fourthNode = new TreeNode("Direction de la Location");

    TreeNode fifthNode = new TreeNode("Direction du Patrimoine");

    tree.Nodes.Add(rootNode);

    rootNode.ChildNodes.Add(firstNode);

    rootNode.ChildNodes.Add(secondNode);

    rootNode.ChildNodes.Add(thirdNode);

    rootNode.ChildNodes.Add(fourthNode);

    rootNode.ChildNodes.Add(fifthNode);

    rootNode.SelectAction = TreeNodeSelectAction.None;

    firstNode.SelectAction = TreeNodeSelectAction.None;

    secondNode.SelectAction = TreeNodeSelectAction.None;

    thirdNode.SelectAction = TreeNodeSelectAction.None;

    fourthNode.SelectAction = TreeNodeSelectAction.None;

    fifthNode.SelectAction = TreeNodeSelectAction.None;

     

    string query = "select nom from intranet_employe where nom='XXXX';";

    string connection = "Data Source=titan_ulisp;User ID=intranet;Unicode=True;";

    DataSet ds = SelectOracleSrvRows(connection,query);

    string valeur = null;

    foreach (DataRow dr in ds.Tables[0].Rows)

    {

    valeur = dr["nom"] as string;

    this.Page.Response.Write(valeur);

    }

     

     

    la compilation se passe bien, mais j'ai toujours une erreur sur WSS.. la même erreur qui me hante.. mais c'est horrible parce que j'ai l'impression que ça ne tient a rien ... est-ce que je dois rajouter quelque chose dans le code de sharepoint pour qu'il se connecte à oracle? parce que si visual Studio se connecte a oracle, est-ce forcement cela veut dire que WSS peut le faire aussi?

    et aussi, la connection string que me procure VS ne contient pas de Mot de passe, alors est-ce que je laisse tel quel ou bien est-ce que je rajoute le MDP ?

    mercredi 6 février 2008 08:12
  •  

    Code Snippet

    public DataSet SelectOracleSrvRows(string connection, string query)

    {

    DataSet dataset= new Dataset();

     

    OracleConnection conn = new OracleConnection(connection);

    OracleDataAdapter adapter = new OracleDataAdapter();

    adapter.SelectCommand = new OracleCommand(query, conn);

    adapter.Fill(dataset);

    return dataset;

    }

     

     

     

    protected override void CreateChildControls()

    {

    this.Controls.Clear();

    TreeView tree = new TreeView();

    this.Controls.Add(tree);

    TreeNode rootNode = new TreeNode("AQUITANIS");

    TreeNode firstNode = new TreeNode("Direction Générale");

    TreeNode secondNode = new TreeNode("Direction des ressources Humaines");

    TreeNode thirdNode = new TreeNode("Direction Financière");

    TreeNode fourthNode = new TreeNode("Direction de la Location");

    TreeNode fifthNode = new TreeNode("Direction du Patrimoine");

    tree.Nodes.Add(rootNode);

    rootNode.ChildNodes.Add(firstNode);

    rootNode.ChildNodes.Add(secondNode);

    rootNode.ChildNodes.Add(thirdNode);

    rootNode.ChildNodes.Add(fourthNode);

    rootNode.ChildNodes.Add(fifthNode);

    rootNode.SelectAction = TreeNodeSelectAction.None;

    firstNode.SelectAction = TreeNodeSelectAction.None;

    secondNode.SelectAction = TreeNodeSelectAction.None;

    thirdNode.SelectAction = TreeNodeSelectAction.None;

    fourthNode.SelectAction = TreeNodeSelectAction.None;

    fifthNode.SelectAction = TreeNodeSelectAction.None;

     

    string query = "select nom from intranet_employe where nom='XXXXX';";

    string connection = "Data Source=titan_ulisp;User ID=intranet;Unicode=True;";

    DataSet ds = SelectOracleSrvRows(connection,query);

    string valeur = null;

    foreach (DataRow dr in ds.Tables[0].Rows)

    {

    valeur = dr["nom"] as string;

    this.Page.Response.Write(valeur);

    }

     

     

    Bon le déploiement se fait bien mais toujours l'erreur sur WSS...ça m'enerve il doit pas manquer grand chose..., Visual studio me genere un string connection quand il se connecte, est-ce que je l'utilise tel quel ou bien est-ce que je dois rajouter le MDP, car il ne le rajoute pas lui même( peut être question de sécurité? )

    et n'y a t-il pas quelque chose a configurer sur sharepoint pour qu'il accede a oracle? parce que si VS s'y connecte bien ça ne veut pas forcement dire que WSS aussi .. non?

     

    mercredi 6 février 2008 08:25
  •  

    Code Snippet

    public DataSet SelectOracleSrvRows(string connection, string query)

    {

    DataSet dataset= new Dataset();

     

    OracleConnection conn = new OracleConnection(connection);

    OracleDataAdapter adapter = new OracleDataAdapter();

    adapter.SelectCommand = new OracleCommand(query, conn);

    adapter.Fill(dataset);

    return dataset;

    }

     

     

     

    protected override void CreateChildControls()

    {

    this.Controls.Clear();

    TreeView tree = new TreeView();

    this.Controls.Add(tree);

    TreeNode rootNode = new TreeNode("AQUITANIS");

    TreeNode firstNode = new TreeNode("Direction Générale");

    TreeNode secondNode = new TreeNode("Direction des ressources Humaines");

    TreeNode thirdNode = new TreeNode("Direction Financière");

    TreeNode fourthNode = new TreeNode("Direction de la Location");

    TreeNode fifthNode = new TreeNode("Direction du Patrimoine");

    tree.Nodes.Add(rootNode);

    rootNode.ChildNodes.Add(firstNode);

    rootNode.ChildNodes.Add(secondNode);

    rootNode.ChildNodes.Add(thirdNode);

    rootNode.ChildNodes.Add(fourthNode);

    rootNode.ChildNodes.Add(fifthNode);

    rootNode.SelectAction = TreeNodeSelectAction.None;

    firstNode.SelectAction = TreeNodeSelectAction.None;

    secondNode.SelectAction = TreeNodeSelectAction.None;

    thirdNode.SelectAction = TreeNodeSelectAction.None;

    fourthNode.SelectAction = TreeNodeSelectAction.None;

    fifthNode.SelectAction = TreeNodeSelectAction.None;

     

    string query = "select nom from intranet_employe where nom='XXXXX';";

    string connection = "Data Source=titan_ulisp;User ID=intranet;Unicode=True;";

    DataSet ds = SelectOracleSrvRows(connection,query);

    string valeur = null;

    foreach (DataRow dr in ds.Tables[0].Rows)

    {

    valeur = dr["nom"] as string;

    this.Page.Response.Write(valeur);

    }

     

     

    Bon le déploiement se fait bien mais toujours l'erreur sur WSS...ça m'enerve il doit pas manquer grand chose..., Visual studio me genere un string connection quand il se connecte, est-ce que je l'utilise tel quel ou bien est-ce que je dois rajouter le MDP, car il ne le rajoute pas lui même( peut être question de sécurité? )

    et n'y a t-il pas quelque chose a configurer sur sharepoint pour qu'il accede a oracle? parce que si VS s'y connecte bien ça ne veut pas forcement dire que WSS aussi .. non?

    mercredi 6 février 2008 08:28
  • pourquoi je peux pas repondre??

    mercredi 6 février 2008 08:43
  • !!!!!!!!!!!!!!!c'est quoi ce bug

    mercredi 6 février 2008 08:51
  • ça bug le site!!! j'ai envoyé au moin 4 message mais il ne s'affiche pas ! alors j'ai pris une autre adresse lol :

     

    Code Snippet

    public DataSet SelectOracleSrvRows(string connection, string query)

    {

    DataSet dataset= new Dataset();

     

    OracleConnection conn = new OracleConnection(connection);

    OracleDataAdapter adapter = new OracleDataAdapter();

    adapter.SelectCommand = new OracleCommand(query, conn);

    adapter.Fill(dataset);

    return dataset;

    }

     

     

     

    protected override void CreateChildControls()

    {

    this.Controls.Clear();

    TreeView tree = new TreeView();

    this.Controls.Add(tree);

    TreeNode rootNode = new TreeNode("AQUITANIS");

    TreeNode firstNode = new TreeNode("Direction Générale");

    TreeNode secondNode = new TreeNode("Direction des ressources Humaines");

    TreeNode thirdNode = new TreeNode("Direction Financière");

    TreeNode fourthNode = new TreeNode("Direction de la Location");

    TreeNode fifthNode = new TreeNode("Direction du Patrimoine");

    tree.Nodes.Add(rootNode);

    rootNode.ChildNodes.Add(firstNode);

    rootNode.ChildNodes.Add(secondNode);

    rootNode.ChildNodes.Add(thirdNode);

    rootNode.ChildNodes.Add(fourthNode);

    rootNode.ChildNodes.Add(fifthNode);

    rootNode.SelectAction = TreeNodeSelectAction.None;

    firstNode.SelectAction = TreeNodeSelectAction.None;

    secondNode.SelectAction = TreeNodeSelectAction.None;

    thirdNode.SelectAction = TreeNodeSelectAction.None;

    fourthNode.SelectAction = TreeNodeSelectAction.None;

    fifthNode.SelectAction = TreeNodeSelectAction.None;

     

    string query = "select nom from intranet_employe where nom='XXXXX';";

    string connection = "Data Source=titan_ulisp;User ID=intranet;Unicode=True;";

    DataSet ds = SelectOracleSrvRows(connection,query);

    string valeur = null;

    foreach (DataRow dr in ds.Tables[0].Rows)

    {

    valeur = dr["nom"] as string;

    this.Page.Response.Write(valeur);

    }

     

     

    Bon le déploiement se fait bien mais toujours l'erreur sur WSS...ça m'enerve il doit pas manquer grand chose..., Visual studio me genere un string connection quand il se connecte, est-ce que je l'utilise tel quel ou bien est-ce que je dois rajouter le MDP, car il ne le rajoute pas lui même( peut être question de sécurité? )

    et n'y a t-il pas quelque chose a configurer sur sharepoint pour qu'il accede a oracle? parce que si VS s'y connecte bien ça ne veut pas forcement dire que WSS aussi .. non?

     

    mercredi 6 février 2008 08:53
  • ******!! ça bug trop j'ai envoyé au moin 4 message mais ils ne'affiche plus! on me censure? Sad

     

    Code Snippet

    public DataSet SelectOracleSrvRows(string connection, string query)

    {

    DataSet dataset= new Dataset();

     

    OracleConnection conn = new OracleConnection(connection);

    OracleDataAdapter adapter = new OracleDataAdapter();

    adapter.SelectCommand = new OracleCommand(query, conn);

    adapter.Fill(dataset);

    return dataset;

    }

     

     

     

    protected override void CreateChildControls()

    {

    this.Controls.Clear();

    TreeView tree = new TreeView();

    this.Controls.Add(tree);

    TreeNode rootNode = new TreeNode("AQUITANIS");

    TreeNode firstNode = new TreeNode("Direction Générale");

    TreeNode secondNode = new TreeNode("Direction des ressources Humaines");

    TreeNode thirdNode = new TreeNode("Direction Financière");

    TreeNode fourthNode = new TreeNode("Direction de la Location");

    TreeNode fifthNode = new TreeNode("Direction du Patrimoine");

    tree.Nodes.Add(rootNode);

    rootNode.ChildNodes.Add(firstNode);

    rootNode.ChildNodes.Add(secondNode);

    rootNode.ChildNodes.Add(thirdNode);

    rootNode.ChildNodes.Add(fourthNode);

    rootNode.ChildNodes.Add(fifthNode);

    rootNode.SelectAction = TreeNodeSelectAction.None;

    firstNode.SelectAction = TreeNodeSelectAction.None;

    secondNode.SelectAction = TreeNodeSelectAction.None;

    thirdNode.SelectAction = TreeNodeSelectAction.None;

    fourthNode.SelectAction = TreeNodeSelectAction.None;

    fifthNode.SelectAction = TreeNodeSelectAction.None;

     

    string query = "select nom from intranet_employe where nom='XXXXX';";

    string connection = "Data Source=titan_ulisp;User ID=intranet;Unicode=True;";

    DataSet ds = SelectOracleSrvRows(connection,query);

    string valeur = null;

    foreach (DataRow dr in ds.Tables[0].Rows)

    {

    valeur = dr["nom"] as string;

    this.Page.Response.Write(valeur);

    }

     

     

    Bon le déploiement se fait bien mais toujours l'erreur sur WSS...ça m'enerve il doit pas manquer grand chose..., Visual studio me genere un string connection quand il se connecte, est-ce que je l'utilise tel quel ou bien est-ce que je dois rajouter le MDP, car il ne le rajoute pas lui même( peut être question de sécurité? )

    et n'y a t-il pas quelque chose a configurer sur sharepoint pour qu'il accede a oracle? parce que si VS s'y connecte bien ça ne veut pas forcement dire que WSS aussi .. non?

    mercredi 6 février 2008 08:55
  •  

    pk ne puis-je plus poster?
    mercredi 6 février 2008 10:29
  • ??????????? je ne peux plus poster

     

    mercredi 6 février 2008 10:30
  •  

    Je ne peux plus poster !!
    mercredi 6 février 2008 10:30
  •  

    est-ce sur que l'on puisse connecter à distance une webpart à oracle?
    mercredi 6 février 2008 10:56
  • bug tjrs?

     

    mercredi 6 février 2008 15:53
  • Bug ! ADMIN!!

     

    mercredi 6 février 2008 15:54
  • Désolé pour les postes inutile, bref pour repartir sur de bonne base voilà où j'en suis :

     

    Pensant que la methode createChildcontrole pouvait poser des probleme, je me suis dit : mettons la methode de connection directement dans la methode createchildcontrole,

     

    résulta : toujours les même bug.

     

    En relisant le début de ce topic, il y a une chose que je n'avais pas fait : mettre WSS_medium dans le level trust de sharepoint, je me suis empressé de le faire pensant que ça allait marché mais malheuresement ça ne marche pas. j'ai même tester de mettre full mais sans succès...

    donc je me demande bien ce que je pourrais tester.. car la connection string je la récupère de VISUAL studio qui lui arrive bien à se connecter à la base..

    mon script de connection est bon, donc le problème vient de la configuration de WSS... mais je ne sais pas trop ce que je pourrais changer..

    J'ai encore besoin de vous... Smile

    mercredi 6 février 2008 20:33
  • J'ai cherché pour savoir si ajouter ma connection string dans le web.config pouvait changer quelque chose mais j'ai l'impression que non.. je suis vraiment blocker là .. je vois pas ce que je pourrais configurer dans WSS..

    jeudi 7 février 2008 08:03
  • Utilise le debugger et prends le temps de regarder tous les objets utilisés avant ta connexion. Si la connexion à Oracle n'est pas possible (parce que tu es en WSS_Minimal par exemple), ton code devrait lever une exception. Lors de tes tests tu n'as pas parlé de plantage... donc je me demande même si la connexion à la base se fait bien. A ta place, je regarderai tout se qui se trouve autour de ton objet Connection...

     

    Allez, je pense savoir d'où ça provient. Je n'ai pas vu d'appel à la méthode Open() de ton objet conn (je ne sais plus si ce n'est pas automatique avec les DataAdapters, mais ça vaut le coup de regarder).

     

    jete un coup d'oeil sur l'exemple du MSDN : http://msdn2.microsoft.com/en-us/library/system.data.oracleclient.oracledataadapter(VS.71).aspx

     

    je te parle de cette ligne là :

     

    Code Snippet
    Conn.Open();

     

     


    jeudi 7 février 2008 10:43
    Modérateur
  • En cherchant, j'ai pu lire qu'il fallait faire un provider? si oui comment fait-on? je ne sais pas quel piste dois-je suivre..Sad

    jeudi 7 février 2008 10:43
  • Merci d'avoir repondu, je t avoue stressé car je dois présenter quelque chose à mon tuteur demain et je n'ai rien ...

     

     

    Utilise le debugger et prends le temps de regarder tous les objets utilisés avant ta connexion. Si la connexion à Oracle n'est pas possible (parce que tu es en WSS_Minimal par exemple), ton code devrait lever une exception. Lors de tes tests tu n'as pas parlé de plantage... donc je me demande même si la connexion à la base se fait bien. A ta place, je regarderai tout se qui se trouve autour de ton objet Connection...

     

    je n'arrive pas à l'utiliser le debugeR... Tongue Tied , j'ai tester WSS_medium , et full et ça ne fonctionne pas..

    Pour moi la connection ne se fait pas..j'arrive à établir la connection avec VS 2005 mais avec WSS.

     

    Allez, je pense savoir d'où ça provient. Je n'ai pas vu d'appel à la méthode Open() de ton objet conn (je ne sais plus si ce n'est pas automatique avec les DataAdapters, mais ça vaut le coup de regarder).

     

    j'aurais bien aimer, mais j'ai fais un autre script avec conn.open() et je testai en mettant au fur et a mesure mon code en commentaire. La ligne qui fesait que WSS ne marchait plus était la conn.open() dans mon script.

     

    et sur le script actuel, c'est l'apelle de la fonction de connection qui fait planter, donc je pense bien que cela vient de la connection en elle même...

     

    N'y a t-il pas d'autre parametrage a effectuer au niveau de WSS ?

     

     

    jeudi 7 février 2008 11:15
  • Pour tester, je te conseille de faire un nouveau projet .NET (pas de sharepoint donc). Et tu mets dedans juste de quoi traiter ta requête SQL...

     

    Si ça marche pas c'est que tu ne fais pas correctement la connexion à la db...

     

    jeudi 7 février 2008 12:34
  •  

    Pour tester, je te conseille de faire un nouveau projet .NET (pas de sharepoint donc). Et tu mets dedans juste de quoi traiter ta requête SQL...

     

    Si ça marche pas c'est que tu ne fais pas correctement la connexion à la db...

     

     

    heu j'ai fais ce que tu m'a dit, quand je compile ça ouvre une petite page "form" et y a rien dedan, et à gauche je vois ma base de donnée avec les table et tout..

     

    Code Snippet

    using System;

    using System.Data;

    using System.Data.OracleClient;

    using System.Web;

    using System.Collections;

     

    /// <summary>

    /// Summary description for Class1

    /// </summary>

    public class Class1

    {

    public Class1()

    {

    }

    public DataSet SelectOracleSrvRows()

    {

    DataSet dataset = new DataSet();

    string connection = "Data Source=titan_ulisp;User ID=intranet;Unicode=True;";

    string query = "select nom from intranet_employe;";

    OracleConnection conn = new OracleConnection(connection);

    conn.open();

    OracleDataAdapter adapter = new OracleDataAdapter();

    adapter.SelectCommand = new OracleCommand(query, conn);

    adapter.Fill(dataset);

    return dataset;

    }

    public void main()

    {

    DataSet ds = SelectOracleSrvRows();

    string valeur = null;

    foreach (DataRow dr in ds.Tables[0].Rows)

    {

    valeur = dr["nom"] as string;

    this.Page.Response.Write(valeur);

    }

    }

    }

     

     

    jeudi 7 février 2008 13:10
  • mouai bon je test des script et celui là m'a donner une erreur :

     

    Code Snippet

    using System;

    using System.Collections.Generic;

    using System.Windows.Forms;

    using System.Data.OracleClient;

    using System.IO;

    using System.Web;

    using System.Collections;

    using System.Data;

    namespace WindowsApplication2

    {

    public class SQLConnexion

    {

    public static void Main()

    {

    string connection = "Data Source=titan_ulisp;User ID=intranet;Unicode=True;";

    string query = "select nom from intranet_employe;";

    DataSet dataset = new DataSet();

    try

    {

    OracleConnection conn = new OracleConnection(connection);

    conn.Open();

    Console.WriteLine("Etat de la connexion : ‡a marche" + conn.State);

    OracleDataAdapter adapter = new OracleDataAdapter();

    adapter.SelectCommand = new OracleCommand(query, conn);

    adapter.Fill(dataset);

    conn.Close();

    }

    catch (Exception e)

    {

    Console.WriteLine("L'erreur suivante a ‚t‚ rencontr‚e :" + e.Message);

    }

    string valeur = null;

    foreach (DataRow dr in dataset.Tables[1].Rows)

    {

    valeur = dr["nom"] as string;

    Console.Write(valeur);

    }

    }

    }

    }

     

     

    il me dit : Impossible de trouver la table 1. indexofoutofrange n'a pas été géré. alors est-ce que ce serait mon dataset qui ne se remplie pas? parce que normalement avec ce code , il devrait me dire si la connection marche ou pas..

    jeudi 7 février 2008 13:34
  •  

    Hey avec mon dernier script, j'ai mis des point d'arret et tout pour tester ,j'en ai mis sur la ligne

    conn.open()

    et un autre sur le adapter.fill(dataset)

    et quand je fais l'execution détaille avec f11, il va sur le conn.Open et il sort direct, il va pas sur la ligne adapter.fill(dataset), il va dans le Catch donc il y a une erreur au niveau de la connection !! ( enfin je pense)

    jeudi 7 février 2008 13:48
  •  

    je fais mon monologue mais je me dit que plsu je vous dis de détail, plus y a de chance que vous trouviez d'ou ça vient, alors nouvelle chose! j'ai rajouter password=XXX; a ma Chaîne de connection et la il ne va pas dans le catch tout de suite, la connection ne l'envoi pas dans le catch, il va jusqu'a la ligne :

    adapter.fill(dataset) et à partir de là il va dans le catch, il ne ferme pas la connection donc maintenant l'erreur n'est pas dans la connection mais dans le adapter.fill(dataset) ..

    vous pourriez pas me donner un autre moyen pour tester la récupération de donné que le dataset? ou alors si autre chose vous viens à l'esprit ^^

     

     

    d'ailleurs durant le mode debug, lorsque je passe sur ma variable conn.state ben l"etat c'est open, donc la connection est ouverte .

     

    l'erreur qu'il affiche dans le catch est :

    ORA-00911: Caractère non valide

    jeudi 7 février 2008 13:53
  • Bonne nouvelle dans le programme ça marche :

     

    je récupère bien les nom avec le débug quand je regarde la valeur de la variable.

     

    Si je vous dit de quoi ça vient vous aller me lyncher...c'est le point virgule dans ma requete...

     

    Mauvaise nouvelle ça marche quand même pas dans ma webpart, mais au moin la chaine de connection et tout est bonne...

     

    quelqun a une idée?

    jeudi 7 février 2008 14:33
  • Ben essaie de récuperer des strings dans ton programme. Une fois que t'y es arrivé, tu fais copier coller de ton code dans ton webpart où tu affiches tes String la où il faut... Je sais pas si ce que je dis est clair ^^

     

    jeudi 7 février 2008 15:41
  • heu nan j'ai pas compris lol, j'ai fais un copier coller du programme qui marche vers le code de ma webpart, mais quand je déploie ma webpart ba ça bug...

    y'aurais pas quelque chose d'autre que le trust level a modifier dans WSS?

    jeudi 7 février 2008 15:44
  • Aprilia quand tu dis récupéré des strings, t'entend quoi ?

    moi dans mon programme qui marche j'ai fais un copier coller de mon script de conection pour le mettre dans le code de mon webpart, mais j'ai l'impression que c'est pas ça que tu veux dire..

    Mais c'est trop bizard que mon script fonctionne et que ce même code dans la webpart ne fonctionne pas, ça doit venir de sharepoint non??je vous met les 2 codes :

     

    le programme :

     

    Code Snippet

    using System;

    using System.Collections.Generic;

    using System.Windows.Forms;

    using System.Data.OracleClient;

    using System.IO;

    using System.Web;

    using System.Collections;

    using System.Data;

    namespace WindowsApplication2

    {

    public class oracleConnexion

    {

    public static void Main()

    {

    string connection ="Data Source=titan_ulisp;User ID=intranet;password=mdp;Unicode=True;";

    string query ="SELECT nom FROM intranet_employe where nom='XXXX'";

    DataSet dataset = new DataSet();

    try

    {

    OracleConnection conn = new OracleConnection(connection);

    conn.Open();

    Console.WriteLine("Etat de la connexion : ‡a marche" + conn.State);

    OracleDataAdapter adapter = new OracleDataAdapter();

    adapter.SelectCommand = new OracleCommand(query, conn);

    adapter.Fill(dataset);

    /* OracleCommand comm = new OracleCommand(query, conn);

    OracleDataReader oreader = comm.ExecuteReader();

    while (oreader.Read())

    {

    Console.Write(oreader.GetOracleValue(0).ToString());

    }*/

    conn.Close();

     

    }

    catch (Exception e)

    {

    Console.WriteLine("L'erreur suivante a ‚t‚ rencontr‚e :" + e.Message);

    }

    string valeur = null;

    foreach (DataRow dr in dataset.Tables[0].Rows)

    {

    valeur = dr["nom"] as string;

    Console.Write(valeur);

    }

    }

    }

    }

     

     

     

    et le code de ma webpart :

     

    Code Snippet

    using System;

    using System.Runtime.InteropServices;

    using System.Web.UI;

    using System.Web.UI.WebControls;

    using System.Web.UI.WebControls.WebParts;

    using System.Xml.Serialization;

    using Microsoft.SharePoint;

    using Microsoft.SharePoint.WebControls;

    using Microsoft.SharePoint.WebPartPages;

    using System.Data;

    using System.Data.OracleClient;

    using System.Web;

    using System.Collections;

     

     

     

    namespace WebPart4

    {

     

    [Guid("0781047e-d071-48d9-9ce7-463997e752ab")]

    public class WebPart4 : System.Web.UI.WebControls.WebParts.WebPart

    {

     

    public WebPart4()

    {

    this.ExportMode = WebPartExportMode.All;

    }

    protected override void CreateChildControls()

    {

    this.Controls.Clear();

    TreeView tree = new TreeView();

    this.Controls.Add(tree);

    TreeNode rootNode = new TreeNode("AQUITANIS");

    TreeNode firstNode = new TreeNode("Direction Générale");

    TreeNode secondNode = new TreeNode("Direction des ressources Humaines");

    TreeNode thirdNode = new TreeNode("Direction Financière");

    TreeNode fourthNode = new TreeNode("Direction de la Location");

    TreeNode fifthNode = new TreeNode("Direction du Patrimoine");

    tree.Nodes.Add(rootNode);

    rootNode.ChildNodes.Add(firstNode);

    rootNode.ChildNodes.Add(secondNode);

    rootNode.ChildNodes.Add(thirdNode);

    rootNode.ChildNodes.Add(fourthNode);

    rootNode.ChildNodes.Add(fifthNode);

     

    rootNode.SelectAction = TreeNodeSelectAction.None;

    firstNode.SelectAction = TreeNodeSelectAction.None;

    secondNode.SelectAction = TreeNodeSelectAction.None;

    thirdNode.SelectAction = TreeNodeSelectAction.None;

    fourthNode.SelectAction = TreeNodeSelectAction.None;

    fifthNode.SelectAction = TreeNodeSelectAction.None;

     

    string connection ="Data Source=titan_ulisp;User ID=intranet;password=mdp;Unicode=True;";

    string query ="SELECT nom FROM intranet_employe where nom='XXX'";

    DataSet dataset = new DataSet();

    try

    {

    OracleConnection conn = new OracleConnection(connection);

    conn.Open();

    Console.WriteLine("Etat de la connexion : ça marche" + conn.State);

    OracleDataAdapter adapter = new OracleDataAdapter();

    adapter.SelectCommand = new OracleCommand(query, conn);

    adapter.Fill(dataset);

    conn.Close();

    }

    catch (Exception e)

    {

    Console.WriteLine("L'erreur suivante a été rencontrée :" + e.Message);

    }

    string valeur = null;

    foreach (DataRow dr in dataset.Tables[0].Rows)

    {

    valeur = dr["nom"] as string;

    TreeNode employe = new TreeNode(valeur);

    firstNode.ChildNodes.Add(employe);

    }

     

    }

    }

     

    }

     

     

    j'ai essayer de rajouter directement à l'abre pour voir, au cas ou ce serait l'affichage qui déconnerait mais même pas..

    Par contre avec la webpart , j'arrive pas a utiliser le mode debug, alors que avec le prog tout court j'y arrive...

    M'enfin si le script fonctionne et que la webpart non, il doit y avoir une manipulation à faire dans sharepoint ( n"hesitez pas a suggerer quelque chose qui vous paratrait évident, parce que c'est possible que je ne l'ai pas fais..)

    vendredi 8 février 2008 07:36

  • Au secours j'ai reussi à afficher l'erreur sur WSS !

     

    l'erreur est la suivante :

     

    L'erreur suivante a été rencontrée Tongue Tiedystem.Data.OracleClient requiert le logiciel client Oracle version 8.1.7 ou supérieure.

     

     

    Or j'ai bien d'installer un client oracle de version 9.  je c plus combien .. Donc Wss n'arrive pas à le trouver, qu'est-ce que je dois configurer pour qu'il le trouve?

    vendredi 8 février 2008 08:44
  • Le compte qui fait tourner ton site WSS n'a visiblement pas les droits sur le répertoire ORACLE_HOME. Il faut juste que tu rajoutes les droits au bon compte sur ce répertoire.

     

    Plus d'infos ici : http://dotnetjunkies.com/WebLog/rtgurskevik/archive/2005/01/19/45958.aspx

     

    vendredi 8 février 2008 10:57
    Modérateur
  • hm j'ai pas de ORACLE_HOME mais j'ai oracle/ora92 , et j'ai essayer de le déplacé et ...plus rien ne marchait lol même plus le serveur.. heuresement j'avias uen image e je l'ai restaurer , mais je réinstalle le provider oracle ainsi que le client là

     

    vendredi 8 février 2008 13:01
  • Pourquoi as tu essayé de le déplacer ? Modifie juste les droits sur ce répertoire et redémarre ton serveur.

     

    vendredi 8 février 2008 13:06
    Modérateur
  • ben parce que en fait ce dossier il est dans la partition D or je me suis dis que si sharepoint n'arrive pas y acceder c'est parce qu'il devrait être dans C , donc j'ai essayer de le déplacé et ça a tout fais planter..

    Bon mais là j'ai encore le même probleme j'ai installé le client et le provider et là c'est Visual studio qui me dit qu'il faut un clien de version 8.7 ou ultérieur alors que j'ai installé le client 9.2

    Quand je fais proprité sur les dossier, sécurité, j'ai mis controle total a Administreur ( sharepoint)

    et administrateurS (sharepoint) je sais pas pouquoi il y a au pluriel aussi... mais ça marche tjrs pas^^

     

    vendredi 8 février 2008 13:37
  • Hm j'ai un petit pb, j'ai creer un nouveau projet, j'ai fais un copier coller de mon ancien webpart et quand je le déploie sous WS je le retrouve pas..il apparait pas, il se déploie pas au bon endroit ou je sais pas  Tongue Tied

     

    vendredi 8 février 2008 13:48
  •  

    ça marche Big Smile Smile Smile

     

    voila maintenan je vais tenter de génére mon arbre, mais déjà me vient une question,

     

    comment est-ce que en C# je peux faire une requete SQL avec des parametre

     

    dans mon cas j'ai

     

    switch i

     

    case1 {service= DG} 

    case2 { service = DR}

     

    end

     

    et apres ma requete

     

    "select blabla from blabla where service = Mavariable "

    j'ai l'impression que ça va pas marcher...comment il savoir que c'est une variable?

     

    vendredi 8 février 2008 14:18
  • Tu te précipites un peu pour poser la question... tu as déjà la réponse sur une des pages MSDN dont on t'a parlé. 

     

    http://technet.microsoft.com/en-us/library/system.data.oracleclient.oracledataadapter.selectcommand(VS.80).aspx

     

    Il te suffit donc d'ajoute des Parameters à ton objet SelectCommand, et d'insérer un ":mon_parametre" dans ta requête.

     

    vendredi 8 février 2008 15:35
    Modérateur
  • Salut,

     

    bon j'ai reussi en fesant select blabla where nom = "' + nom+'"

     

    nouveau défi, réaliser l'interconnection de 2 webpart en moin d'une semaine, possible?

    en fait ce que je voudrais ce serais que lorsque l'on clique sur le nom d'un service, cela affiche les information des employe qui appartiennet à ce service.

    alors la partie présentation , requete et tout ça irait, c'est juste l'interconnection.

    Ou alors si cela est trop difficile, est-ce que ce serait plus simple de récuperer ces information dans une nouvelle page qui s'ouvrirait?

    Je sais pas du tout si c'est comme en php , mais si je pouvais faire comme un formulaire GET, je passe par l'url mes variable et je fais une requete SQl à l'aide de ces variable? ou un truc du genre.

     

     

    lundi 11 février 2008 10:08
  •  

    Bonjour,

     

    il est possible de connecter des WebParts entres elles (http://msdn2.microsoft.com/en-us/library/ms569191.aspx) mais je trouve celà un peu ambitieux compte tenu que tu débuts sur SharePoint et qu'il ne te reste qu'une semaine.

     

    Il peut en effet être plus simple pour toi d'avoir une seconde WebPart complètement décorellée de la première. Elle peut très bien aller reccupérer le nom de l'employé dans les paramètres de l'URL. Ta première WebPart n'aurait donc qu'à générer un lien permettant, lors d'un clic sur un employé, de relancer la page avec en paramètre ?EmployeeName=nom_employe.

     

    Ca te force à faire un refresh de la page, c'est certes un peu moins beau que la première solution, mais ça devrait être plus facile à réaliser / debugger.

    lundi 11 février 2008 12:29
    Modérateur
  • Merci pour ta réponse,je m'oriente donc vers la deuxième solution avec une questions :

     

    avec les tree, on peu creer des evenements lié au clic sur un noeud, comme par exemple l'ouverture d'une page.

    Par défaut ça ouvre une page qui ne contient rien.

     

    est-ce que ce que je vais dire est faisable :

     

    car j'aimerais creer une page en php qui récupère les paramètre de l'url.

    Mais ou est-ce je dois stocker cette page php?

    et je crois que rajouter l'action d'ouvrir une page ça se fait avec :

    TreeNodeSelectAction.

    mais il faut que je trouve ou et comment l'indiquer l'url, en passant les paramètre. 

     

     

    lundi 11 février 2008 12:40
  •  

    Ok, je me suis peut être mal exprimé :

     

    ton clic doit déclencher une sorte de refresh de la page courant. Je dis une sorte de refresh, car l'URL doit être modifiée entre temps pour contenir le paramètre dont tu as besoin.

     

    Exemple :

     

    ta page est http://mon_serveur/mapage.aspx.

     

    Ta WebPart de tree est placée sur cette page. Lors d'un clic sur un employé, l'utilisateur est redirigé sur la page http://mon_serveur/mapage.aspx?employename=nom_employe

     

    Toujours sur cette page, une seconde WebPart est placée. Elle est chargée d'afficher le détail de l'employé. Elle commencerait par lire les paramètres de l'URL : HttpContext.Current.Request.Url.Query.Elle y trouvera employename=nom_employe. A toi de lancer ta requête à partir d'ici.

    lundi 11 février 2008 12:53
    Modérateur
  •  

    Hm,

     

    et le Href=_blank ça marche ? C'est possible que cela ouvre une nouvelle page plutôt que de remplacer ma page principal?

     

    HttpContext.Current.Request.Url.Query

     

    ça je peux utiliser comme ça :

     

    var =  HttpContext.Current.Request.Url.Query ?

     

    et si j'ai plusieurs paramètre à passer dans l'url?

     

    et est-ce que en C# je peux générer du code HTML comme des retour à la ligne ou des barre de séparation commes les <hr> ?

     

    lundi 11 février 2008 13:26
  •  

    HttpContext.Current.Request.Url.Query te remonte tous les paramètres sous forme de chaîne de caractères. Tes paramètres sont séparés par le caractère "&", donc tu peux découper ta string (regarde la méthode Split de ton objet string). Du coup, pas de problème pour passer plusieurs paramètres.

     

    Tu peux également générer de l'HTML. Soit ta WebPart utilise la méthode

    protected override void RenderWebPart(System.Web.UI.HtmlTextWriter writer), auquel cas il te suffit de faire writer.Write("<hr>") pour faire un <hr>. Doit elle utilise la même méthode que celle que tu as déjà utilisé, auquel cas tu n'as qu'à ajouter des contrôles LiteralControl (qui contiennent du texte comme... <hr> par exemple).

     

     

    lundi 11 février 2008 14:01
    Modérateur
  •  

    Hm j'ai un pb, j'ai créer

    TreeNode Sousservice et

    TreeNode employe = new TreeNode(valeur);

     

    manuellement et a l'aide de 2 boucles je change les valeurs pour avoir mon organigramme.

    car c'est la valeur qui donne le texte afficher.

     

    Seulement si je fais un traitement sur le treeNode Sousservice ça le fait pour tout les service

     

    donc si je veux faire employe.navigateUrl = http://www.killer-clubbing.com

     

    ben je ne peux pas renseigner de parametre différent dans l'url puisque ce sera tout le temps la même URL pour chacun de mes employé...

     

     

     

    lundi 11 février 2008 14:31
  •  

    Je ne suis pas sûr de comprendre ton problème. La propriété NavigateUrl est propre à chaque noeud, donc rien ne t'empêche d'indiquer une valeur différente pour chaque service.
    lundi 11 février 2008 14:43
    Modérateur
  • hm ouai escuse moi je vais essayer de mieux m'exprimer :

     

    TreeNode rootNode = new TreeNode("AQUITANIS");

    TreeNode firstNode = new TreeNode("Direction Générale");

    TreeNode secondNode = new TreeNode("Direction des ressources Humaines");

    TreeNode thirdNode = new TreeNode("Direction Financière");

    TreeNode fourthNode = new TreeNode("Direction de la Location");

    TreeNode fifthNode = new TreeNode("Direction du Patrimoine");

     

    là j'ai mes grand service, il ont bien un nom différent

     

    Maintenant mes sousservice sur lequel je voudrais pouvoir cliquer ça donnerais quelquechose comme ça :

     

     

    TreeNode sousservice = new TreeNode("service informatique");

    TreeNode sousservice = new TreeNode("service comptabilité");

    TreeNode sousservice = new TreeNode("service sécurité");

    TreeNode sousservice = new TreeNode("service blabla");

     

     

    Ce sont tous des sousservice, donc si j'applique une proprité a un sousservice ce sera la même pour tout mes service...

    Etant donne que je gènère par une boucle ces sousservice, en fesant varier la chaine de caractère, et ensuite via une seconde boucle imbriqué je rajouter les employé qui sont du même type :

     

    treeNode employe = new TreeNode ( "dupond");

    treeNode employe = new TreeNode ( "martin");

    treeNode employe = new TreeNode ( "alphonse");

    treeNode employe = new TreeNode ( "durand");

    lundi 11 février 2008 14:50
  •  

    Et puis j'ai beau faire sousservice.navigateurl = http://www. une url.com;

    ben ça me genere une erreur sur sharepoint.

    lundi 11 février 2008 15:00
  • En fait je dis n'importe quoi

    si je fais ça :

     

    Sousservice.NavigateUrl = "/Documents%20partages/Forms/AllItems.aspx";

     

    dans la boucle, ben ça marche, je peux avoir une url différente pour chacun de mes noeud, par contre ça marche quand je prend une url du site sharepoint comme mes documents partagé, au dessus, mais si je met une url entière comme http://www.pour-ou-contre.com  ben ça fonctionne pas...

    lundi 11 février 2008 15:27
  • J'ai un petit problème, l'url ou je rajoute ma variable est la suivante :

     

    http://sharepoi-w4g4se/pages%20web/orga.aspx?PageView=Shared&serv=DG

     

     

    mais quand je la récupère sur WSS elle devient :

     

    ?PageView=Shared&serv=DGShared&serv

     

    elle se mélange avec Shared&serv .. mais je vois pas pk.. pi ça me gene pour mon découpage car la je voudrais récupére le DG, mais des fois c'est 3 lettre et parfois 4 .. donc je suis un peu blocker

    mardi 12 février 2008 07:46
  •  

    mardi 12 février 2008 08:20