Salesforce ナレッジ 公開状態更新


現在の Salesforce ではデータローダでの記事登録について以下の制約があります。 
・記事の公開やアーカイブをデータローダで行うことはできません。 
参考:
https://help.salesforce.com/articleView?id=000337861&type=1&mode=1

APEXで更新できそうです。
https://www.terrasky.co.jp/blog/2016/160210_001570.php


①KnowledgeArticleVersion検索
select Id,IsLatestVersion,PublishStatus,SourceId,KnowledgeArticleId,ArchivedById,ArchivedDate From KnowledgeArticleVersion 
where Id ='ka0XXXXXXXXXX'

②KnowledgeArticleId取得
KnowledgeArticleId=kA0YYYYYYYYYYYYY

③コンソールで実行
KbManagement.PublishingService.editOnlineArticle('kA0YYYYYYYYYYYYY',true);
OR
KbManagement.PublishingService.archiveOnlineArticle('kA0YYYYYYYYYYYYY',null);
■①コンソールで公開済み→ドラフト変更
// エラー発生した場合、スキップする
List<Id> errorIdList = new List<Id>{'ka09XXXXXXXXXX','ka02XXXXXXXXXX'};
List<Knowledge__kav> konwledgeList = [
Select Id,Title,IsLatestVersion,PublishStatus,IsVisibleInCsp,IsVisibleInPrm,ArticleNumber,KnowledgeArticleId,LastModifiedDate 
From Knowledge__kav
Where PublishStatus = 'Online'
Limit 150
];
for(Knowledge__kav konwledge :konwledgeList){
    //公開済み→ドラフト Online limit 150
    if(!errorIdList.contains(konwledge.Id)){
       KbManagement.PublishingService.editOnlineArticle(konwledge.KnowledgeArticleId,true);  
    }
}

■②Dataloaderで公開範囲を更新
Select Id,IsLatestVersion,PublishStatus,IsVisibleInCsp,IsVisibleInPrm,ArticleNumber,KnowledgeArticleId,LastModifiedDate 
From Knowledge__kav
Where PublishStatus = 'Draft'
AND LastModifiedDate>2021-03-31T00:00:00Z

■③コンソールでドラフト→公開済み更新
List<Knowledge__kav> konwledgeList = [
Select Id,Title,IsLatestVersion,PublishStatus,IsVisibleInCsp,IsVisibleInPrm,ArticleNumber,KnowledgeArticleId,LastModifiedDate 
From Knowledge__kav
Where PublishStatus = 'Draft' And LastModifiedDate>2021-03-31T00:00:00Z
Limit 100
];
for(Knowledge__kav konwledge :konwledgeList){
    // ドラフト→公開済み Draft limit 100    
    KbManagement.PublishingService.publishArticle(konwledge.KnowledgeArticleId, false); 
}
// バッチで一括更新
public with sharing class KnowledgeUpdateBatch implements Database.Batchable<sObject>, Database.Stateful{
    Public String publishStatusOnline = 'Online';
    public List<String> knowledgeArticleIdList = new List<String>();
    public Integer index =1;
     /**
     * start
     *
     * @description バッチの開始処理
     * @param bc バッチ処理のコンテキスト
     * @return Database.QueryLocator 処理対象
     */
    public Database.QueryLocator start( Database.BatchableContext bc ) {
        String getScorpQuery = 'Select Id,Title,IsLatestVersion,PublishStatus,IsVisibleInCsp,IsVisibleInPrm,ArticleNumber,KnowledgeArticleId,LastModifiedDate';
        getScorpQuery += ' From Knowledge__kav';
        getScorpQuery += ' Where PublishStatus = :publishStatusOnline';
        getScorpQuery += ' AND ArticleTotalViewCount !=null';  //→エラー発生ため、対象外
        return Database.getQuerylocator(getScorpQuery);
    }

    /**
     * execute
     *
     * @description バッチの処理
     * @param bc バッチ処理のコンテキスト
     * @param scope startの戻り値
     */
    public void execute(Database.BatchableContext bc, List<Knowledge__kav> scope ) {
        knowledgeArticleIdList.clear();
        system.debug('=========scope.size()========-'+scope.size());
        // 既にドラフトされた場合、処理対象外

        // 公開済み → ドラフト
        for (Knowledge__kav konwledge :scope) {
            system.debug('====公開済み → ドラフト==Index=='+index+'===ID='+konwledge.Id+'=====KnowledgeArticleId===='+konwledge.KnowledgeArticleId);
            knowledgeArticleIdList.add(konwledge.KnowledgeArticleId);
            KbManagement.PublishingService.editOnlineArticle(konwledge.KnowledgeArticleId,false);
            index++;
        }
        
        // 表示フラグ更新
        List<Knowledge__kav> newList = [Select Id,IsLatestVersion,PublishStatus,IsVisibleInCsp,IsVisibleInPrm,ArticleNumber,KnowledgeArticleId,LastModifiedDate 
                                            From Knowledge__kav
                                            Where PublishStatus = 'Draft'
                                            AND KnowledgeArticleId In :knowledgeArticleIdList];
        for (Knowledge__kav konwledge :newList) {
            konwledge.IsVisibleInCsp = true;
            konwledge.IsVisibleInPrm = true;  
        }
        update newList;
        system.debug('=========newList.size()========-'+newList.size());
        // ドラフト→ 公開済み
        index=1;
        for (Knowledge__kav konwledge :newList) {
            system.debug('===ドラフト→ 公開済み=====Index=='+index+'===ID='+konwledge.Id+'=====KnowledgeArticleId===='+konwledge.KnowledgeArticleId);
            knowledgeArticleIdList.add(konwledge.KnowledgeArticleId);
            KbManagement.PublishingService.publishArticle(konwledge.KnowledgeArticleId,false);
            index++;
        }

    }

    public void finish( Database.BatchableContext bc ) {
    }
}

参考:PublishingService クラス

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值