Custom Auhtorization in WL7

I have implement a custom security realm in WL7 and it worlks great. I
implement a Custom Authenticator which authenticates against an Oracle DB.
I now need to Authorize against the Oracle DB as well and I can't figure out
how to get the current Resource that is being accessed in the WEB APP for
authorization. I implemented the Sample Authorized and RoleMapper just to
see what is being looked up when authorization takes place.
The only thing I can see is the name of the Application being accessed and
not the name of the WebResouce it self such as a JSP page or Icon etc. If I
defined web-resources in the Web.xml under the Security Constraint section,
it does show the name of the web-resource that I defined. The problem is
that I don't want to have to declare web-resources in the deployment
descriptor but rather define them in the Database.
Is there a way to find out from the FJAuthorizationProviderImpl or the
FJRoleMapperProviderImpl the name of the actual resource (jsp,servlets,
ejbs, methods, pools,etc.) being accessed? This way I can use this name to
lookup principals and roles authorized to use this resource.
Thanks you for any help or tips you may have,
Jerrie

Vimala,
I'm not sure what you meant. Did you try to send an attachement?
Anyways, I do have the Sample providers and they do work fine. It is quite
clear to me how to implement this but what I am having a problem with is how
I get the resource name being accessed from the WebApp do I can perform an
Authorization lookup base on th resource being accessed.
Everytime I lookup the name of the resource being accessed, I only get the
name of the WebApp from the WebResource property. I need to find out the
exact name of the page or what is being accessed from the URL so I can use
it to lookup the Authorization for it from the Oracle database.
The only time this works it when I define these resources in the Security
Constraints section of the web.xml file. Once I do this, the WebApp passes
the web-resource-name of the page or recource defined in the web.xml when
accessed.
I hope I am making sense, please let me know if I need to explain further.
Jerrie
"Vimala Ranganathan" <[email protected]> wrote in message
news:[email protected]...
Hi,
WebLogic provides a example of a sample providers.
I have attached them the readme is self explanatory.
Please let me know if you have any issues.
-Vimala
Kelly Peng wrote:
"Jerrie Pineda" <[email protected]> wrote:
I have implement a custom security realm in WL7 and it worlks great.
I
implement a Custom Authenticator which authenticates against an Oracle
DB.
I now need to Authorize against the Oracle DB as well and I can't
figure
out
how to get the current Resource that is being accessed in the WEB APP
for
authorization. I implemented the Sample Authorized and RoleMapper just
to
see what is being looked up when authorization takes place.
The only thing I can see is the name of the Application being accessed
and
not the name of the WebResouce it self such as a JSP page or Icon etc.
If I
defined web-resources in the Web.xml under the Security Constraintsection,
it does show the name of the web-resource that I defined. The problem
is
that I don't want to have to declare web-resources in the deployment
descriptor but rather define them in the Database.
Is there a way to find out from the FJAuthorizationProviderImpl or the
FJRoleMapperProviderImpl the name of the actual resource (jsp,servlets,
ejbs, methods, pools,etc.) being accessed? This way I can use thisname
to
lookup principals and roles authorized to use this resource.
Thanks you for any help or tips you may have,
Jerrie
I am trying to implement a custom authentication provider for WLS 7. Itis grea
to hear your implementation works!! Can you
kindly point me to a resource where I can get a sample
implementation of the custom authentication provider.
Thanks in advance

