Przejdź do głównej treści

Przyciski akcji


W tym rozdziale opisaliśmy, w jaki sposób oraz w jakich miejscach systemu możesz dodać swoje własne przyciski akcji.

Każdy przycisk jest deklarowany we własnym tagu <button> w sekcji <tabs><tab><buttons>.

Przyciski XML'we

Przycisk składa się z tagu button, który zawiera następujące tagi:

  • id - Indywidualna nazwa przycisku
  • label - Nazwa przycisku na pasku toolbar
  • dscrpt - Opis przycisku na pasku toolbar. Zostanie wyświetlony po najechaniu na niego kursorem.
  • onclick - Skrypt Javascript'owy do wykonania po kliknięciu.
  • icon - Nazwa ikonki z katalogu edokumenty/var/img/icons/24x24

Przykład przycisku do odświeżania listy.

<tab ... >
    <buttons>
        <button>
            <id>refresh</id>
            <label>Odśwież</label>
            <dscrpt>Odśwież</dscrpt>
            <onclick>{AFTER_SUBMIT}</onclick>
            <icon>sync-24.png</icon>
        </button>
    </buttons>
</tab>

Przycisk operujący na liście

<button>
    <id>new</id>
    <label>Nowa</label>
    <dscrpt>Nowa</dscrpt>
    <onclick>                
        App.openDialogByCls({CLSNAM}, {KEYVAL}, ({afterSubmit:'{AFTER_SUBMIT}', mode:'new'}).toJSONString())
    </onclick>
    <icon>new.png</icon>
</button>

Dodatkowe tokeny do użycia w tagu onclick

