Autor Beitrag
Henri
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25



BeitragVerfasst: Sa 08.07.17 19:50 
Hallo Leute,

ich habe ein Stress mit einem C#-Code(Plugin.cs), vielleicht kann jemandem mir helfen, es geht
um eine Erweiterung eines Programms.
Aber habe ich einen Code, der die ähnliche Aufgabe macht, dies lauft gut.
Dieser Code ermöglicht die Erstellung von Unterordnern in einem Vaterordner, mit Hilfe einer Taste.
D,h. wenn man auf der Taste druckt, wird unter dem selektierten Vaterordner (ok_Vater) die Unterordner(ok_Kinder)
Erstellt.

ok_Vater ist der Vater Ordnerklasse
ok_Kinder ist das Kind Ordnerklasse

Aber diesmal habe ich einen Vaterordner mit 5 Kinderordner aber diesmal sollte unter
den selektieren Kinderordner die Unterordner erstellen.

Also Wenn ich irgendwo unklar war, bitte einfach eine Frage stellen.
Wie ich schon meinte zeige euch den laufenden Code und seine XML-Konfigurationsdatei.
ich habe nicht den Code der Klasse MainMenuButtonControl() ist nicht so wichtig
ec_1 et ec_2 sind diejenige, die die Ordner erstellen dürfen

1-Plugin.cs
ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
namespace CreateNewFolder
{
    class Plugin : Nscale.Imaf.UI.Plugin.ResourceCommandPluginBase
    {
        #region Fields
        public static RoutedUICommand CreateNewProjectFolderCommand = new RoutedUICommand("Create a new projekt folder""CreateNewProjectFolderCommand"typeof(Plugin));
        PluginUICommandDescriptor CreateNewProjectFolderDescriptor;

        private RepositoryFolder parent;
        private bool executePermission = false;

        IList<CustomPermissionDefinition> customPermissions = new List<CustomPermissionDefinition>();

        ConfigurationData data = new ConfigurationData();
        #endregion

        #region Properties

        public override string Name
        {
            get { return "CreateNewProjectFolderCommand"; }
        }

        public override string Description
        {
            get { return "This plugin creates a new projectfolder"; }
        }

        public override string Vendor
        {
            get { return "Techno"; }
        }

        public override IEnumerable<ICommand> HandledCommands
        {
            get
            {
                yield return CreateNewProjectFolderCommand;
            }
        }


        #endregion

        #region Methods

        public override void Initialize()
        {
            base.Initialize();

            if (Session.Instance.IsDisconnecting)//Skip this if Disconnecting
                return;

            //XML Deserialize
            data = null;
            string path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\Configuration.xml";

            if (File.Exists(path))
            {
                System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(ConfigurationData));

                TextReader reader = new StreamReader(path);
                try
                {
                    data = (ConfigurationData)serializer.Deserialize(reader);
                }
                finally { reader.Close(); }
            }
            else
                data = new ConfigurationData("ok_Vater""ok_Kinder", String.Empty, new List<string>() { "ec_1""ec_2" }, new List<string>());

            //System.Xml.Serialization.XmlSerializer deserializer = new System.Xml.Serialization.XmlSerializer(typeof(ConfigurationData));
            //TextWriter writer = new StreamWriter(path);
            //try
            //{
            //    deserializer.Serialize(writer, data);
            //}
            //finally { writer.Close(); }

            if (Session.Instance.IsConnected)
            {
                var connector = Session.Instance.GetALConnector();
                try
                {
                    IList<string> groupIDs = connector.ACSession.SessionGroupIds;
                    IList<PrincipalEntity> groupEntities = connector.GetPrincipalEntities(groupIDs, true);
                    List<string> groupNames = groupEntities.Select(group => ((Group)group).Name).ToList<string>();

                    foreach (string groupName in groupNames)
                    {
                        if (data.ExecutePermissions.Contains(groupName))
                            executePermission = true;
                    }
                }
                finally { connector.Release(); }
            
            }
        }

