public T GetFieldAnswer <T>(string fieldName) { var answer = GetFieldAnswerValue(fieldName); if (answer == null) { return(default(T)); } // Special handling for JArray caused by serialization of the data if (answer is JArray jarrayAnswer) { return((jarrayAnswer).ToObject <T>()); } if (answer is T) { return((T)answer); } try { return(ScriptHelpers.ConvertToType <T>(answer)); } catch (JsonReaderException) { } return((T)Convert.ChangeType(answer, typeof(T))); }
public Task <ErrorHandlerResult> ProcessErrorHandler(ChatModel chatModel, ChatFlowStep chatFlowStep) { if (!initialized) { throw new ApplicationException("ChatScriptManager is not initialized. Call Initialize()"); } string script = chatFlowStep.ErrorHandler; ChatVariables globalFields = chatModel.CurrentState.GlobalAnswers; ChatVariables flowFields = chatModel.CurrentState.GetFlowAnswers(chatFlowStep.Flow); if (AwsUtilityMethods.IsRunningOnAWS) { AWSXRayRecorder.Instance.BeginSubsegment("Script: Process Parser Error Handler"); } try { return(Task.FromResult( RunScript <ErrorHandlerResult>((engine, globalValues, flowValues) => { dynamic result = engine.Evaluate(script); if (result == null) { return null; } ConvertFieldsToNative(globalFields, globalValues, true); ConvertFieldsToNative(flowFields, flowValues, false); return ScriptHelpers.ConvertToType <ErrorHandlerResult>(result); }, globalFields, flowFields, null) )); } catch (Exception ex) { if (AwsUtilityMethods.IsRunningOnAWS) { AWSXRayRecorder.Instance.AddException(ex); } logger.ErrorFormat("Script: Process Parser Error Handler Error. '{0}'", ex.Message); throw; } finally { if (AwsUtilityMethods.IsRunningOnAWS) { AWSXRayRecorder.Instance.EndSubsegment(); } } }