I have the API Name of a custom field on a knowledge article stored a string
kav.articleType = 'Frequently_Asked_Question__kav';
where kav is a KnowledgeArticleVersion
object.
How can I get the label name from kav.articleType?
I was thinking I could do something like
Schema.SObjectType.KnowledgeArticleVersion.fields.(kav.ArticleType).getLabel();
But this is not working. Any ideas?
Here is some more context:
What I am trying to do is update some fields on a custom Article Feedback object whenever a record of this object is created. A user only needs to manually enter the Article Number and the remaining fields like Article Type, Article Title, etc. should be automatically added using this trigger.
I got most of the fields to work except the Article Type is showing as its api name and not the label. I tried it a couple different ways. I commented these failed attempts in the code below
trigger CreateExternalFeedback on aft__Article_Feedback__c (before insert) {
for (aft__Article_Feedback__c f : trigger.new) {
if (f.aft__Feedback_Source__c == 'External') {
//Retrieve KnowledgeArticleVersion
String q = 'select KnowledgeArticleId, articleNumber, title, ArticleType, VersionNumber, Language, LastPublishedDate, CreatedDate from KnowledgeArticleVersion where PublishStatus = \'online\' and Language = \'en_US\'';
q += 'and articleNumber = \''+ f.aft__Article_Number__c +'\' limit 1';
KnowledgeArticleVersion kav = (KnowledgeArticleVersion) Database.query(q);
f.OwnerId = '00Gc0000001ENiJ';
f.aft__Article_Title__c = kav.Title;
f.aft__Article_Created_Date__c = kav.CreatedDate;
//f.aft__Article_Type__c = kav.ArticleType;
//f.aft__Article_Type__c = Schema.kav.KnowledgeArticleVersion.fields.ArticleType.getLabel();
f.aft__Article_Version__c = kav.VersionNumber;
f.aft__Feedback_Status__c = 'New';
f.Knowledge_Article_Link__c = 'https://cs14.salesforce.com/knowledge/publishing/articleOnlineDetail.apexp?id='+kav.KnowledgeArticleId;
f.aft__Language__c = kav.Language;
f.aft__Last_Published_Date__c = kav.LastPublishedDate;
}
}
}
Best Answer
If you want to take the API Name of a field and get its label, use the
getLabel
method on DescribeFieldResult.If you want to take the API Name of an
SObject
and get its label, use thegetLabel
method on DescribeSObjectResult.If you are trying to get an
SObjectType
from aString
, you would use:Or in your case,
get(kav.ArticleType)
.