2017-01-18 3 views
0

Перед отображением диалогового окна подтверждения запроса, я получаю некоторые данные от пользователя. Исходя из этих входных данных и выбора PromptDialog (Да/Нет), я должен выполнить некоторую функциональную логику.
Prompt DialogПередача параметра с помощью PromptDialog.Confirm: resume Bot Framework (C#)

PromptDialog.Confirm(
      context: context, 
      resume: ServiceDetails, 
      prompt: "Shall I continue with " + facility, 
      retry: "Please,Confirm?."); 

Резюме Функция: ServiceDetails

private async Task ServiceDetails(IDialogContext context, IAwaitable<bool> result) 
    { 
     var confirm = await result; 
     if (confirm && facility=="xxx") // They said yes 
     { 

В методе ServiceDetails, я должен передать "объект" значение. Является ли это возможным? или Должен ли я использовать session (context.userdata.SetValue) для этой конкретной беседы для получения значения «объекта»?

+1

Обратный вызов будет только иметь дополнительный 'bool' параметра, все остальное придется идти в данном контексте. – jackarms

+0

@jackarms yes, только по контексту данных я могу получить значение, то есть context.userdata.SetValue. Но в бот-каркасе это похоже на сеанс. –

ответ

3

Как вы сказали, одним из вариантов было бы использовать пакеты данных Bot и хранить там значения. Я думаю, что имеет смысл использовать пакет данных PrivateConversationData вместо UserData, поскольку последний будет доступен для всех каналов и цепочек. Об этом можно узнать в State sample.

Другим вариантом, который может быть более подходящим в зависимости от вашего рабочего процесса, является использование FormFlow. С FormFlow вы можете определить модель, которая позже будет переведена на вопросы. Как только форма будет завершена, вы получите «состояние» формы со всеми ответами, предоставленными пользователем.

Here вы можете найти документацию по FormFlow. И here и here некоторые примеры того, как можно использовать.

+0

получает два входа от объекта запроса. на основе вопросов, которые должны задавать лица. Если я использую singleformflow 'IForm BuildFacilityForm()', как я могу проверить заданное значение и 'field.active' для этих входов. –

+0

Не полностью следуете за вами, но, похоже, другой вопрос от этого в этой теме. Я бы порекомендовал открыть новый вопрос с помощью этого запроса –

0

Вы можете использовать переменную уровня класса, facility, а затем сделать this.facility=facility в функциональной логике «Приглашение».

Вы могли бы прочитать это значение в ServiceDetails просто как this.facility=="xxx"