Updating Knowledge Articles programmatically by Apex? - SalesforceProfs

PHOTO EMBED

Mon May 15 2023 15:58:04 GMT+0000 (Coordinated Universal Time)

Saved by @hurrand

public with sharing class ArticlesUtils {
 
    @AuraEnabled
    public static List<Knowledge__kav> getAllArticles(){
        return [ SELECT Id, KnowledgeArticleId, Title, UrlName FROM Knowledge__kav ];
    }
 
    @AuraEnabled
    public static String createNewArticleAsADraft(String title, String urlName) {
 
        Knowledge__kav newArticle = new Knowledge__kav();
        newArticle.Title = title;
        newArticle.UrlName = urlName;
        insert newArticle;
 
        return [SELECT KnowledgeArticleId FROM Knowledge__kav WHERE Id =: newArticle.Id].KnowledgeArticleId;
    }
 
    @AuraEnabled
    public static void publishArticle(String recordId) { //It need to be KnowledgeArticleId
        KbManagement.PublishingService.publishArticle(recordId, true);
    }
 
    @AuraEnabled
    public static String unPublishArticle(String recordId){ //It need to be KnowledgeArticleId
        String newArticleId = KbManagement.PublishingService.editOnlineArticle(recordId, true); 
        return [SELECT KnowledgeArticleId FROM Knowledge__kav WHERE Id =: newArticleId].KnowledgeArticleId;
    }
 
    @AuraEnabled
    public static String updateDraftArticleWithoutPublish(String title, String urlName, Id recordId) {
 
        Knowledge__kav newArticle = [ SELECT Id, KnowledgeArticleId, Title, UrlName FROM Knowledge__kav WHERE KnowledgeArticleId =: recordId ];   
 
        newArticle.Title = title;
        newArticle.UrlName = urlName;
 
        update newArticle;
 
        return newArticle.KnowledgeArticleId;
   }
 
    @AuraEnabled
    public static String updatetArticle(String title, String urlName, Id recordId) {
 
        String newVersionId = unPublishArticle(recordId);
 
        Knowledge__kav newArticle = [ SELECT Id, KnowledgeArticleId, Title, UrlName FROM Knowledge__kav WHERE KnowledgeArticleId =: newVersionId ];   
 
        newArticle.Title = title;
        newArticle.UrlName = urlName;
 
        update newArticle;
 
        publishArticle(newVersionId);
 
        return newVersionId;
   }
 
}
content_copyCOPY

Utils for Knowledge Articles

https://salesforceprofs.com/updating-knowledge-articles-programmatically-by-apex/