示例#1
0
        public bool UpdateTender(string sTenderID, string sNewFolderID)
        {
            // Проверяем параметры
            Guid uidTenderID = ObjectOperationHelper.ValidateRequiredArgumentAsID(sTenderID, "Идентификатор Тендера (sTenderID)");
            Guid uidFolderID = ObjectOperationHelper.ValidateRequiredArgumentAsID(sNewFolderID, "Идентификатор Тендера в ITracker (sNewFolderID)");
            // Загрузим объект типа "Тендер"
            ObjectOperationHelper helper = ObjectOperationHelper.GetInstance("Tender", uidTenderID);
            bool bExists = helper.SafeLoadObject(null, null);

            //Если данного тендера в системе СУТ нет,то выходим
            if (!bExists)
            {
                return(false);
            }

            ObjectOperationHelper folderHelper = helper.GetInstanceFromPropScalarRef("Folder", false);

            if (folderHelper == null || folderHelper.ObjectID != uidFolderID)
            {
                // Проставляем свойство "Тендер в Трекере"
                helper.SetPropScalarRef("Folder", "Folder", uidFolderID);
                helper.DropPropertiesXmlExcept("Folder");
                helper.SaveObject();
                return(true);
            }
            else
            {
                return(true);
            }
        }
示例#2
0
        /// <summary>
        /// Метод получения идентификаторов системных ролей, по умолчанию присваиваемых всем новым сотрудникам
        /// </summary>
        protected void getDefaultSystemRoles()
        {
            DataTable result = ObjectOperationHelper.ExecAppDataSource("GetDefaultSystemRoles", null);

            for (int i = 0; i < result.Rows.Count; i++)
            {
                m_defaultSystemRoles.Add(result.Rows[i][0].ToString());
            }
        }
示例#3
0
        /// <summary>
        /// Параметризированный конструктор
        /// Выполняет до-загрузку данных о подчиненных подразделениях, если
        /// это требуется в соответствии с заданными параметрами конфигурации
        /// </summary>
        /// <param name="xmlList_ExceptedDepsList">
        /// Перечень элемментов itws:department из секции itws:excepted-departments.
        /// Может быть null или пустым.
        /// </param>
        public ExpensesProcessPrarms(XmlNodeList xmlList_ExceptedDepsList)
        {
            StringBuilder sbExceptedDepsList           = new StringBuilder();
            StringBuilder sbExceptedDepsWithNestedList = new StringBuilder();

            if (null != xmlList_ExceptedDepsList && 0 != xmlList_ExceptedDepsList.Count)
            {
                // Перебор всех элементов конфигурации; формируется две строки -
                // перечень идентификаторов подразделений "как есть" и перечень
                // идентификаторов подразделений, для которых еще надо определить
                // подчиненных:
                foreach (XmlElement xmlExceptedDep in xmlList_ExceptedDepsList)
                {
                    if (null == xmlExceptedDep)
                    {
                        continue;
                    }
                    string sDepID = xmlExceptedDep.GetAttribute("id");
                    ObjectOperationHelper.ValidateRequiredArgumentAsID(sDepID, "Идентификатор подразделения (" + sDepID + ")");

                    if (String.Empty == xmlExceptedDep.GetAttribute("include-nested"))
                    {
                        sbExceptedDepsList.Append(sDepID).Append(",");
                    }
                    else
                    {
                        sbExceptedDepsWithNestedList.Append(sDepID).Append(",");
                    }
                }

                // Если есть такие, для которых надо определить подчиненных, то
                // выполняем действия по дозагрузке: получение данных с сервера:
                if (sbExceptedDepsWithNestedList.Length > 0)
                {
                    XParamsCollection dsParams = new XParamsCollection();
                    sbExceptedDepsWithNestedList.Length -= 1;
                    dsParams.Add("SrcList", sbExceptedDepsWithNestedList.ToString());

                    object oResult = ObjectOperationHelper.ExecAppDataSourceScalar("CommonService-INIT-ExpandDepsIDsWithNested", dsParams);
                    if (null != oResult && DBNull.Value != oResult)
                    {
                        sbExceptedDepsList.Append(oResult.ToString()).Append(",");
                    }
                }
            }

            // Итоговый список
            if (sbExceptedDepsList.Length > 0)
            {
                sbExceptedDepsList.Length -= 1;
            }
            m_sEmpExpenses_ExceptedDepsList = sbExceptedDepsList.ToString();
        }
