Wednesday, November 24, 2010

SAP User Exit

Posted by Aries Wandari

On module SAP PM, user has scenario that Work Order can’t technically complete if Purchase Requisition generate from that WO not processed to PO yet, with condition the PR in valid (not deleted).

Googling, I find Report  Z_FIND_USEREXIT. Put your tcode and execute, you’ll find the exit, the component, the function module, and the exit include. Then we can edit this code.

Z_FIND_USEREXIT

image

Get the Exit name.

image

image

image

Get the Function Module.

image

Get the include.

image

ZXWO1U03

*&---------------------------------------------------------------------*
*&  Include           ZXWO1U03                                         *
*&---------------------------------------------------------------------*
DATA : STATUS like EBAN-STATU,
        BANFN like EBAN-BANFN,
        LOEKZ like EBAN-LOEKZ.

select STATU BANFN LOEKZ into (STATUS, BANFN, LOEKZ)
    from EBAN
    where ARSNR = CAUFVD_IMP-RSNUM.

    IF STATUS NE 'B' AND LOEKZ NE 'X'.

      CALL FUNCTION 'POPUP_TO_DISPLAY_TEXT'
           EXPORTING
              titel     = 'Check TECO'
              textline1 = 'PR has not converted to PO :'
              textline2 = BANFN
              start_column = 25
              start_row    = 6.

      RAISE COMPLETION_REJECTED.

*      MESSAGE E899(00) WITH 'PR Number '
*                             BANFN
*                           ' has not converted to PO.'
*                           RAISING COMPLETION_REJECTED.
    ENDIF.
ENDSELECT.

--------------------

*&---------------------------------------------------------------------*
*& Report  Z_FIND_USEREXIT                                             *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*&                                                                     *
*&---------------------------------------------------------------------*

REPORT z_find_userexit NO STANDARD PAGE HEADING.

*&---------------------------------------------------------------------*

*&  Enter the transaction code that you want to search through in order

*&  to find which Standard SAP User Exits exists.

*&

*&---------------------------------------------------------------------*

*&---------------------------------------------------------------------*

*& Tables

*&---------------------------------------------------------------------*

TABLES : tstc,     "SAP Transaction Codes

         tadir,    "Directory of Repository Objects

         modsapt,  "SAP Enhancements - Short Texts

         modact,   "Modifications

         trdir,    "System table TRDIR

         tfdir,    "Function Module

         enlfdir,  "Additional Attributes for Function Modules

         tstct.    "Transaction Code Texts

*&---------------------------------------------------------------------*

*& Variables

*&---------------------------------------------------------------------*

DATA : jtab LIKE tadir OCCURS 0 WITH HEADER LINE.

DATA : field1(30).

DATA : v_devclass LIKE tadir-devclass.

*&---------------------------------------------------------------------*

*& Selection Screen Parameters

*&---------------------------------------------------------------------*

SELECTION-SCREEN BEGIN OF BLOCK a01 WITH FRAME TITLE text-001.

SELECTION-SCREEN SKIP.

PARAMETERS : p_tcode LIKE tstc-tcode OBLIGATORY.

SELECTION-SCREEN SKIP.

SELECTION-SCREEN END OF BLOCK a01.

*&---------------------------------------------------------------------*

*& Start of main program

*&---------------------------------------------------------------------*

START-OF-SELECTION.

* Validate Transaction Code

  SELECT SINGLE * FROM tstc

    WHERE tcode EQ p_tcode.

* Find Repository Objects for transaction code

  IF sy-subrc EQ 0.

    SELECT SINGLE * FROM tadir

       WHERE pgmid    = 'R3TR'

         AND object   = 'PROG'

         AND obj_name = tstc-pgmna.

    MOVE : tadir-devclass TO v_devclass.

    IF sy-subrc NE 0.

      SELECT SINGLE * FROM trdir

         WHERE name = tstc-pgmna.

      IF trdir-subc EQ 'F'.

        SELECT SINGLE * FROM tfdir

          WHERE pname = tstc-pgmna.

        SELECT SINGLE * FROM enlfdir

          WHERE funcname = tfdir-funcname.

        SELECT SINGLE * FROM tadir

          WHERE pgmid    = 'R3TR'

            AND object   = 'FUGR'

            AND obj_name = enlfdir-area.

        MOVE : tadir-devclass TO v_devclass.

      ENDIF.

    ENDIF.

