FIM Portal – dopuszczalne wartości atrybutu i Constant Specifier

2014-06-05

W dzisiejszym wpisie przedstawię pewien problem związany z walidacją wartości atrybutów w portalu FIM. Załóżmy, że dany obiekt posiada atrybut tekstowy, w którym mogą znaleźć się jedynie wartości z określonego zbioru. Chcemy aby użytkownik podczas tworzenia obiektu miał do wyboru dwie wartości atrybutu: MyValue-1 oraz MyValue-2. Standardowo zaczynamy od ustawienia walidacji bindingu na odpowiednie wyrażenie regularne:

fim1

Następnie w widoku tworzenia obiektu definiujemy kontrolkę dla naszego atrybutu. Będzie to DropDownList z ItemSource ustawionym na właściwość LocalizedAllowedValues atrybutu:

<my:Control my:Name="MailboxType" my:TypeName="UocDropDownList"
	my:Caption="{Binding Source=schema, Path=MailboxType.DisplayName}"
	my:Description="{Binding Source=schema, Path=MailboxType.Description}"
	my:RightsLevel="{Binding Source=rights, Path=MailboxType}">
	<my:Properties>
		<my:Property my:Name="Required" my:Value="{Binding Source=schema, Path=MailboxType.Required}" />
		<my:Property my:Name="ValuePath" my:Value="Value"/>
		<my:Property my:Name="CaptionPath" my:Value="Caption"/>
		<my:Property my:Name="HintPath" my:Value="Hint"/>
		<my:Property my:Name="ItemSource" my:Value="{Binding Source=schema, Path=MailboxType.LocalizedAllowedValues}"/>
		<my:Property my:Name="SelectedValue" my:Value="{Binding Source=object, Path=MailboxType, Mode=TwoWay}"/>
	</my:Properties>
</my:Control>

Teoretycznie wszystko zrobiliśmy poprawnie ale podczas tworzenia nowego obiektu okazuje się, że kontrolka DropDownList jest pusta. Oczekiwaliśmy, że będzie ona zwierała listę dopuszczalnych wartości dla interesującego nas atrybutu:

fim2

Przyczyną takiego zachowania jest użycie w wyrażeniu regularnym znaku „-„. Przy definiowaniu walidacji nie możemy używać znaków specjalnych takich jak  „-„, „.”, „?”, „$”, „|”, itp. No dobrze, ale co zrobić, jeżeli mimo wszystko chcemy aby w kontrolce wyświetlane były wartości z myślnikami? Rozwiązaniem jest użycie obiektów Constant Specifier. Wchodzimy do All Resources, wybieramy typ Constant Specifier i tworzymy nowe obiekty dla każdej z dopuszczalnych wartości. Podczas tworzenia obiektu Constant Specifier podajemy wartość jaka będzie wyświetlana w kontrolce, wartość klucza bez znaków specjalnych oraz wskazujemy atrybut i typ obiektu:

fim3

Teraz pozostało jedynie zmodyfikowanie wyrażenia regularnego w walidacji tak, aby zawierało wartości kluczy zamiast wartości wyświetlanych:

fim4

Po tej zmianie (i wykonaniu IISRESET) wszystko działa tak jak powinno, podczas tworzenia obiektu możemy wybrać jedną z dopuszczalnych wartości:

fim5

Powyżej pokazałem tylko jedno z zastosowań obiektów Constant Specifier. Generalnie pozwalają one na rozdzielenie dopuszczalnych wartości atrybutu na wartość fizycznie zapisywaną w obiekcie (Constant Value Key) oraz wartość wyświetlaną w UI (Display Name). Takie podejście jest dobrą praktyką z kilku powodów. Po pierwsze wartości atrybutów przechowywane w bazie danych mogą być niezrozumiałe dla użytkownika. Po drugie operowanie w kodzie na wartościach wyświetlanych powoduje konieczność jego modyfikacji przy każdej zmianie tych wartości. Ostatnią zaletą jest możliwość zdefiniowania wyświetlanych wartości dla różnych języków. Wystarczy podczas tworzenia obiektu Constant Specifier przejść na zakładkę Localization i dla poszczególnych języków (Supported Languages) podać wartość, jaka będzie wyświetlana w kontrolkach (Localized Display name).

Reklamy

Posted on 2014-06-05, in MIM/FIM and tagged , , , . Bookmark the permalink. 2 komentarze.

  1. Mam takie może głupie pytanie ale czy zmiana wyrażenia regularnego na ^(MyValue\-1|MyValue\-2)?$
    nie załatwi sprawy?

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Log Out / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Log Out / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Log Out / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Log Out / Zmień )

Connecting to %s

%d blogerów lubi to: