Francisco: estás en todas. Sos un maestro. Y eso que estás en Capilla. Desde 
New York no se como sería la cosa!!!
Te felicito.


NRS
Enviado desde WindowsPhone

-----Mensaje original-----
De: francisco prieto
Enviado: 05/07/2013 13:34
Para: GUFA List Member
Asunto: [GUFA] Re: [GUFA] Manejar seguridad a nivel Menú

Fabian,

Eso lo tengo armado. Te paso un ejemplo de lo que hago básicamente.

Local lcNomPop, I, lcNomPad, ;
lcAntOrd, lcMenu, lcUsuario, ;
 lcProgra, lcNomPop1, lcLanzar, lcDefault,llHuboError

Set Sysmenu To
Set Sysmenu Automatic
lnOpHab=0
llDepurar=.T.
If _Screen.Demo
lcUsuario = "ADMINISTRADOR"
Else
lcUsuario = Upper(_Screen.UsrName)
Endif

Use cMenues Order Orden2 && Incluida en el ejecutable

lcSql="SELECT USUARIO"+;
",APE_NOM"+;
 ",SECTOR"+;
",NIVEL"+;
",PUESTO"+;
 ",IDUSUARIO"+;
",PASS"+;
",ADMINISTRA"+;
 ",HISTPASS"+;
" FROM USUARIOS "+;
"Where RTRIM(Usuario)+'_'='"+Alltrim(lcUsuario)+"_'"
If !Thisform.ConsultaMotor(Thisform,lcSql,"cUsuarios")
llHuboError=.T.
Endif
If !llHuboError
lcSql="SELECT AREA_SOLIC"+;
 " FROM PARAM "
If !Thisform.ConsultaMotor(Thisform,lcSql,"cParam")
llHuboError=.T.
 Endif
Endif
If !llHuboError
If cUsuarios.Administra
lcSql="SELECT ORDEN "+;
 ", (Select COUNT(*) from MENUES b where
LEFT(b.ORDEN,LEN(Menues.Orden))=MENUES.ORDEN)-1 Hijos"+;
",MENU"+;
 ",AREA"+;
",JERARQUIA"+;
",cast(0 as Int) NroBar"+;
 " FROM MENUES"+;
" ORDER BY ORDEN"
Else
 lcSql="SELECT ORDEN "+;
", (Select COUNT(*) from MENUES b where
LEFT(b.ORDEN,LEN(Menues.Orden))=MENUES.ORDEN)-1 Hijos"+;
 ",MENU"+;
",AREA"+;
",JERARQUIA"+;
 ",cast(0 as Int) NroBar"+;
" FROM MENUES"+;
" Where Orden in (Select distinct orden from ACCESO where SECTOR
='"+cUsuarios.Sector+"' and NIVEL<='"+Transform(cUsuarios.Nivel,"@l
99")+"')"+;
 " ORDER BY Menues.ORDEN "
Endif
IF !Thisform.ConsultaMotor(Thisform,lcSql,"cMenu")
 llHuboError=.t.
ENDIF
ENDIF
IF !llHuboError
Thisform.cntprogreso1.Reset(3)
 Thisform.cntprogreso1.Mensaje="Armando el Primer Nivel de los Menues"
Thisform.cntprogreso1.Updcontrol()
 If llDepurar
=Strtofile('','mimenu.mpr',0)
Endif
 Select cMenues
I=0
Scan
If Len(Alltrim(cMenues.Orden)) = 2
 lcNomPad = "PAD"+Alltrim(cMenues.Orden)
lcNomPop = "POP" +Alltrim(cMenues.Orden)
 Define Pad &lcNomPad Of _Msysmenu Prompt Alltrim(cMenues.Programa) Color
Scheme 4
On Pad &lcNomPad Of _Msysmenu Activate Popup &lcNomPop
 If llDepurar
