Marek Kembrowski

Marek Kembrowski Konsultant GD,
Microsoft Polska Sp.
z o.o.

Temat: 'Zaśmiecony' ribbon listy

Nie bardzo wiedziałem, jak nazwać temat ;-), ale do rzeczy. Mam następującą sytuację:

Z poziomu kodu tworzę sobie pewną liczbę list, i do każdej z nich dodaję kilka unikatowych CustomaActions do ribbona. Następnie na jakiejś stronie dodaję (ręcznie lub z poziomu kodu) kilka widoków list. Problem jest tego typu, że wszystkie akcje są widoczne dla każdego webparta wyświetlającego listę w obrębie danej strony aspx. Przyciski są po prostu wyszarzone.

Zastamawiam się, co robię nie tak, lub czy wogóle jest to możliwe (być może wszystkie xsltlistviewwebparty współdzielą jeden ribbon?), aby przyciski były niewidoczne.

W razie czego załączam przykładową solucję, która obrazuje problem
Mateusz Orłowski

Mateusz Orłowski The greatest
inspiration is the
deadline

Temat: 'Zaśmiecony' ribbon listy

coś pusto w tym solution albo czegoś nie widzę.

Nie wiem czy dobrze zrozumiałem, ale chodzi o to, żeby dla listy A był custom action 1, a dla listy B custom action 2, a przy wyświetleniu listy A są custom actions 1 i 2 i tak samo dla listy B?

To trzeba by stworzyć jakiś custom content type z unikatowym ID i potem w elements podać ten id.Mateusz Orłowski edytował(a) ten post dnia 18.05.12 o godzinie 11:00
Marek Kembrowski

Marek Kembrowski Konsultant GD,
Microsoft Polska Sp.
z o.o.

Temat: 'Zaśmiecony' ribbon listy

