2012-10-25 12 views
5

Siamo di fronte a uno strano problema quando si utilizza il metodo GetItems e si passa a ciascun elemento all'interno della raccolta restituita a un altro metodo.Accesso alle proprietà degli oggetti TOM.NET durante il loro passaggio tra i metodi dopo la chiamata GetItems (filtro)

Siamo su Tridion 2011 GA.

Il seguente codice è rottura:

private void foo(StructureGroup structureGroup, Session session, int counterTemp, int levels) 
{ 
    OrganizationalItemItemsFilter filtersg= new OrganizationalItemItemsFilter(session); 
    filtersg.Recursive = false; 
    IEnumerable<ItemType> itemtype = new List<ItemType> { ItemType.StructureGroup}; 
    filtersg.ItemTypes = itemtype; 

    foreach (StructureGroup sg in structureGroup.GetItems(filtersg)) 
    { 
     GetSiteMap(sg, counterTemp, levels); 
    } 
} 

private void GetSiteMap(StructureGroup sg, int counter, int levels) 
{ 
    logger.Info(sg.Id); //ok 
    logger.Info(sg.Title); //ok 
    logger.Info(sg.Directory); // null !? 
} 

Tuttavia, se lo sg.Directory è l'accesso prima di passare sg nel metodo successivo, tutto funziona benissimo:

private void foo(StructureGroup structureGroup, Session session, int counterTemp, int levels) 
    OrganizationalItemItemsFilter filtersg= new OrganizationalItemItemsFilter(session); 
    filtersg.Recursive = false; 
    IEnumerable<ItemType> itemtype = new List<ItemType> { ItemType.StructureGroup}; 
    filtersg.ItemTypes = itemtype; 

    foreach (StructureGroup sg in structureGroup.GetItems(filtersg)) 
    { 
     logger.Info(sg.Directory); //if printed here, all works fine down the line. 
     GetSiteMap(sg, counterTemp, levels); 
    } 
} 

private void GetSiteMap(StructureGroup sg, int counter, int levels) 
{ 
    logger.Info(sg.Id); //ok 
    logger.Info(sg.Title); //ok 
    logger.Info(sg.Directory); // ok } 
} 

Si ritiene che c'è qualcosa in corso con il metodo GetItems() in cui non restituisce l'oggetto completo e, una volta passato l'oggetto parzialmente caricato al metodo successivo, non è in grado di caricare le proprietà come se il riferimento originale fosse perso.

Qualcuno può per favore fare luce su quello che sta succedendo qui? Inoltre, è sbagliato passare oggetti TOM.NET tra i metodi?

Grazie

risposta

2

che sembra davvero strano - in realtà non riesco a riprodurre il 2011 GA - ho incollato le funzioni in un TBB .NET ed eseguiti dal costruttore template - entrambi i metodi di output directory più che bene. Questo lavoro probabilmente non come pura congettura, ma un paio di cose da provare:

  1. filter.BaseColumns = ListBaseColumns.Extended - credo che questo è solo per GetListItems, ma non si sa mai ...
  2. provare emettere il sg.LoadState per vedere se la sua in qualche modo non a pieno carico

Se tutto il resto fallisce, utilizzare GetListItems, e quindi creare un oggetto StructureGroup per ogni elemento che si desidera elaborare (presumendo che si saltare alcune SG dalla mappa del sito sulla base di sg.Title) . È un peccato che non ci sia un attributo url per i dati restituiti da GetListItems, altrimenti si potrebbe fare tutto in una volta con Publication.GetListItems(), con un filtro ricorsivo solo per SG (o SG e Pagine).

2

Se il suggerimento di Will non funziona, si può sempre provare ad avere una variabile di classe SG come un buffer, che verrebbe impostata per ogni elemento nel ciclo, quindi si chiama semplicemente il metodo GetSiteMap senza passare lo sg. Non è la soluzione più pulita, ma vale la pena provare se non funziona niente.

Problemi correlati