2012-10-09 13 views
6

Napisałem rozszerzenie GUI dla SDL Tridion 2011 SP1. Interfejs GUI składa się z dodatkowego przycisku wstążki i programu obsługi zdarzeń, który jest wyzwalany po zapisaniu komponentu.Jak uzyskać nazwę użytkownika i opis z jego identyfikatora w strukturze SDL Tridion Anguilla

Moja obsługi zdarzeń jest rejestrowany w następujący sposób:

PowerTools.Commands.ItemCommenting.prototype._execute = function (selection) { 
    var item = $display.getItem(); 
    $evt.addEventHandler(item, "save", this.getDelegate(this._onItemSaved)); 
    $cme.getCommand("SaveClose")._execute(selection); 
}; 

i obsługi zdarzeń wygląda następująco:

PowerTools.Commands.ItemCommenting.prototype._onItemSaved = function (eventitem) { 

    var comment = prompt("Please enter a comment", ""); 

    $messages.registerNotification("Saving user comments..."); 

    var commentitemid = eventitem.source.getId(); 
    var commenterid = eventitem.source.getCreatorId(); 
    var commenter = $tcm.getItem(commenterid); 
    var commentername = commenter.getDescription(); 
    var commentdate = eventitem.source.getLastModifiedDate(); 
    var commentversion = eventitem.source.getVersion(); 

    //Call the service to update 
    PowerTools.Model.Services.AppDataServices.Append("ext:ItemCommenting", commentitemid, "<comment><user>" + commenterid + "</user><message>" + comment + "</message><datetime>" + commentdate + "</datetime><version>" + commentversion + "</version></comment>", null, null, null, false); 

}; 

to działa dobrze, oprócz tego, że zmienna commentername zawsze jest niezdefiniowany. Czy istnieje lepsze podejście do uzyskania nazwy i opisu użytkownika?

Dodatkowo, czy ktoś wie, czy wartość zwrócona przez eventitem.source.getCreatorId() jest w rzeczywistości Realizatorem, czy też faktycznie osobą, która utworzyła przedmiot?

góry dzięki

+0

Mała uwaga. Powinieneś zadzwonić pod numer command.invoke (wybór); a następnie command._execute (wybór); W przeciwnym razie rozszerzenia dla polecenia SaveClose nie zostaną zastosowane i potencjalnie wystąpią błędy js. –

+0

Wywołanie getCreatorId() na rzeczy rzeczywiście zwraca osobę, która utworzyła przedmiot, a nie ostatnią osobę, która go zmodyfikowała. –

Odpowiedz

8

normalnie zastosowanie tego podejścia w Anguilla: (? @puf)

  1. korzystanie $models.getItem(item Id) do załadowania przedmiotów, usłyszał od kogoś, że jest to buforowane.
  2. sprawdzić czy object.isLoaded(), a jeśli tak, to wykonać mój obsługi zdarzeń
  3. jeśli obiekt nie jest załadowany, a następnie słuchać przypadku

To wszystko sprowadza się do czegoś takiego:

p.keyword = $models.getItem(p.keywordUri); 
if (p.keyword.isLoaded()) { 
    this._onReleaseKeywordLoaded(); 
} else { 
    $evt.addEventHandler(p.keyword, "load", this.getDelegate(this._onReleaseKeywordLoaded)); 
    p.keyword.load(); 
} 

Można wtedy wywołać usługę sieciową swojego modelu z obsługi zdarzeń, ponieważ na pewno obiekt zostanie załadowany do tego czasu.

W bieżącym kodzie prawdopodobnie próbujesz przeczytać opis przed załadowaniem obiektu, stąd nazwa niezdefiniowana. I mają tendencję do zmiennych, które będą mi potrzebne w wielu funkcjach w this.properties var (p w moim przykładzie), a następnie zrobić coś takiego na początku każdej funkcji:

var p = this.properties; 
var whatever = p.whatever; 
+0

Brzmi znajomo Nuno ... –

+0

Rzeczywiście. I dla niektórych właściwości, takich jak tytuł, będziesz chciał wywołać metodę getStaticXXXXX (i sprawdzić isStaticLoaded/call staticLoad). –

1

Jak powiedział Nuno, jesteś prawdopodobnie czytania właściwość, która nie została załadowana.

Jednak nie powinieneś przyjmować nazwy wysłanej przez klienta. Zamiast tego należy uzyskać identyfikator i nazwę bieżącego użytkownika w serwisie WWW. To samo dotyczy niektórych innych argumentów, takich jak data/czas.

Zasadniczo Twoja usługa internetowa nigdy nie powinna ufać przychodzącym danym. Zatem wszystko, co potrafi samodzielnie, nie powinno nawet być argumentem dla metody, a wszystko, co jest potrzebne, powinno zostać uznane za szkodliwą zawartość i odkażone przed użyciem.

Powiązane problemy