How to Change Properties in EPlan?
In general,I think there are tow ways:
1、Offline programe in Console Application
1 public void Execute() 2 { 3 Console.WriteLine("Update Article Properties Demo"); 4
5 //Start P8
6 EplApplication eplApp = new EplApplication(); 7 eplApp.Init("", true, true); 8
9 Project prj = null; 10 try
11 { 12 using (LockingStep ls = new LockingStep()) 13 { 14 // 1. Open a project
15 Console.WriteLine("Opening project..."); 16 eplApp.OpenProjectDlg(); 17
18 ProjectManager prjMngr = new ProjectManager(); 19 if (prjMngr.CurrentProject == null) 20 { 21 Console.WriteLine("No project is open. Finished."); 22 return; 23 } 24 prj = prjMngr.CurrentProject; 25 Console.WriteLine("Project '{0}' is open.", prj.ProjectFullName); 26
27 // 2. Get all terminal strips in the project
28 DMObjectsFinder fndr = new DMObjectsFinder(prj); 29 TerminalStrip[] arrTermStrips = fndr.GetTerminalStrips(null); 30
31 using (UndoStep us = (new UndoManager()).CreateUndoStep()) 32 { 33 // 3. Change a property
34 Console.WriteLine("Modifying terminal strips..."); 35 foreach (TerminalStrip ts in arrTermStrips) 36 { 37 if (ts.ManualPlacementType != DocumentTypeManager.DocumentType.Circuit 38 && ts.ManualPlacementType != DocumentTypeManager.DocumentType.CircuitSingleLine) continue; 39
40 string sNewValue = string.Format("{0} - Change at {1}", (new Random()).Next(), DateTime.Now.ToShortTimeString()); 41
42 MessageBox.Show(sNewValue.ToString()); 43
44 MultiLangString mls = new MultiLangString(); 45 mls.AddString((new Languages()).GuiLanguage.GetNumber(), sNewValue); 46 ts.Properties.FUNC_TEXT = mls; 47 } 48
49 // revert changes
50 Console.WriteLine("Reverting changes in project..."); 51 us.DoUndo(); 52 } 53
54 Console.WriteLine("Done."); 55 } 56 } 57 catch (System.Exception ex) 58 { 59 Console.WriteLine("ERROR. " + ex.Message); 60 } 61 finally
62 { 63 if (prj != null) prj.Close(); 64
65 GC.Collect(); 66 GC.WaitForPendingFinalizers(); 67
68 Console.WriteLine("Press any key."); 69 Console.ReadKey(); 70
71 eplApp.Exit(); 72 } 73 }
2、Online programe via EventListerner in Eplan.Action.Addin
EventListerner class:
1 public class SystemEventListerner 2 { 3 [DeclareEventHandler("onActionStart.String.*")] 4 public long MyEventHandlerFunction(String strActionName) 5 { 6 try
7 { 8 System.Windows.Forms.MessageBox.Show("Action " + strActionName + " was started!", 9 "MyEventHandler"); 10 } 11 catch (System.InvalidCastException exc) 12 { 13 String strExc = exc.Message; 14 System.Windows.Forms.MessageBox.Show("Parameter error: " + strExc, "MyEventHandler"); 15 } 16
17 return 0; 18
19 } 20 }
Addin Class:
1 #region IEplAddIn Members
2
3 public bool OnExit() 4 { 5 return true; 6 } 7
8 SystemEventListerner _lstnr = null; 9
10 public bool OnInit() 11 { 12 _lstnr = new SystemEventListerner(); 13 _lstnr.MyEventHandlerFunction(Action.NAME); 14
15 return true; 16 } 17
18 public bool OnInitGui() 19 { 20 Menu m = new Menu(); 21
22 uint id = m.GetPersistentMenuId("System messages"); 23
24 //menu item
25 id = m.AddMainMenu("Example", Menu.MainMenuName.eMainMenuUtilities, "Example #1", Action.NAME, Action.DESCR, 1); 26
27 return true; 28 } 29
30 public bool OnRegister(ref bool bLoadOnStart) 31 { 32 //bLoadOnStart = false; // this prevents addin intialization (OnInit, OnInitGui) when P8 starts; not usefull
33 return true; 34 } 35
36 public bool OnUnregister() 37 { 38 _lstnr = null; 39 return true; 40 } 41
42 #endregion
Action class:
1 public bool Execute(ActionCallingContext oActionCallingContext) 2 { 3 try
4 { 5 using (LockingStep ls = new LockingStep()) 6 { 7 // 1. Get all terminal strips in the project
8 SelectionSet oSelSet = new SelectionSet(); 9 Project oProj = oSelSet.GetCurrentProject(true); 10
11 DMObjectsFinder fndr = new DMObjectsFinder(oProj); 12 TerminalStrip[] arrTermStrips = fndr.GetTerminalStrips(null); 13
14 using (UndoStep us = (new UndoManager()).CreateUndoStep()) 15 { 16 // 2. Change a property
17 Console.WriteLine("Modifying terminal strips..."); 18 foreach (TerminalStrip ts in arrTermStrips) 19 { 20 if (ts.ManualPlacementType != DocumentTypeManager.DocumentType.Circuit 21 && ts.ManualPlacementType != DocumentTypeManager.DocumentType.CircuitSingleLine) continue; 22
23 string sNewValue = string.Format("{0} - Change at {1}", (new Random()).Next(), DateTime.Now.ToShortTimeString()); 24
25 MessageBox.Show(sNewValue.ToString()); 26
27 MultiLangString mls = new MultiLangString(); 28 mls.AddString((new Languages()).GuiLanguage.GetNumber(), sNewValue); 29 ts.Properties.FUNC_TEXT = mls; 30 } 31
32 // revert changes 33 //Console.WriteLine("Reverting changes in project...");
34 us.DoUndo(); 35 } 36
37 Console.WriteLine("Done."); 38 } 39 } 40 catch (System.Exception ex) 41 { 42 //Console.WriteLine("ERROR. " + ex.Message);
43 } 44 finally
45 { 46 //if (prj != null) prj.Close();
47
48 GC.Collect(); 49 GC.WaitForPendingFinalizers(); 50
51 //Console.WriteLine("Press any key."); 52 //Console.ReadKey(); 53
54 //eplApp.Exit();
55 } 56
57 return true; 58 }
if any question,welcome you to comment...