Ejemplo n.º 1
0
        public CfgEnumeratorValue GetBusinessAttribute(string bussinessAttributeName, string attributeValueName)
        {
            if (string.IsNullOrEmpty(bussinessAttributeName))
            {
                throw new Exception("The business attribute name is null or empty.");
            }

            CfgEnumeratorValue objBusinessAttribute = null;

            try
            {
                if (ConfigContainer.Instance().ConfServiceObject != null)
                {
                    CfgEnumeratorQuery enumQuery = new CfgEnumeratorQuery();
                    enumQuery.TenantDbid = ConfigContainer.Instance().TenantDbId;
                    enumQuery.Name       = bussinessAttributeName;
                    CfgEnumerator enumarator = ConfigContainer.Instance().ConfServiceObject.RetrieveObject <CfgEnumerator>(enumQuery);
                    if (enumarator != null)
                    {
                        CfgEnumeratorValueQuery enumaeratorValueQuery = new CfgEnumeratorValueQuery();
                        enumaeratorValueQuery.EnumeratorDbid = enumarator.DBID;
                        enumaeratorValueQuery.Name           = attributeValueName;
                        objBusinessAttribute = ConfigContainer.Instance().ConfServiceObject.RetrieveObject <CfgEnumeratorValue>(enumaeratorValueQuery);
                    }
                }
            }
            catch (Exception generalException)
            {
                _logger.Error("Error occurred as " + generalException.Message);
            }
            return(objBusinessAttribute);
        }
Ejemplo n.º 2
0
        public void ReadSection(string sectionName, bool readOnlyApplication = true)
        {
            ConfigurationHandler objConfigurationHandler = new ConfigurationHandler();
            KeyValueCollection   objSection = objConfigurationHandler.GetSection(sectionName, readOnlyApplication);

            if (objSection != null)
            {
                //ConfigContainer.Instance().AllKeys.Add(sectionName);
                ConfigContainer.Instance().CMEValues.Add(sectionName, objSection);
            }
        }
Ejemplo n.º 3
0
 /// <summary>
 /// Disconnects the configuration server.
 /// </summary>
 public void DisconnectConfigServer()
 {
     try
     {
         if (ProtocolManagers.Instance().ProtocolManager[ServerType.Configserver.ToString()].State == ChannelState.Opened ||
             ProtocolManagers.Instance().ProtocolManager[ServerType.Configserver.ToString()].State == ChannelState.Opening)
         {
             try
             {
                 if (ConfigContainer.Instance().ConfServiceObject != null)
                 {
                     ConfServiceFactory.ReleaseConfService(ConfigContainer.Instance().ConfServiceObject);
                 }
                 ProtocolManagers.Instance().DisConnectServer(ServerType.Configserver);
                 if (_configContainer.ConfServiceObject != null)
                 {
                     if (_configContainer.ConfServiceObject.Protocol != null && _configContainer.ConfServiceObject.Protocol.State == ChannelState.Opened)
                     {
                         _configContainer.ConfServiceObject.Protocol.Close();
                     }
                     _configContainer.ConfServiceObject = null;
                 }
                 //_configContainer.AllKeys.Clear();
                 _configContainer.CMEValues.Clear();
             }
             catch { }
         }
         else if (ProtocolManagers.Instance().ProtocolManager[ServerType.Configserver.ToString()].State == ChannelState.Closed)
         {
             //_configContainer.AllKeys.Clear();
             _configContainer.CMEValues.Clear();
         }
     }
     catch (Exception generalException)
     {
         _logger.Error("Error occurred while closing the config server : " +
                       ((generalException.InnerException == null) ? generalException.Message : generalException.InnerException.ToString()));
     }
 }
