示例#1
0
 private static ParameterIL BuildParameter(IParameter parameter)
 {
     return(parameter switch
     {
         INamedParameter namedParameter => new NamedParameterIL(namedParameter.Symbol),
         ISelfParameter selfParameter => new SelfParameterIL(selfParameter.Symbol),
         IFieldParameter fieldParameter => new FieldParameterIL(fieldParameter.ReferencedSymbol),
         _ => throw ExhaustiveMatch.Failed(parameter)
     });
        /// <summary>
        /// Create a response to the user requesting a specific parameter
        /// </summary>
        /// <param name="param">the parameter details</param>
        /// <param name="c">the conversation it occurs in</param>
        /// <param name="parameters">context parameters</param>
        /// <param name="message"></param>
        /// <returns></returns>
        public virtual ConversationResponse RequestParam(IFieldParameter param, IConversationContext context, string message)
        {
            var c = context.GetCurrentConversation();

            c.Data[ReqParam] = new ParameterData {
                DisplayName = param.ParamName
            };

            if (string.IsNullOrWhiteSpace(message))
            {
                message = param.GetParameter("", context).Error;
            }

            var intentInput = param.GetInput(context.Parameters, c);

            return(ConversationResponseFactory.Create(c.Intent.KeyName, message, c.IsEnded, intentInput));
        }
        /// <summary>
        /// get a valid parameter object by checking for it in the previously retrieved data store or by finding it based on the information provided by the user
        /// </summary>
        /// <param name="paramName">the parameter to retrieve</param>
        /// <param name="context"></param>
        /// <returns></returns>
        public virtual IParameterResult LookupParam(IFieldParameter param, IConversationContext context)
        {
            var c = context.GetCurrentConversation();

            var storedValue = c.Data.ContainsKey(param.ParamName)
                ? c.Data[param.ParamName]
                : null;

            if (storedValue != null && !storedValue.IsIncomplete)
            {
                return(ResultFactory.GetSuccess(storedValue.DisplayName, storedValue.Value));
            }

            string value = SearchUserValues(param.ParamName, context);

            if (string.IsNullOrEmpty(value))
            {
                return(ResultFactory.GetFailure());
            }

            var paramResult = param.GetParameter(value, context);

            if (paramResult.HasFailed)
            {
                return(paramResult);
            }

            if (IsParamRequest(param.ParamName, c)) // clear any request for this property
            {
                c.Data.Remove(ReqParam);
            }

            c.Data[param.ParamName] = new ParameterData {
                DisplayName = paramResult.DisplayName, Value = paramResult.DataValue
            };
            return(ResultFactory.GetSuccess(paramResult.DisplayName, paramResult.DataValue));
        }