Copiando variáveis do RITM para uma SCTASK

No artigo de hoje vamos abordar como copiar as variáveis de um ticket de Request (RITM) para uma Task SCTASK), caso esta última tenha sido criada via script.

Outro dia estava num projeto no qual precisava criar tarefas associadas a um RITM dependendo de algumas condições, dentro de um workflow. No workflow, existe uma operações nativa chamada “Catalog Task” ou “Tarefa de Catálogo”. Era o que eu precisava e por padrão, ele pode herdar todas as variáveis do RITM que ele está associado. Ótimo!

Porém, por motivos diversos, a criação dessa tarefa foi feita através de um script e obviamente, as variáveis do RITM ficaram de fora, e mais obviamente ainda, elas eram necessárias.
Então o script abaixo veio para salvar o dia:

  	// Nosso GlideRecord na tabela que ficam as relações de variáveis por RITM
	var my_sc_item_option_mtom = new GlideRecord ('sc_item_option_mtom');
	// Filtrando por um RITM específico, que vai ser como modelo
 	my_sc_item_option_mtom.addQuery('request_item', current.sys_id);
 	my_sc_item_option_mtom.query();
 	while (my_sc_item_option_mtom.next()){
      	// Nosso novo registro na sc_item_variables_task
		var myTaskVar = new GlideRecord('sc_item_variables_task');
		myTaskVar.initialize();
      	// taskSysId é o SysId do registro que receberá a cópia das variáveis
		myTaskVar.task = taskSysid;
      	// SysId do Option que armazena a pergunta (question) e a resposta dada
		myTaskVar.variable = my_sc_item_option_mtom.sc_item_option.item_option_new;
      	// Salva o registro
		myTaskVar.insert();
  }

Vamos esmiuçar um pouco mais o que este código faz.
A tabela sc_item_option_mtom é aonde ficam armazenadas as referencias das variáveis por RITM. Então basicamente pegamos todos os registros que houverem ali, filtrando pela nossa RITM fonte.

Caso você queira copiar variáveis específicas, também é possível! Uma forma seria incluindo por exemplo pelos nomes da variáveis na query, desta forma:

  var task_vars_include_list = "requested_by,requested_for,company,quantity,model";
  var my_sc_item_option_mtom = new GlideRecord ('sc_item_option_mtom');
  my_sc_item_option_mtom.addQuery('request_item', current.sys_id);
  my_sc_item_option_mtom.addQuery('sc_item_option.item_option_new.name', 'IN', task_vars_include_list);
  my_sc_item_option_mtom.query();

Assim basicamente adicionamos um filtro pelos nomes das variáveis e copiamos somente estas!

Para cada variável encontrada, temos que criar um novo registro na tabela sc_item_variables_task, que é justamente a tabela que estrutura a visualização de variáveis para tasks:

	var myTaskVar = new GlideRecord('sc_item_variables_task');
	myTaskVar.initialize();
	// taskSysId é o SysId do registro que receberá a cópia das variáveis
	myTaskVar.task = taskSysid;
	// SysId do Option que armazena a pergunta (question) e a resposta dada
	myTaskVar.variable = my_sc_item_option_mtom.sc_item_option.item_option_new;
	// Salva o registro
	myTaskVar.insert();

Temos que gravar somente 2 campos nesta tabela, o sysId da Task (taskSysid) e o sysId da Question respondida (my_sc_item_option_mtom.sc_item_option.item_option_new).

Com isso, você adiciona todas as variáveis que desejar na sua SCTASK criada manualmente.
Além do script, aprendi um pouco mais sobre como a estrutura de variáveis do RITM funciona internamente!

Até a próxima!

Leave a Reply

Your email address will not be published. Required fields are marked *