MMC 3.0 custom property page AD users and computers

Messages postés
61
Date d'inscription
dimanche 30 octobre 2005
Statut
Membre
Dernière intervention
2 juillet 2009
-
Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
-
Bonjour à tous,

voilà je suis occupé de développer une property page pour le snap in ad users and computers, j'ai donc fini le developpement de ma page de properties

je l'ajoute au snap in computer management pas de soucis tout fonctionne mais quand j'essaie de l'ajouter à ad users and computers là ca ne marche pas ma page n'apparaît pas

quelqu'un pourrait-il m'aider c'est très urgent

merci d'avance
Marc

16 réponses

Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
25
salut,

déjà comment fais-tu pour l'ajouter au snapin computer management ? peut être faut il mettre ta page de propriété dans le même dossier que le .msc ?

ShareVB
Messages postés
61
Date d'inscription
dimanche 30 octobre 2005
Statut
Membre
Dernière intervention
2 juillet 2009

bonjour,
Merci pour l'intérêt porté a ma question, j'ai reésolu le problème pour l'ajout de ma page de propriété j'avais une faute de frappe dans mon extendsnode

Maintenant j'ai un autre problème qui se situe au niveau de mon objet shareddataitem apparemment il est null alors que je l'instancie bien comme il faut

voila le bout de code ou je l'instancie

sharedDataItem = newSharedDataItem(@"DSOBJECTNAMES");
this.SharedData.Add(sharedDataItem);

si il faut je peux mettre le reste du code aussi
quelqu'un pourrait il m'aider ?

merci d'avance
Marc
Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
25
salut,

euh, un peu plus de code ne ferait pas de mal...mais es-tu sûr que ce n'est pas SharedData qui est null ?

ShareVB
Messages postés
61
Date d'inscription
dimanche 30 octobre 2005
Statut
Membre
Dernière intervention
2 juillet 2009

bonjour voici mon code en c#,
Le problème se situe au niveau du shareddataitem je pense (qui doit surement être null) :

1ere classe :
using System;
using System.Text;
using System.Configuration.Install;
using System.ComponentModel;
using System.Security.Permissions;
using System.Windows.Forms;
using Microsoft.ManagementConsole;
using Microsoft.ManagementConsole.Advanced;
namespace EzMmcExtensionPropertyPage1
{
 
    /// <summary>
    /// RunInstaller attribute - Allows the .Net framework InstallUtil.exe to install the assembly.
    /// SnapInInstaller class - Installs snap-in for MMC.
    /// </summary>
    [RunInstaller(true)]
    publicclass InstallUtilSupport : SnapInInstaller
    {
    }
 
    /// <summary>
    /// Property sheet extension for  aduc snap-in.
    /// </summary>
    [SnapInSettings("{1A64DD4E-1C06-42c2-A0C7-45233E7E67DA}",
           DisplayName = "- Extension for Sap Property Sheet Sample",
           Description = "Adds a Property Page to Aduc")]
    [ExtendsNodeType("{bf967aba-0de6-11d0-a285-00aa003049e2}")]
    publicclass ExtensionToPropertySheet : PropertySheetExtension
    {
        private SharedDataItem sharedDataItem;
 
        public ExtensionToPropertySheet()
        {
            sharedDataItem = new SharedDataItem(@"DSOBJECTNAMES");
            this.SharedData.Add(sharedDataItem);
        }
 
        /// <summary>
        /// Initialization notification.
        /// </summary>
        protectedoverridevoid OnInitialize()
        {
            //sharedDataItem = new SharedDataItem(@"CFSTR_DSOBJECTNAMES");
            //this.SharedData.Add(sharedDataItem);
        }
 
        /// <summary>
        /// Virtual method that is called to get the extension pages. 
        /// </summary>
        /// Page collection.

        protectedoverridevoid OnAddPropertyPages(PropertyPageCollection propertyPageCollection)
        {
            sapPropertyPage PropertyPage = new sapPropertyPage(sharedDataItem);
            propertyPageCollection.Add(PropertyPage);
        }
 
    }
}

