| 1 | Neste documento, será abordada uma estratégia para desenvolvimento de um processo de Workflow. Utilizando esta estratégia, será desenvolvido um processo simples. Ao final de cada seção, esta será exemplificada no processo que está sendo desenvolvido. |
| 2 | |
| 3 | |
| 4 | = Desenvolvimento de um Processo = |
| 5 | |
| 6 | O processo de desenvolvimento pode, grosseiramente, ser dividido em três etapas: |
| 7 | |
| 8 | 1. Especificação |
| 9 | 1. Projeto |
| 10 | 1. Implementação |
| 11 | |
| 12 | |
| 13 | == Especificação == |
| 14 | |
| 15 | 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_Documentaçãomínimadeprojeto Documentação mínima do Projeto] |
| 16 | .Ao final desta etapa,o modo como o processo irá funcionar deve estar bem definido. |
| 17 | |
| 18 | |
| 19 | |
| 20 | === Exemplo === |
| 21 | |
| 22 | 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: |
| 23 | |
| 24 | 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; |
| 25 | 1. Caso a solicitação seja rejeitada, o solicitante recebe um e-mail informando sobre sua solicitação. |
| 26 | |
| 27 | ---- |
| 28 | |
| 29 | == Projeto == |
| 30 | |
| 31 | 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. |
| 32 | |
| 33 | |
| 34 | |
| 35 | === Exemplo === |
| 36 | |
| 37 | No nosso exemplo podemos perceber claramente a existência de três perfis: |
| 38 | |
| 39 | 1. Solicitante: grupo de pessoas que podem fazer solicitações; |
| 40 | 1. Distribuidor: grupo de pessoas que avaliam as solicitações; |
| 41 | 1. Técnico: grupo de pessoas que executam as solicitações aprovadas. |
| 42 | |
| 43 | |
| 44 | |
| 45 | As atividades são quatro: |
| 46 | |
| 47 | 1. Compor Solicitação: o perfil "solicitante" faz uma solicitação; |
| 48 | 1. Avaliar: o perfil "distribuidor" avalia a solicitação; |
| 49 | 1. Executar: o perfil "tecnico" executa as solicitações aprovadas; |
| 50 | 1. Informar Resultado: o perfil "solicitante" vê as informações referentes à sua solicitação. |
| 51 | |
| 52 | Possíveis caminhos de execução: |
| 53 | |
| 54 | 1. Compor Solicitação -> Avaliar (Aprovada) -> Executar -> Informar Resultado |
| 55 | 1. Compor Solicitação -> Avaliar (Rejeitada) -> Informar Resultado |
| 56 | |
| 57 | |
| 58 | === Criação do Fluxo === |
| 59 | |
| 60 | 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. |
| 61 | |
| 62 | |
| 63 | 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. |
| 64 | |
| 65 | |
| 66 | |
| 67 | === Exemplo === |
| 68 | |
| 69 | No nosso exemplo, foi criado o seguinte fluxo: |
| 70 | |
| 71 | [[Image(http://doc.workflow.celepar.parana/wiki/tutorial_solicitacoes.png)]] |
| 72 | |
| 73 | |
| 74 | |
| 75 | === Criação do Processo === |
| 76 | |
| 77 | 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. |
| 78 | |
| 79 | |
| 80 | |
| 81 | === Exemplo === |
| 82 | |
| 83 | No nosso exemplo, vamos desenvolver esta etapa na seguinte ordem: |
| 84 | |
| 85 | 1. Criar o Processo; |
| 86 | 1. Criar as Atividades / Transições / Perfis; |
| 87 | 1. Mapear os Perfis. |
| 88 | |
| 89 | |
| 90 | |
| 91 | ==== Criar o processo ==== |
| 92 | |
| 93 | Na interface de Administração de [wiki:WF_Processos Processos], preenchemos: |
| 94 | |
| 95 | Nome do processo: Solicitações |
| 96 | |
| 97 | Descrição: Processo de gerenciamento de solicitações |
| 98 | |
| 99 | Para os outros campos, utilizam-se os valores padrões. |
| 100 | |
| 101 | Clicamos no botão "criar". |
| 102 | |
| 103 | |
| 104 | |
| 105 | ==== Criar as atividades / Transições / Perfis ==== |
| 106 | |
| 107 | Selecione a opção "Atividades". |
| 108 | |
| 109 | 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". |
| 110 | |
| 111 | |
| 112 | |
| 113 | Selecionamos a atividade "start" e, mudamos / preenchemos os seguintes campos: |
| 114 | |
| 115 | Nome: Compor Solicitação |
| 116 | |
| 117 | Descrição: Atividade para o solicitante compor uma solicitação |
| 118 | |
| 119 | Interativa: marcar opção |
| 120 | |
| 121 | Roteamento Automático: marcar opção |
| 122 | |
| 123 | '''Adicionar perfil''' |
| 124 | |
| 125 | Nome: solicitante |
| 126 | |
| 127 | Descrição: autorizados a compor solicitações |
| 128 | |
| 129 | Clicamos em "salvar". |
| 130 | |
| 131 | |
| 132 | |
| 133 | Selecionamos a atividade "end" e, mudamos / preenchemos os seguintes campos: |
| 134 | |
| 135 | Nome: Informar Resultado |
| 136 | |
| 137 | Descrição: Atividade para informar o solicitante sobre sua solicitação |
| 138 | |
| 139 | Interativa: marcar opção |
| 140 | |
| 141 | Roteamento Automático: marcar opção |
| 142 | |
| 143 | '''Usar perfis existentes''' |
| 144 | |
| 145 | Selecionar "solicitante" |
| 146 | |
| 147 | Clicamos em "salvar". |
| 148 | |
| 149 | |
| 150 | |
| 151 | Clicamos em "novo". |
| 152 | |
| 153 | Preenchemos os seguintes campos: |
| 154 | |
| 155 | Nome: Executar |
| 156 | |
| 157 | Descrição: Atividade para o técnico executar uma solicitação |
| 158 | |
| 159 | Tipo: activity |
| 160 | |
| 161 | Interativa: marcar opção |
| 162 | |
| 163 | Roteamento Automático: marcar opção |
| 164 | |
| 165 | '''Adicionar Transições''' |
| 166 | |
| 167 | : Adicionar transições para: "Informar Resultado" |
| 168 | |
| 169 | '''Adicionar perfil''' |
| 170 | |
| 171 | : Nome: tecnico |
| 172 | |
| 173 | : Descrição: autorizados a executar solicitações |
| 174 | |
| 175 | Clicamos em "salvar". |
| 176 | |
| 177 | |
| 178 | |
| 179 | Clicamos em "novo". |
| 180 | |
| 181 | Preenchemos os seguintes campos: |
| 182 | |
| 183 | Nome: Avaliar |
| 184 | |
| 185 | Descrição: Atividade para o distribuidor avaliar uma solicitação |
| 186 | |
| 187 | Tipo: switch |
| 188 | |
| 189 | Interativa: marcar opção |
| 190 | |
| 191 | Roteamento Automático: marcar opção |
| 192 | |
| 193 | '''Adicionar Transições''' |
| 194 | |
| 195 | : Adicionar transições de: "Compor Solicitação" |
| 196 | |
| 197 | : Adicionar transições para: "Executar" e "Informar Resultado" |
| 198 | |
| 199 | '''Adicionar perfil''' |
| 200 | |
| 201 | : Nome: distribuidor |
| 202 | |
| 203 | : Descrição: autorizados a avaliar solicitações |
| 204 | |
| 205 | Clicamos em "salvar". |
| 206 | |
| 207 | |
| 208 | |
| 209 | ==== Mapear os Perfis ==== |
| 210 | |
| 211 | Clicamos em "Perfis" |
| 212 | |
| 213 | 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". |
| 214 | |
| 215 | Para finalizar, basta repetir este mesmo passo para os outros dois perfis. |
| 216 | |
| 217 | ---- |
| 218 | |
| 219 | |
| 220 | |
| 221 | == Implementação == |
| 222 | |
| 223 | Nestaetapaéfeitaacodificaçãodasatividadesqueforamcriadasnaetapaanterior.Seráutilizadaaarquitetura[http://pt.wikipedia.org/wiki/MVCMVC](''Model-View-Controller'').Consulteodocumento[wiki:WF_MetodologiadeDesenvolvimento] |
| 224 | parasabermaisdetalhesdecomoaarquiteturaMVCestáimplementadanoWorkflowdoExpresso. |
| 225 | |
| 226 | |
| 227 | |
| 228 | === Exemplo === |
| 229 | |
| 230 | Insiraoscódigos,listadosabaixo,nosrespectivosarquivos.Utilize,paraisso,oeditordecódigosPhpquejávemembutidonoWorkflow.(Vejaodocumento[wiki:WF_Ediçãodecódigo)] |
| 231 | . |
| 232 | |
| 233 | |
| 234 | |
| 235 | ==== Atividades ==== |
| 236 | |
| 237 | '''Avaliar.php''' |
| 238 | |
| 239 | {{{ |
| 240 | |
| 241 | <?php |
| 242 | |
| 243 | $application = new AvaliarController(new AvaliarModel($env), $env); |
| 244 | |
| 245 | $application->run($_REQUEST['action']); |
| 246 | |
| 247 | ?> |
| 248 | |
| 249 | }}} |
| 250 | |
| 251 | |
| 252 | |
| 253 | '''Compor_Solicitao.php''' |
| 254 | |
| 255 | {{{ |
| 256 | |
| 257 | <?php |
| 258 | |
| 259 | $application = new ComporSolicitacaoController(new ComporSolicitacaoModel($env), $env); |
| 260 | |
| 261 | $application->run($_REQUEST['action']); |
| 262 | |
| 263 | ?> |
| 264 | |
| 265 | }}} |
| 266 | |
| 267 | |
| 268 | |
| 269 | '''Executar.php''' |
| 270 | |
| 271 | {{{ |
| 272 | |
| 273 | <?php |
| 274 | |
| 275 | $application = new ExecutarController(new ExecutarModel($env), $env); |
| 276 | |
| 277 | $application->run($_REQUEST['action']); |
| 278 | |
| 279 | ?> |
| 280 | |
| 281 | }}} |
| 282 | |
| 283 | |
| 284 | |
| 285 | '''Informar_Resultado.php''' |
| 286 | |
| 287 | {{{ |
| 288 | |
| 289 | <?php |
| 290 | |
| 291 | $application = new InformarResultadoController(new InformarResultadoModel($env), $env); |
| 292 | |
| 293 | $application->run($_REQUEST['action']); |
| 294 | |
| 295 | ?> |
| 296 | |
| 297 | }}} |
| 298 | |
| 299 | |
| 300 | |
| 301 | |
| 302 | |
| 303 | ==== Templates ==== |
| 304 | |
| 305 | '''templates/Avaliar.tpl''' |
| 306 | |
| 307 | {{{ |
| 308 | |
| 309 | {include file="info_solicitacao.tpl"} |
| 310 | |
| 311 | <br> |
| 312 | |
| 313 | <input type="submit" name="action" value="Aprovar" /> |
| 314 | |
| 315 | <input type="submit" name="action" value="Rejeitar" /> |
| 316 | |
| 317 | }}} |
| 318 | |
| 319 | |
| 320 | |
| 321 | '''templates/Compor_Solicitao.tpl''' |
| 322 | |
| 323 | {{{ |
| 324 | |
| 325 | <table> |
| 326 | |
| 327 | <tr> |
| 328 | |
| 329 | <td><label>Título</label></td> |
| 330 | |
| 331 | <td><input type="text" name="titulo" value="{$titulo}" /></td> |
| 332 | |
| 333 | </tr> |
| 334 | |
| 335 | <tr> |
| 336 | |
| 337 | <td><label>Descrição</label></td> |
| 338 | |
| 339 | <td><textarea name="descricao">{$descricao}</textarea></td> |
| 340 | |
| 341 | </tr> |
| 342 | |
| 343 | </table> |
| 344 | |
| 345 | <input type="submit" name="action" value="Enviar" /> |
| 346 | |
| 347 | }}} |
| 348 | |
| 349 | |
| 350 | |
| 351 | '''templates/Executar.tpl''' |
| 352 | |
| 353 | {{{ |
| 354 | |
| 355 | {include file="info_solicitacao.tpl"} |
| 356 | |
| 357 | <br/> |
| 358 | |
| 359 | <strong>Procedimento Executado:</strong><br/> |
| 360 | |
| 361 | <textarea name="procedimento" cols="50" rows="7"></textarea><br/> |
| 362 | |
| 363 | <input type="submit" name="action" value="Finalizar" /> |
| 364 | |
| 365 | }}} |
| 366 | |
| 367 | |
| 368 | |
| 369 | '''templates/Informar_Resultado.tpl''' |
| 370 | |
| 371 | {{{ |
| 372 | |
| 373 | {include file="info_solicitacao.tpl"} |
| 374 | |
| 375 | <br/> |
| 376 | |
| 377 | <table> |
| 378 | |
| 379 | <tr> |
| 380 | |
| 381 | <td><strong>Mensagem</strong></td> |
| 382 | |
| 383 | <td>{$mensagem|nl2br}</td> |
| 384 | |
| 385 | <tr> |
| 386 | |
| 387 | </table> |
| 388 | |
| 389 | <input type="submit" name="action" value="Encerrar" /> |
| 390 | |
| 391 | }}} |
| 392 | |
| 393 | |
| 394 | |
| 395 | '''templates/info_solicitacao.tpl''' |
| 396 | |
| 397 | |
| 398 | |
| 399 | 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: |
| 400 | |
| 401 | :1 - Clique no botão 'Novo template'; |
| 402 | |
| 403 | :2 - Escolha a opção 'em_branco.tpl'; |
| 404 | |
| 405 | :3 - Informe o nome do arquivo e clique em OK |
| 406 | |
| 407 | :4 - Inclua o código abaixo |
| 408 | |
| 409 | {{{ |
| 410 | |
| 411 | <table> |
| 412 | |
| 413 | <tr> |
| 414 | |
| 415 | <td><strong>Solicitante</strong></td> |
| 416 | |
| 417 | <td>{$solicitante_desc}</td> |
| 418 | |
| 419 | </tr> |
| 420 | |
| 421 | <tr> |
| 422 | |
| 423 | <td><strong>Data</strong></td> |
| 424 | |
| 425 | <td>{$data}</td> |
| 426 | |
| 427 | </tr> |
| 428 | |
| 429 | <tr> |
| 430 | |
| 431 | <td><strong>Título</strong></td> |
| 432 | |
| 433 | <td>{$titulo}</td> |
| 434 | |
| 435 | </tr> |
| 436 | |
| 437 | <tr> |
| 438 | |
| 439 | <td><strong>Descrição</strong></td> |
| 440 | |
| 441 | <td>{$descricao|nl2br}</td> |
| 442 | |
| 443 | </tr> |
| 444 | |
| 445 | </table> |
| 446 | |
| 447 | }}} |
| 448 | |
| 449 | |
| 450 | |
| 451 | |
| 452 | |
| 453 | ==== Includes ==== |
| 454 | |
| 455 | |
| 456 | |
| 457 | 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: |
| 458 | |
| 459 | :1 - Clique no botão 'Novo Include'; |
| 460 | |
| 461 | :2 - Escolha a opção 'em_branco.php'; |
| 462 | |
| 463 | :3 - Informe o nome do arquivo e clique em OK |
| 464 | |
| 465 | :4 - Inclua o código correspondente |
| 466 | |
| 467 | |
| 468 | |
| 469 | '''class.avaliar.controller.inc.php''' |
| 470 | |
| 471 | {{{ |
| 472 | |
| 473 | <?php |
| 474 | |
| 475 | class AvaliarController extends Controller |
| 476 | |
| 477 | { |
| 478 | |
| 479 | function __default () |
| 480 | |
| 481 | { |
| 482 | |
| 483 | $this->model->defaultAction(); |
| 484 | |
| 485 | $this->loadViewVars(); |
| 486 | |
| 487 | $this->showForm($this->AVALIAR); |
| 488 | |
| 489 | } |
| 490 | |
| 491 | |
| 492 | |
| 493 | function aprovar() |
| 494 | |
| 495 | { |
| 496 | |
| 497 | $this->model->aprovarAction(); |
| 498 | |
| 499 | } |
| 500 | |
| 501 | |
| 502 | |
| 503 | function rejeitar() |
| 504 | |
| 505 | { |
| 506 | |
| 507 | $this->model->rejeitarAction(); |
| 508 | |
| 509 | } |
| 510 | |
| 511 | |
| 512 | |
| 513 | function run($action) |
| 514 | |
| 515 | { |
| 516 | |
| 517 | $this->dispatch($action); |
| 518 | |
| 519 | } |
| 520 | |
| 521 | } |
| 522 | |
| 523 | ?> |
| 524 | |
| 525 | }}} |
| 526 | |
| 527 | |
| 528 | |
| 529 | '''class.avaliar.model.inc.php''' |
| 530 | |
| 531 | {{{ |
| 532 | |
| 533 | <?php |
| 534 | |
| 535 | class AvaliarModel extends Model |
| 536 | |
| 537 | { |
| 538 | |
| 539 | function defaultAction() |
| 540 | |
| 541 | { |
| 542 | |
| 543 | $this->updateAttributes(); |
| 544 | |
| 545 | $this->addViewVar('titulo', $this->_titulo); |
| 546 | |
| 547 | $this->addViewVar('descricao', $this->_descricao); |
| 548 | |
| 549 | $this->addViewVar('data', $this->_data); |
| 550 | |
| 551 | $this->addViewVar('solicitante_desc', $this->_solicitante_desc); |
| 552 | |
| 553 | |
| 554 | |
| 555 | return true; |
| 556 | |
| 557 | } |
| 558 | |
| 559 | |
| 560 | |
| 561 | function aprovarAction() |
| 562 | |
| 563 | { |
| 564 | |
| 565 | $this->instance->setNextActivity('Executar'); |
| 566 | |
| 567 | $this->commitInstance(); |
| 568 | |
| 569 | |
| 570 | |
| 571 | return true; |
| 572 | |
| 573 | } |
| 574 | |
| 575 | |
| 576 | |
| 577 | function rejeitarAction() |
| 578 | |
| 579 | { |
| 580 | |
| 581 | $this->updateAttributes(); |
| 582 | |
| 583 | $this->instance->setNextActivity('Informar Resultado'); |
| 584 | |
| 585 | $this->instance->setNextUser($this->_solicitante); /* devolve a instância para o solicitante */ |
| 586 | |
| 587 | $this->_mensagem = "Sua solicitação foi rejeitada"; |
| 588 | |
| 589 | $this->updateInstance(); |
| 590 | |
| 591 | $this->commitInstance(); |
| 592 | |
| 593 | |
| 594 | |
| 595 | return true; |
| 596 | |
| 597 | } |
| 598 | |
| 599 | } |
| 600 | |
| 601 | ?> |
| 602 | |
| 603 | }}} |
| 604 | |
| 605 | |
| 606 | |
| 607 | '''class.compor.solicitacao.controller.inc.php''' |
| 608 | |
| 609 | {{{ |
| 610 | |
| 611 | <?php |
| 612 | |
| 613 | class ComporSolicitacaoController extends Controller |
| 614 | |
| 615 | { |
| 616 | |
| 617 | function __default () |
| 618 | |
| 619 | { |
| 620 | |
| 621 | $this->model->defaultAction(); |
| 622 | |
| 623 | $this->loadViewVars(); |
| 624 | |
| 625 | $this->showForm($this->COMPOR_SOLICITACAO); |
| 626 | |
| 627 | } |
| 628 | |
| 629 | |
| 630 | |
| 631 | function enviar() |
| 632 | |
| 633 | { |
| 634 | |
| 635 | $this->model->enviarAction(); |
| 636 | |
| 637 | $this->loadViewVars(); |
| 638 | |
| 639 | } |
| 640 | |
| 641 | |
| 642 | |
| 643 | function run($action) |
| 644 | |
| 645 | { |
| 646 | |
| 647 | $this->dispatch($action); |
| 648 | |
| 649 | } |
| 650 | |
| 651 | } |
| 652 | |
| 653 | ?> |
| 654 | |
| 655 | }}} |
| 656 | |
| 657 | |
| 658 | |
| 659 | '''class.compor.solicitacao.model.inc.php''' |
| 660 | |
| 661 | {{{ |
| 662 | |
| 663 | <?php |
| 664 | |
| 665 | class ComporSolicitacaoModel extends Model |
| 666 | |
| 667 | { |
| 668 | |
| 669 | function defaultAction() |
| 670 | |
| 671 | { |
| 672 | |
| 673 | return true; |
| 674 | |
| 675 | } |
| 676 | |
| 677 | |
| 678 | |
| 679 | function inputValidate($form) |
| 680 | |
| 681 | { |
| 682 | |
| 683 | $msgerro = Array(); |
| 684 | |
| 685 | |
| 686 | |
| 687 | /* título não pode ser vazio */ |
| 688 | |
| 689 | if (isset($form['titulo']) && !empty($form['titulo'])) |
| 690 | |
| 691 | $this->_titulo = $form['titulo']; |
| 692 | |
| 693 | else |
| 694 | |
| 695 | $msgerro[] = 'É necessário fornecer um título'; |
| 696 | |
| 697 | |
| 698 | |
| 699 | if (isset($form['descricao']) && !empty($form['descricao'])) |
| 700 | |
| 701 | $this->_descricao = $form['descricao']; |
| 702 | |
| 703 | else |
| 704 | |
| 705 | $msgerro[] = 'É necessário fornecer uma descrição'; |
| 706 | |
| 707 | |
| 708 | |
| 709 | return $msgerro; |
| 710 | |
| 711 | } |
| 712 | |
| 713 | |
| 714 | |
| 715 | function enviarAction() |
| 716 | |
| 717 | { |
| 718 | |
| 719 | /* se não houve erros */ |
| 720 | |
| 721 | if (count($this->activity->error = $this->inputValidate($this->request)) == 0) |
| 722 | |
| 723 | { |
| 724 | |
| 725 | $this->_solicitante = $this->getWfProperty('wf_user_id'); |
| 726 | |
| 727 | $this->_solicitante_desc = $this->getWfProperty('wf_user_cnname'); |
| 728 | |
| 729 | $this->_data = date('d/m/Y Hhi'); |
| 730 | |
| 731 | $this->updateInstance(); |
| 732 | |
| 733 | $this->commitInstance(); |
| 734 | |
| 735 | return true; |
| 736 | |
| 737 | } |
| 738 | |
| 739 | else |
| 740 | |
| 741 | { |
| 742 | |
| 743 | $this->addViewVar('titulo', $this->_titulo); |
| 744 | |
| 745 | $this->addViewVar('descricao', $this->_descricao); |
| 746 | |
| 747 | return false; |
| 748 | |
| 749 | } |
| 750 | |
| 751 | } |
| 752 | |
| 753 | } |
| 754 | |
| 755 | ?> |
| 756 | |
| 757 | }}} |
| 758 | |
| 759 | |
| 760 | |
| 761 | '''class.controller.inc.php''' |
| 762 | |
| 763 | {{{ |
| 764 | |
| 765 | <?php |
| 766 | |
| 767 | class Controller extends BaseController |
| 768 | |
| 769 | { |
| 770 | |
| 771 | var $COMPOR_SOLICITACAO = 'Compor_Solicitao.tpl'; |
| 772 | |
| 773 | var $AVALIAR = 'Avaliar.tpl'; |
| 774 | |
| 775 | var $EXECUTAR = 'Executar.tpl'; |
| 776 | |
| 777 | var $INFORMAR_RESULTADO = 'Informar_Resultado.tpl'; |
| 778 | |
| 779 | |
| 780 | |
| 781 | function Controller(&$model , &$env) |
| 782 | |
| 783 | { |
| 784 | |
| 785 | $this->super(&$model , &$env); |
| 786 | |
| 787 | } |
| 788 | |
| 789 | } |
| 790 | |
| 791 | ?> |
| 792 | |
| 793 | }}} |
| 794 | |
| 795 | |
| 796 | |
| 797 | '''class.executar.controller.inc.php''' |
| 798 | |
| 799 | {{{ |
| 800 | |
| 801 | <?php |
| 802 | |
| 803 | class ExecutarController extends Controller |
| 804 | |
| 805 | { |
| 806 | |
| 807 | function __default () |
| 808 | |
| 809 | { |
| 810 | |
| 811 | $this->model->defaultAction(); |
| 812 | |
| 813 | $this->loadViewVars(); |
| 814 | |
| 815 | $this->showForm($this->EXECUTAR); |
| 816 | |
| 817 | } |
| 818 | |
| 819 | |
| 820 | |
| 821 | function finalizar() |
| 822 | |
| 823 | { |
| 824 | |
| 825 | $this->model->finalizarAction(); |
| 826 | |
| 827 | } |
| 828 | |
| 829 | |
| 830 | |
| 831 | function run($action) |
| 832 | |
| 833 | { |
| 834 | |
| 835 | $this->dispatch($action); |
| 836 | |
| 837 | } |
| 838 | |
| 839 | } |
| 840 | |
| 841 | ?> |
| 842 | |
| 843 | }}} |
| 844 | |
| 845 | |
| 846 | |
| 847 | '''class.executar.model.inc.php''' |
| 848 | |
| 849 | {{{ |
| 850 | |
| 851 | <?php |
| 852 | |
| 853 | class ExecutarModel extends Model |
| 854 | |
| 855 | { |
| 856 | |
| 857 | function defaultAction() |
| 858 | |
| 859 | { |
| 860 | |
| 861 | $this->updateAttributes(); |
| 862 | |
| 863 | $this->addViewVar('titulo', $this->_titulo); |
| 864 | |
| 865 | $this->addViewVar('descricao', $this->_descricao); |
| 866 | |
| 867 | $this->addViewVar('data', $this->_data); |
| 868 | |
| 869 | $this->addViewVar('solicitante_desc', $this->_solicitante_desc); |
| 870 | |
| 871 | |
| 872 | |
| 873 | return true; |
| 874 | |
| 875 | } |
| 876 | |
| 877 | |
| 878 | |
| 879 | function finalizarAction() |
| 880 | |
| 881 | { |
| 882 | |
| 883 | $this->updateAttributes(); |
| 884 | |
| 885 | $this->_mensagem = "Sua solicitação foi atendida pelo técnico " |
| 886 | |
| 887 | . $this->getWfProperty('wf_user_cnname') |
| 888 | |
| 889 | . ". |
| 890 | <strong>Procedimento executado:</strong> |
| 891 | " . $this->request['procedimento']; |
| 892 | |
| 893 | $this->updateInstance(); |
| 894 | |
| 895 | $this->instance->setNextUser($this->_solicitante); /* devolve a instância para o solicitante */ |
| 896 | |
| 897 | $this->commitInstance(); |
| 898 | |
| 899 | |
| 900 | |
| 901 | return true; |
| 902 | |
| 903 | } |
| 904 | |
| 905 | } |
| 906 | |
| 907 | ?> |
| 908 | |
| 909 | }}} |
| 910 | |
| 911 | |
| 912 | |
| 913 | '''class.informar.resultado.controller.inc.php''' |
| 914 | |
| 915 | {{{ |
| 916 | |
| 917 | <?php |
| 918 | |
| 919 | class InformarResultadoController extends Controller |
| 920 | |
| 921 | { |
| 922 | |
| 923 | function __default () |
| 924 | |
| 925 | { |
| 926 | |
| 927 | $this->model->defaultAction(); |
| 928 | |
| 929 | $this->loadViewVars(); |
| 930 | |
| 931 | $this->showForm($this->INFORMAR_RESULTADO); |
| 932 | |
| 933 | } |
| 934 | |
| 935 | |
| 936 | |
| 937 | function encerrar() |
| 938 | |
| 939 | { |
| 940 | |
| 941 | $this->model->encerrarAction(); |
| 942 | |
| 943 | } |
| 944 | |
| 945 | |
| 946 | |
| 947 | function run($action) |
| 948 | |
| 949 | { |
| 950 | |
| 951 | $this->dispatch($action); |
| 952 | |
| 953 | } |
| 954 | |
| 955 | } |
| 956 | |
| 957 | ?> |
| 958 | |
| 959 | }}} |
| 960 | |
| 961 | |
| 962 | |
| 963 | '''class.informar.resultado.model.inc.php''' |
| 964 | |
| 965 | {{{ |
| 966 | |
| 967 | <?php |
| 968 | |
| 969 | class InformarResultadoModel extends Model |
| 970 | |
| 971 | { |
| 972 | |
| 973 | function defaultAction() |
| 974 | |
| 975 | { |
| 976 | |
| 977 | $this->updateAttributes(); |
| 978 | |
| 979 | $this->addViewVar('titulo', $this->_titulo); |
| 980 | |
| 981 | $this->addViewVar('descricao', $this->_descricao); |
| 982 | |
| 983 | $this->addViewVar('data', $this->_data); |
| 984 | |
| 985 | $this->addViewVar('solicitante_desc', $this->_solicitante_desc); |
| 986 | |
| 987 | $this->addViewVar('mensagem', $this->_mensagem); |
| 988 | |
| 989 | |
| 990 | |
| 991 | return true; |
| 992 | |
| 993 | } |
| 994 | |
| 995 | |
| 996 | |
| 997 | function encerrarAction() |
| 998 | |
| 999 | { |
| 1000 | |
| 1001 | $this->commitInstance(); |
| 1002 | |
| 1003 | |
| 1004 | |
| 1005 | return true; |
| 1006 | |
| 1007 | } |
| 1008 | |
| 1009 | } |
| 1010 | |
| 1011 | ?> |
| 1012 | |
| 1013 | }}} |
| 1014 | |
| 1015 | |
| 1016 | |
| 1017 | '''class.model.inc.php''' |
| 1018 | |
| 1019 | {{{ |
| 1020 | |
| 1021 | <?php |
| 1022 | |
| 1023 | class Model extends BaseModel |
| 1024 | |
| 1025 | { |
| 1026 | |
| 1027 | var $_titulo; |
| 1028 | |
| 1029 | var $_descricao; |
| 1030 | |
| 1031 | var $_solicitante; |
| 1032 | |
| 1033 | var $_solicitante_desc; |
| 1034 | |
| 1035 | var $_data; |
| 1036 | |
| 1037 | var $_mensagem; |
| 1038 | |
| 1039 | |
| 1040 | |
| 1041 | function Model(&$env) |
| 1042 | |
| 1043 | { |
| 1044 | |
| 1045 | $this->super(&$env); |
| 1046 | |
| 1047 | } |
| 1048 | |
| 1049 | } |
| 1050 | |
| 1051 | ?> |
| 1052 | |
| 1053 | }}} |
| 1054 | |
| 1055 | |
| 1056 | |
| 1057 | '''shared.php''' |
| 1058 | |
| 1059 | {{{ |
| 1060 | |
| 1061 | <?php |
| 1062 | |
| 1063 | //camada de controle do processo |
| 1064 | |
| 1065 | wf_include('class.controller.inc.php'); |
| 1066 | |
| 1067 | wf_include('class.compor.solicitacao.controller.inc.php'); |
| 1068 | |
| 1069 | wf_include('class.avaliar.controller.inc.php'); |
| 1070 | |
| 1071 | wf_include('class.executar.controller.inc.php'); |
| 1072 | |
| 1073 | wf_include('class.informar.resultado.controller.inc.php'); |
| 1074 | |
| 1075 | |
| 1076 | |
| 1077 | //camada da lógica de negócios |
| 1078 | |
| 1079 | wf_include('class.model.inc.php'); |
| 1080 | |
| 1081 | wf_include('class.compor.solicitacao.model.inc.php'); |
| 1082 | |
| 1083 | wf_include('class.avaliar.model.inc.php'); |
| 1084 | |
| 1085 | wf_include('class.executar.model.inc.php'); |
| 1086 | |
| 1087 | wf_include('class.informar.resultado.model.inc.php'); |
| 1088 | |
| 1089 | ?> |
| 1090 | |
| 1091 | }}} |
| 1092 | |
| 1093 | |
| 1094 | |
| 1095 | |
| 1096 | |
| 1097 | ==== Finalização ==== |
| 1098 | |
| 1099 | Para finalizar o processo,é necessário compilá-lo e ativá-lo.Para isto,acessamos a interface de Administração de [wiki:WF_Processos Processos] |
| 1100 | ,abrimos o nosso processo e clicamos em "Compilação" e depoi sem "ativar".Uma vez feito isso,o processo estará disponível aquem tem direito(os que estão nos perfis do processo). |
| 1101 | |
| 1102 | 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. |