Пример #1
0
        public static async Task <List <AdaptiveCard> > GetApprovalsForUserCard(string accessToken, string userId)
        {
            // Get all approvals requested by current user
            var approvals = await DatabaseHelper.GetApprovalsAsync(a => a.Requestor == userId);

            if (approvals.Count() == 0)
            {
                // Return a simple message
                return(null);
            }
            else if (approvals.Count() == 1)
            {
                // Return status card of the only approval
                return(new List <AdaptiveCard>()
                {
                    GetApprovalStatusCard(approvals.First())
                });
            }
            else
            {
                var approvalCardList = new List <AdaptiveCard>();

                foreach (var approval in approvals)
                {
                    var approvalDetailCard = new AdaptiveCard();

                    var approvalColumnSet = new AdaptiveColumnSet();

                    // Get thumbnail
                    var thumbnailUri = await GraphHelper.GetFileThumbnailDataUri(accessToken, approval.File.Id);

                    var fileThumbCol = new AdaptiveColumn()
                    {
                        Width = AdaptiveColumnWidth.Auto.ToLower()
                    };

                    fileThumbCol.Items.Add(new AdaptiveImage()
                    {
                        Url     = new Uri(thumbnailUri),
                        AltText = "File thumbnail",
                        Size    = AdaptiveImageSize.Small
                    });

                    approvalColumnSet.Columns.Add(fileThumbCol);

                    var fileNameCol = new AdaptiveColumn()
                    {
                        Width = AdaptiveColumnWidth.Stretch.ToLower()
                    };

                    fileNameCol.Items.Add(new AdaptiveTextBlock()
                    {
                        Size = AdaptiveTextSize.Medium,
                        Text = approval.File.Name
                    });

                    fileNameCol.Items.Add(new AdaptiveTextBlock()
                    {
                        IsSubtle = true,
                        Spacing  = AdaptiveSpacing.None,
                        Text     = $"Requested: {TimeZoneHelper.GetAdaptiveDateTimeString(approval.RequestDate)}"
                    });

                    approvalColumnSet.Columns.Add(fileNameCol);

                    approvalDetailCard.Body.Add(approvalColumnSet);

                    approvalDetailCard.Actions.Add(new AdaptiveSubmitAction()
                    {
                        Title    = "This one",
                        DataJson = $@"{{ ""cardAction"": ""{CardActionTypes.SelectApproval}"", ""selectedApproval"": ""{approval.Id}"" }}"
                    });

                    approvalCardList.Add(approvalDetailCard);
                }

                return(approvalCardList);
            }
        }
        public static async Task <AdaptiveCard> GetFileDetailCard(string accessToken, string fileId)
        {
            var client = GetAuthenticatedClient(accessToken);

            // Get the file with thumbnails
            var file = await client.Me.Drive.Items[fileId].Request()
                       .Expand("thumbnails")
                       .GetAsync();

            // Get people user interacts with regularly
            var potentialApprovers = await client.Me.People.Request()
                                     // Only want organizational users, and do not want to send back to bot
                                     .Filter("personType/subclass eq 'OrganizationUser' and displayName ne 'Approval Bot'")
                                     .Top(10)
                                     .GetAsync();

            var fileCard = new AdaptiveCard();

            fileCard.Body.Add(new AdaptiveTextBlock()
            {
                Text   = "Get approval for this file?",
                Size   = AdaptiveTextSize.Large,
                Weight = AdaptiveTextWeight.Bolder
            });

            fileCard.Body.Add(new AdaptiveTextBlock()
            {
                Text   = file.Name,
                Weight = AdaptiveTextWeight.Bolder
            });

            fileCard.Body.Add(new AdaptiveFactSet()
            {
                Facts = new List <AdaptiveFact>()
                {
                    new AdaptiveFact("Size", $"{file.Size / 1024} KB"),
                    new AdaptiveFact("Last modified", TimeZoneHelper.GetAdaptiveDateTimeString(file.LastModifiedDateTime.Value)),
                    new AdaptiveFact("Last modified by", file.LastModifiedBy.User.DisplayName)
                }
            });

            if (file.Thumbnails != null && file.Thumbnails.Count > 0)
            {
                fileCard.Body.Add(new AdaptiveImage()
                {
                    Size    = AdaptiveImageSize.Stretch,
                    AltText = "File thumbnail",
                    Url     = new Uri(file.Thumbnails[0].Large.Url)
                });
            }

            var recipientPromptCard = new AdaptiveCard();

            recipientPromptCard.Body.Add(new AdaptiveTextBlock()
            {
                Text   = "Who should I ask for approval?",
                Weight = AdaptiveTextWeight.Bolder
            });

            var recipientPicker = new AdaptiveChoiceSetInput()
            {
                Id            = "approvers",
                IsMultiSelect = true,
                Style         = AdaptiveChoiceInputStyle.Compact
            };

            foreach (var potentialApprover in potentialApprovers)
            {
                recipientPicker.Choices.Add(new AdaptiveChoice()
                {
                    Title = potentialApprover.DisplayName,
                    Value = potentialApprover.ScoredEmailAddresses.First().Address
                });
            }

            recipientPromptCard.Body.Add(recipientPicker);

            recipientPromptCard.Actions.Add(new AdaptiveSubmitAction()
            {
                Title    = "Send Request",
                DataJson = $@"{{ ""cardAction"": ""{CardActionTypes.SendApprovalRequest}"", ""selectedFile"": ""{fileId}"" }}"
            });

            fileCard.Actions.Add(new AdaptiveShowCardAction()
            {
                Title = "Yes",
                Card  = recipientPromptCard
            });

            fileCard.Actions.Add(new AdaptiveSubmitAction()
            {
                Title    = "No",
                DataJson = $@"{{ ""cardAction"": ""{CardActionTypes.WrongFile}"" }}"
            });

            return(fileCard);
        }