/// <summary> /// Get populated result to in messaging extension tab. /// </summary> /// <param name="commandId">Command id to determine which tab in message extension has been invoked.</param> /// <param name="localTimestamp">Local timestamp of the user activity.</param> /// <param name="searchServiceResults">List of tickets from Azure search service.</param> /// <returns><see cref="Task"/> Returns MessagingExtensionResult which will be shown in messaging extension tab.</returns> public static MessagingExtensionResult GetMessagingExtensionResult( string commandId, DateTimeOffset?localTimestamp, IList <TicketEntity> searchServiceResults) { MessagingExtensionResult composeExtensionResult = new MessagingExtensionResult { Type = "result", AttachmentLayout = AttachmentLayoutTypes.List, Attachments = new List <MessagingExtensionAttachment>(), }; foreach (var ticket in searchServiceResults) { ThumbnailCard previewCard = new ThumbnailCard { Title = ticket.Title, Text = GetPreviewCardText(ticket, commandId, localTimestamp), }; var selectedTicketAdaptiveCard = new MessagingExtensionTicketsCard(ticket); composeExtensionResult.Attachments.Add(selectedTicketAdaptiveCard.ToAttachment(localTimestamp).ToMessagingExtensionAttachment(previewCard.ToAttachment())); } return(composeExtensionResult); }
/// <summary> /// Get the results from Azure search service and populate the result (card + preview). /// </summary> /// <param name="query">query which the user had typed in message extension search.</param> /// <param name="commandId">commandId to determine which tab in message extension has been invoked.</param> /// <param name="count">count for pagination.</param> /// <param name="skip">skip for pagination.</param> /// <param name="localTimestamp">Local timestamp of the user activity.</param> /// <returns><see cref="Task"/> returns MessagingExtensionResult which will be used for providing the card.</returns> public async Task <MessagingExtensionResult> GetSearchResultAsync(string query, string commandId, int?count, int?skip, DateTimeOffset?localTimestamp) { MessagingExtensionResult composeExtensionResult = new MessagingExtensionResult { Type = "result", AttachmentLayout = "list", Attachments = new List <MessagingExtensionAttachment>(), }; IList <TicketEntity> searchServiceResults = new List <TicketEntity>(); // Enable prefix matches query = (query ?? string.Empty) + "*"; // commandId should be equal to Id mentioned in Manifest file under composeExtensions section switch (commandId) { case RecentCommandId: searchServiceResults = await this.searchService.SearchTicketsAsync(TicketSearchScope.RecentTickets, query, count, skip); break; case OpenCommandId: searchServiceResults = await this.searchService.SearchTicketsAsync(TicketSearchScope.OpenTickets, query, count, skip); break; case AssignedCommandId: searchServiceResults = await this.searchService.SearchTicketsAsync(TicketSearchScope.AssignedTickets, query, count, skip); break; } foreach (var ticket in searchServiceResults) { ThumbnailCard previewCard = new ThumbnailCard { Title = ticket.Title, Text = this.GetPreviewCardText(ticket, commandId, localTimestamp), }; var selectedTicketAdaptiveCard = new MessagingExtensionTicketsCard(ticket); composeExtensionResult.Attachments.Add(selectedTicketAdaptiveCard.ToAttachment(localTimestamp).ToMessagingExtensionAttachment(previewCard.ToAttachment())); } return(composeExtensionResult); }