<objeto>.copyAll(<origem>)
Copia os valores de todas as propriedades de um objeto para outro. Considerando os seguintes itens:
- A ordem de cópia é definida da seguinte forma:
- Se ambos os objetos possuem metadados definidos, a cópia é feita com base nas propriedades do elemento de <destino>.
- Se algum dos dois possuem metadados definidos, a cópia é realizada do objeto que possuir o metadados definido.
- Nenhum dos dois possuem metadados, nesse caso são levadas em considerações também as propriedades conhecidas de cada um dos objetos. Conforme tabela abaixo:
- Uma vez definido o objeto que será utilizado para realizar a cópia:
- As propriedades que por ventura não existirem em ambos os objetos, serão ignoradas.
- As propriedades que existirem em apenas um dos objetos, serão modificadas.
- Se alguma propriedade existente nos dois objetos for incompatível, é apresentado erro de acesso com tipo inválido.
- A cópia considera recursividade.
| <destino> | <origem> | ||||||||||||||
| Metadados definidos | Sem definição | ||||||||||||||
| Metadados definidos | <destino> | <destino> | |||||||||||||
| Sem definição | <origem> |
Depende se os objetos de origem e destino tem propriedades conhecidas*.
Essa exceção é sempre aplicada quando nenhum dos objetos, origem e destino, possuem definição de metadados e, dessa forma, é necessário verificar em cada objeto se eles possuem ou não tipos conhecidos. Quando o objeto de <destino> for conhecido é necessário ajustar comportamento. |
|||||||||||||
Nota
Propriedades conhecidas são propriedades dinâmicas que por algum motivo é possível identificar o seu tipo, seja pela sua definição ou tentativa de acesso por parte do desenvolvedor. A identificação do seu tipo pode acontecer a partir dos seguintes casos:
- Variáveis locais já criadas. Por padrão variáveis locais não são conhecidas, todavia, quando criadas, passam a serem conhecidas. Isso pois, para cria-las, é necessário definir informações da variável, tais como “nome” e “tipo”.
- Propriedades em objetos sem definição de metadados que forem acessados. O acesso a um objeto, que até então, não possuía tipo definido, faz com que o seu tipo seja definido. Por exemplo, ao tentar acessar uma propriedade do retorno do executor, que por padrão não tem metadados definidos, é necessário definir um tipo para a busca dessa propriedade. A definição desse tipo para buscar o dado, define que esse é do tipo definido. A seguir estamos definindo que a variável de nome “usuário” é de um tipo conhecido, String: context.getTask().getOutput().getString(“usuario”)
Para saber quais são os objetos que possuem metadados definidos ou não consulte a tabela a seguir. Considerando que, o objeto citado abaixo é sempre o objeto retornado pela chamada das funções listadas abaixo.
| Função | Possui metadados definido |
| context.getVars(): <objeto> | Sim |
| context.getTask().getLocalVars(): <objeto> |
Não: quando adicionada variável. Sim: quando for alterado o valor de uma variável definida anteriormente. |
| context.getTask().getInput(): <objeto> | Não |
| context.getTask().getOutput(): <objeto> | Não |
| context.utils.newWSMD.getInput(): <objeto> | Não |
| context.utils.newWSMD.getOutput(): <objeto> | Não |
Sintaxe: <objeto>.copyAll(<origem>)
Parâmetros:
| Nome | Tipo | Descrição |
| origem | Object | Objeto que será copiado ou receberá a copia de acordo com as regras acima. |
Tipo de retorno: Sem retorno.
Exemplo de utilização:
Para ajudar a entender esses conceitos de objetos com metadados ou não, de propriedades conhecidas ou não, e ver como isso realmente funciona na prática. Seguem abaixo uma série de exemplos que atendem a maioria das possibilidades apresentadas na primeira tabela (sobre “Definição de metadados”).
Para facilitar a identificação, cada um dos exemplo possui a definição do objeto como sendo:
- Com definição de metadados: (CM)
- Sem definição de metadados: (SM)
- Com propriedades conhecidas: (PC)
- Com propriedades desconhecidas: (PD)
Variáveis de processo:
- Nome: String
- CPF: Long
Parâmetros de entrada do executor: Não definida
Script:
var task = context.getTask();
var vars = context.getVars();
task.getInput().copyAll(vars);
Resultado:
São copiadas as variáveis do processo para o objeto de entrada do executor.
Todas as variáveis são criadas com sucesso no objeto do executor.
Parâmetros de retorno do executor:
- Resultado: Tipo desconhecido
- Erros: Tipo desconhecido
Variáveis de processo:
- Produto: String
- Valor: Long
- Resultado: String
Script:
var task = context.getTask();
var vars = context.getVars();
vars.copyAll(task.getOutput());
Resultado: São copiadas as propriedades do objeto de retorno para as variáveis do processo, conforme detalhes abaixo:
- Resultado: copiado para variáveis do processo.
- Erros: ignorado. Não é copiado pois não existe a mesma variáveis do objeto de destino – as variáveis do processo.
- Produto: ignorada. Não altera seu conteúdo.
- Valor: ignorada. Não altera seu conteúdo.
Parâmetros de retorno do executor:
- Resultado: Tipo desconhecido
- Erros: Tipo desconhecido
Variáveis locais:
- Produto: String
- Valor: Long
- Resultado: String
Script:
var task = context.getTask();
var localVars = context.getTask().getLocalVars();
localVars.copyAll(task.getOutput());
Resultado: São copiadas as propriedades do objeto de retorno para as variáveis locais, conforme detalhes abaixo:
- Resultado: copiado para variáveis locais.
- Erros: ignorado. Não é copiado pois não existe a mesma variáveis do objeto de destino (nas variáveis locais).
- Produto: ignorada. Não altera seu conteúdo.
- Valor: ignorada. Não altera seu conteúdo.
Parâmetros de entrada do WSMD: Não definido
Retorno do executor:
- Resultado : Tipo desconhecido
Script:
var task = context.getTask();
var ws = context.utils.newWSMD();
var wsInput = ws.getInput();
wsInput.copyAll(task.getOutput());
Resultado:
Não copia nada.
Parâmetros de entrada do WSMD: Não definido
Retorno do executor:
- Resultado : String *conhecido, pois foi acessado
Script:
var task = context.getTask();
var ws = context.utils.newWSMD();
var wsInput = ws.getInput();
wsInput.copyAll(task.getOutput());
Resultado: Copia o parâmetro Resultado.
Parâmetros de retorno do executor:
- Resultado: String *conhecido, pois foi acessado
- Erros: Tipo desconhecido
Variáveis locais:
- Produto: String
- Valor: Long
- Resultado: String
Script:
var task = context.getTask();
var localVars = context.getTask().getLocalVars();
localVars.copyAll(task.getOutput());
Resultado: São copiadas as propriedades do objeto de retorno para as variáveis do processo, conforme detalhes abaixo:
- Resultado: copiado para variáveis do processo.
- Erros: ignorado. Não é copiado pois não existe a mesma variáveis do objeto de destino – as variáveis do processo.
- Produto: ignorada. Não altera seu conteúdo.
- Valor: ignorada. Não altera seu conteúdo.
Variáveis locais:
- Produto: String
- Valor: Long
- Resultado: String
Parâmetros de entrada do executor: Não definido
Script:
var task = context.getTask();
var localVars = context.getTask().getLocalVars();
task.getInput().copyAll(localVars);
Resultado:São copiadas todas as variáveis locais para o objeto de destino.

English
Español


