2012-08-13 14 views
8

Napisałem klasę Data Extender i rozszerzenie edytora, które poprawnie wyświetla kilka dodatkowych kolumn dla pozycji podczas przeglądania list w CME (foldery i grupy struktur). Musiałem zarejestrować moją klasę, aby obsługiwać polecenia takie jak GetList, GetListSearch, GetListUserFavorites i GetListCheckedOutItems.Co oznacza Managed = "0" w widoku listy?

Zauważyłem, że kod jest uruchamiany nawet wtedy, gdy lista słów, schematów jest ładowana dla rozwijanej listy w CME (np. Podczas tworzenia nowego komponentu i otrzymujesz listę schematów w upuścić). więc mimo że moje dodatkowe kolumny danych nie są potrzebne w tej sytuacji, kod jest nadal wykonywany i spowalnia działanie.

Wygląda na to, że w takich sytuacjach wywoływana jest komenda GetList. Nie mogę po prostu pominąć przetwarzania na podstawie polecenia. Zacząłem więc przeglądać XML, który klasa otrzymuje dla listy, i zauważyłem, że kiedy uruchamiany jest kod dla rozwijanych list, w pliku XML jest Managed="0". Na przykład:

  • Do listy Struktura Grupy: <tcm:ListItems Managed="64" ID="tcm:103-546-4">
  • Listę folderu: <tcm:ListItems Managed="16" ID="tcm:103-411-2">
  • Ale na liście Schemat: <tcm:ListItems ID="tcm:0-103-1" Managed="0">
  • Na rozwijanej pokazujący wartości słów kluczowych dla danej kategorii: <tcm:ListItems Managed="0" ID="tcm:103-506-512">

Czy mogę po prostu użyć tego Zarządzanego = "0" jako flagi, aby wskazać, że przetwarzana lista nie wyświetli moich dodatkowych kolumn a Czy mogę po prostu zakończyć przetwarzanie?

+0

dzięki za sprzątanie Frank! –

Odpowiedz

8

Managed wartość jest przedstawienie, jakie przedmioty mogą być tworzone wewnątrz OrganizationItem:

  • 64 oznacza, że ​​można tworzyć strony
  • 16 oznacza, że ​​można tworzyć komponenty
  • 10, w którym, na przykład oznacza, że ​​można tworzyć foldery (2) + schematy (8)
  • 518 - teczki (2) + grupy konstrukcji (4) + kategorii (512)

Dla elementów nieorganizacyjnych wartość wynosi 0.

Wartość zależy od samego elementu (nie można tworzyć strony w katalogu, na przykład), jak również od ustawień zabezpieczeń masz na publikację i pozycji organizacyjnej

+0

Dzięki za wyjaśnienie Andrey. Ale czy przypadkiem kategoria w Warner nie może powiedzieć, że potrafi tworzyć słowa kluczowe (zakładając, że ma wystarczające prawa)? –

+1

Myślę, że stanie się tak tylko wtedy, gdy widok nazywający go samą kategorią, wydaje mi się, że jest to kod XML zwracany po uzyskaniu listy słów kluczowych do utworzenia komponentu. W takim przypadku nie byłbyś w stanie tworzyć słów kluczowych w tym miejscu. –

+0

@FrankvanPuffelen Tak, powinien, najwyraźniej nie ma żadnych praw. –

2

Z wcześniejszych doświadczeń i tego, co User978511 mówi, atrybut Managed wskazuje rodzaje przedmiotów, które można utworzyć z kontekstu tej listy.

Niestety oznacza to, że atrybut Managed może być równy 0 dla każdego użytkownika, który nie ma wystarczających uprawnień do tworzenia elementów. Na przykład. sprawdź, co to jest Managed w grupie struktury dla użytkownika, który nie może tworzyć stron ani grup strukturalnych. W tym przypadku może być również 0, co oznacza, że ​​jest bezużyteczny w twojej sytuacji.

Aktualizacja

może być w stanie osiągnąć swój cel lepiej patrząc na parametr columns:

context.Parameters["columns"] 

W kilku badaniach Zabrakło mi uzyskać różne wartości, zależnie czy otrzymam listę dla głównego widoku listy, drzewa lub listy rozwijanej.

543 
23 
    7 

Wartości te są maską nieco z tych stałych (od Constants.js):

/** 
* Defines the column filter. 
* Used to specify which attributes should be included in XML list data. 
* @enum 
*/ 
Tridion.Constants.ColumnFilter = 
{ 
    ID: 1, 
    ID_AND_TITLE: 3, 
    DEFAULT: 7, 
    EXTENDED: 15, 
    ALLOWED_ACTIONS: 16, 
    VERSIONS: 32, 
    INTERNALS: 64, 
    URL: 128, 
    XML_NAME: 256, 
    CHECK_OUT_USER: 512, 
    PUBTITLE_AND_ITEM_PATH: 1024 
}; 

