public ClearDatabase()
        {
            var db = new AomDbContext();

            db.Database.ExecuteSqlCommand(@"  delete[dbo].[RelationshipObject]
        delete[dbo].[RelationshipMeta]
        delete[dbo].[AomFieldObject]
        delete[dbo].[AomObject]
        delete[dbo].[AomFieldMeta]
        delete[dbo].[AomMeta]");
        }
Beispiel #2
0
        public ActionResult Index(ResetTablesModel mode)
        {
            var db = new AomDbContext();

            db.Database.ExecuteSqlCommand(@"  delete[dbo].[RelationshipObject]
        delete[dbo].[RelationshipMeta]
        delete[dbo].[AomFieldObject]
        delete[dbo].[AomObject]
        delete[dbo].[AomFieldMeta]
        delete[dbo].[FieldTypes]
        delete[dbo].[AomMeta]");

            AOMMetaCreatorService service = new AOMMetaCreatorService(new SalesforceConnector());
            var result = service.CreateTables(mode.userName, mode.password, mode.tables.Split(','));

            return(View());
        }
        public NgTable <AomMeta> CreateTables(string userName, string password, string[] tables)
        {
            var result = new NgTable <AomMeta>();
            // 1. Log in to sales force
            var loggedIn = Connector.LogIn(userName, password);

            if (!loggedIn.Data)
            {
                result.LogError("Could not log into sales force");
                return(result);
            }

            // 2. check that the tables are correct
            var  tableNames = Connector.GatTablesList();
            bool isSubset   = !tables.Except(tableNames).Any();

            if (!isSubset)
            {
                result.LogError("Tables are not a subset of salesforce tables");
                return(result);
            }

            // 2. get the table definitions

            //    var tableDefinitions = Connector.DescribeTables(tables);

            // lets gt all of them
            var listN = splitList(tableNames, 50);
            List <TableInfo> tableDefinitions = new List <TableInfo>();

            foreach (var list in listN)
            {
                tableDefinitions.AddRange(Connector.DescribeTables(list.ToArray()));
            }



            var context = new AomDbContext();

            foreach (var tableDefinition in tableDefinitions)
            {
                if (!tables.ToList().Contains(tableDefinition.name))
                {
                    continue;
                }
                // 3. create table for each table definition
                AomMeta newTable = new AomMeta
                {
                    Name    = tableDefinition.name,
                    Display = tableDefinition.label
                };

                // 4. create table field for each definition
                foreach (var field in tableDefinition.fields)
                {
                    // 5. create a type for each field type
                    var fieldType = context.FieldTypes.FirstOrDefault(c => c.Name == field.type);
                    if (fieldType == null)
                    {
                        fieldType = new FieldType
                        {
                            Name = field.type
                        };
                        context.FieldTypes.Add(fieldType);
                        context.SaveChanges();
                    }

                    AomFieldMeta newField = new AomFieldMeta
                    {
                        Name      = field.name,
                        Display   = field.label,
                        FieldType = fieldType
                                    // FieldTypeId = new Guid("F96D8BB4-C3E4-437B-A8AE-9E6BCB9CFE52")
                    };
                    newTable.AomFieldMetas.Add(newField);
                }

                result.Data.Add(newTable);
                context.AomMetas.Add(newTable);
            }
            context.SaveChanges();
            result.Success = true;


            // 5 create ralationships
            foreach (var tableDefinition in tableDefinitions)
            {
                // primary key table - which is this table
                var primaryTable = context.AomMetas.SingleOrDefault(c => c.Name == tableDefinition.name);

                if (primaryTable == null)
                {
                    continue;
                }

                // primary key table field - which is this tables Id
                var primaryTableField =
                    context.AomFieldMetas.SingleOrDefault(c => c.Name == "Id" && c.AomMetaId == primaryTable.Id);
                if (primaryTableField == null)
                {
                    continue;
                }


                if (tableDefinition.relationships == null)
                {
                    continue;
                }

                foreach (var relationship in tableDefinition.relationships)
                {
                    // forigen key table - the ccurrent child table
                    var forigenTable = context.AomMetas.SingleOrDefault(c => c.Name == relationship.ChildTable);
                    if (forigenTable == null)
                    {
                        continue;
                    }

                    // forigen key table field
                    var forigenTableField =
                        context.AomFieldMetas.SingleOrDefault(c => c.Name == relationship.ChildField && c.AomMetaId == forigenTable.Id);
                    if (forigenTableField == null)
                    {
                        continue;
                    }


                    // yeah baby we have a valid relationship SWEET AS
                    context.RelationshipMetas.Add(new RelationshipMeta
                    {
                        PkAomMetaId      = primaryTable.Id,
                        FkAomMetaId      = forigenTable.Id,
                        FkAomFieldMetaId = forigenTableField.Id,
                        PkAomFieldMetaId = primaryTableField.Id
                    });
                    context.SaveChanges();
                }
            }

            return(result);
        }