private static Guid AddItemToRegestry(this CardData self, CardData refUniversal) { var sdp = self.Sections[CardOrd.Properties.ID]; RowData rtd = refUniversal.Sections[RefUniversal.ItemType.ID] .FindRow("@Name='Справочник готовых приборов'"); SubSectionData items = rtd.ChildSections[refUniversal.Type.AllSections["Item"].Id]; SubSectionData propertyItem = rtd.ChildSections[refUniversal.Type.AllSections["TypeProperties"].Id]; // Свойства записи RowData partyProperty = propertyItem.FindRow("@Name='Партия'"); RowData statusProperty = propertyItem.FindRow("@Name='Статус'"); RowData unitYearProperty = propertyItem.FindRow("@Name='Год прибора'"); RowData unitNumberProperty = propertyItem.FindRow("@Name='Номер прибора'"); RowData unitPassportProperty = propertyItem.FindRow("@Name='Паспорт прибора'"); RowData warrantyTalonProperty = propertyItem.FindRow("@Name='Гарантийный талон'"); RowData unitNameProperty = propertyItem.FindRow("@Name='Наименование прибора'"); // Свойства карточки RowData unit = sdp.FindRow("@Name='Прибор'"); RowData party = sdp.FindRow("@Name='№ партии'"); RowData unitYear = sdp.FindRow(string.Format("@Name = '{0}'", "/Год прибора")); RowData unitNumber = sdp.FindRow("@Name='Заводской номер прибора'"); // Создаем запись в справочнике готовых приборов RowData newItem = items.Rows.AddNew(); newItem.SetString("Name", self.Description); SubSectionData subrow = newItem.ChildSections[refUniversal.Type.AllSections["Properties"].Id]; // Прописываем свойства AddItem(subrow.Rows.AddNew(), unitNumberProperty.GetString("RowID"), unitNumber.GetString("DisplayValue"), unitNumber.GetString("Value")); AddItem(subrow.Rows.AddNew(), unitYearProperty.GetString("RowID"), unitYear.GetString("DisplayValue"), unitYear.GetString("Value")); AddItem(subrow.Rows.AddNew(), partyProperty.GetString("RowID"), party.GetString("DisplayValue"), party.GetString("Value")); AddItem(subrow.Rows.AddNew(), statusProperty.GetString("RowID"), "В эксплуатации", "6"); AddItem(subrow.Rows.AddNew(), unitNameProperty.GetString("RowID"), unit.GetString("DisplayValue"), unit.GetString("Value")); AddItem(subrow.Rows.AddNew(), unitPassportProperty.GetString("RowID"), self.Description, self.Id.ToString()); AddItem(subrow.Rows.AddNew(), unitNumber.GetString("RowID"), self.Description, self.Id.ToString()); AddItem(subrow.Rows.AddNew(), warrantyTalonProperty.GetString("RowID"), "", ""); return(newItem.Id); }
public static Boolean Synchronize(UserSession Session, String CardID) { logger.Info("cardId='{0}'", CardID); using (new Impersonator(ServerExtension.Domain, ServerExtension.User, ServerExtension.SecurePassword)) { Guid CardId = new Guid(CardID); switch (Session.CardManager.GetCardState(CardId)) { case ObjectState.Existing: CardData Card = Session.CardManager.GetCardData(CardId); Card.UnlockCard(); ExtraCard Extra = Card.GetExtraCard(); if (Extra.IsNull()) { logger.Info("Синхронизация не производилась, неверный тип карточки."); return(false); } if (String.IsNullOrEmpty(Extra.Name) || String.IsNullOrEmpty(Extra.ShortCategory) || (String.IsNullOrEmpty(Extra.Code) && !(Extra is ExtraCardMarketingFiles))) { logger.Info("Синхронизация не производилась, не заполнены обязательные поля."); return(false); } String Digest = Extra.ToString(); Boolean FileSynch = false; /*Синхронизация с реестром только для КД и ТД*/ if (Extra is ExtraCardCD || Extra is ExtraCardTD) { Guid RegItemId = Extra.RegID ?? Guid.Empty; if (RegItemId != Guid.Empty) { try { RowData RegItem = Session.CardManager.GetDictionaryData(RefUniversal.ID).Sections[RefUniversal.Item.ID].GetRow(RegItemId); if (RegItem.GetString(RefUniversal.Item.Name) != Digest) { logger.Info("Требуется синхронизация..."); RegItem.SetString(RefUniversal.Item.Name, Digest); foreach (RowData rowData in RegItem.ChildSections[0].Rows) { String PropertyName = rowData.GetString(RefUniversal.TypeProperties.Name); if ((PropertyName == "Код СКБ" && Extra is ExtraCardCD) || (PropertyName == "Обозначение документа" && Extra is ExtraCardTD)) { rowData.SetString(RefUniversal.TypeProperties.Value, Extra.CodeId); rowData.SetString(RefUniversal.TypeProperties.DisplayValue, Extra.Code); } else if (PropertyName == "Тип документа") { rowData.SetString(RefUniversal.TypeProperties.Value, Extra.Category); rowData.SetString(RefUniversal.TypeProperties.DisplayValue, Extra.Category); } else if (PropertyName == "Версия") { rowData.SetString(RefUniversal.TypeProperties.Value, Extra.Version); rowData.SetString(RefUniversal.TypeProperties.DisplayValue, Extra.Version); } } logger.Info("Синхронизация с реестром выполнена."); FileSynch = true; } else { logger.Info("Синхронизация не требуется."); } } catch (Exception Ex) { logger.WarnException("Не удалось синхронизировать с записью реестра: " + RegItemId, Ex); } } else { logger.Info("Регистрация в реестре"); RowData RegisterRow = Session.CardManager.GetDictionaryData(RefUniversal.ID).GetItemTypeRow(MyHelper.RefItem_TechDocRegister); SubSectionData RegisterTypeProperties = RegisterRow.ChildSections[RefUniversal.TypeProperties.ID]; RowData RegistrarUnit = Card.Sections[CardOrd.Properties.ID].GetProperty("Подразделение регистратора"); RowData Device = Card.Sections[CardOrd.Properties.ID].GetProperty("Прибор"); RowData RegItem = RegisterRow.ChildSections[RefUniversal.Item.ID].Rows.AddNew(); RegItem.SetString(RefUniversal.Item.Name, Card.Description); RegItem.SetString(RefUniversal.Item.Comments, Extra.Number); RowDataCollection PropertiesSubSectionRows = RegItem.ChildSections[RefUniversal.Properties.ID].Rows; RowData ItemPropertyRow = PropertiesSubSectionRows.AddNew(); ItemPropertyRow.SetGuid(RefUniversal.Properties.Property, RegisterTypeProperties.FindRow("@Name='" + (Extra is ExtraCardCD ? "Код СКБ" : "Обозначение документа") + "'").Id); ItemPropertyRow.SetString(RefUniversal.Properties.DisplayValue, Extra.Code); ItemPropertyRow.SetValue(RefUniversal.Properties.Value, Extra.CodeId, FieldType.Variant); ItemPropertyRow = PropertiesSubSectionRows.AddNew(); ItemPropertyRow.SetGuid(RefUniversal.Properties.Property, RegisterTypeProperties.FindRow("@Name='Тип документа'").Id); ItemPropertyRow.SetString(RefUniversal.Properties.DisplayValue, Extra.Category); ItemPropertyRow.SetValue(RefUniversal.Properties.Value, Extra.Category, FieldType.Variant); ItemPropertyRow = PropertiesSubSectionRows.AddNew(); ItemPropertyRow.SetGuid(RefUniversal.Properties.Property, RegisterTypeProperties.FindRow("@Name='Версия'").Id); ItemPropertyRow.SetString(RefUniversal.Properties.DisplayValue, Extra.Version); ItemPropertyRow.SetValue(RefUniversal.Properties.Value, Extra.Version, FieldType.Variant); ItemPropertyRow = PropertiesSubSectionRows.AddNew(); ItemPropertyRow.SetGuid(RefUniversal.Properties.Property, RegisterTypeProperties.FindRow("@Name='Статус'").Id); ItemPropertyRow.SetString(RefUniversal.Properties.DisplayValue, ((DocumentState)Extra.Status).GetDescription()); ItemPropertyRow.SetValue(RefUniversal.Properties.Value, (Int32)(DocumentState)Extra.Status, FieldType.Variant); ItemPropertyRow = PropertiesSubSectionRows.AddNew(); ItemPropertyRow.SetGuid(RefUniversal.Properties.Property, RegisterTypeProperties.FindRow("@Name='Подразделение регистратора'").Id); ItemPropertyRow.SetString(RefUniversal.Properties.DisplayValue, RegistrarUnit.GetString(CardOrd.Properties.DisplayValue)); ItemPropertyRow.SetValue(RefUniversal.Properties.Value, RegistrarUnit.GetString(CardOrd.Properties.Value), FieldType.Variant); ItemPropertyRow = PropertiesSubSectionRows.AddNew(); ItemPropertyRow.SetGuid(RefUniversal.Properties.Property, RegisterTypeProperties.FindRow("@Name='Прибор'").Id); ItemPropertyRow.SetString(RefUniversal.Properties.DisplayValue, Device.GetString(CardOrd.Properties.DisplayValue)); ItemPropertyRow.SetValue(RefUniversal.Properties.Value, Device.ChildSections[CardOrd.SelectedValues.ID].FirstRow.GetString(CardOrd.SelectedValues.SelectedValue), FieldType.Variant); ItemPropertyRow = PropertiesSubSectionRows.AddNew(); ItemPropertyRow.SetGuid(RefUniversal.Properties.Property, RegisterTypeProperties.FindRow("@Name='Ссылка на карточку документа'").Id); ItemPropertyRow.SetString(RefUniversal.Properties.DisplayValue, Extra.Card.Description); ItemPropertyRow.SetValue(RefUniversal.Properties.Value, Extra.Card.Id, FieldType.Variant); ItemPropertyRow = PropertiesSubSectionRows.AddNew(); ItemPropertyRow.SetGuid(RefUniversal.Properties.Property, RegisterTypeProperties.FindRow("@Name='Файлы документа'").Id); ItemPropertyRow.SetString(RefUniversal.Properties.DisplayValue, Extra.Path); ItemPropertyRow.SetValue(RefUniversal.Properties.Value, Extra.Card.Id, FieldType.Variant); Extra.RegID = RegItem.Id; logger.Info("В реестр добавлена запись: " + Card.Description); } } else { FileSynch = true; } if (FileSynch) { logger.Info("Синхронизация пути..."); String OldPath = Extra.Path; logger.Info("Старый путь: " + OldPath); String NewPath = String.Empty; logger.Info("Новый путь: " + NewPath); if (Directory.Exists(OldPath)) { DirectoryInfo OldFolder = new DirectoryInfo(OldPath); DirectoryInfo ParentFolder = OldFolder.Parent; if (ParentFolder != null) { logger.Info("Старый путь:" + OldPath); NewPath = MyHelper.RemoveInvalidFileNameChars(Digest); if (NewPath != Digest) { logger.Info("Удалены недопустимые символы: " + Digest); } NewPath = Path.Combine(ParentFolder.FullName, NewPath); String TempPath = Path.Combine(ParentFolder.FullName, Path.GetRandomFileName()); logger.Info("Временный путь:" + TempPath); logger.Info("Новый путь:" + NewPath + @"\"); try { logger.Info("Перемещение во временную папку"); Directory.Move(OldPath, TempPath); try { logger.Info("Перемещение в новую папку"); Directory.Move(TempPath, NewPath); } catch (Exception Ex) { logger.WarnException("Перемещение не удалось!", Ex); try { logger.Info("Перемещение в старую папку"); Directory.Move(TempPath, OldPath); } catch (Exception SubEx) { logger.Warn("Перемещение не удалось!"); logger.ErrorException("Перемещение не удалось!", SubEx); NewPath = String.Empty; } } } catch (Exception Ex) { logger.WarnException("Перемещение не удалось!", Ex); NewPath = String.Empty; } if (!String.IsNullOrWhiteSpace(NewPath)) { if (!(Extra is ExtraCardMarketingFiles)) { Extra.Path = NewPath + @"\"; } logger.Info("Синхронизация пути выполнена"); } else { logger.Warn("Синхронизация пути не выполнена"); } } else { logger.Warn("Отсутствует родительская папка!"); } } else { logger.Info("Отсутствует путь для синхронизации!"); } } return(true); default: return(false); } } }