        void CreateNewakte_Initialize()
        {
            if (Session.Instance.CurrentDocumentAreaName == null)
                return;

            var alCon = Session.Instance.GetALConnector();
            try
            {
                RepositoryFolder root = RepositoryFolder.GetDocumentAreaRootFolder(Session.Instance.CurrentDocumentAreaName, false);

                string nql = "Where objectclass='" + data.ParentFolderObjectclass + "'";
                if (data.ParentFolderDisplayname != String.Empty)
                    nql += " and displayname='" + data.ParentFolderDisplayname + "'";

                Resources result = alCon.GetRepositoryResources(nql, false, root, ""false);
                if (result.Count > 0)
                {
                    parent = result[0as RepositoryFolder;
                }
            }
            catch (Exception exc)
            { 
            
            }
            finally { alCon.Release(); }
        }

        void NewakteButton_Click(object sender, RoutedEventArgs e)
        {
            if (parent == null && Session.Instance.IsConnected)
                CreateNewakte_Initialize();

            if (parent != null)
            {
                Dictionary<stringobject> properties = new Dictionary<stringobject>();
                properties.Add("displayname""Akte in Erstellung " + DateTime.Now.ToShortTimeString());
                RepositoryFolder newFolder = parent.CreateFolder(data.NewFolderObjectclass, properties, false);

                Application.Current.Dispatcher.BeginInvoke((Action)delegate
                {
                    System.Windows.Window w = UISession.Instance.InvokeProperties(UISession.Instance.GetActiveWindow(), newFolder, false);
                });
            }
            else
                ModalDialog.MessageBox(ResizeMode.NoResize, MessageBoxIcon.Error, "Fehler beim Erstellen!""Es konnte kein 'Akten'-Ordner gefunden werden.\nBitte melden Sie sich neu im Cockpit an oder melden Sie sich bei Ihrem Administrator"nullnew List<DialogButtonDescription>() { new DialogButtonDescription(null, DialogButtons.Ok, Visibility.Visible, true) }, "", UISession.Instance.GetActiveWindow());
        }

        public override void ExtendUIObject(object uiObject, string objectResourceKey, string settingContext, System.Windows.Window parentWindow)
        {
            if (objectResourceKey == "ndt_MainWindowToolBar" && executePermission && data.DocumentAreas.Contains(Session.Instance.CurrentDocumentAreaName))
            {
                MainMenuButtonControl btn = new MainMenuButtonControl();
                btn.NewakteButton.Click += new RoutedEventHandler(NewakteButton_Click);
                //btn.NewakteButton.Command = CreateNewProjectFolderCommand;
                btn.NewakteButton.ToolTip = "Neue Akte erstellen";

                ToolBarTray tray = uiObject as ToolBarTray;
                ToolBar toolbar = tray.ToolBars[0];
                toolbar.Items.Add(btn);
                
            }
        }
        #endregion
    }
}






Moderiert von user profile iconTh69: Topic aus C# - Die Sprache verschoben am So 09.07.2017 um 08:29


Zuletzt bearbeitet von Henri am So 09.07.17 12:24, insgesamt 3-mal bearbeitet
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4076
Erhaltene Danke: 845

Win7
C++, C# (VS 2015/17)
BeitragVerfasst: So 09.07.17 07:39 
Hallo Henri,

sowohl der Titel, deine Beschreibung als auch dein Code sind nicht aussagekräftig genug, um dir hier konkrete Hilfe anbieten zu können.

Es wäre gut, wenn du diese noch mal editierst und die relevanten Infos zur Verfügung stellst (insb. mit welcher Methode du nicht weiterkommst und welches konkrete Problem du hast).


PS: Da es sich wohl um ein WPF-Projekt handelt, habe ich dieses Thema entsprechend verschoben.
Henri Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25



BeitragVerfasst: So 09.07.17 10:03 
Hi Th69,

ich habe die andere Code veröffentlicht um nachzuvollziehen, eigenlich habe ich nur ein Problem mit dem plugin.cs
Wenn betimmte Frage gibt, frag bitte doch.

Moderiert von user profile iconTh69: Vollzitat entfernt.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4076
Erhaltene Danke: 845

Win7
C++, C# (VS 2015/17)
BeitragVerfasst: So 09.07.17 11:04 
Dann solltest du dich direkt an Ceyoniq wenden, denn hier im Forum wirst du wahrscheinlich keinen Entwickler finden, der mit NScale arbeitet.