private void UpdateSpcObjByPilot(SpcObject spcObject) { var needToChange = false; var loader = new ObjectLoader(_objectsRepository); loader.Load(spcObject.GlobalId, obj => { if (obj == null) { return; } var builder = _objectModifier.Edit(obj); foreach (var spcColumn in spcObject.Columns) { var spcColVal = ValueTextClear(spcColumn.Value); // проверка нужно ли изменять объект foreach (var attrObj in obj.Attributes) { if (attrObj.Key != spcColumn.TypeName) { continue; } if (attrObj.Value.ToString() == spcColVal) { continue; } needToChange = true; if (int.TryParse(spcColVal, out var i)) { builder.SetAttribute(spcColumn.TypeName, i); } else { builder.SetAttribute(spcColumn.TypeName, spcColVal); } } } // получаем pdf файл из Обозревателя var fileFromPilot = obj.Files.FirstOrDefault(f => IsFileExtension(f.Name, ".pdf")); var doc = spcObject.Documents.FirstOrDefault(f => IsFileExtension(f.FileName, SOURCE_DOC_EXT)); if (doc != null && fileFromPilot != null) { var pdfFile = spcObject.PreviewDocument; // md5 в нижнем регистре расчитывается и возвращается пилотом var fileNameMd5 = CalculatorMd5Checksum.Go(pdfFile); if (!string.IsNullOrEmpty(fileNameMd5) && fileFromPilot.Md5 != fileNameMd5) { needToChange = true; builder.CreateFileSnapshot("").AddFile(pdfFile); } } if (needToChange) { _objectModifier.Apply(); } }); }
private void UpdateSpcByPilot(Specification spc) { var loader = new ObjectLoader(_objectsRepository); loader.Load(spc.GlobalId, obj => { var needToChange = false; var builder = _objectModifier.Edit(obj); var spcName = ValueTextClear(spc.Name); var spcDesignation = ValueTextClear(spc.Designation); // проверка нужно ли изменять объект foreach (var attrObj in obj.Attributes) { if (attrObj.Key == "name") { if (attrObj.Value.ToString() != spcName) { builder.SetAttribute(attrObj.Key, spcName); needToChange = true; } } if (attrObj.Key == "mark") { if (attrObj.Value.ToString() != spcDesignation) { builder.SetAttribute(attrObj.Key, spcDesignation); needToChange = true; } } } // получаем xps файл из Обозревателя var fileFromPilot = obj.Files.FirstOrDefault(f => IsFileExtension(f.Name, ".xps")); var xpsFile = spc.PreviewDocument; if (xpsFile != null && fileFromPilot != null) { // md5 в нижнем регистре расчитывается и возвращается пилотом var fileNameMd5 = CalculatorMd5Checksum.Go(xpsFile); if (!string.IsNullOrEmpty(fileNameMd5) && fileFromPilot.Md5 != fileNameMd5) { builder.CreateFileSnapshot("").AddFile(xpsFile); needToChange = true; } } if (needToChange) { _objectModifier.Apply(); } }); }
private void SetDocOnMenuClick() { var loader = new ObjectLoader(_objectsRepository); if (_listSpec == null) { return; } if (_listSpec.Count == 0) { return; } // для объектов спецификациий формируем pdf, для спецификаций формируем xps // формируем вторичное представление для спецификаций using (var k = new KompasConverter()) { k.KompasConvertToXps(_listSpec); foreach (var spc in _listSpec) { k.KompasConvertToPdf(spc.ListSpcObjects); } } // прикрепляем xps'ки foreach (var spc in _listSpec) { if (spc.GlobalId == Guid.Empty || spc.PreviewDocument == null) { continue; } loader.Load(spc.GlobalId, obj => { var builder = _objectModifier.Edit(obj); builder.AddFile(spc.PreviewDocument); _objectModifier.Apply(); }); foreach (var spcObject in spc.ListSpcObjects) { if (spcObject.GlobalId != Guid.Empty && spcObject.PreviewDocument != null) { loader.Load(spcObject.GlobalId, obj => { var builder = _objectModifier.Edit(obj); builder.AddFile(spcObject.PreviewDocument); _objectModifier.Apply(); }); } } } }
private void CreateNewSpcObjToPilot(IDataObject parent, SpcObject spcObject) { var t = GetTypeBySectionName(spcObject.SectionName); if (t == null) { return; } var builder = _objectModifier.Create(parent, t); spcObject.GlobalId = builder.DataObject.Id; foreach (var attr in spcObject.Columns) { var val = attr.Value; if (string.IsNullOrEmpty(attr.TypeName) || string.IsNullOrEmpty(val)) { continue; } // очишаем значение от служебных символов и выражений val = ValueTextClear(val); // в качестве наименование передаётся внутренее имя (а не то которое отображается) if (int.TryParse(val, out var i)) { builder.SetAttribute(attr.TypeName, i); } else { builder.SetAttribute(attr.TypeName, val); } } var doc = spcObject.Documents.FirstOrDefault(f => IsFileExtension(f.FileName, SOURCE_DOC_EXT)); if (doc == null) { return; } var fileName = doc.FileName; string[] paths = { fileName }; var storageObjects = _objectsRepository.GetStorageObjects(paths); var storageObject = storageObjects.FirstOrDefault(); if (File.Exists(spcObject.PreviewDocument)) { builder.AddFile(spcObject.PreviewDocument); } _objectModifier.Apply(); if (storageObject == null) { return; } if (storageObject.DataObject.Id == Guid.Empty) { return; } var loader = new ObjectLoader(_objectsRepository); loader.Load(spcObject.GlobalId, obj => { foreach (var relation in obj.Relations.Where(x => x.Type == ObjectRelationType.SourceFiles)) { _objectModifier.RemoveLink(obj, relation); } var relationId = Guid.NewGuid(); var relationName = relationId.ToString(); const ObjectRelationType relationType = ObjectRelationType.SourceFiles; var selectedRelation = new Relation { Id = relationId, Type = relationType, Name = storageObject.DataObject.DisplayName, TargetId = storageObject.DataObject.Id }; var chosenRelation = new Relation { Id = relationId, Type = relationType, Name = relationName, TargetId = builder.DataObject.Id }; _objectModifier.CreateLink(selectedRelation, chosenRelation); _objectModifier.Apply(); }); }
private void CreateNewSpcToPilot(IDataObject parent, Specification spc) { var t = GetTypeSpecification(); var builder = _objectModifier.Create(parent, t); spc.GlobalId = builder.DataObject.Id; builder.SetAttribute("name", spc.Name); builder.SetAttribute("mark", ValueTextClear(spc.Designation)); // todo: нужен callbakc о создании или изменении объекта //if (File.Exists(spc.PreviewDocument)) //{ // builder.AddFile(spc.PreviewDocument); //} _objectModifier.Apply(); var loader = new ObjectLoader(_objectsRepository); loader.Load(spc.GlobalId, obj => { if (!File.Exists(spc.FileName)) { return; } string[] paths = { spc.FileName }; var storageObjects = _objectsRepository.GetStorageObjects(paths); var storageObject = storageObjects.FirstOrDefault(); if (storageObject == null) { return; } foreach (var relation in obj.Relations.Where(x => x.Type == ObjectRelationType.SourceFiles)) { _objectModifier.RemoveLink(obj, relation); } var relationId = Guid.NewGuid(); var relationName = relationId.ToString(); const ObjectRelationType relationType = ObjectRelationType.SourceFiles; var selectedRelation = new Relation { Id = relationId, Type = relationType, Name = storageObject.DataObject.DisplayName, TargetId = storageObject.DataObject.Id }; var chosenRelation = new Relation { Id = relationId, Type = relationType, Name = relationName, TargetId = spc.GlobalId }; _objectModifier.CreateLink(selectedRelation, chosenRelation); _objectModifier.Apply(); foreach (var spcObject in spc.ListSpcObjects) { if (spcObject.SectionNumber == 15) { continue; } CreateNewSpcObjToPilot(obj, spcObject); } if (spc.Children == null) { return; } foreach (var cSpc in spc.Children) { CreateNewSpcToPilot(obj, cSpc); } }); }