{"id":7980,"date":"2015-03-16T18:26:40","date_gmt":"2015-03-17T01:26:40","guid":{"rendered":"https:\/\/blogs.plm.automation.siemens.com\/t5\/Solid-Edge-Blog\/Handling-Solid-Edge-Events\/ba-p\/294232"},"modified":"2026-03-26T07:17:51","modified_gmt":"2026-03-26T11:17:51","slug":"handling-solid-edge-events","status":"publish","type":"post","link":"https:\/\/blogs.sw.siemens.com\/solidedge\/handling-solid-edge-events\/","title":{"rendered":"Handling Solid Edge Events"},"content":{"rendered":"<p><P>Solid Edge provides a wide range of COM event sets that notify us when certain things occur. In this article, I will discuss how you can attach to these events from .NET. Prior to .NET, handling COM events was rather straightforward. It&#8217;s a little tricker in .NET but still completely possible as you&#8217;ll see.<\/P><P>For this article, I will be focusing on most popular Solid Edge event set, <STRONG>ISEApplicationEvents<\/STRONG>.<\/P><P>From .NET, we have two approaches available for connecting to COM events.<\/P><OL><LI>Delegate Event Model<\/LI><LI>Connection Point Model<\/LI><\/OL><P><U><STRONG>Delegate Event Model<\/STRONG><\/U><\/P><P>The delegate event model is typically more natural to .NET developers. This approach allows you to handle specific events rather than every event that an event set exposes.<\/P><P>If you open the Object Browser and search for <EM><STRONG>ISEApplicationEvents<\/STRONG><\/EM>, you will see the raw interface definition. This raw interface is not what we need in the delegate event model.<\/P><P><IMG src=\"https:\/\/siemensplm.i.lithium.com\/t5\/image\/serverpage\/image-id\/12154iAF9E500C8AB32AD1\/image-size\/original?v=mpbl-1&amp;px=-1\" title=\"ObjectBrowser_ISEApplicationEvents.jpg\" border=\"0\" alt=\"ObjectBrowser_ISEApplicationEvents.jpg\" \/><\/P><P>There is a hidden class that is generated by the type library importer named <EM><STRONG>ISEApplicationEvents_Event<\/STRONG> <\/EM>that we need to leverage in this approach.&nbsp;In order to see the hidden class&nbsp;<EM><STRONG>ISEApplicationEvents_Event<\/STRONG><\/EM>, modify the Object Browser settings as shown below to <EM><STRONG>Show Hidden Types And Members<\/STRONG><\/EM>.<\/P><P><IMG src=\"https:\/\/siemensplm.i.lithium.com\/t5\/image\/serverpage\/image-id\/12153i4D31A312FE7EC259\/image-size\/original?v=mpbl-1&amp;px=-1\" title=\"ShowHiddenTypesAndMembers.jpg\" border=\"0\" alt=\"ShowHiddenTypesAndMembers.jpg\" \/><\/P><P>With the Object Browser settings in place, now search for&nbsp;<EM><STRONG>ISEApplicationEvents_Event<\/STRONG>.&nbsp;<\/EM><\/P><P><IMG src=\"https:\/\/siemensplm.i.lithium.com\/t5\/image\/serverpage\/image-id\/12155iAA94908DED5BF28A\/image-size\/original?v=mpbl-1&amp;px=-1\" title=\"ObjectBrowser_ISEApplicationEvents_Event.jpg\" border=\"0\" alt=\"ObjectBrowser_ISEApplicationEvents_Event.jpg\" \/><\/P><P>Now that we are aware that&nbsp;<EM><STRONG>ISEApplicationEvents_Event<\/STRONG> <\/EM>exists, we can leverage it with the following sample code. Please note that the code below is for demonstration purposes only and does not handle situations like when the&nbsp;BeforeQuit event is raised.<\/P><P><EM><STRONG>*Note that the&nbsp;ISEApplicationEvents_Event class will not be available in the code editor intellisense since it is a hidden class. You will have to manually type the full name and it will resolve.<\/STRONG><\/EM><\/P><P><STRONG>Visual Basic &#8211; Delegate Event Model Example<\/STRONG><\/P><PRE>Imports System<br \/>\nImports System.Runtime.InteropServices<br \/>\nImports System.Windows.Forms<\/p>\n<p>Namespace EventTest<br \/>\n    Partial Public Class Form1<br \/>\n        Inherits Form<\/p>\n<p>        Private _application As SolidEdgeFramework.Application<br \/>\n        Private _applicationEvents As SolidEdgeFramework.ISEApplicationEvents_Event<\/p>\n<p>        Public Sub New()<br \/>\n            InitializeComponent()<br \/>\n        End Sub<\/p>\n<p>        Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs)<br \/>\n            &#8216; Connect to Solid Edge.<br \/>\n            _application = DirectCast(Marshal.GetActiveObject(&#8220;SolidEdge.Application&#8221;), SolidEdgeFramework.Application)<\/p>\n<p>            &#8216; Connect to application events.<br \/>\n            _applicationEvents = CType(_application.ApplicationEvents, SolidEdgeFramework.ISEApplicationEvents_Event)<br \/>\n            AddHandler _applicationEvents.AfterDocumentSave, AddressOf _applicationEvents_AfterDocumentSave<br \/>\n            AddHandler _applicationEvents.BeforeDocumentSave, AddressOf _applicationEvents_BeforeDocumentSave<br \/>\n        End Sub<\/p>\n<p>        Private Sub _applicationEvents_AfterDocumentSave(ByVal theDocument As Object)<br \/>\n            &#8216; Handle AfterDocumentSave.<br \/>\n        End Sub<\/p>\n<p>        Private Sub _applicationEvents_BeforeDocumentSave(ByVal theDocument As Object)<br \/>\n            &#8216; Handle BeforeDocumentSave.<br \/>\n        End Sub<\/p>\n<p>        Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As FormClosingEventArgs)<br \/>\n            &#8216; Disconnect to application events.<br \/>\n            RemoveHandler _applicationEvents.BeforeDocumentSave, AddressOf _applicationEvents_BeforeDocumentSave<br \/>\n            RemoveHandler _applicationEvents.AfterDocumentSave, AddressOf _applicationEvents_AfterDocumentSave<br \/>\n            _applicationEvents = Nothing<br \/>\n        End Sub<br \/>\n    End Class<br \/>\nEnd Namespace<\/PRE><P><STRONG>C# &#8211; Event Delegate Model Example<\/STRONG><\/P><PRE>using System;<br \/>\nusing System.Runtime.InteropServices;<br \/>\nusing System.Windows.Forms;<\/p>\n<p>namespace EventTest<br \/>\n{<br \/>\n    public partial class Form1 : Form<br \/>\n    {<br \/>\n        private SolidEdgeFramework.Application _application;<br \/>\n        private SolidEdgeFramework.ISEApplicationEvents_Event _applicationEvents;<\/p>\n<p>        public Form1()<br \/>\n        {<br \/>\n            InitializeComponent();<br \/>\n        }<\/p>\n<p>        private void Form1_Load(object sender, EventArgs e)<br \/>\n        {<br \/>\n            \/\/ Connect to Solid Edge.<br \/>\n            _application = (SolidEdgeFramework.Application)Marshal.GetActiveObject(&#8220;SolidEdge.Application&#8221;);<\/p>\n<p>            \/\/ Connect to application events.<br \/>\n            _applicationEvents = (SolidEdgeFramework.ISEApplicationEvents_Event)_application.ApplicationEvents;<br \/>\n            _applicationEvents.AfterDocumentSave += _applicationEvents_AfterDocumentSave;<br \/>\n            _applicationEvents.BeforeDocumentSave += _applicationEvents_BeforeDocumentSave;<br \/>\n        }<\/p>\n<p>        void _applicationEvents_AfterDocumentSave(object theDocument)<br \/>\n        {<br \/>\n            \/\/ Handle AfterDocumentSave.<br \/>\n        }<\/p>\n<p>        void _applicationEvents_BeforeDocumentSave(object theDocument)<br \/>\n        {<br \/>\n            \/\/ Handle BeforeDocumentSave.<br \/>\n        }<\/p>\n<p>        private void Form1_FormClosing(object sender, FormClosingEventArgs e)<br \/>\n        {<br \/>\n            \/\/ Disconnect to application events.<br \/>\n            _applicationEvents.BeforeDocumentSave -= _applicationEvents_BeforeDocumentSave;<br \/>\n            _applicationEvents.AfterDocumentSave -= _applicationEvents_AfterDocumentSave;<br \/>\n            _applicationEvents = null;<br \/>\n        }<br \/>\n    }<br \/>\n}<\/PRE><P><U><STRONG>Connection Point Model<\/STRONG><\/U><\/P><P>The Connection Point Model is a more raw, manual approach to handling events. It involves having a class implement an event interface, ISEApplicationEvents in this case. This means you will be handling every event that a particular event set raises.<\/P><P>In order to do this from .NET, we will need to leverage the <EM><STRONG>IConnectionPointContainer<\/STRONG><\/EM> and <EM><STRONG>IConnectionPoint<\/STRONG><\/EM> interfaces from the <EM><STRONG>System.Runtime.InteropServices.ComTypes<\/STRONG><\/EM> namespace.<\/P><P><STRONG>Visual Basic &#8211; Connection Point Model Example<\/STRONG><\/P><PRE>Option Infer On<\/p>\n<p>Imports System<br \/>\nImports System.Runtime.InteropServices<br \/>\nImports System.Runtime.InteropServices.ComTypes<br \/>\nImports System.Windows.Forms<\/p>\n<p>Namespace EventTest<br \/>\n    Partial Public Class Form1<br \/>\n        Inherits Form<br \/>\n        Implements SolidEdgeFramework.ISEApplicationEvents<\/p>\n<p>        Private _application As SolidEdgeFramework.Application<br \/>\n        Private _connectionPoint As IConnectionPoint<br \/>\n        Private _cookie As Integer<\/p>\n<p>        Public Sub New()<br \/>\n            InitializeComponent()<br \/>\n        End Sub<\/p>\n<p>        Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs)<br \/>\n            &#8216; Connect to Solid Edge.<br \/>\n            _application = DirectCast(Marshal.GetActiveObject(&#8220;SolidEdge.Application&#8221;), SolidEdgeFramework.Application)<\/p>\n<p>            ConnectEvents()<br \/>\n        End Sub<\/p>\n<p>        Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As FormClosingEventArgs)<br \/>\n            DisconnectEvents()<br \/>\n        End Sub<\/p>\n<p>        Private Sub ConnectEvents()<br \/>\n            &#8216; Get the event GUID.<br \/>\n            Dim typeGuid = GetType(SolidEdgeFramework.ISEApplicationEvents).GUID<\/p>\n<p>            &#8216; Get a reference to the IConnectionPointContainer.<br \/>\n            Dim container As IConnectionPointContainer = DirectCast(_application, IConnectionPointContainer)<\/p>\n<p>            &#8216; Lookup the IConnectionPoint.<br \/>\n            container.FindConnectionPoint(typeGuid, _connectionPoint)<\/p>\n<p>            &#8216; Advise the sink.<br \/>\n            _connectionPoint.Advise(Me, _cookie)<br \/>\n        End Sub<\/p>\n<p>        Private Sub DisconnectEvents()<br \/>\n            &#8216; Unadvise the sink.<br \/>\n            _connectionPoint.Unadvise(_cookie)<\/p>\n<p>            &#8216; Clear variables.<br \/>\n            _cookie = 0<br \/>\n            _connectionPoint = Nothing<br \/>\n        End Sub<\/p>\n<p>        #Region &#8220;ISEApplicationEvents&#8221;<\/p>\n<p>        Public Sub AfterActiveDocumentChange(ByVal theDocument As Object)<br \/>\n        End Sub<\/p>\n<p>        Public Sub AfterCommandRun(ByVal theCommandID As Integer)<br \/>\n        End Sub<\/p>\n<p>        Public Sub AfterDocumentOpen(ByVal theDocument As Object)<br \/>\n        End Sub<\/p>\n<p>        Public Sub AfterDocumentPrint(ByVal theDocument As Object, ByVal hDC As Integer, ByRef ModelToDC As Double, ByRef Rect As Integer)<br \/>\n        End Sub<\/p>\n<p>        Public Sub AfterDocumentSave(ByVal theDocument As Object)<br \/>\n        End Sub<\/p>\n<p>        Public Sub AfterEnvironmentActivate(ByVal theEnvironment As Object)<br \/>\n        End Sub<\/p>\n<p>        Public Sub AfterNewDocumentOpen(ByVal theDocument As Object)<br \/>\n        End Sub<\/p>\n<p>        Public Sub AfterNewWindow(ByVal theWindow As Object)<br \/>\n        End Sub<\/p>\n<p>        Public Sub AfterWindowActivate(ByVal theWindow As Object)<br \/>\n        End Sub<\/p>\n<p>        Public Sub BeforeCommandRun(ByVal theCommandID As Integer)<br \/>\n        End Sub<\/p>\n<p>        Public Sub BeforeDocumentClose(ByVal theDocument As Object)<br \/>\n        End Sub<\/p>\n<p>        Public Sub BeforeDocumentPrint(ByVal theDocument As Object, ByVal hDC As Integer, ByRef ModelToDC As Double, ByRef Rect As Integer)<br \/>\n        End Sub<\/p>\n<p>        Public Sub BeforeDocumentSave(ByVal theDocument As Object)<br \/>\n        End Sub<\/p>\n<p>        Public Sub BeforeEnvironmentDeactivate(ByVal theEnvironment As Object)<br \/>\n        End Sub<\/p>\n<p>        Public Sub BeforeQuit()<br \/>\n        End Sub<\/p>\n<p>        Public Sub BeforeWindowDeactivate(ByVal theWindow As Object)<br \/>\n        End Sub<\/p>\n<p>        #End Region<br \/>\n    End Class<br \/>\nEnd Namespace<\/PRE><P><STRONG>C# &#8211; Connection Point Model Example<\/STRONG><\/P><PRE>using System;<br \/>\nusing System.Runtime.InteropServices;<br \/>\nusing System.Runtime.InteropServices.ComTypes;<br \/>\nusing System.Windows.Forms;<\/p>\n<p>namespace EventTest<br \/>\n{<br \/>\n    public partial class Form1 : Form, SolidEdgeFramework.ISEApplicationEvents<br \/>\n    {<br \/>\n        private SolidEdgeFramework.Application _application;<br \/>\n        private IConnectionPoint _connectionPoint;<br \/>\n        private int _cookie;<\/p>\n<p>        public Form1()<br \/>\n        {<br \/>\n            InitializeComponent();<br \/>\n        }<\/p>\n<p>        private void Form1_Load(object sender, EventArgs e)<br \/>\n        {<br \/>\n            \/\/ Connect to Solid Edge.<br \/>\n            _application = (SolidEdgeFramework.Application)Marshal.GetActiveObject(&#8220;SolidEdge.Application&#8221;);<\/p>\n<p>            ConnectEvents();<br \/>\n        }<\/p>\n<p>        private void Form1_FormClosing(object sender, FormClosingEventArgs e)<br \/>\n        {<br \/>\n            DisconnectEvents();<br \/>\n        }<\/p>\n<p>        private void ConnectEvents()<br \/>\n        {<br \/>\n            \/\/ Get the event GUID.<br \/>\n            var typeGuid = typeof(SolidEdgeFramework.ISEApplicationEvents).GUID;<\/p>\n<p>            \/\/ Get a reference to the IConnectionPointContainer.<br \/>\n            IConnectionPointContainer container = (IConnectionPointContainer)_application;<\/p>\n<p>            \/\/ Lookup the IConnectionPoint.<br \/>\n            container.FindConnectionPoint(ref typeGuid, out _connectionPoint);<\/p>\n<p>            \/\/ Advise the sink.<br \/>\n            _connectionPoint.Advise(this, out _cookie);<br \/>\n        }<\/p>\n<p>        private void DisconnectEvents()<br \/>\n        {<br \/>\n            \/\/ Unadvise the sink.<br \/>\n            _connectionPoint.Unadvise(_cookie);<\/p>\n<p>            \/\/ Clear variables.<br \/>\n            _cookie = 0;<br \/>\n            _connectionPoint = null;<br \/>\n        }<\/p>\n<p>        #region ISEApplicationEvents<\/p>\n<p>        public void AfterActiveDocumentChange(object theDocument)<br \/>\n        {<br \/>\n        }<\/p>\n<p>        public void AfterCommandRun(int theCommandID)<br \/>\n        {<br \/>\n        }<\/p>\n<p>        public void AfterDocumentOpen(object theDocument)<br \/>\n        {<br \/>\n        }<\/p>\n<p>        public void AfterDocumentPrint(object theDocument, int hDC, ref double ModelToDC, ref int Rect)<br \/>\n        {<br \/>\n        }<\/p>\n<p>        public void AfterDocumentSave(object theDocument)<br \/>\n        {<br \/>\n        }<\/p>\n<p>        public void AfterEnvironmentActivate(object theEnvironment)<br \/>\n        {<br \/>\n        }<\/p>\n<p>        public void AfterNewDocumentOpen(object theDocument)<br \/>\n        {<br \/>\n        }<\/p>\n<p>        public void AfterNewWindow(object theWindow)<br \/>\n        {<br \/>\n        }<\/p>\n<p>        public void AfterWindowActivate(object theWindow)<br \/>\n        {<br \/>\n        }<\/p>\n<p>        public void BeforeCommandRun(int theCommandID)<br \/>\n        {<br \/>\n        }<\/p>\n<p>        public void BeforeDocumentClose(object theDocument)<br \/>\n        {<br \/>\n        }<\/p>\n<p>        public void BeforeDocumentPrint(object theDocument, int hDC, ref double ModelToDC, ref int Rect)<br \/>\n        {<br \/>\n        }<\/p>\n<p>        public void BeforeDocumentSave(object theDocument)<br \/>\n        {<br \/>\n        }<\/p>\n<p>        public void BeforeEnvironmentDeactivate(object theEnvironment)<br \/>\n        {<br \/>\n        }<\/p>\n<p>        public void BeforeQuit()<br \/>\n        {<br \/>\n        }<\/p>\n<p>        public void BeforeWindowDeactivate(object theWindow)<br \/>\n        {<br \/>\n        }<\/p>\n<p>        #endregion<br \/>\n    }<br \/>\n}<\/PRE><P><U><STRONG>Connection Point Model &#8211; Option 2<\/STRONG><\/U><\/P><P>You know I can&#8217;t talk about this kind of stuff without mentioning the&nbsp;<a href=\"https:\/\/www.nuget.org\/packages\/SolidEdge.Community\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">SolidEdge.Community NuGet Package<\/A>. It&#8217;s situations like this where the open source package shines. The NuGet package installs a class library with pre-built classes to handle scenarios like this. In this particular case, it provides a&nbsp;ConnectionPointController class that makes attaching to COM events very easy.<\/P><P><STRONG>Visual Basic &#8211; Connection Point Model using SolidEdge.Community NuGet Package<\/STRONG><\/P><PRE>Imports SolidEdgeCommunity<br \/>\nImports System<br \/>\nImports System.Runtime.InteropServices<br \/>\nImports System.Windows.Forms<\/p>\n<p>Namespace EventTest<br \/>\n    Partial Public Class Form1<br \/>\n        Inherits Form<br \/>\n        Implements SolidEdgeFramework.ISEApplicationEvents<\/p>\n<p>        Private _application As SolidEdgeFramework.Application<br \/>\n        Private _connectionPointController As ConnectionPointController<\/p>\n<p>        Public Sub New()<br \/>\n            InitializeComponent()<br \/>\n        End Sub<\/p>\n<p>        Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs)<br \/>\n            &#8216; Connect to Solid Edge.<br \/>\n            _application = DirectCast(Marshal.GetActiveObject(&#8220;SolidEdge.Application&#8221;), SolidEdgeFramework.Application)<\/p>\n<p>            _connectionPointController = New ConnectionPointController(Me)<br \/>\n            _connectionPointController.AdviseSink(Of SolidEdgeFramework.ISEApplicationEvents)(_application)<br \/>\n        End Sub<\/p>\n<p>        Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As FormClosingEventArgs)<br \/>\n            _connectionPointController.UnadviseAllSinks()<br \/>\n        End Sub<\/p>\n<p>        #Region &#8220;ISEApplicationEvents&#8221;<\/p>\n<p>        &#8230;<\/p>\n<p>        #End Region<br \/>\n    End Class<br \/>\nEnd Namespace<\/PRE><P><STRONG>C# &#8211; Connection Point Model using SolidEdge.Community NuGet Package<\/STRONG><\/P><PRE>using SolidEdgeCommunity;<br \/>\nusing System;<br \/>\nusing System.Runtime.InteropServices;<br \/>\nusing System.Windows.Forms;<\/p>\n<p>namespace EventTest<br \/>\n{<br \/>\n    public partial class Form1 : Form, SolidEdgeFramework.ISEApplicationEvents<br \/>\n    {<br \/>\n        private SolidEdgeFramework.Application _application;<br \/>\n        private ConnectionPointController _connectionPointController;<\/p>\n<p>        public Form1()<br \/>\n        {<br \/>\n            InitializeComponent();<br \/>\n        }<\/p>\n<p>        private void Form1_Load(object sender, EventArgs e)<br \/>\n        {<br \/>\n            \/\/ Connect to Solid Edge.<br \/>\n            _application = (SolidEdgeFramework.Application)Marshal.GetActiveObject(&#8220;SolidEdge.Application&#8221;);<\/p>\n<p>            _connectionPointController = new ConnectionPointController(this);<br \/>\n            _connectionPointController.AdviseSink&lt;SolidEdgeFramework.ISEApplicationEvents&gt;(_application);<br \/>\n        }<\/p>\n<p>        private void Form1_FormClosing(object sender, FormClosingEventArgs e)<br \/>\n        {<br \/>\n            _connectionPointController.UnadviseAllSinks();<br \/>\n        }<\/p>\n<p>        #region ISEApplicationEvents<\/p>\n<p>        &#8230;<\/p>\n<p>        #endregion<br \/>\n    }<br \/>\n}<\/PRE><P><U><STRONG>Conclusion<\/STRONG><\/U><\/P><P>I was a programmer long before .NET was released and can remember how easy it was handling events from Visual Basic 6 so I can appreciate how some of you might feel after reading this article. To me, this all boils down to change. Yes it is different. Yes it is a bit more code. Yes you have to understand more than you did before .NET. The question is what are you going to do about it? You can either say this is too hard and give up or spend a little&nbsp;time understanding and learning the new techniques to&nbsp;stay relevant. As always, my goal is to be the hand that reaches out says &#8220;It&#8217;s ok, I&#8217;ll help you.&#8221;.<\/P><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Solid Edge provides a wide range of COM event sets that notify us when certain things occur. In this article, I will discuss how you can attach to these events from .NET. Prior to .NET, handling COM &#8230;<\/p>\n","protected":false},"author":61367,"featured_media":7985,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"spanish_translation":"","french_translation":"","german_translation":"","italian_translation":"","polish_translation":"","japanese_translation":"","chinese_translation":"","footnotes":""},"categories":[1],"tags":[],"industry":[],"product":[],"coauthors":[],"class_list":["post-7980","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news"],"featured_image_url":"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/8\/2019\/09\/ObjectBrowser_ISEApplicationEvents_Event.jpg","_links":{"self":[{"href":"https:\/\/blogs.sw.siemens.com\/solidedge\/wp-json\/wp\/v2\/posts\/7980","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.sw.siemens.com\/solidedge\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.sw.siemens.com\/solidedge\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/solidedge\/wp-json\/wp\/v2\/users\/61367"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/solidedge\/wp-json\/wp\/v2\/comments?post=7980"}],"version-history":[{"count":4,"href":"https:\/\/blogs.sw.siemens.com\/solidedge\/wp-json\/wp\/v2\/posts\/7980\/revisions"}],"predecessor-version":[{"id":7987,"href":"https:\/\/blogs.sw.siemens.com\/solidedge\/wp-json\/wp\/v2\/posts\/7980\/revisions\/7987"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/solidedge\/wp-json\/wp\/v2\/media\/7985"}],"wp:attachment":[{"href":"https:\/\/blogs.sw.siemens.com\/solidedge\/wp-json\/wp\/v2\/media?parent=7980"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/solidedge\/wp-json\/wp\/v2\/categories?post=7980"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/solidedge\/wp-json\/wp\/v2\/tags?post=7980"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/solidedge\/wp-json\/wp\/v2\/industry?post=7980"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/solidedge\/wp-json\/wp\/v2\/product?post=7980"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/solidedge\/wp-json\/wp\/v2\/coauthors?post=7980"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}