ArcFM Engine Developer Guide
Retrieve Current Open Session

Version: 10.2.1c and 10.2.1c SP3

Resource Center Home

The following code sample depicts how you can retrieve the currently open session (CurrentOpenSession object).

Retrieve CurrentOpenSession
Copy Code
    public class GetSessionManager
    {

        private IMMSessionManager2 _mmSessionMangerExt;
        private IMMPxApplication _pxApp;
        /// <summary>
        /// Gets IMMSessionManager2 from the IMMPxIntegrationCache
        /// </summary>
        private void GetSessionMgrExt()
        {
            if (_mmSessionMangerExt == null)
            {
                IMMPxIntegrationCache mmSessionMangerIntegrationExt = FindExtesionByName("Session Manager Integration Extension") as IMMPxIntegrationCache;
                if (mmSessionMangerIntegrationExt != null)
                {
                    _pxApp = mmSessionMangerIntegrationExt.Application;
                    if (_pxApp != null)
                    {
                        __PxApplication_Event pxAppEvents = _pxApp as __PxApplication_Event;
                        pxAppEvents.Shutdown += new __PxApplication_ShutdownEventHandler(pxAppEvents_Shutdown);

                        _mmSessionMangerExt = _pxApp.FindPxExtensionByName("MMSessionManager") as IMMSessionManager2;
                    }
                }
            }
        }

        /// <summary>
        /// Finds the extension using IExtensionManager
        /// </summary>
        /// <param name="name">Name of Extension to find</param>
        /// <returns></returns>
        private IExtension FindExtesionByName(string name)
        {
            IExtensionManager extensionMgr = Activator.CreateInstance(Type.GetTypeFromProgID(
                        "esriSystem.ExtensionManager")) as IExtensionManager;
            IExtension extension = extensionMgr.FindExtension(name);
            return extension;
        }

        /// <summary>
        /// Shuts down px
        /// </summary>
        /// <param name="bCancel"></param>
        void pxAppEvents_Shutdown(ref bool bCancel)
        {
            __PxApplication_Event pxAppEvents = _pxApp as __PxApplication_Event;
            pxAppEvents.Shutdown -= new __PxApplication_ShutdownEventHandler(pxAppEvents_Shutdown);
            _mmSessionMangerExt = null;
            _pxApp = null;
        }

        /// <summary>
        /// Checks to see if the MM Editor state is StateEditing.
        /// Also gets the current open session and checks
        /// if there is a current open session and if the
        /// current open session is an edit session (not redlining)
        /// </summary>
        /// <returns></returns>
        private bool IsEditSessionOpen()
        {
            bool enabled = false;

            if (Editor.EditState == EditState.StateEditing)
            {
                GetSessionMgrExt();

                if (_mmSessionMangerExt != null)
                {
                    IMMSession currentSession = _mmSessionMangerExt.CurrentOpenSession;
                    IMMSession4 currentSession4 = currentSession as IMMSession4;
                    //Check if we have a session open and
                    //if it is not a redlining session (and is therefore an edit session)
                    if (currentSession4 != null && !currentSession4.get_Redlining())
                    {
                        enabled = true;
                    }
                }
            }
            return enabled;
        }

    }

 

 


Send Comment to ArcFMdocumentation@schneider-electric.com