Ejemplo n.º 1
0
 /// <summary>
 /// конструктор
 /// </summary>
 /// <param name="ID"></param>
 /// <param name="returnType"></param>
 /// <param name="objStringedView"></param>
 /// <param name="objCaption"></param>
 /// <param name="objImagedView"></param>
 /// <param name="userViewFormat"></param>
 public FunctionDef(int ID, ObjectType returnType, string objStringedView, string objCaption, string userViewFormat)
     : base(returnType, objStringedView, objCaption)
 {
     fieldParameters     = new DetailArrayOfFunctionalParameterDef(this);
     fieldUserViewFormat = userViewFormat;
     this.ID             = ID;
 }
Ejemplo n.º 2
0
        /// <summary>
        /// Разбор функции "по-косточкам" в специальный массив
        /// </summary>
        /// <param name="f">функция</param>
        /// <returns>new object[] { f.FunctionDef.ID, pars, types }</returns>
        public object FunctionToSimpleStruct(Function f)
        {
            var pars     = new ArrayList();
            var types    = new ArrayList();
            int parCount = f.Parameters.Count;
            DetailArrayOfFunctionalParameterDef functionalParameterDef = f.FunctionDef.Parameters;
            int fParDefCount = functionalParameterDef.Count;

            for (int i = 0; i < parCount; i++)
            {
                object par = f.Parameters[i];
                if (par is Function)
                {
                    types.Add("Func");
                    pars.Add(FunctionToSimpleStruct(par as Function));
                }
                else if (par is VariableDef)
                {
                    types.Add(par.GetType().AssemblyQualifiedName);
                    pars.Add((par as VariableDef).ToSimpleValue());
                }
                else
                {
                    types.Add(null);
                    FunctionParameterDef fpd = (i < fParDefCount) ? functionalParameterDef[i] : functionalParameterDef[fParDefCount - 1];
                    pars.Add(fpd.Type.ValueToSimpleValue(par));
                }
            }
            return(new object[] { f.FunctionDef.ID, pars, types });
        }
 /// <summary>
 /// конструктор
 /// </summary>
 /// <param name="ID"></param>
 /// <param name="returnType"></param>
 /// <param name="objStringedView"></param>
 /// <param name="objCaption"></param>
 /// <param name="objImagedView"></param>
 /// <param name="userViewFormat"></param>
 /// <param name="parameters"></param>
 public FunctionDef(int ID, ObjectType returnType, string objStringedView, string objCaption, string userViewFormat,
                    params FunctionParameterDef[] parameters)
     : base(returnType, objStringedView, objCaption)
 {
     fieldParameters = new DetailArrayOfFunctionalParameterDef(this);
     for (int i = 0; i < parameters.Length; i++)
     {
         fieldParameters.Add(parameters[i]);
     }
     fieldUserViewFormat = userViewFormat;
     this.ID             = ID;
 }
Ejemplo n.º 4
0
        /// <summary>
        /// Восстановление функции из простой структуры
        /// </summary>
        /// <param name="val"></param>
        /// <returns></returns>
        public Function FunctionFromSimpleStruct(object val)
        {
            var vals = (object[])val;
            var f    = new Function();

            f.FunctionDef = GetFunctionDef((int)vals[0]);
            var pars  = (ArrayList)vals[1];
            var types = (ArrayList)vals[2];
            int count = pars.Count;
            DetailArrayOfFunctionalParameterDef functionalParameterDef = f.FunctionDef.Parameters;
            int fpdCount = functionalParameterDef.Count;

            for (int i = 0; i < count; i++)
            {
                object type = types[i];
                object par  = pars[i];
                if (type == null)
                {
                    FunctionParameterDef fpd = (i < fpdCount) ? functionalParameterDef[i] : functionalParameterDef[fpdCount - 1];
                    f.Parameters.Add(fpd.Type.SimpleValueToValue(par));
                }
                else if ((string)type == "Func")
                {
                    f.Parameters.Add(FunctionFromSimpleStruct(par));
                }
                else
                {
                    string stype = (string)type;
                    // by fat
                    // это из за того, что раньше адв лимит лежал отдельно, а сейчас в уи
                    // для поддержки ранее созданных фильтров. Криво конечно, но что поделаешь...
                    stype = stype.Replace("ICSSoft.STORMNET.Windows.Forms.AdvLimit", "ICSSoft.STORMNET.UI");
                    stype = stype.Replace("ICSSoft.STORMNET.UI, Version=1.0.0.1, Culture=neutral, PublicKeyToken=null", "ICSSoft.STORMNET.UI");
                    Type tp;
                    try
                    {
                        tp = Tools.AssemblyLoader.GetTypeWithAssemblyName(stype);

                        // Обеспечение обратной совместимости: в старых версиях в первую очередь сборку необходимо искать в другом месте.
                        Type oldType = TryGetOldType(stype, false);
                        if (oldType != null)
                        {
                            tp = oldType;
                        }
                    }
                    catch (Exception)
                    {
                        if (stype.Contains(UilibraryName))
                        {
                            /* Некоторые типы с пространством имён "ICSSoft.STORMNET.Windows.Forms"
                             * были перенесены из сборки ICSSoft.STORMNET.UI в ExternalLangDef,
                             * поэтому для обратной совместимости иногда может потребоваться следующий вызов.
                             */
                            tp = Tools.AssemblyLoader.GetTypeWithAssemblyName(
                                stype.Replace(UilibraryName, ExternalLangDefLibraryName));
                        }
                        else if (stype.Contains(ExternalLangDefLibraryName))
                        {
                            /* Данная конвертация сделана для обратной совместимости:
                             * если подложить данную сборку в старую версию, то можно будет открывать ограничения в новом формате.
                             */
                            tp = TryGetOldType(stype, true);
                        }
                        else
                        {
                            throw;
                        }
                    }

                    var vd = (VariableDef)Activator.CreateInstance(tp);
                    vd.FromSimpleValue(par, this);
                    f.Parameters.Add(vd);
                }
            }
            return(f);
        }