TEXT TO lcLinea TEXTMERGE NOSHOW PRETEXT 3
Define Pad <<lcNomPad>> Of _Msysmenu Prompt '<<Alltrim(cMenues.Programa)>>'
COLOR Scheme 4
 On Pad <<lcNomPad>> Of _Msysmenu Activate Popup <<lcNomPop>>
ENDTEXT
=Strtofile(lcLinea+Chr(13)+Chr(10),'mimenu.mpr',1)
 Endif
Endif
I=I+1
Wait Windows ("leyendo menues"+Str(I,2)) Nowait
 Endscan
Wait Clear

Thisform.Items=I

Thisform.cntprogreso1.Mensaje="Armando el Segundo Nivel de los Menues"
Thisform.cntprogreso1.Updcontrol()
 Select cMenu
I = 0
lcAntPad = ''
Scan
 If !Empty(cMenu.Area)
If (Val(cParam.Area_solic)=0 Or Val(cParam.Area_solic)=0) And
cParam.Area_solic#cMenu.Area
 Loop
Endif
Endif
*=Seek(Alltrim(cMenu.Orden)+"_","cMenues","Orden")
 =Seek(Val(cMenu.Orden),"cMenues","Orden2")
If Len(Alltrim(cMenu.Orden)) = 4
lcNomPop1 = "POP" + Alltrim(cMenu.Orden)
 lcNomPop = "POP" + Left(Alltrim(cMenu.Orden),2)
lcNomPad = "PAD" + Left(Alltrim(cMenu.Orden),2)
 If !Popup(lcNomPop)
Define Popup &lcNomPop Margin Relative Shadow Font 'arial', 9 Style 'I'
Color Scheme 5
 If llDepurar
TEXT TO lcLinea TEXTMERGE NOSHOW PRETEXT 3
Define Popup <<lcNomPop>> Margin Relative Shadow Font 'arial', 9 Style 'I'
Color Scheme 5
 ENDTEXT
=Strtofile(lcLinea+Chr(13)+Chr(10),'mimenu.mpr',1)
Endif
 Endif
If lcAntPad==lcNomPad
I=I+1
Else
 lcAntPad=lcNomPad
I=1
Endif

 If Inlist(cMenues.Tipo,"C","P")
lcProgra=Alltrim(cMenues.Programa)
Else
 lcProgra=''
Endif

lnOpHab=lnOpHab+1
 Define Bar I Of &lcNomPop Prompt
