Exemplo de regra com funções de programador
Exemplo de Regras utilizando as seguintes funções de programador:
- DefineAbrUsu(Alfa aCodMod, Numero aTipoAbr, Numero aCodUsu, Numero aCond, Alfa aCampo, Alfa aValAbr);
- RetQtdAbrCond(Alfa aCodMod, Numero aTipoAbr, Numero aCodUsu);
- RemoveAbrUsu(Alfa aCodMod, Numero aTipoAbr, Numero aCodUsu, Numero aCond, Alfa aCampo);
- RetornaAbrUsu(Alfa aCodMod, Numero aTipoAbr, Numero aCodUsu, Numero aCond, Alfa aCampo, Alfa End aAbr);
- RetCodUsuPorColab(Numero aNumEmp, Numero aTipCol, Numero aNumCad);
- AssociaUsuColab(Numero aNumEmp, Numero aTipCol, Numero aNumCad, Numero aCriUsu, Numero aCodUsu);
- GravaNoBancoAbrUsu( );
/ * 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();