Gestão de Pessoas - Manual do Usuário > Customizações > Regras > Regras do Sistema > Exemplo de regra com funções de programador

Exemplo de regra com funções de programador

Exemplo de Regras utilizando as seguintes funções de programador:

/ * Esta regra fará uma leitura na tabela R999USU e incluirá uma abrangência de empresa para estes usuários. Para os usuários que são usuários/colaborador, será utilizada a empresa no qual o colaborador está cadastrado. Para os demais usuários, será utilizada a empresa 1. A abrangência a ser setada será do tipo 1 (Colaboradores) */

Definir Cursor cUsu;

Definir Cursor cCol;

Definir Cursor cUsuCol;

Definir Numero vCodUsu;

Definir Numero vNumEmp;

Definir Numero vTipCol;

Definir Numero vNumCad;

Definir Numero vTipAbr;

Definir Numero vQtdCnd;

Definir Numero vConta1;

Definir Numero vConta2;

Definir Numero vCond;

Definir Alfa vCampo;

Definir Alfa vValAbr;

Definir Alfa vEnter;

Definir Alfa vNomUsu;

vNomUsu = "A";

@ Definição do Cursor @

cUsu.SQL "SELECT CODUSU,NOMUSU FROM R999USU ORDER BY CODUSU";

cCol.SQL "SELECT NUMEMP FROM R034FUN WHERE CODUSU = :vCodUsu";

 

@*******************************************************************************@

@ Para a seleção de usuários está sendo utilizada a tabela R999USU. No entanto, @

@ se for necessário obter os usuários e grupos de usuários, o cursor deverá ser @

@ montado sobre a tabela R900PPL. @

@ Neste caso, o que diferenciará os usuários dos grupos é o código da entidade. @

@ Um grupo possui um código (PERID) superior à 1.000.000.000 (um bilhão). @

@ Todos os códigos abaixo deste valor são de usuários. @

@*******************************************************************************@

@ Define que a abrangência a ser utilizada será a de Colaboradores (1) @

vTipAbr = 1;

cUsu.AbrirCursor();

Enquanto (cUsu.Achou)

Inicio

vCodUsu = cUsu.CodUsu;

vNumEmp = 1; @ Define como padrão a Empresa 1 @

vCond = 0;

cCol.AbrirCursor(); @ Verifica se o usuário é um usuário/colaborador @

Enquanto (cCol.Achou)

Inicio

vNumEmp = cCol.NumEmp; @ Neste caso, incluira uma segunda condição @

vCond = 1;

cCol.Proximo();

Fim;

cCol.FecharCursor();

@ Converte o número para Alfa @

ConverteNumero(vNumEmp, "ZZZ9", "Numero", vValAbr);

@ Seta a abrangência para o usuário, na primeira condição, com a empresa obtida @

DefineAbrUsu("RH", vTipAbr, vCodUsu, 1, "NumEmp", vValAbr);

Se ((vCond = 1) e (vNumEmp <> 1))

DefineAbrUsu("RH", vTipAbr, vCodUsu, 2, "NumEmp", "1");

cUsu.Proximo();

Fim;

cUsu.FecharCursor();

@ Grava no banco todas as alterações efetuadas nas abrangências @

GravaNoBancoAbrUsu( );

 

@******************************************************************************@

@ Depois de definir a abrangência do usuário, monta um texto com as definições @

@ das abrangências que será enviado via e-mail para a pessoa indicada. @

@******************************************************************************@

TxtEma = "";

DstEma = "adriana@senior.com.br";

AssEma = "Abrangência de Usuários";

RetornaAscii(13, vEnter);

cUsu.AbrirCursor();

Enquanto (cUsu.Achou)

Inicio

vCodUsu = cUsu.CodUsu;

TxtEma = TxtEma + "** Usuário: " + cUsu.NomUsu + vEnter;

TxtEma = TxtEma + "Abrangências deste Usuário:" + vEnter;

vQtdCnd = RetQtdAbrCond("RH", vTipAbr, vCodUsu);

Para (vConta1 = 0; vConta1 < vQtdCnd; vConta1++)

Inicio

ConverteNumero(vConta1 + 1, "Z9", "Numero", vValAbr);

TxtEma = TxtEma + "- Condição " + vValAbr + vEnter;

vQtdCam = RetQtdAbrUsu();

Para (vConta2 = 0; vConta2 < vQtdCam; vConta2++)

Inicio

RetAbrUsu("RH", vConta2, vCodUsu, vConta1, vCampo, vValAbr);

TxtEma = TxtEma + " - Campo: " + vCampo + " => Valor: " + vValAbr +

vEnter;

Fim;

Fim;

TxtEma = TxtEma + vEnter;

cUsu.Proximo();

Fim;

cUsu.FecharCursor();

EnviaEMail("Eu", DstEma, "", AssEma, TxtEma, ""); @ Envia o e-mail @

 

@*****************************************************************************@

@ Após enviar o e-mail, remove a primeira condição da abrangência dos @

@ colaboradores @

@*****************************************************************************@

cUsu.AbrirCursor();

Enquanto (cUsu.Achou)

Inicio

vCodUsu = cUsu.CodUsu;

RemoveAbrUsu("RH", vTipAbr, vCodUsu, 1, "NumEmp");

cUsu.Proximo();

Fim;

cUsu.FecharCursor();

@ Grava no banco todas as alterações efetuadas nas abrangências @

GravaNoBancoAbrUsu( );

 

@******************************************************************************@

@ Agora a rotina irá associar os usuários à colaboradores caso este ainda não @

@ esteja associado. Para tanto irá procurar por um colaborador que tenha o @

@ nome parecido com o da usuário. @

@******************************************************************************@

cUsu.AbrirCursor();

Enquanto (cUsu.Achou)

Inicio

vNomUsu = "'%" + cUsu.NomUsu + "%'";

vCodUsu = cUsu.CodUsu;

cUsuCol.SQL "SELECT NUMEMP,TIPCOL,NUMCAD FROM R034FUN WHERE NOMFUN LIKE __Inserir(:vNomUsu)";

cUsuCol.AbrirCursor();

Se (cUsuCol.Achou)

Inicio

@ Verifica se o colaborador possui um usuário associado @

vNumEmp = cUsuCol.NumEmp;

vTipCol = cUsuCol.TipCol;

vNumCad = cUsuCol.NumCad;

Se (RetCodUsuPorColab(vNumEmp, vTipCol, vNumCad) = 0)

Inicio

/* Se não houver usuário associado, efetua a associação com o CRIUSU=2 que

significa que este usuário receberá a abrangência de NUMEMP, TIPCOL e

NUMCAD sempre que efetuar o logon no sistema */

AssociaUsuColab(vNumEmp, vTipCol, vNumCad, 2, vCodUsu);

Fim;

Fim;

cUsuCol.FecharCursor();

cUsu.Proximo();

Fim;

cUsu.FecharCursor();

Este artigo ajudou você?