Więc z mojego ograniczonego badania wydaje się, że upadki drop zażądać DEFAULT kolumny, natomiast głównym widoku listy i drzewa obaj mają tam ALLOWED_ACTIONS. To ma dla mnie sens, ponieważ użytkownik może wchodzić w interakcje z elementami listy w widoku drzewa i listy, podczas gdy mogą one tylko wybierać je w rozwijanych menu.Sprawdzenie obecności parametru ALLOWED_ACTIONS w parametrze columns może być jednym ze sposobów zmniejszenia liczby miejsc, w których rozszerzenie danych dodaje informacje.

+0

Spróbuję z tym eksperymentować i zobaczę, czy wyłączę uprawnienia użytkownika, jeśli to zmieni tę wartość. Różne pytanie. czy jest coś innego, czego mogę użyć w Data Extenderze (być może PipelineContext) do wykrycia, jakie "dobre" polecenie GetList jest wykonywane? Byłoby przydatny, gdyby były inne polecenia dla tych przypadków, abyśmy mogli rozróżnić, jaki rodzaj listy był przetwarzany. –

+0

Istnieje ścisła równowaga między zezwoleniem twojemu kodowi na wykrycie dokładnego miejsca, z którego jest wywoływana, a optymalizacją buforowania, ponieważ wiele takich miejsc pobiera dokładnie takie same dane. Nie jestem nawet pewien, czy lista wywołań GetList powinna różnić się od listy widoku listy. Lub co najmniej: po wyświetleniu słów kluczowych na liście nie ma potrzeby wywoływania serwera, aby uzyskać dane z rozwijanego menu; to tylko podzbiór tego, co już zostało pobrane. –

+1

Możesz chcieć spojrzeć na filtry, które są przekazywane do twojego DataExtender w 'pipelineContext.Parameters [" filter "]'. "ItemTypes" w filtrze zdaje się również wskazywać na kontekst żądania. –

3

Myślę, że masz bardziej niezawodne rozwiązanie, jeśli odczytasz identyfikator listy i wykonasz kod tylko dla list typu 2 i 4 (odpowiednio foldery i grupy struktur). ale to nie pomoże z widokiem wyszukiwania itp

+2

Wygląda na to, że jest to jedno z bardziej powszechnych podejść, jakie widziałem: znajdź sposoby na identyfikację list, których nie chcesz przetwarzać, i "jeśli" te. Nawet jeśli nie uda Ci się ich wszystkich za jednym razem, będziesz powoli robić rzeczy szybciej z możliwą do opanowania ilością ryzyka na czas iteracji. Pomiędzy tą a agresywną strategią buforowania informacji, które dodajesz, możesz zazwyczaj uzyskać rozsądne wyniki. Oczywiście nic nie przebije wydajności *** nie *** dodając niestandardowych kolumn do listy. Dlatego zawsze powinieneś rozważyć tę opcję najpierw ... i na końcu. –

+1

@FrankvanPuffelen: całkowicie się zgadzam. jednak bitwa walczyła i przegrywała (na razie). te liczne dodatkowe kolumny są uważane za niezbędne do celów biznesowych. –

7

Niestety CME nie może zaoferować teraz, że rodzaj poziomu szczegółowości umożliwiający powiadamianie w ekstenderze danych, z którego pochodzi określone wywołanie interfejsu API WCF. Nasze API WCF nie ma jeszcze kontekstu. Może się zmienić w przyszłości.

Trusting Managed = "0" nie jest świetnym pomysłem. Powodem tego są listy modeli, które są buforowane przez klienta na filtr. W bieżącym projekcie filtr ma dane związane z CM i nic nie dotyczy kontekstu, z którego uruchamiane jest żądanie. Zazwyczaj interfejs użytkownika klienta ponownie wykorzystuje buforowane dane modelu, gdy tylko jest to możliwe. Na przykład ta sama lista modeli może być użyta na desce rozdzielczej CME i kontrolka rozwijana umieszczona w widoku elementów, ale z różnymi definicjami listy xml: pierwsza będzie miała więcej kolumn zdefiniowanych w definicji listy niż ta ostatnia. Zasadniczo są to różne widoki tych samych danych.

Dlatego warto pomyśleć o różnych rozwiązaniach problemu. Teraz ... skąd pochodzą dane za tymi dodatkowymi kolumnami? Czy jest to Tridion CM lub dostawca zewnętrzny? Czasami buforowanie serwera WWW może zapewnić akceptowalny sposób na poprawę czasów odpowiedzi. Ale jest to rodzaj projektu, który należy ocenić i zdecydować.

+0

Dzięki! Przesłałem prośbę o ulepszenie, aby umożliwić powiadomienie o pochodzeniu polecenia GetList. dla naszej konkretnej implementacji, wszystkie dane pochodzą z Tridion CM, więc buforowanie nie jest właściwe. dodane kolumny to: Zmodyfikowane przez, Wersja, Stan zatwierdzenia, Zablokowane przez, Data opublikowania. To, co chciałbym kiedyś zrobić, to dać twórcom treści możliwość ustawienia preferencji włączania i wyłączania dodatkowych kolumn w razie potrzeby. wyłączenie ich oczywiście przyspieszyłoby ich nawigację w CME, włączenie go pozwoli im zobaczyć te inne informacje, których potrzebują. –