3 | | Plik o nazwie kończącej się na Command (np. MyfirstCommand.inc) nalezy wgrać do katalogu apps/edokumenty/commands/ |
4 | | |
5 | | Należy zmienić nazwę klasy i zaimplementować metodę execute. |
6 | | |
7 | | {{{ |
8 | | <?php |
9 | | require_once(COMMANDS_DIR.'AbsCommand.inc'); |
10 | | |
11 | | /** |
12 | | * ExampleCommand |
13 | | * Szablon komendy dla Workflow. |
14 | | * Należy zaimplementować następujące metody z interfejsu ICommand: |
15 | | * - getDescription |
16 | | * - getExpandedDescription |
17 | | * - getCommandApi |
18 | | * - execute |
19 | | * Opis metod poniżej w definicji. |
20 | | * |
21 | | * Dodatkowo z klasy AbsCommand mamy do dyspozycji: |
22 | | * - $this->action - bean PSAction tabela proc_actions |
23 | | * - $this->stageBean - bean etapu StageOfProc tabela stages |
24 | | * |
25 | | * - $stage = $this->getStageDefObj() - zwraca obiekt (klasy Bean) definicji etapu jaki jest wykonywany czyli dane z stages_def - definicja etapu |
26 | | * - $procedure = $this->getProcedure() - zwraca obiekt (klasy Bean) procedury (tabela procedures) * |
27 | | * |
28 | | * @uses AbsCommand |
29 | | * @uses ICommand |
30 | | * @final |
31 | | * @author Tomasz Świenty |
32 | | * @version 0.1 |
33 | | * @copyright Copyright (c) BetaSoft |
34 | | */ |
35 | | final class ExampleCommand extends AbsCommand implements ICommand { |
36 | | |
37 | | |
38 | | |
39 | | /** |
40 | | * getDescription |
41 | | * Metoda zwracająca nazwę komendy (krótki opis). Nazwa ta pojawia się na liście wyboru komend. |
42 | | * |
43 | | * @static |
44 | | * @access public |
45 | | * @return string |
46 | | */ |
47 | | public static function getDescription() { |
48 | | |
49 | | return Translator::translate('Moja nowa komenda'); |
50 | | |
51 | | } |
52 | | |
53 | | |
54 | | |
55 | | /** |
56 | | * getExpandedDescription |
57 | | * Metoda zwracająca dłuższy opis komendy. Może zawierać znaki HTML. |
58 | | * |
59 | | * @param string $params - lista parametrów w formacie json (na razie nie jest obsługiwane) |
60 | | * @static |
61 | | * @access public |
62 | | * @return string |
63 | | */ |
64 | | public static function getExpandedDescription($params = NULL) { |
65 | | |
66 | | return Translator::translate('Moja nowa komenda - rozszerzony opis'); |
67 | | |
68 | | } |
69 | | |
70 | | |
71 | | |
72 | | /** |
73 | | * getCommandApi |
74 | | * Metoda zwracająca API komendy domyślnie jest implementowana przez AbsCommand i zwraca pustą tablicę. |
75 | | * Format api to tablica asocjacyjna, której kluczami głównymi są nazwy parametrów (najczęściej 6 znakowe) a każdy z tych kluczy |
76 | | * posiada definicję parametru również w postaci tablicy. |
77 | | * |
78 | | * Definicja parametru określana jest przez 3 atrybuty (klucze) |
79 | | * - (strint)label - krótka nazwa parametru |
80 | | * - (strint)dscrpt - dokładniejszy opis parametru |
81 | | * - (bool)required - oznaczenie czy parametr jest wymagany |
82 | | * |
83 | | * Dodatkowo w tej tablicy (głównej) może się pojawić klucz example, które podaje przykład listy parametrów - jednak od wersji |
84 | | * 3.7 jest to zbędne gdyż parametry są definiowane w dedykowanym formularzu i przechowywane są w formacie json a nie csv! |
85 | | * |
86 | | * @param string $params - lista parametrów w formacie json (na razie nie jest obsługiwane) |
87 | | * @static |
88 | | * @access public |
89 | | * @return array |
90 | | */ |
91 | | public static function getCommandApi($params = NULL) { |
92 | | |
93 | | $api = array( |
94 | | 'contid' => array( |
95 | | 'label' => Translator::translate('Kontrahent'), |
96 | | 'dscrpt' => Translator::translate('identyfikator kontrahenta (contacts.contid, <b>Lista kontrahentów -> Kolumna Id</b>) domyślnie jest przepisywany z kontekstu procedury'), |
97 | | 'required' => TRUE, |
98 | | ), |
99 | | 'example' => 'contid="1"' |
100 | | ); |
101 | | |
102 | | return $api; |
103 | | |
104 | | } |
105 | | |
106 | | |
107 | | |
108 | | /** |
109 | | * execute |
110 | | * Metoda odpowiedzialna za wykonanie komendy. |
111 | | * Poniżej znajdują się też najważniejsze rzeczy jakie trzeba zrobić! |
112 | | * |
113 | | * @param Bean $bean - obiekt formularza dokumentu albo sprawy do dyspozycji w tym obiekcie mamy wartości z pól |
114 | | * danego formularza (tabele documents (wraz z dodatkowymi tabelami), processes). |
115 | | * Wartości pobieramy metodą $bean->get('dscrpt'); |
116 | | * @param string $params - lista parametrów jaka została zdefiniowana dla tej komendy w konkretnej procedurze. |
117 | | * @access public |
118 | | * @return bool|CommandException |
119 | | */ |
120 | | public function execute(Bean $bean, $params) { |
121 | | |
122 | | // parsowanie parametrów oraz przekazanie kontekstu beana |
123 | | // po wykonaniu tego mamy do dyspozycji atrybut $this->params zawierający tablicę sparsowanych parametrów |
124 | | // (jeśli parametr jest w formacie SQL to w tablicy będzie dostępny wynik zapytania, jeśli np featid::89 to wartość cechy) |
125 | | parent::parseParams($params, $bean); |
126 | | |
127 | | // jeśli do działania komendy wymagane są jakieś parametry a użytkownik ich nie podał lub nie udało się |
128 | | // ich sparsować to należ wykonać poniższe sprawdzenie |
129 | | // Wyjątek CommandException przerywa działanie komedny! |
130 | | if ((empty($params)) OR (!is_array($this->params))) { |
131 | | $this->setMessage(Translator::translate('Komenda nie może zostać wykonana ze względu na brak parametrów lub nieudanej próbie ich utworzenia.'), 'WARNING'); |
132 | | $this->setMessage(Translator::translate('Komenda nie została wykonana.'), 'ERROR'); |
133 | | throw new CommandException($this); |
134 | | } |
135 | | |
136 | | // api komendy do weryfikacji parametrów |
137 | | $api = self::getCommandApi(); |
138 | | |
139 | | // walidajca parametrów |
140 | | if ((!array_key_exists('contid', $this->params)) OR (!is_numeric($this->params['contid']))) { |
141 | | $this->setMessage(sprintf(Translator::translate('Komenda nie może zostać wykonana ze względu na brak parametru contid - %s.'), $api['contid']['dscrpt']), 'WARNING'); |
142 | | $this->setMessage(Translator::translate('Komenda nie została wykonana.'), 'ERROR'); |
143 | | throw new CommandException($this); |
144 | | } |
145 | | |
146 | | // klucz główny tabeli doc_id lub prc_id (kontekst procedury) |
147 | | $keyval = $bean->getPkeyValue(); |
148 | | |
149 | | // $this->action - bean PSAction tabela proc_actions |
150 | | // $this->stageBean - bean etapu StageOfProc tabela stages |
151 | | |
152 | | // Zwraca obiekt (klasy Bean) definicji etapu jaki jest wykonywany czyli dane z stages_def - definicja etapu |
153 | | $stage = $this->getStageDefObj(); |
154 | | |
155 | | // Zwraca obiekt (klasy Bean) procedury (tabela procedures) |
156 | | $procedure = $this->getProcedure(); |
157 | | |
158 | | // Informacja o tym co zostało zrobione |
159 | | $this->setMessage(sprintf(Translator::translate('Kontakt o identyfikatorze %d został dodany do dokumentu.'), $this->params['contid']), 'SUCCESS'); |
160 | | |
161 | | return TRUE; |
162 | | |
163 | | } |
164 | | |
165 | | } // class ExampleCommand |
166 | | |
167 | | ?> |
168 | | |
169 | | }}} |
170 | | |
171 | | Przykładowe komendy są dostępne pod adresem http://support.edokumenty.eu/download/deployment/commands/ |
| 3 | Strona została przeniesiona pod nowy adres [http://dokumentacja.edokumenty.eu/index.php/dokumentacja-online-systemu-edokumenty/przetwarzanie-danych/komendy/] |