TokenOpis
{CLSNAM}Klasa zaznaczonego elementu na liście jeśli zostało podane pole w raporcie
{KEYVAL}Identyfikator zaznaczonego elementu na liście jeśli zostało podane pole w raporcie
{KEYVALS}Identyfikatory zaznaczonych elementów - w przypadku dokumentów: {doc_id:
{AFTER_SUBMIT}Akcja odświeżenia widoku po edycji wpisu lub np. jako dodatkowa akcji na pasku zadań
{MODE}Wartość pobierana z taga używać jako new, edit, del, delete

Przyciski operujące na dokumencie

Przycisk wyświetla nową formatkę dokumentu o dctpid 12.

<button>
    <id>new</id>
    <label>Nowy</label>
    <dscrpt>Nowy wniosek urlopowy</dscrpt>
    <onclick>
        App.openDialogByCls('DOCUMENT', null,
        ({afterSubmit:'{AFTER_SUBMIT}',dctpid:21,dctptp:'CustomDocument', mode:'new'}).toJSONString())
    </onclick>
    <icon>new.png</icon>
</button>

Przycisk otwiera dokument do edycji.

<button>
    <id>edit</id>
    <label>Edycja</label>
    <dscrpt>Edytuj wniosek</dscrpt>
    <onclick>
        App.openDialogByCls('DOCUMENT', {KEYVAL},
        ({afterSubmit:'{AFTER_SUBMIT}',dctpid:21,dctptp:'CustomDocument', mode:'edit'}).toJSONString())
    </onclick>
    <icon>edit.png</icon>
</button>

Przycisk do usunięcia dokumentu.

<button>
    <id>delete</id>
    <label>Usuń</label>
    <dscrpt>Usuń</dscrpt>
    <onclick>
        App.openDialogByCls('DOCUMENT', {KEYVAL},
        ({afterSubmit:'{AFTER_SUBMIT}',dctpid:21,dctptp:'CustomDocument',mode:'del'}).toJSONString())
    </onclick>
    <icon>delete.png</icon>
</button>

Przycisk tworzący sprawę

Przycisk tworzący sprawę - pełna formatka tworząca sprawę.

App.openDialogByCls('PROCESS_EDIT',  null, ({afterSubmit:'{AFTER_SUBMIT}', clsnam:'DOSS', keyval:39, mode:'new' }).toJSONString())

keyval przechowuje ID teczki

Przycisk tworzący sprawę - prosta formatka tworząca sprawę.

App.createDialog('createProcessForm','SimpleProcessCreatingForm','./modules/AProcesses/forms/SimpleProcessCreatingForm.inc','Zakładanie','513',({clsnam:'DOSS',strpid:351,devcid:'{devcid}',contid:'{contid}'}).toJSONString(), null, 'fast');

Opis parametrów przycisku tworzącego sprawę:

  • createProcessForm - nazwa w kodzie HTML okna
  • SimpleProcessCreatingForm - nazwa klasy php'owej
  • ./modules/AProcesses/form... - ścieżka do tej klasy
  • Zakładanie - opis na górnej belce formatki (najczęściej jest nadpisywany przez kod klasy)
  • 513 - rodzaj formatki 513 to pełna z przyciskami na górnej belce inne rodzaje (kody) raczej są przeznaczone do wew. wywołań
  • ({clsnam:'DOSS',strpid:1253,keyval:776,mode:'new'}).toJSONString() - parametry do formatki w formacie JSON

Ostatnie dwa parametry zawsze są takie same.

Parametr strpid jest dostępny w Ustawienia -> Panel sterowania -> Sprawy -> Wyciąg z wykazu akt -> Kolumna Miejsce (strpid). W przypadku, gdy kolumna ta nie jest włączona, kliknij ikonę „Widoczne kolumny” (na dole listy) i zaznaczyć ptaszka.

Otwieranie za pomocą openDialogByCls()

Funkcję App.openDialogByCls() można wywoływać z innymi parametrami zamiast DOCUMENT, co spowoduje otwarcie innych typów okien.

Poniżej lista najbardziej przydatnych:

  • CONTACT - Okienko edycji kontaktu (wpisujemy CONTACT_EDIT)
  • PROCESS - Okienko edycji sprawy
  • RCP - Karta pracy
  • MEETING - Spotkanie
  • EVENT - Termin
  • TODO - Zadanie
  • PHONECALL - Rozmowa telefoniczna
  • DEVICE - Urządzenie
  • PRODUCT - Produkt

Przykład zakładania nowego kontaktu (osoba fizyczna):

App.openDialogByCls('CONTACT_EDIT', null,({afterSubmit:'{AFTER_SUBMIT}', phyper:'true' }).toJSONString())

Przykład zabezpieczenia, w przypadku gdy raport zwróci zero wyników, a na zakładce w module będzie dostępny przycisk Edytuj:

var k = {KEYVAL}; 
if (k) {
    App.openDialogByCls('DOCUMENT', {KEYVAL},({afterSubmit:'{AFTER_SUBMIT}',dctpid:24,dctptp:'CustomDocument', mode:'edit'}).toJSONString());
} else {
    NewFrame.showInfo('Wybierz element z listy');
};
var ss={KEYVAL}; 
if (ss) {
    App.openDialogByCls('DOCUMENT',ss,({afterSubmit:'App.ADocumentslist.refresh()'}).toJSONString());
} else NewFrame.showInfo('Proszę zaznaczyć dokument do edycji.');

W przypadku gdy zaznaczymy dwa dokumenty:

var ss={KEYVALS}; if(ss.length==1) {
    App.openDialogByCls('DOCUMENT',ss[0],({afterSubmit:'{AFTER_SUBMIT}'}).toJSONString());
}else{
    if(ss.length>1) {
        NewFrame.showInfo('Proszę zaznaczyć tylko jeden dokument do edycji.');
    } else {
        NewFrame.showInfo('Proszę zaznaczyć dokument do edycji.');
    }
}

Przykład tworzenia nowej umowy z uzupełnionym klientem na podstawie zestawienia (keyval):

<button>
  <id>umowa1</id>
  <label>Nowa umowa</label>
  <dscrpt>Nowa umowa</dscrpt>
  <onclick>App.openDialogByCls('DOCUMENT', null,
       ({afterSubmit:'{AFTER_SUBMIT}',dctpid:3,dctptp:'Contract',"contid":{KEYVAL} , mode:'new'}).toJSONString())       
  </onclick>
  <icon>add.png</icon>
</button>

Przyciski operujące na rejestrze

W zakładce można również operować na dowolnym rejestrze. Aby edytować rekord raport skojarzony z zakładką, musi posiadać klucze clsnam, keyval. Wówczas działać będzie przekazywanie wartości {KEVAL}.

Warto dodać, że w poniższych przyciskach pojawia się fragment cregid:1, gdzie 1 należy zamienić na ID rejestru, którego wpisy chcemy modyfikować.

Nowy wpis
<button>
    <id>new</id>
    <label>Nowy</label>
    <dscrpt>Nowy wpis</dscrpt>
    <onclick>
        App.openDialogByCls('CREGISTER_ENTRY', null,
        ({afterSubmit:'{AFTER_SUBMIT}', mode:'new',cregid:1}).toJSONString())
    </onclick>
    <icon>new.png</icon>
</button>

Przyciski predefiniowene (z tokenem)

Wydruk raportu

Wydruk raportu użytego do listy

<button>
    <id>printer</id>
    <label/>
    <dscrpt/>
    <onclick>{EXPORT_TO_PRINTER}</onclick>
    <icon>print.png</icon>
</button>

Wydruk o określonym ID {reports.reports.rep_id}

<button>
    <id>printer</id>
    <label/>
    <dscrpt/>
    <onclick>{EXPORT_TO_PRINTER(123)}</onclick>
    <icon>print.png</icon>
</button>

Wydruk raportu do PDF'a

Wydruk raportu użytego do listy

<button>
    <id>pdf</id>
    <label/>
    <dscrpt/>
    <onclick>{EXPORT_TO_PDF}</onclick>
    <icon>pdf.png</icon>
</button>

Wydruk o określonym ID {reports.reports.rep_id}

<button>
    <id>pdf</id>
    <label/>
    <dscrpt/>
    <onclick>{EXPORT_TO_PDF(123)}</onclick>
    <icon>pdf.png</icon>
</button>

Wydruk raportu do XLS'a

Wydruk raportu użytego do listy

<button>
    <id>xls</id>
    <label/>
    <dscrpt/>
    <onclick>{EXPORT_TO_XLS}</onclick>
    <icon>xls.png</icon>
</button>

Wydruk o określonym ID {reports.reports.rep_id}

<button>
    <id>xls</id>
    <label/>
    <dscrpt/>
    <onclick>{EXPORT_TO_XLS(123)}</onclick>
    <icon>xls.png</icon>
</button>

Odświeżenie listy

<button> 
    <id>refresh</id> 
    <label>Odśwież</label> 
    <dscrpt>Odśwież</dscrpt> 
    <onclick>{AFTER_SUBMIT}</onclick> 
    <icon>sync-24.png</icon> 
</button> 

Możliwość wyświetlenie w zakładce menu dokumentów.

<button type="DOCUMENTS_MENU" group="REQUEST_DOCUMENT_GROUP">
    <id>new</id>
    <label>Nowy wniosek</label>
    <dscrpt>Nowy wniosek</dscrpt>
    <icon>new.png</icon>
</button>

Dla atrybutu group możemy podać ID grupy dokumentów (types_of_documents_groups.dctgid) lub GUID (types_of_documents_groups.dgguid) co spowoduje wyświetlenie tylko elementów z tej gałęzi drzewa.

Bufor OCR

Za pomocą funkcji openDialogByCls JavaScript możemy wyświetlić dialog Buffor OCR, dla aktualnie 4 typów dokumentów Paper, VatNote, VatNoteIn, VatNoteOut

Definicja
NazwaWartośćOpis
dctptpPaper, VatNote, VatNoteIn, VatNoteOutTyp(y) dokumentu. Dla faktur zawsze będą dostępne wszystkie typy/podtypy (sprzedaży,zakupu), niezależnie czy podamy VatNote, VatNoteIn, VatNoteOut. Konkretny typ wpisany do dctptp zostanie użyty jako domyślny typ dokumentu dla dodawanych dokumentów.
modeall_user_buffersTryb pracy.

Przycisk Custom Widget

Przyciskom Custom Widget ze względu na szerokie zastosowanie oraz możliwość użycia w różnych miejscach poświęciliśmy osobny rozdział, który jest dostępny tutaj.

Przycisk jako menu

Grupowanie przycisków.

By móc zgrupować przyciski w menu należy w pliku xml, wewnątrz sekcji <button> dodać podrzędną sekcję <buttons>, a w niej możemy definiować Przyciski XML'we czy przyciski Custom Widget.

Przycisk jako menu:

<button>
    <id>menu</id>
    <label>Drukuj</label>
    <dscrpt>Drukuj</dscrpt>
    <icon>printer.png</icon>
    <buttons>
        <button>
            <id>printer</id>
            <label/>
            <dscrpt/>
            <onclick>{EXPORT_TO_PRINTER}</onclick>
            <icon>print.png</icon>
        </button>
        <button>
            <id>pdf</id>
            <label/>
            <dscrpt/>
            <onclick>{EXPORT_TO_PDF}</onclick>
            <icon>pdf.png</icon>
        </button>
        <button>
            <id>xls</id>
            <label/>
            <dscrpt/>
            <onclick>{EXPORT_TO_XLS}</onclick>
            <icon>xls.png</icon>
        </button>
        <button>
            <custom_widget>38</custom_widget>
        </button>
    </buttons>
</button>

Warunkowe udostępnianie/wyświetlanie przycisków

Definiując przycisk poprzez plik XML, można dodatkowo określić atrybuty:

  • visible - wartość 0 ukrywa przycisku,
  • enabled - wartość 0 wyłącza przycisk (przycisk jest widoczny, ale nie jest aktywny),

Do określania wartości dla powyższych atrybutów można zdefiniować zapytanie do bazy z użyciem tokenów, które przechowują wartości danego obiektu. Nazwy tokenów odpowiadają atrybutom Entity, obiektu dla którego definiowane są przyciski.

Przykład

Dla sprawy zdefiniowano w process_tpl.xml dodatkową zakładkę z przyciskiem Dodaj. Przycisk ten nie jest widoczny, gdy sprawa jest oznaczona jako załatwiona.

<button visible="{sql_query(#SELECT CASE WHEN '{is_fix}'='f' THEN 1 ELSE 0 END#)}">
    <custom_widget>6</custom_widget>
</button>