2017-02-22 2 views
0

Ich verwende FormFlow. Wenn ein Bot mit allen Fragen beendet und ruft processOrder, möchte ich mit dem Dialog fortzusetzen, aber ich weiß nicht, wo ich eine andere Methode nennen sollte:Wie ruft man eine andere Methode auf, nachdem processOrder im Chatbot mit FormFlow abgeschlossen wurde?

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

Wenn ich so versuchen zu nennen, ich diese Nachricht:

Fehler CS7036 Es gibt kein Argument gegeben, die auf den erforderlichen formalen Parameter 'Lebenslauf' von 'IDialogStack.Call (iDialog, ResumeAfter)' Project1 C entspricht: \ Projects Gute Version \ v-17.2 \. 2017 \ demo-Project1 \ Project1 \ Dialoge \ Form.cs 34 Compiler IntelliSense Active Compiler

nenne ich die Form fließen in diesem Modus in meinem rootdialog.cs:

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

       context.Call(myform, ResumeAfterOptionDialog); 

Formbuilder ist:

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

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

Ich möchte den Dialog fortzusetzen, weil der Bot gestoppt. Wie kann ich eine andere Methode anrufen und wo soll ich anrufen?

+0

nach Formflow bauen, wie ich für die Antwort ein weiteres Dialog – user2454923

Antwort

0

Sie würden in ihr so ​​etwas zu Formflow Klasse:

[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}"); 
    } 
} 

ich einen Dummy-Dialog definiert, die die Antwort des Formflow Dialog empfängt, und ein paar Sachen zu tun und rufen Sie die für diesen Dialog durchgeführt und kam zurück auf die Formflow Klasse:

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

Vielen Dank nennen kann ... ich schätze so viel. Ich möchte etwas anderes fragen, dass ich es nicht tun kann ... Ich möchte meinen rootDialog aufrufen, nachdem der Benutzer den Formularfluss bestätigt hat ... bitte kannst du mir raten, wie ich anrufen soll ... wo soll ich anrufen? – user2454923

Verwandte Themen