Avoiding sending same data to IDOC

Hi
I require  help in the following scenario , Blogs , Links or any development approach will be helpful
I have a scenario where PI will receive incoming XML messages in message queues and wil have a lot of filelds and has to be posted into IDOCS.
Now the requirement is to stop before posting ,the IDOC containing the same recods
i.e based on the combination of 3 or 4 fields a unique record is determined and if it has been posted before it shouldnt be allowed to create an IDOC
How can this be done ?
thanks
Rohan

Hi Rohan,
sorry to say that... but PI is not smart. PI cannot know what data have been correctly created in ECC since the beginning of a GoLive...
Don't forget that an Idoc can be in error in ECC, that means, for instance, that in PI you cannot stored all received messages to do your control.
There are only two ways:
1. The control is done in ECC by encapsulate the standard function module (linked to your IDoc) in a specific Function Mdule. Accordind to me, this the BEST solution. And especially for Performance.
2. The control is done in PI... but as PI does not know which data have been corectly created in ECC, PI has to ask to ECC the info. that's you have to develop such a flow.
a. Sender -> PI
b. via a RFC (for instance) defined in ECC... and so maybe to be developped... PI call this RFC to know if the data have bee, already created in ECC.
c. PI receive the RFC answer and then you have to take the decision: create the idoc or not. That, mean you have to develop a BPM in ECC.
Résumé:
1st solution: develop a FM in ECC to do the check.
2nd solution: develop a RFC in ECC plus develop a BPM in PI with at least two mapping (one for the RFC call and one for the creation of IDoc)... to have a complex solution... which can destroy your PI performance... if you have many entries to check.
Questions:
In which PI version are you. Remind in PI 7.0, the performance of Workflow (sorry BPM) are not like in PI 7.1...
How many data that you have to treat ? if it's huge, the 2nd solution is clearly bad for my eyes
When you develop, think always to the performance !!
That's just my point of view.... everybody can have another one...
Regards.
Mickael
Edited by: Mickael Huchet on Jul 22, 2009 10:00 AM

