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( );
<div class="Code"><p>/ * 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) */</p><p>Definir Cursor cUsu;</p><p>Definir Cursor cCol;</p><p>Definir Cursor cUsuCol;</p><p>Definir Numero vCodUsu;</p><p>Definir Numero vNumEmp;</p><p>Definir Numero vTipCol;</p><p>Definir Numero vNumCad;</p><p>Definir Numero vTipAbr;</p><p>Definir Numero vQtdCnd;</p><p>Definir Numero vConta1;</p><p>Definir Numero vConta2;</p><p>Definir Numero vCond;</p><p>Definir Alfa vCampo;</p><p>Definir Alfa vValAbr;</p><p>Definir Alfa vEnter;</p><p>Definir Alfa vNomUsu;</p><p>vNomUsu = "A";</p><p>@ Definição do Cursor @</p><p>cUsu.SQL "SELECT CODUSU,NOMUSU FROM R999USU ORDER BY CODUSU";</p><p>cCol.SQL "SELECT NUMEMP FROM R034FUN WHERE CODUSU = :vCodUsu";</p><p></p><p>@*******************************************************************************@</p><p>@ Para a seleção de usuários está sendo utilizada a tabela R999USU. No entanto, @</p><p>@ se for necessário obter os usuários e grupos de usuários, o cursor deverá ser @</p><p>@ montado sobre a tabela R900PPL. @</p><p>@ Neste caso, o que diferenciará os usuários dos grupos é o código da entidade. @</p><p>@ Um grupo possui um código (PERID) superior à 1.000.000.000 (um bilhão). @</p><p>@ Todos os códigos abaixo deste valor são de usuários. @</p><p>@*******************************************************************************@</p><p>@ Define que a abrangência a ser utilizada será a de Colaboradores (1) @</p><p>vTipAbr = 1;</p><p>cUsu.AbrirCursor();</p><p>Enquanto (cUsu.Achou)</p><p>Inicio</p><p>vCodUsu = cUsu.CodUsu;</p><p>vNumEmp = 1; @ Define como padrão a Empresa 1 @</p><p>vCond = 0;</p><p>cCol.AbrirCursor(); @ Verifica se o usuário é um usuário/colaborador @</p><p>Enquanto (cCol.Achou)</p><p>Inicio</p><p>vNumEmp = cCol.NumEmp; @ Neste caso, incluira uma segunda condição @</p><p>vCond = 1;</p><p>cCol.Proximo();</p><p>Fim;</p><p>cCol.FecharCursor();</p><p>@ Converte o número para Alfa @</p><p>ConverteNumero(vNumEmp, "ZZZ9", "Numero", vValAbr);</p><p>@ Seta a abrangência para o usuário, na primeira condição, com a empresa obtida @</p><p>DefineAbrUsu("RH", vTipAbr, vCodUsu, 1, "NumEmp", vValAbr);</p><p>Se ((vCond = 1) e (vNumEmp &lt;&gt; 1))</p><p>DefineAbrUsu("RH", vTipAbr, vCodUsu, 2, "NumEmp", "1");</p><p>cUsu.Proximo();</p><p>Fim;</p><p>cUsu.FecharCursor();</p><p>@ Grava no banco todas as alterações efetuadas nas abrangências @</p><p>GravaNoBancoAbrUsu( );</p><p></p><p>@******************************************************************************@</p><p>@ Depois de definir a abrangência do usuário, monta um texto com as definições @</p><p>@ das abrangências que será enviado via e-mail para a pessoa indicada. @</p><p>@******************************************************************************@</p><p>TxtEma = "";</p><p>DstEma = "adriana@senior.com.br";</p><p>AssEma = "Abrangência de Usuários";</p><p>RetornaAscii(13, vEnter);</p><p>cUsu.AbrirCursor();</p><p>Enquanto (cUsu.Achou)</p><p>Inicio</p><p>vCodUsu = cUsu.CodUsu;</p><p>TxtEma = TxtEma + "** Usuário: " + cUsu.NomUsu + vEnter;</p><p>TxtEma = TxtEma + "Abrangências deste Usuário:" + vEnter;</p><p>vQtdCnd = RetQtdAbrCond("RH", vTipAbr, vCodUsu);</p><p>Para (vConta1 = 0; vConta1 &lt; vQtdCnd; vConta1++)</p><p>Inicio</p><p>ConverteNumero(vConta1 + 1, "Z9", "Numero", vValAbr);</p><p>TxtEma = TxtEma + "- Condição " + vValAbr + vEnter;</p><p>vQtdCam = RetQtdAbrUsu();</p><p>Para (vConta2 = 0; vConta2 &lt; vQtdCam; vConta2++)</p><p>Inicio</p><p>RetAbrUsu("RH", vConta2, vCodUsu, vConta1, vCampo, vValAbr);</p><p>TxtEma = TxtEma + " - Campo: " + vCampo + " =&gt; Valor: " + vValAbr +</p><p>vEnter;</p><p>Fim;</p><p>Fim;</p><p>TxtEma = TxtEma + vEnter;</p><p>cUsu.Proximo();</p><p>Fim;</p><p>cUsu.FecharCursor();</p><p>EnviaEMail("Eu", DstEma, "", AssEma, TxtEma, ""); @ Envia o e-mail @</p><p></p><p>@*****************************************************************************@</p><p>@ Após enviar o e-mail, remove a primeira condição da abrangência dos @</p><p>@ colaboradores @</p><p>@*****************************************************************************@</p><p>cUsu.AbrirCursor();</p><p>Enquanto (cUsu.Achou)</p><p>Inicio</p><p>vCodUsu = cUsu.CodUsu;</p><p>RemoveAbrUsu("RH", vTipAbr, vCodUsu, 1, "NumEmp");</p><p>cUsu.Proximo();</p><p>Fim;</p><p>cUsu.FecharCursor();</p><p>@ Grava no banco todas as alterações efetuadas nas abrangências @</p><p>GravaNoBancoAbrUsu( );</p><p></p><p>@******************************************************************************@</p><p>@ Agora a rotina irá associar os usuários à colaboradores caso este ainda não @</p><p>@ esteja associado. Para tanto irá procurar por um colaborador que tenha o @</p><p>@ nome parecido com o da usuário. @</p><p>@******************************************************************************@</p><p>cUsu.AbrirCursor();</p><p>Enquanto (cUsu.Achou)</p><p>Inicio</p><p>vNomUsu = "'%" + cUsu.NomUsu + "%'";</p><p>vCodUsu = cUsu.CodUsu;</p><p>cUsuCol.SQL "SELECT NUMEMP,TIPCOL,NUMCAD FROM R034FUN WHERE NOMFUN LIKE __Inserir(:vNomUsu)";</p><p>cUsuCol.AbrirCursor();</p><p>Se (cUsuCol.Achou)</p><p>Inicio</p><p>@ Verifica se o colaborador possui um usuário associado @</p><p>vNumEmp = cUsuCol.NumEmp;</p><p>vTipCol = cUsuCol.TipCol;</p><p>vNumCad = cUsuCol.NumCad;</p><p>Se (RetCodUsuPorColab(vNumEmp, vTipCol, vNumCad) = 0)</p><p>Inicio</p><p>/* Se não houver usuário associado, efetua a associação com o CRIUSU=2 que</p><p>significa que este usuário receberá a abrangência de NUMEMP, TIPCOL e</p><p>NUMCAD sempre que efetuar o logon no sistema */</p><p>AssociaUsuColab(vNumEmp, vTipCol, vNumCad, 2, vCodUsu);</p><p>Fim;</p><p>Fim;</p><p>cUsuCol.FecharCursor();</p><p>cUsu.Proximo();</p><p>Fim;</p><p>cUsu.FecharCursor();</p></div>
English
Español

English
Español

