none
C5 2012 / Chekke om en given bruger er logget ind i forvejen

    Spørgsmål

  • Hej.

    Der der nogen her i dette forum, der ved, hvordan man i XAL=Autoexec kan tjekke for om en given bruger allerede ER logget ind ? og give brugeren mulighed for at vælge om man vil på 2 gange eller ej ?

    Mvh

    Christian


    IC.CJP

    23. januar 2014 11:20

Alle besvarelser

  • Du må kunne tage koden fra Post-Load på formen UserStatus. Her slår den op hvem der er inde, og i hvilket regnskab. Så er det bare at bygge en box på om de vil ind igen eller ej. Hvis ikke, så hedder den #ShutDown.

    Det er i øvrigt en rigtig god idé.

    Mvh Maria

    23. januar 2014 12:16
  • Tak for svar ... Ja det kan jeg nok ... men det er jo en liste af brugere og det synes jeg måske ikke jeg vil checkke samtlige brugere (INIT i denne form) HVER gang en bruger logger på ... Jeg har set det i en XAL, hvor den i autoexec spørger "Bruger XXX er allerede logget på? Ønsker du at logge på igen ?"

    Så der må være en stump kode, syskald eller noget, som man kan bruge for brugerid (CurUserID()) jeg har blot glemt det :-(

    Mvh

    Christian


    IC.CJP

    23. januar 2014 12:19
  • Du KUNNE jo debugge koden og finde sysinfo 3031. Der ligger mere i macroen User_Group_Rights.

    Mvh Maria

    23. januar 2014 12:56
  • Det er lige nøjagtig den jeg har vært igennem ... sysinfo 3031 returnerer en lang streng med dato, regnskab, brugerid etc. ... hvis den fodres med et sessionnr

    IC.CJP

    23. januar 2014 12:58
  • Du smider strengen i en variabel, trækker tiden ud (det er tispunktet, hvor login kom på første gang), måler på tiden i forhold til nu (læg 10 sekunder ind som buffer), og sæt en box ind, hvis TimeNow() - 10 er større en den tid, du har i strengen.

    2 variabler, STR 30 &Userinfo og &Time

    Sådan her fra linje 90

    SET &Userinfo = #sessionUser(CurUserID())

    SET &Time = SubStr(&USerInfo,14,8)

    IF Str2Time(&time) < TimeNow() - 10 THEN

    Resten kan du selv.

    Mvh Maria

    23. januar 2014 14:22
  • Awesome :-) Der var trylleformlen lige ... takker ... big kiss

    PRINT #CurSessNum
    PRINT #SessionUser(#CurSessNum)
    PRINT CurUserID()
    PRINT SubStr(#SessionUser(#CurSessNum),1,StrScan(#SessionUser(#CurSessNum),",",1,255)-1)
    PRINT Str2Num(SubStr(#SessionUser(#CurSessNum),1,StrScan(#SessionUser(#CurSessNum),",",1,255)-1)) <> CurUserId() ?
          "Alone in the dark" : "More than one"

    Resten er som du siger bare at pakke det pænt ind

    Mvh

    Christian


    IC.CJP

    23. januar 2014 14:30
  • Hej,

    Efter ændringer i formatet for #SessionUser i C5 2012 SP1, er der åbenbart opstået en bug i #CurSessNum, som ikke returnerer aktuelle SessionId.

    Det vil blive rettet.

    For øvrigt tager #SessionUser et SessionId som parameter jf. Kernel_Newsletter_C5_4.4.1.303.pdf:

    EXTENDED SESSION INFO FROM #SESSIONUSER (SYSINFO(3021))<o:p></o:p>

    SysInfo(3021) now returns the following string for a given session:<o:p></o:p>

    <UserId>,<Date>,<Time>,<Datafile>,<WindowsProcessId>,<Kill-flag>,<Computername>,<WindowsUsername>,<Remote Desktop Session Id>,<Kill-flag><o:p></o:p>

    Kill-flag is repeated because existing code might read it as parameter 6 or as the last parameter.

    This extra info is the reason why the c5user.c5s file is larger than previous versions.<o:p></o:p>

    UserStatus.FRM has been expanded with the new session information as well as ability to terminate all running sessions except current
    session.<o:p></o:p>

    så man er nødt til at loope over sessioner til #MaxUserCount, hvis man vil checke på UserId i samtlige sessioner.


    Venlig Hilsen Henrik Hansen Program Manager II Microsoft Dynamics C5

    24. januar 2014 11:38
    Ejer