Zmiany pomiędzy wersją 2 and wersją 3 dla DeployerGuide/Customization/ProcessAutomation/CommandAPI

Pokaż
Ignoruj:
Data i czas:
02/15/12 09:57:20 (12 years temu)
Autor:
TS (IP: 213.227.67.33)
Komentarz:

--

Legend:

Bez zmian
Dodane
Usunięte
Zmienione
  • DeployerGuide/Customization/ProcessAutomation/CommandAPI

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