Exemplo n.º 1
0
        private object ExecDataSource(DSW dsWrapper)
        {
            if (dsWrapper.DataSource.Type == DataSourceType.CODE)
            {
                Dictionary <string, object> arguments = new Dictionary <string, object>();
                if (dsWrapper.DataSource.Parameters != null)
                {
                    foreach (var par in dsWrapper.DataSource.Parameters)
                    {
                        var    pageDSParam = dsWrapper.PageDataSource.Parameters.SingleOrDefault(x => x.Name == par.Name);
                        string value       = par.Value;
                        if (pageDSParam != null)
                        {
                            value = ProcessParameterValue(pageDSParam.Value);
                            if (string.IsNullOrWhiteSpace(value))
                            {
                                value = ProcessParameterValue(par.Value);
                                value = CheckProcessDefaultValue(value);
                                var ds      = dsMan.Get(dsWrapper.PageDataSource.DataSourceId);
                                var dsParam = ds.Parameters.SingleOrDefault(x => x.Name == par.Name);
                                if (dsParam != null)
                                {
                                    arguments[dsParam.Name] = dsMan.GetDataSourceParameterValue(new DataSourceParameter {
                                        Name = dsParam.Name, Type = dsParam.Type, Value = value
                                    });
                                }
                                else
                                {
                                    arguments[par.Name] = value;
                                }
                            }
                            else
                            {
                                value = CheckProcessDefaultValue(value);
                                arguments[pageDSParam.Name] = dsMan.GetDataSourceParameterValue(new DataSourceParameter {
                                    Name = pageDSParam.Name, Type = pageDSParam.Type, Value = value
                                });
                            }
                        }
                        else
                        {
                            value = ProcessParameterValue(value);
                            value = CheckProcessDefaultValue(value);
                            var ds      = dsMan.Get(dsWrapper.PageDataSource.DataSourceId);
                            var dsParam = ds.Parameters.SingleOrDefault(x => x.Name == par.Name);
                            if (dsParam != null)
                            {
                                arguments[dsParam.Name] = dsMan.GetDataSourceParameterValue(new DataSourceParameter {
                                    Name = dsParam.Name, Type = dsParam.Type, Value = value
                                });
                            }
                            else
                            {
                                arguments[par.Name] = value;
                            }
                        }
                    }
                }

                arguments["PageModel"] = this;
                var codeDS = (CodeDataSource)dsWrapper.DataSource;
                return(codeDS.Execute(arguments));
            }
            else if (dsWrapper.DataSource.Type == DataSourceType.DATABASE)
            {
                var eqlParameters = new List <EqlParameter>();
                if (dsWrapper.DataSource.Parameters != null)
                {
                    foreach (var par in dsWrapper.DataSource.Parameters)
                    {
                        var    pageDSParam = dsWrapper.PageDataSource.Parameters.SingleOrDefault(x => x.Name == par.Name);
                        string value       = par.Value;
                        if (pageDSParam != null)
                        {
                            value = ProcessParameterValue(pageDSParam.Value);
                            if (string.IsNullOrWhiteSpace(value))
                            {
                                value = ProcessParameterValue(par.Value);
                                value = CheckProcessDefaultValue(value);
                                var ds      = dsMan.Get(dsWrapper.PageDataSource.DataSourceId);
                                var dsParam = ds.Parameters.SingleOrDefault(x => x.Name == par.Name);
                                if (dsParam != null)
                                {
                                    eqlParameters.Add(dsMan.ConvertDataSourceParameterToEqlParameter(new DataSourceParameter {
                                        Name = dsParam.Name, Type = dsParam.Type, Value = value
                                    }));
                                }
                                else
                                {
                                    eqlParameters.Add(new EqlParameter(par.Name, value));
                                }
                            }
                            else
                            {
                                value = CheckProcessDefaultValue(value);
                                eqlParameters.Add(dsMan.ConvertDataSourceParameterToEqlParameter(new DataSourceParameter {
                                    Name = pageDSParam.Name, Type = pageDSParam.Type, Value = value
                                }));
                            }
                        }
                        else
                        {
                            value = ProcessParameterValue(value);
                            value = CheckProcessDefaultValue(value);
                            var ds      = dsMan.Get(dsWrapper.PageDataSource.DataSourceId);
                            var dsParam = ds.Parameters.SingleOrDefault(x => x.Name == par.Name);
                            if (dsParam != null)
                            {
                                eqlParameters.Add(dsMan.ConvertDataSourceParameterToEqlParameter(new DataSourceParameter {
                                    Name = dsParam.Name, Type = dsParam.Type, Value = value
                                }));
                            }
                            else
                            {
                                eqlParameters.Add(new EqlParameter(par.Name, value));
                            }
                        }
                    }
                }

                DatabaseDataSource dbDs = (DatabaseDataSource)dsWrapper.DataSource;
                return(dsMan.Execute(dbDs.Id, eqlParameters));
            }
            else
            {
                throw new Exception("Not supported data source type.");
            }
        }
