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"; }
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]; } } }
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; } }