void ProcessJsonRecord(FieldInfo fi, IDataReader rdr)
        {
            var val = rdr.GetString(0);

            val = _localizer.Localize(val);
            _root.Add(fi.PropertyName, JsonConvert.DeserializeObject <ExpandoObject>(val));
        }
示例#2
0
 void AddValueToRecord(IDictionary <String, Object> record, FieldInfo field, Object value)
 {
     if (!field.IsVisible)
     {
         return;
     }
     if (field.IsArray)
     {
         record.Add(field.PropertyName, new List <ExpandoObject>());
     }
     else if (field.IsComplexField)
     {
         var propNames = field.PropertyName.Split('.');
         if (propNames.Length != 2)
         {
             throw new DataLoaderException($"Invalid complex name {field.PropertyName}");
         }
         var innerObj = record.GetOrCreate(propNames[0]);
         if (value is String)
         {
             innerObj.Add(propNames[1], _localizer.Localize(value?.ToString()));
         }
         else
         {
             innerObj.Add(propNames[1], value);
         }
     }
     else if (field.IsRefId)
     {
         var refValue = new ExpandoObject();
         _refMap.Add(field.TypeName, value, refValue);
         record.Add(field.PropertyName, refValue);
     }
     else if (value is String)
     {
         record.Add(field.PropertyName, _localizer.Localize(value?.ToString()));
     }
     else
     {
         record.Add(field.PropertyName, value);
     }
 }
        void ProcessSystemRecord(IDataReader rdr)
        {
            ExpandoObject _createModelInfo(String elem)
            {
                return(_root.GetOrCreate <ExpandoObject>("$ModelInfo").GetOrCreate <ExpandoObject>(elem));
            }

            // from 1
            for (Int32 i = 1; i < rdr.FieldCount; i++)
            {
                var fn      = rdr.GetName(i);
                var fi      = new FieldInfo(fn);
                var dataVal = rdr.GetValue(i);
                switch (fi.SpecType)
                {
                case SpecType.Id:
                    _sys.Add("Id", dataVal);
                    break;

                case SpecType.PageSize:
                    Int32 pageSize = (Int32)dataVal;
                    if (!String.IsNullOrEmpty(fi.TypeName))
                    {
                        _createModelInfo(fi.TypeName).Set("PageSize", pageSize);
                    }
                    else
                    {
                        // for compatibility with older versions
                        _sys.Add("PageSize", pageSize);
                    }
                    break;

                case SpecType.Offset:
                    if (String.IsNullOrEmpty(fi.TypeName))
                    {
                        throw new DataLoaderException("For the Offset modifier, the field name must be specified");
                    }
                    Int32 offset = (Int32)dataVal;
                    _createModelInfo(fi.TypeName).Set("Offset", offset);
                    break;

                case SpecType.HasRows:
                    if (String.IsNullOrEmpty(fi.TypeName))
                    {
                        throw new DataLoaderException("For the HasRows modifier, the field name must be specified");
                    }
                    if (dataVal is Int32 intHasRows)
                    {
                        _createModelInfo(fi.TypeName).Set("HasRows", intHasRows != 0);
                    }
                    else if (dataVal is Boolean boolHasRows)
                    {
                        _createModelInfo(fi.TypeName).Set("HasRows", boolHasRows);
                    }
                    else
                    {
                        throw new DataLoaderException("Invalid data type for the TotalRows modifier. Expected 'int' or 'bit'");
                    }
                    break;

                case SpecType.SortDir:
                    if (String.IsNullOrEmpty(fi.TypeName))
                    {
                        throw new DataLoaderException("For the SortDir modifier, the field name must be specified");
                    }
                    String dir = dataVal.ToString();
                    _createModelInfo(fi.TypeName).Set("SortDir", dir);
                    break;

                case SpecType.SortOrder:
                    if (String.IsNullOrEmpty(fi.TypeName))
                    {
                        throw new DataLoaderException("For the SortOrder modifier, the field name must be specified");
                    }
                    String order = dataVal.ToString();
                    _createModelInfo(fi.TypeName).Set("SortOrder", order);
                    break;

                case SpecType.GroupBy:
                    if (String.IsNullOrEmpty(fi.TypeName))
                    {
                        throw new DataLoaderException("For the Group modifier, the field name must be specified");
                    }
                    String group = dataVal.ToString();
                    _createModelInfo(fi.TypeName).Set("GroupBy", group);
                    break;

                case SpecType.Filter:
                    if (String.IsNullOrEmpty(fi.TypeName))
                    {
                        throw new DataLoaderException("For the Filter modifier, the field name must be specified");
                    }
                    Object filter = dataVal;
                    var    xs     = fi.TypeName.Split('.');
                    if (xs.Length < 2)
                    {
                        throw new DataLoaderException("For the Filter modifier, the field name must be as ItemProperty.FilterProperty");
                    }
                    var fmi = _createModelInfo(xs[0]).GetOrCreate <ExpandoObject>("Filter");
                    if (filter is DateTime)
                    {
                        filter = DataHelpers.DateTime2StringWrap(filter);
                    }
                    else if (filter is String)
                    {
                        filter = _localizer.Localize(filter.ToString());
                    }
                    for (Int32 ii = 1; ii < xs.Length; ii++)
                    {
                        if (ii == xs.Length - 1)
                        {
                            fmi.Set(xs[ii], filter);
                        }
                        else
                        {
                            fmi = fmi.GetOrCreate <ExpandoObject>(xs[ii]);
                        }
                    }
                    break;

                case SpecType.ReadOnly:
                    _sys.Add("ReadOnly", DataHelpers.SqlToBoolean(dataVal));
                    break;

                case SpecType.Copy:
                    _sys.Add("Copy", DataHelpers.SqlToBoolean(dataVal));
                    break;

                default:
                    _sys.Add(fn, dataVal);
                    break;
                }
            }
        }