* Find SAP Modifactions

    SELECT * FROM tadir

      INTO TABLE jtab

      WHERE pgmid    = 'R3TR'

        AND object   = 'SMOD'

        AND devclass = v_devclass.

    SELECT SINGLE * FROM tstct

      WHERE sprsl EQ sy-langu

        AND tcode EQ p_tcode.

    FORMAT COLOR COL_POSITIVE INTENSIFIED OFF.

    WRITE:/(19) 'Transaction Code - ',

    20(20) p_tcode,

    45(50) tstct-ttext.

    SKIP.

    IF NOT jtab[] IS INITIAL.

      WRITE:/(95) sy-uline.

      FORMAT COLOR COL_HEADING INTENSIFIED ON.

      WRITE:/1 sy-vline,

      2 'Exit Name',

      21 sy-vline ,

      22 'Description',

      95 sy-vline.

      WRITE:/(95) sy-uline.

      LOOP AT jtab.

        SELECT SINGLE * FROM modsapt

        WHERE sprsl = sy-langu AND

        name = jtab-obj_name.

        FORMAT COLOR COL_NORMAL INTENSIFIED OFF.

        WRITE:/1 sy-vline,

        2 jtab-obj_name HOTSPOT ON,

        21 sy-vline ,

        22 modsapt-modtext,

        95 sy-vline.

      ENDLOOP.

      WRITE:/(95) sy-uline.

      DESCRIBE TABLE jtab.

      SKIP.

      FORMAT COLOR COL_TOTAL INTENSIFIED ON.

      WRITE:/ 'No of Exits:' , sy-tfill.

    ELSE.

      FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.

      WRITE:/(95) 'No User Exit exists'.

    ENDIF.

  ELSE.

    FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.

    WRITE:/(95) 'Transaction Code Does Not Exist'.

  ENDIF.

* Take the user to SMOD for the Exit that was selected.

AT LINE-SELECTION.

  GET CURSOR FIELD field1.

  CHECK field1(4) EQ 'JTAB'.

  SET PARAMETER ID 'MON' FIELD sy-lisel+1(10).

  CALL TRANSACTION 'SMOD' AND SKIP FIRST SCREEN.

Tuesday, November 9, 2010

PHP and IIS Preparation

Posted by Aries Wandari

PHP (ISAPI) and IIS Preparation
1. Copy php5ts.dll to C:\windows\system32
2. Tell php how to execute php files

On IIS, right click on web site > properties > click tab home directory > click configuration button.

image

image

Add application extension mapping, at executable field input c:\php\php5isapi.dll, at extension field input.php

image 
3. Add web service extension as picture below.

image
Insert extension name and required files.

image

Check “set extension status to allowed check box”.

image

Allowing index.php files to run as a directory default.

image
Add windows path c:\php\ext (right click on my computer > advanced > environment variables > system variables)

image
Check by running phpInfo function (tes.php) and see whether configuration and library is loaded normally.

 

TROUBLESHOOT

1. Error open folder for session.

clip_image002

adodb* is using tmp folder as session and cache store. We need to create the folder

Create tmp folder on E:\ (same drive of web application folder)

2. Error connect mssql.

clip_image004

MSSQL refuse connection of the application.

Right click on SQL Server > properties > tab Security > Authentification, SQL Server and Windows.

clip_image006

3. Configuration file php.ini located on c:\windows instead of its real location on c:\php

Its mean that system cant find config file and load default configuration. Need to add phprc system variables.

System variables:
Variable: PHPRC
Value: C:\php