示例#1
0
        public void AddMethod(SiteDb siteDb, IDataMethodSetting dataMethod, bool isGlobal)
        {
            var typeInfo = DataSourceHelper.GetFields(siteDb, dataMethod);
            DataMethodViewModel model = new DataMethodViewModel
            {
                Id                  = dataMethod.Id,
                IsGlobal            = isGlobal,
                DisplayName         = dataMethod.DisplayName,
                Parameters          = dataMethod.Parameters,
                MethodName          = dataMethod.MethodName,
                OriginalMethodName  = dataMethod.OriginalMethodName,
                TotalRelations      = 10,
                MethodSignatureHash = dataMethod.MethodSignatureHash,
                Description         = dataMethod.Description,
                DeclareType         = dataMethod.DeclareType,
                IsNew               = dataMethod.Id == Guid.Empty,
                IsPublic            = dataMethod.IsPublic,
                ReturnType          = dataMethod.ReturnType,
                IsPagedResult       = dataMethod.IsPagedResult,
                IsConfigurable      = dataMethod.Parameters.Any(),
                ItemFields          = typeInfo.ItemFields,
                Enumerable          = typeInfo.Enumerable
            };

            if (!dataMethod.IsPublic && !isGlobal)
            {
                var viewdatamethod = siteDb.ViewDataMethods.Query.Where(o => o.MethodId == dataMethod.Id).SelectAll();

                foreach (var item in viewdatamethod)
                {
                    if (item.ViewId != default(Guid))
                    {
                        var view = siteDb.Views.Get(item.ViewId, true);
                        if (view != null)
                        {
                            model.ViewId   = view.Id;
                            model.ViewName = view.Name;
                        }
                        break;
                    }
                }
            }

            if (model.IsGlobal && model.Parameters.Any())
            {
                model.IsConfigurable = true;
            }
            Methods.Add(model);
        }
示例#2
0
 public static DataMethodCompiled GetGlobalCompiledMethod(Guid MethodId)
 {
     lock (_lock)
     {
         DataMethodCompiled compiled;
         if (MethodCache.TryGetValue(MethodId, out compiled))
         {
             return(compiled);
         }
         IDataMethodSetting DataMethod = Data.GlobalDb.DataMethodSettings.Get(MethodId);
         compiled = new DataMethodCompiled(DataMethod);
         MethodCache[MethodId] = compiled;
         return(compiled);
     }
 }
示例#3
0
        public static List <Guid> GetFolderIds(IDataMethodSetting methodsetting)
        {
            List <Guid> folderids = new List <Guid>();

            foreach (var item in methodsetting.ParameterBinding)
            {
                if (item.Key.ToLower() == "folderid")
                {
                    string strguid  = item.Value.Binding;
                    Guid   folderid = default(Guid);
                    if (System.Guid.TryParse(strguid, out folderid))
                    {
                        folderids.Add(folderid);
                    }
                }
            }
            return(folderids);
        }
示例#4
0
        public static void Compute(IDataMethodSetting methodsetting, SiteDb sitedb)
        {
            var values = methodsetting.ParameterBinding.Values;

            var allfolderids = GetFolderIds(methodsetting);

            var existings = sitedb.Relations.GetRelations(methodsetting.Id);

            foreach (var item in existings)
            {
                if (!allfolderids.Contains(item.objectYId))
                {
                    sitedb.Relations.Delete(item.Id);
                }
            }
            foreach (var item in allfolderids)
            {
                sitedb.Relations.AddOrUpdate(methodsetting.Id, item, ConstObjectType.DataMethodSetting, ConstObjectType.Folder);
            }
        }
示例#5
0
        public DataMethodViewModel Add(ApiCall call)
        {
            DataMethodViewModel viewmodel = call.Context.Request.Model as DataMethodViewModel;

            if (viewmodel.IsNew)
            {
                var methodhash = viewmodel.MethodSignatureHash;
                IDataMethodSetting originalSetting  = GlobalDb.DataMethodSettings.Query.Where(o => o.MethodSignatureHash == methodhash).FirstOrDefault();
                DataMethodSetting  newMethodSetting = new DataMethodSetting
                {
                    MethodName          = viewmodel.MethodName,
                    ParameterBinding    = viewmodel.ParameterBinding,
                    Parameters          = viewmodel.Parameters,
                    Description         = viewmodel.Description,
                    OriginalMethodName  = originalSetting.OriginalMethodName,
                    MethodSignatureHash = originalSetting.MethodSignatureHash,
                    DeclareType         = originalSetting.DeclareType,
                    ReturnType          = originalSetting.ReturnType,
                    DeclareTypeHash     = originalSetting.DeclareTypeHash,
                };
                if (!viewmodel.IsPublic)
                {
                    newMethodSetting.MethodName = System.Guid.NewGuid().ToString();
                }
                newMethodSetting.IsPublic = viewmodel.IsPublic;
                call.WebSite.SiteDb().DataMethodSettings.AddOrUpdate(newMethodSetting, call.Context.User.Id);
                viewmodel = UpdateViewModel(viewmodel, call.WebSite.SiteDb(), newMethodSetting);
            }
            else
            {
                var dataMethodSetting = call.WebSite.SiteDb().DataMethodSettings.Get(viewmodel.Id);
                dataMethodSetting.ParameterBinding = viewmodel.ParameterBinding;
                dataMethodSetting.Description      = viewmodel.Description;

                call.WebSite.SiteDb().DataMethodSettings.AddOrUpdate(dataMethodSetting, call.Context.User.Id);
                viewmodel = UpdateViewModel(viewmodel, call.WebSite.SiteDb(), dataMethodSetting);
            }

            return(viewmodel);
        }