Całość solucji znajduje się w sumie w featureeventreceiverze po stronie kodu. Tam też tworzę sobie 2 listy typu generycznego (ale problem występuje również dla custom list template, po prostu nie chciałem zaśmiecać solucji dodatkowymi rzeczami) i dodaję do nich po dwie (każda o innym Id) akcje do ribbona. W kodzie również tworzę osobną stronę asp x i umieszczam na niej xsltlistviewwebparts, czyli w sumie jakby sobie gdzieś odpalić tą solucję to można od razu zobaczyć rezultat (wystarczy otworzyc link http://<siteurl>/ListRibbonActionPages/SamplePag... )

Dokładnie tak się dzieje, jak to opisałeś.
Mateusz Orłowski

Mateusz Orłowski The greatest
inspiration is the
deadline

Temat: 'Zaśmiecony' ribbon listy

Moim zdaniem to wynika z tego, że dodajesz każdy z guzików dwukrotnie przy tworzeniu listy, tzn. tworzysz listę ListRibbonActionListOne i dodajesz do niej dwa guziki, potem tworzysz listę ListRibbonActionListTwo i znowu dodajesz do niej guziki, stąd 4 guziki. Dlatego po zaznaczeniu listy one aktywny jest guzik z ID listy one i analogicznie do listy two.

Chyba jednak lepiej by było stworzyć list template (źle powiedziałem, content type) z jakimś ID i zdefiniować guziki dla tego template.Mateusz Orłowski edytował(a) ten post dnia 18.05.12 o godzinie 11:00
Marek Kembrowski

Marek Kembrowski Konsultant GD,
Microsoft Polska Sp.
z o.o.

Temat: 'Zaśmiecony' ribbon listy

Równie dobrze mogę dodawać po jednym przycisku do obu list. Być może dziś wieczorem podrzucę przykład z custom list template, ale i tak nie jestem do końca pewny, czy rozumiem o co Ci chodzi -
proponujesz 1 list template dla 2 list? Czy raczej 2 osobne list template'y, po jednym dla każdej z list i rozwiązaniem wtedy byłoby dopinanie akcji z poziomu template'u? Inna sprawa, że nie chcę przypisywać akcji do template'u, tylko do pojedynczej instancji. Z tego co szukałem, to są tylko dwie metody na osiągnięcie tego (nie można w xmlowej definicji akcji przypisać jej do pojedynczej listy, a przynajmniej google tak sądzi). Dwa blogowe przykłady na ten temat znalazłem

http://www.nearinfinity.com/blogs/joe_ferner/how_to_ad...

i

http://pholpar.wordpress.com/2011/05/13/displaying-the...

Inna ciekawostka jest taka, że problem zależy tylko od liczby xsltlistviewwebpart na stronie - jeśli wejdzie się w jakiś domyślny widok listy - wyświetlane są przyciski w ribbonie tylko przeznaczone dla danej listy. Dlatego też zaczynam się co raz bardziej skłaniać ku temu, że to generowanie ribbona ma jakiegoś buga. Być może poeksperymentuję jeszcze z akcjami przypisanymi np. do content typów.
Mateusz Orłowski

Mateusz Orłowski The greatest
inspiration is the
deadline

Temat: 'Zaśmiecony' ribbon listy

Tfu, miało być jeden content type. Sugeruję jeden content type dla obu list.
Twoja lista ma generic type = Element. Dodajesz guzik Check-in do grupy Actions dla listy 1. Dodajesz guzik Check-out do grupy Actions dla listy 1. Potem dodajesz guzik Check-in do grupy Actions dla listy 2, a potem guzik Check-out dla listy 2. Dlatego masz 5 guzików w grupie Actions.

Piszesz, że chcesz przypisać guzik do jednej instancji i dokładnie to robisz. A masz 4 guziki zamiast 2, bo masz dwie instancje list. Jak wywalisz jedną instancję ze strony SamplePage.aspx, to będzie po jednym guziku. Ribbon generuje te guziki dla każdej listy z osobna, a widać je dwa razy bo lista ma ten sam type.

W xmlowej definicji możesz przypisać do content type'u, dlatego właśnie to sugeruję, wtedy guziki będą się pojawiać dla tego content type'u przy wielu instancjach listy na jednej stronie.
Marek Kembrowski

Marek Kembrowski Konsultant GD,
Microsoft Polska Sp.
z o.o.

Temat: 'Zaśmiecony' ribbon listy

Poeksperymentuję jeszcze poźniej i podzielę się rezultatem. Chociaż muszę przyznać, że takie zachowanie CustomActions jest dla mnie cholernie nieintuicyjne.
Mateusz Orłowski

Mateusz Orłowski The greatest
inspiration is the
deadline

Temat: 'Zaśmiecony' ribbon listy

Nie wiem czy temat jest jeszcze aktualny, ale miałem dziś podobną sytuację i w solution zdefiniowałem guziki dla poszczególnych list w różnych plikach Elements.xml

Kluczowe jest ustawienie parametru RegistrationId={$ListId:Lists/Nazwa listy;} Wtedy zdefiniowane guziki pojawiają się tylko na tej właśnie liście.

Co ciekawe, to rozwiązanie nie działa jako farm solution, więc musi być sandboxed.

W tym rozwiązaniu nie mogę wykorzystać {ListId} i {ItemId}, więc żeby dostać się do ListId i ID elementu wykorzystałem kod javascript, który czyta te parametry z query string.
Marek Kembrowski

Marek Kembrowski Konsultant GD,
Microsoft Polska Sp.
z o.o.

Temat: 'Zaśmiecony' ribbon listy

Dzięki za podzielenie się, ciekawa obserwacja. Nigdy nie miałem okazj przetestować tego dla sandbox solution. Ale z drugiej strony, w sandbox solutions nie da się dodawać akcji z poziomu kodu, więc może faktycznie mogą się inaczej zachowywać w tych dwóch przypadkach.

Następna dyskusja:

VS Pobranie konkretnej wart...




Wyślij zaproszenie do