Ejemplo n.º 4
0
 /// <param name="userName">Name of the user.</param>
 /// <param name="password">The password.</param>
 /// <returns></returns>
 public void GetContactBusinessAttribute(string businessAttributeName)
 {
     try
     {
         CfgEnumeratorQuery enumaratorQuery = new CfgEnumeratorQuery();
         enumaratorQuery.TenantDbid = ConfigContainer.Instance().TenantDbId;
         enumaratorQuery.Name       = businessAttributeName;
         if (ConfigContainer.Instance().ConfServiceObject != null)
         {
             CfgEnumerator enumarator = ConfigContainer.Instance().ConfServiceObject.RetrieveObject <CfgEnumerator>(enumaratorQuery);
             if (enumarator != null)
             {
                 CfgEnumeratorValueQuery enumaeratorValueQuery = new CfgEnumeratorValueQuery();
                 enumaeratorValueQuery.EnumeratorDbid = enumarator.DBID;
                 // enumarator.SetTenantDBID(ConfigContainer.Instance().TenantDbId);
                 ICollection <CfgEnumeratorValue> enumeratorValue          = ConfigContainer.Instance().ConfServiceObject.RetrieveMultipleObjects <CfgEnumeratorValue>(enumaeratorValueQuery);
                 Dictionary <string, string>      contactBusinessAttribute = new Dictionary <string, string>();
                 foreach (CfgEnumeratorValue enumVal in enumeratorValue)
                 {
                     contactBusinessAttribute.Add(enumVal.Name, enumVal.DisplayName);
                 }
                 _configContainer.CMEValues.Add("contactBusinessAttribute", contactBusinessAttribute);
                 // _configContainer.AllKeys.Add("contactBusinessAttribute");
             }
         }
     }
     catch (OperationCanceledException ex)
     {
         _logger.Warn("Get Operation Cancelled issue while reading contact business attribute as " + ex.Message);
         GetContactBusinessAttribute(businessAttributeName);
     }
     catch (Exception ex)
     {
         _logger.Error("Error occurred as while reading contact attribute as " + ex.Message);
     }
 }