示例#6
0
        public static DataMethodCompiled GetCompiledMethod(SiteDb SiteDb, Guid MethodId)
        {
            Guid id = GetId(SiteDb, MethodId);

            lock (_lock)
            {
                DataMethodCompiled compiled;
                if (MethodCache.TryGetValue(id, out compiled))
                {
                    return(compiled);
                }

                // Global does not have site id.

                if (MethodCache.TryGetValue(MethodId, out compiled))
                {
                    return(compiled);
                }

                IDataMethodSetting DataMethod = SiteDb.DataMethodSettings.Get(MethodId);
                if (DataMethod != null)
                {
                    compiled        = new DataMethodCompiled(DataMethod);
                    MethodCache[id] = compiled;
                    return(compiled);
                }

                DataMethod = Data.GlobalDb.DataMethodSettings.Get(MethodId);
                if (DataMethod != null)
                {
                    compiled = new DataMethodCompiled(DataMethod);
                    MethodCache[MethodId] = compiled;
                    return(compiled);
                }
            }
            return(null);
        }
示例#7
0
        private static string _GetSampleData(IDataMethodSetting setting)
        {
            string sample = null;

            foreach (var item in setting.ParameterBinding)
            {
                if (item.Key.ToLower() == Kooboo.Sites.DataSources.ScriptSourceManager.SampleResponseFieldName.ToLower())
                {
                    sample = item.Value.Binding;
                }
            }

            if (sample == null)
            {
                foreach (var item in setting.ParameterBinding)
                {
                    if (item.Key.ToLower().Contains("url"))
                    {
                        sample = Lib.Helper.HttpHelper.Get <string>(item.Value.Binding);
                    }
                }
            }
            return(sample);
        }
示例#8
0
        public static TypeInfoModel GetFields(SiteDb siteDb, IDataMethodSetting setting)
        {
            var model = new TypeInfoModel();

            model.Id          = setting.Id;
            model.Name        = setting.MethodName;
            model.DeclareType = setting.DeclareType;
            model.ItemFields  = new List <TypeFieldModel>();
            model.IsPublic    = setting.IsPublic;

            var type = TypeCache.GetType(setting.ReturnType);

            if (type == null)
            {
                return(model);
            }

            model.ModelType     = type.Name;
            model.Enumerable    = TypeHelper.IsCollection(type);
            model.IsPagedResult = setting.IsPagedResult;
            if (model.Enumerable)
            {
                type = TypeHelper.GetEnumberableType(type);
            }

            if (type == typeof(TextContentViewModel))
            {
                var folderIdKey = setting.ParameterBinding.Keys.FirstOrDefault(it => Isfolderid(it));
                ParameterBinding binding;
                if (!String.IsNullOrEmpty(folderIdKey) && setting.ParameterBinding.TryGetValue(folderIdKey, out binding))
                {
                    Guid folderId;
                    if (Guid.TryParse(binding.Binding, out folderId))
                    {
                        var folder = siteDb.ContentFolders.Get(folderId);
                        if (folder != null)
                        {
                            model.ItemFields = GetContentTypeField(siteDb, folder.ContentTypeId);

                            foreach (var item in folder.Category)
                            {
                                var catfolder = siteDb.ContentFolders.Get(item.FolderId);
                                if (catfolder != null)
                                {
                                    TypeFieldModel fieldmodel = new TypeFieldModel();
                                    fieldmodel.Name          = item.Alias;// catfolder.Name;
                                    fieldmodel.Fields        = GetContentTypeField(siteDb, catfolder.ContentTypeId);
                                    fieldmodel.IsComplexType = true;
                                    fieldmodel.Enumerable    = item.Multiple;
                                    model.ItemFields.Add(fieldmodel);
                                }
                            }

                            foreach (var item in folder.Embedded)
                            {
                                var embedfolder = siteDb.ContentFolders.Get(item.FolderId);
                                if (embedfolder != null)
                                {
                                    TypeFieldModel fieldmodel = new TypeFieldModel();
                                    fieldmodel.Name          = item.Alias; //embedfolder.Name;
                                    fieldmodel.Fields        = GetContentTypeField(siteDb, embedfolder.ContentTypeId);
                                    fieldmodel.IsComplexType = true;
                                    fieldmodel.Enumerable    = true;
                                    model.ItemFields.Add(fieldmodel);
                                }
                            }
                        }
                    }
                }
            }

            //else if (type == typeof(Kooboo.Sites.Ecommerce.ViewModel.ProductViewModel))
            //{
            //    var alltype = siteDb.ProductType.All().Select(o=>o.Id).ToList();

            //    model.ItemFields = GetProductTypeField(siteDb, alltype);

            //}

            else if (type == typeof(Data.Definition.IJson))
            {
                // get sample and return.
                var sample = _GetSampleData(setting);
                if (!string.IsNullOrEmpty(sample))
                {
                    model.ItemFields = GetJsonTypeFields(sample);
                }
            }
            else if (type == typeof(Data.Definition.IXml))
            {
                var sample = _GetSampleData(setting);
                if (!string.IsNullOrEmpty(sample))
                {
                    model.ItemFields = GetXmlTypeFields(sample);
                }
            }
            else
            {
                model.ItemFields = GetTypeFields(type);
            }
            return(model);
        }