Similar Messages

  • Custom authorization provider for WL7 problem (not getting all parameters from ContextHandler)

    I'm implementing a custom authorization provider for WebLogic 7.
    In my Access Decision isAccessAllowed method I need to check values of
    the parameters passed to an EJB method. Now, if an EJB method I have
    two parameters of the same type, for example int, when I get
    ContextElement array from ContextHandler and iterate through it to get
    names and values of the parameters I get the same value (value of the
    first int parameter) from both ContextElement's.
    Here is the code:
    String [] names = ch.getNames();
    for (int i = 0; i < names.length; i++)
    String name = names;
    System.out.println("name = " + name);//here it gets array of
    Strings, which contains two parameter names: "int","int",
    which are the types of EJB method parameters
    ContextElement[] ces= ch.getValues(names);
    for (int j = 0; j < ces.length; j++)
         ContextElement ce = ces[j];
         System.out.println(ce.getName()+ " = " + ce.getValue());
    //here if the value of the first int was 2 and the second 0,
    it would get 2 from both ContextElements (each of ContextElements will
    have name "int"
    If I try this with method parameters of different types, for example
    int with value 2 and long with value 0, then this code work fine -
    first ContextEleement has name int and value 2 and the second has name
    long and value 0.
    Thanks,
    -Oleg Kozlov.

    I'm implementing a custom authorization provider for WebLogic 7.
    In my Access Decision isAccessAllowed method I need to check values of
    the parameters passed to an EJB method. Now, if an EJB method I have
    two parameters of the same type, for example int, when I get
    ContextElement array from ContextHandler and iterate through it to get
    names and values of the parameters I get the same value (value of the
    first int parameter) from both ContextElement's.
    Here is the code:
    String [] names = ch.getNames();
    for (int i = 0; i < names.length; i++)
    String name = names;
    System.out.println("name = " + name);//here it gets array of
    Strings, which contains two parameter names: "int","int",
    which are the types of EJB method parameters
    ContextElement[] ces= ch.getValues(names);
    for (int j = 0; j < ces.length; j++)
         ContextElement ce = ces[j];
         System.out.println(ce.getName()+ " = " + ce.getValue());
    //here if the value of the first int was 2 and the second 0,
    it would get 2 from both ContextElements (each of ContextElements will
    have name "int"
    If I try this with method parameters of different types, for example
    int with value 2 and long with value 0, then this code work fine -
    first ContextEleement has name int and value 2 and the second has name
    long and value 0.
    Thanks,
    -Oleg Kozlov.

  • Custom tag attribute named operation

              Hi,
              I ported a web application from WL6.1sp4 to WL7.0sp2 and expirienced a wired problem.
              All my JSP's did not compile anymore. I received a error message "no setter for
              attribute operation defined", although there was a a method setOperation in the
              current code and there were no code modifications at all.
              After replacing all attributes named operation with opmode the system worked fine
              again.
              Is there any restriction in naming your attributes in custom tags?
              Thanks for help
              Michael
              

              Me again,
              I checked again the parameters of the VM (Sun JDK 1.3.1_06) and tried the the
              different options of the HotSpot compiler. I found out that the problem I reported
              with the last posting can easily be reproduced if you run the VM in HotSpot-Classic
              mode.
              I suppose it is a bug in Sun's VM for Windows. Does somebody have similar expiriences?
              Michael
              "Michael" <[email protected]> wrote:
              >
              >Hi,
              >
              >I ported a web application from WL6.1sp4 to WL7.0sp2 and expirienced
              >a wired problem.
              >All my JSP's did not compile anymore. I received a error message "no
              >setter for
              >attribute operation defined", although there was a a method setOperation
              >in the
              >current code and there were no code modifications at all.
              >
              >After replacing all attributes named operation with opmode the system
              >worked fine
              >again.
              >
              >Is there any restriction in naming your attributes in custom tags?
              >
              >Thanks for help
              >Michael
              

  • Custom classes in Web-INF/classes not recognised

              Can any body tell me why classes in WEB-INF/classes directory are not recognised by
              the WebLogic while importing in JSP??
              Thanks in advance
              

              Hi all,
              we were having the same problem - WebLogic not recognizing custome classes in
              the WEB-INF/classes directory. As soon as we removed the Class-Path entries from
              the WARs Manifest file (and placed the referenced JARs in the WEB-INF/lib directory)
              everything worked fine. It seems as if WebLogic excludes WEB-INF/classes from
              the classpath in case Class-Path entries in the manifest file are present.
              Is there a patch for this? If yes, I'd appreciate your notice!
              Cheers
              Georg
              [email protected] (Trace Lowe) wrote:
              >Sounds like I'm having the same problem. I have a JSP application, in
              >a WAR file, in an EAR (no EJBs). I'm trying to figure out where to
              >place the utility jar files. I've read several threads, and
              >documentation on WL7, and it seems that I should be able to place the
              >jars in the WAR lib or classes directory. I tried both, neither seems
              >to work. I even tried adding a "Class-Path" entry in the EAR manifest
              >in hopes that it might work. Nope.
              >
              >Can anyone help?
              >
              >- Trace
              >
              >"Dineshkrn" <[email protected]> wrote in message news:<3d32cab0$[email protected]>...
              >> Can any body tell me why classes in WEB-INF/classes directory are not
              >recognised by
              >> the WebLogic while importing in JSP??
              >>
              >>
              >> Thanks in advance
              

  • 2-way SSL when WL7 is client; get "Required peer certificates not supplied by peer"

    Background: WL7 is properly configured to use 2-way SSL, and works fine whenever
    its acting as the Server; i.e., I have 2-way SSL working between a Web Browser
    and WL7, or between Tomcat and WL7. However, when trying to get 2-way SSL (mutual
    authentication) working between a WL7 server acting as a client and another server
    such as Tomcat, acting as the server, I get a "Required peer certificates not
    supplied by peer" error. The initial ServerHello handshake is fine; the problem
    arises when the Tomcat server, for example, then requests WL7 to serve up its
    client certificate. It's as if WL7 does not know where to locate its "client"
    certificate.
    I had the same problem with Tomcat initially, where it would also not know how
    to locate its "client" certificte. I resolved the problem by setting the following
    system properties:
    javax.net.ssl.keyStore=...
    javax.net.ssl.keyStorePassword=...
    javax.net.ssl.trustStore=...
    javax.net.ssl.trustStorePassword=...
    Are their analogous system properties I need to set on the WL7 side of things,
    as I noticed that WL7 seems to use its own proprietary version of JSSE API's?
    How do I configure WL7 to locate its "client" certificate?
    Thanks! Your help is greatly appreciated.
    -Dan

    Weblogic uses Certicom SSL implementation which has classes that conflict with
    JSSE classes. As a result opening SSL connection from WLS over JSSE or API like
    SOAPConnection that uses JSSE does not work as expected. The javax.net.ssl properties
    are not supported and there is no replacement for the default identity keystore
    property.
    The best workaround I can think of in this case is to pass as the second parameter
    to SOAPConnection.call() method a URL instance created with a custom URLStreamHandler
    extending the weblogic.net.http.Handler. This handler can override the Handler.openConnection(URL)
    method and use the HttpsURLConnection.loadLocalIdentity method to initialize identity
    of the returned connection. For example:
    public class MyHandler extends weblogic.net.http.Handler {
    protected URLConnection openConnection(URL u) throws IOException {
    URLConnection c = super.openConnection();
    if (c instanceof weblogic.net.http.HttpsURLConnection) {
    // initialize ssl identity
    ((weblogic.net.http.HttpsURLConnection) c).loadLocalIdentity(certChain,
    privateKey);
    return c;
    URL someHTTPSUrlEndpoint = new URL("https", "localhost", 7002, "myfile", new MyHandler());
    replyMessage = con.call(someSOAPMessageInstance, someHTTPSUrlEndpoint);
    Pavel.
    "ddumitru" <[email protected]> wrote:
    >
    Thanks, Pavel, for replying,
    I've been reading and re-reading that page for quite a while now. Unfortunately,
    the examples given are for when WL7 is acting as the "server" and not
    the "client";
    i.e., when some other server, such as Tomcat, WebSphere, or Oracle 9IAS,
    reaches
    out to the WL7 instance first, or when one WL7 instance talks to another
    WL7 instance
    via JNDI.
    In my case, my WL7 instance needs to initiate a Web Service call; i.e.,
    needs
    to reach out to another server via a SAAJ (SOAP with Attachments) API
    call. My
    sending servlet uses the SAAJ (SOAP with attachments) API to make a Web
    Service
    call to another server, as follows:
    SOAPConnectionFactory scf = SOAPConnectionFactory.newInstance();
    SOAPConnection con = scf.createConnection();
    SOAPMessage replyMessage = con.call( someSOAPMessageInstance, someHTTPSUrlEndpoint
    With the SAAJ API, as illustrated above, I don't see a direct way of
    configuring
    (using URLConnection, SSLContext, SSLSocketFactory, etc.) the SSL connection
    prior
    to making a call, as suggested in the link you mentioned. Also, the
    receiving
    server may implement its Web Services using a non-BEA application server
    that
    may not even use the J2EE platorm. As such, I don't believe I can use
    the JNDI
    solution provided in that same link.
    Again, I was able to make 2-way SSL (Mutual Authentication) connections
    between
    Tomcat and WL7 instances using the SAAJ API's when Tomcat was the client
    initiating
    the SAAJ call. In this scenario, Tomcat requested WL7 for its certificate,
    WL7
    served it up, and Tomcat then verified it. Then, in turn, WL7 asked
    Tomcat for
    its certificate, Tomcat presented it, and WL7 was able to verify Tomcat's
    certificate.
    I suppose I was able to make it all work under this scenario because
    I was able
    to configure Tomcat, which is using native JSSE API's, to locate its
    "client"
    certificate by setting the following system properties, as mentioned
    previously:
    javax.net.ssl.keyStore=...
    javax.net.ssl.keyStorePassword=...
    javax.net.ssl.trustStore=...
    javax.net.ssl.trustStorePassword=...
    Based upon your feedback, I now understand that WL7 cannot be configured
    in a
    similar manner because WL7 uses its own version of the JSSE API's. Any
    ideas
    on what I might try next?
    Thanks!
    -Dan
    "Pavel" <[email protected]> wrote:
    WLS SSL API does not support any system properties for SSL identity.
    The client's
    identity has to be configured via methods of SSL API. The trust configuration
    of SSL client running on WL server and using WLS SSL API will be the
    same as of
    the WL server.
    See http://e-docs.bea.com/wls/docs70/security/SSL_client.html#1019570
    for more information on this. "Writing Applications that Use SSL" contains
    code
    examples that use different SSL APIs to connect over two-way SSL.
    Pavel.
    "ddumitru" <[email protected]> wrote:
    Background: WL7 is properly configured to use 2-way SSL, and worksfine
    whenever
    its acting as the Server; i.e., I have 2-way SSL working between a
    Web
    Browser
    and WL7, or between Tomcat and WL7. However, when trying to get 2-way
    SSL (mutual
    authentication) working between a WL7 server acting as a client andanother
    server
    such as Tomcat, acting as the server, I get a "Required peer certificates
    not
    supplied by peer" error. The initial ServerHello handshake is fine;
    the problem
    arises when the Tomcat server, for example, then requests WL7 to serve
    up its
    client certificate. It's as if WL7 does not know where to locate its
    "client"
    certificate.
    I had the same problem with Tomcat initially, where it would also not
    know how
    to locate its "client" certificte. I resolved the problem by setting
    the following
    system properties:
    javax.net.ssl.keyStore=...
    javax.net.ssl.keyStorePassword=...
    javax.net.ssl.trustStore=...
    javax.net.ssl.trustStorePassword=...
    Are their analogous system properties I need to set on the WL7 sideof
    things,
    as I noticed that WL7 seems to use its own proprietary version of JSSE
    API's?
    How do I configure WL7 to locate its "client" certificate?
    Thanks! Your help is greatly appreciated.
    -Dan

  • Weblogic700 sp4 custom realm for SAM authentication

    we have an applicaiton running on WL7.0 sp4 which will be protected by sun access manager 7.1, but in the domain config we need to create a realm that authentication provider will be SAMAuthentication , I want to know whether we need to create a custom realm or we can create iplanet realm.

    Well, once again, I'm going to have to provide my own answer.
    After much waiting and then deciding to invest much time researching documentation and tracking down information to assist in my solution, I have manage to find the golden egg for my own recipe of a solution.
    In addition to the very helpful info I have found at:
    http://developers.sun.com/prodtech/appserver/reference/techart/as8_authentication/index.html
    I have mange to get my custom realm to work with the additional configuration of my sun-application.xml for my ear file. Even though I only wanted to specify my custom realm for my web.xml file, it turns out that in addition to this, I had to also define it in my sun-application.xml file (manually in XML text mode - within Netbeans 5.5) as follows:
    <sun-application>
        <realm>mycustrealm</realm>
        <security-role-mapping>
            <role-name>mycust_role</role-name>
            <group-name>mycust_group</group-name>
        </security-role-mapping>
    </sun-application>

  • Delegation in WL7?

    What i need is to write fat client in Java that first authenticate user by JAAS
    (Krb) and then communicate
    with WL7 app server in the cluster configuration.
    The question is how security is to be implemented in this
    case, namely:
    1) How client securely passes context of authenticated user
    ( by Kerberos JAAS module) to appserver? How appserver
    makes sure that the user is who he pretend to be?
    2) How appserver1 passes context to appserver2 in the cluster.
    Note, that i assuming that all network (between client and appserver and between
    appservers is untrusted and man in the middle attacks are highly possible).
    Thanks
    Aleksey

    Your point is valid. Currently you got to write the customized application for doing the same. You can modify the default worklist application to address delegate functionality.

  • WL7 to iPlanet Directory Authentication....help!

    ok. I've created my security realm provider with the iplanetAuthenticator. Now,
    how do I protect a directory in my ear file and how do I password protect a /servlet/
    that I have with a login and password? Do I need to modify my web.xml? If so,
    does anyone have any samples I can take a look at?
    The docs aren't also clear on the user I must setup in the ldap directory and
    how that works...Can someone help?
    I didn't get a reply before so I'm asking again...help!

    "SureshKumar" <[email protected]> wrote:
    >
    >
    >
    Hi Frank,
    I followed the step as per your previous mail and made my
    Security
    Realm as default
    one which is now true.But when I tried to reboot the Weblogic server
    to view my
    users and
    groups created in LDAP server(IPlanet Directory server 5.1) I face 2
    problems
    1.No entries are created in CommoConfig.xml file for the Realm(say SPASRealm)
    which I
    made as default inside MBeans tag.Only "myRealm" is only available there.
    2.Authetication for system(my weblogic server username is "system") denied
    error.
    Iam attaching my CommoConfig.xml and Config.xml files for your reference.
    thanks in advance
    Suresh.K
    "Franko" <[email protected]> wrote:
    "SureshKumar" <[email protected]> wrote:
    Hi Frank,
    rgds
    Suresh.K
    "Frank" <[email protected]> wrote:
    "Peter" <PeterB> wrote:
    "SureshKumar" <[email protected]> wrote in message
    news:[email protected]...
    Hi Frank,
    Iam also doing teh same WL7 to iPlanet Directory Authenticationtask
    for
    my project.My Security Realm is not getting activated even though
    I
    follow
    as
    per the document provided in
    http://edocs.bea.com/wls/docs70/secmanage/realm.html#set_default_realm.
    Can u please give me some help how to activate it(meaning Realm
    which
    I
    created
    should be true in weblogic console)
    Is it the default realm?
    DO YOU HAVE ANY EXAMPLES OF YOUR WEB.XML WITH IPLANET DIRECTORY SERVER?
    JUST WANT
    TO TAKE A LOOK.
    Suresh, I see where you are coming from:
    After you define attributes on the new security realm and configurethe
    security
    providers for the security realm, set the new security realm as thedefault
    (active)
    security realm.
    To set the new security realm as the default (active) security realm:
    Expand the Domain node (for example, Examples).
    Select the Security tab.
    Select the General tab.
    The pull-down menu on the Default Realm attribute displays the security
    realms
    configured in the WebLogic Server domain.
    Note: If you create a new security realm but do not configure the minimun
    required
    security providers in the security realm, the realm will not be available
    from
    the pull-down menu.
    Select the security realm you want to set as the default security realm.
    Click Apply.
    Reboot WebLogic Server. If you not reboot WebLogic Server, the new realm
    is not
    set as the default security realm.
    To verify you set the default security realm correctly:
    Expand the Security-->Realms nodes.
    The Realms table shows all realms configured for the WebLogic Server
    domain. The
    default (active) security realm has the Default Realm attribute setto
    true.
    I DON'T BELIEVE THESE INSTRUCTIONS ARE CORRECT. IF YOU READ AND TRYTO
    FOLLOW
    IT, SOME OF THE STUFF THEY TALK ABOUT DOESN'T EXIST.
    Have you tried to modify the default "myrealm" instead of creating a custom one.
    I guess I was in a similar predicament than you last week, but I'm getting a little
    farther ever day.

  • Custom purchase requsitionto vendor open and cleared payment report

    dear all i develop report but i cant ableto show in that open amount and cleared amount of vender in that report so please see this report and feedback me for logic to show open and clear amount of vendor purchase orderwise or vendorwise
    report zpo_purchase_history no standard page heading message-id 00.
    TABLES : bsik, bsak, lfa1, lfb1, skb1, t001, bapifvdexp_vzzbepp.
    type-pools:slis,ICON.
    types :begin of ty_po,
            banfn type eban-banfn,
            "Purchase Requisition Number
            bnfpo type eban-bnfpo,
            "Item Number of Purchase Requisition
            ekgrp type eban-ekgrp,                 "Purchasing Group
            badat type eban-badat,
            "Requisition (Request) Date
            menge type eban-menge,
            KNTTP TYPE EBAN-KNTTP,
             PSTYP type eban-PSTYP,
            "Purchase Requisition Quantity
            meins type eban-meins,
            "Purchase Requisition Unit of Measure
            lifnr type ekko-lifnr,                 "Vendor Account Number
            bedat type ekko-bedat,                 "Purchasing Document Date
            ebeln type ekpo-ebeln,
            "Purchasing Document Number
            ebelp type ekpo-ebelp,
            "Item Number of Purchasing Document
            matkl type ekpo-matkl,                 "Material Group
            mtart type ekpo-mtart,                 "Material Type
            matnr type ekpo-matnr,                 "Material Number
            txz01 type ekpo-txz01,                 "Short Text
            menge1 type ekpo-menge,                "Purchase Order Quantity
            meins1 type ekpo-meins,
            "Purchase Order Unit of Measure
            balqty type ekpo-menge,                "Balance Quantity
            netpr type ekpo-netpr,
            "Net Price in Purchasing Document
            peinh type ekpo-peinh,                 "Price Unit
            mblnr type mseg-mblnr,
            "Number of Material Document
            zeile type mseg-zeile,                 "Item in Material Document
            menge2 type mseg-menge,                "GR Quantity
            meins2 type mseg-meins,                "GR Unit of Measure
            werks type mseg-werks,                 "Plant
            charg type mseg-charg,                 "Batch
            belnr type rbkp-belnr,
            "Document Number of an Invoice Document
            bldat type ekbe-bldat,                 "Document Date in Document
            belnr_b type rbkp-belnr,
            SHKZG type ekbe-SHKZG ,                "Debit/Credit Indicator
            DMBTR type   bsik-dmbtr,                "Amount in Local Currency
            DMBTR_C type   bsAk-dmbtr,                "Amount in Local Currency
            thick(10) type c,                      "Thickness
            width(10) type c,                      "Width
            length(10) type c,                     "Length
            grade(10) type c,                        "Grade
            BELNR_d type bseg-belnr,
            xblnr type bkpf-xblnr,
            awkey  type bkpf-awkey,
            RMWWR type rbkp-RMWWR,
            WMWST1 type rbkp-WMWST1,
            end of ty_po.
    types :begin of ty_ekko,
            ebeln type ekko-ebeln,
            lifnr type ekko-lifnr,
            bedat type ekko-bedat,
            end of ty_ekko.
    types:begin of ty_ekpo,
            ebeln type ekpo-ebeln,
            ebelp type ekpo-ebelp,
            matnr type ekpo-matnr,
            txz01 type ekpo-txz01,
            menge type ekpo-menge,
            meins type ekpo-meins,
            netpr type ekpo-netpr,
            peinh type ekpo-peinh,
            banfn type ekpo-banfn,
            bnfpo type ekpo-bnfpo,
            mtart type ekpo-mtart,
            end of ty_ekpo.
    types :begin of ty_eban,
            banfn type eban-banfn,
            bnfpo type eban-bnfpo,
            matnr type eban-matnr,
            menge type eban-menge,
            meins type eban-meins,
            end of ty_eban.
    types : begin of ty_ekbe,
             ebeln type ekbe-ebeln,
             ebelp type ekbe-ebelp,
             belnr type ekbe-belnr,
             bldat type ekbe-bldat,
             gjahr type ekbe-gjahr,
             buzei type ekbe-buzei,
             matnr type ekbe-matnr,
             DMBTR type ekbe-dmbtr,
             shkzg type ekbe-shkzg,
             end of ty_ekbe.
    types : begin of ty_mseg,
             mblnr type mseg-mblnr,
             mjahr type mseg-mjahr,
             zeile type mseg-zeile,
             menge type mseg-menge,
             meins type mseg-meins,
             ebeln type mseg-ebeln,
             ebelp type mseg-ebelp,
             matnr type mseg-matnr,
             werks type mseg-werks,
             charg type mseg-charg,
             end of ty_mseg.
    types : begin of ty_rbkp,
             belnr type rbkp-belnr,
             gjahr type rbkp-gjahr,
             bldat type rbkp-bldat,
             lifnr type rbkp-lifnr,
             ZUONR type rbkp-ZUONR,
             RMWWR type rbkp-RMWWR,
             WMWST1 type rbkp-WMWST1,
             end of ty_rbkp.
    types : begin of ty_bseg,
             bukrs type bseg-bukrs,
             belnr type bseg-belnr,
             gjahr type bseg-gjahr,
             buzei type bseg-buzei,
             valut type bseg-valut,
             wrbtr type bseg-wrbtr ,
             augbl type bseg-augbl,
             matnr type bseg-matnr,
             lifnr type bseg-lifnr,
             ebeln type bseg-ebeln,
             end of ty_bseg.
    types : begin of ty_rseg,
             belnr type rseg-belnr,
             gjahr type rseg-gjahr,
             ebeln type rseg-ebeln,
             ebelp type rseg-ebelp,
             matnr type rseg-matnr,
             bukrs type rseg-bukrs,
             end of ty_rseg.
    types : begin of ty_bsik,
             belnr type bsik-belnr,
              buzei type bsik-buzei,
             DMBTR type bsik-DMBTR,
             budat type bsik-budat,
             shkzg type bsik-shkzg,
             ebeln type bsik-ebeln,
             lifnr type bsik-lifnr,
             end of ty_bsik.
    types : begin of ty_bsak,
             belnr type bsak-belnr,
       lifnr type bsak-lifnr,
        ebeln type bsak-ebeln,
             DMBTR_C type bsak-DMBTR,
    ZUONR type bsak-ZUONR,
             end of ty_bsak.
    types: begin of ty_bkpf,
             BELNR type bkpf-belnr,
             xblnr type bkpf-xblnr,
             awkey  type bkpf-awkey,
           end of ty_bkpf.
    data: it_po type standard table of ty_po,
           it_ekko type standard table of ty_ekko,
           it_ekpo type standard table of ty_ekpo,
           it_eban type standard table of ty_eban,
           it_ekbe type standard table of ty_ekbe,
           it_mseg type standard table of ty_mseg,
           it_rbkp type standard table of ty_rbkp,
           it_rseg type standard table of ty_rseg,
           it_bseg type standard table of ty_bseg,
           it_bsik type STANDARD TABLE OF ty_bsik with header line,
           it_bsak type STANDARD TABLE OF ty_bsak,
           it_bkpf type standard table of ty_bkpf,
           wa_po type ty_po,
           wa_ekko type ty_ekko,
           wa_ekpo type ty_ekpo,
           wa_eban type ty_eban,
           wa_mseg type ty_mseg,
           wa_rbkp type ty_rbkp,
           wa_rseg type ty_rseg,
           wa_bseg type ty_bseg,
           wa_ekbe type ty_ekbe,
           wa_bsik type ty_bsik,
           wa_bsak type ty_bsak,
           wa_bkpf type ty_bkpf.
    data: it_fcat type slis_t_fieldcat_alv,
           it_lshead type slis_t_listheader,
           it_sort type slis_t_sortinfo_alv,
           wa_fcat type slis_fieldcat_alv,
           wa_lshead type slis_listheader,
           wa_layout type slis_layout_alv,
           wa_sort type slis_sortinfo_alv.
    data :it_cl_data like table of clobjdat,
           wa_cl_data like clobjdat.
    data: values(10) type n.
    data: value1(4) type N.
    data: c_matkl type ekpo-matkl,
           c_matnr type ekpo-matnr,
           c_ekgrp type eban-ekgrp,
           c_badat type eban-badat,
           c_index type sy-tabix,
           c_grmenge type mseg-erfmg,
           c_low(10) type c,
           c_high(10) type c,
           c_date type string,
           c_bukrs type ekko-bukrs,
           c_WERKS type eban-WERKS.
    data: gd_date(10).
    DATA: V_EVENTS TYPE SLIS_T_EVENT,
           WA_EVENT TYPE SLIS_ALV_EVENT.
    *********Selection screen variables*********
    selection-screen:begin of block b1 with frame title text-001.
    select-options: s_bukrs for c_bukrs DEFAULT  'bmp1',
                     s_WERKS for c_WERKS,
                     s_matnr for c_matnr DEFAULT 'rm-01',
                     s_matkl for c_matkl ,
                     s_badat for c_badat ,"obligatory,
                     s_ekgrp for c_ekgrp.
    parameters: ch_bal as checkbox.
    selection-screen:end of block b1.
    *initialization.
    * PERFORM EVENT_CALL.
    *  PERFORM POPULATE_EVENT.
    start-of-selection.
         PERFORM EVENT_CALL.
       PERFORM POPULATE_EVENT.
       perform getdata.
       perform setdata.
       perform fieldcat.
       perform display.
    *&      Form  GETDATA
    form getdata .
       select a~BANFN
              a~bnfpo
              a~ekgrp
              a~badat
              a~KNTTP
              a~PSTYP
              b~ebeln
              b~ebelp
              b~matkl
              b~matnr
              b~bukrs
              into corresponding fields of table it_po
              from eban as a inner join ekpo as b
              on a~banfn = b~banfn and
                 a~bnfpo = b~bnfpo AND
                 A~KNTTP = B~KNTTP and
                 a~PSTYP = b~PSTYP
              where  a~badat in s_badat and
                     a~ekgrp in s_ekgrp and
                     a~WERKS in s_WERKS and
                     b~matnr in s_matnr and
                     b~matkl in s_matkl and
                     b~bukrs in s_bukrs and
                     b~loekz <> 'L' and
                     a~loekz <> 'X'.
       if it_po[] is not initial.
         select ebeln
                ebelp
                matnr
                txz01
                menge
                meins
                netpr
                peinh
                banfn
                bnfpo
                mtart
                from ekpo into table it_ekpo
                for all entries in it_po
                where ebeln = it_po-ebeln and
                      ebelp = it_po-ebelp and
                      loekz <> 'L'.
         select banfn
                bnfpo
                matnr
                menge
                meins
                from eban into table it_eban
                for all entries in it_po
                where banfn = it_po-banfn and
                      bnfpo = it_po-bnfpo and
                      loekz <> 'X'.
         if it_ekpo[] is not initial.
           select ebeln
                  lifnr
                  bedat
                  from ekko into table it_ekko
                  for all entries in it_ekpo
                  where ebeln = it_ekpo-ebeln.
           select ebeln
                  ebelp
                  belnr
                  bldat
                  gjahr
                  buzei
                  matnr
                  DMBTR
                  shkzg
                  from ekbe into table it_ekbe
                  for all entries in it_ekpo
                  where ebeln = it_ekpo-ebeln and
                        ebelp = it_ekpo-ebelp .
    *if it_ekbe-shkzg = 'H'.
    **ekbe-dmbtr = ekbe-dmbtr * -1.
    **ekbe-menge = ekbe-menge * -1.
    *endif.
    * select belnr
    *             gjahr
    *             ebeln
    *             ebelp
    *     from bseg into table it_bseg
    *             for all entries in it_ekpo
    *             where ebeln = it_ekpo-ebeln and
    *                   ebelp = it_ekpo-ebelp.
           select belnr
                  gjahr
                  ebeln
                  ebelp
                  matnr
                  bukrs
                  from rseg into table it_rseg
                  for all entries in it_ekpo
                  where ebeln = it_ekpo-ebeln and
                        ebelp = it_ekpo-ebelp.
         endif.
         if it_ekbe[] is not initial.
           select mblnr
                  mjahr
                  zeile
                  menge
                  meins
                  ebeln
                  ebelp
                  matnr
                  werks
                  charg
                  from mseg into table it_mseg
                  for all entries in it_ekbe
                  where mblnr = it_ekbe-belnr and
                        mjahr = it_ekbe-gjahr and
                        zeile = it_ekbe-buzei and
                        bwart = '101'.
         endif.
         if it_rseg[] is not initial.
           select belnr
                  gjahr
                  bldat
                  lifnr
                  ZUONR
                  RMWWR
                  WMWST1
                  from rbkp into table it_rbkp
                  for all entries in it_rseg
                  where belnr = it_rseg-belnr.
         endif.
    *if it_rseg[] is not initial.
    *      SELECT bukrs
    *              belnr
    *              gjahr
    *              buzei
    *              valut
    *              wrbtr
    *              augbl
    *              matnr
    *              lifnr
    *              ebeln
    *        INTO TABLE it_bseg
    *          FROM bseg
    *          FOR ALL ENTRIES IN it_rseg
    *          WHERE bukrs = it_rseg-bukrs and ebeln = it_rseg-ebeln and mwskz = ''.
    *endif.
    *loop at it_BKPF into wa_BKPF.
    *  values = wa_rbkp-belnr.
    *  value1 = wa_rbkp-gjahr.
       data: aekey_1 type string .
    *CONCATENATE values value1 into aekey_1.
    *  if it_BSEG[] is not initial.
    *MESSAGE aekey_1 type 'I'.
           SELECT single belnr xblnr awkey into wa_bkpf
             from bkpf
             where awkey = aekey_1.
    SELECT SINGLe belnr
    buzei
    dmbtr
    budat
       shkzg
       ebeln
       lifnr
       FROM bsik
    INTO CORRESPONDING FIELDS OF  wa_bsik
    *FOR ALL ENTRIES IN it_bseg
    WHERE
        bukrs in s_bukrs and
        lifnr = wa_rbkp-lifnr
    and
    *AND gjahr = it_bseg-gjahr
    * AND
        belnr = wa_bkpf-belnr.
    insert wa_bsik into table it_bsik.
    CLEAR wa_bsik.
    CLEAR it_bsik.
    *endloop.
    * and ebeln = it_bseg-ebeln .
    *    select BELNR
    **           SHKZG
    **           DMBTR
    *           from bkpf into table it_bkpf
    *            for ALL ENTRIES IN it_rbkp
    *            where belnr = it_rbkp-belnr.
    *        ENDif.
    IF IT_bseg[] IS NOT INITIAL.
           select belnr
             LIFNR
             ebeln
                  DMBTR
              ZUONR
                  from bsik into table it_bsik
                  for all entries in it_bseg
                  where belnr = it_bseg-belnr.
           select belnr
             LIFNR
             ebeln
                  DMBTR
              ZUONR
                  from bsak into table it_bsak
                  for all entries in it_bseg
                  where belnr = it_bseg-belnr.
    ENDIF.
       else.
         message s002.
         leave list-processing.
       endif.
    endform.                    " GETDATA
    *&      Form  SETDATA
    form setdata .
       clear wa_po.
       loop at it_po into wa_po.
         c_index = sy-tabix.
    ********Calculate PR Quantity**********
         clear wa_eban.
         read table it_eban into wa_eban
                    with key banfn = wa_po-banfn
                             bnfpo = wa_po-bnfpo.
         if sy-subrc eq 0.
           move:wa_eban-menge to wa_po-menge,
                wa_eban-meins to wa_po-meins.
         endif.
    ********Calculate PO Quantity**********
         clear wa_ekpo.
         read table it_ekpo into wa_ekpo
                    with key banfn = wa_po-banfn
                             bnfpo = wa_po-bnfpo .
         if sy-subrc eq 0.
           move:wa_ekpo-txz01 to wa_po-txz01,
                wa_ekpo-netpr to wa_po-netpr,
                wa_ekpo-peinh to wa_po-peinh,
                wa_ekpo-mtart to wa_po-mtart,
                wa_ekpo-menge to wa_po-menge1,
                wa_ekpo-meins to wa_po-meins1.
         endif.
    ********Calculate Balance Quantity******
         clear wa_mseg.
         loop at it_mseg into wa_mseg
                where ebeln = wa_po-ebeln and
                      ebelp = wa_po-ebelp.
           c_grmenge = c_grmenge + wa_mseg-menge.
         endloop.
         move:wa_mseg-mblnr to wa_po-mblnr,
              c_grmenge to wa_po-menge2,
              wa_mseg-meins to wa_po-meins2,
              wa_mseg-werks to wa_po-werks,
              wa_mseg-charg to wa_po-charg.
         wa_po-balqty = wa_eban-menge - c_grmenge.
         clear : wa_rseg,wa_rbkp.
         read table it_rseg into wa_rseg with key
                        ebeln = wa_mseg-ebeln
                        ebelp = wa_mseg-ebelp.
         read table it_rbkp into wa_rbkp
                    with key belnr = wa_rseg-belnr
                             gjahr = wa_rseg-gjahr.
         if sy-subrc eq 0.
           move : wa_rbkp-belnr to wa_po-belnr,
                  wa_rbkp-bldat to wa_po-bldat,
                  wa_rbkp-RMWWR to wa_po-RMWWR,
                  WA_RBKP-WMWST1 TO WA_PO-WMWST1.
         endif.
           read table it_bseg into wa_bseg with key
                         ebeln = wa_rseg-ebeln
                         bukrs = wa_rseg-bukrs.
           if sy-subrc eq 0.
             move wa_bseg-belnr to wa_po-belnr_d.
           endif.
    *    read table it_bkpf into wa_bkpf
    *    with key belnr = wa_ekbe-belnr.
    *    read table it_bseg into wa_bseg
    *    with key belnr = wa_bkpf-belnr.
    CLEAR wa_bsik.
    clear it_bsik.
         read table it_bsik into wa_bsik
         with key belnr = wa_bkpf-belnr.
    *    if wa_bsik-shkzg = 'H'.
    *     wa_bsik-DMBTR = wa_bsik-DMBTR * 1.
    *     endif.
           if sy-subrc eq 0.
             move : wa_bsik-belnr to wa_po-belnr,
                     wa_bsik-DMBTR to wa_po-DMBTR.
            endif.
    *    clear wa_bsik.
    *    read table it_bsik into wa_bsik
    *               with key  belnr = wa_bseg-belnr.
    *    if sy-subrc eq 0.
    *        move : wa_bsik-DMBTR to wa_po-DMBTR.
    *    endif.
    *clear wa_bsak.
    *    read table it_bsak into wa_bsak
    *               with key  belnr = wa_bseg-belnr.
    *    if sy-subrc eq 0.
    *        move : wa_bsak-DMBTR_C to wa_po-DMBTR_C.
    *    endif.
    *clear : wa_rbkp.
    *loop at it_bsik into wa_bsik.
    *read table it_bsik into wa_bsik with key belnr = wa_rbkp-belnr.
    *if sy-subrc eq 0.
    *  move : wa_bsik-DMBTR to wa_po-DMBTR.
    *    endif.
    *endloop.
    *********Assign Vendor,PO Date*********
         clear wa_ekko.
         read table it_ekko into wa_ekko
                    with key ebeln = wa_po-ebeln.
         if sy-subrc eq 0.
           move:wa_ekko-lifnr to wa_po-lifnr,
                wa_ekko-bedat to wa_po-bedat.
         endif.
    *clear wa_ekko.
    *read table it_ekko into wa_ekko
    *with key lifnr = wa_po-lifnr.
    *if sy-subrc eq 0.
    *  move: wa_bsik-DMBTR to wa_po-DMBTR.
    *  endif.
    *    call function 'ZSD_BATCH_CLASSIFICATION_DATA'
    *      exporting
    **        ch_charg                   = wa_po-charg
    *        ch_matnr                   = wa_po-matnr
    *        ch_werks                   = wa_po-werks
    *      tables
    *        cl_data                    = it_cl_data
    **       I_SEL_CHARACTERISTIC       =
         loop at it_cl_data into wa_cl_data.
           if wa_cl_data-ausp1 ne '?'.
             if wa_cl_data-atnam eq 'THICKNESS'.
               move wa_cl_data-ausp1 to wa_po-thick.
             elseif wa_cl_data-atnam eq 'LENGTH'.
               move wa_cl_data-ausp1 to wa_po-length.
             elseif wa_cl_data-atnam eq 'WIDTH'.
               move wa_cl_data-ausp1 to wa_po-width.
             elseif wa_cl_data-atnam eq 'GRADE'.
               move wa_cl_data-ausp1 to wa_po-grade.
             endif.
           endif.
         endloop.
         modify it_po from wa_po index c_index.
         clear :c_grmenge,wa_po,wa_ekpo,wa_mseg,c_index.
       endloop.
    endform.                    " SETDATA
    *&      Form  FIELDCAT
    *       text
    *  -->  p1        text
    *  <--  p2        text
    form fieldcat .
       perform buildfields using '1' 'BANFN'  'IT_PO' 'PR Number' '' ''.
    *  perform buildfields using '2' 'BNFPO'  'IT_PO' 'PR Item Number' '' ''.
       perform  buildfields using '2' 'KNTTP' 'IT_PO' 'A/c Assignment Cat' '' ''.
       perform  buildfields using '2' 'PSTYP' 'IT_PO' 'Item Cat' '' ''.
       perform buildfields using '3' 'EKGRP'  'IT_PO' 'Purchase Group' '' ''.
       perform buildfields using '4' 'BADAT'  'IT_PO' 'Request Date' '' ''.
       perform buildfields using '5' 'MENGE'  'IT_PO' 'PR Quantity'  'X' ''.
       perform buildfields using '6' 'MEINS'  'IT_PO' 'PR Unit' '' ''.
       perform buildfields using '7' 'LIFNR'  'IT_PO' 'Vendor Number' '' ''.
       perform buildfields using '8' 'EBELN'  'IT_PO' 'Purchasing Doc No' '' ''  .
       perform buildfields using '9' 'BEDAT'  'IT_PO' 'PO Date' '' ''.
       perform buildfields using '10' 'MTART' 'IT_PO' 'Material Type' '' ''.
       perform buildfields using '11' 'MATKL' 'IT_PO' 'Material Group' '' ''.
       perform buildfields using '12' 'MATNR' 'IT_PO' 'Material Number' '' ''.
       perform buildfields using '13' 'TXZ01' 'IT_PO' 'Material Desc' '' ''.
       perform buildfields using '18' 'MENGE1' 'IT_PO' 'PO Quantity' 'X' ''.
       perform buildfields using '19' 'MEINS' 'IT_PO' 'PO Unit' '' ''.
       perform buildfields using '20' 'NETPR' 'IT_PO' 'Net Price' '' ''.
       perform buildfields using '21' 'PEINH' 'IT_PO' 'Price Unit' '' ''.
       perform buildfields using '22' 'MBLNR' 'IT_PO' 'GR Number' '' ''.
       perform buildfields using '23' 'MENGE2' 'IT_PO' 'GR Quantity' 'X' ''.
       perform buildfields using '24' 'MEINS2' 'IT_PO' 'GR Unit' '' ''.
       perform buildfields using '25' 'BELNR' 'IT_PO' 'Invoice doc. number' '' ''.
       perform buildfields using '26' 'BLDAT' 'IT_PO' 'Invoice Date' '' ''.
    *  perform buildfields using '26' 'BELNR_D' 'IT_POP' 'A/C Doc. No.' '' ''.
    *  perform buildfields using '26' 'AUGBL' 'IT_PO' 'Clearing Doc No.' '' ''.
       perform buildfields using '26' 'DMBTR' 'IT_PO' 'OPEN AMOUNT' '' ''.
      perform buildfields using '26' 'DMBTR' 'IT_PO' 'clear AMOUNT' '' ''.
    *  perform buildfields using '26' 'DMBTR_C' 'IT_PO' 'Clear balance' '' ''.
       if ch_bal = 'X'.
         perform buildfields using '27' 'BALQTY' 'IT_PO' 'Balance Quantity'
         'X' ''.
       endif.
       perform buildfields using '26' 'WMWST1' 'IT_PO' 'TOTAL TAX ADDED' 'X' ''.
       perform buildfields using '26' 'RMWWR' 'IT_PO' 'TOTAL AMOUNT IN INVOICE' 'X' ''.
    endform.                    " FIELDCAT
    *&      Form  BUILDFIELDS
    *       text
    *      -->P_0449   text
    *      -->P_0450   text
    *      -->P_0451   text
    *      -->P_0452   text
    form buildfields  using    value(p_col_pos) like sy-cucol
                                value(p_fldname) type slis_fieldname
                                value(p_tabname) type slis_tabname
                                value(p_reptext) like dd03p-reptext
                                value(p_do_sum) type char1
                                value(hotspot) type char1.
       wa_fcat-col_pos = p_col_pos.
       wa_fcat-fieldname = p_fldname.
       wa_fcat-tabname = p_tabname.
       wa_fcat-reptext_ddic = p_reptext.
       wa_fcat-do_sum = p_do_sum.
       wa_fcat-hotspot = hotspot.
       append wa_fcat to it_fcat.
       clear wa_fcat.
    endform.                    " BUILDFIELDS
    *&      Form  DISPLAY
    form display .
       clear wa_layout.
       wa_layout-zebra = 'X'.
       wa_layout-colwidth_optimize = 'X'.
    * wa_layout-box_fieldname     = 'SEL'.
    * wa_layout-edit = 'X'.
       perform build_sort using 'BANFN' '1' 'X'.
       call function 'REUSE_ALV_GRID_DISPLAY'
        exporting
    *   I_INTERFACE_CHECK                 = ' '
    *   I_BYPASSING_BUFFER                = ' '
    *   I_BUFFER_ACTIVE                   = ' '
          i_callback_program               = sy-cprog
    *   I_CALLBACK_PF_STATUS_SET          = ' '
        I_CALLBACK_USER_COMMAND           = 'USER_COMMAND '
          i_callback_top_of_page           = 'TOP_OF_PAGE'
    *   I_CALLBACK_HTML_TOP_OF_PAGE       = ' '
    *   I_CALLBACK_HTML_END_OF_LIST       = ' '
    *   I_STRUCTURE_NAME                  =
        i_background_id                   = 'ALV_BACKGROUND'
    *   I_GRID_TITLE                      =
    *   I_GRID_SETTINGS                   =
          is_layout                        = wa_layout
          it_fieldcat                      = it_fcat
    *   IT_EXCLUDING                      =
    *   IT_SPECIAL_GROUPS                 =
         it_sort                           = it_sort
    *   IT_FILTER                         =
    *   IS_SEL_HIDE                       =
    *   I_DEFAULT                         = 'X'
        I_SAVE                            = 'A'
    *   IS_VARIANT                        =
    *   IT_EVENTS                         =
    *   IT_EVENT_EXIT                     =
    *   IS_PRINT                          =
    *   IS_REPREP_ID                      =
    *   I_SCREEN_START_COLUMN             = 0
    *   I_SCREEN_START_LINE               = 0
    *   I_SCREEN_END_COLUMN               = 0
    *   I_SCREEN_END_LINE                 = 0
    *   I_HTML_HEIGHT_TOP                 = 0
    *   I_HTML_HEIGHT_END                 = 0
    *   IT_ALV_GRAPHICS                   =
    *   IT_HYPERLINK                      =
    *   IT_ADD_FIELDCAT                   =
    *   IT_EXCEPT_QINFO                   =
    *   IR_SALV_FULLSCREEN_ADAPTER        =
    * IMPORTING
    *   E_EXIT_CAUSED_BY_CALLER           =
    *   ES_EXIT_CAUSED_BY_USER            =
         tables
           t_outtab                          = it_po[]
      exceptions
        program_error                     = 1
        others                            = 2
       if sy-subrc <> 0.
         message id sy-msgid type sy-msgty number sy-msgno
                 with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
       endif.
    endform.                    " DISPLAY
    *&      Form  top_of_page
    *       text
    form top_of_page.                                           "#EC *
    **********Create report header*********
       refresh it_lshead.
       clear wa_lshead.
    **********To display date in header*********
    *  write: s_badat-low to c_low dd/mm/yyyy,s_badat-high to c_high
    *  dd/mm/yyyy.
    *  if s_badat-high is initial.
    *    concatenate 'Dated on' c_low into c_date separated by space.
    *  else.
    *    concatenate 'Dated between' c_low 'and' c_high into c_date separated
    *    by space.
    *  endif.
       wa_lshead-typ = 'H'.
       wa_lshead-info = 'PR To Payment History'.
    *  'Pending Indents History -

    We had a requirement to retrieve "aging of receiveables" by customer. Basically, it goes thru each record and depending on the due date places the amounts in the following buckets (example). 0-30 day Overdue, 31-60 days Overdue, 61-90 days overdue, 30+ days overdue, 60+ days overdue) etc all the way to 6+ years overdue.
    There are also cooresponding buckets for coming due analysis. For example, what is: 0-30 days coming due, 31-60 days coming due, 30+ days coming due, etc...
    To do this, first I needed to be able be able to produce an open items statement at any given time in the past. Now, this seems impossible because of how the items go from open to cleared all the time. And an item that was open one month ago, may not be open anymore.
    What I did was first remove any selections on item status. Then compare the posting date with teh key date in the past, if the posting date is less than or equal to the key date, keep the record.
    Then compare the clearing date with the key date. First, keep all that are #. (This keeps all records still open from that posting date/key date)
    Then, add another check for all items that were cleared after the key date (GT Key Date). This gives you the open items on that date.
    Hope that makes sense. Let me know if you want clarification.
    /smw

  • Error in creation of custom PD infotype

    Hi,
    I have a task of creating a custom PD infotype(p9xxx). I created HRI9xxx structure with all the custom fields and when I try to create the infotype using tcode PPCI(selected 'field infotype' option and create button in the 'infotype' block was pressed), it gives an error message that p9xxx-begda is not in ABAP dictionary and then it gives me list of screens, module pools and tables created. This custom infotype entry does not exist in T777I. I have tried regenerating it and same problem persists. If anyone knows the solution, please do let me know.
    Thanks in advance

    Solved.

  • Implementing BADI MD_ADD_COL_EZPS for MD04 custom column

    Hi there,
    I'm using BADI MD_ADD_COL_EZPS to display 3 new buttons and three new columns in MD04.
    For each line item that is displayed, the custom column is filled, after the button is hit -This works fine.
    My Question is:
    Is there any way to limit the value that is filled into the new column so that it only appears on the FIRST line item/row?
    (At the moment it is repeated all the way down the page - the new value is a material characteristic, so doesn't change, will always be the same for each line)
    I've looked at all the available structures/tables in the FILL_ADD_COLUMNS method of the BADI, and none seem suitable
    to determine the "first" row. (ie. something like the way SY-TABIX or SY-INDEX might be used)
    Any help appreciated.
    Thanks,
    David.

    Hi Shubhendu,
    in the method 'ACTIVATE_ADD_COLUMNS', you can set the flag EZ1_MODE to '1' to make the first column visible always. (it's been a while, but I think setting it to '2' makes it visible when the button is pressed.)
    Same applies to EZ2_MODE for second column, EZ3_MODE for third.
    look at the flags/parameters in this method, and also in FILL_ADD_COLUMNS, to fill the data.
    here you need to fill structure EMDEZX_USEX1 (for column 1) etc.
    The code is hit for each record displayed in MD04
    Hopefully this helps you.
    Regards,
    David

  • Custom message required on log on pop-up in SAP CRM WEB UI

    We required custom message to the log- on popup, right now the message is coming after we give the user ID and password "starting SAP CRM" instead of that
    user required welcome message.., how can achieve this ?
    Please reply as soon as possible.

    Hi Pankaj,
    did you already check the guide in the CRM Wiki:
    https://wiki.sdn.sap.com/wiki/display/CRM/WelcomeUserMessageinWeb+UI
    Hope this answers your question.
    Best Regards,
    Michael

  • Custom error message in SAP application log

    Is there a way to add a custom error message to the SAP application log without passing the message variables MSGV1, MSGV2, MSGV3, MSGV4 and the Message class and number. 
    We want to pass a custom message from the BAPIRET2-MESSAGE without giving it a Message class and number.  The reason for this is that  we are using class based exceptions instead of the traditional message class with errors.  When we catch the class based exception, we take the error text of the exception and put in in the BAPIRET2-message and set the BAPIRET2-TYPE as 'E'.  Now we want to add this to the SAP application log.
    The call to 'BAL_LOG_MSG_ADD' takes a structure BAL_S_MSG which is just like BAPIRET2.  However this function builds the entry to the application log use the message variables MSGV1, MSGV2, MSGV3, MSGV4.  There is no provision to pass in the BAPIRET2 message.
    Add message to application log
      CALL FUNCTION 'BAL_LOG_MSG_ADD'
        EXPORTING
         i_log_handle              = app_log_handle
         i_s_msg                   = log_message
    Thanks,
    Jay

    Hi Jay,
    Did you see <b>BAL_LOG_EXCEPTION_ADD</b>?
    This FM is represented by the structure <b>BAL_S_EXC</b>. This can have various versions as described below:
    <b>Data of BAL_S_EXC Structure  /     Use</b>
    <b>EXCEPTION</b>  /                              Exception class from which an exception text 
                                                       is added to the log. This field must be filled.
    <b>MSGTY</b>  /                                     Message type (MSGTY) of a T100 message.
                                                       This field must also be filled for exceptions.
    <b>PROBCLASS,
    DETLEVEL,
    ALSORT, TIME_STMP</b>  /                Message or exception attributes, such as
                                                        problem class (PROBCLASS, for
                                                        example, "very important"), level of detail
                                                        (DETLEVEL, from 1 to 9), sort criterion
                                                        (ALSORT, unrestricted) and timestamp
                                                        (TIME_STMP). These fields can be displayed
                                                        in the log (except TIME_STMP).
    <b>MSG_COUNT</b>   /                            This attribute is not used for exceptions.
    Follow the link below for more details:
    <a href="http://help.sap.com/saphelp_nw04/helpdata/en/d6/5d7f38f52f923ae10000009b38f8cf/frameset.htm">SAP Help DOc</a>
    Hope this helps.
    Thanks
    Sanjeev

  • If statement in Custom Calculation Script

    I have 16 fields and if even one of them ="1" I have to list it in another field.  I do not want to count or sum.  If one of those fields has a 1 in it I just want the other field to display Y and if none have a 1 I want that field to display N.
    Please help.
    Thank you in advance~mjc

    You need to write a compound logical statement to evaluate all of the values and that statement needs to evaluate to true or false.
    Do you know how to write JavaScript?
    Do you know how to enter JavaScript calculations into a form field?
    For custom calculation of the text field I could write something like:
    // define an array of the field names to check
    var aNames = new Array("Text1", "Text2", "Text3", "Text4",
    "Text5", "Text6", "Text7", "Text8",
    "Text9", "Text10", "Text11", "Text12",
    "Text13", "Text14", "Text15", "Text16");
    // define a logical variable that is true if any field has a value of 1 - default is false or no field has a value of 1
    var bMatch = false;
    // value for text field
    var TextValue = 0;
    // logical value of field being equal to 1 test
    var FieldIs1 = false;
    // loop through all the fields and test the fields value
    for(i = 0; i < aNames.length; i++) {
    // logically OR the result of field i value equal to true with bMatch
    // get the value of field
    TextValue = this.getField( aNames[i] ).value;
    // test the value of the field
    FieldIs1 = Number(TextValue) == 1
    // logically OR the 2 values
    bMatch = FieldIs1 | bMatch;
    } // end field processing
    // set the field value
    if(bMatch == true) {
    event.value = "Y";
    } else {
    event.value = "N";
    You will need to change the field names to match your fields. You can add more field name or remove field names as needed and the script will adjust for the number of field names.

  • Error message is not getting displayed in customized subscreen

    Hi Experts,
    I have created customized sub screen for transaction BP. There are two fields namely CPS applicable and PPS applicable.
    I am validating both fields against value if user enters same value as Y and Y . Then Error message should display
    saying that 'It should not be same and please change the entry'. Its working fine when press enter on the sub screen.
    But its not working where  if users try to save the entries without entering enter button.
    Please help me anyone regarding this issue.
    Thanks
    Ramesh Manoharan

    Hi ,
    you can do validations at Save Using BADI or Events ( please ref DEZ_'s Posting), in my case im using BADI to do validation , reason is...user was able to save witout going to the custom tab , thats y im using BADI and Screen(Custom) Validations.
    regards
    Prabhu

Maybe you are looking for

  • Stepping an animated gif, one frame at a time?

    Does anyone know how to do this? I want my own timer to tell it when to paint the next frame. What I really want is an "asynchronous progress indicator", in other words, an icon that animates as long as stuff is still making progress.

  • Problem with ora-28000 error

    Hi all, I got a problem with ORA-28000 in my form. In my app, it allows user to try maximum 3 time to logon, if the user fails, his/her user will be locked. The problem is, when Oracle locked that user, in on-error trigger I cannot catch that error a

  • DMEE - How to supress tags with no values

    Hi, I have created a payment format tree using transaction DMEE and the values are getting generated as required. But the problem is, when i dont have any values in a given node, I dont want to display the tag for that particular node. For example, s

  • LR 1.3: Some Hidden Panels Don't Auto-Reveal on Mouse-over

    I'm generally pretty pleased with what's new in 1.3, but I have found one bug. I often work in the Library Module with the left-hand panel closed, and I'm finding in 1.3 that it doesn't auto-reveal on mouse-over - I have to click the little triangle

  • Jdr_utils.deleteDocument Not deleting records Extenstion AM

    Hi, I made an extension for "JobOpActionsAM" and deplyee it with jpximport.bat. Now I whant to delete this extension, I ran jdr_utils.deleteDocument and it said the document that the decoment deleted. (i COMMITED AFTER DELETE) also I banch the appach