2e classe qui herite de property page
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.ManagementConsole;
using Microsoft.ManagementConsole.Advanced;
using System.ComponentModel;
 
namespace EzMmcExtensionPropertyPage1
{
    publicclass sapPropertyPage : PropertyPage
    {
      
            private ucSapData ucSap= null;
            private SharedDataItem sharedDataItem;
 
            public sapPropertyPage(SharedDataItem parentSharedDataItem)
            {
                sharedDataItem = parentSharedDataItem;
                this.Title = "SAP's data  ";
                ucSap = new ucSapData(this);
                this.Control = ucSap;
            }
 
           
            protectedoverridevoid OnInitialize()
            {
                base.OnInitialize();
               
                ucSap.RefreshData(sharedDataItem,(ResultNode)this.ParentSheet.SelectionObject);
            }
 
          
            protectedoverridebool OnApply()
            {
                if(this.Dirty)
                {
                    if(ucSap.CanApplyChanges())
                    {
                        ucSap.UpdateData(sharedDataItem);
                    }
                    else
                    {
                        returnfalse;
                    }
                }
                returntrue;
            }
 
            protectedoverridebool OnOK()
            {
                returnthis.OnApply();
            }
 
            protectedoverridebool QueryCancel()
            {
                returntrue;
            }
 
            protectedoverridevoid OnCancel()
            {
                ucSap.RefreshData(sharedDataItem,(ResultNode)this.ParentSheet.SelectionObject);
            }
 
            protectedoverridevoid OnDestroy()
            {
            }
 
        }
    }

3e classe :
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using Microsoft.ManagementConsole;
 
namespace EzMmcExtensionPropertyPage1
{
    public partial class ucSapData : UserControl
    {
        private sapPropertyPage propertypage;
 
        public ucSapData(sapPropertyPage parentPropertyPage)
        {
            InitializeComponent();
            propertypage = parentPropertyPage;
            gbModify.Parent = this;
            gbSelection.Parent = this;
            gbSelection.Dock = DockStyle.Fill;
            gbModify.Dock = DockStyle.Fill;
            gbModify.Visible = false;
            gbSelection.Visible = true;
            tableLayoutPanel1.RowCount = 3;
            tableLayoutPanel1.Parent = gbModify;
            tableLayoutPanel1.Dock = DockStyle.Top;
           
            for(int i = 0; i < 5; i++)
            {
                ucTextbox uc = new ucTextbox(i.ToString());
                tableLayoutPanel1.Controls.Add(uc);
            }
        }
 
        publicvoid RefreshData(SharedDataItem sharedDataItem, ResultNode userNode)
        {
            try
            {
                // afficher les données recupérée de l'AD
                foreach(ucTextbox uctb in tableLayoutPanel1.Controls)
                {
                    uctb.FieldName = userNode.DisplayName.ToString();
                }
                propertypage.Dirty = false;
            }
            catch(Exception ex )
            {
                MessageBox.Show(ex.Message);
            }
           
        }
        publicvoid UpdateData(SharedDataItem sharedDataItem)
        {                                                           // update Active directory
        // sharedDataItem.SetData(Encoding.Unicode.GetBytes(this.MachineName.Text));
            byte[] arData = sharedDataItem.GetData();
            //modif
            propertypage.Dirty = false;
        }
        publicbool CanApplyChanges()
        {
        //a modifier
            returntrue;
        }
 
        privatevoid btnOk_Click_1(object sender, EventArgs e)
        {
            gbModify.Visible = true;
            gbSelection.Visible = false;
            //update active directory
        }
 
        privatevoid btnBack_Click(object sender, EventArgs e)
        {
            gbModify.Visible = false;
            gbSelection.Visible = true;
        }
 
        privatevoid checkedListBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            DataSet ds = new DataSet();
        }
    }
}
 
<!-- END TEMPLATE: bbcode_code -->Voilà
merci d'avance
Marc
Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
25
salut,

