wiki:WF/Criacaodenovasinstancias

Version 5 (modified by viani, 16 years ago) (diff)

--

CRIAÇÃO DE NOVAS INSTÂNCIAS A PARTIR DE STANDALONES / OUTRAS INSTÂNCIAS

WikiInclude(WF/tableofcontents)?

Através de modificações feitas na engine do Workflow, foi disponibilizada a possibilidade de criar novas instâncias a partir de uma outra instância ou a partir de atividades standalone.

A criação destas instâncias tem como base a simulação da ação do usuário em uma atividade start.

Por exemplo, supondo que para finalizar a atividade "Compor Solicitação", do tipo start, o usuário precise fornecer um título e uma descrição para a solicitação e executar a ação "Enviar". O código abaixo representa dois métodos da model da atividade "Compor Solicitação":

function validar()
{
	$erros = array();
	if (empty($this->_titulo))
		$erros[] = "Insira um título";
	if (empty($this->_descricao))
		$erros[] = "Insira uma descrição";
	return $erros;
}

function enviarAction()
{
	if (count($this->activity->error = $this->validar()) == 0)
	{
		/* salva os dados e
		finaliza a instância */
	}
	else
		return false;
}

Neste caso se quisermos, a partir de uma standalone, criar instâncias com base na atividade start "Compor Solicitação", devemos simular a ação do usuário no ato de composição de solicitação. Isto pode ser feito da seguinte forma (para o caso citado), na model.

$_REQUEST['action'] = 'enviar';
$_REQUEST['_titulo'] = 'meu título';
$_REQUEST['_descricao'] = 'minha descrição';

A chamada que faz a simulação para a atividade "Compor Solicitação", pode ser vista abaixo (chamada na model):

$this->instance->createChildInstance('Compor Solicitação');

Assim sendo, o código completo que coloca os dados desejados e simula a ação "Enviar" da atividade "Compor Solicitação" fica assim:

$_REQUEST['action'] = 'enviar';
$_REQUEST['_titulo'] = 'meu título';
$_REQUEST['_descricao'] = 'minha descrição';

$this->instance->createChildInstance('Compor Solicitação');

Também é possível fazer um loop para a criação de várias instâncias. Por exemplo:

function criarAction()
{
        $_REQUEST['action'] = 'enviar';
        for ($i = 0; $i < 3; $i++)
        {
            $_REQUEST['_titulo'] = 'meu título: ' . date("H\hi\ms\s");
            $_REQUEST['_descricao'] = 'descrição';
            $this->instance->createChildInstance('Compor Solicitação');
        }
}

Outros parâmetros disponíveis para o {{createChildInstance}} podem ser vistos na Documentação do código fonte do Workflow, gerada com phpDocumentor