2016-12-11 21 views
3

我正在嘗試使用微軟Bot框架版本3構建一個簡單的BOT,並使用FormFlow。 用戶輸入的自由文本被髮送給返回一些意圖/實體的LUIS。使用由LUIS返回的實體,我需要從數據庫中獲取數據並在BuildForm方法中使用數據。從MessageController的BuildForm方法訪問LUIS實體

通過使用下面編寫的代碼,我能夠從LUIS獲取實體並從數據庫中獲取數據。

但是,我找不到任何方法來使用我的BuildForm方法中從數據庫中提取的數據。

總結: 我想從MessageController的BuildForm方法訪問LuisDialog方法中獲取的Data。

任何幫助將不勝感激。

**MessageController** 
public virtual async Task<HttpResponseMessage> Post([FromBody] Activity activity) 
{ 
    ...... 
    await Conversation.SendAsync(activity, MakeRoot); 
} 
internal static IDialog<TestRequest> MakeRoot() 
{ 
    return Chain.From(() => new TestDialog(BuildForm)); 
} 

private static IForm<TestRequest> BuildForm() 
{ 
    return builder.Message("") 
      .Field(nameof(TestRequest.searchResult)) 
      .Build 
} 

**LUISDialog:** 
class TestDialog : LuisDialog<TestRequest> 
{ 
    [LuisIntent("testIntent")] 
    public async Task GetTestIntentForm(IDialogContext context, LuisResult result) 
    { 
     // Pass the intent & entity to DBAccess class which returns list of string 
     List<string> lstResult = DBAccess.getInfoFromDB("testIntent", entities); 

     IDialog<TestRequest> testForm = new FormDialog<TestRequest>(new TestRequest(), this.MakeTestForm, FormOptions.PromptInStart, entities); 

     context.Call<TestRequest>(testForm, TestFormComplete); 
    } 
} 
**TestRequest** 
[Serializable] 
class TestRequest 
{ 
    [Prompt("This is the search result")] 
    public string searchResult; 
.... 
} 

回答

2

您只需要在表單模型中設置值,在您的案例TestRequest。因此,與其這樣做只是這一點:

IDialog<TestRequest> testForm = new FormDialog<TestRequest>(new TestRequest(), this.MakeTestForm, FormOptions.PromptInStart, entities); 

你可以做

IDialog<TestRequest> testForm = new FormDialog<TestRequest>(new TestRequest { searchResult = lstResult }, this.MakeTestForm, FormOptions.PromptInStart, entities); 
+0

感謝您的答覆。它幫助了我。 – rku0526

+0

我已經試過Upvote。它的說法是聲譽小於15,所以不會改變公開顯示的分數。 – rku0526

+0

然後只要接受答案,如果你認爲它解決了你的問題。 –