ce que je te conseilles, c'est dans ton projet qui contient ces classes, de choisir dans les propriétés : "Start external program", de spécifier le chemin complet de ton msc qui utilise ton extension puis de démarrer ton appli ce qui va lancer le msc et quand l'exception va arriver, tu pourras savoir d'où ca vient...tu peux même mettre des brek point pour debug...

sinon, je suspecterais bien parentSharedDataItem d'être null à la construction de ta classe sapPropertyPage...

ShareVB
Messages postés
61
Date d'inscription
dimanche 30 octobre 2005
Statut
Membre
Dernière intervention
2 juillet 2009

bonjour le problème se situe bien au niveau du shareddataitem qui est null maintenant je ne vois pas trop comment faire pour corriger ca

aurais-tu une idée ?

merci d'avance
Marc
Messages postés
61
Date d'inscription
dimanche 30 octobre 2005
Statut
Membre
Dernière intervention
2 juillet 2009

j'ai  essayé ta ta solution pour le debug mais ca ne passe pas il me demande un .exe et non un .msc

maintenant  comme tu dis le problème se situe au niveau du shareddataitem

quelqu'un aurait-il une idée +? ca m'aiderait vraiment bcp 

merci d'avance
Marc
Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
25
salut,

euh, ben, alors tu peux mettre "mmc.exe c:\windows\system32\le_fichier.msc"...

sinon, je parlais de parentSharedDataItem pas de shareddataitem qui est null...en tout cas, après un new, une variable ne peut pas être nul en condition du système non saturé...

ShareVB
Messages postés
61
Date d'inscription
dimanche 30 octobre 2005
Statut
Membre
Dernière intervention
2 juillet 2009

bonjour en chipottant un peu il s'avère que c'est la méthode  this.parentsheet.selectionobject() qui me renvoit null

quelqu'un aurait il une idée pour corriger ça ?

merci d'avance
Marc
Messages postés
61
Date d'inscription
dimanche 30 octobre 2005
Statut
Membre
Dernière intervention
2 juillet 2009

ma propriété this.parentsheet.selectionobject  plutôt ;)

merci d'avance
Marc
Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
25
salut,

je suppose que tu as vu ceci : http://msdn2.microsoft.com/en-us/library/ms692746.aspx

ca dit que selectionobject doit être définit dans OnSelectionChanged de ton MmcListView ...

ShareVB
Messages postés
61
Date d'inscription
dimanche 30 octobre 2005
Statut
Membre
Dernière intervention
2 juillet 2009

le problème est que j'ai juste developpé une property page et je recupere mes données des property page existante dans aduc

j'arrive a recuperer le nom du user tant quez  c'est la premiere chose que je demande , une fois que je demande plusieurs champ la ca plante et plus rien ne s'affiche dans mes champs créé à cet effet

quelu'un aurait il une idée ?

merci à vous
Marc
Messages postés
61
Date d'inscription
dimanche 30 octobre 2005
Statut
Membre
Dernière intervention
2 juillet 2009

bonjour à tous,


ca fait un petit temps que j'ai posté sur ce post mais j'étais sur un autre projet,


Maintenant je reprend m mon projet sur ma mmc et voila mon soucis je voudrais recupérer tout les champs ad d'un user même ceux ou il n'y a pas de valeurs dedans


quelqu'un aurait il une idée pour faire cela pour l'instant il me renvoie juste les champs ad contenant une valeurs mais pas les vides


 

merci d'avance
Marc
Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
25
salut,

ben faut que tu lises la "classes" d'un user ad...dans le dossier Schemas...et que tu loops dessus pour avoir toutes les propriétés (avec surement un try catch)

ShareVB
Messages postés
61
Date d'inscription
dimanche 30 octobre 2005
Statut
Membre
Dernière intervention
2 juillet 2009

bonjour Merci pour ton attention portée à mon message

mais je ne vois pas comment lire la "classe" d'un user AD

Pourrais tu m'aiguiller

merci d'avance
Marc
Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
25
salut,

avec la propriété SchemaEntry du directoryentry d'un user : http://msdn2.microsoft.com/fr-fr/library/system.directoryservices.directoryentry.schemaentry(VS.80).aspx

ShareVB