Similar Messages

  • Send same data to two systems

    I tried several ways but failed. And I'm very confused, Is somebody tell me the correct way?
    send the same message to two receivers.
    So there is one Receiver determination, what about interface determination?
    Shoud I use different message interfaces and mapping for two receivers?
    Thanks very much.

    if you want to send same data to two systems this is how it will be
    1 outbound interface
    2 inbound interface (this is for more clarity. The interfaces will use the same message type)
    1 Message mapping
    2 interface mapping
    1 Receiver determination
    2 interface determination
    1 sender agreement
    2 receiver agreement
    This is just 1 design out of the many But i guess the above sud be clear enough.

  • Query : Send same data to two different systems

    Hi,
    We are getting data from BI to PI through proxy. And using soap adapter we are sending the data to non sap system.
    Now my query is : I want to send the data which came from BI to PI to two non sap (Prod and Quality) systems. How can we do that? Waiting for your help me on this.

    Hi,
    You have to add 2 receivers in receiver determination (one for quality & one for prod).
    After that, create 2 interface determinations separately one for each, also 2 receiver agreement & 2 receiver channels.
    -Supriya.

  • Send production date by Idoc

    Hi,
    What is the (best-practice) Idoc message to send the production date (from the batch - MSC3n) to the customer? Is there a standard solution?
    I tried to use the QCERT message, but there is only the shelf-life date, but I would like to send the production date.
    Thanks in advance.
    Best regards,
    Thomas

    Hi,
    My understanding is that LOIPRO is used to send Production Orders to external systems. But we have to send this information to the customer and if possible we want to include the information in an existing message (QCERT or DESADV).
    Has anybody experiences in this? How did you implement this?
    Thanks,
    Thomas

  • Sending the same data to multiple receivers.

    Hi,
    In 7.1, I did a simple file-to-file scenario with mulitple receivers.I used only 1 Rcvr Det.(included multiple business components) and 1 Interface Det. without BPM and it works.I would like to know if there's any other way to send same data to multiple receivers without BPM and/or the approach used by me.
    Thanks,
    Vishal

    Thanks all for your replies. I did multimapping as suggested by couple of you and it works. Since it is required to send to 7 or more systems and the no. of fields to be mapped is huge, multimapping is time-consuming. So I would like to know if there's any other approach.
    @Ravi: can you please explain with more details regarding the approach suggested by you?
    Can someone explain why and/or how a mapping executes multiple times if we have multiple receivers getting the same data?
    And if there's any way to check(For Ex: Moni) if the mapping executed multiple times?
    Thanks in adavnce,
    Vishal

  • BPM scenario to send same file data two RFC function modules

    Hi,
    Scenario:same file  need to send the data to two different RFC functions.
    so in this case i need to use two receive steps or only one receive step? beause file should be places in the archive after second rfc triggered.
    but this scenario client need to go with BPM only .I am new to BPM.please suggest the steps and process need to follow for this scenario.

    Hi,
    You will have one async receive step to start the BPM from your file interface, 2 synchronous send steps for each RFC, and an async receive step to archive.
    Don't use the transformation steps in BPM, as it decreases performance. You can use the same abstract interface for your file format in the send steps, but specify different Send Contexts for the receive steps. In Configuration, use a condition on Context object ProcessStep = Send Context from your BPM, and route to the correct RFC interface, using a mapping from your file to the RFC.
    Hope this helps !
    kr,
    Peter Glas

  • How can i send Comments field data through IDOC HRMD_A06-E1P0035?

    Dear all,
    We need to post the legacy system data for infotype IT0035 using IDOC - HRMD_A06-E1P0035 to the SAP R/3 system.In this segment (E1P0035) there no field for the 'comments' to send the data. Pls let us know, is there any way to pass data through E1P0035 segment for the 'comments' field of IT0035?
    Thanks in advance.
    Ram Rayapudi

    Hi Ram,
    Comment fields in infotypes are not stored in the infotype-tables itself, but in PCL1-Cluster TX.
    In Standard-SAP there is no way to pass this via ALE. Even the infotype-table-field ITXEX, which say that there is any textfield present, is clear in ALE.
    If you really need to transfer this data, you have to do ALE-amplifications.
    Regards,
    Herbert

  • IDOCs to send Employee Data

    Hi All,
    In my current project, I have lots of interfaces to send employee data to third party. Now the interface team has decided to use IDOCs to transfer employee data. Employee data is of the order of 20,000 and many interface will be scheduled to run daily. So here are my questions:
    1. Earlier decided approach was to use file interface. Is IDOC better in this case?
    2. Over and above this, they want to generate 1 IDOC per employee data (if the interface has to run every business day, then ~5 Million IDOCs per year and this is just for one interface). Do you think this is the right approach?
    Appreciate you responce.
    Cheers,
    Bhaskar

    Hi Bhaskar,
    My humble thoughts on the questions you have asked,
    1. Earlier decided approach was to use file interface. Is IDOC better in this case?
    Well, the first questions is does this third party application have an SAP connector to transact IDOCs or do you have a middleware in between? Now, if you dont have a middleware/third party application doesn't support IDOC Communication, then you will have to look at file interface(or other possible means)
    Anyways assuming that an IDOC communication is indeed possible between the two systems with/without a middleware in between, the advantages of IDOC over file interface is many
    1) IDOCs use transactional RFC (which is asynchronous in nature , but i guess you know this already), which assures QOS  EO - Exactly Once.
    2) IDOCs provides superior monitoring, audit and reconciliation capabilities, which you would have to code for yourself in File interface.
    3) IDOCs - More structured and organized programming, hence easy to maintain over time.
    4) Standard IDOCs are available which can deployed immediately by doing some configurations, and any custom requirement can be coded in using customer enhancements.
    2. Over and above this, they want to generate 1 IDOC per employee data (if the interface has to run every business day, then ~5 Million IDOCs per year and this is just for one interface). Do you think this is the right approach?
    You can definitely use IDOC archiving, and also i guess in real time scenario, you would want to send the delta changes w.r.t the data of an employee and not send the complete master data on a daily basis.
    All said, if this is a one time run/an interface which might be scrapped in near future, with no need of advanced monitoring and audit capabilities you might still want to go with File interface, i am sure you will get more informative replies from experts on this forum, so keep watching the thread
    Regards,
    Chen

  • IDOC for sending material data including classification data?

    Hi everyone,
    I'm just looking for an IDOC to send to an external system all data of certain materials but including classification system data, variant configuration data...
    I have checked MATMAS0x but I am not sure if those IDOCs match with my requirement.
    I would be very grateful if someone could please help me.
    Thanks in advance and best regards,
    Ben

    Hi Ben
    Kindly follows the below steps and trasaction screens, I believe you will be able to send the mat data incl. classification data to other external system through IDOC.
    Steps:
    Create material master record in SAP
    Enter T.Code BD10 to  send material master data from SAP to 3rd Party Logistics Provider
    Enter Material,Logical System and click Execute(F8)
    Press ENTER to continue
    Press ENTER to continue
    Enter T.Code WE09 to check the status and content of the Idoc created
    Enter Idoc Segment name in Search in Segment, Field name in Search in Field, Material No in "for Value" and press F8 to execute
    Double click on the Idoc number to check the content and status of the Idoc
    Expand the Status records to check the STATUS of the Idoc
    To check the fields in the Idoc, expand Data records and check the Mandatory fields in each Segment
    Transaction Screens:
    Transaction / Screen
    MM01
    BD10
    BD10 Screen
    BD10 Screen
    BD10 Screen
    WE09
    WE09 Screen
    WE09 Screen
    WE09 Screen
    WE09 Screen
    Expected Result:
    Expected Result
    Material Master Record Created
    Send Material Screen appears
    A popup window appears with a message "1 master Idoc(s) set up for message type MATMAS"
    A popup window appears with a message "1 Communication Idoc(s) generated for message type MATMAS"
    Send Material Screen appears
    Idoc Search for Business Content screen appears
    Idoc corresponding to the material no is displayed
    Idoc along with the 3 records(Control Record,Data Record,Status Record) appers
    Final STATUS should be 03(Data passed to port OK)
    All Mandatory fields must be populated with correct data
    If it is useful reward points
    Thanks
    Saravana

  • Two idocs with exactly the same data have statuses 51 an 53. Why?

    Hi all,
    There are two idcos with exactly the same data, however when they are processed, one is ok with status 53 whereas the other is not processed and has the status 51.
    When I say same data, I mean both the idocs have the same message type, basic type, extension, partner no, partner type etc. Also, the data at the segment level is also the same.
    Could you please let me know the reason for this?
    Thanks and regards,
    Anishur

    Hi Azam
    Me too faced the same for the Inbound Invoic Idoc Application . alternatively I used to get the error . Once 53 next 51 ... like that .It was the data issue in segment field E1EDS01-SUMME Total value of sum segment.It was resolved after ging the proper value .
    Rgds
    Sree M.
    Edited by: Sree  Merugu on Jul 2, 2008 6:14 PM

  • Executing same VI multiple times, sending/retrieving data

    I know how to
    execute a single vi multiple times using the invoke node/reentrant method.  But
    I am not sure how to send/get data the running vi's.
    A little background
    on my project.  I have to test up to 64 units for a long period of time.  When
    one of the 64 units is found, I want the test to execute the test.vi then come
    back to my main.vi and wait for the next unit to test to be
    found.
    The test.vi will
    require some information to run so I need to get that data into the test.vi
    along with a way to stop the tests while they are running.  I also want to
    report running data back to the user, so I need to get data from
    test.vi.
    I am using a
    producer/consumer/display loop(s) and I would like to be able to use my display
    queue to collect and sort data from my running test.vi's.
    I may be going about
    this wrong executing test.vi using the invoke node, but I am trying to find away
    that the test vi's will independently execute and run.
    Please let me know
    if I need to clarify my situation.  I have been trying to figure this out for a
    while, so it may make sense in my head, but not on paper.
    Thanks,
    Zac

    If I understand you correctly, you are invoking a reentrant VI to run in up to 64 different instances?  And you need to set up a communications mechanism between each instance and the main VI.
    I would look at a functional global variable or action engine.  (Search on either of those terms and  you will come up with numerous examples).
    Let the FGV store data in its uninitialized shift registers.  If you need a separate queue from each VI instance to the main, then have one shift register be an array of queue references.  Let's say you are ready to invoke the first instance of your VI.  Pass to it and ID value of 0 in its connector pane.  Obtain a queue and store the reference to that in index 0 of the queue array in the FGV.  Every time you need to enqueue or dequeue from queue 0, you use index array to retrieve the reference stored in queue 0.  You would do that whenever you need to work inside the instance of the VI (have it remember that its ID was 0) or in the main VI.
    Next instance of the reentrant VI, you pass it a 1 as its ID.  Let the FGV obtain a queue and store its reference in index 1 of the array.  You could have other values stored in the FGV or other arrays such as an array of booleans that serve as flags to tell the instance of the reentrant VI to stop running.
    Basically the FGV or action engine becomes a storehouse of information for each instance of the reentrant VI.  It will be scalable.  Each time you need to add a new instance of your VI, you store the info in another element of the array stored in the FGV that is based on a ID number you assign as you create each instance.

  • How to send joystick data over TCP connection

    Hi all,
    I am a long time Labview discussion forum user for learning, but this is my first time posting a question, I hope somebody can help me!
    In the attached VI I am trying to send data from a joystick over a TCP connection. I can send data fine using the TCP examples (in fact the majority of my VI is just a copy of the example). However I am to the point where I do not know how to send all the data necessary (3 axis data, 12 buttons, and the POV data) over TCP. Strings, clusters, and arrays were never my strong suite and converting between them is a nightmare for me.
    Basically I am trying to send each axis data (X,Y, and Z), button data (12 buttons), and POV data (the POV data will be calculated to adjust the position of a camera, so the immediate data is not important, I will add functions to add the change in the button movements to write a standing position for two servos [pan and tilt], for which that I will need to send over the TCP connection) over the TCP connection to control various cameras and motors. I don't know if it is posible to send that much data over a TCP connection in one write VI through a string, and also how to separate the string on the other side in order to control the client VI.
    Again, the actual TCP communication I get, and can operate fine, just formatting all the data into a string (or whatever is required) so that I can unpack on the other side is the issue here.
    Another question I have (not impotant to get the program running just might make it easier on me) is can a TCP server (which sends the data to the client) also recieve data back from the client on the same port ( for example sensor data and digital positions [on,off])? Or do I need to set up two TCP communication loops with the first client acting as the server on a different port than the first, which then sends the data to the original server, which also has a client TCP configuration in another loop? I hope this makes sense...
    One final question.....I already have a solution to this but using labview for the entirety of this project would be nice. I use skype to stream 1080p video from a webcam to my computer so I can view live feed. Can labview do this? This would be awesome if so, I am just not sure if the communication protocols in use could support real time (or as close as possible to streaming) for 1080p video.
    Thanks all in advance for your help,
    Physicsnole
    Attachments:
    cameraserver.vi ‏24 KB
    cameraclient.vi ‏18 KB

    Physicsnole wrote:
    In the attached VI I am trying to send data from a joystick over a TCP connection. I can send data fine using the TCP examples (in fact the majority of my VI is just a copy of the example). However I am to the point where I do not know how to send all the data necessary (3 axis data, 12 buttons, and the POV data) over TCP. Strings, clusters, and arrays were never my strong suite and converting between them is a nightmare for me.
    Well, you cast the axis info cluster to a string, but then you cast it back to an array of DBL. Thatr's not compatible. You should probably cast it back to an "axis info" cluster of exactly the same type. Go the the other VI and right-click the cluster wire to create a constant. Now move that diagram cluster constant to the other VI and use it as type.
    Your default ports don't seem to match. You seem to have client and server roles confused. In the sever you create a listener, but then you start sending packets, even though no connection is established. The connection needs to be initiated by the client.
    Your client stops the loop the first time a timeout is encountered. Shouldn't that be more permanent? Also, please retain code clarity and avoid unecessary complexities. For example, replace the "not or" with a plain "or" and change the loop to "stop if true"
    Physicsnole wrote:
    Basically I am trying to send each axis data (X,Y, and Z), button data (12 buttons), and POV data (the POV data will be calculated to adjust the position of a camera, so the immediate data is not important, I will add functions to add the change in the button movements to write a standing position for two servos [pan and tilt], for which that I will need to send over the TCP connection) over the TCP connection to control various cameras and motors. I don't know if it is posible to send that much data over a TCP connection in one write VI through a string, and also how to separate the string on the other side in order to control the client VI.
    You can send as much as you want. The casting to/from string is the same as described above.
    Physicsnole wrote:
    Another question I have (not impotant to get the program running just might make it easier on me) is can a TCP server (which sends the data to the client) also recieve data back from the client on the same port ( for example sensor data and digital positions [on,off])? Or do I need to set up two TCP communication loops with the first client acting as the server on a different port than the first, which then sends the data to the original server, which also has a client TCP configuration in another loop? I hope this makes sense..
    The primary function of a "server" is to wait for a connection and then communicate with the client once a conenction is established. An established TCP/IP connection is fully two-way and both sides can send and receive.
    LabVIEW Champion . Do more with less code and in less time .

  • Want to transfer data via idocs from one  R/3 to different R/3

    Hi!!
    May i hav nay step by step pdf which gives the complete flow of how to transfer idocs from from one  R/3 to different R/3.
    Though i have the basics steps but some where I m stuck.
    Also I have two doubts::
    1.Is thr Any relation bw port name and Logical System name?Can they be same.??I  hav kept Logical System name as SAPE60 AND PORT name also as SAPE60(in e60) and  SAPEI6(in ei6) servers respectively.
    2.Should the Logical System names be maintained same in both the servers??
    Kindly respond .
    Helpful answers will be rewarded points!!!

    Hi Deepika ,
    See the Example scenarios
    MASTER DATA TRANSFERMATION BETWEEN 2 DIFF CLIENTS
    •     For this scenario Client 800 is the Sender and 810 is the receiving system
    1. Creating Logical Systems
    o     Login using 800 client
    o     Go to T. Code SALE
    o     Expand Sending and Receiving Systems
    o     Expand Logical Systems
    o     Click on Define Logical System
    o     Click on New Entries
    o     Create STUD_S, STUD_R Logical Systems
    o     Save and come back
    o     Assign the STUD_S Logical System to client 800
    o     Assign the STUD_R Logical System to client 810
    2. Creating the RFCs
    o     Go to T. Code SM59
    o     Expand R/3 Connections
    o     Enter RFC Name as STUD_S
    o     Connection Type as 3
    o     Language as EN
    o     Client as 800
    o     User as  SAPUSER
    o     PWD as abap
    o     Target host as sap
    o     Click on Remote logon button to test the RFC
    o     Enter RFC Name as STUD_R
    o     Connection Type as 3
    o     Language as EN
    o     Client as 800
    o     User as  SATISH
    o     PWD as abap
    o     Target host as sap
    o     Click on Remote logon button to test the RFC
    3. Creating the Message Type
    o     Go to T. Code WE81
    o     Click on change, continue
    o     Click on New Entries button
    o     Give message type as ZBAPI_STUD_MAS and description
    o     Save and back
    4. Creating the Segment
    o     Go to T. Code WE31
    o     Give segment name as ZBAPI_STUD_SEG
    o     Enter Short Text
    o     Enter the Field Name and Data Element in the text boxes
    o     Save, continue,
    o     Click on Edit -> Set Release.
    5. Creating the Basic IDOC Object
    o     Go to T. code WE30
    o     Give obj. name as ZBAPI_STUD_IDOC
    o     Click on create
    o     Select create new radio button, give description and continue
    o     Select the IDOC obj name and click on create button
    o     Enter the segment name which is create earlier
    o     Select the check box if you want to make the segment mandatory
    o     Enter 1 in minimum number 99999 in maximum number, continue
    o     Save and back
    o     Click on Edit -> Set Release
    6. Creating Customer Distribution Model
    o     Go to T. Code BD64
    o     Click on change and Create model view button
    o     Enter the short text and Technical name as ZSTUDENT
    o     Select the model and click on Add Message Type Button
    o     Give the Sender as STUD_S,
    o                    Receiver as STUD_R,
    o                    Message Type as ZBAPI_STUD_MAS
    o     Select the model view & click on Environment -> Generate Partner Profiles
    o     Select Transfer IDOC Immediately and Trigger Immediately radio buttons
    o     Click on Execute
    o     You should get a list in green color which means it executed successfully.
    o     Back to main screen, select the model view
    o     Click Edit->Model view->Distribute
    o     Click on continue
    o     You should get a list saying model view is distributed successfully.
    7. Checking the Port
    o     Go to T. Code WE21
    o     Expand Transactional RFC
    o     Find the port from the list which is created using BD64 for STUD_R (Receiving system) RFC Destination.
    8. Checking the Partner Profiles.
    o     Go to T. Code WE20
    o     Expand Partner Type LS
    o     Select the Partner profile STUD_R
    o     Double click on Message Type ZBAPI_STUD_MAS in Outbound parmtrs.
    o     Check Receiver Port is assigned correctly
    o     Check the Basic type as your Basic IDOC object.
    9. Assigning the Message Type to Basic IDOC Object
    o     Go to T. Code WE82
    o     Click on Change & continue, New Entries button
    o     Give the Message type as ZBAPI_STUD_MAS
    o     Give Basic Type as ZBAPI_STUD_IDOC
    o     Release as 46C
    o     Save and back
    10. Creating Inbound Function Module (Posting Program)
    o     Go to T. Code SE37
    o     Create a function Module IDOC_INPUT_ZBAPI_STUD_MAS
    o     Set the Processing type as Remote Enabled Module and mode as start immed, in Attributes Tab.
    o     Import Parameters
    INPUT_METHOD                 LIKE     BDWFAP_PAR-INPUTMETHD
    MASS_PROCESSING     LIKE     BDWFAP_PAR-MASS_PROC
    NO_APPLICATION_LOG     LIKE     SY-DATAR
    MASSSAVEINFOS                 LIKE     MASSSAVINF
    o     Export Parameters
    WORKFLOW_RESULT          LIKE     BDWF_PARAM-RESULT
    APPLICATION_VARIABLE     LIKE     BDWF_PARAM-APPL_VAR
    IN_UPDATE_TASK          LIKE     BDWFAP_PAR-UPDATETASK
    CALL_TRANSACTION_DONE  LIKE     BDWFAP_PAR-CALLTRANS
    o     Tables
    IDOC_CONTRL     LIKE     EDIDC
    IDOC_DATA          LIKE     EDIDD
    IDOC_STATUS     LIKE     BDIDOCSTAT
    RETURN_VARIABLES     LIKE     BDWFRETVAR
    SERIALIZATION_INFO     LIKE     BDI_SER
    o     Exceptions
    WRONG_FUNCTION_CALLED
    o     Source Code
    DATA: FIRST_TRANC LIKE MARA_UEB-TRANC,
          ZBAPI_STUD_SEG like zbapi_stud.
    DATA: ZBAPI_STUD LIKE ZBAPI_STUD.
      DATA: I_ZBAPI_STUD LIKE ZBAPI_STUD.
      DATA: C_TRUE                         VALUE 'X'.
      DATA: C_FALSE                        VALUE ' '.
    DATA: BEGIN OF T_IDOC_ROLLNO OCCURS 0,
            DOCNUM LIKE EDIDC-DOCNUM,
            ROLLNO LIKE ZBAPI_STUD-ROLLNO,
          END   OF T_IDOC_ROLLNO.
      DEFINE APPEND_RESFIELDS.
        PERFORM APPEND_RES_FIELDS TABLES T_MFIELDRES
                                         T_RES_FIELDS
                                  USING  &1
                                         COUNTER-D_IND.
      END-OF-DEFINITION.
      DATA: I_MARA_UEB LIKE MARA_UEB.
      DATA: I_ZSTUD_UEB LIKE ZBAPI_STUD.
      DATA: I_MAKT_UEB LIKE MAKT_UEB.
      DATA: I_MARC_UEB LIKE MARC_UEB.
      DATA: I_MARD_UEB LIKE MARD_UEB.
      DATA: I_MFHM_UEB LIKE MFHM_UEB.
      DATA: I_MARM_UEB LIKE MARM_UEB.
      DATA: I_MEAN_UEB LIKE MEA1_UEB.
      DATA: I_MBEW_UEB LIKE MBEW_UEB.
      DATA: I_STEU_UEB LIKE STEU_UEB.
      DATA: I_STEUMM_UEB LIKE STEUMM_UEB.
      DATA: I_MLGN_UEB LIKE MLGN_UEB.
      DATA: I_MLGT_UEB LIKE MLGT_UEB.      " //br010797 neu zu 4.0
      DATA: I_MPGD_UEB LIKE MPGD_UEB.
      DATA: I_MPOP_UEB LIKE MPOP_UEB.
      DATA: I_MVEG_UEB LIKE MVEG_UEB.
      DATA: I_MVEU_UEB LIKE MVEU_UEB.
      DATA: I_MVKE_UEB LIKE MVKE_UEB.
      DATA: I_MPRW_UEB LIKE MPRW_UEB.
      DATA: I_LTX1_UEB LIKE LTX1_UEB.
      DATA: HELP_MARC_UEB LIKE MARC_UEB.
      DATA: T_MARA_UEB LIKE MARA_UEB OCCURS 0.
      DATA: T_MAKT_UEB LIKE MAKT_UEB OCCURS 0.
      DATA: T_MARC_UEB LIKE MARC_UEB OCCURS 0.
      DATA: T_MARD_UEB LIKE MARD_UEB OCCURS 0.
      DATA: T_MFHM_UEB LIKE MFHM_UEB OCCURS 0.
      DATA: T_MARM_UEB LIKE MARM_UEB OCCURS 0.
      DATA: T_MEAN_UEB LIKE MEA1_UEB OCCURS 0.
      DATA: T_MBEW_UEB LIKE MBEW_UEB OCCURS 0.
      DATA: T_STEU_UEB LIKE STEU_UEB OCCURS 0.
      DATA: T_STEUMM_UEB LIKE STEUMM_UEB OCCURS 0.
      DATA: T_MLGN_UEB LIKE MLGN_UEB OCCURS 0.
      DATA: T_MLGT_UEB LIKE MLGT_UEB OCCURS 0.    " //br010797 neu zu 4.0
      DATA: T_MPGD_UEB LIKE MPGD_UEB OCCURS 0.
      DATA: T_MPOP_UEB LIKE MPOP_UEB OCCURS 0.
      DATA: T_MVEG_UEB LIKE MVEG_UEB OCCURS 0.
      DATA: T_MVEU_UEB LIKE MVEU_UEB OCCURS 0.
      DATA: T_MVKE_UEB LIKE MVKE_UEB OCCURS 0.
      DATA: T_MPRW_UEB LIKE MPRW_UEB OCCURS 0.
      DATA: T_LTX1_UEB LIKE LTX1_UEB OCCURS 0.
    Internal fields/ tables
    DATA: FLAG_ERROR_HAPPENED.
    DATA: flag_material_exists. "//br210397 zu 4.0 keine Verwendung mehr
      DATA: FLAG_EXIT_TO_BE_DONE.
      DATA: HELP_TABIX LIKE SY-TABIX.
      DATA: HELP_TRANC LIKE MARA_UEB-TRANC.
      DATA: HELP_ALAND LIKE STEU_UEB-ALAND.
      DATA: HELP_VKORG LIKE MVKE-VKORG.
      DATA: HELP_WERKS LIKE T001W-WERKS.
      DATA: HELP_LFDNR LIKE STEU_UEB-LFDNR.
      DATA: LAST_MARC_TRANC LIKE MARA_UEB-TRANC.
      DATA: LAST_MLGN_TRANC LIKE MARA_UEB-TRANC.    " //br010797 neu zu 4.0
      DATA: LAST_TEXT_TRANC LIKE MARA_UEB-TRANC.
      DATA: CURRENT_TABIX LIKE SY-TABIX.
      DATA: GENERAL_SUBRC LIKE SY-SUBRC.
      DATA: HELP_FACTOR TYPE P DECIMALS 3.
      DATA: USER_SEGMENTS LIKE EDIDD OCCURS 0 WITH HEADER LINE.  " insert
      DATA: CUST_SEGMENT LIKE EDIDD.
      DATA: I_MFIELDRES LIKE MFIELDRES.
    DATA: I_MERRDAT LIKE MERRDAT.
      DATA: I_EDIDD LIKE EDIDD.
                                           " //br neu zu 3.1g
      DATA: T_RES_FIELDS LIKE DELFIELDS OCCURS 0 WITH HEADER LINE.
      DATA: T_MFIELDRES LIKE MFIELDRES OCCURS 0.
      DATA: T_MERRDAT LIKE MERRDAT OCCURS 0.
      DATA: T_EDIDD LIKE EDIDD OCCURS 0.
    DATA: BEGIN OF t_matnr OCCURS 0, "//br210397 zu 4.0
            matnr LIKE mara-matnr,   " wird nicht mehr verwendet
          END OF t_matnr.            "
      DATA: BEGIN OF COUNTER,
              TRANC LIKE MARA_UEB-TRANC,
              D_IND LIKE MARA_UEB-D_IND,
            END OF COUNTER.
    DATA: BEGIN OF t_idoc_tranc OCCURS 0,                          " 4.0
            docnum LIKE edidc-docnum,                              "
            tranc  LIKE mara_ueb-tranc,                            "
          END OF t_idoc_tranc.                                     "
      DATA T_IDOC_TRANC LIKE MATIDOCTRANC OCCURS 0 WITH HEADER LINE."
      DATA: FLAG_FITS.
      DATA: APPLICATION_SUBRC LIKE SY-SUBRC.
      DATA FLAG_MUSS_PRUEFEN LIKE SY-DATAR.
      DATA MAX_ERRORS LIKE T130S-ANZUM.    " 4.0
    note 419281
      DATA : FLG_MASS.
      CLEAR : FLG_MASS.
      FIELD-SYMBOLS: .            " 4.0
    ALE-distribution unity : IDOC status set by locking      "note0361838
      data:                                                     "note0361838
        it_dsp_idocstat like bdidocstat                         "note0361838
          occurs 0 with header line.                            "note0361838
    Initialize data - general
      REFRESH T_MFIELDRES.
      REFRESH T_IDOC_TRANC.
      REFRESH T_IDOC_TRANC.                "JH/02.02.98/4.0C  KPr100004993
    REFRESH t_idoc_tranc_segment.   " //br 40 : unnötig
    REFRESH matnr_tranc.            "    -"-
    REFRESH t_matnr.
      COUNTER-TRANC = 1.
      COUNTER-D_IND = 1.
      REFRESH T_MARA_UEB.
      REFRESH T_MAKT_UEB.
      REFRESH T_MARC_UEB.
      REFRESH T_MARD_UEB.
      REFRESH T_MFHM_UEB.
      REFRESH T_MARM_UEB.
      REFRESH T_MEAN_UEB.
      REFRESH T_MBEW_UEB.
      REFRESH T_STEU_UEB.
      REFRESH T_STEUMM_UEB.
      REFRESH T_MLGN_UEB.
      REFRESH T_MLGT_UEB.                  " //br010797 neu zu 4.0
      REFRESH T_MPGD_UEB.
      REFRESH T_MPOP_UEB.
      REFRESH T_MVEG_UEB.
      REFRESH T_MVEU_UEB.
      REFRESH T_MVKE_UEB.
      REFRESH T_MPRW_UEB.
    REFRESH VKORG_ALAND.
    REFRESH WERKS_ALAND.
      CLEAR APPLICATION_SUBRC.
      REFRESH T_MERRDAT.
    Check if right function is called
      READ TABLE IDOC_CONTRL INDEX 1.
      IF SY-SUBRC <> 0.
        EXIT.
      ELSE.
        IF  IDOC_CONTRL-IDOCTP <> 'ZBAPI_STUD_IDOC'.
          RAISE WRONG_FUNCTION_CALLED.
        ENDIF.
      ENDIF.
      LOOP AT IDOC_CONTRL.
      Initialize data - per IDOC
      t_idoc_tranc-docnum = counter-tranc.
        T_IDOC_TRANC-DOCNUM = IDOC_CONTRL-DOCNUM.
        T_IDOC_TRANC-FIRST_TRANC_IDOC = COUNTER-TRANC + 2.
        APPEND T_IDOC_TRANC.
      Select segments which belong to IDOC
        REFRESH T_EDIDD.
        LOOP AT IDOC_DATA WHERE DOCNUM = IDOC_CONTRL-DOCNUM.
          APPEND IDOC_DATA TO T_EDIDD.
        ENDLOOP.
       BUSINESS TRANSACTION EVENT (header / data)         "note0388000
         call function 'OPEN_FI_PERFORM_MGV00200_E'         "note0388000
              exporting                                     "note0388000
                  idoc_header       = idoc_contrl           "note0388000
                  FLG_APPEND_STATUS = 'X'                   "note0388000
              tables                                        "note0388000
    (DEL)       idoc_data         = idoc_data "note0388000 note0418561
                  idoc_data         = t_edidd               "note0418561
                  idoc_status       = idoc_status           "note0388000
              exceptions                                    "note0388000
                  others       = 1.                         "note0388000
         if sy-subrc = 1.                                   "note0388000
            continue.                                       "note0388000
         endif.                                             "note0388000
      Within one IDOC: loop through data segments:
      Prepare internal tables for the current material
        LOOP AT T_EDIDD INTO IDOC_DATA.
        Transform from CoreData to Normal Data if necesary
          CASE IDOC_DATA-SEGNAM.
           WHEN 'E1MARAC'.
    *--COMMENTED BY SATISH
             PERFORM MOVE_E1MARAC_TO_E1MARAM USING IDOC_DATA.
           WHEN 'E1MAKTC'.
             PERFORM MOVE_E1MAKTC_TO_E1MAKTM USING IDOC_DATA.
    *--COMMENTES ENDED BY SATISH
             WHEN 'ZBAPI_STUD_SEG'.
              PERFORM MOVE_E1MARAC_TO_E1MARAM USING IDOC_DATA.
                CLEAR I_ZBAPI_STUD.
    Second: Move E1MARAC into E1MARAM
                I_ZBAPI_STUD = IDOC_DATA-SDATA.
    Third: Move E1MARAM back into IDOC-line
                IDOC_DATA-SDATA =  I_ZBAPI_STUD.
                IDOC_DATA-SEGNAM = 'ZBAPI_STUD_SEG'.
          ENDCASE.
          CURRENT_TABIX = SY-TABIX.
          COUNTER-D_IND = COUNTER-D_IND + 1.
          COUNTER-TRANC = COUNTER-TRANC + 2.
          CASE IDOC_DATA-SEGNAM.
             WHEN 'ZBAPI_STUD_SEG'.
            Initialize data - per material
              COUNTER-D_IND = 1.
              FIRST_TRANC = COUNTER-TRANC.
            interpret segment
              ZBAPI_STUD_SEG = IDOC_DATA-SDATA.
              MOVE-CORRESPONDING ZBAPI_STUD TO I_ZSTUD_UEB.
              T_IDOC_ROLLNO-DOCNUM  = IDOC_CONTRL-DOCNUM.
              T_IDOC_ROLLNO-ROLLNO  = I_ZSTUD_UEB-ROLLNO.
              APPEND T_IDOC_ROLLNO.
           ENDCASE.
                if not ZBAPI_STUD_SEG is initial.
                 ZBAPI_STUD-MANDT  = ZBAPI_STUD_SEG-MANDT.
                 ZBAPI_STUD-ROLLNO = ZBAPI_STUD_SEG-ROLLNO.
                 ZBAPI_STUD-FNAME  = ZBAPI_STUD_SEG-FNAME.
                 ZBAPI_STUD-LNAME  = ZBAPI_STUD_SEG-LNAME.
                  INSERT ZBAPI_STUD FROM ZBAPI_STUD_SEG.
                  COMMIT WORK.
                ENDIF.
    *-- ALE ditribution unity : update IDOC status                "note03618
          LOOP AT it_dsp_idocstat.                                  "note036
             LOOP AT IDOC_STATUS WHERE DOCNUM = it_dsp_idocstat.    "note036
                DELETE idoc_status INDEX sy-tabix.                  "note036
             ENDLOOP.                                               "note036
             APPEND it_dsp_idocstat TO idoc_status.                 "note036
          ENDLOOP.                                                  "note036
    *--GENERATING THE IDOC STATUS
      PERFORM HANDLE_ERROR_EXT             " //br40
                  TABLES                                        "
                     IDOC_CONTRL                                "
                     IDOC_STATUS                                "
                     RETURN_VARIABLES                           "
                     T_MERRDAT                                  "
                     T_IDOC_TRANC                               "
                     T_IDOC_ROLLNO          "JH/4.0C/KPr100004993
                  USING                                         "
                     GENERAL_SUBRC                              "
                     NO_APPLICATION_LOG                         "
                     MASSSAVEINFOS         "wk/40c
                  CHANGING                                      "
                     WORKFLOW_RESULT.                           "
                  PERFORM HANDLE_ERROR
                              TABLES
                                 IDOC_CONTRL
                                 IDOC_STATUS
                                 RETURN_VARIABLES
                                 T_MERRDAT
                                 T_IDOC_ROLLNO     "JH/4.0C/KPr100004993
                              USING
                                 APPLICATION_SUBRC
                              CHANGING
                                 WORKFLOW_RESULT.
      SORT T_IDOC_ROLLNO BY ROLLNO. "note 315124
    React on general error
      DATA: I_MERRDAT LIKE MERRDAT.
      IF GENERAL_SUBRC <> 0.
        I_MERRDAT-MSGTY = 'E'.
        I_MERRDAT-MSGID = SY-MSGID.
        I_MERRDAT-MSGNO = SY-MSGNO.
        I_MERRDAT-MSGV1 = SY-MSGV1.
        I_MERRDAT-MSGV2 = SY-MSGV2.
        I_MERRDAT-MSGV3 = SY-MSGV3.
        I_MERRDAT-MSGV4 = SY-MSGV4.
        APPEND I_MERRDAT TO T_MERRDAT.
      ENDIF.
      LOOP AT T_MERRDAT INTO  I_MERRDAT
                        WHERE MSGTY = 'S'  "success
                        OR    MSGTY = 'D'  "dummy
                        OR    MSGTY = 'I'  "Information " //br011097 zu 3.1I
                        OR    MSGTY = 'H'  "dummy       " 4.0
                        OR    MSGTY = 'W'. "warning
        DELETE T_MERRDAT.
      ENDLOOP.
        ENDLOOP.
      ENDLOOP.
    ENDFUNCTION.
    *&      Form  handle_error_ext
    FORM HANDLE_ERROR_EXT
            TABLES
               IDOC_CONTRL                   STRUCTURE EDIDC
               IDOC_STATUS                   STRUCTURE BDIDOCSTAT
               RETURN_VARIABLES              STRUCTURE BDWFRETVAR
               T_MERRDAT                     STRUCTURE MERRDAT
               IDOC_TRANC                    STRUCTURE MATIDOCTRANC
    JH/02.02.98/4.0C  KPr100004993 (Anfang)
               T_IDOC_ROLLNO                 STRUCTURE T_IDOC_ROLLNO
    JH/02.02.98/4.0C  KPr100004993 (Ende)
            USING
               GENERAL_SUBRC                 LIKE SY-SUBRC
               NO_APPLICATION_LOG            LIKE SY-DATAR
               MASSSAVEINFOS                 LIKE MASSSAVINF
            CHANGING
               WORKFLOW_RESULT               LIKE BDWF_PARAM-RESULT.
      DATA FLAG_ERROR_HAPPENED.
      DATA I_MERRDAT LIKE MERRDAT.
      DATA IDOC_INDEX_2_SUBRC LIKE SY-SUBRC.
      DATA AL_HANDLES TYPE BAL_T_LOGH. "//br99
      SORT T_IDOC_ROLLNO BY ROLLNO.                        "note 315124
    React on general error
      IF GENERAL_SUBRC <> 0.
        REFRESH T_MERRDAT.
      i_merrdat-tranc = 0.                              " //br261197
        READ TABLE IDOC_TRANC INDEX 1.     " zu 40b
        I_MERRDAT-TRANC = IDOC_TRANC-FIRST_TRANC_IDOC.          "
        I_MERRDAT-MSGTY = 'E'.
        I_MERRDAT-MSGID = SY-MSGID.
        I_MERRDAT-MSGNO = SY-MSGNO.
        I_MERRDAT-MSGV1 = SY-MSGV1. I_MERRDAT-MSGV2 = SY-MSGV2.
        I_MERRDAT-MSGV3 = SY-MSGV3. I_MERRDAT-MSGV4 = SY-MSGV4.
        APPEND I_MERRDAT TO T_MERRDAT.
      ENDIF.
    DATA: C_TRUE,
          C_FALSE VALUE 'X'.
    If error happened ==> Rollback whole work....
      LOOP AT T_MERRDAT INTO I_MERRDAT WHERE MSGTY NA 'SDHWI'.
        EXIT.
      ENDLOOP.
      IF SY-SUBRC = 0.
        FLAG_ERROR_HAPPENED = C_TRUE.
        ROLLBACK WORK.
      ELSE.
        FLAG_ERROR_HAPPENED = C_FALSE.
      ENDIF.
    Set IDOC status
    two cases:
    single IDOC-processing: ==> error can be written in IDOC status
    package processing ==> anononymous "package error" for all IDOCs
      READ TABLE IDOC_CONTRL INDEX 2.
      IDOC_INDEX_2_SUBRC = SY-SUBRC.
      IF SY-SUBRC = 0.
        IF 1 = 2.                          "//br40
          MESSAGE E051(B1).                                     "
        ENDIF.                                                  "
        CLEAR I_MERRDAT.
        I_MERRDAT-MSGID = 'B1'.
        I_MERRDAT-MSGTY = 'E'.
        I_MERRDAT-MSGNO = '051'.
      ENDIF.
      IF IDOC_INDEX_2_SUBRC NE 0 OR FLAG_ERROR_HAPPENED = C_FALSE.
      Nur in diesen Fällen wird Application Log geschrieben
      Delete all Successes and Dummy records from t_merrdat
      DELETE t_merrdat WHERE msgty = 'S'  "success         " testweise
                       OR    msgty = 'D'. "dummy           "
        LOOP AT T_MERRDAT INTO I_MERRDAT WHERE MSGTY = 'D'.     "
          I_MERRDAT-MSGTY = 'S'.                                "
          MODIFY T_MERRDAT FROM I_MERRDAT.                      "
        ENDLOOP.                                                "
      ENDIF.
      WORKFLOW_RESULT = 0.
      LOOP AT IDOC_CONTRL.
      Set IDOC status
        CLEAR IDOC_STATUS.
        IDOC_STATUS-DOCNUM = IDOC_CONTRL-DOCNUM.
        IF FLAG_ERROR_HAPPENED = C_FALSE.
    Application log
          PERFORM WRITE_APPL_LOG TABLES IDOC_TRANC
                                        T_MERRDAT
                                        IDOC_STATUS
                                 USING  IDOC_CONTRL
                                        FLAG_ERROR_HAPPENED
                                        NO_APPLICATION_LOG
                                        MASSSAVEINFOS
                                        AL_HANDLES.
        idoc_status-status = '53'.       "OK!
        APPEND idoc_status.
    JH/02.02.98/4.0C  KPr100004993 (Anfang)
        Fill Return variables
          CLEAR RETURN_VARIABLES.
          RETURN_VARIABLES-DOC_NUMBER = IDOC_CONTRL-DOCNUM.
          RETURN_VARIABLES-WF_PARAM = 'Processed_IDOCs'.
          APPEND RETURN_VARIABLES.
        Verknüpfungseintrag anlegen
          READ TABLE T_IDOC_ROLLNO WITH KEY ROLLNO = IDOC_CONTRL-DOCNUM
                                  BINARY SEARCH.
          IF SY-SUBRC = 0.
            RETURN_VARIABLES-DOC_NUMBER = T_IDOC_ROLLNO-ROLLNO.
            RETURN_VARIABLES-WF_PARAM = 'Appl_Objects'.
            APPEND RETURN_VARIABLES.
          ENDIF.
    JH/02.02.98/4.0C  KPr100004993 (Ende)
        ELSE.
          IF IDOC_INDEX_2_SUBRC NE 0.
    Application Log
            PERFORM WRITE_APPL_LOG TABLES IDOC_TRANC
                                          T_MERRDAT
                                          IDOC_STATUS
                                   USING  IDOC_CONTRL
                                          FLAG_ERROR_HAPPENED
                                          NO_APPLICATION_LOG
                                          MASSSAVEINFOS
                                          AL_HANDLES.
          ELSE.
            IDOC_STATUS-MSGID = I_MERRDAT-MSGID.
            IDOC_STATUS-MSGTY = I_MERRDAT-MSGTY.
            IDOC_STATUS-MSGNO = I_MERRDAT-MSGNO.
            IDOC_STATUS-MSGV1 = I_MERRDAT-MSGV1.
            IDOC_STATUS-MSGV2 = I_MERRDAT-MSGV2.
            IDOC_STATUS-MSGV3 = I_MERRDAT-MSGV3.
            IDOC_STATUS-MSGV4 = I_MERRDAT-MSGV4.
            IDOC_STATUS-STATUS = '51'.     "ERROR!
            APPEND IDOC_STATUS.
          ENDIF.
        Fill Return variables
          CLEAR RETURN_VARIABLES.
          RETURN_VARIABLES-DOC_NUMBER = IDOC_CONTRL-DOCNUM.
        return_variables-wf_param = c_wf_par_processed_idocs.
          RETURN_VARIABLES-WF_PARAM = 'Error_IDOCs'.
          APPEND RETURN_VARIABLES.
          WORKFLOW_RESULT = 99999.
        ENDIF.
      APPEND idoc_status.
      ENDLOOP.
      IF NO_APPLICATION_LOG IS INITIAL.
        CALL FUNCTION 'BAL_DB_SAVE'                           "//br99
             EXPORTING
                  I_IN_UPDATE_TASK = ' '
                  I_SAVE_ALL       = ' '
                  I_T_LOG_HANDLE   = AL_HANDLES.
           EXCEPTIONS
                LOG_NOT_FOUND    = 1
                SAVE_NOT_ALLOWED = 2
                NUMBERING_ERROR  = 3
                OTHERS           = 4.
        CALL FUNCTION 'BAL_GLB_MEMORY_REFRESH'                "//br99
             EXPORTING
                I_AUTHORIZATION          =
                  I_REFRESH_ALL            = ' '
                  I_T_LOGS_TO_BE_REFRESHED = AL_HANDLES.
           EXCEPTIONS
                NOT_AUTHORIZED           = 1
                OTHERS                   = 2
      ENDIF.
    ENDFORM.                               " handle_error
    Save, check and activate
    11. Assigning the Inbound Function Module to Basic Type & Message Type
    o     Go to T. Code WE57
    o     Click on change, continue, continue and New Entries Button
    o     Enter the Module as IDOC_INPUT_ZBAPI_STUD_MAS
    o     Type as “F”
    o     Basic Type as ZBAPI_STUD_IDOC
    o     Message Type as ZBAPI_STUD_MAS.
    o     Direction as 2
    o     Save and back
    Now Login in 810 client
    12. Assigning the Inbound Function Module in ALE Table
    o     Go to T. Code BD51
    o     Click on continue, New Entries button
    o     Give the Inbound Function Module IDOC_INPUT_ZBAPI_STUD_MAS
    o     Give Input t. as 0 (zero)
    o     Save and back
    13. Creating Process Code
    o     Go to T. Code WE42
    o     Click on Change, New Entries Button
    o     Give Process Code name as ZSTUD, give Description & Save
    o     Select Processing with ALE Services Radio button
    o     Select Processing by Function Module Radio button
    o     Click the ALE Table (arrow Icon) in Identification
    o     Give the Function Module Name ZIDOC_INPUT_ZBAPI_STUD_MAS
    o     Give maximum number of repeats 0
    o     Save and back, back
    o     Select the process code from the list & click on Logical Messages Icon
    o     Give the Message Type as ZBAPI_STUD_MAS
    o     Save & Back, Save & Back, Save & Back
    14. Changing the Customer Distribution model in Receiving system
    o     Go to T. Code BD64
    o     Click on change and Create model view button
    o     Select the model view & click on Environment -> Generate Partner Profiles
    o     Select Transfer IDOC Immediately and Trigger Immediately radio buttons
    o     Click on Execute
    o     You should get a list in green color which means it executed successfully.
    15. Assigning the Process Code to Message Type in Receiving System
    o     Go to T. Code WE20
    o     Expand Partner Type LS
    o     Select the Partner Profile STUD_S
    o     Double click on Message Type ZBAPI_STUD_MAS in Inbound parmtrs.
    o     Give the Process Code as ZSTUD
    o     Click on Trigger Immediately Radio button
    o     Save & Back
    o     Save & Back
    16. Creating the Selection Program (Outbound Program)
    •     Login in client 800.
    •     Go to T. Code SE38
    •     Create a Report Program as   ZSTUD_SEND with the following code
    REPORT ZSTUD_SEND
           NO STANDARD PAGE HEADING.
    TABLES: ZBAPI_STUD.
    DATA: IT_STUD LIKE ZBAPI_STUD OCCURS 0 WITH HEADER LINE.
    SELECTION-SCREEN:BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-H01.
    SELECT-OPTIONS: S_ROLLNO FOR ZBAPI_STUD-ROLLNO.
    SELECTION-SCREEN SKIP.
    SELECTION-SCREEN:BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-H02.
    PARAMETERS:  P_MESTYP LIKE EDIDC-MESTYP,
                 P_RCVPRN LIKE TBDLST-LOGSYS.
    SELECTION-SCREEN:END OF BLOCK B2.
    SELECTION-SCREEN:END OF BLOCK B1.
    START-OF-SELECTION.
      PERFORM CREATE_STUDENT.
      PERFORM CREATE_IDOC.
    *&      Form  CREATE_STUDENT
          sending student
    FORM CREATE_STUDENT.
    SELECT * FROM ZBAPI_STUD
       INTO TABLE IT_STUD
       WHERE ROLLNO IN S_ROLLNO.
    ENDFORM.                    " CREATE_STUDENT
    *&      Form  CREATE_IDOC
          IDOC Creation
    FORM CREATE_IDOC.
    DATA : IMAS_DATA LIKE EDIDD OCCURS 10 WITH HEADER LINE,
           IMAS_CON LIKE EDIDC OCCURS 10 WITH HEADER LINE,
           ICOM_CON LIKE EDIDC OCCURS 10 WITH HEADER LINE.
    IMAS_CON-RCVPRT = 'LS'.
    IMAS_CON-RCVPRN = P_RCVPRN.
    IMAS_CON-IDOCTP = 'ZBAPI_STUD_IDOC'.
    IMAS_CON-MESTYP = P_MESTYP.
    IMAS_CON-DIRECT = 1.
    APPEND IMAS_CON.
    LOOP AT IT_STUD.
      IMAS_DATA-SEGNAM = 'ZBAPI_STUD_SEG'.
      IMAS_DATA-SDATA = IT_STUD.
      APPEND IMAS_DATA.
    ENDLOOP.
    CALL FUNCTION 'MASTER_IDOC_DISTRIBUTE'
         EXPORTING
              MASTER_IDOC_CONTROL            = IMAS_CON
            OBJ_TYPE                       = ''
            CHNUM                          = ''
         TABLES
              COMMUNICATION_IDOC_CONTROL     = ICOM_CON
              MASTER_IDOC_DATA               = IMAS_DATA
       EXCEPTIONS
            ERROR_IN_IDOC_CONTROL          = 1
            ERROR_WRITING_IDOC_STATUS      = 2
            ERROR_IN_IDOC_DATA             = 3
            SENDING_LOGICAL_SYSTEM_UNKNOWN = 4
            OTHERS                         = 5
    IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
    COMMIT WORK.
    LOOP AT  ICOM_CON.
      WRITE :/ 'IDOC: ', ICOM_CON-DOCNUM, 'CREATED SUCCESSFULLY'.
    ENDLOOP.
    ENDFORM.                    " CREATE_IDOC
    17. Transferring the student records from 800 to 810 client
    •     Execute Report Program   ZSTUD_SEND
    •     Give the Range of Roll Nos to Transfer
    •     Give Message Type as    ZBAPI_STUD_MAS
    •     Give Receiver Logical system as   STUD_R
    •     Execute
    •     You should get the IDOC Number
    •     Take the IDOC Number and go to T. Code WE05 & Execute
    •     In Outbox you can see the IDOC Status
    •     Select the status record in left side window
    •     Double click on the Status record in right side window
    •     You can see the Control Record, Data Record and Status Records for that IDOC
    •     If the ICON is green and the status code is 3, it means the IDOC is passed to PORT Successfully.
    Now Login in 810 client
    •     Go to T. Code WE05 & Execute
    •     You can see the status record in left side window
    •     If the status no is 53 and color is green, it means the IDOC is Posted to Application successfully.
    •     You can see the Log Information by double clicking on the status record in right side window.
    •     Now in left side window, you can see the Control Record, Data Record & Status Record of the IDOC
    •     Now go to T. Code SE16
    •     Give the table name ZBAPI_STUD & press F7
    •     See the contents of the table
    •     The table is updated with the students records transferred from 800 client with our selection program.
    Reward if useful
    Thanks
    Jagadeesh.G

  • Sending change date of BP to external using bapi CRMXIF_partner

    Hi,
    I am using bapi crmxif_partner_save_m01 to send create and change of BP to external system as Idoc. I also need to send change date and user id, if changes are made to bp. but i could't find appropriate fields in bapi. Is there anything with bdoc to send or how is it works.
    Other issue that i have when we receive an idoc from external system we need to send acknowledge to them as a batch job at night thru same interface. how it gona works. Here we are sending idocs and receiving idocs but external sys is non sap ESB.
    one more, when we save BP it should generate idoc thru bdoc and send to external sys using CRMXIF_PATNER_SAVE_M. External sys assign a number for our each bp number and send them back to us thru same interface. I assume same bapi automatically updates IDOC data into bdoc and populates into sap tables. Please correct me if i am wrong.
    Please suggest me.

    Guy&#65292;i don't regard here is anybody wanna read so much code .For more constructive answers, you would distill core question from your program.

  • One to Many Receiver for Same data

    Hi Experts,
    I have a scenario, where I need to send the same data to another third party from R/3.
    For e.g. In my existing setup, I am already sending the vendor details from R/3 to third part system say X.
    My requirement is to send the same data to another third party system Y.
    Could I achieve this, by creating another Comm Channel, Receiver Agreement and etc???
    If this is posiible, what steps I need to follow to acheive this and how does XI work in this scenario?? Please explain in detail.
    I mean, I need to understand the concept how this works, when the request reach Xi from R/3 how does it determine to send out the data to multiple systems??

    HI Kumar,
    You can configure it as for a single IDOC coming from an R/3 or ECC system on a single Configuration Scenario placing all your receiver determination for a certain IDOC type/s from a certain SAP System.
    CS_SAPXXX
    -Receiver Determination/s-
    SAPXXX | IDocType_A
    SAPXXX | IDocType_B
    Under your Receiver Determination you can have a condition by determining you RCVPRN (from partner profile in SAP)
    p1:...../RCVPRN = PartnerA (then this will be assigned to Party_A, service HTTP_PartyA)
    p1:...../RCVPRN = PartnerB (then this will be assigned to Party_B, service FTP_PartyB)
    etc etc
    Then assign your condition to a specific Party and its component (service)
    then you can create new CS (Configuration Scenario) for your specific Partner
    CS_PartnerA
    Party: Party_A
    Service: HTTP_PartyA
    CS_PartnerB
    Party: Party_B
    Service: FTP_PartyA
    Everything follows on configuration. Creating new CS per party might be a good idea so you can easily segregate configurations per partners.
    Hope it helps.
    Cheers,
    R-jay

Maybe you are looking for

  • Need someone with experience using Google fonts!

    Doing my first site using Google fonts... love it! BUT I have a problem! Since I'm using a condensed Google font, when I'm in "split" view in Dreamweaver... Dreamweaver doesn't actually show the font - have to view it on server since it has to locate

  • Entering partner function code in Delivery after PGI

    Hi all,        i have a requirement where in after  PGI of delivery i need to change or enter a partner fucntion -contractor code number in VL02N.please help me. Regards Prasad

  • Does anyone know where I can get iPhone fixed in South Australia

    Seen as I cant get my iPhone restored/reset I have no choice but to take it somewhere to get fixed or replaced.  Apple dont appear to have a service centre or store in Adelaide or SA.  There's planty of Apple Mac places, but none of them indicate the

  • FRM-92050 - After patch 10

    I have applied patch 10 to my 9ias web server and all the services were started back up successfully (forms server, http and reports server). Now when I attempt to access the forms via the web I get the FRM-92050 error. Looking at the config files I

  • Workgroup needs to access same catalog

    We just purchased and installed six Lightroom licenses on computers in our research lab.  Several of us work on the same project, using photos that reside on our network drive.  I have sadly just discovered that catalogs cannot live on the network dr