private void TryExecute(IDSFDataObject dataObject, int update, ErrorResultTO allErrors, IExecutionEnvironment env) { if (dataObject.IsDebugMode()) { var language = ScriptType.GetDescription(); AddDebugInputItem(new DebugItemStaticDataParams(language, "Language")); AddDebugInputItem(new DebugEvalResult(Script, "Script", env, update)); } var scriptItr = new WarewolfIterator(dataObject.Environment.Eval(Script, update, false, EscapeScript)); while (scriptItr.HasMoreData()) { var engine = new ScriptingEngineRepo().CreateEngine(ScriptType, _sources); var value = engine.Execute(scriptItr.GetNextValue()); foreach (var region in DataListCleaningUtils.SplitIntoRegions(Result)) { env.Assign(region, value, update); if (dataObject.IsDebugMode() && !allErrors.HasErrors() && !string.IsNullOrEmpty(region)) { AddDebugOutputItem(new DebugEvalResult(region, "", env, update)); } } } }
public void ScriptingContext_GivenPythonScript_ShouldReturnPythonScriptHandleType() { var context = new ScriptingEngineRepo(); if (context.CreateEngine(enScriptType.JavaScript, new StringScriptSources()) is JavaScriptContext scriptingContext) { Assert.AreEqual(enScriptType.JavaScript, scriptingContext.HandlesType()); } }
public void ScriptingContext_GivenRubyScript_ShouldReturnRubyScriptHandleType() { var context = new ScriptingEngineRepo(); var scriptingContext = context.CreateEngine(enScriptType.Ruby, new StringScriptSources()) as RubyContext; if (scriptingContext != null) { Assert.AreEqual(enScriptType.Ruby, scriptingContext.HandlesType()); } }
public void ScriptingContext_GivenRubyScript_ShouldSetNestedClassValues() { var context = new ScriptingEngineRepo(); var scriptingContext = context.CreateEngine(enScriptType.Ruby, new StringScriptSources()) as RubyContext; Assert.IsNotNull(scriptingContext); var prObject = new PrivateObject(scriptingContext); Assert.IsNotNull(prObject); Assert.IsNull(scriptingContext.RuntimeSetup); prObject.Invoke("CreateRubyEngine"); Assert.IsNotNull(scriptingContext.RuntimeSetup); }
protected override void ExecuteTool(IDSFDataObject dataObject, int update) { AddScriptSourcePathsToList(); ErrorResultTO allErrors = new ErrorResultTO(); ErrorResultTO errors = new ErrorResultTO(); allErrors.MergeErrors(errors); var env = dataObject.Environment; InitializeDebug(dataObject); try { if (!errors.HasErrors()) { if (dataObject.IsDebugMode()) { var language = ScriptType.GetDescription(); AddDebugInputItem(new DebugItemStaticDataParams(language, "Language")); AddDebugInputItem(new DebugEvalResult(Script, "Script", env, update)); } allErrors.MergeErrors(errors); if (allErrors.HasErrors()) { return; } var scriptItr = new WarewolfIterator(dataObject.Environment.Eval(Script, update, false, EscapeScript)); while (scriptItr.HasMoreData()) { var engine = new ScriptingEngineRepo().CreateEngine(ScriptType, _sources); var value = engine.Execute(scriptItr.GetNextValue()); foreach (var region in DataListCleaningUtils.SplitIntoRegions(Result)) { env.Assign(region, value, update); if (dataObject.IsDebugMode() && !allErrors.HasErrors()) { if (!string.IsNullOrEmpty(region)) { AddDebugOutputItem(new DebugEvalResult(region, "", env, update)); } } } } } } catch (Exception e) when(e is NullReferenceException || e is RuntimeBinderException) { if (e.GetType() == typeof(NullReferenceException) || e.GetType() == typeof(RuntimeBinderException)) { allErrors.AddError(ErrorResource.ScriptingErrorReturningValue); } else { allErrors.AddError(e.Message.Replace(" for main:Object", string.Empty)); } } finally { // Handle Errors if (allErrors.HasErrors()) { DisplayAndWriteError("DsfScriptingJavaScriptActivity", allErrors); var errorString = allErrors.MakeDisplayReady(); dataObject.Environment.AddError(errorString); } if (dataObject.IsDebugMode()) { if (allErrors.HasErrors()) { AddDebugOutputItem(new DebugItemStaticDataParams("", Result, "")); } DispatchDebugState(dataObject, StateType.Before, update); DispatchDebugState(dataObject, StateType.After, update); } } }
protected override void ExecuteTool(IDSFDataObject dataObject) { ErrorResultTO allErrors = new ErrorResultTO(); ErrorResultTO errors = new ErrorResultTO(); allErrors.MergeErrors(errors); var env = dataObject.Environment; InitializeDebug(dataObject); try { if (!errors.HasErrors()) { if (dataObject.IsDebugMode()) { var language = ScriptType.GetDescription(); AddDebugInputItem(new DebugItemStaticDataParams(language, "Language")); AddDebugInputItem(new DebugEvalResult(Script, "Script", env)); } var listOfEvalResultsForInput = dataObject.Environment.EvalForDataMerge(Script); var innerIterator = new WarewolfListIterator(); var innerListOfIters = new List <WarewolfIterator>(); foreach (var listOfIterator in listOfEvalResultsForInput) { var inIterator = new WarewolfIterator(listOfIterator); innerIterator.AddVariableToIterateOn(inIterator); innerListOfIters.Add(inIterator); } var atomList = new List <DataASTMutable.WarewolfAtom>(); while (innerIterator.HasMoreData()) { var stringToUse = ""; foreach (var warewolfIterator in innerListOfIters) { stringToUse += warewolfIterator.GetNextValue(); } atomList.Add(DataASTMutable.WarewolfAtom.NewDataString(stringToUse)); } var finalString = string.Join("", atomList); var inputListResult = WarewolfDataEvaluationCommon.WarewolfEvalResult.NewWarewolfAtomListresult(new WarewolfAtomList <DataASTMutable.WarewolfAtom>(DataASTMutable.WarewolfAtom.Nothing, atomList)); if (DataListUtil.IsFullyEvaluated(finalString)) { inputListResult = dataObject.Environment.Eval(finalString); } allErrors.MergeErrors(errors); if (allErrors.HasErrors()) { return; } var scriptItr = new WarewolfIterator(inputListResult); while (scriptItr.HasMoreData()) { var engine = new ScriptingEngineRepo().CreateEngine(ScriptType); var value = engine.Execute(scriptItr.GetNextValue()); //2013.06.03: Ashley Lewis for bug 9498 - handle multiple regions in result foreach (var region in DataListCleaningUtils.SplitIntoRegions(Result)) { env.Assign(region, value); if (dataObject.IsDebugMode() && !allErrors.HasErrors()) { AddDebugOutputItem(new DebugEvalResult(region, "", env)); } } } } } catch (Exception e) { if (e.GetType() == typeof(NullReferenceException) || e.GetType() == typeof(Microsoft.CSharp.RuntimeBinder.RuntimeBinderException)) { allErrors.AddError("There was an error when returning a value from your script, remember to use the 'Return' keyword when returning the result"); } else { allErrors.AddError(e.Message.Replace(" for main:Object", string.Empty)); } } finally { // Handle Errors if (allErrors.HasErrors()) { DisplayAndWriteError("DsfScriptingJavaScriptActivity", allErrors); var errorString = allErrors.MakeDisplayReady(); dataObject.Environment.AddError(errorString); } if (dataObject.IsDebugMode()) { if (allErrors.HasErrors()) { AddDebugOutputItem(new DebugItemStaticDataParams("", Result, "")); } DispatchDebugState(dataObject, StateType.Before); DispatchDebugState(dataObject, StateType.After); } } }
/// <summary> /// When overridden runs the activity's execution logic /// </summary> /// <param name="context">The context to be used.</param> protected override void OnExecute(NativeActivityContext context) { IDSFDataObject dataObject = context.GetExtension <IDSFDataObject>(); IDataListCompiler compiler = DataListFactory.CreateDataListCompiler(); Guid dlID = dataObject.DataListID; ErrorResultTO allErrors = new ErrorResultTO(); ErrorResultTO errors = new ErrorResultTO(); Guid executionId = dlID; allErrors.MergeErrors(errors); IDev2DataListUpsertPayloadBuilder <string> toUpsert = Dev2DataListBuilderFactory.CreateStringDataListUpsertBuilder(); toUpsert.IsDebug = (dataObject.IsDebugMode()); toUpsert.ResourceID = dataObject.ResourceID; InitializeDebug(dataObject); try { if (!errors.HasErrors()) { IDev2IteratorCollection colItr = Dev2ValueObjectFactory.CreateIteratorCollection(); IDev2DataListEvaluateIterator scriptItr = CreateDataListEvaluateIterator(Script, executionId, compiler, colItr, allErrors); IBinaryDataListEntry scriptEntry = compiler.Evaluate(executionId, enActionType.User, Script, false, out errors); allErrors.MergeErrors(errors); if (dataObject.IsDebugMode()) { var language = ScriptType.GetDescription(); AddDebugInputItem(new DebugItemStaticDataParams(language, "Language")); AddDebugInputItem(new DebugItemVariableParams(Script, "Script", scriptEntry, executionId)); } if (allErrors.HasErrors()) { return; } while (colItr.HasMoreData()) { string scriptValue = colItr.FetchNextRow(scriptItr).TheValue; var engine = new ScriptingEngineRepo().CreateEngine(ScriptType); var value = engine.Execute(scriptValue); //2013.06.03: Ashley Lewis for bug 9498 - handle multiple regions in result foreach (var region in DataListCleaningUtils.SplitIntoRegions(Result)) { toUpsert.Add(region, value); toUpsert.FlushIterationFrame(); } } compiler.Upsert(executionId, toUpsert, out errors); allErrors.MergeErrors(errors); if (dataObject.IsDebugMode() && !allErrors.HasErrors()) { foreach (var debugOutputTo in toUpsert.DebugOutputs) { AddDebugOutputItem(new DebugItemVariableParams(debugOutputTo)); } } } } catch (Exception e) { if (e.GetType() == typeof(NullReferenceException) || e.GetType() == typeof(Microsoft.CSharp.RuntimeBinder.RuntimeBinderException)) { allErrors.AddError("There was an error when returning a value from your script, remember to use the 'Return' keyword when returning the result"); } else { allErrors.AddError(e.Message.Replace(" for main:Object", string.Empty)); } } finally { // Handle Errors if (allErrors.HasErrors()) { DisplayAndWriteError("DsfScriptingJavaScriptActivity", allErrors); compiler.UpsertSystemTag(dataObject.DataListID, enSystemTag.Dev2Error, allErrors.MakeDataListReady(), out errors); } if (dataObject.IsDebugMode()) { if (allErrors.HasErrors()) { AddDebugOutputItem(new DebugItemStaticDataParams("", Result, "")); } DispatchDebugState(context, StateType.Before); DispatchDebugState(context, StateType.After); } } }