"Niektórzy ludzie, kiedy napotkają problem, myślą: 'Wiem, użyję wyrażeń regularnych'.
I teraz mają dwa problemy."

Jamie Zawinski

czwartek, 25 listopada 2010

Dynamics AX: Numerator - tutorial

Numerator w systemie Dynamics AX doświadczonemu programiście nietrudno dodać, lecz często przy natłoku zadań można zapomnieć co gdzie jeszcze dodać, żeby od razu działało jak należy :) Ten tutorial ma w tym pomóc. Do dzieła!


1. Dodajemy typ rozszerzony (string) i dziedziczymy po typie Num (właściwość Extends):


2. Do tabeli, gdzie chcemy użyć  numeratora dodajemy pole o typie utworzonym w pkt. 1:

3.W typie rozszerzonym należy zdefiniować relację do tabeli głównej numeratora.


4. Następnie w jednej z klas dziedziczących po klasie NumSeqReference należy w metodzie loadModule wstawić kawałek kodu rejestrującego numerator nie zapominając zmienić nazwy na swój numerator i etykiety:

numRef.DataTypeId = typeId2ExtendedTypeId(typeid(DevIndexId)); // tutaj nazwa rozszerzonego typu
        numRef.ReferenceHelp = literalstr("@etykieta"); // należy wybrać etykietę dla numeratora
        numRef.WizardContinuous = false;
        numRef.WizardManual = NoYes::No;
        numRef.WizardAllowChangeDown = NoYes::No;
        numRef.WizardAllowChangeUp = NoYes::No;
        numRef.WizardHighest = 99999999;
        numRef.SortField = 1;
        
        this.create(numRef);

Klasę dziedziczącą po NumSeqReference należy wybrać wg swojego zastosowania. Np. numerator dotyczący klientów znajdzie się w klasie NumberSeqReference_Customer. Można też oczywiście stworzyć swoją klasę dla swojego modułu.

5. W tabeli parametrów modułu (np. CustParameters), w którym wstawiamy numerator należy zdefiniować nową metodę:

server static NumberSequenceReference numRefDevIndexId)
 {
  ;
  return NumberSeqReference::findReference(typeId2ExtendedTypeId(typeid(DevIndexId)));
 }

6. W formularzu Podstawowe => Ustawienia => Sekwencje numerów (identyfikatorów) => Sekwencje numerów (lub w AX2009 identyfikatorów) - należy dodać nowy numerator:


 7. W Podstawowe => Ustawienia => Sekwencje numerów (identyfikatorów) => Odwołania - należy znaleźć nowo dodane odwołanie i przypisać numerator stworzony w poprzednim punkcie. W moim przypadku numerator będzie się znajdował w module "Rozrachunki z odbiorcami" i będzie posiadał etykietę "@etykieta":


8.  Jeśli powyższy krok wykonamy bez żadnych problemów numerator powinien być prawidłowo stworzony i skonfigurowany. Teraz wystarczy go użyć np. w metodzie insert na tabeli głównej:
NumberSeq numberSeq;
    ;

    ttsbegin;
    numberSeq = NumberSeq::newGetNum(CustParameters::numRefDevIndexId());

    this.DevIndexId = numberSeq.num();

    super();
    numberSeq.used();
    ttscommit;

9. Teraz powinniśmy cieszyć się nowym numeratorem, po wstawieniu rekordu do tabeli i zapisaniu go, system powinien przydzielić nowy numer:


Życzę miłego tworzenia numeratorów :)

Brak komentarzy:

Prześlij komentarz