Naprawa „Przejdź do głównej” w arkuszu kasowym Axapty (AX 2009)
- Data Publikacji:
- Aktualizacja:
Funkcjonalność „Przejdź do głównej” w AX jest bardzo użyteczna, ale czasami zawodzi. Naprawimy to w arkuszu kasowym
Opis rozwiązania
Standardową funkcjonalnością w Microsoft® Dynamics™ AX 2009 (oraz we wcześniejszych wersjach Axapty) jest bezpośrednie przechodzenie do formularza powiązanej tabeli. Przykładem tego jest np. formularz zamówień sprzedaży w którym możemy klikając prawym przyciskiem myszy otworzyć powiązane konto odbiorcy którego zamówienie dotyczy. Niestety czasami zdarza się, że nie działa to prawidłowo. Przykładem tego jest arkusz księgowania kasy.
W arkuszu tym podczas próby przejścia do formularza odbiorców lub dostawców otwiera się nam formatka bez danych. Jest to związane z dużą komplikacją formularza. Funkcjonalność „Przejdź do formularza głównej tabeli” osiągana jest za pomocą trzech sposobów:
- Relacja na EDT
- Właściwość FormRef na tabeli
- Metodę jumpRef() na dataSource formularza
W powyższym przypadku możemy wykorzystać trzeci sposób żeby naprawić błędnie działającą funkcję.
W formularzu „LedgerJournalTransRCash” na źródłach danych (Data Sources) w tabeli „LedgerJournalTrans” w polu „OffsetAccount” nadpisujemy metodę jumpRef(). Wklejamy poniższy kod i mamy funkcjonalność „Przejdź do głównej” dla odbiorców, dostawców i kont księgowych. W praktyce inne skoki nie są potrzebne. Osoba wprowadzająca dane do arkusza kasowego będzie nam bardzo wdzięczna.
Kod x++ metody jumpRef()
public void jumpRef()
{
CustTable custTable;
VendTable vendTable;
LedgerTable ledgerTable;
LedgerJournalACType ledgerJournalACType;
Args args;
MenuFunction menuFunction;
;
args = new Args();//Obiekt do przeniesienia danych przy wywołaniu
ledgerJournalACType = LedgerJournalTrans.OffsetAccountType;
switch (ledgerJournalACType)//Sprawdzamy rodzaj konta (odbiorca, dostawca, księga główna)
{
case LedgerJournalACType::Cust :
custTable.AccountNum = LedgerJournalTrans.OffsetAccount;
args.record(custTable);//Przekazujemy odpowiedni rekord żeby docelowy formularz otworzył się z właściwym kontem
menuFunction = new MenuFunction(menuitemdisplaystr(CustTable), MenuItemType::Display);
menuFunction.run(args);//Najbardziej zalecany sposób uruchomienia formularza, kontrolowane są uprawnienia
break;
case LedgerJournalACType::Vend :
vendTable.AccountNum = LedgerJournalTrans.OffsetAccount;
args.record(vendTable);
menuFunction = new MenuFunction(menuitemdisplaystr(VendTable), MenuItemType::Display);
menuFunction.run(args);
break;
case LedgerJournalTrans.OffsetAccountType == LedgerJournalACType::Ledger :
ledgerTable.AccountNum = LedgerJournalTrans.OffsetAccount;
args.record(ledgerTable);
menuFunction = new MenuFunction(menuitemdisplaystr(LedgerTable), MenuItemType::Display);
menuFunction.run(args);
break;
default :
super();
}
}