2017-02-22 48 views
0

Я использую FormFlow. Когда личинка заканчивает со всеми вопросами и называет processOrder, я хочу, чтобы продолжить диалог, но я не знаю, где я должен вызвать другой метод:Как вызвать другой метод после завершения процессаOrder в чате с помощью FormFlow?

OnCompletionAsyncDelegate<Form> processOrder = async (context, state) => 
     { 
      await context.PostAsync("You done"); 
       // context.Call(OnFormComplete); 
     }; 

Когда я пытаюсь позвонить, как это, я получаю это сообщение:

CS7036 Ошибка Там не аргумент, учитывая, что соответствует требуемому формальному параметру 'резюме' в 'IDialogStack.Call (IDialog, ResumeAfter)' project1 C: \ Projects \ Good Version \ V-17.2. 2017 \ demo-Project1 \ Project1 \ Dialogs \ Form.cs 34 Компилятор Активный компилятор IntelliSense

Я называю поток формы в этом режиме в моем rootdialog.cs:

var myform = new FormDialog<Form>(new Form(), Form.BuildForm, FormOptions.PromptInStart, null); 

       context.Call(myform, ResumeAfterOptionDialog); 

Formbuilder является:

return new FormBuilder<Form>() 
      .Field(nameof(Time)) 
      .Field(nameof(Number1)) 
      .Field(nameof(Number2)) 
      .AddRemainingFields() 

      .Confirm("Would you like to process") 
       .OnCompletion(processOrder) 
      .Build(); 

Я хочу продолжить диалог, потому что бот остановился. Как я могу вызвать другой метод и где мне позвонить?

+0

после formflow строить, как я могу назвать еще одно диалоговое – user2454923

ответ

0

Вы бы что-то вроде этого в вас formFlow класс:

[Serializable] 
public class CustomFormDialog 
{ 
    public DateTime Time { get; set; } 
    public int Number1 { get; set; } 
    public int Number2 { get; set; } 

    public static IForm<CustomFormDialog> Build() 
    { 
     OnCompletionAsyncDelegate<CustomFormDialog> processOrder = async (context, state) => 
     { 
      await context.Forward(new OtherFormDialog(state), onOtherFormProcessed, state, CancellationToken.None); 
     }; 

     return new FormBuilder<CustomFormDialog>() 
      .Field(nameof(Time)) 
      .Field(nameof(Number1)) 
      .Field(nameof(Number2)) 
      .AddRemainingFields() 

      .Confirm("Would you like to process?") 
      .OnCompletion(processOrder) 
      .Build(); 
    } 

    private static async Task onOtherFormProcessed(IDialogContext context, IAwaitable<CustomFormDialog> result) 
    { 
     var formValue = await result; 

     await context.PostAsync($"You are again in the form: Time: {formValue.Time}, Number1: {formValue.Number1}, Number2: {formValue.Number2}"); 
    } 
} 

Я определил фиктивный диалог, который получает ответ диалога formFlow, и сделать некоторые вещи и называют сделал для этого диалога и вернулся к классу formFlow:

public class OtherFormDialog : IDialog<CustomFormDialog> 
{ 
    private readonly CustomFormDialog formData; 

    public OtherFormDialog(CustomFormDialog prevState) 
    { 
     this.formData = prevState; 
    } 

    public async Task StartAsync(IDialogContext context) 
    { 
     //Here, we can do anything 
     await context.PostAsync("I'll check your data. Please wait!"); 

     await context.PostAsync("Just joking! No validation at all."); 
     context.Done(this.formData); 
    } 
} 
+0

Большое вам спасибо за ваш ответ ... я ценю так много. Я хочу спросить что-то еще, что я не могу это сделать ... Я хочу позвонить в свой rootDialog после того, как пользователь подтвердит форматирование ... пожалуйста, можете ли вы посоветовать мне, как позвонить ... где позвонить? – user2454923

 Смежные вопросы

  • Нет связанных вопросов^_^