// Установить значение любого объекта GR public static void SetAttributeValueRegular(this IgObject obj , bool isUDA , string name , MxDataType type , object value , string description = "" , string engUnits = "" ) { if (obj == null) { throw new ArgumentNullException("IgObject is null"); } //Все типы MxString* сводятся только в тип MxInternationalizedString if (type == MxDataType.MxString || type == MxDataType.MxInternationalizedString || type == MxDataType.MxBigString) { type = MxDataType.MxInternationalizedString; } if (SystemAttributes.TryGetValue(name, out var act)) { obj.CheckOutWithCheckStatus(); try { act(obj, value?.ToString()); obj.SaveAndCheckIn($"System attribute {name} = {(value == null ? "null" : $"\"{value}\"")}"); }
//установка значения атриибутов public void SetValueAttributes(IgObject gobj, AttributesDictionary source) { if (gobj == null) { throw new IgObjectsNullReferenceExceptions(); } if (source == null) { throw new ArgumentNullException($"Класс-слоаварь равен null"); } gobj.CheckOutWithCheckStatus(); foreach (var item in source) { IAttribute attr = gobj.GetAttributesAny()[item.Key]; if (attr.CommandResult.Successful && attr != null) { attr.SetValue(item.Value); } } gobj.SaveAndCheckIn(); if (!gobj.CommandResult.Successful) { throw new GalaxyExceptions($"Не удается охранить объект {gobj.Tagname}."); } }
//Проверить, существует ли такой атрибут. public static bool IsExistAttribute(this IgObject gobj, string attrname) { if (gobj == null) { throw new ArgumentNullException($" Объект {gobj.Tagname} не существует или NULL"); } if (string.IsNullOrWhiteSpace(attrname)) { throw new Exception($"Имя атрибутта {nameof(attrname)} не может быть пустым"); } try { var attrs = gobj.GetAttributesAny();// TODO: проверить нужно ли брать на редактирвоание var attr = attrs[attrname]; if (attr == null) { return(false); } return(true); } catch (Exception) { return(false); throw; //TODO: может и не надо прокидывать дальше } }
// Проверяем статус редактирования и берем на редактирвоание в противном случае public static void CheckOutWithCheckStatus(this IgObject gobj) { if (gobj.CheckoutStatus != ECheckoutStatus.notCheckedOut) { throw new GalaxyObjectAlreadyCheckOutedException(gobj.Tagname); } gobj.CheckOut(); }
// возвращает значение атрибта в MX public IMxValue GetMxValueAttribute(IgObject gobj, string attr_name) { if (string.IsNullOrEmpty(attr_name)) { throw new AttributeNullReferenceException(); } var attrs = gobj.GetAttributesAny(); return(attrs[attr_name].value); }
public static void SaveAndCheckIn(this IgObject obj, string comment = null) { obj.Save(); if (comment == null) { obj.CheckIn(comment); } else { obj.CheckIn(); } }
public static string[] GetInhScriptsName(this IgObject gobj) { if (gobj == null) { throw new IgObjectsNullReferenceExceptions(); } var attrStringXml_mine = gobj.GetAttributesAny(false)["_InheritedExtensions"].value.GetString(); XmlSerializer xmlExtension_mine = new XmlSerializer(typeof(ExtensionInfo)); var attrString = new StringReader(attrStringXml_mine); var attrDeserialize = (ExtensionInfo)xmlExtension_mine.Deserialize(attrString); var res_mine = attrDeserialize.ObjectExtension.Extension.Select(x => x.Name).ToArray(); return(res_mine); }
public static string[] GetInheritsUDANames(this IgObject gobj) { if (gobj == null) { throw new IgObjectsNullReferenceExceptions(); } var attrStringXML_inh = gobj.Attributes["_InheritedUDAs"].value.GetString(); XmlSerializer makeXML_inh = new XmlSerializer(typeof(UDAInfo)); var attrString_inh = new StringReader(attrStringXML_inh); var attrUDeserialize_inh = (UDAInfo)makeXML_inh.Deserialize(attrString_inh); var res_inh = attrUDeserialize_inh.Attribute.Select(x => x.Name); return(res_inh.ToArray()); }
// Чекиним объект public void CheckIn(IgObject igobj, DateTime dt = default(DateTime)) { if (igobj == null) { throw new ArgumentNullException($"Объект не может быть NULL"); } if (dt == null) { igobj.CheckIn(DateTime.Now.ToString("yyyyMMdd HH:mm:ss")); //TODO: проверить как передается время } else { igobj.CheckIn(dt.ToString("yyyyMMdd HH:mm:ss")); } }
//Получить коллекцию атрибутов в IgObject( IsConfigurable - конфигурируемые или все) public static IAttributes GetAttributesAny(this IgObject gobj, bool IsConfigurable = false) { if (gobj == null) { throw new ArgumentNullException($" Объект {gobj.Tagname} не существует или NULL"); } if (IsConfigurable) { return(gobj.ConfigurableAttributes); } else { return(gobj.Attributes); } }
// Получаем знаения UDA public static Dictionary <string, string> GetUDAValues(this IgObject gobj) { if (gobj == null) { throw new IgObjectsNullReferenceExceptions(); } Dictionary <string, string> udas = new Dictionary <string, string>(); var attrs = gobj?.GetAttributesAny(); var uda_names = gobj?.GetInheritsUDANames().Concat(gobj?.GetMineUDANames().ToArray()); foreach (var name in uda_names) { udas.Add(name, attrs[name].value.GetString()); } return(udas); }
//Полчучаем значение атрибута public static string GetAttributeValue(this IgObject gobj, string attrname) { if (gobj == null) { throw new ArgumentNullException($" Объект {gobj.Tagname} не существует или NULL"); } if (string.IsNullOrWhiteSpace(attrname)) { throw new Exception($"Имя атрибута {nameof(attrname)} не может быть пустым"); } if (gobj.IsExistAttribute(attrname)) { var attrs = gobj.GetAttributesAny(); return(attrs[attrname]?.value?.GetString()); } else { return(null); } }
/// <summary> /// Backup a Single GObject to a File /// </summary> /// <param name="ExportType"></param> /// <param name="GalaxyObject"></param> /// <param name="BackupFileName"></param> /// <returns></returns> public int BackupToFile(EExportType ExportType, IgObject GalaxyObject, String BackupFileName) { IgObjects GalaxyObjects; String[] SingleItemName = new String[1]; try { // first verify connection if (!this.Connected) { throw new Exception("Galaxy not connected"); } SingleItemName[0] = GalaxyObject.Tagname; if (SingleItemName[0].Substring(0, 1) == "$") { //Template GalaxyObjects = this.Galaxy.QueryObjectsByName(EgObjectIsTemplateOrInstance.gObjectIsTemplate, ref SingleItemName); } else { // Instance GalaxyObjects = this.Galaxy.QueryObjectsByName(EgObjectIsTemplateOrInstance.gObjectIsInstance, ref SingleItemName); } if (GalaxyObjects.count > 0) { return(BackupToFile(ExportType, GalaxyObjects, BackupFileName)); } return(0); } catch (Exception ex) { throw ex; } }
//Получить тип // если вернулось MxNoData - значит атрибута не существует // TODO: проверить нужен ли check out public static MxDataType GetAttributeMxDataType(this IgObject gobj, string attrname) { if (gobj == null) { throw new ArgumentNullException($" Объект {gobj.Tagname} не существует или NULL"); } if (string.IsNullOrWhiteSpace(attrname)) { throw new Exception($"Имя атрибута {nameof(attrname)} не может быть пустым"); } MxDataType type = MxDataType.MxNoData; gobj.CheckOutWithCheckStatus(); if (gobj.IsExistAttribute(attrname)) { type = gobj.ConfigurableAttributes[attrname].DataType; gobj.SaveAndCheckIn($"Получение типа атрибута {attrname} для объекта {gobj}."); } else { throw new AttributeNullReferenceException(); } return(type); }