Exemplo n.º 1
0
        public override void InnerRun(Dictionary <string, object> vars, Dictionary <string, object> outputVars, Dictionary <string, object> InvertedInputVars, Message message)
        {
            DBConnection db = COREobject.i.Entitron;

            bool searchInShared = vars.ContainsKey("SearchInShared") ? (bool)vars["SearchInShared"] : false;

            string tableName = vars.ContainsKey("TableName")
                ? (string)vars["TableName"]
                :(string)vars["__TableName__"];
            DBTable table = db.Table(tableName, searchInShared);

            if (table == null)
            {
                throw new Exception($"Queried table not found! (Table: {tableName}, Action: {Name} ({Id}))");
            }
            if (!vars.ContainsKey("JArray"))
            {
                throw new Exception("JArray parameter not passed!");
            }

            JArray jarray = (JArray)vars["JArray"];

            foreach (JObject jo in jarray)
            {
                Dictionary <string, object> parsedColumns = new Dictionary <string, object>();
                TapestryUtils.ParseJObjectRecursively(jo, parsedColumns);

                DBItem parsedRow = new DBItem(db, null);
                foreach (var parsedCol in parsedColumns)
                {
                    parsedRow[parsedCol.Key] = parsedCol.Value;
                }

                DBItem item = new DBItem(db, table);
                foreach (DBColumn col in table.Columns)
                {
                    if (col.Name == DBCommandSet.PrimaryKey)
                    {
                        continue;
                    }
                    string parsedColName = (col.Name == "ext_id") ? DBCommandSet.PrimaryKey : col.Name;
                    item[col.Name] = parsedRow[parsedColName];
                }

                table.Add(item);
            }
            db.SaveChanges();

            outputVars["Result"] = "Successful";
        }
Exemplo n.º 2
0
        private void SetDBItemValues(ref DBItem item, IEnumerable <DBColumn> columns, JToken values)
        {
            Dictionary <string, object> parsedValues = new Dictionary <string, object>();

            TapestryUtils.ParseJObjectRecursively((JObject)values, parsedValues);

            foreach (DBColumn column in columns)
            {
                if (column.Name == DBCommandSet.PrimaryKey)
                {
                    continue;
                }

                if (parsedValues[column.Name] != null)
                {
                    item[column.Name] = parsedValues[column.Name];
                }
                if (column.Name == extIdColumnName)
                {
                    item[column.Name] = parsedValues[diffIdColumnName];
                }
            }
        }
Exemplo n.º 3
0
        public override void InnerRun(Dictionary <string, object> vars, Dictionary <string, object> outputVars, Dictionary <string, object> InvertedInputVars, Message message)
        {
            JArray jarray = (JArray)vars["JArray"];

            if (jarray.HasValues)
            {
                DBConnection db = COREobject.i.Entitron;

                bool searchInShared = vars.ContainsKey("SearchInShared") ? (bool)vars["SearchInShared"] : false;

                string tableName = vars.ContainsKey("TableName")
                    ? (string)vars["TableName"]
                    : (string)vars["__TableName__"];
                DBTable table = db.Table(tableName, searchInShared);
                if (table == null)
                {
                    throw new Exception($"Queried table not found (Tabulka: {tableName}, Akce: {Name} ({Id}))");
                }
                var listDbItem = table.Select().ToList();
                //check if table has column (IsDeleted),if no , the result is null
                var columnIsDeletedExist = table.Columns.SingleOrDefault(c => c.Name == "IsDeleted");


                string uniqueCol;
                string uniqueExtCol; //basicly foreign key
                if (vars.ContainsKey("UniqueCol"))
                {
                    uniqueCol    = (string)vars["UniqueCol"];
                    uniqueExtCol = uniqueCol;
                }
                else
                {
                    uniqueCol    = "ext_id";
                    uniqueExtCol = DBCommandSet.PrimaryKey;
                }
                if (!table.Columns.Any(c => c.Name == uniqueCol))
                {
                    throw new Exception($"Table column named '{uniqueCol}' not found!");
                }
                foreach (JObject jo in jarray)
                {
                    if (columnIsDeletedExist != null)
                    {
                        //if theres column IsDeleted, check if the entity is in rising, if not, set isDeleted to true.
                        for (int i = 0; i < listDbItem.Count; i++)
                        {
                            if (!jarray.Any(j => j["id"].ToString() == listDbItem[i]["ext_id"].ToString()))
                            {
                                DBItem foundItem = listDbItem[i];
                                foundItem["IsDeleted"] = true;
                                table.Update(foundItem, (int)foundItem["id"]);
                            }
                        }
                    }
                    Dictionary <string, object> parsedColumns = new Dictionary <string, object>();
                    TapestryUtils.ParseJObjectRecursively(jo, parsedColumns);
                    DBItem parsedRow = new DBItem(db, table, parsedColumns);

                    DBItem updatedRow = table.Select().Where(c => c.Column(uniqueCol).Equal(parsedRow[uniqueExtCol])).FirstOrDefault();

                    if (updatedRow != null) //update
                    {
                        foreach (var col in parsedRow.getColumnNames())
                        {
                            if (updatedRow.getColumnNames().Contains(col) && col != DBCommandSet.PrimaryKey && col != uniqueCol)
                            {
                                updatedRow[col] = parsedRow[col];
                            }
                        }
                        table.Update(updatedRow, (int)updatedRow[DBCommandSet.PrimaryKey]);
                    }
                    else // insert row if it does not exist
                    {
                        DBItem item = new DBItem(db, table);
                        foreach (DBColumn col in table.Columns)
                        {
                            if (col.Name == DBCommandSet.PrimaryKey)
                            {
                                continue;
                            }
                            string parsedColName = (col.Name == "ext_id") ? DBCommandSet.PrimaryKey : col.Name;
                            item[col.Name] = parsedRow[parsedColName];
                        }

                        table.Add(item);
                    }
                }
                db.SaveChanges();
                outputVars["Result"] = true;
            }
            else
            {
                Watchtower.OmniusLog.Log($"{Name}: Input JArray has no values! Action aborted", Watchtower.OmniusLogLevel.Warning);
                outputVars["Result"] = false;
            }
        }