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 przyciskulabel
- Nazwa przycisku na pasku toolbardscrpt
- 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 kataloguedokumenty/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>
onclick
Dodatkowe tokeny do użycia w tagu Token | Opis |
---|---|
{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 oknaSimpleProcessCreatingForm
- nazwa klasy php'owej./modules/AProcesses/form...
- ścieżka do tej klasyZakł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 sprawyRCP
- Karta pracyMEETING
- SpotkanieEVENT
- TerminTODO
- ZadaniePHONECALL
- Rozmowa telefonicznaDEVICE
- UrządzeniePRODUCT
- 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ć.
<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>
<button>
<id>edit</id>
<label>Edycja</label>
<dscrpt>Edytuj wpis</dscrpt>
<onclick>
App.openDialogByCls('CREGISTER_ENTRY', {KEYVAL},
({afterSubmit:'{AFTER_SUBMIT}', mode:'edit',cregid:1}).toJSONString())
</onclick>
<icon>edit.png</icon>
</button>
<button>
<id>delete</id>
<label>Usuń</label>
<dscrpt>Usuń</dscrpt>
<onclick>
App.openDialogByCls('CREGISTER_ENTRY', {KEYVAL},
({afterSubmit:'{AFTER_SUBMIT}', mode:'del',cregid:1}).toJSONString())
</onclick>
<icon>delete.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>
Menu dokumentów
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
Nazwa | Wartość | Opis |
---|---|---|
dctptp | Paper, VatNote, VatNoteIn, VatNoteOut | Typ(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. |
mode | all_user_buffers | Tryb pracy. |
- Wywołanie bufora OCR dla Faktur (domyślnie faktury zakupu)
JScript::add('App.openDialogByCls(\'OCR_BUFFER\', null, {dctptp:"VatNoteInc","mode":"all_user_buffers"})');
- Wywołanie bufora OCR dla Pism
JScript::add('App.openDialogByCls(\'OCR_BUFFER\', null, {dctptp:"Paper","mode":"all_user_buffers"})');
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>