private bool BuildSteps(string sCodeblockName, ref string sErr) { //set the text of the step 'add' message... string sAddHelpMsg = "No Commands have been defined in this Codeblock. Drag a Command here to add it."; if (oTask.Codeblocks[sCodeblockName].Steps.Count > 0) { //we always need the no_step item to be there, we just hide it if we have other items //it will get unhidden if someone deletes the last step. ltSteps.Text = "<li id=\"no_step\" class=\"ui-widget-content ui-corner-all ui-state-active ui-droppable no_step hidden\">" + sAddHelpMsg + "</li>"; foreach (Step oStep in oTask.Codeblocks[sCodeblockName].Steps.Values) { ltSteps.Text += ft.DrawFullStep(oStep); } } else { ltSteps.Text = "<li id=\"no_step\" class=\"ui-widget-content ui-corner-all ui-state-active ui-droppable no_step\">" + sAddHelpMsg + "</li>"; } return(true); }
public string wmAddStep(string sTaskID, string sCodeblockName, string sItem) { dataAccess dc = new dataAccess(); FunctionTemplates.HTMLTemplates ft = new FunctionTemplates.HTMLTemplates(); acUI.acUI ui = new acUI.acUI(); try { string sUserID = ui.GetSessionUserID(); string sStepHTML = ""; string sErr = ""; string sSQL = ""; string sNewStepID = ""; if (!ui.IsGUID(sTaskID)) throw new Exception("Unable to add step. Invalid or missing Task ID. [" + sTaskID + "]" + sErr); //now, the sItem variable may have a function name (if it's a new command) //or it may have a guid (if it's from the clipboard) //so, if it's a guid after stripping off the prefix, it's from the clipboard //the function has a fn_ or clip_ prefix on it from the HTML. Strip it off. //FIX... test the string to see if it BEGINS with fn_ or clip_ //IF SO... cut off the beginning... NOT a replace operation. if (sItem.StartsWith("fn_")) sItem = sItem.Remove(0, 3); if (sItem.StartsWith("clip_")) sItem = sItem.Remove(0, 5); //NOTE: !! yes we are adding the step with an order of -1 //the update event on the client does not know the index at which it was dropped. //so, we have to insert it first to get the HTML... but the very next step //will serialize and update the entire sortable... //immediately replacing this -1 with the correct position if (ui.IsGUID(sItem)) { sNewStepID = sItem; //copy from the clipboard (using the root_step_id to get ALL associated steps) sSQL = "insert into task_step (step_id, task_id, codeblock_name, step_order, step_desc," + " commented, locked, output_parse_type, output_row_delimiter, output_column_delimiter," + " function_name, function_xml, variable_xml)" + " select step_id, '" + sTaskID + "'," + " case when codeblock_name is null then '" + sCodeblockName + "' else codeblock_name end," + "-1,step_desc," + "0,0,output_parse_type,output_row_delimiter,output_column_delimiter," + "function_name,function_xml,variable_xml" + " from task_step_clipboard" + " where user_id = '" + sUserID + "'" + " and root_step_id = '" + sItem + "'"; if (!dc.sqlExecuteUpdate(sSQL, ref sErr)) throw new Exception("Unable to add step." + sErr); ui.WriteObjectChangeLog(Globals.acObjectTypes.Task, sTaskID, sItem, "Added Command from Clipboard to Codeblock:" + sCodeblockName); } else { //add a new command sNewStepID = ui.NewGUID(); //NOTE: !! yes we are doing some command specific logic here. //Certain commands have different 'default' values for delimiters, etc. //sOPM: 0=none, 1=delimited, 2=parsed string sOPM = "0"; switch (sItem) { case "sql_exec": sOPM = "1"; break; case "win_cmd": sOPM = "1"; break; case "dos_cmd": sOPM = "2"; break; case "cmd_line": sOPM = "2"; break; case "http": sOPM = "2"; break; case "parse_text": sOPM = "2"; break; case "read_file": sOPM = "2"; break; } sSQL = "insert into task_step (step_id, task_id, codeblock_name, step_order," + " commented, locked, output_parse_type, output_row_delimiter, output_column_delimiter," + " function_name, function_xml)" + " select '" + sNewStepID + "'," + "'" + sTaskID + "'," + (string.IsNullOrEmpty(sCodeblockName) ? "NULL" : "'" + sCodeblockName + "'") + "," + "-1," + "0,0," + sOPM + ",0,0," + "'" + sItem + "'," + " xml_template" + " from lu_task_step_function" + " where function_name = '" + sItem + "' limit 1"; if (!dc.sqlExecuteUpdate(sSQL, ref sErr)) throw new Exception("Unable to add step." + sErr); ui.WriteObjectChangeLog(Globals.acObjectTypes.Task, sTaskID, sItem, "Added Command Type:" + sItem + " to Codeblock:" + sCodeblockName); } if (!string.IsNullOrEmpty(sNewStepID)) { //now... get the newly inserted step and draw it's HTML DataRow dr = ft.GetSingleStep(sNewStepID, sUserID, ref sErr); if (dr != null && sErr == "") sStepHTML += ft.DrawFullStep(dr); else sStepHTML += "<span class=\"red_text\">" + sErr + "</span>"; //return the html return sNewStepID + sStepHTML; } else { throw new Exception("Unable to add step. No new step_id." + sErr); } } catch (Exception ex) { throw ex; } }
public string wmGetStep(string sStepID) { FunctionTemplates.HTMLTemplates ft = new FunctionTemplates.HTMLTemplates(); acUI.acUI ui = new acUI.acUI(); try { string sStepHTML = ""; string sErr = ""; if (!ui.IsGUID(sStepID)) throw new Exception("Unable to get step. Invalid or missing Step ID. [" + sStepID + "]" + sErr); string sUserID = ui.GetSessionUserID(); DataRow dr = ft.GetSingleStep(sStepID, sUserID, ref sErr); if (dr != null && sErr == "") { //embedded steps... //if the step_order is -1 and the codeblock_name is a guid, this step is embedded //within another step if (dr["step_order"].ToString() == "-1" && ui.IsGUID(dr["codeblock_name"].ToString())) sStepHTML += ft.DrawEmbeddedStep(dr); else sStepHTML += ft.DrawFullStep(dr); } else sStepHTML += "<span class=\"red_text\">" + sErr + "</span>"; //return the html return sStepHTML; } catch (Exception ex) { throw ex; } }