To extract Authorization

Hi all,
I need lttle help regarding HR Security Objects. How would i extract which infotyp is used at customer place. I don't want SAP listed Infotype. Only infotype which are in use by client including custom infotype.

Hi Nancy,
Try executing the report S_AHR_61015471 - Infotype overview of employee.
This report lists which infotypes are maintained for a particular employee.
By checking several employees, you'll have an idea on which infotypes are used in your client.
Another option is checking the data entries in PAXXXX tables via SE16.
However, it would be a cumbersome business and requires a long time.
Regards,
Dilek

Similar Messages

  • How to extract authorization data to standart BW DSO's  from  SAP R/3 system

    Hi All,
    Does anyone have any experience about this topic? I want to use SAP R/3 as a source system and after i extracted the data to business content DSO's in BW  ,i will generate authorization objects from DSO 's.
    I am using standar BC DSO 's
    0TCA_DS01 Authorization data - Values
    • 0TCA_DS02 Authorization data - Hierarchies
    • 0TCA_DS03 Descriptive Text Authorizations
    • 0TCA_DS04 Assignment User Authorizations
    • 0TCA_DS05 Generate users for Authorizations
    I have deep research but cant find anything.
    Best Regards
    Ozan

    Hi Ozan,
    You can go though thread provided by Suman, These DSO's will help to maintain Analysis Authorizations in BW automatically In-short you don't need to maintain it, it will come from R/3 and same will be configured in BW.
    Regards,
    Ganesh

  • Extract authorization values

    Hi,
    Is there a way to extract specific authorization values for a particular user?
    In SUIM, using "Users by Complex Selection Criteria" will display all the authorization & values.  You then need to find that particular authorization, say "P_ORGIN" and go through each one of them to find the values assigned.  It is very tedious if the user have a lot of the "P_ORGIN" authorization assigned.
    I think in this case, SUIM is not the best way.
    Is there a way to quickly zoom into and look at all the values in just that particular authorization, in this case, "P_ORGIN"?
    Thanks

    If your focus is on HR authroizations one of the ways :
    SE16 - table name AGR_USERS
    The technical name will provide the assignment coming from organizational management.
    Take just those roles :
    use SE16 -  AGR_1251
    Which will give you an output export to excel filter on P_origin.
    If you are not using Organizational management:
    Then use SE16 - AGR_1251 find roles having P-origin
    get the role list and use AGR_USERS to find role to user relationship.

  • ABAP-HR report using only OOPs...

    Hi experts,
                                         Can u please tell me is this possible to write a report with out using LDBs but only using OOPs.. are there any classes or methods works as macros in LDBs?
    If yes, please guid me with proper hints.
    Thanks & Regards,
    Friendof all..

    Hi Friendof mine...;)
    LDB though a classic approach provides very flexible way of data extraction, authorization, screens etc. So in my opinion you should stick to using it in some part, in order to get that services provided by standard. I doubt there is an OO approach to substitute the same entirely.
    Anyhow, if you want to transit to an OO HR, I would suggest to read about [Decoupling Infotype concept|http://help.sap.com/erp2005_ehp_04/helpdata/EN/4f/d52552575e11d189270000e8322f96/frameset.htm]. There is a separate framework available which you can use for master data reading/writing. It is a bit complex at first but serve an alternative to standard FMs like HR_READ_INFOTYPE , HR_INFOTYPE_OPERATION . For more refer a [Writing Infotype Records subsection|http://help.sap.com/saphelp_erp2005/helpdata/en/43/21d1014bba2bebe10000000a1553f7/frameset.htm] of above link.
    To sum up. This framework won't provide you full range options which you have in place by means of LDB. You can however mix classic approach (with GET PERNR events, LDB selection screen etc) with new OO approach for data extraction. The latter becomes recommended by SAP, but is more complex and requires preety good understanding of basic OO concepts (you mostly work with interfaces so the actual code is not so transparent to you). Anyhow I think it's worth trying, even just for sport.
    Furhter reading which might help to get the idea http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/14694. [original link is broken] [original link is broken] [original link is broken]
    Regards
    Marcin

  • Etraction from r/3 error

    i am unable to extract data from r/3.it is saying no authorization to extract so and so data source.rfc connection is fine between r/3 and bi.
    pls help me out.

    Hi,
    When you do extraction from SAP source system then you need to have extraction authorization
    Also check  wether Background user id has the SAP_ALL authorization or not if not get it done that first
    then check wether your id has assigned  Below authorization  object or not
    S_RO_OSOA
    Also once you got  no authorization  the massage  run the tcode Su53 then you can what is missing .
    Regards,
    Satya

  • Authorization Error while extracting data after applying SAP upgrade patch

    Hello All,
    Recently we have updated the SAP BW patch to 24 and ECC patch to 22. I have the access to perform extraction in RSA3 tcode in ECC.
    However, While performing the data load in BW, the process is failing at the Infopackage step with the following error:
    "You do not have authorization to extract from Datasource XXXX, Component FI-IO. Message no. R8073"
    My basis guy has given the necessary acces.. but still the issue persists..
    Please provide solutions ASAP... its very critical issue...
    Regards
    Sneha

    Hi,
         Are you loading the data with your username? it may cause problem sometimes because you may not have the authorization object S_RO_OSOA assigned in your roles.
    Try scheduling the loading job with the background user with which normally the process chains are run.
    i guess this should solve your problem, if not try adding this authorization object to the corresponding role and you can run with your user name itself.
    I am not sure about the auth objt , try and see.
    regards,
    karthik.

  • You do not have authorization to extract from DataSource ZZ_TD_EBAN COMPONE

    Hi,
    Iam facing the problem As
    You do not have authorization to extract from DataSource ZZ_TD_EBAN COMPONENT.
    ERROR IN SUBSTEP
    ERROR IN SUBSTEP
    Error reading the data of InfoProvider ZDP_VIRT..
    I had created a Virtual Infoprovider. and taking the Dat source ZZ_TD_EBAN.
    done the Trasf and DTP. for data source to cube. which was bulit in BI7..
    i can see the flow AS Source system- datasource- virtual provider.
    for virtual provider at run time it picks the data  from source.
    But when i rum the query on this VP iam getting error     as
    You do not have authorization to extract from DataSource ZZ_TD_EBAN COMPONE
    even if i chek data at virtual provider level byclicking  display Data..
    after selecting the fields  once i execute . there aso iam facing the same error. as
    You do not have authorization to extract from DataSource ZZ_TD_EBAN COMPONENT.
    Once i get in tthe error.. i can see the below msg.. but even though not able to solve .. i need your assistence.
    You are not authorized to extract from DataSource ZZ_TD_EBAN in application component: MM .
    System Response
    The authorization check was performed with the following field values:
    DataSource: ZZ_TD_EBAN
    Application component: MM
    Subobject: DATA
    Activity: 03
    Procedure
    To be able to extract from the DataSource, you need authorization for authorization object S_RO_OSOA (authorizations SAPI-DataSource) with the field values specified above.
    Procedure for System Administration
    There is a role template S_RO_OSOA_TMPL (DataSource (OSOA) Display/Maintain/Extract) available that contains the authorizations to display, change and extract all DataSources.
    Pls help mewith your valuable answer.

    Hi ,
    As given in your error message that S_RO_OSOA authorization object is missing . You need to include this auth object in the ID from which you are extracting the data using the TCODE : PFCG . You can ask the basis person to do so for you .
    When you run any report on a virtual infoprovider , you need to give the authorization of the DTP & the transformations apart from your cube and datasource in PFCG so that it can display the output in the report . This setting is only necessary for virtual cubes.
    You can always check the missing authorizations in tcode : SU53 .
    Hope the above reply was helpful.
    Kind Regards,
    Ashutosh Singh

  • When doing BW Extractions can ALEREMOTE bypass authorizations?

    I was sitting in a meeting today about how a consultant wanted/required access to every table in R/3 for his BW extraction.  My first response was no and he said that if they had access to ALEREMOTE they could extract all tables.  I explained that ALEREMOTE did not have access to all tables either and he said that using this ID allows them to do extractions without doing any authorization checks.
    I've been searching SAP Marketplace  and  SNC for this information but have not found any data to back this up.  My assumption is that he assumed ALEREMOTE had SAP_ALL (which it doesn't).  Has anyone ever come across an issue with ALEREMOTE bypassing authorization checks?
    Edited by: Bree Woodruff on Jun 9, 2011 9:00 PM

    My assumption is that he assumed ALEREMOTE had SAP_ALL (which it doesn't).
    Sounds like this is the case, however note that S_TABU_DIS is an application layer control and if not coded then there is no check.
    More likely is that reporting authorizations were not checked on the BW side for developer access to the DSOs, but analysis authorizations now are.
    Anyway... my recommedation would be to break all RFC connections from non-PROD to PROD systems and restrict his authorizations in BW PROD system (e.g. only use applications, and not the test environment of SE37 etc (see SAP note 587410). That way there is a client side restriction, even although the destination does have some powers...
    Cheers,
    Julius
    ps: ALEREMOTE is a configuration default. You can change it and hardcoding of a user ID would be a bug.
    Edited by: Julius Bussche on Jun 13, 2011 9:32 PM

  • Authorization to extract restricted data

    Hi,
    We need to extract some specific data from ODS on one BW system to load an other BW system. This restriction is based on specific range of value for a specific infoobject on ODS.
    For that, we see 2 solutions :
    - 'AUTHORITY CHECK' on ABAP program
    or
    - specific authorization on user ALEREMOTE but for this solution we don't find the right authorization object (on 1 ODS for 1 authorization object).
    Thanks a lot in advance
    Isabelle.

    Isabelle,
    Your Requirement is to select specific data from ODS based on the selection criteria.
    For this the procedure you have to create an export datasource and change the datasource by marking the specific object for selection and use the datasource in RSA3.
    I don't understand the purpose of checking authority.
    Regs
    Gopi.

  • Maintaining BW authorization data in R/3

    Hi,
    I am faced with a new problem now. My client wants to maintain BW authorization data in R/3 for ease of maintainence. I have used two ODS template for data (value) and (hierarchy) - (0TCT_DS01 and 0TCT_DS02) and have created two data targets for filling in the data and using CSV file for proofing of the concept. My assumption is that if data load from CSV file can execute thte functionality, I can achieve the same thing by extracting data from R/3 also. While generating the profile using RSSM it says that complete authorization data is not maintained. Probably I am not filling in the relevant fields with correct data.
    Can anyone help me with the steps involved in doing this and the fields for which entries are mandatory ? Would highly appreciate the help extended with points.
    Abhishek

    My reqmt says I have to restrict viwewing of data at node level. Let me elaborate more.... Users of sales region EAST and users of region WEST may have same profiles but EAST user should be able to see east data and WEST user should be able t0 see only west data. I am able to do this by using RSSM and restricting the view at report level but client wants to do this at a common place and the table needs to be maintained in R/3 ?
    Is my reqmt clear ?
    Abhishek

  • Analysis Authorization based on Hier node with multiple display hierarchies

    Hi guys - I've got a problem where s.o. might have an idea of how to switch on the light at the end of the tunnel, I am currently standing in:
    Requirement:
    Cost Center Authorization should be given through RSECADMIN, reporting should be possible for any hierarchy that exists for the authorization relevant info object.
    Preferred solution:
    The Cost Center Analysis Authorization should be given through RSECADMIN - Hierarchy node assignment.
    u2022     A dedicated Authorization Cost Center Hierarchy will be maintained in ECC6 as an alternative cost center hierarchy and extracted into BW.
    u2022     The RSECADMIN Hierarchy node assignment should be based on a particular node (Type 2).
    u2022     The display level will be specified as required (here: Level 7)
    u2022     The Authorization granted should be independent of hierarchy name and version (validity 3).
    Reporting Scenario and technical impact:
    As mentioned above, when designing and running a query the user should be able to freely select other (i.e. than the authorization) display hierarchies for the authorization relevant reporting object 'Cost Center' as well. The technical names of the semantically relevant hierarchy nodes could therefore vary. E.g. cost centers 1, 2 and 3, being assigned under hierarchy node u2018Au2019 of the RSECADMIN relevant authorization hierarchy, could be subsumed by hierarchy node u2018Bu2019 in another display hierarchy, which the user may want to display in accordance to his reporting needs. Ideally, the alternative display hierarchy should therefore display node u2018Bu2019.
    My findings so far (based on prototyping) turn out that this is not possible as long u2018Bu2019 (and its hierarchy) is not authorized in RSECADMIN. Can these findings be confirmed? And if not, would anyone have an idea of how to facilitate the reporting scenario?
    Would there be any other way to grant access, possibly based on RSECADMIN single values, and also enable the user to flexibly display hierarchies with only those hierarchy nodes whose single cost center values the user has been given access to?
    Thanks everyone for your input...
    Claus
    Edited by: Claus64 on Jul 13, 2009 4:10 AM

    HI CLause,
    On Jul 14 2009, you wrote in SDN and said:
    FYI: Found a solution...
    The hierarchy analysis authorization will be based on a navigational attribute of cost center.
    With analysis authorizations it is possible to declare the Auth object (e.g. 0COSTCENTER__RACCAUT0) as authorization relevant and leave the superior object 0COSTCENTER auth irrelevant.
    The auth will be given for 0COSTCENTER__RACCAUT0. This object will be placed as a filter of the query, being restricted by an Authorization variable for hierarchy nodes.
    Due to the concept of Analysis Authorizations, this variable will automatically pick up the nodes granted as part of RSECADMIN Hierarchy based Authorization.
    As mentioned above, 0COSTCENTER as the regular reporting characteristic remains auth irrelevant and can therefore take any hierarchy thatu2019s available. Reporting on single values will be possible, too. Only those nodes show up that hold the authorized cost centers in accordance to the authorization.
    If the auth relevant 0COSTCENTER__RACCAUT0 is not used in the query definition by either not taking it in as a filter or skipping the Auth variable, the query will launch the message that the authorization is missing. No data show up at all.
    Claus
    See this thread:
    Analysis Authorization based on Hier node with multiple display hierarchies
    I am also in the same situation as you and need to understadn your solution. I understand that you created a Nav Attr on 0COSTCENTER and made this auth relevant whilst ensuring that 0COSTCENTER is NOT auth relevant. This is all fine. The issue was you have multiple hierachies for 0COSTCENTER, how did the new Nav Attr help you solve your issue. When loading 0COSTCENTER what values did you load ino the new Nav Attribute and how did that link to the hierachies? Also, in RSECADMIN you created hiearchy nodes based on the Nav Attribute but I am confused as to what values you have in the Nav Attr.
    I appreciate if you can share your solution from the past in more details.
    many thanks

  • HOW TO Developing an Authorization plug-in

    #if defined (_WIN32)
    #pragma warning(disable : 4996)
    BOOL WINAPI DllMain(
        HINSTANCE hinstDLL,  // handle to DLL module
        DWORD fdwReason,     // reason for calling function
        LPVOID lpReserved )  // reserved
    return TRUE;
    #endif
    How to create here
    /*----------------------------------------------------------------------------+
    |       ___     _       _                                                    |
    |      /   |   | |     | |                                                   |
    |     / /| | __| | ___ | |__   ___                                           |
    |    / /_| |/ _  |/ _ \|  _ \ / _ \                                          |
    |   / ___  | (_| | (_) | |_) |  __/                                          |
    |  /_/   |_|\__,_|\___/|____/ \___|                                          |
    |                                                                            |
    |                                                                            |
    |  ADOBE CONFIDENTIAL                                                        |
    |  __________________                                                        |
    |                                                                            |
    |  Copyright (c) 2003 - 2010, Adobe Systems Incorporated.                    |
    |  All rights reserved.                                                      |
    |                                                                            |
    |  NOTICE:  All information contained herein is, and remains the property    |
    |  of Adobe Systems Incorporated and its suppliers, if any. The intellectual |
    |  and technical concepts contained herein are proprietary to Adobe Systems  |
    |  Incorporated and its suppliers and may be covered by U.S. and Foreign     |
    |  Patents, patents in process, and are protected by trade secret or         |
    |  copyright law. Dissemination of this information or reproduction of this  |
    |  material is strictly forbidden unless prior written permission is         |
    |  obtained from Adobe Systems Incorporated.                                 |
    |                                                                            |
    |          Adobe Systems Incorporated       415.832.2000                     |
    |          601 Townsend Street              415.832.2020 fax                 |
    |          San Francisco, CA 94103                                           |
    |                                                                            |
    +----------------------------------------------------------------------------*/
    #include "StdAfx.h"
    #include "FmsAuthAdaptor.h"
    #include "FmsAuthActions.h"
    #include "FmsMedia.h"
    #include <stdio.h>
    #include <fcntl.h>
    #include <string.h>
    #include "hash.h"
    #include <sstream>
    #if defined (_WIN32)
    #pragma warning(disable : 4996)
    BOOL WINAPI DllMain(
        HINSTANCE hinstDLL,  // handle to DLL module
        DWORD fdwReason,     // reason for calling function
        LPVOID lpReserved )  // reserved
    return TRUE;
    #endif
    // Flag to process SWF Verification in this auth sample.  A real SWF file
    // must be targeted in the SWFVerification code below for the example to work.
    static const bool kAuthorizeSwfVerification = false;
    class FmsAuthAdaptor : public IFmsAuthAdaptor
    public:
      FmsAuthAdaptor(IFmsAuthServerContext2* pFmsAuthServerContext)
       : m_pFmsAuthServerContext(pFmsAuthServerContext) {}
      virtual ~FmsAuthAdaptor() {}
      void authorize(IFmsAuthEvent* pAev);
      void notify(IFmsAuthEvent* pAev);
      void getEvents(I32 aevBitAuth[], I32 aevBitNotf[], unsigned int count);
    private:
      bool getStats(I64 clientStatsHandle, FmsClientStats& baseStats);
      void processStats(IFmsAuthEvent* pAev);
      IFmsAuthServerContext2* m_pFmsAuthServerContext;
    // Utils
    // Note: Do not delete the return value.  The return value is a buffer
    // allocated in FMS memory space, and FMS will manage the memory.
    static char* getStringField(const IFmsAuthEvent* pEv, IFmsAuthEvent::Field prop)
    FmsVariant field;
    if (pEv->getField(prop, field) == IFmsAuthEvent::S_SUCCESS && field.type == field.kString)
      return reinterpret_cast<char*>(field.str);
    return 0;
    // Note: Do not delete the return value.  The return value is a buffer
    // allocated in FMS memory space, and FMS will manage the memory.
    static U8* getBufferField(const IFmsAuthEvent* pEv, IFmsAuthEvent::Field prop)
    FmsVariant field;
    if (pEv->getField(prop, field) == IFmsAuthEvent::S_SUCCESS && field.type == field.kBuffer)
      return field.buf;
    return 0;
    static bool getI8Field(const IFmsAuthEvent* pEv, IFmsAuthEvent::Field prop, I8& iValue)
    FmsVariant field;
    if (pEv->getField(prop, field) == IFmsAuthEvent::S_SUCCESS && field.type == field.kI8)
      iValue = field.i8;
      return true;
    return false;
    static bool getI32Field(const IFmsAuthEvent* pEv, IFmsAuthEvent::Field prop, I32& iValue)
    FmsVariant field;
    if (pEv->getField(prop, field) == IFmsAuthEvent::S_SUCCESS && field.type == field.kI32)
      iValue = field.i32;
      return true;
    return false;
    static bool getI64Field(const IFmsAuthEvent* pEv, IFmsAuthEvent::Field prop, I64& iValue)
    FmsVariant field;
    if (pEv->getField(prop, field) == IFmsAuthEvent::S_SUCCESS && field.type == field.kI64)
      iValue = field.i64;
      return true;
    return false;
    static bool getFloatField(const IFmsAuthEvent* pEv, IFmsAuthEvent::Field prop, float& fValue)
    FmsVariant field;
    if (pEv->getField(prop, field) == IFmsAuthEvent::S_SUCCESS && field.type == field.kFloat)
      fValue = field.f;
      return true;
    return false;
    static bool getU16Field(const IFmsAuthEvent* pEv, IFmsAuthEvent::Field prop, U16& iValue)
    FmsVariant field;
    if (pEv->getField(prop, field) == IFmsAuthEvent::S_SUCCESS && field.type == field.kU16)
      iValue = field.u16;
      return true;
    return false;
    static bool setStringField(IFmsAuthEvent* pEv, IFmsAuthEvent::Field prop, char* pValue)
    FmsVariant field;
    field.setString(reinterpret_cast<I8*>(pValue));
    return pEv->setField(prop, field) == IFmsAuthEvent::S_SUCCESS;
    static bool setI8Field(IFmsAuthEvent* pEv, IFmsAuthEvent::Field prop, I8 iValue)
    FmsVariant field;
    field.setI8(iValue);
    return pEv->setField(prop, field) == IFmsAuthEvent::S_SUCCESS;
    static bool setU8Field(IFmsAuthEvent* pEv, IFmsAuthEvent::Field prop, U8 iValue)
    FmsVariant field;
    field.setU8(iValue);
    return pEv->setField(prop, field) == IFmsAuthEvent::S_SUCCESS;
    static bool setI32Field(IFmsAuthEvent* pEv, IFmsAuthEvent::Field prop, I32 iValue)
    FmsVariant field;
    field.setI32(iValue);
    return pEv->setField(prop, field) == IFmsAuthEvent::S_SUCCESS;
    static bool setI64Field(IFmsAuthEvent* pEv, IFmsAuthEvent::Field prop, I64 iValue)
    FmsVariant field;
    field.setI64(iValue);
    return pEv->setField(prop, field) == IFmsAuthEvent::S_SUCCESS;
    static bool setFloatField(IFmsAuthEvent* pEv, IFmsAuthEvent::Field prop, float fValue)
    FmsVariant field;
    field.setFloat(fValue);
    return pEv->setField(prop, field) == IFmsAuthEvent::S_SUCCESS;
    static bool isADPCMSupported(int iAudioCodecs)
    return (iAudioCodecs & SUPPORT_SND_ADPCM) != 0;
    static bool isVP6Supported(int iVideoCodecs)
    int iAllVP6 = ( SUPPORT_VID_VP6ALPHA | SUPPORT_VID_VP6 );
    return (iVideoCodecs & iAllVP6) != 0;
    static bool isService(int iType)
    return (iType & TYPE_SERVICE) != 0;
    static bool isAMF3(unsigned char uEncod)
    return (uEncod == ENCODE_AMF3);
    // This class will process all authorization events
    class MyFmsAuthorizeEvent
    public:
    MyFmsAuthorizeEvent(IFmsAuthEvent* pAev, IFmsAuthServerContext2* pFmsAuthServerContext)
      : m_pAev(pAev), m_pFmsAuthServerContext(pFmsAuthServerContext) {}
    virtual ~MyFmsAuthorizeEvent() {}
    void authorize();
    private:
    IFmsAuthEvent*   m_pAev;
    IFmsAuthServerContext2* m_pFmsAuthServerContext;
    void MyFmsAuthorizeEvent::authorize()
    bool bAuthorized = true;  // default authorization state
    switch(m_pAev->getType())
      case IFmsAuthEvent::E_CONNECT:
       // only E_CONNECT allows changes to the following fields:
       // F_CLIENT_AUDIO_SAMPLE_ACCESS
       // F_CLIENT_AUDIO_SAMPLE_ACCESS_LOCK
       // F_CLIENT_READ_ACCESS
       // F_CLIENT_READ_ACCESS_LOCK
       // F_CLIENT_VIDEO_SAMPLE_ACCESS
       // F_CLIENT_VIDEO_SAMPLE_ACCESS_LOCK
       // F_CLIENT_WRITE_ACCESS_LOCK
       // F_CLIENT_WRITE_ACCESS
       I8 iValue;
       if (getI8Field(m_pAev, IFmsAuthEvent::F_CLIENT_WRITE_ACCESS, iValue))
        setI8Field(m_pAev, IFmsAuthEvent::F_CLIENT_WRITE_ACCESS, iValue);
       // redirect connection example
       char* pUri = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_URI);
       if (pUri && !strcmp(pUri, "rtmp://localhost/streamtest"))
        setStringField(m_pAev, IFmsAuthEvent::F_CLIENT_REDIRECT_URI,
         "rtmp://localhost:1935/streamtest");
        bAuthorized = false;
       // set DiffServ fields based on a client IP
       // char* pIp = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_IP);
       // if (pIp && !strcmp(pIp, "192.168.1.1"))
        // set the DSCP bits and mask
        U8 m_diffServBits = 170;
        U8 m_diffServMask = 252;
        setU8Field(m_pAev, IFmsAuthEvent::F_CLIENT_DIFFSERV_BITS, m_diffServBits);
        setU8Field(m_pAev, IFmsAuthEvent::F_CLIENT_DIFFSERV_MASK, m_diffServMask);
        bAuthorized = true;
      break;
      case IFmsAuthEvent::E_PLAY:
       char* pStreamName = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_NAME);
       if (pStreamName)
        setStringField(m_pAev, IFmsAuthEvent::F_STREAM_NAME, pStreamName);
       char* pStreamType = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_TYPE);
       if (pStreamType)
        setStringField(m_pAev, IFmsAuthEvent::F_STREAM_TYPE, pStreamType);
       char* pStreamQuery = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_QUERY);
       if (pStreamQuery)
        setStringField(m_pAev, IFmsAuthEvent::F_STREAM_QUERY, pStreamQuery);
       I8 iValue;
       if (getI8Field(m_pAev, IFmsAuthEvent::F_STREAM_RESET, iValue))
        // If iValue is 1 (true) the playlist will be reset and the
        // stream will be the only stream in the playlist; otherwise
        // 0 (false) means the stream will be added to the existing
        // playlist.
        setI8Field(m_pAev, IFmsAuthEvent::F_STREAM_RESET, iValue);
       if (getI8Field(m_pAev, IFmsAuthEvent::F_STREAM_IGNORE, iValue))
        // If iValue is 1 (true) the stream timestamps will be ignored;
        // otherwise 0 (false) means the timestamps will be handled.
        setI8Field(m_pAev, IFmsAuthEvent::F_STREAM_IGNORE, iValue);
       char* pStreamTransition = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_TRANSITION);
       if (pStreamTransition && strlen(pStreamTransition))
        // MBR transition example
        if (!strcmp(pStreamTransition, "switch") ||
         !strcmp(pStreamTransition, "swap"))
         // get the old stream's properties
         char* pOldStreamName = getStringField(m_pAev, IFmsAuthEvent::F_OLD_STREAM_NAME);
         char* pOldStreamType = getStringField(m_pAev, IFmsAuthEvent::F_OLD_STREAM_TYPE);
         char* pOldStreamQuery = getStringField(m_pAev, IFmsAuthEvent::F_OLD_STREAM_QUERY);
         // if pOldStream is empty (optional for switch) current stream is in play
         // do we really want stream transition? 
          // no we do not allow transition
          // bAuthorized = false;
          // now transition will be turned off and old stream continue playing
          // break;    
         // doing nothing will execute transition mode as is
         // or you could modify transition by changing transition properties
         // set it to 1 to indicate they will be hooking up the stream,
         // but that it does not currently exist
         setI32Field(m_pAev, IFmsAuthEvent::F_STREAM_LIVE_PUBLISH_PENDING, 1);
        // get the offset value if transition is set to offset mode for reconnect
        if (!strcmp(pStreamTransition, "resume"))
         float fValue;
         if (getFloatField(m_pAev, IFmsAuthEvent::F_STREAM_OFFSET, fValue))
          float offset = fValue; //offset value in seconds
       else
        // This is a regular play waiting for approval, which may be converted
        // into a play2 command by changing transition properties
      break;
      case IFmsAuthEvent::E_PUBLISH:
       char* pStreamName = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_NAME);
       if (pStreamName)
        setStringField(m_pAev, IFmsAuthEvent::F_STREAM_NAME, pStreamName);
       char* pStreamType = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_TYPE);
       if (pStreamType)
        setStringField(m_pAev, IFmsAuthEvent::F_STREAM_TYPE, pStreamType);
       I32 iValue;
       if (getI32Field(m_pAev, IFmsAuthEvent::F_STREAM_PUBLISH_TYPE, iValue))
        // publish types:
        // 0 : record
        // 1 : append
        // 2 : appendWithGap
        // -1 : live
        setI32Field(m_pAev, IFmsAuthEvent::F_STREAM_PUBLISH_TYPE, iValue);
      break;
      case IFmsAuthEvent::E_FILENAME_TRANSFORM:
        I64 iValue;
        if (getI64Field(m_pAev, IFmsAuthEvent::F_CLIENT_ID, iValue))
         // some fields are not eligible to be modified. The return
         // value will be false when trying to modify the F_CLIENT_ID.
         bool bSet = setI64Field(m_pAev, IFmsAuthEvent::F_CLIENT_ID, iValue);
        char* pStreamName = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_NAME);
        if (pStreamName)
         // some fields are not eligible to be modified. The return
         // value will be false when trying to modify the F_STREAM_NAME.
         bool bSet = setStringField(m_pAev, IFmsAuthEvent::F_STREAM_NAME, pStreamName);
        char* pStreamPath = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_PATH);
        if (pStreamPath)
         setStringField(m_pAev, IFmsAuthEvent::F_STREAM_PATH, pStreamPath);
        char* pStreamType = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_TYPE);
        if (pStreamType)
         setStringField(m_pAev, IFmsAuthEvent::F_STREAM_TYPE, pStreamType); 
      break;
      case IFmsAuthEvent::E_PAUSE:
       bAuthorized = false; // block all E_PAUSE events.
       float fValue;
       if (getFloatField(m_pAev, IFmsAuthEvent::F_STREAM_PAUSE_TIME, fValue))
        float fPauseTime = fValue; // in seconds
       I8 iValue;
       if (getI8Field(m_pAev, IFmsAuthEvent::F_STREAM_PAUSE, iValue))
        // 1 (true) means PAUSE
        // 0 (false) means UNPAUSE
        bool boolPause = iValue != 0;
       if (getI8Field(m_pAev, IFmsAuthEvent::F_STREAM_PAUSE_TOGGLE, iValue))
        // 1 (true) means PAUSE_TOGGLE
        // 0 (false) means no PAUSE_TOGGLE was set
        bool boolPauseToggle = iValue != 0;
       FmsVariant field;
       // Notify Action example: An IFmsNofifyAction is created to notify
       // server side action script (SSAS) of the E_PAUSE event by calling
       // the function name "method" in the script.  In this example two
       // variables will be passed to "method" by calling addParam(field)
       // on the action.
       if (m_pAev->getField(IFmsAuthEvent::F_CLIENT_ID, field) == IFmsAuthEvent::S_SUCCESS)
        I64 clientId = field.i64;
        IFmsNotifyAction* pAction = m_pAev->addNotifyAction("Notified by adaptor");
        pAction->setClientId(field);
        const char mtd[] = "method";
        field.setString(reinterpret_cast<I8*>(const_cast<char*>(mtd)));
        pAction->setMethodName(field);
        // create and insert a U16 "12345" as the first parameter
        field.setU16(12345);
        pAction->addParam(field);
        // create and insert clientId as a double as the second parameter
        field.setDouble((double)clientId);
        pAction->addParam(field);
        // Note: SSAS does not work with I64 or Buffer variants
        // field.setI64(clientId);
        // pAction->addParam(field); // incorrect
      break;
      case IFmsAuthEvent::E_SEEK:
       bAuthorized = false; // block all E_SEEK events
       float fValue;
       if (getFloatField(m_pAev, IFmsAuthEvent::F_STREAM_SEEK_POSITION, fValue))
        // Modification of the seek position example:
        // fValue + 3; will add 3 seconds to the initial seek posistion
        float fSeekTime = fValue; // value in seconds
        setFloatField(m_pAev, IFmsAuthEvent::F_STREAM_SEEK_POSITION, fSeekTime);
      break;
      case IFmsAuthEvent::E_LOADSEGMENT:
       // bAuthorized = false; // block all E_LOADSEGMENT events
       // E_LOADSEGMENT is a read only event that substitutes E_PLAY on
       // FMS Origin servers for recorded streams.
       I64 iValue;
       if (getI64Field(m_pAev, IFmsAuthEvent::F_SEGMENT_START, iValue))
        I64 iStart = iValue; // in bytes
       if (getI64Field(m_pAev, IFmsAuthEvent::F_SEGMENT_END, iValue))
        I64 iEnd = iValue; // in bytes
      break;
      case IFmsAuthEvent::E_RECORD:
       // bAuthorized = false; // block all E_RECORD events
       float fValue;
       if (getFloatField(m_pAev, IFmsAuthEvent::F_STREAM_RECORD_MAXSIZE, fValue))
        float recMaxSize = fValue; // in kilobytes
        setFloatField(m_pAev, IFmsAuthEvent::F_STREAM_RECORD_MAXSIZE, recMaxSize);
       if (getFloatField(m_pAev, IFmsAuthEvent::F_STREAM_RECORD_MAXDURATION, fValue))
        float recMaxDuration = fValue; // in seconds
        setFloatField(m_pAev, IFmsAuthEvent::F_STREAM_RECORD_MAXDURATION, recMaxDuration);
      break;
      case IFmsAuthEvent::E_SWF_VERIFY:
       // SWF Verification example:
       // kAuthorizeSwfVerification is assigned false by default.  The
       // target SWF file must be updated for this to work.
       if(kAuthorizeSwfVerification)
        I8 swfvVersion = 0;
        if(getI8Field(m_pAev, IFmsAuthEvent::F_CLIENT_SWFV_VERSION, swfvVersion))
         std::stringstream stream;
         stream << "Swf verification version is " << static_cast<int>(swfvVersion);
         m_pFmsAuthServerContext->log(stream.str().c_str(), IFmsServerContext::kInformation, false);
        I64 swfvDepth;
        if(getI64Field(m_pAev, IFmsAuthEvent::F_CLIENT_SWFV_DEPTH, swfvDepth))
         I32 swfvTTL;
         if(getI32Field(m_pAev, IFmsAuthEvent::F_CLIENT_SWFV_TTL, swfvTTL))
          swfvTTL /= 2;
          setI32Field(m_pAev, IFmsAuthEvent::F_CLIENT_SWFV_TTL, swfvTTL);
         U8 digest[kSHA256DigestLen];
         // Target a real SWF file instead of sample.swf
         hashSwfFileAtDepth("C:\\sample.swf", swfvDepth, digest);
         FmsVariant field;
         field.setBuffer(digest, kSHA256DigestLen);
         m_pAev->setField(IFmsAuthEvent::F_CLIENT_SWFV_DIGEST, field);
      break;
      case IFmsAuthEvent::E_APPSTART:
      case IFmsAuthEvent::E_APPSTOP:
      case IFmsAuthEvent::E_DISCONNECT:
      case IFmsAuthEvent::E_STOP:
      case IFmsAuthEvent::E_UNPUBLISH:
      case IFmsAuthEvent::E_ACTION:
      case IFmsAuthEvent::E_CODEC_CHANGE:
      case IFmsAuthEvent::E_RECORD_STOP:
      case IFmsAuthEvent::E_CLIENT_PAUSE:
      case IFmsAuthEvent::E_SWF_VERIFY_COMPLETE:
      case IFmsAuthEvent::E_CLIENT_SEEK:
      case IFmsAuthEvent::E_START_TRANSMIT:
      case IFmsAuthEvent::E_STOP_TRANSMIT:
      case IFmsAuthEvent::E_MAXEVENT:
      break;
    IFmsAuthServerContext2::AuthFailureDesc* desc = NULL;
    if(!bAuthorized)
      desc = new IFmsAuthServerContext2::AuthFailureDesc("Blocked by auth adaptor",
       IFmsAuthServerContext2::kDefaultStatus, -1);
    char buf[1024];
    const char* const action = bAuthorized ? "approved" : "rejected";
    sprintf(buf, "Received authorization type=%d id=%p %s\n", m_pAev->getType(),
      m_pAev, action);
    // log to the configured FMS log directory. If the third parameter is true,
    // also send the log to the system event log.
    m_pFmsAuthServerContext->log(buf, IFmsServerContext::kInformation, false);
    m_pFmsAuthServerContext->onAuthorize(m_pAev, bAuthorized, desc);
    delete desc;
    class MyFmsNotifyEvent
    public:
      MyFmsNotifyEvent(IFmsAuthEvent* pAev, IFmsAuthServerContext2* pFmsAuthServerContext)
       : m_pAev(pAev), m_pFmsAuthServerContext(pFmsAuthServerContext) {}
      virtual ~MyFmsNotifyEvent() {}
      void notify() const;
    private:
      IFmsAuthEvent* m_pAev;
      IFmsAuthServerContext2* m_pFmsAuthServerContext;
    void MyFmsNotifyEvent::notify() const
    switch(m_pAev->getType())
      case IFmsAuthEvent::E_PLAY:
       char* pAppName = getStringField(m_pAev, IFmsAuthEvent::F_APP_NAME);
       char* pAppInst = getStringField(m_pAev, IFmsAuthEvent::F_APP_INST);
       char* pAppUri = getStringField(m_pAev, IFmsAuthEvent::F_APP_URI);
       char* pClIp = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_IP);
       char* pClUri = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_URI);
       char* pClNewUri = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_REDIRECT_URI);
       char* pClVhost = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_VHOST);
       char* pClRef = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_REFERRER);
       char* pClPurl = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_PAGE_URL);
       char* pClAgent = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_USER_AGENT);
       char* pClRAccess = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_READ_ACCESS);
       char* pClWAccess = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_WRITE_ACCESS);
       char* pClAudioAccess = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_AUDIO_SAMPLE_ACCESS);
       char* pClVideoAccess = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_VIDEO_SAMPLE_ACCESS);
       char* pClProto = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_PROTO);
       char* pClUstem = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_URI_STEM);
       char* pStreamName = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_NAME);
       char* pStreamType = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_TYPE);
       char* pStreamQuery = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_QUERY);
       char* pStreamPath = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_PATH);
       I32 iValue;
       if (getI32Field(m_pAev, IFmsAuthEvent::F_CLIENT_AUDIO_CODECS, iValue))
        bool bADPCM = isADPCMSupported(iValue);
       if (getI32Field(m_pAev, IFmsAuthEvent::F_CLIENT_VIDEO_CODECS, iValue))
        bool bVP6 = isVP6Supported(iValue);
       if (getI32Field(m_pAev, IFmsAuthEvent::F_CLIENT_TYPE, iValue))
        bool bService = isService(iValue);
       if (getI32Field(m_pAev, IFmsAuthEvent::F_STREAM_ID, iValue))
        I32 iStreamId = iValue;
       float fValue;
       if (getFloatField(m_pAev, IFmsAuthEvent::F_STREAM_LENGTH, fValue))
        float fLength = fValue; // in seconds
       if (getFloatField(m_pAev, IFmsAuthEvent::F_STREAM_POSITION, fValue))
        float iPosition = fValue; // in seconds
       I64 lValue;
       if (getI64Field(m_pAev, IFmsAuthEvent::F_CLIENT_ID, lValue))
        I64 iClientId = lValue; 
       I8 sValue;
       if (getI8Field(m_pAev, IFmsAuthEvent::F_CLIENT_SECURE, sValue))
        bool bSecure = sValue != 0;
       if (getI8Field(m_pAev, IFmsAuthEvent::F_CLIENT_AMF_ENCODING, sValue))
        bool bAMF3 = isAMF3(sValue);
       if (getI8Field(m_pAev, IFmsAuthEvent::F_CLIENT_READ_ACCESS_LOCK, sValue))
        bool bRead = sValue != 0;
       if (getI8Field(m_pAev, IFmsAuthEvent::F_CLIENT_WRITE_ACCESS_LOCK, sValue))
        bool bWrite = sValue != 0;
       if (getI8Field(m_pAev, IFmsAuthEvent::F_CLIENT_AUDIO_SAMPLE_ACCESS_LOCK, sValue))
        bool bAudioRead = sValue != 0;
       if (getI8Field(m_pAev, IFmsAuthEvent::F_CLIENT_VIDEO_SAMPLE_ACCESS_LOCK, sValue))
        bool bVideoRead = sValue != 0;
       if (getI8Field(m_pAev, IFmsAuthEvent::F_STREAM_RESET, sValue))
        bool bReset = sValue != 0;
       if (getI8Field(m_pAev, IFmsAuthEvent::F_STREAM_IGNORE, sValue))
        bool bIgnore = sValue != 0;
      break;
      case IFmsAuthEvent::E_SEEK:
       float fValue;
       if (getFloatField(m_pAev, IFmsAuthEvent::F_STREAM_SEEK_POSITION, fValue))
        float fSeekTime = fValue;
       // Disconnect Action example: disconnect the client that was
       // specified by the E_SEEK notify event
       FmsVariant field;
       if (m_pAev->getField(IFmsAuthEvent::F_CLIENT_ID, field) == IFmsAuthEvent::S_SUCCESS)
        IFmsDisconnectAction* pAction =
         const_cast<IFmsAuthEvent*>(m_pAev)->
          addDisconnectAction("Seek is not allowed. Blocked by adaptor");
        pAction->setClientId(field);
      break;
      case IFmsAuthEvent::E_CODEC_CHANGE:
       char* pAppName = getStringField(m_pAev, IFmsAuthEvent::F_APP_NAME);
       char* pAppInst = getStringField(m_pAev, IFmsAuthEvent::F_APP_INST);
       char* pAppUri = getStringField(m_pAev, IFmsAuthEvent::F_APP_URI);
       char* pClIp = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_IP);
       char* pClUri = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_URI);
       char* pClNewUri = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_REDIRECT_URI);
       char* pClVhost = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_VHOST);
       char* pClRef = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_REFERRER);
       char* pClPurl = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_PAGE_URL);
       char* pClAgent = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_USER_AGENT);
       char* pClRAccess = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_READ_ACCESS);
       char* pClWAccess = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_WRITE_ACCESS);
       char* pClAudioAccess = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_AUDIO_SAMPLE_ACCESS);
       char* pClVideoAccess = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_VIDEO_SAMPLE_ACCESS);
       char* pClProto = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_PROTO);
       char* pClUstem = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_URI_STEM);
       char* pStreamName = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_NAME);
       char* pStreamType = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_TYPE);
       char* pStreamQuery = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_QUERY);
       char* pStreamPath = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_PATH);
       U16 fType;
       if (getU16Field(m_pAev, IFmsAuthEvent::F_STREAM_CODEC_TYPE, fType))
        U16 streamCodecType = fType;
        if (streamCodecType == kVIDEO_CODEC)
         U16 fValue;
         if (getU16Field(m_pAev, IFmsAuthEvent::F_STREAM_CODEC, fValue))
          U16 streamCodecValue = fValue;
          if (streamCodecValue == VIDEO_CODEC_SORENSON)
           // Disconnect Action example: Disallow clients trying
           // to publish content with the sorenson video codec.
           FmsVariant field;
           if (m_pAev->getField(IFmsAuthEvent::F_CLIENT_ID, field) == IFmsAuthEvent::S_SUCCESS)
            IFmsDisconnectAction* pAction =
             const_cast<IFmsAuthEvent*>(m_pAev)->
             addDisconnectAction("Sorenson is not allowed. Blocked by adaptor");
            pAction->setClientId(field);
      break;
      case IFmsAuthEvent::E_RECORD_STOP:
       char* pAppName = getStringField(m_pAev, IFmsAuthEvent::F_APP_NAME);
       char* pAppInst = getStringField(m_pAev, IFmsAuthEvent::F_APP_INST);
       char* pAppUri = getStringField(m_pAev, IFmsAuthEvent::F_APP_URI);
       char* pClIp = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_IP);
       char* pClUri = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_URI);
       char* pClNewUri = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_REDIRECT_URI);
       char* pClVhost = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_VHOST);
       char* pClRef = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_REFERRER);
       char* pClPurl = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_PAGE_URL);
       char* pClAgent = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_USER_AGENT);
       char* pClRAccess = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_READ_ACCESS);
       char* pClWAccess = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_WRITE_ACCESS);
       char* pClAudioAccess = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_AUDIO_SAMPLE_ACCESS);
       char* pClVideoAccess = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_VIDEO_SAMPLE_ACCESS);
       char* pClProto = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_PROTO);
       char* pClUstem = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_URI_STEM);
       char* pStreamName = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_NAME);
       char* pStreamType = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_TYPE);
       char* pStreamQuery = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_QUERY);
       char* pStreamPath = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_PATH);
       float fValue;
       if (getFloatField(m_pAev, IFmsAuthEvent::F_STREAM_RECORD_MAXSIZE, fValue))
        float recMaxSize = fValue; // in kilobytes
       if (getFloatField(m_pAev, IFmsAuthEvent::F_STREAM_RECORD_MAXDURATION, fValue))
        float recMaxDuration = fValue; // in seconds
      break;
      case IFmsAuthEvent::E_SWF_VERIFY_COMPLETE:
       char* pClIp = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_IP);
       I8 version; // version of SWF verification
       getI8Field(m_pAev, IFmsAuthEvent::F_CLIENT_SWFV_VERSION, version);
       I64 depth; // depth in the SWF file hashed
       getI64Field(m_pAev, IFmsAuthEvent::F_CLIENT_SWFV_DEPTH, depth);
       I32 ttl; // time to live of the SWF hash provided
       getI32Field(m_pAev, IFmsAuthEvent::F_CLIENT_SWFV_TTL, ttl);
       // digest provided to match against
       U8* buffer = getBufferField(m_pAev, IFmsAuthEvent::F_CLIENT_SWFV_DIGEST);
       // result of the attempted match-- see FmsAuthEvents.h enum
       // eSWFMatch for the meaning of this field
       I32 match;
       getI32Field(m_pAev, IFmsAuthEvent::F_CLIENT_SWFV_RESULT, match);
       std::stringstream stream;
       stream << "swf verification for client: "
         << std::string(pClIp)
         << " is complete, the result is: " << match;
       m_pFmsAuthServerContext->log(stream.str().c_str(), IFmsServerContext::kInformation, false);
      break;
      case IFmsAuthEvent::E_APPSTART:
      case IFmsAuthEvent::E_APPSTOP:
      case IFmsAuthEvent::E_CONNECT:
      case IFmsAuthEvent::E_DISCONNECT:
      case IFmsAuthEvent::E_FILENAME_TRANSFORM:
      case IFmsAuthEvent::E_STOP:
      case IFmsAuthEvent::E_PAUSE:
      case IFmsAuthEvent::E_PUBLISH:
      case IFmsAuthEvent::E_UNPUBLISH:
      case IFmsAuthEvent::E_LOADSEGMENT:
      case IFmsAuthEvent::E_ACTION:
      case IFmsAuthEvent::E_RECORD:
      case IFmsAuthEvent::E_CLIENT_PAUSE:
      case IFmsAuthEvent::E_SWF_VERIFY:
      case IFmsAuthEvent::E_CLIENT_SEEK:
      case IFmsAuthEvent::E_START_TRANSMIT:
      case IFmsAuthEvent::E_STOP_TRANSMIT:
      case IFmsAuthEvent::E_MAXEVENT:
      break;
    char buf[1024];
    sprintf(buf, "Received notification type=%d id=%p\n", m_pAev->getType(), m_pAev);
    // log to the configured FMS log directory. If the third parameter is true,
    // also send the log to the system event log.
    m_pFmsAuthServerContext->log(buf, IFmsServerContext::kInformation, false);
    m_pFmsAuthServerContext->onNotify(m_pAev);
    /* All authorization events flow through this wrapper function.
    * Note: This sample auth adaptor has MyFmsAppAuthEvent allocated on the
    * stack, but time intensive implementations may warrant authorization to
    * be allocated on the heap so work may be passed to a thread pool.  This
    * prevents starvation of the calling FMS threads in custom code that may
    * have processing delays (ie database calls, network filesystem access, etc..).
    void FmsAuthAdaptor::authorize(IFmsAuthEvent* pAev)
      MyFmsAuthorizeEvent(pAev, m_pFmsAuthServerContext).authorize();
    /* All notification events flow through this wrapper function.
    * Note: This sample auth adaptor has MyFmsNotifyEvent allocated on the
    * stack, but time intensive implementations may warrant notifications to
    * be allocated on the heap so work may be passed to a thread pool.  This
    * prevents starvation of the calling FMS threads in custom code that may
    * have processing delays (ie database calls, network filesystem access, etc..).
    void FmsAuthAdaptor::notify(IFmsAuthEvent* pAev)
      processStats(pAev);
      MyFmsNotifyEvent(pAev, m_pFmsAuthServerContext).notify();
    * Get client statistics.
    bool FmsAuthAdaptor::getStats(I64 clientStatsHandle, FmsClientStats& baseStats)
    bool bValue= m_pFmsAuthServerContext->getClientStats(clientStatsHandle, baseStats);
    return bValue;
    * Example obtainting client stats from an E_CONNECT or E_STOP event
    void FmsAuthAdaptor::processStats(IFmsAuthEvent* pAev)
      I64 statsHandle;
      FmsClientStats baseStats;
      if (!getI64Field(pAev, IFmsAuthEvent::F_CLIENT_STATS_HANDLE, statsHandle))
       return;
      char* pAppName = getStringField(pAev, IFmsAuthEvent::F_APP_NAME);
      if (pAev->getType() == IFmsAuthEvent::E_CONNECT)
       getStats(statsHandle, baseStats);
       // log data
       char buf[1024];
       char hashKey[9];
       memset(hashKey, 0, 9);
       memcpy(hashKey, &statsHandle, sizeof(statsHandle));
       sprintf(buf, "client Stats Handle= %s, bytes_in= %f, bytes_out= %f\n", hashKey,
        static_cast<double>(baseStats.bytes_in), static_cast<double>(baseStats.bytes_out));
       m_pFmsAuthServerContext->log(buf, IFmsServerContext::kInformation, false);
      else if (pAev->getType() == IFmsAuthEvent::E_STOP)
       getStats(statsHandle, baseStats);
    /* By default, all authorization and notifications events will be sent.
    * Call excludeEvents with the bit set to 1, to stop recieving events.
    * Note: The events:
    * E_APPSTART, E_APPSTOP, E_DISCONNECT, E_STOP, E_UNPUBLISH, E_CODEC_CHANGE
    * are excluded by default and are not authorizable.
    void FmsAuthAdaptor::getEvents(I32 aevBitAuth[], I32 aevBitNotf[], unsigned int count)
    // exclude certain auth events
    IFmsAuthEvent::EventType authExcludeEvent[] = { IFmsAuthEvent::E_SEEK };
    // set E_SEEK to a non authorizable event
    m_pFmsAuthServerContext->excludeEvents(aevBitAuth, count, authExcludeEvent, 1);
    // Warning: if E_CODEC_CHANGE event is not excluded, all messages will be
    // scanned to detect codec change. Subscribe to this event only as needed.
    // Example that excludes certain notify events. (E_PAUSE, E_CODEC_CHANGE)
    IFmsAuthEvent::EventType notifyExcludeEvent[] =
      { IFmsAuthEvent::E_PAUSE, IFmsAuthEvent::E_CODEC_CHANGE };
    m_pFmsAuthServerContext->excludeEvents(aevBitNotf, count, notifyExcludeEvent, 2);
    extern "C" void FCExport FmsCreateAuthAdaptor3(IFmsAuthServerContext2* pAuthServerCtx,
                  IFmsAuthAdaptor*& pFmsAuthAdaptor, U32& iVersion)
    pFmsAuthAdaptor = new FmsAuthAdaptor(pAuthServerCtx);
    U32 version = pAuthServerCtx->getVersion();
    U16 w2 = LWORD(version);
    U16 w1 = HWORD(version);
    iVersion = MKLONG(INTERFACE_MINOR_VERSION, INTERFACE_MAJOR_VERSION);
    char buf[1024];
    char *ptr = buf;
    int valueLen = pAuthServerCtx->getConfig("UserKey1", &ptr, sizeof(buf));
    if (!valueLen)
      valueLen = pAuthServerCtx->getConfig("UserKey2", &ptr, sizeof(buf));
      if (!valueLen)
       return;
      if (valueLen < 0)
       // failed to find this key
       return;
    if (valueLen < 0)
      // failed to find this key
      return;
    // value length is bigger then the buffer size, and a real adaptor should
        // allocate valueLen + 1 bytes and call again
    extern "C" void FCExport FmsDestroyAuthAdaptor3(IFmsAuthAdaptor* pAuthAdaptor )
    delete pAuthAdaptor;

    There is no API to Acrobat's document compare feature.
    It is certainly possible for an experienced plug-in programmer to
    create a new compare plug-in. For example, extract text from two PDFs
    and compare it. Comparison algorithms have been much studied so should
    be findable in academic literature.
    Going beyond text comparison would be a major exercise.
    Aandi Inston

  • Vendor Master Extraction from Legacy

    Hi guys,
    We have 2 different legacy systems here (4.5b and 4.6c) and I am trying to extract the vendor master from both of them and integrate them into the new mysap2004.
    What is the best way to extract the vendor master along with the address , punchasing doc, bank details, partner functions,etc ? Any sample program for vendor master extraction is most welcome. Here is my extract layout.
    ADDRESS
    Source File /Table Name     Field Name     Field Type / Length     Format     Rule / Logic
    Source File /Table Name     Field Name     Field Type / Length     Format     Rule / Logic
    SZA1_D0100     Title (TITLE_MEDI)     CHAR/30          Not used
    ADDR1_DATA     Name (NAME1)     CHAR/40          Bring values over as is.
    ADDR1_DATA     Name (NAME 2)     CHAR/40          Bring values over as is.
    ADDR1_DATA     Name (NAME 3)     CHAR/40          Bring values over as is.
    ADDR1_DATA     Name (NAME 4)     CHAR/40          Bring values over as is.
    ADDR1_DATA     Search Term 1 (SORT1)     CHAR/20          Convert to HPC methodology.
    O-First 8 char. of vendor name
    R- First 8 char. of vendor name
    B- First 8 char. of vendor name
    ADDR1_DATA     Search Term 2 (SORT2)     CHAR/20          Bring values over as is.
    ADDR1_DATA     Street/House Number
    (Street)     CHAR/60          Bring values over as is.
    ADDR1_DATA     House Number
    (HOUSE_NUM1)     CHAR/10          Bring values over as is.
    ADDR1_DATA     Building (number or code)
    (BUILDING)     CHAR/20          Bring values over as is.
    ADDR1_DATA     Room or apartment number
    (ROOMNUMBER)     CHAR/10          Bring values over as is.
    ADDR1_DATA     Floor in building
    (FLOOR)     CHAR/10          Bring values over as is.
    ADDR1_DATA     c/o name
    (NAME_CO)     CHAR/40          Bring values over as is.
    ADDR1_DATA     Street 2
    (STR_SUPPL1)     CHAR/40          Bring values over as is.
    ADDR1_DATA     Street 3
    (STR_SUPPL2)     CHAR/40          Bring values over as is.
    ADDR1_DATA     Street 4
    (STR_SUPPL3)     CHAR/40          Bring values over as is.
    ADDR1_DATA     Street 5
    (LOCATION)     CHAR/40          Bring values over as is.
    ADDR1_DATA     City
    (CITY1)     CHAR/40          Bring values over as is.
    ADDR1_DATA     District
    (CITY2)     CHAR/40          Bring values over as is.
    ADDR1_DATA     City (different from postal city)
    HOME_CITY     CHAR/40          Bring values over as is.
    ADDR1_DATA     City postal code
    (POST_CODE1)     CHAR/10          Zip Code.  Bring values over as is.
    ADDR1_DATA     Country
    (COUNTRY)     CHAR/3          Bring values over as is.
    ADDR1_DATA     Region (State, Province, County)
    (REGION)     CHAR/3          E.g., NJ – New Jersey, CO – Colorado, etc.   Bring values over as is.
    ADDR1_DATA     Time Zone
    (TIME_ZONE)     CHAR/6          Bring values over as is.
    ADDR1_DATA     Transportation Zone
    (TRANSPZONE)     CHAR/10          Bring values over as is.
    ADDR1_DATA     Regional Structure Group
    (REGIOGROUP)     CHAR/8          Bring values over as is.
    ADDR1_DATA     P. O. Box
    (PO_BOX)     CHAR/10          Bring values over as is.
    ADDR1_DATA     P.O. Box Postal Code
    (POST_CODE2)     CHAR/10          Bring values over as is.
    ADDR1_DATA     Language Key
    (LANGU)     LANG/1          Bring values over as is.
    SZA1_D0100     Telephone
    (TEL_NUMBER)     CHAR/30          Bring values over as is.
    SZA1_D0100     Telephone Number Extension
    (TEL_EXTENS)     CHAR/10          Bring values over as is.
    SZA1_D0100     Fax
    (FAX_NUMBER)     CHAR/30          Bring values over as is.
    SZA1_D0100     Fax Extension Number
    (FAX_EXTENS)     CHAR/10          Bring values over as is.
    SZA1_D0100     E-mail
    (SMTP_ADDR)     CHAR/240          Bring values over as is.
    ADDR1_DATA     Standard Communication Type
    (DEFLT_COMM)     CHAR/3          Bring values over as is.
    ADDR1_DATA     Data Line
    (EXTENSION1)     CHAR/40          Not used.   Do not bring over field values.
    Note: This field will be available to populate with other data during the conversion.
    ADDR1_DATA     Telebox
    (EXTENSION2     CHAR/40          Not used.   Do not bring over field values.
    Note: This field will be available to populate with other data during the conversion.
    ADDR1_DATA     Comments
    (REMARK)     CHAR/50          Bring values over as is.
    CONTROL
    Source File /Table Name     Field Name     Field Type / Length     Format     Rule / Logic
    LFA1     Customer
    (KUNNR)     CHAR/10          Bring values over as is.
    LFA1     Authorization
    (BEGRU)     CHAR/4          It is to be determined if this field will be used in the future.   If yes, bring values over as is from HPC and populate with vendor account group code for Foods.
    LFA1     Trading Partner
    (VBUND)     CHAR/6          Bring values over as is.
    LFA1     Group Key
    (KONZS)     CHAR/10          Not used
    LFA1     Tax Code 1
    (STCD1)     CHAR/16          Bring values over as is.
    LFA1     Tax Code 2
    (STCD2)     CHAR/11          Bring values over as is.
    LFA1     Fiscal Address
    (FISKN)     CHAR/10          Bring values over as is.
    LFA1     Jurisdiction Code
    (TXJCD)     CHAR/15          Bring values over as is.
    LFA1     VAT Registration No.
    (STCEG)     CHAR/20          Bring values over as is.
    LFA1     Tax Office
    (FISKU)     CHAR/10          Bring values over as is.
    LFA1     Tax Number
    (STENR)     CHAR/18          Bring values over as is.
    LFA1     Industry
    (BRSCH)     CHAR/4          Bring values over as is.
    LFA1     Train Station
    (BAHNS)     CHAR/25          Not used.
    LFA1     Transportation Zone
    (LZONE)     CHAR/10          Bring values over as is.
    LFA1     Actual QM Sys.
    (QSSYS)     CHAR/4          Bring values over as is.
    LFA1     QM System To
    (QSSYSDAT)     DATS/8          Bring values over as is.
    LFA1     DAK
    (J_1FDAK)     CHAR/8          Bring values over as is.
    PAYMENT TRANSACTIONS
    Source File /Table Name     Field Name     Field Type / Length     Format     Rule / Logic
    LFBK     Bank Country Key
    (BANKS)     CHAR/3          Bring values over as is.
    LFBK     Bank Key
    (BANKL)     CHAR/15          Bring values over as is.
    LFBK     Bank Account
    (BANKN)     CHAR/18          Bring values over as is.
    BNKA     Bank Name
    (BANKA)     CHAR/60          Foods - Bring values over as is.
    HPC – Populate with Bank Account Number
    LFA1     Alternative Payee
    (LNRZA)     CHAR/10          Bring values over as is.
    LFA1     Individual Spec.
    (XZEMP)     CHAR/1          Bring values over as is.
    LFA1     Spec. Per. Reference
    (XLFZA)     CHAR/1          Bring values over as is.
    ACCOUNTING INFORMATION ACCOUNTING
    Source File /Table Name     Field Name     Field Type / Length     Format     Rule / Logic
    LFB1     Recon. Account
    (AKONT)     CHAR/10          Bring values over as is.
    LFB1     Sort Key
    (ZUAWA)     CHAR/3          Bring values over as is.
    LFB1     Head Office
    (LNRZE)     CHAR/10          Bring values over as is.
    LFB1     Authorization
    (BEGRU)     CHAR/4          Bring values over as is.
    LFB1     Cash Mgmnt Group
    (FDGRV)     CHAR/10          Bring values over as is.
    LFB1     Release Group
    (FRGRP)     CHAR/4          Bring values over as is.
    LFB1     Minority Indicator
    (MINDK)     CHAR/3          Bring values over as is.
    LFB1     Certification Date
    (CERDT)
         DATS/8          Bring values over as is.
    LFB1     Interest Indicator
    (VZSKZ)     CHAR/2          Bring values over as is.
    LFB1     Last Key Date
    (ZINDT)     DATS/8          Bring values over as is.
    LFB1     Interest Cycle
    (ZINRT)     NUMC/2          Bring values over as is.
    LFB1     Last Interest Run
    (DATLZ)     DATS/8          Bring values over as is.
    LFB1     Withholding Tax Code
    (QSSKZ)     CHAR /2          Bring values over as is.
    LFB1     Withholding Tax Country
    (QLAND)     CHAR /3          Bring values over as is.
    LFB1     Recipient Type
    (QSREC)     CHAR /2          Bring values over as is.
    LFB1     Exemption Number
    (QSZNR)     CHAR /10          Bring values over as is.
    LFB1     Valid Until
    (QSZDT)     DATS/8          Bring values over as is.
    LFB1     Exemption Authority
    (QSBGR)     CHAR /1          Bring values over as is.
    LFB1     Previous Account No.
    (ALTKN)     CHAR /10          Do not bring over existing values.  Will populate during vendor conversion when legacy vendor number is replaced by a new vendor number.
    LFB1     Personnel Number
    (PERNR)     NUMC/8          Bring values over as is.
    PAYMENT TRANSACTIONS ACCOUNTING
    Source File /Table Name     Field Name     Field Type / Length     Format     Rule / Logic
    LFB1     Payment Terms
    (ZTERM)     CHAR/4          Refer to data mapping spreadsheet later in this spec. 
    LFB1     Tolerance Group
    (TOGRU)     CHAR/4          Bring values over as is.
    LFB1     Credit Memo Terms
    (GUZTE)     CHAR/4          Bring values over as is.
    LFB1     Chk. Double Inv.
    (REPRF)     CHAR/1          Bring values over as is.
    LFB1     Chk. Cashing Time
    (KULTG)     DEC/3          Bring values over as is.
    LFB1     Payment Methods
    (ZWELS)     CHAR/10          Refer to data mapping spreadsheet later in this spec. 
    LFB1     Alternate Payee
    (LNRZB)     CHAR/10          Bring values over as is.
    LFB1     Individual Payment
    (XPORE)     CHAR/1          Bring values over as is.
    LFB1     Bill of Exchange Limit
    (WEBTR)     CURR/13
    Decimal/2     9999999999999.99     Bring values over as is.
    LFB1     Payment Advance By EDI
    (XEDIP)     CHAR/1          Bring values over as is.
    LFB1     Payment Block
    (ZAHLS)     CHAR/1          Bring values over as is.
    LFB1     House Bank
    (HBKID)     CHAR/5          Not used.   Do not bring forward existing values.
    LFB1     Grouping Key
    (ZGRUP)     CHAR/2          Bring values over as is.
    LFB1     Payment Method Supplement
    (UZAWE)     CHAR/2          Bring values over as is.
    LFB1     Alternate Payee Indicator
    (XLFZB)     CHAR/1          Bring values over as is.
    LFB1     Tolerance Group
    (TOGRR)     CHAR/4          Bring values over as is.
    CORRESPONDENCE ACCOUNTING
    Source File /Table Name     Field Name     Field Type / Length     Format     Rule / Logic
    LFB5     Dunning Procedure
    (MAHNA)     CHAR/4          Bring values over as is.
    LFB5     Dunning Recipient
    (LFRMA)     CHAR/10          Bring values over as is.
    LFB5     Last Dunned
    (MADAT)     DATS/8          Bring values over as is.
    LFB5     Dunning Clerk
    (BUSAB)     CHAR/2          Bring values over as is.
    LFB5     Dunning Block
    (MANSP)     CHAR/1          Bring values over as is.
    LFB5     Legal Dunning Proceedings
    (GMVDT)     DATS/8          Bring values over as is.
    LFB5     Dunning Level
    (MAHNS)     NUMC/1          Bring values over as is.
    LFB1     Grouping Key
    (MGRUP)     CHAR/2          Bring values over as is.
    LFB1     Local Processing
    (XDEZV)     CHAR/1          Bring values over as is.
    LFB1     Acct. Clerk
    (BUSAB)     CHAR/2          Bring values over as is.
    LFB1     Account with Vendor
    (EIKTO)     CHAR/12          Bring values over as is.
    LFB1     Clerk at Vendor
    (ZSABE)     CHAR/15          Bring values over as is.
    LFB1     Acct. Clk. Tel. No.
    (TLFNS)     CHAR/30          Bring values over as is.
    LFB1     Clerk’s Fax
    (TLFXS)     CHAR/31          Bring values over as is.
    LFB1     Clerk’s Internet
    (INTAD)     CHAR/130          Bring values over as is.
    LFB1     Account Memo
    (KVERM)     CHAR/30          Bring values over as is.
    PURCHASING DATA
    Source File /Table Name     Field Name     Field Type / Length     Format     Rule / Logic
    LFM1     Order Currency
    (WAERS)     CUKY/5          Bring values over as is.
    LFM1     Terms of Payment
    (ZTERM)     CHAR/4          Refer to data mapping spreadsheet later in this spec. 
    LFM1     Incoterms (Part 1)
    (INCO1)     CHAR/3          Refer to data mapping spreadsheet later in this spec. 
    LFM1     Incoterms (Part 2)
    (INCO2)
         CHAR/28          Bring values over as is.
    LFM1     Minimum Order Value
    (MINBW)     CURR/13
    Decimal/2     9999999999999.99     Bring values over as is.
    LFM1     Schema group, vendor
    (KALSK)     CHAR/2          Bring values over as is.
    LFM1     Pricing Date Cat.
    (MEPRF)     CHAR/1          Bring values over as is.
    LFM1     Order Optim. Rest
    (BOPNR)     CHAR/4          Bring values over as is.
    LFM1     Salesperson
    (VERKF)     CHAR/30          Bring values over as is.
    LFM1     Telephone
    (TELF1)     CHAR/16          Bring values over as is.
    LFM1     Acc. With Vendor
    (EIKTO)     CHAR/12          Bring values over as is.
    LFM1     GR. Based Inv. Verif.
    (WEBRE)     CHAR/1          Bring values over as is.
    LFM1     Auto.Eval. GR Setmt. Del.
    (XERSY)     CHAR/1          Bring values over as is.
    LFM1     Auto.Eval. GR Setmt. Ret.
    (XERSR)     CHAR/1          Bring values over as is.
    LFM1     Acknowledgement Reqd.
    (KZABS)     CHAR/1          Bring values over as is.
    LFM1     Automatic Purchase Order
    (KZAUT)     CHAR/1          Bring values over as is.
    LFM1     Subsequent Settlement
    (BOLRE)     CHAR/1          Bring values over as is.
    LFM1     Subseq. Sett. Index
    (BOIND)     CHAR/1          Bring values over as is.
    LFM1     B. Vol.Comp./Ag. Nec.
    (UMSAE)     CHAR/1          Bring values over as is.
    LFM1     Doc. Index Active
    (BLIND)     CHAR/1          Bring values over as is.
    LFM1     Returns Vendor
    (KZRET)     CHAR/1          Bring values over as is.
    LFM1     Srv.-Based Inv.  Ver.
    (LEBRE)     CHAR/1          Bring values over as is.
    LFM1     ABC Indicator
    (LFABC)     CHAR/1          Bring values over as is.
    LFM1     Mode Of Transport-Border
    (EXPVZ)     CHAR/1          Bring values over as is.
    LFM1     Office of Entry
    (ZOLLA)     CHAR/6          Bring values over as is.
    LFM1     Sort Criterion
    (SKRIT)     CHAR/1          Bring values over as is.
    LFM1     PROACT Control Prof.
    (PAPRF)     CHAR/4          Bring values over as is.
    LFM1     Revaluation Allowed
    (XNBWY)     CHAR/1          Bring values over as is.
    LFM1     Grant Discount In Kind
    (NRGEW)     CHAR/1          Bring values over as is.
    LFM1     Relevant for Price Determination
    (PRFRE)     CHAR/1          Bring values over as is.
    LFM1     Relevant for Agency Business
    (AGREL)     CHAR/1          Bring values over as is.
    LFM1     Shipping Conditions
    (VSBED)     CHAR/2          Bring values over as is.
    LFM1     Purchasing Group
    (EKGRP)     CHAR/3          Bring values over as is.
    LFM1     Planned Delivery Time
    (PLIFZ)     DEC/3          Bring values over as is.
    LFM1     Confirmation Control
    (BSTAE)     CHAR/4          Bring values over as is.
    LFM1     Unit of Measure Group
    (MEGRU)     CHAR/4          Bring values over as is.
    LFM1     Rounding Profile
    (RDPRF)     CHAR/4          Bring values over as is.
    LFM1     Price Marking Agreed
    (LIPRE)     CHAR/2          Bring values over as is.
    LFM1     Rack jobbing service agreed
    (LISER)     CHAR/1          Bring values over as is.
    LFM1     Order entry by vendor
    (LIBES)     CHAR/1          Bring values over as is.
    LFM1     Serv. Level
    (VENSL)     DEC/4
    Decimal/1          Bring values over as is.
    PARTNER FUNCTIONS
    Source File /Table Name     Field Name     Field Type / Length     Format     Rule / Logic
    WYT3     Partner Function
    (PARVW)     CHAR/2          Bring values over as is.
    WRF02K     Number (Partner)
    (GPARN)     CHAR/10          Map to new partner number in vendor correlation table.
    ALTERNATE DATA
    (Purchasing Data)
    Source File /Table Name     Field Name     Field Type / Length     Format     Rule / Logic
    LFM2     Order Currency
    (WAERS)     CUKY/5          Bring values over as is.
    LFM2     Terms of Payment
    (ZTERM)     CHAR/4          Refer to data mapping spreadsheet later in this spec. 
    LFM2     Incoterms (Part 1)
    (INCO1)     CHAR/3          Refer to data mapping spreadsheet later in this spec. 
    LFM2     Incoterms (Part 2)
    (INCO2)
         CHAR/28          Bring values over as is.
    LFM2     Minimum Order Value
    (MINBW)     CURR/13
    Decimal/2          Bring values over as is.
    LFM2     Schema group, vendor
    (KALSK)     CHAR/2          Bring values over as is.
    LFM2     Pricing Date Cat.
    (MEPRF)     CHAR/1          Bring values over as is.
    LFM2     Order Optim. Rest
    (BOPNR)     CHAR/4          Bring values over as is.
    LFM2     Salesperson
    (VERKF)     CHAR/30          Bring values over as is.
    LFM2     Telephone
    (TELF1)     CHAR/16          Bring values over as is.
    LFM2     Acc. With Vendor
    (EIKTO)     CHAR/12          Bring values over as is.
    LFM2     GR. Based Inv. Verif.
    (WEBRE)     CHAR/1          Bring values over as is.
    LFM2     Auto.Eval. GR Setmt. Del.
    (XERSY)     CHAR/1          Bring values over as is.
    LFM2     Auto.Eval. GR Setmt. Ret.
    (XERSR)     CHAR/1          Bring values over as is.
    LFM2     Acknowledgement Reqd.
    (KZABS)     CHAR/1          Bring values over as is.
    LFM2     Automatic Purchase Order
    (KZAUT)     CHAR/1          Bring values over as is.
    LFM2     Subsequent Settlement
    (BOLRE)     CHAR/1          Bring values over as is.
    LFM2     Subseq. Sett. Index
    (BOIND)     CHAR/1          Bring values over as is.
    LFM2     B. Vol.Comp./Ag. Nec.
    (UMSAE)     CHAR/1          Bring values over as is.
    LFM2     Doc. Index Active
    (BLIND)     CHAR/1          Bring values over as is.
    LFM2     Returns Vendor
    (KZRET)     CHAR/1          Bring values over as is.
    LFM2     Srv.-Based Inv.  Ver.
    (LEBRE)     CHAR/1          Bring values over as is.
    LFM2     ABC Indicator
    (LFABC)     CHAR/1          Bring values over as is.
    LFM2     Mode Of Transport-Border
    (EXPVZ)     CHAR/1          Bring values over as is.
    LFM2     Office of Entry
    (ZOLLA)     CHAR/6          Bring values over as is.
    LFM2     Sort Criterion
    (SKRIT)     CHAR/1          Bring values over as is.
    LFM2     PROACT Control Prof.
    (PAPRF)     CHAR/4          Bring values over as is.
    LFM2     Revaluation Allowed
    (XNBWY)     CHAR/1          Bring values over as is.
    LFM2     Grant Discount In Kind
    (NRGEW)     CHAR/1          Bring values over as is.
    LFM2     Relevant for Price Determination
    (PRFRE)     CHAR/1          Bring values over as is.
    LFM2     Relevant for Agency Business
    (AGREL)     CHAR/1          Bring values over as is.
    LFM2     Shipping Conditions
    (VSBED)     CHAR/2          Bring values over as is.
    LFM2     Purchasing Group
    (EKGRP)     CHAR/3          Bring values over as is.
    LFM2     Planned Delivery Time
    (PLIFZ)     DEC/3          Bring values over as is.
    LFM2     Confirmation Control
    (BSTAE)     CHAR/4          Bring values over as is.
    LFM2     Unit of Measure Group
    (MEGRU)     CHAR/4          Bring values over as is.
    LFM2     Rounding Profile
    (RDPRF)     CHAR/4          Bring values over as is.
    LFM2     Price Marking Agreed
    (LIPRE)     CHAR/2          Bring values over as is.
    LFM2     Rack jobbing service agreed
    (LISER)     CHAR/1          Bring values over as is.
    LFM2     Order entry by vendor
    (LIBES)     CHAR/1          Bring values over as is.
    LFM2     Serv. Level
    (VENSL)     DEC/4
    Decimal/1          Bring values over as is.
    ALTERNATE DATA
    (Partner Functions)
    Source File /Table Name     Field Name     Field Type / Length     Format     Rule / Logic
    WYT3     Partner Function
    (PARVW)     CHAR/2          Bring values over as is.
    WRF02K     Number (Partner)
    (GPARN)     CHAR/10          Map to new partner number in vendor correlation table.

    Hi Shareen,
    Have you looked Master Data Distribution (ALE) for Vendor since your legacy system are SAP?
    Please check t/code BD14 (Send Vendor Master Data) and BD15 (Get Vendor Master Data).
    Hope this will give you an idea.
    Regards,
    Ferry Lianto

  • Cost Center Authorization

    Dear Friends / Experts
    We have around 10 HR (BW/BO) reports. All are woking fine. Now the users wants to restrict the report based on cost center.
    Hence, I have created one DSO with relevent information and extracted the data from ECC ( Used id, Cost Center belonging, Etc....).  Created one customer exit variable and lookedup this used cost center data in CMOD. This is perfectly working.
    My Doubts
    1) This logic no where related with authorization. Do i still need to consider authorization object and handle further ?
    2) If the Logged in user not available in the DSO, i am not able to edit the query in BO-Webi .
    Can anybody advise ?. Good advise awarded with points.
    Regards
    Saravanan Raju

    1) This logic no where related with authorization. Do i still need to consider authorization object and handle further ?
    The concept of authorization is only similar, instead of a DSO, you use a Z*COST time-dependent authorization-relavent IObject & start to set the time-intervals for access. I assume the DSO concept, although is a quick fix is not a long term solution, as there needs to be loads, corrections at irregular time intervals & this needs to reflect on the BEx. This holds okay for lesser # of users, but you might never estimate the size, as the business would consider adding more in months to come. As rightly said, you need not have an authoriztion object to handle, but if you make cost center object's customer exit to refer this using a SSO-details (like sy-uname), this will restrict entries & authorization based on this field in your BEx. But still you need to work on the DSO concept & try to migrate towards a authroization-releavant IOBject for good sakes, as there is a possiblity the data is exposed -or- completely not avalialbe even for testing & you need to add the same set of ccenters repeatedly for all users again & again, month-on-month, issues like that.
    2) If the Logged in user not available in the DSO, i am not able to edit the query in BO-Webi .
    Yes, as stated above, this is the drawbacks in this model. Hope it helps.

  • Authorization issue in Info spoke

    Hi all,
    I am facing some authorization issue when executing info spoke in process chain.
    Info spoke is working fine in direct Scheduling (both background and Dialog).
    Am getting this error after execution of process chain
    "System error: RSDRC / FORM AUTHORITY_CHECK RSDRC / FORM AUTHORITY_CHECK R"
    "System error: RSDRC / FUNC RSDRC_BASIC_CUBE_DATA_GET RSDRC / FUNC RSDRC_B"
    "System error: RSDRC / FORM DATA_GET RSDRC / FORM DATA_GET RSDRC / FORM DA"
    "Extraction Cube : Error in DataManager API".
    I dont know why this problem comes.
    Can anyone tel me what went wrong and how to solve it.
    Thanks in advance.
    Kind regards,
    Shanbagavalli.S

    Hi All,
        The above issue is getting due to # character in text at end(e.g ljdfsaa##). After removing # characters in text issue got resolved.
    Thansk,
    Manjunatha

Maybe you are looking for

  • Can't get Safari 5.1.1 to run a java applet from Ubuntu Server with unsigned cert

    Hi there, I am trying to run a Webmin control panel in the latest safari and no matter what I do, I keep getting this error message: Works fine in Latest Chrome. I am running latest Lion and would like to use Safari as my main browser, but if I can't

  • Outlook Integration inconsistencies

    Dear Members, I have been testing the outlook integration functionality in Sap B1 2005 and Sap B1 2007 and the concept is very good because it enhances CRM for clients as well as integrated communication into the erp package. However, I have found so

  • Need help in interactive list

    Hi all, In first list i displayed sflight table details.i used this code.if i double click on carrid value i am getting corresponding spfli  details  in the next list. AT LINE-SELECTION. GET CURSOR FIELD fld VALUE val LENGTH len OFFSET off LINE li. s

  • My mail is not is not working

    my email is not working

  • I.d issue

    Hey guys, So i am in a total pickle, my blackberry user id has an invalid email, basically i messed up and put googlemail.co.uk instead of .com, this is now registered on my device, and having upgraded apps or ive been avoiding this as i had forgotte