1
votes

I'm having difficulties creating a card which uses AdaptiveShowCardAction. When I try to create a simple card, it manages to show.

Code:

public override AdaptiveCard CherwellCard(UserProfile userProfile)
{
    try
    {
        foreach (var service in CherwellCategories)
        {
            var serviceCard = new AdaptiveShowCardAction()
            {
                Title = service.Name,
                Card = new AdaptiveCard()
                {
                    Body = new List<AdaptiveElement>()
                {
                    new AdaptiveTextBlock()
                    {
                        Text = TranslateHelper.GetText(userProfile.Locale, "ticket_category"),
                        Weight = AdaptiveTextWeight.Bolder,
                        Size =  AdaptiveTextSize.Medium
                    }
                },
                    Actions = new List<AdaptiveAction>()
                    {

                    }
                }
            };
            foreach (var category in service.Categories)
            {
                var categoryCard = new AdaptiveShowCardAction()
                {
                    Title = category.Name,
                    Card = new AdaptiveCard()
                    {
                        Body = new List<AdaptiveElement>()
                    {
                        new AdaptiveTextBlock()
                        {
                            Text = TranslateHelper.GetText(userProfile.Locale, "ticket_sub_category"),
                            Weight = AdaptiveTextWeight.Bolder,
                            Size =  AdaptiveTextSize.Medium
                        }
                    },
                        Actions = new List<AdaptiveAction>()
                        {
                        }
                    }
                };
                foreach (var subCategory in category.Categories)
                {
                    var subCategoryCard = new AdaptiveShowCardAction()
                    {
                        Title = subCategory.Name,
                        Card = new AdaptiveCard()
                        {
                            Body = new List<AdaptiveElement>()
                        {
                            new AdaptiveTextBlock()
                            {
                                Text = TranslateHelper.GetText(userProfile.Locale, "ticket_selection"),
                                Weight = AdaptiveTextWeight.Bolder,
                                Size =  AdaptiveTextSize.Medium
                            }
                        },
                            Actions = new List<AdaptiveAction>()
                            {
                            }
                        }
                    };
                    var ContinueDataJson = "{ \"Service\" : \"{0}\", \"Category\" : \"{1}\", \"SubCategory\" : \"{2}\"}";
                    ContinueDataJson = ContinueDataJson.Replace("{0}", service.Name).Replace("{1}", category.Name).Replace("{2}", subCategory.Name);

                    var finalCard = new AdaptiveShowCardAction()
                    {
                        Title = TranslateHelper.GetText(userProfile.Locale, "ticket_details"),
                        Card = new AdaptiveCard()
                        {
                            Body = new List<AdaptiveElement>()
                        {
                            new AdaptiveTextBlock()
                            {
                                Text = TranslateHelper.GetText(userProfile.Locale, "ticket_services"),
                                Weight = AdaptiveTextWeight.Bolder,
                                Size =  AdaptiveTextSize.Medium
                            },
                            new AdaptiveTextBlock()
                            {
                                Text = service.Name,
                                Weight = AdaptiveTextWeight.Lighter,
                                Size =  AdaptiveTextSize.Medium
                            },
                            new AdaptiveTextBlock()
                            {
                                Text = TranslateHelper.GetText(userProfile.Locale, "ticket_category"),
                                Weight = AdaptiveTextWeight.Bolder,
                                Size =  AdaptiveTextSize.Medium
                            },
                            new AdaptiveTextBlock()
                            {
                                Text = category.Name,
                                Weight = AdaptiveTextWeight.Lighter,
                                Size =  AdaptiveTextSize.Medium
                            },
                            new AdaptiveTextBlock()
                            {
                                Text = TranslateHelper.GetText(userProfile.Locale, "ticket_sub_category"),
                                Weight = AdaptiveTextWeight.Bolder,
                                Size =  AdaptiveTextSize.Medium
                            },
                            new AdaptiveTextBlock()
                            {
                                Text = subCategory.Name,
                                Weight = AdaptiveTextWeight.Lighter,
                                Size =  AdaptiveTextSize.Medium
                            }
                        },
                            Actions = new List<AdaptiveAction>()
                        {
                            new AdaptiveSubmitAction()
                            {
                                Title =  TranslateHelper.GetText(userProfile.Locale, "ticket_submit"),
                                DataJson = ContinueDataJson
                            }
                        }
                        }
                    };

                    subCategoryCard.Card.Actions.Add(finalCard);

                    categoryCard.Card.Actions.Add(subCategoryCard);
                }
                serviceCard.Card.Actions.Add(categoryCard);
            }
            serviceAction.Add(serviceCard);
        }

        AdaptiveCard card = new AdaptiveCard()
        {
            Body = new List<AdaptiveElement>()
        {
            new AdaptiveTextBlock()
            {
                Text = TranslateHelper.GetText(userProfile.Locale, "ticket_services"),
                Weight = AdaptiveTextWeight.Bolder,
                Size =  AdaptiveTextSize.Medium
            }
        },
            Actions = new List<AdaptiveAction>()
            {
            }
        };
        card.Actions.AddRange(serviceAction);

        return card;
    }
    catch (Exception ex)
    {

        throw;
    }

}

