Reports

arnavchanderarnavchander Member Posts: 26
Hi All,

Is there any possibility in know how many user have run which reports or I can say I need to know who run which reports in Navision 2009??

Thanks

Comments

  • SpyrootSpyroot Member Posts: 45
    Yo have to create a log table and on every report that you want to track, you must insert code to generate a new entry in the log table.
  • SPost29SPost29 Member Posts: 148
    You do not have to change every report.
    The process below captures user and report and number of times run and last date run.
    It could capture specifics on every time run but that wasn't necessary for my needs.

    Create a Report Usage log table:
    Enabled Field No. Field Name Data Type Length Description
    Yes 1 Report ID Integer
    Yes 2 User ID Code 20
    Yes 3 No. Of Runs Integer
    Yes 4 Last Run Date Date
    Yes 5 Description Text 50

    Create a Report Usage log Codeunit (Single Instance)

    Add a function:
    AddReport(ReportID : Integer) Add report to temp table
    WITH RepUsageTemp DO BEGIN
    
      IF NOT RepUsageTemp.GET(ReportID,USERID) THEN BEGIN
        INIT;
        "Report ID" := ReportID;
        "User ID" := USERID;
        INSERT;
      END;
    
      "No. Of Runs" := "No. Of Runs" + 1;
      "Last Run Date" := TODAY;
      MODIFY;
    END;
    


    Add a function:
    SaveUsage() Move entries from temp table to real table
    WITH RepUsageTemp DO BEGIN
      IF FINDSET THEN REPEAT
        IF NOT RepUsage.GET("Report ID","User ID") THEN BEGIN
          RepUsage.INIT;
          RepUsage."Report ID" := "Report ID";
          RepUsage."User ID" := USERID;
          IF Object.GET(3,'',"Report ID") THEN
            RepUsage.Description := Object.Name;
          RepUsage.INSERT;
        END;
        RepUsage."No. Of Runs" := RepUsage."No. Of Runs" + "No. Of Runs";
        RepUsage."Last Run Date" := TODAY;
        RepUsage.MODIFY;
      UNTIL NEXT = 0;
     DELETEALL;
    END;
    

    In CU1 add
    global RptUsageMgt CodeUnit

    in the FindPrinter function add
    RptUsageMgt.AddReport(ReportID);
    

    In function LogInEnd add
    RptUsageMgt.SaveUsage;
    CLEAR(RptUsageMgt);
    

    I hope this helps
    Steve
  • SogSog Member Posts: 1,023
    There seems to be a "bug" in your code. (see "Start edit Sog")
    WITH RepUsageTemp DO BEGIN
      IF FINDSET THEN REPEAT
        IF NOT RepUsage.GET("Report ID","User ID") THEN BEGIN
          RepUsage.INIT;
          RepUsage."Report ID" := "Report ID";
          RepUsage."User ID" := USERID;
          IF Object.GET(3,'',"Report ID") THEN
            RepUsage.Description := Object.Name;
          RepUsage.INSERT;
        END;
        RepUsage."No. Of Runs" := RepUsage."No. Of Runs" + "No. Of Runs";
      //Start edit Sog
      //  RepUsage."Last Run Date" := TODAY;
      RepUsage."Last Run Date" := "Last Run Date";
      //End edit Sog
        RepUsage.MODIFY;
      UNTIL NEXT = 0;
    DELETEALL;
    END;
    
    This because some users do not log off their pc when they go home.
    And when they finaly log off, a couple of days could have passed.
    |Pressing F1 is so much faster than opening your browser|
    |To-Increase|
Sign In or Register to comment.