8 | | O processo de desenvolvimento pode, grosseiramente, ser dividido em três etapas: |
9 | | |
10 | | 1. Especificação |
11 | | 1. Projeto |
12 | | 1. Implementação |
13 | | |
14 | | == Especificação == |
15 | | |
16 | | Esta etapa é realizada através de reuniões como cliente que solicitou o processo de Workflow.Todos os dados relevantes ao processo devem ser documentados,conforme indicado no documento [wiki:WF/Documentacaominimadeprojeto Documentação mínima do Projeto]. Ao final desta etapa,o modo como o processo irá funcionar deve estar bem definido. |
17 | | |
18 | | No nosso exemplo, devemos desenvolver um processo que gerencie "Solicitações". Antes de ser executada, a solicitação deve ser avaliada e aprovada por um distribuidor (pessoa que gerencia as solicitações). Dessa forma, temos dois caminhos distintos: |
19 | | |
20 | | 1. Caso a solicitação seja aprovada, ela vai para execução de um técnico que descreve o procedimento que foi feito para solucionar o problema. Ao final da execução, o solicitante recebe um e-mail passando informações sobre sua solicitação; |
21 | | 1. Caso a solicitação seja rejeitada, o solicitante recebe um e-mail informando sobre sua solicitação. |
22 | | |
23 | | ---- |
24 | | |
25 | | == Projeto == |
26 | | |
27 | | Nesta etapa os dados obtidos na etapa de especificação são mapeados para a realidade do Workflow. E, é possível definir alguns dados sobre o processo, por exemplo: quantos perfis ele terá, o número de atividades, o relacionamento entre elas, etc. |
28 | | |
29 | | No nosso exemplo podemos perceber claramente a existência de três perfis: |
30 | | |
31 | | 1. Solicitante: grupo de pessoas que podem fazer solicitações; |
32 | | 1. Distribuidor: grupo de pessoas que avaliam as solicitações; |
33 | | 1. Técnico: grupo de pessoas que executam as solicitações aprovadas. |
34 | | |
35 | | As atividades são quatro: |
36 | | |
37 | | 1. Compor Solicitação: o perfil "solicitante" faz uma solicitação; |
38 | | 1. Avaliar: o perfil "distribuidor" avalia a solicitação; |
39 | | 1. Executar: o perfil "tecnico" executa as solicitações aprovadas; |
40 | | 1. Informar Resultado: o perfil "solicitante" vê as informações referentes à sua solicitação. |
41 | | |
42 | | Possíveis caminhos de execução: |
43 | | |
44 | | 1. Compor Solicitação -> Avaliar (Aprovada) -> Executar -> Informar Resultado |
45 | | 1. Compor Solicitação -> Avaliar (Rejeitada) -> Informar Resultado |
46 | | |
47 | | === Criação do Fluxo === |
48 | | |
49 | | Um dos passos mais importantes no desenvolvimento de um processo de Workflow é definir o fluxo do processo. O fluxo consiste no relacionamento das atividades através de transições. É importante também, quando retratar o fluxo, informar os perfis relacionados a cada atividade. |
50 | | |
51 | | O resultado da criação do fluxo é um dos mais importantes documentos para o processo de Workflow e que por si só é capaz de demonstrar o funcionamento de todo o sistema. |
52 | | |
53 | | No nosso exemplo, foi criado o seguinte fluxo: |
54 | | |
55 | | [[Image(htdocs:wf/images/tutorial_solicitacoes.png)]] |
56 | | |
57 | | === Criação do Processo === |
58 | | |
59 | | Uma vez definido o fluxo do processo, é possível mapeá-lo para a engine do Workflow que estamos utilizando. Após esta etapa, cada uma das atividades que compõem o processo podem ser codificadas, dando funcionalidade às mesmas. |
60 | | |
61 | | No nosso exemplo, vamos desenvolver esta etapa na seguinte ordem: |
62 | | |
63 | | 1. Criar o Processo; |
64 | | 1. Criar as Atividades / Transições / Perfis; |
65 | | 1. Mapear os Perfis. |
66 | | |
67 | | ==== Criar o processo ==== |
68 | | |
69 | | Na interface de Administração de [wiki:WF/Processos Processos], preenchemos: |
70 | | |
71 | | {{{ |
72 | | |
73 | | Nome do processo: Solicitações |
74 | | |
75 | | Descrição: Processo de gerenciamento de solicitações |
76 | | |
77 | | }}} |
78 | | |
79 | | Para os outros campos, utilizam-se os valores padrões. |
80 | | |
81 | | Clicamos no botão "criar". |
82 | | |
83 | | ==== Criar as atividades / Transições / Perfis ==== |
84 | | |
85 | | Selecione a opção "Atividades". |
86 | | |
87 | | Quando o processo é criado, duas atividades são criadas com ele: a atividade do tipo start e de nome "start" e a atividade do tipo end e de nome "end". |
88 | | |
89 | | Selecionamos a atividade "start" e, mudamos / preenchemos os seguintes campos: |
90 | | |
91 | | {{{ |
92 | | |
93 | | Nome: Compor Solicitação |
94 | | |
95 | | Descrição: Atividade para o solicitante compor uma solicitação |
96 | | |
97 | | Interativa: marcar opção |
98 | | |
99 | | Roteamento Automático: marcar opção |
100 | | |
101 | | Adicionar perfil: |
102 | | |
103 | | Nome: solicitante |
104 | | |
105 | | Descrição: autorizados a compor solicitações |
106 | | |
107 | | }}} |
108 | | |
109 | | Clicamos em "salvar". |
110 | | |
111 | | Selecionamos a atividade "end" e, mudamos / preenchemos os seguintes campos: |
112 | | |
113 | | {{{ |
114 | | |
115 | | Nome: Informar Resultado |
116 | | |
117 | | Descrição: Atividade para informar o solicitante sobre sua solicitação |
118 | | |
119 | | Interativa: marcar opção |
120 | | |
121 | | Roteamento Automático: marcar opção |
122 | | |
123 | | Usar perfis existentes: |
124 | | |
125 | | Selecionar "solicitante" |
126 | | |
127 | | Clicamos em "salvar". |
128 | | |
129 | | }}} |
130 | | |
131 | | Clicamos em "novo". |
132 | | |
133 | | Preenchemos os seguintes campos: |
134 | | |
135 | | {{{ |
136 | | |
137 | | Nome: Executar |
138 | | |
139 | | Descrição: Atividade para o técnico executar uma solicitação |
140 | | |
141 | | Tipo: activity |
142 | | |
143 | | Interativa: marcar opção |
144 | | |
145 | | Roteamento Automático: marcar opção |
146 | | |
147 | | Adicionar Transições: |
148 | | |
149 | | Adicionar transições para: "Informar Resultado" |
150 | | |
151 | | Adicionar perfil: |
152 | | |
153 | | Nome: tecnico |
154 | | |
155 | | Descrição: autorizados a executar solicitações |
156 | | |
157 | | }}} |
158 | | |
159 | | Clicamos em "salvar". |
160 | | |
161 | | Clicamos em "novo". |
162 | | |
163 | | Preenchemos os seguintes campos: |
164 | | |
165 | | {{{ |
166 | | |
167 | | Nome: Avaliar |
168 | | |
169 | | Descrição: Atividade para o distribuidor avaliar uma solicitação |
170 | | |
171 | | Tipo: switch |
172 | | |
173 | | Interativa: marcar opção |
174 | | |
175 | | Roteamento Automático: marcar opção |
176 | | |
177 | | Adicionar Transições: |
178 | | |
179 | | Adicionar transições de: "Compor Solicitação" |
180 | | |
181 | | Adicionar transições para: "Executar" e "Informar Resultado" |
182 | | |
183 | | Adicionar perfil: |
184 | | |
185 | | Nome: distribuidor |
186 | | |
187 | | Descrição: autorizados a avaliar solicitações |
188 | | |
189 | | }}} |
190 | | |
191 | | Clicamos em "salvar". |
192 | | |
193 | | ==== Mapear os Perfis ==== |
194 | | |
195 | | Clicamos em "Perfis" |
196 | | |
197 | | Na área "Mapear usuários/grupos a perfis", selecionamos um dos perfis (no lado direito) e adicionamos os usuários que pertencem a este perfil. Depois, clicamos em "Mapear". |
198 | | |
199 | | Para finalizar, basta repetir este mesmo passo para os outros dois perfis. |
200 | | |
201 | | ---- |
202 | | |
203 | | == Implementação == |
204 | | |
205 | | Nesta etapa é feita a codificação das atividades que foram criadas na etapa anterior. Será utilizada a arquitetura [http://pt.wikipedia.org/wiki/MVC MVC (Model-View-Controller)]. Consulte o documento [wiki:WF/ArquiteturadeDesenvolvimento Arquitetura de Desenvolvimento] para saber mais detalhes de como a mesma está implementada no Workflow do Expresso. |
206 | | |
207 | | Insira os códigos, lista dos abaixo,nos respectivos arquivos. Utilize, para isso, o editor de códigos Php que já vem embutido no Workflow. (Veja o documento [wiki:WF/Edicaodecodigo Edição de Código]. |
208 | | |
209 | | ==== Atividades ==== |
210 | | |
211 | | '''Avaliar.php''' |
212 | | |
213 | | {{{ |
214 | | |
215 | | <?php |
216 | | |
217 | | $application = new AvaliarController(new AvaliarModel($env), $env); |
218 | | $application->run($_REQUEST['action']); |
219 | | |
220 | | ?> |
221 | | |
222 | | }}} |
223 | | |
224 | | |
225 | | '''Compor_Solicitao.php''' |
226 | | |
227 | | {{{ |
228 | | |
229 | | <?php |
230 | | |
231 | | $application = new ComporSolicitacaoController(new ComporSolicitacaoModel($env), $env); |
232 | | $application->run($_REQUEST['action']); |
233 | | |
234 | | ?> |
235 | | |
236 | | }}} |
237 | | |
238 | | '''Executar.php''' |
239 | | |
240 | | {{{ |
241 | | |
242 | | <?php |
243 | | |
244 | | $application = new ExecutarController(new ExecutarModel($env), $env); |
245 | | $application->run($_REQUEST['action']); |
246 | | |
247 | | ?> |
248 | | |
249 | | }}} |
250 | | |
251 | | '''Informar_Resultado.php''' |
252 | | |
253 | | {{{ |
254 | | |
255 | | <?php |
256 | | |
257 | | $application = new InformarResultadoController(new InformarResultadoModel($env), $env); |
258 | | $application->run($_REQUEST['action']); |
259 | | |
260 | | ?> |
261 | | |
262 | | }}} |
263 | | |
264 | | ==== Templates ==== |
265 | | |
266 | | '''templates/Avaliar.tpl''' |
267 | | |
268 | | {{{ |
269 | | |
270 | | {include file="info_solicitacao.tpl"} |
271 | | |
272 | | <br> |
273 | | <input type="submit" name="action" value="Aprovar" /> |
274 | | <input type="submit" name="action" value="Rejeitar" /> |
275 | | |
276 | | }}} |
277 | | |
278 | | '''templates/Compor_Solicitao.tpl''' |
279 | | |
280 | | {{{ |
281 | | |
282 | | <table> |
283 | | <tr> |
284 | | <td><label>Título</label></td> |
285 | | <td><input type="text" name="titulo" value="{$titulo}" /></td> |
286 | | </tr> |
287 | | <tr> |
288 | | <td><label>Descrição</label></td> |
289 | | <td><textarea name="descricao">{$descricao}</textarea></td> |
290 | | </tr> |
291 | | </table> |
292 | | |
293 | | <input type="submit" name="action" value="Enviar" /> |
294 | | |
295 | | }}} |
296 | | |
297 | | '''templates/Executar.tpl''' |
298 | | |
299 | | {{{ |
300 | | |
301 | | {include file="info_solicitacao.tpl"} |
302 | | |
303 | | <br/> |
304 | | |
305 | | <strong>Procedimento Executado:</strong><br/> |
306 | | <textarea name="procedimento" cols="50" rows="7"></textarea><br/> |
307 | | <input type="submit" name="action" value="Finalizar" /> |
308 | | |
309 | | }}} |
310 | | |
311 | | '''templates/Informar_Resultado.tpl''' |
312 | | |
313 | | {{{ |
314 | | |
315 | | {include file="info_solicitacao.tpl"} |
316 | | <br/> |
317 | | <table> |
318 | | <tr> |
319 | | <td><strong>Mensagem</strong></td> |
320 | | <td>{$mensagem|nl2br}</td> |
321 | | <tr> |
322 | | </table> |
323 | | |
324 | | <input type="submit" name="action" value="Encerrar" /> |
325 | | |
326 | | }}} |
327 | | |
328 | | '''templates/info_solicitacao.tpl''' |
329 | | |
330 | | Por padrão, o Workflow cria um arquivo tpl para cada atividade interativa do processo. O arquivo info_solicitacao.tpl não corresponde a uma atividade, mas sim a um trecho de código que será incluído em outros arquivos tpl. Por isso, não estará na lista de arquivos já existentes, e deverá ser criado através da interface de código, aba templates, da seguinte maneira: |
331 | | |
332 | | 1 - Clique no botão 'Novo template'; |
333 | | |
334 | | 2 - Escolha a opção 'em_branco.tpl'; |
335 | | |
336 | | 3 - Informe o nome do arquivo e clique em OK |
337 | | |
338 | | 4 - Inclua o código abaixo |
339 | | |
340 | | {{{ |
341 | | |
342 | | <table> |
343 | | <tr> |
344 | | <td><strong>Solicitante</strong></td> |
345 | | <td>{$solicitante_desc}</td> |
346 | | </tr> |
347 | | <tr> |
348 | | <td><strong>Data</strong></td> |
349 | | <td>{$data}</td> |
350 | | </tr> |
351 | | <tr> |
352 | | <td><strong>Título</strong></td> |
353 | | <td>{$titulo}</td> |
354 | | </tr> |
355 | | <tr> |
356 | | <td><strong>Descrição</strong></td> |
357 | | <td>{$descricao|nl2br}</td> |
358 | | </tr> |
359 | | </table> |
360 | | |
361 | | }}} |
362 | | |
363 | | ==== Includes ==== |
364 | | |
365 | | Os próximos arquivos devem ser incluídos de forma semelhante como foi feito para o arquivo info_solicitação.tpl anteriormente, só que desta vez será usada a aba includes, da interface de código. Para cada arquivo a ser incluído, execute: |
366 | | |
367 | | 1 - Clique no botão 'Novo Include'; |
368 | | 2 - Escolha a opção 'em_branco.php'; |
369 | | 3 - Informe o nome do arquivo e clique em OK |
370 | | 4 - Inclua o código correspondente |
371 | | |
372 | | '''class.avaliar.controller.inc.php''' |
373 | | |
374 | | {{{ |
375 | | |
376 | | <?php |
377 | | |
378 | | class AvaliarController extends Controller |
379 | | |
380 | | { |
381 | | function __default () |
382 | | { |
383 | | $this->model->defaultAction(); |
384 | | $this->loadViewVars(); |
385 | | $this->showForm($this->AVALIAR); |
386 | | } |
387 | | |
388 | | function aprovar() |
389 | | { |
390 | | $this->model->aprovarAction(); |
391 | | } |
392 | | |
393 | | function rejeitar() |
394 | | { |
395 | | $this->model->rejeitarAction(); |
396 | | } |
397 | | |
398 | | function run($action) |
399 | | { |
400 | | $this->dispatch($action); |
401 | | } |
402 | | |
403 | | } |
404 | | |
405 | | ?> |
406 | | |
407 | | }}} |
408 | | |
409 | | '''class.avaliar.model.inc.php''' |
410 | | |
411 | | {{{ |
412 | | |
413 | | <?php |
414 | | class AvaliarModel extends Model |
415 | | { |
416 | | function defaultAction() |
417 | | { |
418 | | $this->updateAttributes(); |
419 | | $this->addViewVar('titulo', $this->_titulo); |
420 | | $this->addViewVar('descricao', $this->_descricao); |
421 | | $this->addViewVar('data', $this->_data); |
422 | | $this->addViewVar('solicitante_desc', $this->_solicitante_desc); |
423 | | |
424 | | return true; |
425 | | |
426 | | } |
427 | | |
428 | | function aprovarAction() |
429 | | { |
430 | | $this->instance->setNextActivity('Executar'); |
431 | | $this->commitInstance(); |
432 | | |
433 | | return true; |
434 | | |
435 | | } |
436 | | |
437 | | function rejeitarAction() |
438 | | { |
439 | | $this->updateAttributes(); |
440 | | $this->instance->setNextActivity('Informar Resultado'); |
441 | | $this->instance->setNextUser($this->_solicitante); /* devolve a instância para o solicitante */ |
442 | | $this->_mensagem = "Sua solicitação foi rejeitada"; |
443 | | $this->updateInstance(); |
444 | | $this->commitInstance(); |
445 | | |
446 | | return true; |
447 | | |
448 | | } |
449 | | |
450 | | } |
451 | | |
452 | | ?> |
453 | | |
454 | | }}} |
455 | | |
456 | | '''class.compor.solicitacao.controller.inc.php''' |
457 | | |
458 | | {{{ |
459 | | |
460 | | <?php |
461 | | |
462 | | class ComporSolicitacaoController extends Controller |
463 | | { |
464 | | function __default () |
465 | | { |
466 | | $this->model->defaultAction(); |
467 | | $this->loadViewVars(); |
468 | | $this->showForm($this->COMPOR_SOLICITACAO); |
469 | | } |
470 | | |
471 | | function enviar() |
472 | | { |
473 | | $this->model->enviarAction(); |
474 | | $this->loadViewVars(); |
475 | | } |
476 | | |
477 | | |
478 | | function run($action) |
479 | | { |
480 | | $this->dispatch($action); |
481 | | } |
482 | | |
483 | | } |
484 | | |
485 | | ?> |
486 | | |
487 | | }}} |
488 | | |
489 | | '''class.compor.solicitacao.model.inc.php''' |
490 | | |
491 | | {{{ |
492 | | |
493 | | <?php |
494 | | class ComporSolicitacaoModel extends Model |
495 | | { |
496 | | function defaultAction() |
497 | | { |
498 | | return true; |
499 | | } |
500 | | |
501 | | function inputValidate($form) |
502 | | { |
503 | | $msgerro = Array(); |
504 | | |
505 | | /* título não pode ser vazio */ |
506 | | |
507 | | if (isset($form['titulo']) && !empty($form['titulo'])) |
508 | | $this->_titulo = $form['titulo']; |
509 | | else |
510 | | $msgerro[] = 'É necessário fornecer um título'; |
511 | | |
512 | | |
513 | | if (isset($form['descricao']) && !empty($form['descricao'])) |
514 | | $this->_descricao = $form['descricao']; |
515 | | else |
516 | | $msgerro[] = 'É necessário fornecer uma descrição'; |
517 | | |
518 | | return $msgerro; |
519 | | |
520 | | } |
521 | | |
522 | | function enviarAction() |
523 | | { |
524 | | /* se não houve erros */ |
525 | | if (count($this->activity->error = $this->inputValidate($this->request)) == 0) |
526 | | { |
527 | | |
528 | | $this->_solicitante = $this->getWfProperty('wf_user_id'); |
529 | | $this->_solicitante_desc = $this->getWfProperty('wf_user_cnname'); |
530 | | $this->_data = date('d/m/Y Hhi'); |
531 | | $this->updateInstance(); |
532 | | $this->commitInstance(); |
533 | | |
534 | | return true; |
535 | | } |
536 | | else |
537 | | |
538 | | { |
539 | | $this->addViewVar('titulo', $this->_titulo); |
540 | | $this->addViewVar('descricao', $this->_descricao); |
541 | | return false; |
542 | | |
543 | | } |
544 | | |
545 | | } |
546 | | |
547 | | } |
548 | | |
549 | | ?> |
550 | | |
551 | | }}} |
552 | | |
553 | | '''class.controller.inc.php''' |
554 | | |
555 | | {{{ |
556 | | |
557 | | <?php |
558 | | |
559 | | class Controller extends BaseController |
560 | | |
561 | | { |
562 | | |
563 | | var $COMPOR_SOLICITACAO = 'Compor_Solicitao.tpl'; |
564 | | var $AVALIAR = 'Avaliar.tpl'; |
565 | | var $EXECUTAR = 'Executar.tpl'; |
566 | | var $INFORMAR_RESULTADO = 'Informar_Resultado.tpl'; |
567 | | |
568 | | function Controller(&$model , &$env) |
569 | | { |
570 | | |
571 | | $this->super(&$model , &$env); |
572 | | |
573 | | } |
574 | | |
575 | | } |
576 | | |
577 | | ?> |
578 | | |
579 | | }}} |
580 | | |
581 | | '''class.executar.controller.inc.php''' |
582 | | |
583 | | {{{ |
584 | | |
585 | | <?php |
586 | | |
587 | | class ExecutarController extends Controller |
588 | | { |
589 | | function __default () |
590 | | { |
591 | | $this->model->defaultAction(); |
592 | | $this->loadViewVars(); |
593 | | $this->showForm($this->EXECUTAR); |
594 | | |
595 | | } |
596 | | |
597 | | function finalizar() |
598 | | { |
599 | | $this->model->finalizarAction(); |
600 | | |
601 | | } |
602 | | |
603 | | function run($action) |
604 | | |
605 | | { |
606 | | $this->dispatch($action); |
607 | | |
608 | | } |
609 | | |
610 | | } |
611 | | |
612 | | ?> |
613 | | |
614 | | }}} |
615 | | |
616 | | '''class.executar.model.inc.php''' |
617 | | |
618 | | {{{ |
619 | | |
620 | | <?php |
621 | | |
622 | | class ExecutarModel extends Model |
623 | | |
624 | | { |
625 | | function defaultAction() |
626 | | { |
627 | | $this->updateAttributes(); |
628 | | $this->addViewVar('titulo', $this->_titulo); |
629 | | $this->addViewVar('descricao', $this->_descricao); |
630 | | $this->addViewVar('data', $this->_data); |
631 | | $this->addViewVar('solicitante_desc', $this->_solicitante_desc); |
632 | | |
633 | | |
634 | | return true; |
635 | | |
636 | | } |
637 | | |
638 | | function finalizarAction() |
639 | | { |
640 | | $this->updateAttributes(); |
641 | | $this->_mensagem = "Sua solicitação foi atendida pelo técnico " |
642 | | . $this->getWfProperty('wf_user_cnname') |
643 | | . ". |
644 | | <strong>Procedimento executado:</strong> |
645 | | " . $this->request['procedimento']; |
646 | | $this->updateInstance(); |
647 | | $this->instance->setNextUser($this->_solicitante); /* devolve a instância para o solicitante */ |
648 | | $this->commitInstance(); |
649 | | |
650 | | return true; |
651 | | |
652 | | } |
653 | | |
654 | | } |
655 | | |
656 | | ?> |
657 | | |
658 | | }}} |
659 | | |
660 | | '''class.informar.resultado.controller.inc.php''' |
661 | | |
662 | | {{{ |
663 | | |
664 | | <?php |
665 | | |
666 | | class InformarResultadoController extends Controller |
667 | | { |
668 | | function __default () |
669 | | |
670 | | { |
671 | | $this->model->defaultAction(); |
672 | | $this->loadViewVars(); |
673 | | $this->showForm($this->INFORMAR_RESULTADO); |
674 | | } |
675 | | |
676 | | function encerrar() |
677 | | { |
678 | | $this->model->encerrarAction(); |
679 | | } |
680 | | |
681 | | function run($action) |
682 | | { |
683 | | $this->dispatch($action); |
684 | | } |
685 | | |
686 | | } |
687 | | |
688 | | ?> |
689 | | |
690 | | }}} |
691 | | |
692 | | '''class.informar.resultado.model.inc.php''' |
693 | | |
694 | | {{{ |
695 | | |
696 | | <?php |
697 | | class InformarResultadoModel extends Model |
698 | | { |
699 | | function defaultAction() |
700 | | { |
701 | | $this->updateAttributes(); |
702 | | $this->addViewVar('titulo', $this->_titulo); |
703 | | $this->addViewVar('descricao', $this->_descricao); |
704 | | $this->addViewVar('data', $this->_data); |
705 | | $this->addViewVar('solicitante_desc', $this->_solicitante_desc); |
706 | | $this->addViewVar('mensagem', $this->_mensagem); |
707 | | |
708 | | return true; |
709 | | } |
710 | | |
711 | | function encerrarAction() |
712 | | { |
713 | | $this->commitInstance(); |
714 | | return true; |
715 | | } |
716 | | |
717 | | } |
718 | | |
719 | | ?> |
720 | | |
721 | | }}} |
722 | | |
723 | | '''class.model.inc.php''' |
724 | | |
725 | | {{{ |
726 | | |
727 | | <?php |
728 | | class Model extends BaseModel |
729 | | { |
730 | | var $_titulo; |
731 | | var $_descricao; |
732 | | var $_solicitante; |
733 | | var $_solicitante_desc; |
734 | | var $_data; |
735 | | var $_mensagem; |
736 | | |
737 | | function Model(&$env) |
738 | | { |
739 | | $this->super(&$env); |
740 | | |
741 | | } |
742 | | |
743 | | } |
744 | | |
745 | | ?> |
746 | | |
747 | | }}} |
748 | | |
749 | | '''shared.php''' |
750 | | |
751 | | {{{ |
752 | | |
753 | | <?php |
754 | | |
755 | | //camada de controle do processo |
756 | | |
757 | | wf_include('class.controller.inc.php'); |
758 | | wf_include('class.compor.solicitacao.controller.inc.php'); |
759 | | wf_include('class.avaliar.controller.inc.php'); |
760 | | wf_include('class.executar.controller.inc.php'); |
761 | | wf_include('class.informar.resultado.controller.inc.php'); |
762 | | |
763 | | //camada da lógica de negócios |
764 | | |
765 | | wf_include('class.model.inc.php'); |
766 | | wf_include('class.compor.solicitacao.model.inc.php'); |
767 | | wf_include('class.avaliar.model.inc.php'); |
768 | | wf_include('class.executar.model.inc.php'); |
769 | | wf_include('class.informar.resultado.model.inc.php'); |
770 | | |
771 | | ?> |
772 | | |
773 | | }}} |
774 | | |
775 | | ==== Finalização ==== |
776 | | |
777 | | Para finalizar o processo, é necessário compilá-lo e ativá-lo. Para isto,acessamos a interface de Administração de [wiki:WF/Processos Processos], abrimos o nosso processo e clicamos em "Compilação" e depois sem "ativar". Uma vez feito isso,o processo estará disponível aquem tem direito (os que estão nos perfis do processo). |
778 | | |
779 | | Para colocar um ícone que representa o processo, basta inserir uma imagem de 32x32 pixels de nome "icon.png" no diretório resources do processo. |
| 8 | 1. [wiki:WF/tutorialespecificacao] |
| 9 | 1. [wiki:WF/tutorialprojeto] |
| 10 | 1. [wiki:WF/tutorialimplementação] |
| 11 | 1. [wiki:WF/tutorialfinalização] |