Пример #1
0
        public ManageLockForm(string serverNameArg, string databaseNameArg, string loginNameArg, string loginPasswordArg, string methodNameArg, IServiceProvider serviceProvider)
        {
            InitializeComponent();

            serverName    = serverNameArg;
            databaseName  = databaseNameArg;
            loginName     = loginNameArg;
            loginPassword = loginPasswordArg;
            methodName    = methodNameArg;
            util          = new CommandUtilities(serviceProvider);

            HttpServerConnection connection;

            Aras.IOM.Innovator inn;

            connection = IomFactory.CreateHttpServerConnection(serverName, databaseName, loginName, loginPassword);
            Aras.IOM.Item iLogin = connection.Login();
            if (iLogin.isError())
            {
                this.DialogResult = DialogResult.Abort;
                this.Close();
                return;
            }

            inn = new Aras.IOM.Innovator(connection);

            Item iQry = inn.newItem();

            iQry.setType("Method");
            iQry.setProperty("name", methodName);
            iQry.setAction("get");
            iQry = iQry.apply();

            connection.Logout();

            if (iQry.isError())
            {
                MessageBox.Show(iQry.getErrorString(), "Server Returned Error", MessageBoxButtons.OK);
                return;
            }

            methodID = iQry.getID();
            updateLockStatusLabel(iQry);
        }
        /// <summary>
        /// This function is the callback used to execute the command when the menu item is clicked.
        /// See the constructor to see how the menu item is associated with this function using
        /// OleMenuCommandService service and MenuCommand class.
        /// </summary>
        /// <param name="sender">Event sender.</param>
        /// <param name="e">Event args.</param>
        private void MenuItemCallback(object sender, EventArgs e)
        {
            DTE              dte        = Package.GetGlobalService(typeof(SDTE)) as DTE;
            Solution2        currSol2   = (EnvDTE80.Solution2)dte.Solution;
            CommandUtilities util       = new CommandUtilities(this.ServiceProvider);
            Project          currProj   = null;
            ProjectItem      configItem = null;
            string           configName = "Innovator.config";

            Array projectArray = dte.ActiveSolutionProjects as Array;

            if (projectArray != null && projectArray.Length > 0)
            {
                if (projectArray.Length > 1)
                {
                    util.showError("Only one project can be selected.", "One Project Allowed");
                    return;
                }

                currProj = projectArray.GetValue(0) as Project;
            }

            else
            {
                util.showError("One project must be selected in the Solution Explorer.", "Active Project Required");
                return;
            }

            try
            {
                configItem = currProj.ProjectItems.Item(configName);
            }
            catch (ArgumentException)
            {
                util.showError("Required Innovator.config file not found in selected project.", "Config File Not Found");
                return;
            }

            string      configPath = configItem.FileNames[0];
            XmlDocument configXML  = new XmlDocument();

            configXML.Load(configPath);

            Dictionary <string, string> configDic = util.ReadConfigFile(configXML);
            string val = "";

            if (configDic.TryGetValue("failCheck", out val))
            {
                return;
            }

            string csTemplateName;

            configDic.TryGetValue("csTemplateName", out csTemplateName);
            string jsTemplateName;

            configDic.TryGetValue("jsTemplateName", out jsTemplateName);
            string methodInsertTag;

            configDic.TryGetValue("methodInsertTag", out methodInsertTag);
            string methodEndTag;

            configDic.TryGetValue("methodEndTag", out methodEndTag);
            string serverName;

            configDic.TryGetValue("serverName", out serverName);
            string databaseName;

            configDic.TryGetValue("databaseName", out databaseName);
            string loginName;

            configDic.TryGetValue("loginName", out loginName);
            string loginPassword;

            configDic.TryGetValue("loginPassword", out loginPassword);
            string defaultMethodSearch;

            configDic.TryGetValue("defaultMethodSearch", out defaultMethodSearch);

            //Dialog to collect method name from user
            var    methodForm  = new MethodSelectionForm(serverName, databaseName, loginName, loginPassword, defaultMethodSearch);
            var    formRes     = methodForm.ShowDialog();
            string openID      = "NO_ID_SELECTED";
            bool   lockChecked = false;

            if (formRes == DialogResult.OK)
            {
                openID      = methodForm.returnID;
                lockChecked = methodForm.lockChecked;
            }
            else if (formRes == DialogResult.Abort)
            {
                util.showError("Unable to connect to Aras Innovator with the server, database, and login information provided in Innovator.config of the active project.", "Connection Error");
                return;
            }
            else
            {
                return;
            }

            if (openID == "NO_ID_SELECTED")
            {
                util.showError("No valid method ID was provided.", "Method ID Error");
            }

            //Connect to Aras Server
            HttpServerConnection connection;

            Aras.IOM.Innovator inn;

            connection = IomFactory.CreateHttpServerConnection(serverName, databaseName, loginName, loginPassword);
            Aras.IOM.Item iLogin = connection.Login();
            if (iLogin.isError())
            {
                util.showError("Unable to connect to Aras Innovator with the server, database, and login information provided in Innovator.config of the active project.", "Connection Error");
                return;
            }

            inn = new Aras.IOM.Innovator(connection);

            Item iQry = inn.newItem();

            iQry.setType("Method");
            iQry.setAction("get");
            iQry.setID(openID);
            iQry = iQry.apply();

            if (iQry.isError())
            {
                connection.Logout();
                util.showError(iQry.getErrorString(), "Error");
                return;
            }

            Item lockQry = inn.newItem();

            if (lockChecked)
            {
                lockQry.setType("Method");
                lockQry.setAction("lock");
                lockQry.setID(openID);
                lockQry = lockQry.apply();
            }

            connection.Logout();

            if (lockQry.isError())
            {
                util.showError("The Method will still be opened but attempting to lock it returned the following error: \n" + lockQry.getErrorString(), "Error");
            }

            string methodName      = iQry.getProperty("name");
            string methodExtension = ".cs";
            string methodCode      = iQry.getProperty("method_code");
            string templatePath;

            // For JavaScript support
            if (iQry.getProperty("method_type", "") == "JavaScript")
            {
                methodExtension = ".js";
                try
                {
                    templatePath = currSol2.GetProjectItemTemplate(jsTemplateName, "CSharp");
                }
                catch (ArgumentException)
                {
                    util.showError("The specified JavaScript template could not be found.", "Template Not Found");
                    return;
                }
            }
            else
            {
                try
                {
                    templatePath = currSol2.GetProjectItemTemplate(csTemplateName, "CSharp");
                }
                catch (ArgumentException)
                {
                    util.showError("The specified CSharp template could not be found.", "Template Not Found");
                    return;
                }
            }

            string      methodString = methodName + methodExtension;
            ProjectItem currItem     = util.GetProjectItem(currProj.ProjectItems, methodString);

            if (currItem == null)
            {
                if (string.IsNullOrEmpty(templatePath))
                {
                    util.showError("The specified template could not be found.", "Template Not Found");
                    return;
                }
                currProj.ProjectItems.AddFromTemplate(templatePath, methodString);
                currItem = currProj.ProjectItems.Item(methodString);
            }

            string filePath      = currItem.FileNames[0];
            string templateLines = File.ReadAllText(filePath);

            int insertIndex = templateLines.IndexOf(methodInsertTag) + methodInsertTag.Length;
            int endIndex    = templateLines.IndexOf(methodEndTag);

            if (endIndex < 0 || (insertIndex - methodInsertTag.Length) < 0)
            {
                util.showError("There was an error locating the method_insert_tag or method_end_tag and the method could not be loaded.  Correct the tags and Refresh Method From Server to populate with the method code.", "Method Tag Error");
                util.setStatusBar(methodString + " was created but could not be populated with the method from the server");
                return;
            }

            string modifiedLines = templateLines.Substring(0, insertIndex) + "\n" + methodCode + "\n" + templateLines.Substring(endIndex);

            File.WriteAllText(filePath, modifiedLines);

            util.setStatusBar(methodName + " was succesfully opened and loaded into file " + methodString + " in project " + currProj.Name);
        }
        /// <summary>
        /// This function is the callback used to execute the command when the menu item is clicked.
        /// See the constructor to see how the menu item is associated with this function using
        /// OleMenuCommandService service and MenuCommand class.
        /// </summary>
        /// <param name="sender">Event sender.</param>
        /// <param name="e">Event args.</param>
        private void MenuItemCallback(object sender, EventArgs e)
        {
            DTE              dte        = Package.GetGlobalService(typeof(SDTE)) as DTE;
            Solution2        currSol2   = (EnvDTE80.Solution2)dte.Solution;
            CommandUtilities util       = new CommandUtilities(this.ServiceProvider);
            ProjectItem      currItem   = null;
            ProjectItem      configItem = null;
            String           methodCode = "";
            String           configName = "Innovator.config";

            if (dte.ActiveDocument == null)
            {
                util.showError("No active window.", "Active Window Required");
                return;
            }

            Project currProj = dte.ActiveDocument.ProjectItem.ContainingProject;

            dte.ActiveDocument.Save();

            if (string.IsNullOrEmpty(currProj.FullName))
            {
                util.showError("Method must be in a project.", "Project Required");
                return;
            }

            try
            {
                configItem = currProj.ProjectItems.Item(configName);
            }
            catch (ArgumentException ex)
            {
                util.showError("Required Innovator.config file not found in selected project.", "Config File Not Found");
                return;
            }

            string      configPath = configItem.FileNames[0];
            XmlDocument configXML  = new XmlDocument();

            configXML.Load(configPath);

            Dictionary <string, string> configDic = util.ReadConfigFile(configXML);
            string val = "";

            if (configDic.TryGetValue("failCheck", out val))
            {
                return;
            }

            string csTemplateName;

            configDic.TryGetValue("csTemplateName", out csTemplateName);
            string jsTemplateName;

            configDic.TryGetValue("jsTemplateName", out jsTemplateName);
            string methodInsertTag;

            configDic.TryGetValue("methodInsertTag", out methodInsertTag);
            string methodEndTag;

            configDic.TryGetValue("methodEndTag", out methodEndTag);
            string serverName;

            configDic.TryGetValue("serverName", out serverName);
            string databaseName;

            configDic.TryGetValue("databaseName", out databaseName);
            string loginName;

            configDic.TryGetValue("loginName", out loginName);
            string loginPassword;

            configDic.TryGetValue("loginPassword", out loginPassword);
            string defaultMethodSearch;

            configDic.TryGetValue("defaultMethodSearch", out defaultMethodSearch);

            string fileName        = dte.ActiveDocument.Name;
            string methodName      = fileName.Substring(0, fileName.LastIndexOf('.'));
            string methodExtension = fileName.Substring(fileName.LastIndexOf('.'));

            try
            {
                currItem = dte.ActiveDocument.ProjectItem;
            }
            catch (ArgumentException ex)
            {
                util.showError("Method file not found in current project.", "Method File Not Found");
                return;
            }

            string filePath      = currItem.FileNames[0];
            string templateLines = File.ReadAllText(filePath);
            int    insertIndex   = templateLines.IndexOf(methodInsertTag) + methodInsertTag.Length;
            int    endIndex      = templateLines.IndexOf(methodEndTag);

            methodCode = templateLines.Substring(insertIndex + 1, endIndex - insertIndex - 2);

            //Connect to Aras Server
            HttpServerConnection connection;

            Aras.IOM.Innovator inn;

            connection = IomFactory.CreateHttpServerConnection(serverName, databaseName, loginName, loginPassword);
            Aras.IOM.Item iLogin = connection.Login();
            if (iLogin.isError())
            {
                util.showError("Unable to connect to Aras Innovator with the server, database, and login information provided in Innovator.config of the active project.", "Connection Error");
                return;
            }

            inn = new Aras.IOM.Innovator(connection);

            Item iQry = inn.newItem();

            iQry.setType("Method");
            iQry.setAction("get");
            iQry.setProperty("name", methodName);
            iQry = iQry.apply();

            //If method already exists, update, otherwise prompt to add it instead
            bool methodAdded = false;

            if (iQry.isError() || iQry.isEmpty())
            {
                int response;
                response = util.promptYesNo("The method does not exist on the server.  Would you like to create it?", "Create Method");

                if (response == 6)
                {
                    Item addQry = inn.newItem();
                    addQry.setType("Method");
                    addQry.setAction("add");
                    addQry.setProperty("name", methodName);
                    addQry.setProperty("method_code", methodCode);

                    if (methodExtension == ".js")
                    {
                        addQry.setProperty("method_type", "JavaScript");
                    }
                    else
                    {
                        addQry.setProperty("method_type", "C#");
                    }

                    addQry = addQry.apply();

                    if (addQry.isError())
                    {
                        connection.Logout();
                        util.showError(addQry.getErrorString(), "Error");
                        return;
                    }
                    methodAdded = true;

                    addQry.setAction("lock");
                    addQry = addQry.apply();
                    if (addQry.isError())
                    {
                        connection.Logout();
                        util.showError(addQry.getErrorString(), "Error");
                        return;
                    }
                }
                else
                {
                    connection.Logout();
                    return;
                }
            }
            else
            {
                iQry.setAction("update");
                iQry.setProperty("method_code", methodCode);
                iQry = iQry.apply();
            }

            connection.Logout();

            if (iQry.isError() && !methodAdded)
            {
                util.showError(iQry.getErrorString(), "Error");
                return;
            }


            util.setStatusBar(methodName + " was succesfully saved to server");
        }
        /// <summary>
        /// This function is the callback used to execute the command when the menu item is clicked.
        /// See the constructor to see how the menu item is associated with this function using
        /// OleMenuCommandService service and MenuCommand class.
        /// </summary>
        /// <param name="sender">Event sender.</param>
        /// <param name="e">Event args.</param>
        private void MenuItemCallback(object sender, EventArgs e)
        {
            DTE              dte        = Package.GetGlobalService(typeof(SDTE)) as DTE;
            Solution2        currSol2   = (EnvDTE80.Solution2)dte.Solution;
            CommandUtilities util       = new CommandUtilities(this.ServiceProvider);
            ProjectItem      configItem = null;
            String           configName = "Innovator.config";

            if (dte.ActiveDocument == null)
            {
                util.showError("No active window.", "Active Window Required");
                return;
            }

            Project currProj = dte.ActiveDocument.ProjectItem.ContainingProject;

            dte.ActiveDocument.Save();

            if (string.IsNullOrEmpty(currProj.FullName))
            {
                util.showError("Method must be in a project.", "Project Required");
                return;
            }

            try
            {
                configItem = currProj.ProjectItems.Item(configName);
            }
            catch (ArgumentException ex)
            {
                util.showError("Required Innovator.config file not found in selected project.", "Config File Not Found");
                return;
            }

            string      configPath = configItem.FileNames[0];
            XmlDocument configXML  = new XmlDocument();

            configXML.Load(configPath);

            Dictionary <string, string> configDic = util.ReadConfigFile(configXML);
            string val = "";

            if (configDic.TryGetValue("failCheck", out val))
            {
                return;
            }

            string csTemplateName;

            configDic.TryGetValue("csTemplateName", out csTemplateName);
            string jsTemplateName;

            configDic.TryGetValue("jsTemplateName", out jsTemplateName);
            string methodInsertTag;

            configDic.TryGetValue("methodInsertTag", out methodInsertTag);
            string methodEndTag;

            configDic.TryGetValue("methodEndTag", out methodEndTag);
            string serverName;

            configDic.TryGetValue("serverName", out serverName);
            string databaseName;

            configDic.TryGetValue("databaseName", out databaseName);
            string loginName;

            configDic.TryGetValue("loginName", out loginName);
            string loginPassword;

            configDic.TryGetValue("loginPassword", out loginPassword);
            string defaultMethodSearch;

            configDic.TryGetValue("defaultMethodSearch", out defaultMethodSearch);

            string fileName   = dte.ActiveDocument.Name;
            string methodName = fileName.Substring(0, fileName.LastIndexOf('.'));

            //Dialog to manage locking
            var methodForm = new ManageLockForm(serverName, databaseName, loginName, loginPassword, methodName, this.ServiceProvider);
            var formRes    = methodForm.ShowDialog();

            if (formRes == DialogResult.Abort)
            {
                util.showError("Unable to connect to Aras Innovator with the server, database, and login information provided in Innovator.config of the active project.", "Connection Error");
                return;
            }

            return;
        }
