public ConnectionsForm(IDataItem Node)
        {
            InitializeComponent();

            try
            {
                emg                                    = GetSession();
                mpWindows                              = emg.ManagementPacks.GetManagementPack("Microsoft.Windows.Library", "31bf3856ad364e35", new Version());
                mpAssetCore                            = emg.ManagementPacks.GetManagementPack("SMCenter.AssetManagement.Core", "75b45bd6835084b1", new Version());
                mpNetworkAssetLibrary                  = emg.ManagementPacks.GetManagementPack("SMCenter.NetworkAssetManagement.Library", "75b45bd6835084b1", new Version());
                mpNetworkLibrary                       = emg.GetManagementPack("System.NetworkManagement.Library", "31bf3856ad364e35", new Version());
                mpCMLibrary                            = emg.ManagementPacks.GetManagementPack("Microsoft.SystemCenter.ConfigurationManager", "31bf3856ad364e35", new Version());
                classModule                            = emg.EntityTypes.GetClass("SMCenter.Module", mpNetworkAssetLibrary);
                classWindowsComputer                   = emg.EntityTypes.GetClass("SMCenter.WindowsComputer", mpNetworkAssetLibrary);
                classDeployedComputer                  = emg.EntityTypes.GetClass("SMCenter.DeployedComputer", mpNetworkAssetLibrary);
                classComputerNetworkAdapter            = emg.EntityTypes.GetClass("Microsoft.Windows.ComputerNetworkAdapter", mpWindows);
                classNode                              = emg.EntityTypes.GetClass("SMCenter.Node", mpNetworkAssetLibrary);
                classNodePort                          = emg.EntityTypes.GetClass("SMCenter.NodePort", mpNetworkAssetLibrary);
                classLocation                          = emg.EntityTypes.GetClass("SMCenter.Location", mpAssetCore);
                classDevice                            = emg.EntityTypes.GetClass("SMCenter.Device", mpNetworkAssetLibrary);
                classDeviceNetworkAdapter              = emg.EntityTypes.GetClass("SMCenter.Device.NetworkAdapter", mpNetworkAssetLibrary);
                classPatchPanel                        = emg.EntityTypes.GetClass("SMCenter.PatchPanel", mpNetworkAssetLibrary);
                classPatchPanelPort                    = emg.EntityTypes.GetClass("SMCenter.PatchPanelPort", mpNetworkAssetLibrary);
                relComputerRunsWindowsComputer         = emg.EntityTypes.GetRelationshipClass("Microsoft.SystemCenter.ConfigurationManager.DeployedComputerRunsWindowsComputer", mpCMLibrary);
                relComputerHostsComputerNetworkAdapter = emg.EntityTypes.GetRelationshipClass("Microsoft.Windows.ComputerHostsComputerNetworkAdapter", mpWindows);
                relLoctoLoc                            = emg.EntityTypes.GetRelationshipClass("SMCenter.LocationContainsChildLocation", mpAssetCore);
                //relNetworkAdapterHasChildNetworkAdapter = emg.EntityTypes.GetRelationshipClass("SMCenter.NetworkAdapterHasChildNetworkAdapter", mpNetworkAssetLibrary);
                relChildNetworkAdapterRefParentNetworkAdapter = emg.EntityTypes.GetRelationshipClass("SMCenter.ChildNetworkAdapterRefParentNetworkAdapter", mpNetworkAssetLibrary);
                //relLocationContainsConfigItem = emg.EntityTypes.GetRelationshipClass("SMCenter.LocationContainsConfigItem", mpAssetCore);
                relConfigItemRefLocation        = emg.EntityTypes.GetRelationshipClass("SMCenter.ConfigItemRefLocation", mpAssetCore);
                relNodeComposedOfNetworkAdapter = emg.EntityTypes.GetRelationshipClass("System.NetworkManagement.NodeComposedOfNetworkAdapter", mpNetworkLibrary);
                relDeviceHostNetworkAdapter     = emg.EntityTypes.GetRelationshipClass("SMCenter.DeviceHostsNetworkAdapter", mpNetworkAssetLibrary);

                this.ConnectionsTreeView.Items.Clear();
                this.CabelsTreeView.Items.Clear();
                TreeViewItem treeitem = new TreeViewItem();

                LogFile = new LogFile(@"C:\LogFile.txt", true);

                CablesTree = new CablesTree(emg, relChildNetworkAdapterRefParentNetworkAdapter, classModule, relConfigItemRefLocation, LogFile);

                //Get CurrentNode
                Guid CurrentNodeId = (Guid)Node["$Id$"];
                EMO = emg.EntityObjects.GetObject <EnterpriseManagementObject>(CurrentNodeId, ObjectQueryOptions.Default);

                this.txtTargetObject.Text = EMO.FullName;

                Guid Id_NA = new Guid();
                if (EMO.IsInstanceOf(classModule))
                {
                    this.CabelsTreeView.Items.Add(CablesTree.CreateTreeViewItem(CurrentNodeId));
                }
                else if (EMO.IsInstanceOf(classWindowsComputer))
                {
                    #region
                    var T_objects = emg.EntityObjects.GetRelationshipObjectsWhereSource <EnterpriseManagementObject>(CurrentNodeId, relComputerHostsComputerNetworkAdapter, DerivedClassTraversalDepth.None, TraversalDepth.OneLevel, ObjectQueryOptions.Default);
                    foreach (EnterpriseManagementRelationshipObject <EnterpriseManagementObject> relobj in T_objects)
                    {
                        Id_NA = relobj.TargetObject.Id;
                    }
                    this.CabelsTreeView.Items.Add(CablesTree.CreateTreeViewItem(Id_NA));

                    treeitem = ConnectionsTree.Create(Id_NA, emg);
                    if (treeitem != null)
                    {
                        this.ConnectionsTreeView.Items.Add(treeitem);
                    }
                    #endregion
                }
                else if (EMO.IsInstanceOf(classDeployedComputer))
                {
                    #region
                    ObservableCollection <Guid> GuidCol = new ObservableCollection <Guid>();
                    var T_objects = emg.EntityObjects.GetRelationshipObjectsWhereSource <EnterpriseManagementObject>(CurrentNodeId, relComputerRunsWindowsComputer, DerivedClassTraversalDepth.None, TraversalDepth.OneLevel, ObjectQueryOptions.Default);
                    foreach (EnterpriseManagementRelationshipObject <EnterpriseManagementObject> relobj in T_objects)
                    {
                        GuidCol.Add(relobj.TargetObject.Id);
                    }
                    //Для каждого WindowsComputer ищем свой NetworkAdapter
                    foreach (Guid id in GuidCol)
                    {
                        T_objects = emg.EntityObjects.GetRelationshipObjectsWhereSource <EnterpriseManagementObject>(id, relComputerHostsComputerNetworkAdapter, DerivedClassTraversalDepth.None, TraversalDepth.OneLevel, ObjectQueryOptions.Default);
                        foreach (EnterpriseManagementRelationshipObject <EnterpriseManagementObject> relobj in T_objects)
                        {
                            Id_NA = relobj.TargetObject.Id;
                        }
                        this.CabelsTreeView.Items.Add(CablesTree.Go(Id_NA));
                        treeitem = ConnectionsTree.Create(Id_NA, emg);
                        if (treeitem != null)
                        {
                            this.ConnectionsTreeView.Items.Add(treeitem);
                        }
                    }
                    #endregion
                }
                else if (EMO.IsInstanceOf(classNode))
                {
                    #region
                    ObservableCollection <Guid> GuidCol = new ObservableCollection <Guid>();
                    var T_objects = emg.EntityObjects.GetRelationshipObjectsWhereSource <EnterpriseManagementObject>(CurrentNodeId, relNodeComposedOfNetworkAdapter, DerivedClassTraversalDepth.None, TraversalDepth.OneLevel, ObjectQueryOptions.Default);
                    foreach (EnterpriseManagementRelationshipObject <EnterpriseManagementObject> relobj in T_objects)
                    {
                        GuidCol.Add(relobj.TargetObject.Id);
                    }
                    foreach (Guid id in GuidCol)
                    {
                        this.CabelsTreeView.Items.Add(CablesTree.Go(id));
                        treeitem = ConnectionsTree.Create(id, emg);
                        if (treeitem != null)
                        {
                            this.ConnectionsTreeView.Items.Add(treeitem);
                        }
                    }
                    #endregion
                }
                else if (EMO.IsInstanceOf(classNodePort))
                {
                    this.CabelsTreeView.Items.Add(CablesTree.Go(CurrentNodeId));
                    treeitem = ConnectionsTree.Create(CurrentNodeId, emg);
                    if (treeitem != null)
                    {
                        this.ConnectionsTreeView.Items.Add(treeitem);
                    }
                }
                else if (EMO.IsInstanceOf(classDevice))
                {
                    #region
                    var T_objects = emg.EntityObjects.GetRelationshipObjectsWhereSource <EnterpriseManagementObject>(CurrentNodeId, relDeviceHostNetworkAdapter, DerivedClassTraversalDepth.None, TraversalDepth.OneLevel, ObjectQueryOptions.Default);
                    foreach (EnterpriseManagementRelationshipObject <EnterpriseManagementObject> relobj in T_objects)
                    {
                        Id_NA = relobj.TargetObject.Id;
                    }
                    this.CabelsTreeView.Items.Add(CablesTree.Go(Id_NA));
                    treeitem = ConnectionsTree.Create(Id_NA, emg);
                    if (treeitem != null)
                    {
                        this.ConnectionsTreeView.Items.Add(treeitem);
                    }
                    #endregion
                }
                else if (EMO.IsInstanceOf(classDeviceNetworkAdapter))
                {
                    this.CabelsTreeView.Items.Add(CablesTree.Go(CurrentNodeId));
                    treeitem = ConnectionsTree.Create(CurrentNodeId, emg);
                    if (treeitem != null)
                    {
                        this.ConnectionsTreeView.Items.Add(treeitem);
                    }
                }
            }
            catch (Exception ex)
            {
                System.Windows.MessageBox.Show("Initialize procedure error : " + ex.Message, "Service Manager", MessageBoxButton.OK, MessageBoxImage.Error);
                this.Close();
            }
        }
        private void NodesTreeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs <object> e)
        {
            try
            {
                TreeViewItem SelectedItem = (TreeViewItem)e.NewValue;

                //TextBox
                this.txtTargetObject.Text = SelectedItem.Header.ToString();
                this.txtLocation.Text     = "";

                TreeViewItem NewItem        = new TreeViewItem();
                Guid         SelectedItemId = new Guid(SelectedItem.Tag.ToString());
                this.ConnectionsTreeView.Items.Clear();
                this.CabelsTreeView.Items.Clear();
                ObservableCollection <TreeViewItem> ColCables      = new ObservableCollection <TreeViewItem>();
                ObservableCollection <TreeViewItem> ColConnections = new ObservableCollection <TreeViewItem>();
                if (SelectedItem.Header.ToString().Contains("PORT"))
                {
                    this.CabelsTreeView.Items.Add(CablesTree.Go(SelectedItemId));
                    TreeViewItem treeitem = ConnectionsTree.Create(SelectedItemId, emg);
                    if (treeitem != null)
                    {
                        this.ConnectionsTreeView.Items.Add(treeitem);
                    }
                }
                else
                {
                    var items = emg.EntityObjects.GetRelationshipObjectsWhereSource <EnterpriseManagementObject>(SelectedItemId, relNodeComposedOfNetworkAdapter, DerivedClassTraversalDepth.None, TraversalDepth.OneLevel, ObjectQueryOptions.Default);
                    foreach (EnterpriseManagementRelationshipObject <EnterpriseManagementObject> relobj in items)
                    {
                        Guid Guid_NetworkAdapter = relobj.TargetObject.Id;
                        ColCables.Add(CablesTree.CreateTreeViewItem(Guid_NetworkAdapter));

                        NewItem = ConnectionsTree.Create(Guid_NetworkAdapter, emg);
                        if (NewItem != null)
                        {
                            ColConnections.Add(NewItem);
                        }
                    }
                    //Сортировка
                    var sortedCables = from item in ColCables orderby item.Header select item;
                    foreach (var i in sortedCables)
                    {
                        TreeViewItem TVitem = (TreeViewItem)i;
                        this.CabelsTreeView.Items.Add(TVitem);
                    }
                    if (ColConnections.Count > 0)
                    {
                        var sortedConnections = from item in ColConnections orderby item.Header select item;
                        foreach (var i in sortedConnections)
                        {
                            TreeViewItem TVitem = (TreeViewItem)i;
                            if (TVitem != null)
                            {
                                this.ConnectionsTreeView.Items.Add(TVitem);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                System.Windows.MessageBox.Show("NodesTreeView_SelectedItemChanged procedure error : " + ex.Message, "Service Manager", MessageBoxButton.OK, MessageBoxImage.Error);
                this.Close();
            }
        }