2016-03-24 11 views
0

「System.NullReferenceException」種類の最初のチャンス例外はCMS.GlobalHelper.dllエラーで発生しました。コードは、いずれかのページでNodeAliasPathを更新する必要があります。Kenticoは7コンソールアプリケーション

私は問題が何であるかを知っていると思う
// Create an instance of the Tree provider first 
TreeProvider tree = new TreeProvider(CMSContext.CurrentUser); 

//Gets all the nodes that have the node alias path of Dinning-Commons 
var nodes = tree.SelectNodes("SietName", "%contains part of nodealispath%", "en-us", false);   

if (nodes != null) 
{ 
    // Loop through all documents 
    foreach (TreeNode node in nodes) 
    { 

     Console.WriteLine("NodeAliasPath before change " + node.NodeAliasPath); 
     file.WriteLine("    "); 
     file.WriteLine("NodeAliasPath before change " + node.NodeAliasPath); 
     Console.WriteLine("    "); 
     file.WriteLine("    ");   

     String newNodeAliasPath = node.NodeAliasPath.Replace("old node alias path", "new node alias path);  

     //Set the value this way 
     bool returnNodeValue = node.SetValue("NodeAliasPath", newNodeAliasPath); 
Console.WriteLine(" returnNodeValue " + returnNodeValue);   

     //Or set value thos way 
     Console.WriteLine(" return value from Set Value -- NodeAlias Path " + node.SetValue("NodeAliasPath", newNodeAliasPath)); 
     Console.WriteLine(" __________________________  "); 
     file.WriteLine(" return value from Set Value -- NodeAlias Path " + node.SetValue("NodeAliasPath", newNodeAliasPath)); 
     file.WriteLine(" __________________________ ");   

     // Save to database----NULL REFERNCE IN CMSHELPER.DLL Here. Code hangs 
     node.Update(); 
+0

Kenticoクラスを使用する前にAPIを初期化しましたか? http://stackoverflow.com/questions/34955846/using-kentico-7-api-via-console-app – rocky

+0

はい> // Kentico APIを使用するためにコンソールアプリケーションを初期化します CMS.CMSHelper.CMSContext.Init(); – KenticoLover

+0

初期化は何よりも先に行われます。プログラム全体がnode.updateポイントまで動作します – KenticoLover

答えて

0

からCMSContext.CurrentUserは、コンソールアプリケーションのコンテキスト内でnullである...このような特定のユーザーとのTreeProviderを初期化します。

UserInfo user = UserInfoProvider.GetUserInfo("administrator"); 
TreeProvider tree = new TreeProvider(user); 

もう一つの理由は、かもしれませんNodeAliasPathを変更しようとしています。文書を移動することは簡単な操作ではありません。 TreeProvider.MoveNode()またはDocumentHelper.MoveDocument()を使用して、DBの一貫性を保つことをお勧めします。

+0

実際、TreeProviderツリー=新しいTreeProvider(CMSContext.CurrentUser)では問題はありません。 (ありがとう) – KenticoLover

+0

それは特定の行にスローする必要はありません;)それは後で、ユーザーオブジェクトが実際にアクセスされたときに例外をスローします... – rocky

関連する問題