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); } }
/// <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()); } }
/// <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(); }
/// <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 )); } }
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); }
/// <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); }
/// <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)); } } }
/// <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); }