Exemplo n.º 2
0
        public object GetProperty(string propName)
        {
            //Stopwatch sw = new Stopwatch();
            //sw.Start();
            //try
            //{
            if (string.IsNullOrWhiteSpace(propName))
            {
                throw new ArgumentException(nameof(propName));
            }

            //replace keyword $index with 0
            var name = propName.Replace("$index", "0");

            string[] tmpPropChain = name.Split(".", StringSplitOptions.RemoveEmptyEntries);

            List <string> completePropChain = new List <string>();

            foreach (var pName in tmpPropChain)
            {
                var indexerIdx = pName.IndexOf("[");
                if (indexerIdx != -1)
                {
                    var n   = pName.Substring(0, indexerIdx);
                    var idx = pName.Substring(indexerIdx, pName.Length - indexerIdx);
                    completePropChain.Add(n);
                    completePropChain.Add(idx);
                }
                else
                {
                    completePropChain.Add(pName);
                }
            }

            MPW    mpw                     = null;
            var    currentPropDict         = Properties;
            var    currentPropertyNamePath = string.Empty;
            string parentPropName          = string.Empty;

            foreach (var ppName in completePropChain)
            {
                var pName = ppName;
                if (string.IsNullOrWhiteSpace(currentPropertyNamePath))
                {
                    currentPropertyNamePath = pName;
                }
                else
                {
                    currentPropertyNamePath += $".{pName}";
                }

                //try to get property with full key (after http post object are entered with no . split
                if (parentPropName == "Record")
                {
                    var testName = propName.Substring(7);                     //cut the Record. in front
                    if (pName != testName && currentPropDict.ContainsKey(testName))
                    {
                        return(currentPropDict[testName].Value);
                    }
                }

                //try to get property with full key (after http post object are entered with no . split
                if (parentPropName == "RelatedRecord")
                {
                    var testName = propName.Substring(14);                     //cut the RelatedRecord. in front
                    if (pName != testName && currentPropDict.ContainsKey(testName))
                    {
                        return(currentPropDict[testName].Value);
                    }
                }

                if (!currentPropDict.ContainsKey(pName))
                {
                    if (!currentPropertyNamePath.EndsWith("]"))
                    {
                        throw new PropertyDoesNotExistException($"Property name '{currentPropertyNamePath}' not found.");
                    }
                    else
                    {
                        throw new PropertyDoesNotExistException($"Property name is found, but list index is out of bounds.");
                    }
                }

                mpw = currentPropDict[pName];
                if (mpw != null && mpw.Type == MPT.DataSource)
                {
                    DSW dsw = mpw.Value as DSW;
                    if (dsw != null)
                    {
                        var result = ExecDataSource(dsw);
                        if (result is List <EntityRecord> || result is EntityRecordList)
                        {
                            mpw = new MPW(MPT.ListEntityRecords, result);
                            currentPropDict[pName] = mpw;
                        }
                        else if (result is EntityRecord)
                        {
                            mpw = new MPW(MPT.EntityRecord, result);
                            currentPropDict[pName] = mpw;
                        }
                        else
                        {
                            mpw = new MPW(MPT.Object, result);
                            currentPropDict[pName] = mpw;
                        }
                    }
                }
                currentPropDict = mpw.Properties;
                parentPropName  = ppName;
            }

            return(mpw.Value);
            //}
            //finally {
            //	Debug.WriteLine(">>>>>>>>>> " + propName + " >> " + sw.ElapsedMilliseconds);
            //}
        }