Пример #5
0
        /// <summary>
        /// This function is the callback used to execute the command when the menu item is clicked.
        /// See the constructor to see how the menu item is associated with this function using
        /// OleMenuCommandService service and MenuCommand class.
        /// </summary>
        /// <param name="sender">Event sender.</param>
        /// <param name="e">Event args.</param>
        private void MenuItemCallback(object sender, EventArgs e)
        {
            DTE              dte        = Package.GetGlobalService(typeof(SDTE)) as DTE;
            Solution2        currSol2   = (EnvDTE80.Solution2)dte.Solution;
            CommandUtilities util       = new CommandUtilities(this.ServiceProvider);
            ProjectItem      currItem   = null;
            ProjectItem      configItem = null;
            String           configName = "Innovator.config";

            if (dte.ActiveDocument == null)
            {
                util.showError("No active window.", "Active Window Required");
                return;
            }

            Project currProj = dte.ActiveDocument.ProjectItem.ContainingProject;

            if (string.IsNullOrEmpty(currProj.FullName))
            {
                util.showError("Method must be in a project.", "Project Required");
                return;
            }

            try
            {
                configItem = currProj.ProjectItems.Item(configName);
            }
            catch (ArgumentException ex)
            {
                util.showError("Required Innovator.config file not found in selected project.", "Config File Not Found");
                return;
            }

            string      configPath = configItem.FileNames[0];
            XmlDocument configXML  = new XmlDocument();

            configXML.Load(configPath);

            Dictionary <string, string> configDic = util.ReadConfigFile(configXML);
            string val = "";

            if (configDic.TryGetValue("failCheck", out val))
            {
                return;
            }

            string csTemplateName;

            configDic.TryGetValue("csTemplateName", out csTemplateName);
            string jsTemplateName;

            configDic.TryGetValue("jsTemplateName", out jsTemplateName);
            string methodInsertTag;

            configDic.TryGetValue("methodInsertTag", out methodInsertTag);
            string methodEndTag;

            configDic.TryGetValue("methodEndTag", out methodEndTag);
            string serverName;

            configDic.TryGetValue("serverName", out serverName);
            string databaseName;

            configDic.TryGetValue("databaseName", out databaseName);
            string loginName;

            configDic.TryGetValue("loginName", out loginName);
            string loginPassword;

            configDic.TryGetValue("loginPassword", out loginPassword);
            string defaultMethodSearch;

            configDic.TryGetValue("defaultMethodSearch", out defaultMethodSearch);

            string fileName   = dte.ActiveDocument.Name;
            string methodName = fileName.Substring(0, fileName.LastIndexOf('.'));

            try
            {
                currItem = dte.ActiveDocument.ProjectItem;
            }
            catch (ArgumentException ex)
            {
                util.showError("Method file not found in current project.", "Method File Not Found");
                return;
            }

            string filePath      = currItem.FileNames[0];
            string templateLines = File.ReadAllText(filePath);
            int    insertIndex   = templateLines.IndexOf(methodInsertTag) + methodInsertTag.Length;
            int    endIndex      = templateLines.IndexOf(methodEndTag);

            //Connect to Aras Server
            HttpServerConnection connection;

            Aras.IOM.Innovator inn;

            connection = IomFactory.CreateHttpServerConnection(serverName, databaseName, loginName, loginPassword);
            Aras.IOM.Item iLogin = connection.Login();
            if (iLogin.isError())
            {
                util.showError("Unable to connect to Aras Innovator with the server, database, and login information provided in Innovator.config of the active project.", "Connection Error");
                return;
            }

            inn = new Aras.IOM.Innovator(connection);

            Item iQry = inn.newItem();

            iQry.setType("Method");
            iQry.setAction("get");
            iQry.setProperty("name", methodName);
            iQry = iQry.apply();

            connection.Logout();

            if (iQry.isError())
            {
                util.showError(iQry.getErrorString(), "Error");
                return;
            }

            string methodCode = iQry.getProperty("method_code");

            string modifiedLines = templateLines.Substring(0, insertIndex) + "\n" + methodCode + "\n" + templateLines.Substring(endIndex);

            File.WriteAllText(filePath, modifiedLines);

            util.setStatusBar(fileName + " was succesfully refreshed from the server with method " + methodName);
        }