public async Task <DialogTurnResult> PostSalesOrderAndViewStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) { var result = (bool)stepContext.Result; var state = await Accessors.CustomerDataState.GetAsync(stepContext.Context, cancellationToken : cancellationToken); var lines = state.TempSalesOrderLines; if (!result) { await Chatter.SendMessageAsync(stepContext.Context, StaticTexts.OrderCanceledText); } else { var postSalesOrderDto = new PostSalesOrderDto { customerNumber = state.Customer.Number, currencyCode = "USD" }; var getOrderDto = await Client.PostSalesOrder(postSalesOrderDto); var linesDtos = new List <GetSalesOrderLineDto>(); foreach (var line in lines) { var postSalesOrderLineDto = new PostSalesOrderLineDto { itemId = line.Item.Id, quantity = line.Quantity, lineType = "Item" }; var returnedDto = await Client.PostSalesOrderLine(getOrderDto.Id, postSalesOrderLineDto); linesDtos.Add(returnedDto); } var finalOrder = await Client.GetSalesOrder(getOrderDto.Id); await stepContext.Context.SendActivityAsync( MessageFactory.Attachment( StaticTexts.CreatePostedSalesOrderAttachment(finalOrder, linesDtos, state.Customer)), cancellationToken : cancellationToken); await Chatter.SendMessageAsync(stepContext.Context, StaticTexts.OrderPostedText); } await Accessors.CustomerDataState.SetAsync(stepContext.Context, state, cancellationToken); await Chatter.SendMessageAsync(stepContext.Context, StaticTexts.AnythingElseText); return(await stepContext.EndDialogAsync(cancellationToken : cancellationToken)); }