コード例 #1
0
        /// <summary>
        /// Метод отложенной загрузки/проверки данных
        /// </summary>
        internal void DelayLoad()
        {
            if (m_bIsLoaded)
            {
                return;
            }

            // Данные для типа инцидента и роли загружаем полностью,
            // что бы сделать потом внутреннюю проверку:
            IncidentType.LoadObject(new string[] { "Props", "States" });
            Role_Observer.LoadObject(new string[] { "IncidentType" });

            // Проверка внутреннего соответствия:
            // ... тип инцидента для ролей должен совпадать с заданным в конфигурации:
            ObjectOperationHelper helperType;

            helperType = Role_Observer.GetInstanceFromPropScalarRef("IncidentType");
            if (helperType.ObjectID != IncidentType.ObjectID)
            {
                throw new InvalidOperationException(String.Format(
                                                        "Тип инцидента \"{0}\" для заданной роли itws:role-for-observer( id=\"{1}\" ) не соответствует типу инцидента itws:incident-type( id=\"{2}\" )",
                                                        helperType.ObjectID.ToString(),
                                                        Role_Observer.ObjectID.ToString(),
                                                        IncidentType.ObjectID.ToString()
                                                        ));
            }

            // Фиксируем нужные нам для создания инцидента данные:
            // ... приоритет инцидента по умолчанию:
            ChangeIncident_DefaultPriority = (IncidentPriority)IncidentType.GetPropValue("DefaultPriority", XPropType.vt_i2);
            // ... начальное состояние инцидента; идентификатор объекта получаем
            // банальным XPath-запросом, опираясь на то, что свойство прогружено:
            XmlElement xmlDefaultState = (XmlElement)IncidentType.PropertyXml("States").SelectSingleNode("IncidentState[IsStartState='1']");

            if (null == xmlDefaultState)
            {
                throw new InvalidOperationException(String.Format(
                                                        "Для указанного типа инцидента (id={0}) стартовое состояние не определено",
                                                        IncidentType.ObjectID.ToString()
                                                        ));
            }
            ChangeIncident_StartState.ObjectID = new Guid(xmlDefaultState.GetAttribute("oid"));
            // ...запланированное время для наблюдателя, по умолчанию:
            DefaultDuration_for_ObserverRole = (int)Role_Observer.GetPropValue("DefDuration", XPropType.vt_i4);

            // Отдельно прямым запросом в БД определям тип внешней ссылки
            // для определения URL, по ее классу:
            XParamsCollection keys = new XParamsCollection();

            keys.Add("ServiceType", (int)ServiceSystemType.URL);
            LinkType_URL.LoadObject(keys);

            m_bIsLoaded = true;
        }
コード例 #2
0
        /// <summary>
        /// Метод отложенной загрузки/проверки данных
        /// </summary>
        internal void DelayLoad()
        {
            if (m_bIsLoaded)
            {
                return;
            }

            // Проверка указанных данных:
            TargetFolder.CheckExistence(true);
            Prop_CourseNumber.CheckExistence(true);
            Prop_CourseBeginningDate.CheckExistence(true);
            Prop_GoalStatus.CheckExistence(true);
            Prop_TrainingDirection.CheckExistence(true);
            Prop_TrainingCenter.CheckExistence(true);
            // ... данные для типа инцидента и ролей загружаем полностью,
            // что бы сделать потом внутреннюю проверку:
            IncidentType.LoadObject(new string[] { "Props", "States" });
            Role_Trained.LoadObject(new string[] { "IncidentType" });
            Role_Manager.LoadObject(new string[] { "IncidentType" });

            // Проверка внутреннего соответствия:
            // ... тип инцидента для ролей должен совпадать с заданным в конфигурации:
            ObjectOperationHelper helperType;

            helperType = Role_Trained.GetInstanceFromPropScalarRef("IncidentType");
            if (helperType.ObjectID != IncidentType.ObjectID)
            {
                throw new InvalidOperationException(String.Format(
                                                        "Тип инцидента \"{0}\" для заданной роли itws:role-for-trained( id=\"{1}\" ) не соответствует типу инцидента itws:incident-type( id=\"{2}\" )",
                                                        helperType.ObjectID.ToString(),
                                                        Role_Trained.ObjectID.ToString(),
                                                        IncidentType.ObjectID.ToString()
                                                        ));
            }
            helperType = Role_Manager.GetInstanceFromPropScalarRef("IncidentType");
            if (helperType.ObjectID != IncidentType.ObjectID)
            {
                throw new InvalidOperationException(String.Format(
                                                        "Тип инцидента \"{0}\" для заданной роли itws:role-for-manager( id=\"{1}\" ) не соответствует типу инцидента itws:incident-type( id=\"{2}\" )",
                                                        helperType.ObjectID.ToString(),
                                                        Role_Manager.ObjectID.ToString(),
                                                        IncidentType.ObjectID.ToString()
                                                        ));
            }

            // ... все доп. свойства должны быть указаны в типе инцидента:
            XmlElement xmlProps = IncidentType.PropertyXml("Props");

            checkAuxPropExistence(xmlProps, "prop-for-course-number", Prop_CourseNumber);
            checkAuxPropExistence(xmlProps, "prop-for-course-beginning-date", Prop_CourseBeginningDate);
            checkAuxPropExistence(xmlProps, "prop-for-goal-status", Prop_GoalStatus);
            checkAuxPropExistence(xmlProps, "prop-for-training-direction", Prop_TrainingDirection);
            checkAuxPropExistence(xmlProps, "prop-for-training-center", Prop_TrainingCenter);
            checkAuxPropExistence(xmlProps, "prop-for-education-sum", Prop_Summ);

            // Фиксируем нужные нам для создания инцидента данные:
            // ... приоритет инцидента по умолчанию:
            EduIncident_DefaultPriority = (IncidentPriority)IncidentType.GetPropValue("DefaultPriority", XPropType.vt_i2);
            // ... начальное состояние инцидента; идентификатор объекта получаем
            // банальным XPath-запросом, опираясь на то, что свойство прогружено:
            XmlElement xmlDefaultState = (XmlElement)IncidentType.PropertyXml("States").SelectSingleNode("IncidentState[IsStartState='1']");

            if (null == xmlDefaultState)
            {
                throw new InvalidOperationException(String.Format(
                                                        "Для указанного типа инцидента (id={0}) неопределено стартовое состояние",
                                                        IncidentType.ObjectID.ToString()
                                                        ));
            }
            EduIncident_StartState.ObjectID = new Guid(xmlDefaultState.GetAttribute("oid"));
            // ...запланированное время для менеджера, по умолчанию:
            DefaultDuration_for_ManagerRole = (int)Role_Manager.GetPropValue("DefDuration", XPropType.vt_i4);
            // ...запланированное время для обучаемого, по умолчанию:
            DefaultDuration_for_TrainedRole = (int)Role_Trained.GetPropValue("DefDuration", XPropType.vt_i4);

            m_bIsLoaded = true;
        }