Ejemplo n.º 5
0
        /// <summary>
        /// Establish connection to the configuration server
        /// </summary>
        /// <param name="pri_ConfigServerHost">The pri_ configuration server host.</param>
        /// <param name="pri_ConfigServerPort">The pri_ configuration server port.</param>
        /// <param name="clientName">Name of the client.</param>
        /// <param name="applicationName">Name of the application.</param>
        /// <param name="userName">Name of the user.</param>
        /// <param name="password">The password.</param>
        /// <param name="sec_ConfigServerHost">The sec_ configuration server host.</param>
        /// <param name="sec_ConfigServerPort">The sec_ configuration server port.</param>
        /// <returns></returns>
        public OutputValues ConfigConnectionEstablish(string pri_ConfigServerHost, string pri_ConfigServerPort, string applicationName,
                                                      string userName, string password, string sec_ConfigServerHost, string sec_ConfigServerPort, string[] sectionToRead, params string[] sections)
        {
            _configContainer = null;
            _configContainer = ConfigContainer.Instance();
            OutputValues output = new OutputValues();

            try
            {
                var assembly = typeof(ConfigManager).Assembly;
                if (assembly != null)
                {
                    _logger.Info("-----------------------------------------------------------------------------");
                    _logger.Info(assembly.GetName().Name + " : " + assembly.GetName().Version);
                    _logger.Info("-----------------------------------------------------------------------------");
                }
            }
            catch (Exception generalException)
            {
                _logger.Error("Error occurred while getting the assembly version of library : " +
                              ((generalException.InnerException == null) ? generalException.Message : generalException.InnerException.ToString()));
            }
            ConfigConnectionManager connect = new ConfigConnectionManager();

            //Clear and null all values
            if (_configContainer.ConfServiceObject != null)
            {
                if (_configContainer.ConfServiceObject.Protocol != null && _configContainer.ConfServiceObject.Protocol.State == ChannelState.Opened)
                {
                    _configContainer.ConfServiceObject.Protocol.Close();
                }
                if (_configContainer.ConfServiceObject != null)
                {
                    ConfServiceFactory.ReleaseConfService(_configContainer.ConfServiceObject);
                }
                _configContainer.ConfServiceObject = null;
            }
            //_configContainer.AllKeys.Clear();
            _configContainer.CMEValues.Clear();
            //Connect Config Server
            output = connect.ConnectConfigServer(pri_ConfigServerHost, pri_ConfigServerPort, applicationName, userName, password,
                                                 sec_ConfigServerHost, sec_ConfigServerPort);

            if (output.MessageCode == "200")
            {
                //Authenticate the user first and read the CME configurations
                output = AuthenticateUser(userName, password);
                if (output.MessageCode == "200")
                {
                    ConfigurationHandler readValues = new ConfigurationHandler();

                    ConfigContainer.Instance().UserName = userName;

                    //Get access group first then read values hierarchy

                    //Read System section to get Tenant and switch type
                    output = readValues.ReadSystemSection(applicationName);

                    if (output.MessageCode == "2001")
                    {
                        return(output);
                    }
                    //Register for CME Alter Notification
                    //readValues.RegisterCMEAlterNotification(_configContainer.TenantDbId);

                    //Read logger to print CME values in log

                    readValues.ReadLoggerData(userName, applicationName);
                    InitializeLogger(userName);
                    //Read Application keys
                    readValues.ReadApplication(applicationName, sectionToRead, sections);
                    //Read Agent Group Keys and override existing application keys
                    readValues.ReadAgentGroup(userName, sectionToRead, sections);
                    //Read person Keys and override existing application keys and Agent group keys

                    readValues.ReadPerson(userName, sectionToRead, sections);
                    GetContactBusinessAttribute("ContactAttributes");
                    //Check the user is in access group
                    bool accessAuthenticationEnable = true;
                    try
                    {
                        if (_configContainer.CMEValues.ContainsKey("login.enable.access.group-authentication"))
                        {
                            if (!string.IsNullOrEmpty(((ConfigValue)_configContainer.CMEValues["login.access-group"]).Value.ToString()) &&
                                !Convert.ToBoolean(((ConfigValue)_configContainer.CMEValues["login.enable.access.group-authentication"]).Value.ToString()))
                            {
                                accessAuthenticationEnable = false;
                            }
                        }
                    }
                    catch
                    {
                        _logger.Warn("Authentication using access group may not work as expected. Implementing default functionality.");
                    }
                    if (_configContainer.CMEValues.ContainsKey("login.access-group"))
                    {
                        if (_configContainer.CMEValues["login.access-group"] != null &&
                            ((ConfigValue)_configContainer.CMEValues["login.access-group"]).Value.ToString() != string.Empty)
                        {
                            if (accessAuthenticationEnable)
                            {
                                output = readValues.ReadAccessPermission(((ConfigValue)_configContainer.CMEValues["login.access-group"]).Value);
                                if (output.MessageCode == "2001")
                                {
                                    return(output);
                                }
                            }
                        }
                        else
                        {
                            _logger.Warn("login.access-group value is null or empty");
                            output.MessageCode = "2001";
                            output.Message     = "Access group name is not configured. Please contact your Administrator";
                            return(output);
                        }
                    }
                    else
                    {
                        _logger.Warn("login.access-group key is not configured");
                        output.MessageCode = "2001";
                        output.Message     = "Access group name is not configured. Please contact your Administrator";
                        return(output);
                    }
                    //Read the available Queues such as ACD queues
                    if (_configContainer.CMEValues.ContainsKey("login.voice.available-queues") && ((ConfigValue)_configContainer.CMEValues["login.voice.available-queues"]).Value != null)
                    {
                        readValues.ReadQueues(((ConfigValue)_configContainer.CMEValues["login.voice.available-queues"]).Value.ToString());
                    }
                    else
                    {
                        _logger.Warn("login.voice.available-queues key-value is not configured");
                    }

                    //Check case data and disposition from business attribute or transaction object
                    if (_configContainer.CMEValues.ContainsKey("interaction.casedata.use-transaction-object") &&
                        ((ConfigValue)_configContainer.CMEValues["interaction.casedata.use-transaction-object"]).Value.ToLower().Equals("true") ? true : false)
                    {
                        //Read the case data Transaction object for add/filter/sort case data
                        if (_configContainer.CMEValues.ContainsKey("interaction.casedata-object-name") &&
                            !string.IsNullOrEmpty(((ConfigValue)_configContainer.CMEValues["interaction.casedata-object-name"]).Value))
                        {
                            readValues.ReadCaseDataTransactionObject(((ConfigValue)_configContainer.CMEValues["interaction.casedata-object-name"]).Value.ToString());
                            readValues.ReadCaseDataFilterTransactionObject(((ConfigValue)_configContainer.CMEValues["interaction.casedata-object-name"]).Value.ToString());
                            readValues.ReadCaseDataSortingTransactionObject(((ConfigValue)_configContainer.CMEValues["interaction.casedata-object-name"]).Value.ToString());
                        }
                        else
                        {
                            _logger.Warn("interaction.casedata-object-name value is not configured");
                        }

                        //Read the case data Transaction object for disposition
                        if (_configContainer.CMEValues.ContainsKey("interaction.disposition-object-name") &&
                            !string.IsNullOrEmpty(((ConfigValue)_configContainer.CMEValues["interaction.disposition-object-name"]).Value))
                        {
                            readValues.ReadDispositionTransctionObject(((ConfigValue)_configContainer.CMEValues["interaction.disposition-object-name"]).Value.ToString());
                        }
                        else
                        {
                            _logger.Warn("interaction.disposition-object-name value is not configured");
                        }
                    }
                    else
                    {
                        if (_configContainer.CMEValues.ContainsKey("interaction.casedata-object-name") &&
                            !string.IsNullOrEmpty(((ConfigValue)_configContainer.CMEValues["interaction.casedata-object-name"]).Value))
                        {
                            //Read casedata information from Business attributes
                            readValues.ReadCaseDataFromBusinessAttribute(((ConfigValue)_configContainer.CMEValues["interaction.casedata-object-name"]).Value.ToString());
                        }
                        else
                        {
                            _logger.Warn("interaction.casedata-object-name key-value is not configured");
                        }

                        if (_configContainer.CMEValues.ContainsKey("interaction.disposition-object-name") &&
                            !string.IsNullOrEmpty(((ConfigValue)_configContainer.CMEValues["interaction.disposition-object-name"]).Value))
                        {
                            //Read disposition information from Business attributes
                            readValues.ReadDispositionFromBusinessAttribute(((ConfigValue)_configContainer.CMEValues["interaction.disposition-object-name"]).Value.ToString());
                        }
                        else
                        {
                            _logger.Warn("interaction.disposition-object-name key-value is not configured");
                        }
                    }
                    //Read all skills
                    readValues.ReadAllSkills();
                    //Read all places
                    readValues.ReadAllPlaces();
                    //Read all DN's based on switch type
                    //readValues.ReadAllDNs();
                    //Read channel based not ready reason codes for voice, email and chat medias
                    readValues.ReadChannelNotReadyReasonCodes();
                    //Read global not ready reason codes
                    if (_configContainer.AllKeys.Contains("agent-global-status.not-ready-reasoncodes"))
                    {
                        string[] notReadyReasonCodes = ((string)_configContainer.GetValue("agent-global-status.not-ready-reasoncodes")).Split(',');
                        if (notReadyReasonCodes.Length > 0)
                        {
                            readValues.ReadGlobalNotReadyReasonCodes(notReadyReasonCodes.Distinct().ToArray <string>());
                        }
                    }
                    //Read Voice not Ready Reason Codes
                    if (_configContainer.AllKeys.Contains("agent-voice-status.not-ready-reasoncodes"))
                    {
                        string[] notReadyReasonCodes = ((string)_configContainer.GetValue("agent-voice-status.not-ready-reasoncodes")).Split(',');
                        if (notReadyReasonCodes.Length > 0)
                        {
                            readValues.ReadVoiceHierarchyLevelNotReadyReasonCodes(notReadyReasonCodes.Distinct().ToArray <string>());
                        }
                    }

                    CfgPersonQuery qPerson = new CfgPersonQuery();
                    qPerson.TenantDbid = ConfigContainer.Instance().TenantDbId;
                    qPerson.IsAgent    = 0;// 0 - Means select only Agents (or) 1 - means select only user(default)
                    System.Collections.Generic.ICollection <CfgPerson> _allPersons = _configContainer.ConfServiceObject.RetrieveMultipleObjects <CfgPerson>(qPerson);
                    //_configContainer.AllKeys.Add("AllPersons");
                    _configContainer.CMEValues.Add("AllPersons", _allPersons);
                    readValues.RegisterCMEAlterNotification(ConfigContainer.Instance().TenantDbId);
                    readValues = null;
                }
                else
                {
                    return(output);
                }
            }
            return(output);
        }