コード例 #1
0
        // Установить значение любого объекта 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}\"")}");
                }
コード例 #2
0
        /// <summary>
        /// Получение типа.
        /// </summary>
        public static void PutMxValue(ref MxValue valueObj, MxDataType type, string value)
        {
            switch (type)
            {
            case MxDataType.MxBoolean:  valueObj.PutBoolean(bool.Parse(value)); break;

            case MxDataType.MxInteger:  valueObj.PutInteger(int.Parse(value)); break;

            case MxDataType.MxFloat:    valueObj.PutFloat(float.Parse(value)); break;

            case MxDataType.MxDouble:   valueObj.PutDouble(double.Parse(value)); break;

            case MxDataType.MxString:   valueObj.PutString(value); break;

            //case MxDataType.MxTime:     valueObj.PutTime(DateTime.Parse(value)); break;
            default:                    valueObj.PutString(value); break;
            }
        }
コード例 #3
0
        //Получить тип
        // если вернулось 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);
        }
コード例 #4
0
        void workerImport_DoWork(object sender, DoWorkEventArgs e)
        {
            DateTime   t0 = DateTime.Now;
            int        createSuccessCount   = 0;
            int        recreateSuccessCount = 0;
            int        updateSuccessCount   = 0;
            int        faultCount           = 0;
            int        delay      = 50;
            UpdateType updateType = UpdateType.Update;
            int        index      = 0;
            double     progress   = 0;
            int        count      = 0;

            try
            {
                //string nodeName = Environment.MachineName;
                string nodeName   = Global.Default.varXml.SystemPlatform.NodeName;
                string galaxyName = Global.Default.varXml.SystemPlatform.GalaxyName;

                // create GRAccessAppClass object
                GRAccessApp grAccess = new GRAccessAppClass();

                Report(string.Format("Подключение к Galaxy ({0}/{1})...\r\n", nodeName, galaxyName));

                // try to get galaxy
                IGalaxies gals = grAccess.QueryGalaxies(nodeName);
                if (gals == null || grAccess.CommandResult.Successful == false)
                {
                    Report(string.Format("Error!\r\nCustomMessage - {0}\r\nCommandResult - {1}\r\n", grAccess.CommandResult.CustomMessage, grAccess.CommandResult.Text));
                    return;
                }
                else
                {
                    Report("Подключен.\r\n");
                }
                IGalaxy galaxy = gals[galaxyName];

                string login    = Global.Default.varXml.SystemPlatform.Login;
                string password = Global.Default.varXml.SystemPlatform.Password;

                Report(string.Format("Авторизация {0}/{1}...\r\n", login, password));

                // log in
                galaxy.Login(login, password);
                ICommandResult cmd;
                cmd = galaxy.CommandResult;
                if (!cmd.Successful)
                {
                    Report("Ошибка авторизации:" + cmd.Text + " : " + cmd.CustomMessage + "\r\n");
                    return;
                }
                else
                {
                    Report("Авторизован.\r\n");
                }

                XPCollection <ObjectTypeAddonCollection> importFields = new XPCollection <ObjectTypeAddonCollection>();

                XPCollection <ObjectType> objTypes2 = new XPCollection <ObjectType>();
                ObjectType objType           = (ObjectType)_dbInterface1.GetCurrentObject();
                ObjectType objTypeThreadSafe = null;

                foreach (ObjectTypeAddonCollection addon in importFields)
                {
                    if (addon.ObjectTypeOwner.Oid == objType.Oid)
                    {
                        objTypeThreadSafe = addon.ObjectTypeOwner;
                        break;
                    }
                }

                if (objTypeThreadSafe != null)
                {
                    string    templateName = "";
                    IgObjects queryResult;
                    string[]  tagnames = new string[1];

                    // Почему-то не работает стандартная выборка.
                    //importFields.Filter = CriteriaOperator.Parse("[ObjectTypeOwner] == {0}", objTypeThreadSafe);
                    importFields.Criteria = new BinaryOperator("ObjectTypeOwner", objTypeThreadSafe);
                    importFields.Filter   = CriteriaOperator.Parse("[ArchestrAImport]");

                    count = importFields.Count;

                    templateName = objType.ArchestrATemplate;
                    tagnames[0]  = templateName;

                    queryResult = galaxy.QueryObjectsByName(EgObjectIsTemplateOrInstance.gObjectIsInstance, ref tagnames);

                    // get the $UserDefined template
                    tagnames[0] = objType.ArchestrATemplate;

                    queryResult = galaxy.QueryObjectsByName(
                        EgObjectIsTemplateOrInstance.gObjectIsTemplate,
                        ref tagnames);

                    cmd = galaxy.CommandResult;
                    if (!cmd.Successful)
                    {
                        Report("Ошибка инициализации шаблона:" + cmd.Text + " : " + cmd.CustomMessage + "\r\n");
                    }

                    ITemplate template = (ITemplate)queryResult[1];

                    Report(string.Format("Обновляем шаблон {0}...\r\n", objType.ArchestrATemplate)); Thread.Sleep(delay);
                    template.CheckOut();

                    foreach (ObjectTypeAddonCollection field in importFields)
                    {
                        index++;
                        try
                        {
                            if (!string.IsNullOrEmpty(field.AttributeAddon))
                            {
                                IAttribute att  = template.Attributes[field.AttributeAddon];
                                MxDataType type = GetDataType(field.DataType);
                                if (att == null)
                                {
                                    updateType = UpdateType.Create;
                                    createSuccessCount++;
                                    template.AddUDA(field.AttributeAddon, type, MxAttributeCategory.MxCategoryWriteable_USC_Lockable, MxSecurityClassification.MxSecurityOperate);
                                }
                                else
                                {
                                    if (att.DataType == type)
                                    {
                                        updateType = UpdateType.Update;
                                        updateSuccessCount++;
                                    }
                                    else
                                    {
                                        updateType = UpdateType.Recreate;
                                        recreateSuccessCount++;
                                        template.DeleteUDA(field.AttributeAddon);
                                        template.AddUDA(field.AttributeAddon, type, MxAttributeCategory.MxCategoryWriteable_USC_Lockable, MxSecurityClassification.MxSecurityOperate);
                                    }
                                }

                                att             = template.Attributes[field.AttributeAddon];
                                att.Description = field.Comment;

                                string fieldValue = field.ArchestrAValue;
                                if (!string.IsNullOrEmpty(fieldValue))
                                {
                                    MxValue mxValue = new MxValueClass();
                                    PutMxValue(ref mxValue, type, fieldValue);
                                    att.SetValue(mxValue);
                                }

                                progress          = ((double)index / count * 1000);
                                progressPossition = (int)Math.Round(progress);

                                switch (updateType)
                                {
                                case UpdateType.Update:
                                    Report(string.Format("Поле {0} ({1} / {2}) обновлено удачно.\r\n", field.AttributeAddon, type, fieldValue));
                                    break;

                                case UpdateType.Create:
                                    Report(string.Format("Поле {0} ({1} / {2}) создано удачно.\r\n", field.AttributeAddon, type, fieldValue));
                                    break;

                                case UpdateType.Recreate:
                                    Report(string.Format("Поле {0} ({1} / {2}) пересоздано удачно.\r\n", field.AttributeAddon, type, fieldValue));
                                    break;
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            Report(string.Format("У поля {0} есть проблема создания :( [{1} -> {2}] \r\n", templateName, ex.Message, ex.InnerException));
                            faultCount++;
                        }
                    }

                    template.Save();
                    template.CheckIn("Check in after adding.");
                    Report(string.Format("Обновлен.\r\n"));

                    galaxy.Logout();
                    Thread.Sleep(delay);
                    Report(string.Format("Отключение от галактики выполнено. \r\n"));
                    Thread.Sleep(delay);
                }
            }
            catch (Exception ex)
            {
                meResultArchestrA.Text = ex.Message + "->" + ex.InnerException + "\r\n";
            }
            TimeSpan diff = DateTime.Now - t0;

            Report(string.Format("Было потрачено времени: {0} c.\r\n", diff.ToString())); Thread.Sleep(delay);
            Report(string.Format("Среднее время на один объект: {0:0.#} c.\r\n", diff.TotalSeconds / count)); Thread.Sleep(delay);
            Report(string.Format("Удачно созданных: {0}.\r\n", createSuccessCount)); Thread.Sleep(delay);
            Report(string.Format("Удачно обновленных: {0}.\r\n", updateSuccessCount)); Thread.Sleep(delay);
            Report(string.Format("Удачно пересозданных: {0}.\r\n", recreateSuccessCount)); Thread.Sleep(delay);
            Report(string.Format("Неудачно выполненных команд: {0}. \r\n", faultCount)); Thread.Sleep(delay);
        }
コード例 #5
0
        // Создаем значение типа MX
        public static MxValue CreateMxValue(MxDataType type, object value)
        {
            MxValue val = new MxValue();

            switch (type)
            {
            case MxDataType.MxDataTypeUnknown:
                break;

            case MxDataType.MxNoData:
                break;

            case MxDataType.MxBoolean:
                val.PutBoolean(bool.Parse(value?.ToString() ?? "false"));
                break;

            case MxDataType.MxInteger:
                val.PutInteger(int.Parse(value?.ToString() ?? "0"));
                break;

            case MxDataType.MxFloat:
                val.PutFloat(float.Parse(value?.ToString() ?? "0"));
                break;

            case MxDataType.MxDouble:
                val.PutDouble(double.Parse(value?.ToString() ?? "0"));
                break;

            case MxDataType.MxString:
                val.PutInternationalString(1049, value?.ToString() ?? "");
                break;

            case MxDataType.MxTime:
                break;

            case MxDataType.MxElapsedTime:
                break;

            case MxDataType.MxReferenceType:
                break;

            case MxDataType.MxStatusType:
                MxStatus stat = new MxStatus();
                stat.success = 1;
                val.PutMxStatus(stat);
                break;

            case MxDataType.MxDataTypeEnum:
                break;

            case MxDataType.MxSecurityClassificationEnum:
                break;

            case MxDataType.MxDataQualityType:
                break;

            case MxDataType.MxQualifiedEnum:
                break;

            case MxDataType.MxQualifiedStruct:
                break;

            case MxDataType.MxInternationalizedString:
                val.PutInternationalString(1049, value?.ToString() ?? "");
                break;

            case MxDataType.MxBigString:
                val.PutInternationalString(1049, value?.ToString() ?? "");
                break;

            case MxDataType.MxDataTypeEND:
                break;

            default:
                break;
            }
            return(val);
        }
コード例 #6
0
ファイル: GalaxyMapper.cs プロジェクト: asutpgr/Configurator
        public static GDataTypeEnum GetGDataType(MxDataType type)
        {
            switch (type)
            {
                #region Соответствие типов MxDataType -> GDataTypeEnum
            case MxDataType.MxDataTypeUnknown:
                return(GDataTypeEnum.Unknown);

            case MxDataType.MxNoData:
                return(GDataTypeEnum.NoData);

            case MxDataType.MxBoolean:
                return(GDataTypeEnum.Boolean);

            case MxDataType.MxInteger:
                return(GDataTypeEnum.Integer);

            case MxDataType.MxFloat:
                return(GDataTypeEnum.Float);

            case MxDataType.MxDouble:
                return(GDataTypeEnum.Double);

            case MxDataType.MxString:
                return(GDataTypeEnum.String);

            case MxDataType.MxTime:
                return(GDataTypeEnum.Time);

            case MxDataType.MxElapsedTime:
                return(GDataTypeEnum.ElapsedTime);

            case MxDataType.MxReferenceType:
                return(GDataTypeEnum.ReferenceType);

            case MxDataType.MxStatusType:
                return(GDataTypeEnum.StatusType);

            case MxDataType.MxDataTypeEnum:
                return(GDataTypeEnum.DataTypeEnum);

            case MxDataType.MxSecurityClassificationEnum:
                return(GDataTypeEnum.SecurityClassificationEnum);

            case MxDataType.MxDataQualityType:
                return(GDataTypeEnum.DataQualityType);

            case MxDataType.MxQualifiedEnum:
                return(GDataTypeEnum.QualifiedEnum);

            case MxDataType.MxQualifiedStruct:
                return(GDataTypeEnum.QualifiedStruct);

            case MxDataType.MxInternationalizedString:
                return(GDataTypeEnum.InternationalizedString);

            case MxDataType.MxBigString:
                return(GDataTypeEnum.BigString);

            case MxDataType.MxDataTypeEND:
                return(GDataTypeEnum.DataTypeEND);

                #endregion
            default:
                return(GDataTypeEnum.Unknown);
            }
        }