У меня возникли трудности с созданием карты, использующей AdaptiveShowCardAction
. Когда я пытаюсь создать простую карточку, она показывает себя.
Код:
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;
}
}
Для списка CherwellCategories
- он содержит 3 уровня, Сервис (8 данных) - Категория (20+) и Подкатегория (118 данных). Я подозреваю, что это потому, что карта слишком велика для ее обработки.
Карточка не отображается, когда я нажимаю на кнопку. Это не дает никакого ответа. Есть ли предел или что-то в этом роде? Поскольку я могу создать простую карточку и показать ее, продолжайте диалог.
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"
}
]
}
]
}
]
Я провожу тест на основе предоставленного вами фрагмента кода адаптивная карта хорошо отображается в веб-чате. Вы можете проверить, является ли активность, полученная в веб-чате, действительной адаптивной картой. Кроме того, если возможно, вы можете поделиться фактическими данными, хранящимися в переменной CherwellCategories
, чтобы мы могли использовать их для воспроизведения проблемы.
@FeiHan Ага. Я удаляю 3 из 7 сервисов (вместе с последующей категорией и подкатегорией, принадлежащими 3 удаленным сервисам), и это тоже работает. Если я удалю только 2, он больше не сможет отображаться.
@FeiHan Ive добавил значение json, чтобы вы могли его протестировать
Привет, @ArifSam, я могу воспроизвести ту же проблему на основе ваших данных. Не уверен, что активность / адаптивная карта превышают некоторые ограничения, потому что не нашли никакой документации по этому поводу. Кроме того, вы можете попробовать обходной путь, которым я поделился, чтобы использовать несколько адаптивных карт для достижения этого требования.
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.
Я провожу тест, используя те же данные, что и указанное вами значение json, я могу воспроизвести ту же проблему в веб-чате. И я проверил размер активности, которая содержит сгенерированную адаптивную карту в качестве вложения, это примерно 430кб.
Как вы упомянули, если я удалю некоторые элементы (услуги) из списка услуг, карта может отображаться и работать должным образом. Похоже, что некоторые ограничения активности или адаптивная карта вызывают эту проблему, в настоящее время мы не можем найти никакой документации, объясняющей подобную проблему, если возможно, вы можете создать проблему сообщить об этом.
Кроме того, вы показываете множество услуг, категорий и подкатегорий для выбора пользователем в одной адаптивной карточке, в качестве обходного пути вы можете попытаться разделить их на множество адаптивных карточек, а затем вы можете динамически отображать дочерние адаптивные карточки на основе выбора пользователя. и отправьте обратно значение, которое вы собрали в предыдущей адаптивной карточке.
Старые карты HeroCards использовали для обрезки определенного количества символов, которое варьировалось для каждого канала, и на самом деле нигде не было задокументировано - пределы можно было выяснить только экспериментально.