2017-01-26 7 views
0

ブロックをページに追加する方法についていくつかの提案がありましたが、希望通りに動作しない可能性があります。
私がしたいのは、ファイルを読み込み、特定のページタイプを持つ新しいページを作成し、新しいページにいくつかのブロックをコンテンツプロパティに追加するスケジュールされたジョブを持つことです。ブロックフィールドは、読み込まれたファイルのデータで更新されます。EPiServer 9 - 新しいページにブロックをプログラムで追加する

は、私がスケジュールされたジョブに次のコードを持っているが、それは

repo.Save((IContent) newBlock, SaveAction.Publish); 

がエラーに少なくとも一つの目に見える文字が含まれている必要があり

ページ名を与えることに失敗しました。

これは私のコードです:

public override string Execute() 
{ 
    //Call OnStatusChanged to periodically notify progress of job for manually started jobs 
    OnStatusChanged(String.Format("Starting execution of {0}", this.GetType())); 

    //Create Person page      
    PageReference parent = PageReference.StartPage; 

    //IContentRepository contentRepository = EPiServer.ServiceLocation.ServiceLocator.Current.GetInstance<IContentRepository>(); 
    //IContentTypeRepository contentTypeRepository = EPiServer.ServiceLocation.ServiceLocator.Current.GetInstance<IContentTypeRepository>(); 

    //var repository = EPiServer.ServiceLocation.ServiceLocator.Current.GetInstance<IContentRepository>(); 
    //var slaegtPage = repository.GetDefault<SlaegtPage>(ContentReference.StartPage); 

    IContentRepository contentRepository = EPiServer.ServiceLocation.ServiceLocator.Current.GetInstance<IContentRepository>(); 
    IContentTypeRepository contentTypeRepository = EPiServer.ServiceLocation.ServiceLocator.Current.GetInstance<IContentTypeRepository>(); 

    SlaegtPage slaegtPage = contentRepository.GetDefault<SlaegtPage>(parent, contentTypeRepository.Load("SlaegtPage").ID); 

    if (slaegtPage.MainContentArea == null) { 
     slaegtPage.MainContentArea = new ContentArea(); 
    }    

    slaegtPage.PageName = "001 Kim"; 

    //Create block 
    var repo = ServiceLocator.Current.GetInstance<IContentRepository>(); 

    var newBlock = repo.GetDefault<SlaegtPersonBlock1>(ContentReference.GlobalBlockFolder); 

    newBlock.PersonId = "001"; 
    newBlock.PersonName = "Kim"; 
    newBlock.PersonBirthdate = "01 jan 1901";   

    repo.Save((IContent) newBlock, SaveAction.Publish); 

    //Add block 
    slaegtPage.MainContentArea.Items.Add(new ContentAreaItem 
     { 
      ContentLink = ((IContent) newBlock).ContentLink 
     }); 

    slaegtPage.URLSegment = UrlSegment.CreateUrlSegment(slaegtPage); 

    contentRepository.Save(slaegtPage, EPiServer.DataAccess.SaveAction.Publish); 

    _stopSignaled = true; 

    //For long running jobs periodically check if stop is signaled and if so stop execution 
    if (_stopSignaled) { 
     return "Stop of job was called"; 
    } 

    return "Change to message that describes outcome of execution"; 
} 

答えて

2

あなたは素晴らしい

((IContent) newBlock).Name = "MyName"; 
+0

で名前を設定することができます - それを解決しました。ありがとうございました – kilarsen

+0

@kilarsen答えがあなたの問題を解決した場合は、回答としてマークしてください –

関連する問題