Create a listing of reports with last run date and # of times run

Hi All,
I want to create a listing of reports with last run date and number of times report is run in the past 18 months.
If anybody can please help me with the query for the same.
Regards,
Sk
Edited by: user10989244 on Aug 18, 2009 7:12 AM

Hi Sk
Assuming you have the collection of statistics enabled, which it is out of the box, you can get the information you need from the EUL5_QPP_STATS table. This script will help:
SELECT
QPP.QS_DOC_OWNER WORKBOOK_OWNER,
QPP.QS_DOC_NAME WORKBOOK_NAME,
QPP.QS_DOC_DETAILS WORKSHEET_NAME,
QPP.QS_CREATED_BY RUN_BY,
TRUNC(MAX(QPP.QS_CREATED_DATE)) LAST_USED_DATE,
COUNT(QPP.QS_ID) TIMES_USED
FROM
EUL5_QPP_STATS QPP
WHERE
QPP.QS_CREATED_DATE >= ADD_MONTHS(SYSDATE, -18)
GROUP BY
QPP.QS_DOC_OWNER,
QPP.QS_DOC_NAME,
QPP.QS_CREATED_BY,
QPP.QS_DOC_DETAILS
ORDER BY 1,2,3;
Best wishes
Michael

Similar Messages

  • Last Logon date and Logon time not updating in table USR02

    Hi,
    Please help us on this. After customer successfully logged in the webshop, we are checking the table USR02 in CRM system and the Logon date and Logon time is not updated. Because of this, the customer will be locked after certain number of days. When we check it in ECC system, customer's last logon date and time is updated. Can you tell us what could be causing this? Any advise what we need to check? Thanks in advance!
    Regards,
    Mike

    Hi
    1. Please check if the USAPPLREF table in ECC has the correct mapping done between the LOGON User and the Sold-to party (Customer)
    2. Please check the validity of those user in SU01 user data.
    3. Please check the USERS data from the USERADMIN Link (if it is configured in your scenario through XCM settings for USERS)
    Hope this will help.
    Regards

  • File names with last changed Date and time in a directory

    Hi All.
    I need to get all filename, last changed date, last changed time in a directory. Is there any function module for this?
    Regards,
    Venkat.

    hi,
    if the directory is in any application server try to use this code
    >  DATA: wa_file TYPE zdpp_file_read.
    >  DATA: nomefile(75).
    >  DATA: ext_chek(3).
    >DATA: BEGIN OF wa_file,
    >        dirname     TYPE DIRNAME_AL11, " name of directory
    >        name        TYPE FILENAME_AL11," name of entry
    >        type(10)    TYPE c,            " type of entry.
    >        len(8)      TYPE p,            " length in bytes.
    >        owner(8)    TYPE c,            " owner of the entry.
    >        mtime(6)    TYPE p,            " last mod.date, sec since 1970
    >        mode(9)     TYPE c,            " like "rwx-r-x--x": prot. mode
    >        useable(1)  TYPE c,
    >        subrc(4)    TYPE c,
    >        errno(3)    TYPE c,
    >        errmsg(40)  TYPE c,
    >        mod_date    TYPE d,
    >        mod_time(8) TYPE c,            " hh:mm:ss
    >        seen(1)     TYPE c,
    >        changed(1)  TYPE c,
    >      END OF file.
    >  data: files like wa_file occurs 0 with header line.
    >
    >  CALL FUNCTION 'FILE_GET_NAME'
    >       EXPORTING
    >            client           = sy-mandt
    >            logical_filename = logpath
    >            operating_system = sy-opsys
    >       IMPORTING
    >            file_name        = path
    >       EXCEPTIONS
    >            file_not_found   = 1
    >            OTHERS           = 2.
    >  IF sy-subrc <> 0.
    >    RAISE file_not_found.
    >  ENDIF.
    >
    >  DATA: last_path TYPE i.
    >  DO.
    >    last_path = strlen( path ).
    >    last_path = last_path - 1.
    >    IF pathlast_path(1) = '/' or pathlast_path(1) = '\'.
    >      EXIT.
    >    ELSE.
    >      CLEAR path+last_path(1).
    >    ENDIF.
    >  ENDDO.
    >
    >  MOVE extension TO ext_chek.
    >  TRANSLATE ext_chek TO UPPER CASE.
    >  nomefile = '*'.
    >
    >  CALL 'C_DIR_READ_FINISH'
    >      ID 'ERRNO'  FIELD wa_file-errno
    >      ID 'ERRMSG' FIELD wa_file-errmsg.
    >
    >  CALL 'C_DIR_READ_START' ID 'DIR'    FIELD path
    >                          ID 'FILE'   FIELD nomefile
    >                          ID 'ERRNO'  FIELD wa_file-errno
    >                          ID 'ERRMSG' FIELD wa_file-errmsg.
    >  IF sy-subrc <> 0.
    >    RAISE wrong_directory.
    >  ELSE.
    >
    >    DO.
    >      CLEAR wa_file.
    >
    >      CALL 'C_DIR_READ_NEXT'
    >        ID 'TYPE'   FIELD wa_file-type
    >        ID 'NAME'   FIELD wa_file-name
    >        ID 'MTIME'  FIELD wa_file-mtime
    >        ID 'ERRNO'  FIELD wa_file-errno
    >        ID 'ERRMSG' FIELD wa_file-errmsg.
    >      IF sy-subrc <> 0.
    >        EXIT.
    >      ENDIF.
    >
    >        PERFORM p6_to_date_time_tz(rstr0400) USING wa_file-mtime
    >                                                   wa_file-mod_time
    >                                                   wa_file-mod_date.
    >      MOVE path TO wa_file-dirname.
    >      APPEND wa_file TO files.
    >    ENDDO.
    >  ENDIF.
    >
    >  CALL 'C_DIR_READ_FINISH'
    >      ID 'ERRNO'  FIELD wa_file-errno
    >      ID 'ERRMSG' FIELD wa_file-errmsg.
    bye,
    marco

  • Report with historical payment data and current bp balance

    Hi,
    Has anybody created an report like this??
    cardcode,cardname,adres,zipcode,documentnumber,doctotal,docdate,docduedate,payed amount and paydate??
    data should be from now untill 1 year before (historical)
    Kind regards
    Mark

    Dear Hangman,
    This query is for customer receivable.
    if you want for supplier just change tables name from query.
    SELECT T0.DocNum, T0.DocDate, T0.DocDueDate, T0.CardCode,t0.doccur As InvoiceCurrency,T0.DocTotalFC InvoiceTotal ,T0.PaidFC As ReceivedAmount, T0.CardName, T1.DocNum As ReceiptsEntryNo, T1.DocDate, T1.DocDueDate, T1.CashSum, T1.CheckSum,T1.TrsfrSumFc,DATEDIFF(Day, T0.DocDueDate, T1.DocDueDate)As OverdueDays
    FROM OINV T0 LEFT OUTER JOIN ORCT T1
    ON T0.ReceiptNum = T1.DocEntry
    WHERE T0.DocDate >=[%0] AND  T0.DocDate <=[%1] AND (T0.CardName ='[%2]' or '[%2]'=' ')
    Regards
    MANGESH PAGDHARE.

  • How to create user editable Crystal Report with dynamic dataset

    What I would like to achieve:
    A program loads a report in runtime updates list of database fields (possibly includes sample data), open report in "Crystal Reports 2011" (or 2008) where user customizes report and saves it. Later on the program loads the report, fills actualized data and displays it in .net report viewer.
    What I do:
    CrReport = New CrystalDecisions.CrystalReports.Engine.ReportDocument
    CrReport.Load(TemplateFilename)
    Dim Results As DataTable
    DataTable is filled from a database
    CrReport.SetDataSource(mResults)
    CrReport.SaveAs(NewReportPath, True)
    The NewReportPath is opened in the default program.
    What are the problems
    The report is open in preview mode (not in design).
    When the field is added to the report the designer asks for XML datasource on preview.

    The short answer is that it is not possible. I broke the question to other two: How to save a report that it opens without preview? and How to create user editable Crystal Report with dynamic dataset, where it is possible to find details. Key answer is Re: How to create an editable previewable report?

  • Create a Procedural ALV Report with editable fields and save the changes

    Hi,
    I am new to ABAP. I have created a Procedural ALV Report with 3 fields. I want to make 2 fields editable. When executed, if the fields are modified, I want to save the changes. All this I want to do without using OO concepts. Please help . Also, I checked out the forum and also the examples
    BCALV_TEST_GRID_EDIT_01
    BCALV_TEST_GRID_EDIT_02
    BCALV_TEST_GRID_EDIT_04_FORMS
    BCALV_TEST_GRID_EDITABLE
    BCALV_EDIT_01
    BCALV_EDIT_02
    BCALV_EDIT_03
    BCALV_EDIT_04
    BCALV_EDIT_05
    BCALV_EDIT_06
    BCALV_EDIT_07
    BCALV_EDIT_08
    BCALV_FULLSCREEN_GRID_EDIT
    But all these are using OO Concepts.
    Please help.
    Regards,
    Smruthi

    TABLES:     ekko.
    TYPE-POOLS: slis.                                 "ALV Declarations
    *Data Declaration
    TYPES: BEGIN OF t_ekko,
      ebeln TYPE ekpo-ebeln,
      ebelp TYPE ekpo-ebelp,
      statu TYPE ekpo-statu,
      aedat TYPE ekpo-aedat,
      matnr TYPE ekpo-matnr,
      menge TYPE ekpo-menge,
      meins TYPE ekpo-meins,
      netpr TYPE ekpo-netpr,
      peinh TYPE ekpo-peinh,
      line_color(4) TYPE c,     "Used to store row color attributes
    END OF t_ekko.
    DATA: it_ekko TYPE STANDARD TABLE OF t_ekko INITIAL SIZE 0,
          wa_ekko TYPE t_ekko.
    *ALV data declarations
    DATA: fieldcatalog TYPE slis_t_fieldcat_alv WITH HEADER LINE,
          gd_tab_group TYPE slis_t_sp_group_alv,
          gd_layout    TYPE slis_layout_alv,
          gd_repid     LIKE sy-repid.
    START-OF-SELECTION.
      PERFORM data_retrieval.
      PERFORM build_fieldcatalog.
      PERFORM build_layout.
      PERFORM display_alv_report.
    *&      Form  BUILD_FIELDCATALOG
          Build Fieldcatalog for ALV Report
    FORM build_fieldcatalog.
      fieldcatalog-fieldname   = 'EBELN'.
      fieldcatalog-seltext_m   = 'Purchase Order'.
      fieldcatalog-col_pos     = 0.
      fieldcatalog-outputlen   = 10.
      fieldcatalog-emphasize   = 'X'.
      fieldcatalog-key         = 'X'.
    fieldcatalog-do_sum      = 'X'.
    fieldcatalog-no_zero     = 'X'.
      APPEND fieldcatalog TO fieldcatalog.
      CLEAR  fieldcatalog.
      fieldcatalog-fieldname   = 'EBELP'.
      fieldcatalog-seltext_m   = 'PO Item'.
      fieldcatalog-col_pos     = 1.
      APPEND fieldcatalog TO fieldcatalog.
      CLEAR  fieldcatalog.
      fieldcatalog-fieldname   = 'STATU'.
      fieldcatalog-seltext_m   = 'Status'.
      fieldcatalog-col_pos     = 2.
      APPEND fieldcatalog TO fieldcatalog.
      CLEAR  fieldcatalog.
      fieldcatalog-fieldname   = 'AEDAT'.
      fieldcatalog-seltext_m   = 'Item change date'.
      fieldcatalog-col_pos     = 3.
      APPEND fieldcatalog TO fieldcatalog.
      CLEAR  fieldcatalog.
      fieldcatalog-fieldname   = 'MATNR'.
      fieldcatalog-seltext_m   = 'Material Number'.
      fieldcatalog-col_pos     = 4.
      APPEND fieldcatalog TO fieldcatalog.
      CLEAR  fieldcatalog.
      fieldcatalog-fieldname   = 'MENGE'.
      fieldcatalog-seltext_m   = 'PO quantity'.
    fieldcatalog-edit             = 'X'
      fieldcatalog-col_pos     = 5.
      APPEND fieldcatalog TO fieldcatalog.
      CLEAR  fieldcatalog.
      fieldcatalog-fieldname   = 'MEINS'.
      fieldcatalog-seltext_m   = 'Order Unit'.
      fieldcatalog-col_pos     = 6.
      APPEND fieldcatalog TO fieldcatalog.
      CLEAR  fieldcatalog.
      fieldcatalog-fieldname   = 'NETPR'.
      fieldcatalog-seltext_m   = 'Net Price'.
      fieldcatalog-col_pos     = 7.
      fieldcatalog-outputlen   = 15.
      fieldcatalog-datatype     = 'CURR'.
      APPEND fieldcatalog TO fieldcatalog.
      CLEAR  fieldcatalog.
      fieldcatalog-fieldname   = 'PEINH'.
      fieldcatalog-seltext_m   = 'Price Unit'.
      fieldcatalog-col_pos     = 8.
      APPEND fieldcatalog TO fieldcatalog.
      CLEAR  fieldcatalog.
    ENDFORM.                    " BUILD_FIELDCATALOG
    *&      Form  BUILD_LAYOUT
          Build layout for ALV grid report
    FORM build_layout.
      gd_layout-no_input          = 'X'.
      gd_layout-colwidth_optimize = 'X'.
      gd_layout-totals_text       = 'Totals'(201).
      gd_layout-info_fieldname =      'LINE_COLOR'.
    ENDFORM.                    " BUILD_LAYOUT
    *&      Form  DISPLAY_ALV_REPORT
          Display report using ALV grid
    FORM display_alv_report.
      gd_repid = sy-repid.
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
           EXPORTING
                i_callback_program      = gd_repid
                i_callback_pf_status_set = 'STATUS'
                i_callback_top_of_page   = 'TOP-OF-PAGE'
               i_callback_user_command = 'USER_COMMAND'
               i_grid_title           = outtext
                is_layout               = gd_layout
                it_fieldcat             = fieldcatalog[]
               it_special_groups       = gd_tabgroup
               IT_EVENTS                = GT_XEVENTS
                i_save                  = 'X'
               is_variant              = z_template
           TABLES
                t_outtab                = it_ekko
           EXCEPTIONS
                program_error           = 1
                OTHERS                  = 2.
    ENDFORM.                    " DISPLAY_ALV_REPORT
    *&      Form  DATA_RETRIEVAL
          Retrieve data form EKPO table and populate itab it_ekko
    FORM data_retrieval.
      DATA: ld_color(1) TYPE c.
      SELECT ebeln ebelp statu aedat matnr menge meins netpr peinh
       UP TO 10 ROWS
        FROM ekpo
        INTO TABLE it_ekko.
      LOOP AT it_ekko INTO wa_ekko.
        ld_color = ld_color + 1.
        IF ld_color = 8.
          ld_color = 1.
        ENDIF.
        CONCATENATE 'C' ld_color '10' INTO wa_ekko-line_color.
        MODIFY it_ekko FROM wa_ekko.
      ENDLOOP.
    ENDFORM.                    " DATA_RETRIEVAL
          FORM top-of-page                                              *
    FORM top-of-page.
      WRITE:/ 'This is First Line of the Page'.
    ENDFORM.
          FORM status                                                   *
    FORM status USING rt_extab TYPE slis_t_extab.  .
      SET PF-STATUS 'ALV'.
    ENDFORM.
          FORM USER_COMMAND                                          *
    -->  RF_UCOMM                                                      *
    -->  RS                                                            *
    FORM user_command USING rf_ucomm LIKE sy-ucomm
                             rs TYPE slis_selfield.            
      DATA ref1 TYPE REF TO cl_gui_alv_grid.
      CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
        IMPORTING
          e_grid = ref1.
      CALL METHOD ref1->check_changed_data.
      CASE rf_ucomm.
    when 'SAVE'.
    get all the modified entries and store them in an internal table and udpate them in to the required transaction or your custom table.
    endcase.
    endform.
    ENDFORM.
    here u need to 2 performs for PF status and USER_COMMAND in the ALV parameters.
    create a custom PF status and create push buttons and assign your ok codes in your PF status.
    if the field has to be edited in the ALV then pass EDIT = 'X' for that field in the fieldcatlog preparation.
    Hope this will help you.
    Regards,
    phani.

  • Please help to get onhand stock report with last purchase and billed date warehouse and item wise

    please help to get onhand stock report with last purchase and billed date warehouse and item wise

    Hi Rajeesh Ambadi...
    Try This
    SELECT distinct T0.ITEMCODE , t1.ItemName, T0.ONHAND as 'Total Qty',  
      T1.LASTPURDAT ,t1.LastPurPrc
    FROM OITW T0 INNER JOIN OITM T1 ON T0.ITEMCODE = T1.ITEMCODE
    INNER JOIN OITB T2 ON T1.ITMSGRPCOD=T2.ITMSGRPCOD left join ibt1 t3 on t3.itemcode = t0.itemcode and t3.whscode = t0.whscode
    WHERE
    T0.ONHAND>0
    AND T0.WhsCode ='[%0]'
    Hope Helpful
    Regards
    Kennedy

  • Creating a list in Pages with hierarchy

    How do you create a list in Pages with hierarchy?

    Hierarchy is just a matter of indent levels.
    Pages works by example so having set up the initial one level list, hit a return after one of the points and tab to move to the next level.
    Then apply settings in:
    Format > Text > Bullets & Lists > to each level if it isn't already an indented List
    You can save the final set of hierarchical list as a List Style for reuse.
    Peter

  • How to creat a summary of report with .txt

    Hi All,
         I want to creat a summary of report with .txt,and i have disabled the function about report generation in teststand.
         i created a complex sequence,it include some sub-sequences,example:the uut is tested on three different temperatures and four different voltages conditon.So i have creat three sub-sequences (diffrent temperatures) include four steps (different voltages),then mainsequence invoke three sub-sequences to excute test.
        i only want get the fail-step's summary with,include: fail-step's name,status 
        how to do?thanks a lot
    Solved!
    Go to Solution.

    You can use Parameters.Step.Name to get the failed step name. You can also use something like Parameters.Step.StepType.Name == "NI_MultipleNumericLimitTest" to filter different types of steps.
    As far as finding the entire failure chain...
    You can check RunState.CallStackDepth to see how many callers deep you are. Based on that information you can use RunState.Caller.Caller.(continued for however many callers deep you are).RunState.Step.Name or .Sequence.Name
    So if the CallStackDepth is 1, you would only need to use one Caller. If it was 2, you would need to recursively use 1 Caller and then 2 Callers and so on.
    CTA, CLA, MTFBWY

  • To fetch data on the basis of last program run date and time

    Hi all,
    My query is as folows:
    I am selecting BOM components from STPO table on the basis of some criteria.
    My requirement is to select only BOM components which are newly added or created after last program run,i.e. STPO-AEDAT and STPO-ANDAT are greater than last program run.Here i fetched last program date from customised structure(client specific) which has date field also,and compared with aedat and andat in STPO records.But how can I connect it with last run time as there is no such time field in STPO table.I need to fetch this data on the basis of last program run(time+date).
    Please help me..it's crucial,
    Thanks in advance,
    Meena

    Hi,
    We had a very similar requirement.
    We developed a custom-solution for this.
    Create a Z-Table and update it with your progname, date and time.
    Whenever the BOM was changed, it generated a change number ( this has to be done by the user)
    You can get the date and time from the change Number Table AENR and compare it with the timestamp in Z-TABLE
    Hope it helps,
    RJ

  • How to export 2 different report with a link at the same time

    Hi,
    Do anybody know how to export 2 different report with a link at the same time. I currently create a report which link to another report. But when I want to export the 1st report I also want the 2nd report also be exported.
    Thank you very much.
    Best Rgds,
    SL Voon

    Export all the three components individually.
    It will generate 3 script files. Now run them from SQL>
    null

  • Crystal Report with text(csv) data file, can we set it as input parameter?

    Hi,
    I am a new user of Crystal Reports 2008.
    I have created a report with charts in it. The input data comes from a csv text file.
    Can I set the name of this text file as an input parameter?
    as I need to generate 44 similar reports with different text filenames(and data)?
    Thank you.
    Regards

    Brian,
    Thanks much.
    I did exactly what you said.
    Just to see any change, I first gave a bad report file name just to see if I am accidentally pointing to a different file,
    but I got an error saying report not found.
    Then I renamed my original datafile name and generated a report and it still generated one without giving an error.
    Then I also gave a junk name to the logoninfo and printed that name, the new name was assigned to logoninfo, but the code did not error out.
    It ended up generating the report.
    Now here is what I think is happening,
    1) The save data in report option seems to be still on even though I have turned it off in 2 locations
    a) file -> Report Options
    b) file -> Options -> Reporting tab.
    2) For some reason the logoninfo is getting ignored as well.
    Since I did not see any answers yesterday I posted a link to this thread on the .Net forum
    Crystal Report with text(csv) data file, can we set it as input param? C#
    and Ludek Uher says that I am connecting to the text file via a DAO database engine and so need to use the same code for changing the text file as for changing an Access database.
    But the link he gave me tells me to try the same thing that we have been trying..
    Here is my plan,
    1) I will first try and find out why my save data with report option is still on ( but it shows off in Crystal ).
    2) why is LogonInfo getting ignored.
    Meanwhile any suggestions from anyone are welcome.

  • How to process reports with two different date fields

    Morning all,
    This question is somewhat similar to what I asked few days back. I created two different reports for two different departments (Credit Control and Free of Charge Control).
    These two reports pull data from two different date fields and has different status check ups.
    Few days back my director requested me if he can have both reports in one report. That is when I asked question from all of you regarding two reports.
    Anyhow, that was created by implementing two sub reports however, the director asked me to combine the two different reports into one in such a way that the output records should be added up with each other hence one single report with all combined data of Credit Control and Free of Charges (not two sub reports in one report).
    The problem here which I am getting is that, both reports uses two different date fields. I can live with two different statuses as that can be easily done within formula/RT however how to create a report with Report Selection Formula condition which looks in both date fields and produces results accordingly?
    I have tried this by not putting any condition in report selection formula and ran the report, it produced total results from past 6 years.
    Any ideas how to produce combined report which has two different date fields?
    Many thanks in advance
    Regards
    Jehanzeb
    What I

    Charliy,
    No the both dates are from two different databases, tables and fields. The Credit date field is from KLAB database under max table where as the FOC date field is from SAE database under maxmast table. Klab date is under credit2 table where as foc date is under order header table.
    So its more like this:
    Klab->Max-Credit2--->Credit_date
    Sae->Maxmast->Order_header---Date entered.
    two dates totally different tables, dbs
    however, I will try your idea too and see if that works.
    Regards
    Jehanzeb

  • Report with a break above and labels

    We want to create a Report with a break above and labels. There are examples for each of these, but I do not see an example of both in the same Report. Hopefully this is possible?? What can you tell us?
    Thanks, Wayne

    Thanks for the reply. I have the columns set up just as you have suggested. I even created a new report with form wizard and tried to update those two questionable columns.
    If the columns are null, and I add values, they save. But then when I go back and update the record, but different columns, it nulls out the two I am talking about. I am wondering if a trigger is out there someplace that is causing them to get nulled out.
    Regards,
    Jeff

  • Vendor with last transaction date

    Hi,
    Can I generate any report which contains all vendors with last transaction date? THis is for audit purpose.
    Thanks & Regards,
    Rajaneesh.C

    Hi,
    You can take the report of the  FI accounting document for all vendors based on the company code and the posting date ( input the present date) in the T code- S_ALR_87012991.
    regards,
    Kannan B

Maybe you are looking for

  • Sales order creation error

    Hello Everyone, I am getting this error while creating a sales order : Please analyse and let me know the solution: Material 302309 is not defined for sales org.5000,  distr.chan.06,  language  EN                                                      

  • Error message when trying to put videos on my 30G ipod video

    Every time I try to put videos from iTunes onto my ipod I get an error message saying that the video "could not be copied onto "Brennen's Ipod" because it cannot be played on this iPod".

  • Problem with Radio Streaming with SHOUTcast

    Hi overyone, I don't speak english, but I hope you understand I have an audio player, which connects to a SHOUTcast server. Everything works fine, the player connects, and begins to download the audio, and plays, but after 1 or 2 minutes, loading the

  • Photoshop CS6 and encryption

    I have a PKI solution that is running with the company that I work for (authentiation purposes only) and I had to have that certificate revoked and a new one generated due to the token breaking that the certificate sat. After I had that done I can no

  • For applying patch 8587502

    Hi, For applying patch 8587502:R12.IBY.A on 12.0.6 there is a per-req 7533081:R12.AR.A which is Obsolete and replacement is 7828946. 7828946 is cpc jul09 and is not in my AD_BUGS table. How to make sure weather i need to apply this or i have cpc appl