Iif(cMenues.Habilitada,'','\')+Alltrim(cMenu.Menu)
If llDepurar
 TEXT TO lcLinea TEXTMERGE NOSHOW PRETEXT 3
Define Bar <<I>> Of <<lcNomPop>> Prompt
'<<Iif(cMenues.Habilitada,'','\')+Alltrim(cMenu.Menu)>>'
 ENDTEXT
=Strtofile(lcLinea+Chr(13)+Chr(10),'mimenu.mpr',1)
Endif
 If cMenu.Hijos=0
If !Empty(lcProgra)
If cMenues.Tipo == 'C'
 On Selection Bar I Of &lcNomPop &lcProgra
If llDepurar
TEXT TO lcLinea TEXTMERGE NOSHOW PRETEXT 3
 On Selection Bar <<I>> Of <<lcNomPop>> <<lcProgra>>
ENDTEXT
 =Strtofile(lcLinea+Chr(13)+Chr(10),'mimenu.mpr',1)
Endif
Else
 lcLanzar = lcProgra + ' With "' + Alltrim(cMenu.Orden) + '"'
On Selection Bar I Of &lcNomPop &lcLanzar
 If llDepurar
TEXT TO lcLinea TEXTMERGE NOSHOW PRETEXT 3
On Selection Bar <<I>> Of <<lcNomPop>> <<lcLanzar>>
 ENDTEXT
=Strtofile(lcLinea+Chr(13)+Chr(10),'mimenu.mpr',1)
Endif
 Endif
Endif
Else
Replace NroBar With I In cMenu
 Endif
Endif
Endscan

Thisform.cntprogreso1.Mensaje="Armando el Tercer Nivel de los Menues"
 Thisform.cntprogreso1.Updcontrol()
Select cMenu
I = 0
 lcAntPad = ''
lnNroBar=0
Scan
If !Empty(cMenu.Area)
 If (Val(cParam.Area_solic)=0 Or Val(cParam.Area_solic)=0) And
cParam.Area_solic#cMenu.Area
Loop
Endif
 Endif
=Seek(Val(cMenu.Orden),"cMenues","Orden2")
If Len(Alltrim(cMenu.Orden)) = 4
 lnNroBar=cMenu.NroBar
Endif
If Len(Alltrim(cMenu.Orden)) = 6
 lcNomPop1 = "POP" + Left(Alltrim(cMenu.Orden),4)
lcNomPop = "POP" + Left(Alltrim(cMenu.Orden),2)
 On Bar lnNroBar Of &lcNomPop Activate Popup &lcNomPop1
If llDepurar
TEXT TO lcLinea TEXTMERGE NOSHOW PRETEXT 3
 On Bar <<lnNroBar>> Of <<lcNomPop>> Activate Popup <<lcNomPop1>>
ENDTEXT
 =Strtofile(lcLinea+Chr(13)+Chr(10),'mimenu.mpr',1)
Endif
If !Popup(lcNomPop1)
 Define Popup &lcNomPop1 Margin Relative Shadow Color Scheme 4
If llDepurar
TEXT TO lcLinea TEXTMERGE NOSHOW PRETEXT 3
 Define Popup <<lcNomPop1>> Margin Relative Shadow Color Scheme 4
ENDTEXT
=Strtofile(lcLinea+Chr(13)+Chr(10),'mimenu.mpr',1)
 Endif
Endif
If Inlist(cMenues.Tipo,"C","P")
 lcProgra=Alltrim(cMenues.Programa)
Else
lcProgra=''
 Endif
lnOpHab=lnOpHab+1
If lcAntPad==lcNomPop1
 I=I+1
Else
lcAntPad=lcNomPop1
I=1
 Endif
Define Bar I Of &lcNomPop1 Prompt
Iif(cMenues.Habilitada,'','\')+Alltrim(cMenu.Menu)
 If llDepurar
TEXT TO lcLinea TEXTMERGE NOSHOW PRETEXT 3
Define Bar <<I>> Of <<lcNomPop1>> Prompt
'<<Iif(cMenues.Habilitada,'','\')+Alltrim(cMenu.Menu)>>'
 ENDTEXT
=Strtofile(lcLinea+Chr(13)+Chr(10),'mimenu.mpr',1)
Endif
 If !Empty(lcProgra)
If cMenues.Tipo == 'C'
On Selection Bar I Of &lcNomPop1 &lcProgra
 If llDepurar
TEXT TO lcLinea TEXTMERGE NOSHOW PRETEXT 3
On Selection Bar <<I>> Of <<lcNomPop1>> <<lcProgra>>
 ENDTEXT
=Strtofile(lcLinea+Chr(13)+Chr(10),'mimenu.mpr',1)
Endif
 Else
lcLanzar = lcProgra + ' With "' + Alltrim(cMenu.Orden) + '"'
On Selection Bar I Of &lcNomPop1 &lcLanzar
 If llDepurar
TEXT TO lcLinea TEXTMERGE NOSHOW PRETEXT 3
On Selection Bar <<I>> Of <<lcNomPop1>> <<lcLanzar>>
 ENDTEXT
=Strtofile(lcLinea+Chr(13)+Chr(10),'mimenu.mpr',1)
Endif
 Endif
Endif
Endif
Endscan
 Thisform.cntprogreso1.Reset()
Endif
Return (lnOpHab)

Saludos,



[No se incluye el mensaje original completo.]

Responder a