For the CherwellCategories list - it contains 3 levels, Service (8 data) - Category (20+) and SubCategory (118 data). I'm suspecting it's because the card is way too big for it to process.

The card is not shown when I click on the button. It doesn't give any response. Is there any limit or something? As I'm able to create a simple card and show it, continue with the flow of the dialog.

JsonValue:

[
  {
    "name": "Acquire and Develop Talent",
    "categories": [
      {
        "name": "Manage Learning and Development",
        "categories": [
          {
            "name": "Deliver Training"
          },
          {
            "name": "Develop Learning Programmes"
          },
          {
            "name": "Evaluate Training"
          },
          {
            "name": "Manage course cancellation requests"
          },
          {
            "name": "Manage Employee pre-book requests"
          },
          {
            "name": "Register interest for a course"
          },
          {
            "name": "Set-up Learning"
          }
        ]
      },
      {
        "name": "Manage Performance",
        "categories": [
          {
            "name": "Conduct Annual Review"
          },
          {
            "name": "Conduct Mid-Year Review"
          },
          {
            "name": "Create Team Objectives & Individual Performance Plan"
          },
          {
            "name": "Design Performance and Development Processes and Tools"
          },
          {
            "name": "Manage and Assign Competencies"
          }
        ]
      },
      {
        "name": "Manage Recruitment and New Hires",
        "categories": [
          {
            "name": "Create Job Requisition"
          },
          {
            "name": "Develop Recruitment Processes and Tools"
          },
          {
            "name": "Document Employee Data"
          },
          {
            "name": "Edit / Cancel Job Requisition"
          },
          {
            "name": "Manage Job Offer - Grade 33 and below"
          },
          {
            "name": "Manage Job Offer - Grade 34 and above"
          },
          {
            "name": "Manage Offer Withdrawal"
          },
          {
            "name": "Manage Referral Process"
          },
          {
            "name": "Post Job / Position"
          },
          {
            "name": "Prepare for New Hire"
          },
          {
            "name": "Prepare Rejection"
          },
          {
            "name": "Screen Candidates"
          },
          {
            "name": "Select Candidate"
          },
          {
            "name": "Source Candidate"
          }
        ]
      },
      {
        "name": "Manage Talent",
        "categories": [
          {
            "name": "Conduct Talent Review & Identify Talent"
          },
          {
            "name": "Develop & Maintain Succession Plan"
          },
          {
            "name": "Develop Talent Processes & Tools"
          }
        ]
      }
    ]
  },
  {
    "name": "Ad-hoc Request",
    "categories": [
      {
        "name": "Admin request",
        "categories": [
          {
            "name": "Perform specified Admin action"
          }
        ]
      },
      {
        "name": "Reporting",
        "categories": [
          {
            "name": "Create Report"
          },
          {
            "name": "Run Report"
          }
        ]
      }
    ]
  },
  {
    "name": "HR Systems",
    "categories": [
      {
        "name": "Cherwell",
        "categories": [
          {
            "name": "Defect"
          },
          {
            "name": "New Requirement"
          },
          {
            "name": "Question"
          }
        ]
      },
      {
        "name": "IVR",
        "categories": [
          {
            "name": "Defect"
          },
          {
            "name": "New Requirement"
          },
          {
            "name": "Question"
          }
        ]
      },
      {
        "name": "Kenexa",
        "categories": [
          {
            "name": "Create new users"
          },
          {
            "name": "Jobs Specifications Updates"
          },
          {
            "name": "Manage assessments"
          },
          {
            "name": "Manage Reports"
          },
          {
            "name": "Requisitions Incidents"
          }
        ]
      },
      {
        "name": "Opentext",
        "categories": [
          {
            "name": "Defect"
          },
          {
            "name": "New Requirement"
          },
          {
            "name": "Question"
          }
        ]
      },
      {
        "name": "SharePoint",
        "categories": [
          {
            "name": "Access"
          },
          {
            "name": "Defect"
          }
        ]
      },
      {
        "name": "Success Factors",
        "categories": [
          {
            "name": "Defect"
          },
          {
            "name": "New Requirement"
          },
          {
            "name": "Question"
          }
        ]
      },
      {
        "name": "System integration",
        "categories": [
          {
            "name": "Defect"
          },
          {
            "name": "New Requirement"
          },
          {
            "name": "Question"
          }
        ]
      },
      {
        "name": "Talent Portal",
        "categories": [
          {
            "name": "Log in issues"
          },
          {
            "name": "Manage Reports"
          },
          {
            "name": "Manage Talent Xchange Communities"
          }
        ]
      }
    ]
  },
  {
    "name": "Manage Employee Administration",
    "categories": [
      {
        "name": "Manage Absence and Health",
        "categories": [
          {
            "name": "Administer Leave of Absence"
          },
          {
            "name": "Administer Occupational Health"
          },
          {
            "name": "Manage Return to Work"
          },
          {
            "name": "Record and Manage Long Term Sickness Absence"
          },
          {
            "name": "Record and Manage Short Term Sickness Absence"
          }
        ]
      },
      {
        "name": "Manage Employee Changes",
        "categories": [
          {
            "name": "Administer Mass Data Changes"
          },
          {
            "name": "Change Employee Personal Data"
          },
          {
            "name": "Change Employee Work Data"
          },
          {
            "name": "Manage Personnel Files"
          },
          {
            "name": "Manage Promotion, Demotion & Lateral Moves"
          }
        ]
      },
      {
        "name": "Manage Exit",
        "categories": [
          {
            "name": "Conduct Exit Interviews & Communications"
          },
          {
            "name": "Manage Involuntary Exit"
          },
          {
            "name": "Manage Redundancy"
          },
          {
            "name": "Manage Voluntary Exit"
          }
        ]
      },
      {
        "name": "Manage Global Mobility",
        "categories": [
          {
            "name": "End or Extend Assignment"
          },
          {
            "name": "Initiate Assignment"
          },
          {
            "name": "Initiate Assignment - What If"
          },
          {
            "name": "Initiate Assignment Non-Aurora"
          },
          {
            "name": "Manage APRO Data Errors"
          },
          {
            "name": "Manage APRO Testing"
          },
          {
            "name": "Manage APRO Updates and Uploads"
          },
          {
            "name": "Manage APRO User Accounts"
          },
          {
            "name": "Manage Cost of Living Review"
          },
          {
            "name": "Manage Home Leave Review"
          },
          {
            "name": "Manage Immigration"
          },
          {
            "name": "Manage Processes on Assignment"
          },
          {
            "name": "Manage Relocation"
          }
        ]
      },
      {
        "name": "Manage Organisation & Positions",
        "categories": [
          {
            "name": "Close / Freeze position"
          },
          {
            "name": "Create / Maintain Organisation Design & Authorities"
          },
          {
            "name": "Create Position"
          },
          {
            "name": "Modify Position"
          }
        ]
      },
      {
        "name": "Manage Payroll",
        "categories": [
          {
            "name": "Collect Payroll Data"
          },
          {
            "name": "Manage Exception / Escalation Payment Process"
          },
          {
            "name": "Manage Payroll Reporting"
          },
          {
            "name": "Manage Third Party Payroll"
          },
          {
            "name": "Payroll and Taxation Set Up and Ongoing Administration - International Assignment Payroll"
          },
          {
            "name": "Payroll and Taxation Set up and Ongoing Administration - Shadow"
          },
          {
            "name": "Payroll Processing"
          }
        ]
      }
    ]
  },
  {
    "name": "Manage Organisational Development",
    "categories": [
      {
        "name": "Manage Employee & Labour Relations",
        "categories": [
          {
            "name": "Manage Appeals"
          },
          {
            "name": "Manage Conduct Cases"
          },
          {
            "name": "Manage Grievances"
          },
          {
            "name": "Manage Unions / Work Councils"
          }
        ]
      },
      {
        "name": "Manage Organisational Strategy",
        "categories": [
          {
            "name": "Develop Engagement Surveys"
          },
          {
            "name": "Manage Diversity"
          }
        ]
      }
    ]
  },
  {
    "name": "Manage People Strategy & Analytics",
    "categories": [
      {
        "name": "Manage Analytics and Insight",
        "categories": [
          {
            "name": "Manage Reporting"
          }
        ]
      },
      {
        "name": "Plan & Manage HR and Manage Strategic HR",
        "categories": [
          {
            "name": "Manage Reporting"
          }
        ]
      }
    ]
  },
  {
    "name": "Manage Reward and Benefits",
    "categories": [
      {
        "name": "Manage Benefits",
        "categories": [
          {
            "name": "Manage Benefit Enrolment and Amendments"
          },
          {
            "name": "Manage Pensions Administration"
          },
          {
            "name": "Process Benefit Costs"
          }
        ]
      },
      {
        "name": "Manage Compensation, Incentives & Recognition",
        "categories": [
          {
            "name": "Analyse and Evaluate Jobs / Roles"
          },
          {
            "name": "Design Reward Plans"
          },
          {
            "name": "External Reward Benchmarking"
          },
          {
            "name": "Manage Bonus Payments"
          },
          {
            "name": "Manage Compensation Review"
          },
          {
            "name": "Manage Off-Cycle Reward Changes"
          },
          {
            "name": "Manage One-off payments & Allowances"
          },
          {
            "name": "Manage Reward Communications"
          },
          {
            "name": "Manage Share Plans"
          }
        ]
      }
    ]
  }
] 
1
The old HeroCards used to get clipped after a certain amount of characters, which varied per channel, and wasn't really documented anywhere - it was only possible to find out the limits by experimentation.stuartd
I do a test based on the code snippet that you provide, the adaptive card display well in web chat. You can check if the activity that web chat received is a valid adaptive card. Besides, if possible, you can share the actual data you store in variable CherwellCategories so that we can use it to reproduce the issue.Fei Han
@FeiHan Yup. I remove 3 out of the 7 service (along with the subsequent category and subcategory belonging to the 3 service removed), and it works also. If i remove only 2, then it cannot render anymore.Arif Sam
@FeiHan Ive added the json value for you to test outArif Sam
Hi @ArifSam, I can reproduce same issue based on your data. Not sure if activity/adaptivecard exceed some limitations, because not find any documentation about this. Besides, you can try the workaround that I shared to use multiple adaptivecards to achieve the requirement.Fei Han

1 Answers

1
votes

I remove 3 out of the 7 service (along with the subsequent category and subcategory belonging to the 3 service removed), and it works also. If i remove only 2, then it cannot render anymore.

I do a test using the same data as the json value that you provided, I can reproduce same issue in web chat. And I checked the size of the activity that contains the generated adaptive card as attachment, it is about 430kb.

As you mentioned, if I remove some items (services) from service list, the card can be rendered and work as expected. It seems that some limitations of activity or adaptive card cause this issue, currently we can not find any documentation explains about similar issue, if possible, you can create an issue to report it.

Besides, your show many of services, categories and sub_categories for user selecting in one adaptive card, as a workaround, you can try to separate them in many adaptive cards, and then you can dynamically display child adaptive card(s) based on user's selections and post back value that you collect in previous adaptive card.