示例#4
0
        /// <summary>
        /// Внутренний вспомогательный метод проверки
        /// </summary>
        /// <param name="xmlProps"></param>
        /// <param name="sPropName"></param>
        /// <param name="propHelper"></param>
        private void checkAuxPropExistence(XmlElement xmlProps, string sPropName, ObjectOperationHelper propHelper)
        {
            XmlNode xmlProp = xmlProps.SelectSingleNode(String.Format("IncidentProp[@oid='{0}']", propHelper.ObjectID.ToString()));

            if (null == xmlProp)
            {
                throw new InvalidOperationException(String.Format(
                                                        "Тип инцидента itws:incident-type( id=\"{0}\" ) не содержит определение доп. свойства {1}( id=\"{2}\" )",
                                                        IncidentType.ObjectID,
                                                        sPropName,
                                                        propHelper.ObjectID
                                                        ));
            }
        }
示例#5
0
        public TASTenderInfo[] GetTendersInfo(Guid[] objectIDs)
        {
            XParamsCollection dsParams = new XParamsCollection();

            // Если заданы идентификаторы Тендеров, то добавим их в параметры источника данных
            if (objectIDs != null)
            {
                foreach (Guid objectID in objectIDs)
                {
                    dsParams.Add("ObjectID", objectID);
                }
            }

            // Зачитаем данные о тендерах:
            DataTable oDataTable = ObjectOperationHelper.ExecAppDataSource("SyncTAS-TendersInfo", dsParams);

            if (null == oDataTable)
            {
                return(new TASTenderInfo[0]);
            }

            TASTenderInfo[] arrTenderInfo = new TASTenderInfo[oDataTable.Rows.Count];
            // Пробежимся по всем строкам и сформируем результат
            for (int nRowIndex = 0; nRowIndex < oDataTable.Rows.Count; nRowIndex++)
            {
                TASTenderInfo info = new TASTenderInfo();
                info.ObjectID    = oDataTable.Rows[nRowIndex]["ObjectID"].ToString();
                info.ProjectCode = (DBNull.Value != oDataTable.Rows[nRowIndex]["Number"])
                                        ? oDataTable.Rows[nRowIndex]["Number"].ToString() : null;
                info.Name     = oDataTable.Rows[nRowIndex]["Name"].ToString();
                info.Director = (DBNull.Value != oDataTable.Rows[nRowIndex]["Director"])
                                        ? oDataTable.Rows[nRowIndex]["Director"].ToString() : null;
                info.Customer = (DBNull.Value != oDataTable.Rows[nRowIndex]["TenderCustomer"])
                                        ? oDataTable.Rows[nRowIndex]["TenderCustomer"].ToString() : null;
                info.Folder = (DBNull.Value != oDataTable.Rows[nRowIndex]["Folder"])
                                        ? oDataTable.Rows[nRowIndex]["Folder"].ToString() : null;
                info.Initiator = (DBNull.Value != oDataTable.Rows[nRowIndex]["Initiator"])
                                        ? oDataTable.Rows[nRowIndex]["Initiator"].ToString() : null;
                info.InputDate = (DBNull.Value != oDataTable.Rows[nRowIndex]["InputDate"])
                                        ? ((DateTime)oDataTable.Rows[nRowIndex]["InputDate"]).ToString("yyyy-MM-ddTHH:mm:ss") : null;

                // Добавим считанные данные в массив
                arrTenderInfo[nRowIndex] = info;
            }
            return(arrTenderInfo);
        }