コード例 #3
0
        /// <summary>
        /// Инициализация объекта конфигурации
        /// </summary>
        protected void initialize()
        {
            // Загружаем XML с данными основного конфигурационного файла
            load(m_sConfigFileName);
            // Для основного конфигурационного файла пространство имен ДОЛЖНО
            // БЫТЬ ОПРЕДЕЛЕНО С ЯВНЫМ ПРЕФИКСОМ:
            if (null == RootElementNSPrefix || 0 == RootElementNSPrefix.Length)
            {
                throw new ConfigurationErrorsException(
                          "Для всех элементов прикладного конфигурационного файла сервисов " +
                          "должны быть определены префиксы соответствующего пространства имен!");
            }

            // ИНИЦИАЛИЗАЦИЯ

            // #1: Данные "собственной" организации
            m_helperOwnOrganization = loadObjectPresentation(
                "itws:common-params/itws:own-organization",
                "определение \"собственной\" организации ",
                "Organization"
                );
            // ... проверяем, что для указанной организации задан признак "владелец" системы
            if (!(bool)m_helperOwnOrganization.GetPropValue("Home", XPropType.vt_boolean))
            {
                throw new ConfigurationErrorsException(
                          String.Format(
                              "{0}: Некорретное определение идентификатора \"собственной\" организации - " +
                              "указанное описание (itws:own-organization@id = {1}) описывает организацию," +
                              "у которой не задан признак \"Организация - владелец системы\"",
                              ERR_INCORRECT_CONFIG_DATA, m_helperOwnOrganization.ObjectID)
                          );
            }

            // #2: Получаем данные типа проектных затрат:
            // #2.1: ... для "Внешних проектов":
            m_helperExternalProjectsActivityType = loadObjectPresentation(
                "itws:common-params/itws:external-projects-activity-type",
                "определение типа проектных затрат для \"Внешних проектов\"",
                "ActivityType"
                );
            // ... проверяем, что для указанного типа проектных затрат
            // задан признак "активность по отношению ко внешним клиентам":
            if (!(bool)m_helperExternalProjectsActivityType.GetPropValue("AccountRelated", XPropType.vt_boolean))
            {
                throw new ConfigurationErrorsException(
                          String.Format(
                              "{0}: Некорретное определение идентификатора типа проектных затрат - " +
                              "указанное описание (external-projects-activity-type@id = {1}) описывает тип затрат," +
                              "у которого не задан признак \"Активность в отношении Клиента\"",
                              ERR_INCORRECT_CONFIG_DATA, m_helperExternalProjectsActivityType.ObjectID)
                          );
            }

            // #2.2: ... для "Пресейл-активности":
            m_helperPresaleProjectsActivityType = loadObjectPresentation(
                "itws:common-params/itws:presale-projects-activity-type",
                "определение типа проектных затрат для \"Пресейл-активности\"",
                "ActivityType"
                );

            // ... проверяем, что для указанного типа проектных затрат
            // задан признак "активность по отношению ко внешним клиентам":
            if (!(bool)m_helperPresaleProjectsActivityType.GetPropValue("AccountRelated", XPropType.vt_boolean))
            {
                throw new ConfigurationErrorsException(
                          String.Format(
                              "{0}: Некорретное определение идентификатора типа проектных затрат - " +
                              "указанное описание (presale-projects-activity-type@id = {1}) описывает тип затрат," +
                              "у которого не задан признак \"Активность в отношении Клиента\"",
                              ERR_INCORRECT_CONFIG_DATA, m_helperExternalProjectsActivityType.ObjectID)
                          );
            }
            // #2.3: ... для "Пилотных/инвестиционных проектов":
            m_helperPilotProjectsActivityType = loadObjectPresentation(
                "itws:common-params/itws:pilot-projects-activity-type",
                "определение типа проектных затрат для \"Пресейл-активности\"",
                "ActivityType"
                );

            // #2.4: ... для "Тендеров":
            m_helperTenderProjectsActivityType = loadObjectPresentation(
                "itws:common-params/itws:tender-projects-activity-type",
                "определение типа проектных затрат для \"Тендер-активности\"",
                "ActivityType"
                );
            // #3: Получаем список ссылок из Карты перевода флагов
            // пользователей в соотв. системные роли
            m_rolesMap.LoadFormConfigXml(this);

            // #4: Конфигурационные данные "общего" сервиса
            m_commonServiceParams = new CommonServiceConfigParams(this);
        }