示例#9
0
        private DataMethodViewModel UpdateViewModel(DataMethodViewModel model, SiteDb siteDb, IDataMethodSetting setting)
        {
            var typeInfo = DataSourceHelper.GetFields(siteDb, setting);

            model.IsGlobal         = setting.IsGlobal;
            model.MethodName       = setting.MethodName;
            model.ParameterBinding = setting.ParameterBinding;
            model.Description      = setting.Description;
            model.Parameters       = setting.Parameters;
            model.Id = setting.Id;
            model.OriginalMethodName  = setting.OriginalMethodName;
            model.MethodSignatureHash = setting.MethodSignatureHash;
            model.DeclareType         = setting.DeclareType;
            model.IsGlobal            = setting.IsGlobal;
            model.ReturnType          = setting.ReturnType;
            model.IsPagedResult       = setting.IsPagedResult;

            model.ItemFields = typeInfo.ItemFields;
            model.Enumerable = typeInfo.Enumerable;
            model.IsPublic   = setting.IsPublic;
            return(model);
        }
示例#10
0
        public DataMethodCompiled(IDataMethodSetting methodsetting)
        {
            Type type = Kooboo.Data.TypeCache.GetType(methodsetting.DeclareType);

            this.DeclareType = type;

            if (methodsetting.IsKScript)
            {
                this.IsKScript         = true;
                this.CodeId            = methodsetting.CodeId;
                this.Parameters        = methodsetting.Parameters;
                this.ParameterBindings = new Dictionary <string, ParameterBinding>();

                if (methodsetting.ParameterBinding != null)
                {
                    foreach (var item in methodsetting.ParameterBinding)
                    {
                        if (item.Key.ToLower() != Kooboo.Sites.DataSources.ScriptSourceManager.SampleResponseFieldName.ToLower())
                        {
                            this.ParameterBindings.Add(item.Key, item.Value);
                        }
                    }
                }
            }
            else
            {
                Type returntype = Kooboo.Data.TypeCache.GetType(methodsetting.ReturnType);
                this.ReturnType         = returntype;
                this.OriginalMethodName = methodsetting.OriginalMethodName;

                Parameters        = methodsetting.Parameters;
                ParameterBindings = methodsetting.ParameterBinding;
                this.IsStatic     = methodsetting.IsStatic;
                this.IsVoid       = methodsetting.IsVoid;
                List <Type> paratypes = new List <Type>();

                foreach (var item in methodsetting.Parameters.Values)
                {
                    Type paratype = Kooboo.Data.TypeCache.GetType(item);
                    paratypes.Add(paratype);
                }

                if (methodsetting.IsStatic)
                {
                    if (methodsetting.IsVoid)
                    {
                        StaticVoid = Lib.Reflection.TypeHelper.CompileStaticAction(type, methodsetting.OriginalMethodName, paratypes);
                    }
                    else
                    {
                        StaticFunc = Lib.Reflection.TypeHelper.CompileStaticFunc(type, methodsetting.OriginalMethodName, paratypes);
                    }
                }
                else
                {
                    if (methodsetting.IsVoid)
                    {
                        Void = Lib.Reflection.TypeHelper.CompileAction(type, methodsetting.OriginalMethodName, paratypes);
                    }
                    else
                    {
                        Func = Lib.Reflection.TypeHelper.CompileFunc(type, methodsetting.OriginalMethodName, paratypes);
                    }
                }
            }
        }