Types of method calls in OO ABAP
Hai all,
Is there call by value and call by reference is there in OO ABAP or not.
Regards,
Sreevathsava.G
Moderator message: please search for available information before asking.
locked by: Thomas Zloch on Aug 12, 2010 2:35 PM
Method parameters can be passed by either reference or value. In SE24 this is specified via a checkbox against the parameter.
The exception is RETURNING' parameters - these can only be passed by value.
Similar Messages
-
Combine standard task (ABAP method call) and additional UWL Action Handlers
Hi, i have defined a task with an asynchronous ABAP method call and a terminating event which i want to use "as is" in the universal worklist, that means that the standard action has to be the ABAP method call defined for the task.
In addition to that i want to add an extra button to the workitem view in the worklist which opens a web dynpro application. The web dynpro needs a parameter from the workitem container. Opening the web dynpro is not required for completing the task, so i do not consider using secondary methods.
I created an UWLConfiguration for the task type without defining the defaultAction attribute, since defaultAction should not be overwritten. I wanted to use SAPWebDynproABAPLauncher to generate the button since i can easily include values from the workitem container in the call.
When executing a workitem from the worklist the ABAP method call is not performed, instead a window opens which just displays the workitem. The button to web dynpro is generated and works fine.
Does anyone have a clue how i can use UWL to define an additional button with SAPWebDynproABAPLauncher without overwriting the standard task definition?
My definition:
<ItemTypes>
<ItemType
name="uwl.task.webflow.TS95100103"
connector="WebFlowConnector"
defaultView="DefaultView">
<ItemTypeCriteria
systemId="ED1CLNT100"
externalType="TS95100103"
connector="WebFlowConnector"/>
<CustomAttributes>
<CustomAttributeSource
id="WEBFLOW_CONTAINER"
objectIdHolder="externalObjectId"
objectType="WebFlowContainer"
cacheValidity="final">
<Attribute
name="HROBJECT_OBJEKTID"
type="string"
displayName="HROBJECT_OBJEKTID"/>
</CustomAttributeSource>
</CustomAttributes>
<Actions>
<Action
name="launchWebDynPro"
groupAction=""
handler="SAPWebDynproABAPLauncher"
returnToDetailViewAllowed="yes"
launchInNewWindow="yes"
launchNewWindowFeatures="resizable=yes,scrollbars=yes,
status=yes,toolbar=no,menubar=no,
location=no,directories=no">
<Properties>
<Property
name="WebDynproApplication" value="hr01_app"/>
<Property
name="newWindowFeatures"
value="resizable=yes,scrollbars=yes,status=yes,
toolbar=no,menubar=no,location=no,directories=no"/>
<Property
name="DynamicParameter"
value="candidacy_id=${item.HROBJECT_OBJEKTID}
&from_workflow=X"/>
<Property
name="openInNewWindow" value="yes"/>
<Property
name="System" value="SYSTEM_ALIAS_ERP"/>
<Property
name="WebDynproNamespace" value="hr01"/>
</Properties>
<Descriptions default="Show"/>
</Action>
</Actions>
</ItemType>
</ItemTypes>
Thank you very much, best regards, Martin
Edited by: Martin Sommer on Dec 1, 2008 5:51 PMfound a solution with transaction launcher and custom transaction
-
Type conflict at call of a method
HI Guru's,
My name is Sreekar, i am working on FS-RI Workflow. i want to trigger a workflow when status change in standard screen after pressing save button my workflow will trigger.my abap code is follows.
TYPES: BEGIN OF TY_LT_CONTAINER,
VTGNR TYPE /MSG/RVTG-VTGNR,
STATUS TYPE /MSG/RVTG-STATUS,
END OF TY_LT_CONTAINER.
Data: lt_container TYPE TABLE OF ty_lt_container,
WA_CONTAINER TYPE TY_LT_CONTAINER,
ls_container type TABLE OF SWCONT,
wa_ls_container type SWCONT,
ls_new_status TYPE SWR_WISTAT,
ls_wi_id TYPE SWR_STRUCT-WORKITEMID,
lv_sy-subrc TYPE sy-subrc.
* WA_CONTAINER TYPE Lt_CONTAINER.
if Zstatus NE /MSG/RZ_VTGPER-STATUS.
BREAK-POINT.
* WA_ls_container-ELEMENT = 'Treaty'.
* WA_ls_CONTAINER-VALUE = /MSG/RZ_VTGPER-VTGNR.
WA_ls_container-ELEMENT = /MSG/RZ_VTGPER-VTGNR.
WA_ls_CONTAINER-VALUE = /MSG/RZ_VTGPER-STATUS.
APPEND WA_ls_CONTAINER TO Ls_CONTAINER.
* wa_ls_container-element =
* CLEAR WA_CONTAINER.
CALL FUNCTION 'SAP_WAPI_START_WORKFLOW'
EXPORTING
TASK = 'WS90000026'
LANGUAGE = SY-LANGU
DO_COMMIT = 'X'
USER = SY-UNAME
* START_ASYNCHRONOUS = ' '
* DESIRED_START_DATE =
* DESIRED_START_TIME =
* DESIRED_START_ZONLO = SY-ZONLO
* IFS_XML_CONTAINER =
IMPORTING
* RETURN_CODE = lv_sy-subrc
WORKITEM_ID = ls_wi_id
NEW_STATUS = ls_new_status
TABLES
INPUT_CONTAINER = ls_container.
* MESSAGE_LINES =
* MESSAGE_STRUCT =
* AGENTS =
IF SY-SUBRC NE 0.
MESSAGE ID 'AT' TYPE 'E' NUMBER '104'. " workflow not trigger
ELSE.
MESSAGE ID 'AT' TYPE 'E' NUMBER '103'. " workflow triggered
endif.
endif.
this is my coding. when i am calling my standard screen with transaction code and i changed the status and after when i press save button i am getting dump
type conflict at call of a method.
Error analysis:
An exception occurred that is explained in detail below.
The exception, which is assigned to class 'CX_SY_DYN_CALL_ILLEGAL_TYPE', was
not caught in
procedure "SAP_WAPI_START_WORKFLOW" "(FUNCTION)", nor was it propagated by a
RAISING clause.
Since the caller of the procedure could not have anticipated that the
exception would occur, the current program is terminated.
The reason for the exception is:
The call of the method "IF_SWF_CNT_CONVERSION_SERVICE~IMPORT_FROM_SIMPLE_CONTAI
NER" of the class "CL_SWF_CNT_CONVERSION_SERVICE" is incorrect. It was tried
to transfer a non-compatible variable to the formal parameter "VALUES".
Please help me to get out from this issue.Hi Sreekar,
The table ls_container should be of type SWR_CONT & not SWCONT.
ls_container type TABLE OF SWCONT, " Change this to
ls_container type TABLE OF SWR_CONT, "This is the correct type
Best regards,
Prashant Patil -
Type conflict during dynamic method call.
While executing the following program I get the error "Type conflict during dynamic method call.":
DATA: container_r TYPE REF TO object,
grid_r TYPE REF TO object,
itab_saplane TYPE TABLE OF saplane.
* IMPORTANT NOTE: class names must be in UPPER CASE
DATA: str_cnt TYPE seoclsname VALUE 'CL_GUI_CUSTOM_CONTAINER',
str_gui TYPE seoclsname VALUE 'CL_GUI_ALV_GRID',
meth_name TYPE STRING VALUE 'SET_TABLE_FOR_FIRST_DISPLAY'.
TYPE-POOLS abap.
DATA: ptab TYPE abap_parmbind_tab,
wa_ptab LIKE LINE OF ptab,
ref TYPE REF TO data.
CREATE OBJECT container_r TYPE (str_cnt)
EXPORTING container_name = 'CUSTOM_CONTROL1'. " Name of the custom control area (UC!)
* Construct parameter itab
GET REFERENCE OF container_r INTO ref.
wa_ptab-name = 'I_PARENT'. " Must be upper-case
wa_ptab-value = ref.
INSERT wa_ptab INTO TABLE ptab.
* EXPORTING i_parent = container_r.
CREATE OBJECT grid_r TYPE (str_gui)
PARAMETER-TABLE ptab.
SELECT * FROM saplane INTO CORRESPONDING FIELDS OF TABLE itab_saplane.
* Cannot call set_table_for_first_display directly...
CALL METHOD grid_r->(meth_name)
EXPORTING I_STRUCTURE_NAME = 'SAPLANE' " Type of the rows in the internal table (UC!)
CHANGING IT_OUTTAB = itab_saplane. " The internal table itself
CALL SCREEN 100.
Any help would be appreciated!Hi ...
Apologies ... for confusion ... actually both are required ...
the type 'E' as well as CL_GUI_CONTAINER.
The below code worked for me ...
check out how I cast it to the parent class type ...
DATA : lv_container TYPE seoclsname VALUE 'CL_GUI_CUSTOM_CONTAINER',
lv_control TYPE seoclsname VALUE 'CL_GUI_ALV_GRID',
lv_method TYPE string VALUE 'SET_TABLE_FOR_FIRST_DISPLAY',
lt_par_tab TYPE abap_parmbind_tab,
ls_param LIKE LINE OF lt_par_tab,
lref_cont TYPE REF TO cl_gui_container,
lv_data TYPE REF TO data.
CREATE OBJECT lref_container
TYPE
(lv_container)
EXPORTING
container_name = 'ALV_AREA'.
ls_param-name = 'I_PARENT'.
ls_param-kind = 'E'.
lref_cont ?= lref_container.
GET REFERENCE OF lref_cont INTO lv_data.
ls_param-value = lv_data.
INSERT ls_param INTO TABLE lt_par_tab.
** Now create ALV Control.
CREATE OBJECT lref_alv_ctrl
TYPE
(lv_control)
PARAMETER-TABLE
lt_par_tab.
** Set table for 1st display
DATA : lv.
lv = lref_alv_ctrl->mc_fc_print.
CALL METHOD lref_alv_ctrl->(lv_method)
EXPORTING
i_structure_name = 'T001'
CHANGING
it_outtab = lt_company.
Cheers
Edited by: Varun Verma on Aug 12, 2008 4:19 PM -
Is it possible to call a class method using pattern in ABAP editor.
Hi,
Is it possible to call a class method using pattern in ABAP editor.
Thank U for Ur time.
Cheers,
SamYes,
Click patterns.
Then choose Abap objects patterns.
Click on the Tick
It will give a new screen
Here Give the name of the class first.
Then the object (instance of the calss)
And finally the method ..
it will give you the pattern
Hope this helps. -
Calling BSP from abap program by interfacing EP
Dear Friends...
I am cslling a BSP... from an ABAP program... for that I have used this class and also a function module to ckeck.. actually from the abap program it invoks the BSP page very nicely and as my logic for invoking the BSP is a part of the Business Object and it is associated with the Enterprise portal so... when i reach the ep and trigger that business object to instantiate the BSP page from my calling logic of abap... it goes to the ITS and port 80 or something and didnt produce the BSP.. and only the blank screen was there...kindly help me how i am supposed to instantiate the BSP from properly from ABAP by interfacing the EP... my code is given below...
data :
lv_url type string.
concatenate
'http://sapdevbp.sbic.co.za:8041/sap(bD1lbiZjPTIwMA==)'
'/bc/bsp/sap/z_updatemng/bp.htm?bpid=' object-key-businesspartnerid
into lv_url.
call method cl_gui_frontend_services=>execute
exporting
document = lv_url
exceptions
others = 1.
please help....
me...
regards
Naimhi ,
you can try using FM CALL_BROWSER in your report(ABAP code)to call bsp,like
data url(200) type c.
url = 'http://<server>.<domain><port>:'.
concatenate url '/sap/bc/bsp/sap/' into url.
concatenate url 'your_bsp_app_name/your_start_page.bsp' into url.
concatenate url '?sap-user=<userid>' into url.
concatenate url '&sap-password=<passowrd>' into url.
CALL FUNCTION 'CALL_BROWSER'
EXPORTING
URL = url
WINDOW_NAME = ' '
NEW_WINDOW = ' '
BROWSER_TYPE =
CONTEXTSTRING =
EXCEPTIONS
FRONTEND_NOT_SUPPORTED = 1
FRONTEND_ERROR = 2
PROG_NOT_FOUND = 3
NO_BATCH = 4
UNSPECIFIED_ERROR = 5
OTHERS = 6
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
For this to work you have to enable SSO on your server.
you can check if it is enabled or not by runnning the BSP application "SYSTEM" ,page "SSO2TEST.htm" .
Follow the instructions on the page for testing.
This may not be a great way as your userid password are passed via URL,still it works
Cheers! -
Any program for calling bapi from ABAP step by step
any program for calling bapi from ABAP step by step
points will be rewarded,
thank you,
Jagrut BharatKumar ShuklaHi Jagrut,
BAPI stands for Business API(Application Program Interface).
A BAPI is remotely enabled function module ie it can be invoked from remote programs like standalone JAVA programs, web interface etc..
You can make your function module remotely enabled in attributes of Function module but
A BAPI are standard SAP function modules provided by SAP for remote access. Also they are part of Businees Objest Repository(BOR).
BAPI are RFC enabled function modules. the difference between RFc and BAPI are business objects. You create business objects and those are then registered in your BOR (Business Object Repository) which can be accessed outside the SAP system by using some other applications (Non-SAP) such as VB or JAVA. in this case u only specify the business object and its method from external system in BAPI there is no direct system call. while RFC are direct system call Some BAPIs provide basic functions and can be used for most SAP business object types. These BAPIs should be implemented the same for all business object types. Standardized BAPIs are easier to use and prevent users having to deal with a number of different BAPIs. Whenever possible, a standardized BAPI must be used in preference to an individual BAPI.
The following standardized BAPIs are provided:
Reading instances of SAP business objects
GetList ( ) With the BAPI GetList you can select a range of object key values, for example, company codes and material numbers.
The BAPI GetList() is a class method.
GetDetail() With the BAPI GetDetail() the details of an instance of a business object type are retrieved and returned to the calling program. The instance is identified via its key. The BAPI GetDetail() is an instance method. BAPIs that can create, change or delete instances of a business object type
The following BAPIs of the same object type have to be programmed so that they can be called several times within one transaction. For example, if, after sales order 1 has been created, a second sales order 2 is created in the same transaction, the second BAPI call must not affect the consistency of the sales order 2. After completing the transaction with a COMMIT WORK, both the orders are saved consistently in the database.
Create( ) and CreateFromData! ( )
The BAPIs Create() and CreateFromData() create an instance of an SAP business object type, for example, a purchase order. These BAPIs are class methods.
Change( )
The BAPI Change() changes an existing instance of an SAP business object type, for example, a purchase order. The BAPI Change () is an instance method.
Delete( ) and Undelete( ) The BAPI Delete() deletes an instance of an SAP business object type from the database or sets a deletion flag.
The BAPI Undelete() removes a deletion flag. These BAPIs are instance methods.
Cancel ( ) Unlike the BAPI Delete(), the BAPI Cancel() cancels an instance of a business object type. The instance to be cancelled remains in the database and an additional instance is created and this is the one that is actually canceled. The Cancel() BAPI is an instance method.
Add<subobject> ( ) and Remove<subobject> ( ) The BAPI Add<subobject> adds a subobject to an existing object inst! ance and the BAPI and Remove<subobject> removes a subobject from an object instance. These BAPIs are instance methods.
ex BAPI:
API_SALESORDER_CREATEFROMDAT1
BAPI_SALESORDER_CREATEFROMDAT2
You can get good help form the following links,
BAPI-step by step
http://www.sapgenie.com/abap/bapi/example.htm
list of all bapis
http://www.planetsap.com/LIST_ALL_BAPIs.htm
for BAPI's
http://www.sappoint.com/abap/bapiintro.pdf
http://www.sappoint.com/abap/bapiprg.pdf
http://www.sappoint.com/abap/bapiactx.pdf
http://www.sappoint.com/abap/bapilst.pdf
http://www.sappoint.com/abap/bapiexer.pdf
http://service.sap.com/ale
http://service.sap.com/bapi
http://help.sap.com/printdocu/core/Print46c/en/data/pdf/BCMIDAPII/CABFAAPIINTRO.pdf
http://help.sap.com/printdocu/core/Print46c/en/data/pdf/CABFABAPIREF/CABFABAPIPG.pdf
http://help.sap.com/printdocu/core/Print46c/en/data/pdf/BCFESDE8/BCFESDE8.pdf
http://www.planetsap.com/Bapi_main_page.htm
http://www.topxml.com/sap/sap_idoc_xml.asp
http://www.sapdevelopment.co.uk/
http://www.sapdevelopment.co.uk/java/jco/bapi_jco.pdf
Also refer to the following links..
www.sappoint.com/abap/bapiintro.pdf
www.sap-img.com/bapi.htm
www.sap-img.com/abap/bapi-conventions.htm
www.planetsap.com/Bapi_main_page.htm
www.sapgenie.com/abap/bapi/index.htm
Checkout !!
http://searchsap.techtarget.com/originalContent/0,289142,sid21_gci948835,00.html
http://techrepublic.com.com/5100-6329-1051160.html#
http://www.sap-img.com/bapi.htm
http://www.sap-img.com/abap/bapi-conventions.htm
http://www.sappoint.com/abap/bapiintro.pdf
http://sap-img.com/bapi.htm
<b>EG::</b>
<b>Here is the step by step procedure for creating BAPIs.</b>
There are 5 different steps in BAPI.
- Create BAPI Structure
- Create BAPI Function Module or API Method.
- Create BAPI object
- Release BAPI Function Module.
- Release BAPI object.
Step1. Creating BAPI Structure:
- Go to <SE11>.
- Select Data Type & Enter a name.
- Click on Create.
- Note: Always BAPI should be in a development class with request number (Not Local Object).
- Select Structure & hit ENTER.
- Enter the fields from your database. Make sure that the first field is the Primary Key Field.
- Then SAVE & ACTIVATE.
Step 2. Creating BAPI module:
- Enter TR.CODE <SE37>.
- Before entering any thing, from the present screen that you are in, select the menu
Goto -> Function Groups -> Create Group.
Enter a name (Note: This name Must start with ZBAPI)
Let this screen be as it is and open another window and there, enter TR.CODE <SE80).
Click on the Third ICON that says Inactive Objects.
Select the group that you just created and click on Activate.
Notice that the group you created will disappear from the list of inactive objects.
- Go back to ><SE37> screen and enter a name and hit <ENTER>. Then enter the group name that you just created and activated.
NOTE: When you release a function module the respective group will be attached to that particular application. It cannot be used for any other application. NEVER include an already existing group that is attached to another module.
Now click on the first Tab that says [ATTRIBUTES] and select the radio button that says remote-enabled module since we will be accessing this from any external system.
Then click on the second tab that says [IMPORT].
Enter a PARAMETER NAME, TYPE and the structure you created in the first step. Also select the check box Pa. All remotely enabled functional modules MUST be Pa enabled, where Pa means Passed by Value and if you dont select Pa, then that means it will be passed by reference..
Then click on tab that says [EXPORT].
Enter the following as is in the first three fields
RETURN TYPE BAPIRETURN (These 3 field values are always same)
Here also select Pa meaning Pass by value.
Note: BAPIRETURN contains structure with message fields.
Then SAVE and ACTIVATE.
Step 3. Creating BAPI object:
- Enter Tr.Code <SWO1> (Note. It is letter O and not Zero).
- Enter a name and then click on create. Enter details.
NOTE: Make sure that that Object Type and Program name are SAME.
- Enter Application M, if you are using standard table Mara. If you are using your own database then select Z at the bottom.
- Then hit <ENTER>.
- Now we have to add Methods. High light METHODS and then select the following from the menu:
Goto Utilities -> API Methods -> Add Methods.
- Enter function Module name and hit <ENTER>.
- Select the second FORWARD ARROW button (>)to go to next step.
- Check if every thing looks ok and again click on FORWARD ARROW button (>).
- Then select YES and click on <SAVE>.
- Now on a different screen goto TR.CODE <SE37>. Enter Function Module name and select from the top menu Function Module -> Release -> Release.
- Goback to TR.CODE <SWO1>.
Here select the menu combination shown below in the same order.
- Edit -> Change Release Status -> Object Type Component -> To Implemented.
- Edit -> Change Release Status -> Object Type Component -> To Released.
- Edit -> Change Release Status -> Object Type -> To Implemented.
- Edit -> Change Release Status -> Object Type -> To Released.
- Then click on <SAVE>.
- Then click on Generate Button (4th button from left hand side looks like spinning wheel).
- Then Click on the button that says PROGRAM to see the source code.
To check if this is present in work flow goto TR.CODE <BAPI>.
Here it shows business object repository.
- First click on the middle button and then select ALL and hit ENTER.
- Goto tab [ALPHABETICAL] and look for the object that you created. This shows that the BAPI object has been created successfully
<b>Reward pts if found usefull :)</b>
regards
Sathish -
Using a dynamic variable in the Import command of a Method call
Hi,
I am trying to make a Method call fully dynamic.
I have found out how to make the Method name dynamic, but I am having trouble figuring out how to make the Importing statement dynamic.
in my code below:
CALL METHOD o_main->(v_call)
IMPORTING
it_ekko = i_ekko.
I would like to know if it's possible to make both "it_ekko" AND "i_ekko" dynamic so I can use this same call for various tables.
Hope that makes sense...thanks for your help.
AndyHi Andrew,
The method call is fully dynamic; not only the parameters can be specified dynamically but also the method name.
This is a help extract:
DATA: line TYPE c LENGTH 80,
text_tab LIKE STANDARD TABLE OF line,
filename TYPE string,
filetype TYPE c LENGTH 10,
fleng TYPE i.
DATA: meth TYPE string,
class TYPE string,
ptab TYPE abap_parmbind_tab,
ptab_line TYPE abap_parmbind,
etab TYPE abap_excpbind_tab,
etab_line TYPE abap_excpbind.
DATA: exc_ref TYPE REF TO cx_sy_dyn_call_error,
exc_text TYPE string.
class = 'CL_GUI_FRONTEND_SERVICES'.
meth = 'GUI_DOWNLOAD'.
filename = 'c:\temp\text.txt'.
filetype = 'ASC'.
ptab_line-name = 'FILENAME'.
ptab_line-kind = cl_abap_objectdescr=>exporting.
GET REFERENCE OF filename INTO ptab_line-value.
INSERT ptab_line INTO TABLE ptab.
ptab_line-name = 'FILETYPE'.
ptab_line-kind = cl_abap_objectdescr=>exporting.
GET REFERENCE OF filetype INTO ptab_line-value.
INSERT ptab_line INTO TABLE ptab.
ptab_line-name = 'DATA_TAB'.
ptab_line-kind = cl_abap_objectdescr=>changing.
GET REFERENCE OF text_tab INTO ptab_line-value.
INSERT ptab_line INTO TABLE ptab.
ptab_line-name = 'FILELENGTH'.
ptab_line-kind = cl_abap_objectdescr=>importing.
GET REFERENCE OF fleng INTO ptab_line-value.
INSERT ptab_line INTO TABLE ptab.
etab_line-name = 'OTHERS'.
etab_line-value = 4.
INSERT etab_line INTO TABLE etab.
TRY.
CALL METHOD (class)=>(meth)
PARAMETER-TABLE
ptab
EXCEPTION-TABLE
etab.
CASE sy-subrc.
WHEN 1.
ENDCASE.
CATCH cx_sy_dyn_call_error INTO exc_ref.
exc_text = exc_ref->get_text( ).
MESSAGE exc_text TYPE 'I'.
ENDTRY.
BR,
Valentin -
Type conflict when calling a function module (field length)
Dear All,
I am getting this following error while executing: Type conflict when calling a function module (field length)
This is piece of coding i have writern in my action button.
method SEARCH_MATERIAL .
data:
node_mat_input TYPE REF TO if_wd_context_node,
node_mat_output TYPE REF TO if_wd_context_node,
material TYPE BAPIMATDET-MATERIAL,
itab TYPE TABLE OF BAPIMATDOA.
node_mat_input = wd_context->get_child_node( 'NODE_MAT_INPUT' ).
node_mat_output = wd_context->get_child_node( 'NODE_MAT_OUTPUT' ).
node_mat_input->get_attribute( EXPORTING name = 'MATERIAL'
IMPORTING value = material ).
CALL FUNCTION 'BAPI_MATERIAL_GET_DETAIL'
EXPORTING
material = material
PLANT = plant
VALUATIONAREA =
VALUATIONTYPE =
MATERIAL_EVG =
IMPORTING
MATERIAL_GENERAL_DATA = itab
RETURN =
MATERIALPLANTDATA =
MATERIALVALUATIONDATA =
node_mat_output->bind_table( itab ).
endmethod.
Attributes are:
Node name = INPUT its structure is BAPIMATDET
INPUT attributes = MATERIAL of type BAPIMATDET-MATERIAL
Thanks,
Gopi.Hi Amit,
I have used service call to fetch records from that bapi..
The following is the code generated by service call:-
METHOD execute_bapi_material_get_deta .
declarations for context navigation
DATA:
node_bapi_material_get_de TYPE REF TO if_wd_context_node,
node_exporting TYPE REF TO if_wd_context_node,
node_material_general_dat TYPE REF TO if_wd_context_node,
node_importing TYPE REF TO if_wd_context_node,
lri_element TYPE REF TO if_wd_context_element.
declarations for fuba parameters
data:
stru_c_material_general_dat TYPE if_componentcontroller=>element_material_general_dat.
DATA:
attr_material TYPE bapimatdet-material,
attr_plant TYPE bapimatall-plant.
get all involved child nodes
node_bapi_material_get_de = wd_context->get_child_node( `BAPI_MATERIAL_GET_DE` ).
node_exporting = node_bapi_material_get_de->get_child_node( `EXPORTING` ).
node_material_general_dat = node_exporting->get_child_node( `MATERIAL_GENERAL_DAT` ).
node_importing = node_bapi_material_get_de->get_child_node( `IMPORTING` ).
get input from context
node_importing->get_attribute( EXPORTING name = `MATERIAL`
IMPORTING value = attr_material ).
node_importing->get_attribute( EXPORTING name = `PLANT`
IMPORTING value = attr_plant ).
the invocation - errors are always fatal !!!
CALL FUNCTION 'BAPI_MATERIAL_GET_DETAIL'
EXPORTING
material = attr_material
plant = attr_plant
" valuationarea = wd_This->Valuationarea
" valuationtype = wd_This->Valuationtype
" material_Evg = wd_This->Material_Evg
IMPORTING
material_general_data = stru_c_material_general_dat
" return = wd_This->Return
" materialplantdata = wd_This->Materialplantdata
" materialvaluationdata = wd_This->Materialvaluationdat
node_material_general_dat->bind_structure( stru_c_material_general_dat[] ).
ENDMETHOD.
but the problem is I am getting the following error while compiling...
" stru_c_materialplantdata " is not an internal table - the " OCCOURS n" specification is missing.
Thanks,
Gopi.
Edited by: Yegalaivan on Nov 18, 2009 8:30 AM -
ERROR: -Type conflict when calling a function module
hi to all,
when iam executing the program in browser Type conflict when calling a function module error is showing, i have bind all the attribute correctly still iam getting error, WHEN I CLICK ON THE SEARCH BUTTON DATA IS NOT COMING TO MY TABLE ITAB1 plz help me....
DATA:
NODE_IP_SELECTION TYPE REF TO IF_WD_CONTEXT_NODE,
ELEM_IP_SELECTION TYPE REF TO IF_WD_CONTEXT_ELEMENT,
STRU_IP_SELECTION TYPE IF_PLANNING_HISTORY=>ELEMENT_IP_SELECTION ,
ITAB TYPE TABLE OF ZSL_PL_UPDATE1,
WA TYPE ZSL_PL_UPDATE1.
navigate from <CONTEXT> to <IP_SELECTION> via lead selection
NODE_IP_SELECTION = WD_CONTEXT->GET_CHILD_NODE( NAME = `IP_SELECTION` ).
get element via lead selection
ELEM_IP_SELECTION = NODE_IP_SELECTION->GET_ELEMENT( ).
get all declared attributes
ELEM_IP_SELECTION->GET_STATIC_ATTRIBUTES(
IMPORTING
STATIC_ATTRIBUTES = STRU_IP_SELECTION ).
CALL FUNCTION 'ZBAPI_PL_UPDATE'
EXPORTING
GV_LIFNR = STRU_IP_SELECTION-LIFNR
GV_MATNR = STRU_IP_SELECTION-LIFNR
GV_GJAHR = ' '
GV_WEEK_LOW = STRU_IP_SELECTION-FROM_WEEK
GV_WEEK_HIGH = STRU_IP_SELECTION-TO_WEEK
IMPORTING
RETURN =
TABLES
GT_PL_UPDATE = ITAB
DATA:
NODE_PLANN_NODE TYPE REF TO IF_WD_CONTEXT_NODE,
ELEM_PLANN_NODE TYPE REF TO IF_WD_CONTEXT_ELEMENT,
STRU_PLANN_NODE TYPE IF_PLANNING_HISTORY=>ELEMENT_PLANN_NODE,
WA1 TYPE IF_PLANNING_HISTORY=>ELEMENT_PLANN_NODE,
ITAB1 TYPE TABLE OF IF_PLANNING_HISTORY=>ELEMENT_PLANN_NODE.
LOOP AT ITAB INTO WA.
MOVE-CORRESPONDING WA TO WA1.
APPEND WA1 TO ITAB1.
ENDLOOP.
navigate from <CONTEXT> to <PLANN_NODE> via lead selection
NODE_PLANN_NODE = WD_CONTEXT->GET_CHILD_NODE( NAME = `PLANN_NODE` ).
CALL METHOD NODE_PLANN_NODE->BIND_TABLE
EXPORTING
NEW_ITEMS = ITAB1
SET_INITIAL_ELEMENTS = ABAP_TRUE
INDEX =
ENDMETHOD.CALL FUNCTION 'ZBAPI_PL_UPDATE'
EXPORTING
GV_LIFNR = STRU_IP_SELECTION-LIFNR
GV_MATNR = STRU_IP_SELECTION-LIFNR
GV_GJAHR = ' '
GV_WEEK_LOW = STRU_IP_SELECTION-FROM_WEEK
GV_WEEK_HIGH = STRU_IP_SELECTION-TO_WEEK
IMPORTING
RETURN =
TABLES
GT_PL_UPDATE = ITAB
Problem is here
check out the type GV_GJAHR whether it accepts string type.
thanks
sarbjeet singh -
Approximate operator and recursive call function in abap
Dear expert,
Please give me an example about Approximate operator and recursive call function in abap
thanks so muchHi
About Approximate operator, you can go to tcode 'ABAPDOCU', searching CO,CN,CA etc...each of them have example there.
And recursive function,
Say here is a FM,
FUNCTION recursive_get_number.
*import im_num type i.
*export ex_num type i.
ex_num = im_num + 1.
IF ex_num GE 100.
EXIT.
ELSE.
CALL FUNCTION recursive_get_number
EXPORTING
im_num = ex_num
IMPORTING
ex_num = ex_num.
ENDIF.
ENDFUNCTION.
When you call this function from outside with importing parameter '1', then will return you 100.
regards,
Archer. -
How do we call smartforms in abap program or web services
how do we call smartforms in abap program or web services
How many types of smartforms are there?
points will be rewardedHi
See this sample program
Using the fun module smartform is called from the program
Calling SMARTFORMS from your ABAP program
REPORT ZSMARTFORM.
Calling SMARTFORMS from your ABAP program.
Collecting all the table data in your program, and pass once to SMARTFORMS
SMARTFORMS
Declare your table type in :-
Global Settings -> Form Interface
Global Definintions -> Global Data
Main Window -> Table -> DATA
http://sapr3.tripod.com
TABLES: MKPF.
DATA: FM_NAME TYPE RS38L_FNAM.
DATA: BEGIN OF INT_MKPF OCCURS 0.
INCLUDE STRUCTURE MKPF.
DATA: END OF INT_MKPF.
SELECT-OPTIONS S_MBLNR FOR MKPF-MBLNR MEMORY ID 001.
SELECT * FROM MKPF WHERE MBLNR IN S_MBLNR.
MOVE-CORRESPONDING MKPF TO INT_MKPF.
APPEND INT_MKPF.
ENDSELECT.
At the end of your program.
Passing data to SMARTFORMS
<b>call function 'SSF_FUNCTION_MODULE_NAME'
exporting
formname = 'ZSMARTFORM'</b>
VARIANT = ' '
DIRECT_CALL = ' '
IMPORTING
FM_NAME = FM_NAME
EXCEPTIONS
NO_FORM = 1
NO_FUNCTION_MODULE = 2
OTHERS = 3.
if sy-subrc <> 0.
WRITE: / 'ERROR 1'.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
endif.
call function <b>FM_NAME</b>
EXPORTING
ARCHIVE_INDEX =
ARCHIVE_INDEX_TAB =
ARCHIVE_PARAMETERS =
CONTROL_PARAMETERS =
MAIL_APPL_OBJ =
MAIL_RECIPIENT =
MAIL_SENDER =
OUTPUT_OPTIONS =
USER_SETTINGS = 'X'
IMPORTING
DOCUMENT_OUTPUT_INFO =
JOB_OUTPUT_INFO =
JOB_OUTPUT_OPTIONS =
TABLES
GS_MKPF = INT_MKPF
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELED = 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.
<b>Reward points for useful Answers</b>
Regards
Anji -
Code to call url in abap program
code to call url in abap program using cl_http requests and save the outcome to a location in a file
See the below program
REPORT zbrowser .
TABLES : sscrfields.
INCLUDE .
CONSTANTS: htmlcntl_eventid_on_navigate TYPE i VALUE 1.
CONSTANTS: htmlcntl_eventid_navigate_com TYPE i VALUE 2.
DATA : h_html_ctrl TYPE cntl_handle,
repid TYPE sy-repid,
dynnr TYPE sy-dynnr,
cmd TYPE sy-ucomm,
flag,disp.
DATA : it_exclude LIKE TABLE OF rsexfcode WITH HEADER LINE.
SELECTION-SCREEN : FUNCTION KEY 1,
FUNCTION KEY 2,
FUNCTION KEY 3,
FUNCTION KEY 4,
FUNCTION KEY 5.
General Browser to View
Files/Pictures & WebPages
© 2005 SAP AG 2
SELECTION-SCREEN COMMENT 45(50) comment1.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 2(28) comment2 FOR FIELD url.
SELECTION-SCREEN POSITION 31.
PARAMETERS : url(1064) LOWER CASE .
SELECTION-SCREEN PUSHBUTTON 79(4) open USER-COMMAND open.
SELECTION-SCREEN END OF LINE.
INITIALIZATION.
comment1 = 'ABAP INTERNET EXPLORER'.
comment2 = 'Enter URL/Filename To Open :'.
open = icon_transfer .
sscrfields-functxt_05 = icon_sap.
sscrfields-functxt_04 = icon_booking_stop.
sscrfields-functxt_03 = icon_refresh.
sscrfields-functxt_02 = icon_arrow_right.
sscrfields-functxt_01 = icon_arrow_left.
repid = sy-repid.
dynnr = '1000'.
it_exclude-fcode = 'ONLI'.
APPEND it_exclude.
it_exclude-fcode = 'INFO'.
APPEND it_exclude.
*Changing GUI status
CALL FUNCTION 'RS_SET_SELSCREEN_STATUS'
EXPORTING
p_status = sy-pfkey
p_program = repid
TABLES
p_exclude = it_exclude.
CALL FUNCTION 'CONTROL_INIT' .
IF sy-subrc <> 0.
EXIT.
ENDIF.
CALL FUNCTION 'HTMLCNTL_CREATE'
EXPORTING
owner_repid = repid
link_repid = repid
dynnr = dynnr
handle = h_html_ctrl
EXCEPTIONS
control_install_error = 1
create_error = 2
General Browser to View
Files/Pictures & WebPages
© 2005 SAP AG 3
OTHERS = 3
IF sy-subrc <> 0.
EXIT.
ENDIF.
CALL FUNCTION 'HTMLCNTL_INIT'
EXPORTING
h_control = h_html_ctrl
left = 1
top = 2
width = 143
height = 37
register_event_on_navigate = 'X'
cb_form_navigate_complete = 'ON_CONTROL_EVENT'
EXCEPTIONS
cntl_system_error = 1
cntl_error = 2
dp_create_error = 3
dp_install_error = 4
dp_error = 5
create_browser_error = 6
init_error = 7
OTHERS = 8
IF sy-subrc <> 0.
EXIT.
ENDIF.
CALL FUNCTION 'CONTROL_FLUSH'.
AT SELECTION-SCREEN.
cmd = sscrfields-ucomm.
CASE cmd.
WHEN 'OPEN'.
PERFORM load_html_page.
CALL FUNCTION 'CONTROL_FLUSH'.
WHEN 'FC01'. "BACK
CALL FUNCTION 'HTMLCNTL_GO_BACK'
EXPORTING
h_control = h_html_ctrl.
IF sy-subrc <> 0.
EXIT.
ENDIF.
General Browser to View
Files/Pictures & WebPages
© 2005 SAP AG 4
PERFORM get_current_url.
WHEN 'FC02'. "FORWARD
CALL FUNCTION 'HTMLCNTL_GO_FORWARD'
EXPORTING
h_control = h_html_ctrl.
IF sy-subrc <> 0.
EXIT.
ENDIF.
PERFORM get_current_url.
WHEN 'FC03'. "REFRESH
CALL FUNCTION 'HTMLCNTL_DO_REFRESH'
EXPORTING
h_control = h_html_ctrl.
IF sy-subrc <> 0.
EXIT.
ENDIF.
PERFORM get_current_url.
WHEN 'FC04'. "STOP
CALL FUNCTION 'HTMLCNTL_STOP'
EXPORTING
h_control = h_html_ctrl.
IF sy-subrc <> 0.
EXIT.
ENDIF.
WHEN 'FC05'. "GO TO HOME
CALL FUNCTION 'HTMLCNTL_GO_HOME'
EXPORTING
h_control = h_html_ctrl.
IF sy-subrc <> 0.
EXIT.
ENDIF.
PERFORM get_current_url.
CALL FUNCTION 'CONTROL_FLUSH'.
WHEN OTHERS.
General Browser to View
Files/Pictures & WebPages
© 2005 SAP AG 5
CALL FUNCTION 'CONTROL_DISPATCH'
EXPORTING
fcode = cmd.
CALL FUNCTION 'CONTROL_FLUSH'.
ENDCASE.
CLEAR cmd.
CALL FUNCTION 'CONTROL_FLUSH'.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR url.
PERFORM get_file_name.
PERFORM load_html_page.
*& Form get_page_name
Get Page Name
FORM get_file_name.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
DEF_FILENAME = ' '
def_path = 'C: '
mask = ',.,..'
mode = 'o'
title = 'Browse to Open'
IMPORTING
filename = url
RC =
EXCEPTIONS
inv_winsys = 1
no_batch = 2
selection_cancel = 3
selection_error = 4
OTHERS = 5
IF sy-subrc <> 0.
EXIT.
ENDIF.
ENDFORM. " get_page_name
*& Form load_html_page
TO load the file (URL)
General Browser to View
Files/Pictures & WebPages
© 2005 SAP AG 6
FORM load_html_page.
CALL FUNCTION 'HTMLCNTL_SHOW_URL'
EXPORTING
h_control = h_html_ctrl
url = url.
IF sy-subrc <> 0.
EXIT.
ENDIF.
flag = 'X'.
ENDFORM. " load_html_page
*& Form get_current_url
Get Current URL
FORM get_current_url.
CALL FUNCTION 'HTMLCNTL_GET_CURRENT_URL'
EXPORTING
h_control = h_html_ctrl
IMPORTING
url = url.
ENDFORM. " get_current_url
Callback form for the event 'NavigateComplete'
callback on_control_event.
CALL FUNCTION 'CONTROL_GET_EVENT_PARAM'
EXPORTING
h_control = h_html_ctrl
param_id = 0
CHANGING
return = url.
PERFORM get_current_url.
endcallback.
Reward Points if it is helpful
Thanks
Seshu -
How to call url from abap in background
Hi,
I could open url but it opens browser window
i saw several threads on how to cal url in background but no good answer
kindly help
thanks
BHi,
Try the following (primitive) example, it calls an url and display the result on screen.
Hope this will help you.
<pre>
REPORT test.
CLASS lcx_http_client DEFINITION
Minimal Error Handling
CLASS lcx_http_client DEFINITION INHERITING FROM cx_static_check.
PUBLIC SECTION.
INTERFACES:
if_t100_message.
DATA:
mv_method TYPE string, "#EC NEEDED
mv_subrc TYPE i. "#EC NEEDED
METHODS:
constructor
IMPORTING iv_method TYPE string OPTIONAL
iv_subrc TYPE i OPTIONAL
iv_msgid TYPE symsgid DEFAULT '00'
iv_msgno TYPE i DEFAULT 162.
ENDCLASS. "lcx_http_client DEFINITION
CLASS lcx_http_client IMPLEMENTATION
CLASS lcx_http_client IMPLEMENTATION.
METHOD constructor.
super->constructor( ).
mv_method = iv_method.
mv_subrc = iv_subrc.
if_t100_message~t100key-msgid = iv_msgid.
if_t100_message~t100key-msgno = iv_msgno.
if_t100_message~t100key-attr1 = 'MV_METHOD'.
if_t100_message~t100key-attr2 = 'MV_SUBRC'.
ENDMETHOD. "constructor
ENDCLASS. "lcx_http_client IMPLEMENTATION
CLASS lcl_http_client DEFINITION
Facade for if_http_client
CLASS lcl_http_client DEFINITION.
PUBLIC SECTION.
CLASS-METHODS:
get_http_client_by_url
IMPORTING iv_url TYPE string
iv_proxy_host TYPE string OPTIONAL
iv_proxy_service TYPE string OPTIONAL
PREFERRED PARAMETER iv_url
RETURNING value(ro_http_client) TYPE REF TO lcl_http_client
RAISING lcx_http_client.
DATA:
mr_http_client TYPE REF TO if_http_client.
METHODS:
send
RAISING lcx_http_client,
receive
RAISING lcx_http_client,
close
RAISING lcx_http_client,
get_response_header_fields
RETURNING value(rt_fields) TYPE tihttpnvp,
get_response_cdata
RETURNING value(rv_data) TYPE string.
ENDCLASS. "lcl_http_client DEFINITION
CLASS lcl_http_client IMPLEMENTATION
CLASS lcl_http_client IMPLEMENTATION.
METHOD get_http_client_by_url.
DATA: lv_subrc TYPE sysubrc.
CREATE OBJECT ro_http_client.
cl_http_client=>create_by_url( EXPORTING url = iv_url
proxy_host = iv_proxy_host
proxy_service = iv_proxy_service
IMPORTING client = ro_http_client->mr_http_client
EXCEPTIONS argument_not_found = 1
plugin_not_active = 2
internal_error = 3
OTHERS = 999 ).
CHECK sy-subrc <> 0.
lv_subrc = sy-subrc.
RAISE EXCEPTION TYPE lcx_http_client EXPORTING iv_method = 'GET_HTTP_CLIENT_BY_URL' iv_subrc = lv_subrc.
ENDMETHOD. "get_http_client_by_url
METHOD send.
DATA: lv_subrc TYPE sysubrc.
mr_http_client->send( EXCEPTIONS http_communication_failure = 5
http_invalid_state = 6
http_processing_failed = 7
http_invalid_timeout = 8
OTHERS = 999 ).
CHECK sy-subrc <> 0.
lv_subrc = sy-subrc.
RAISE EXCEPTION TYPE lcx_http_client EXPORTING iv_method = 'SEND' iv_subrc = lv_subrc.
ENDMETHOD. "send
METHOD close.
DATA: lv_subrc TYPE sysubrc.
CALL METHOD mr_http_client->close
EXCEPTIONS
http_invalid_state = 10
OTHERS = 999.
CHECK sy-subrc <> 0.
lv_subrc = sy-subrc.
RAISE EXCEPTION TYPE lcx_http_client EXPORTING iv_method = 'CLOSE' iv_subrc = lv_subrc.
ENDMETHOD. "close
METHOD receive.
DATA: lv_subrc TYPE sysubrc.
mr_http_client->receive( EXCEPTIONS http_communication_failure = 9
http_invalid_state = 10
http_processing_failed = 11
OTHERS = 999 ).
CHECK sy-subrc <> 0.
lv_subrc = sy-subrc.
RAISE EXCEPTION TYPE lcx_http_client EXPORTING iv_method = 'RECEIVE' iv_subrc = lv_subrc.
ENDMETHOD. "receive
METHOD get_response_header_fields.
mr_http_client->response->get_header_fields( CHANGING fields = rt_fields ).
ENDMETHOD. "get_response_header_fields
METHOD get_response_cdata.
rv_data = mr_http_client->response->get_cdata( ).
ENDMETHOD. "get_response_cdata
ENDCLASS. "lcl_http_client IMPLEMENTATION
PARAMETERS: p_url TYPE string DEFAULT 'http://www.google.com' LOWER CASE,
p_phost TYPE string DEFAULT 'your_proxy_here' LOWER CASE,
p_pserv TYPE string DEFAULT '8080' LOWER CASE.
*===================================================================================
START-OF-SELECTION.
TRY .
DATA: gt_data TYPE string_table,
gv_data TYPE string,
gr_http_client TYPE REF TO lcl_http_client,
go_cx TYPE REF TO lcx_http_client.
"Initialize the http client
gr_http_client =
lcl_http_client=>get_http_client_by_url( iv_url = p_url
iv_proxy_host = p_phost
iv_proxy_service = p_pserv ).
"Call the specified URL and retrieve data from the response
gr_http_client->send( ).
gr_http_client->receive( ).
gv_data = gr_http_client->get_response_cdata( ).
"Its over....
gr_http_client->close( ).
"Display result
REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>cr_lf IN gv_data WITH cl_abap_char_utilities=>newline.
SPLIT gv_data AT cl_abap_char_utilities=>newline INTO TABLE gt_data.
LOOP AT gt_data INTO gv_data.
WRITE: / gv_data.
ENDLOOP.
CATCH lcx_http_client INTO go_cx.
MESSAGE go_cx TYPE 'S' DISPLAY LIKE 'E'.
ENDTRY.
</pre> -
Create EJB and call it from ABAP
Hi all,
I have written a stand-alone-Java application, which should be converted into a web application, which has no gui.
This application should be triggered by a abap-program.
Following questions, do I have to write a servlet and a ejb or is it possible to call the ejb directly from the abap-program?
What do I have to do make an outbound call from abap?
Thank you for your support.
Kind regards, Patrick.Hi.
You can call the EJB directly from Abap. XI uses this functionality extensively.
Follow these steps:
1) Deply the bean on the java stack.
2) You now need to setup a RFC destination in the JCO RFC Provider service in the j2ee visual adminstrator. Point the Repository section to the application server you want to run the Abap reort on. When you do this the j2ee engine will register itself as a possible RFC destination on this application server.You can choose your own program id...
3) You then need to goto tran sm59 on the app server where the Abap report is going to run and setup a connection of tcp type to the j2ee machine. Specify the same program id you used in step in the technical settings.
4) Then just use the bean name when you do the rfc call in the abap report.
Hope this helps if U have not done it yet.
Maybe you are looking for
-
How can I create a client console and work together with the Cache Server?
How can I edit the following Cache-Server.cmd file to create a client console and work together with the Cache Server? The following is the cache server file: contacts-cache-server.cmd @echo off setlocal if (%COHERENCE_HOME%)==() ( set COHERENCE_HOME
-
DVD Drive works, but cannot eject, because DVD crashes into case.
Is there a chance to adjust the drive manually in the case? I don´t want to buy a new externel one.. Thanks guys!!!
-
Sccm 2012 Only two actions on cleints actions can not find any errors
We have deployed sccm 2012 sp1 with cu2 everything was working ok then it all suddenly it stopped working for new client's . The client installs ok but there are only two action in on the client actions. Clients find the site code ok and logs look o
-
WHY ODI IS AN ELT TOOL???
Hi, I have done some labs in odi. I am in deep dark for some cases in odi labs like- Q1)For Relational Table To File (.xls) data exportation, transformation occurs in sunopsis memory engine.For this case how is is ELT?? Q2)As transformation occurs in
-
Where-used list for system aliases?
Is there a way to get a list of all the iViews that reference a particular system alias (or better, a set of system aliases?). Possibly by querying the database? Thanks, Sean