private Dictionary <int, IRItem> GenerateProcessItems(string sqlquery)
        {
            SQLServerAccessor dbAccessor = new SQLServerAccessor();

            List <Dictionary <string, string> > output = dbAccessor.TableSearch(targetColumns, sqlquery);

            Dictionary <int, IRItem> dict = new Dictionary <int, IRItem>();
            int index = 0;

            foreach (Dictionary <string, string> rec in output)
            {
                IRItem item = new IRItem();
                item.index       = index++;
                item.stepNo      = int.Parse(rec["StepNo"]);
                item.content     = rec["Content"];
                item.options     = rec["Options"];
                item.optionRegex = rec["OptionRegex"];
                item.nextStep    = rec["NextStep"];

                item.askbackMessage = rec["AskbackMessage"];

                dict.Add(item.stepNo, item);
            }

            return(dict);
        }
Beispiel #2
0
        public string ProcessItem(string userId, string userAnswer, ref IRContext context, ref IRInfo info)
        {
            //context.stage = StageType.InProcess;

            int    currentStep = context.processContext.currentStepNo;
            IRItem item        = info.items[currentStep];

            if (Utils.Utils.IsRegexMatched(item.optionRegex, userAnswer))
            {
                context.processContext.askbackTime = 0;
                int nextStep = GetNextStep(context.processContext.preStepNumbers, item.nextStep, userAnswer);

                if (nextStep == GetLastStep(info.items)) // Finished
                {
                    context.stage = StageType.Completed;
                }

                context.processContext.preStepNumbers.Add(currentStep);

                string respStr = info.items[nextStep].content + "\r\n" + info.items[nextStep].options;

                context.processContext.currentStepNo = nextStep;
                return(respStr);
            }
            else
            {
                if (context.stage == StageType.InProcess)
                {
                    context.processContext.askbackTime++;
                }

                if (context.processContext.askbackTime > info.askBackLimitTimes)
                {
                    string respStr = info.quitMessage;
                    context.stage = StageType.Paused;
                    return(respStr);
                }
                else
                {
                    return(item.askbackMessage + "\r\n" + item.content + item.options);
                }
            }
        }