示例#6
0
        /// <summary>
        /// Внутренний метод загрузки данных ds-объекта заданного типа,
        /// идентификатор которого определен в конфигурационном файле по
        /// заданному XPath-пути
        /// </summary>
        /// <param name="sElementPath">XPath-путь для элемента, задающего id объекта</param>
        /// <param name="sElementDescr">Описание объекта (исп. при генерации ошибки в тексте)</param>
        /// <param name="sTargetObjectType">Тип ds-объекта</param>
        /// <returns>
        /// Инициализированный и загруженные Helper-объект
        /// </returns>
        private ObjectOperationHelper loadObjectPresentation(
            string sElementPath,
            string sElementDescr,
            string sTargetObjectType)
        {
            XmlElement xmlElement = (XmlElement)SelectNode(sElementPath);

            if (null == xmlElement)
            {
                throw new ConfigurationErrorsException(String.Format(
                                                           "{0}: Не задано {1} (элемент {2})",
                                                           ERR_INCORRECT_CONFIG_DATA, sElementDescr, sElementPath
                                                           ));
            }
            // ... пробуем зачитать идентификатор - сразу как Guid:
            Guid uidTargetObjectID = Guid.Empty;

            try
            {
                uidTargetObjectID = new Guid(xmlElement.GetAttribute("id"));
                if (Guid.Empty == uidTargetObjectID)
                {
                    throw new ApplicationException("Ожидается не-нулевой идентификатор объекта (атрибут id)!");
                }
            }
            catch (Exception err)
            {
                throw new ConfigurationErrorsException(
                          String.Format(
                              "{0}: Некорретное {1} - значение атрибута id элемента {2} ({3})",
                              ERR_INCORRECT_CONFIG_DATA,
                              sElementDescr,
                              sElementPath,
                              xmlElement.GetAttribute("id")
                              ), err
                          );
            }
            // ... пробуем загрузить описание объекта:
            ObjectOperationHelper helper = ObjectOperationHelper.GetInstance(sTargetObjectType, uidTargetObjectID);

            helper.LoadObject();

            return(helper);
        }
示例#7
0
        /// <summary>
        /// Метод комплексной проверки корректности значений описания Организации
        /// </summary>
        /// <param name="bTestOID">Признак - проверять или нет идентификатор ObjectID</param>
        public void Validate(bool bTestOID)
        {
            if (bTestOID)
            {
                ObjectOperationHelper.ValidateRequiredArgument(
                    ObjectID,
                    "Идентификатор организации в системе Incident Tracker");
            }

            ObjectOperationHelper.ValidateOptionalArgument(
                ShortName,
                "Краткое наименование организации (OrganizationInfo.ShortName)");

            ObjectOperationHelper.ValidateRequiredArgument(
                Name,
                "Полное наименование организации (OrganizationInfo.Name)");

            ObjectOperationHelper.ValidateOptionalArgument(
                DirectorEmployeeID,
                "Идентификатор сотрудника - Директора Клиента (OrganizationInfo.DirectorEmployeeID)",
                typeof(Guid));

            ObjectOperationHelper.ValidateOptionalArgument(
                ParentOrganizationID,
                "Идентификатор вышестоящей организации (OrganizationInfo.ParentOrganizationID)",
                typeof(Guid));

            if (null != BranchesIDs)
            {
                for (int nIndex = 0; nIndex < BranchesIDs.Length; nIndex++)
                {
                    ObjectOperationHelper.ValidateOptionalArgument(
                        BranchesIDs[nIndex],
                        String.Format("Идентификатор отрасли, соотнесенной с организацией (OrganizationInfo.BranchesIDs[{0}])", nIndex),
                        typeof(Guid));
                }
            }
        }
示例#8
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);
        }