A Complete Tutorial on OData-Based Adobe Forms for SAP Purchase Orders

Estimated read time 21 min read

Introduction:

Adobe Form Development Process for SAP Systems.

The Adobe form development process in SAP typically involves three main steps:

Creating the InterfaceDesigning the FormData Binding

While the overall process remains consistent, the interface creation can vary depending on the data retrieval method. The three primary approaches are:

DDIC (Data Dictionary) based formsXML Schema based formsGateway based forms

Let’s focus on enhancing a gateway-based form using a Purchase Order example:

Approach:

Enhancing a Gateway-Based Purchase Order Form.

In this scenario, we’ll add two additional fields to the standard form:

Bill to AddressAmount in Words

which is discussed in detail in the later steps below:

A. Search for Form in Maintain Form Template App:

Step 1: Locate the standard Purchase Order form.

Access Fiori App “Maintain Form Template”Search for “MM_PUR_PURCHASE_ORDER” under “Form Template Name”.Find the template under “Predelivered Template” category.

Step 2: Create a copy of the standard form.

Select “MM_PUR_PURCHASE_ORDER” under “Predelivered Templates”Click on the copy optionEnter a new name for the custom form templateClick OK to create the copy

Step 3: Verify the new custom form

Insert the new form name “ZZ1_HM_TEST” in the “Form Template Name” fieldGo to the “Custom Templates” tabReview the details of the newly created custom form

Step 4: Examine form template details

Click on the form template to open it.Review the detailed information of the custom form.

Step 5: Identify the OData service.

Look for “Data Source” section in the form details.The OData service name “FDP_EF_PURCHASE_ORDER_SRV” will appear for Purchase Order.

Now, as we have created the custom form template “ZZ1_HM_TEST”, we will go for creation of custom OData service to provide the data source to the adobe form which is explained in the next step.

B. Custom OData Service Creation (SEGW):

Step 1: Create OData Service Project

Go to transaction code SEGWCreate a new project named “ZHM_PO_TEST”

Step 2: Redefine Data Model

In project “ZHM_PO_TEST”, Right-click on “Data Model” -> “Redefine” -> “OData Service (SAP GW)”.

Enter technical service name: “FDP_EF_PURCHASE_ORDER_SRV”Specify Version: “0001” and Next.Select all fields and Finish.

Step 3: Generate Runtime Artifacts

Select “Generate Runtime Artifacts”Check the box for “Overwrite Base/Extended Service” and Press Enter

Step 4 : Identify and Add the Custom Fields.

In this requirement, “Bill To Address” and “Amount In Words” are needed to be add, as addition fields in the form apart from the standard details. So, for that we need to check which details are available in the OData Service.

Bill To Address: (Not found in Standard OData Service, but it’s a custom field)

Since, Bill to Address is not there in any of the entity in OData service, we will add this, in the structure of Purchase Order Node, i.e., TDS_ME_PO_HEADER.

Amount in Words: (Not found in Standard OData Service, but it’s a custom field)

Since, we have the standard field for fetching the Total Amount and now, we just need to convert it in Words. For that we will add the custom field in the structure of Purchase Order Node, i.e., TDS_ME_PO_HEADER.

Step 5: Create Append Structure

Go to transaction SE11Create a new Append Structure named “ZPO_BILL_ADDRESS”

Step 6: Add and Activate Custom Fields

Add the required fields and activate the append structure

Step 7: Import New Properties to Entity

Return to SEGW transactionOpen project “ZHM_TEST”Locate Entity “PurchaseOrderNode”Right-click on “PurchaseOrderNode” -> Select “Import” -> “Properties”

And add additional field in “PurchaseOrderNode”, which were added in the structure “TDS_ME_PO_HEADER” in the prior step.

Step 8: Update Runtime Artifacts

Expand the “Service Implementation” node.Locate and expand the “Runtime Artifacts” subfolder.Find the class “ZCL_ZHM_PO_TEST_DPC_EXT” in the list.In the class, look for the method “PURCHASEORDER_GET_ENTITY” and redefine it, by right click on  method -> Redefine.

Step 9: Code for fetching Bill to Address and Amount in Words.

 

 

METHOD purchaseorders_get_entity.
TRY.
CALL METHOD super->purchaseorders_get_entity
EXPORTING
iv_entity_name = iv_entity_name
iv_entity_set_name = iv_entity_set_name
iv_source_name = iv_source_name
it_key_tab = it_key_tab
io_request_object = io_request_object
io_tech_request_context = io_tech_request_context
it_navigation_path = it_navigation_path
IMPORTING
er_entity = er_entity
es_response_context = es_response_context.
CATCH /iwbep/cx_mgw_busi_exception.
CATCH /iwbep/cx_mgw_tech_exception.
ENDTRY.

DATA : lv_spell TYPE spell,
lv_amount TYPE p DECIMALS 2,
lv_amt_spell(255) TYPE c.

“Bill To Address
SELECT SINGLE
FROM i_purchaseorder
FIELDS purchaseorder, _purchaseorderitem-plant,
_purchaseorderitem_plant-addressid AS addressid,
_supplier_supplierpurchasingorg-supplierrespsalespersonname AS salesperson
WHERE purchaseorder = @er_entity-ebeln
INTO (ls_data).
IF sy-subrc = 0.
ENDIF.

SELECT SINGLE a~country
FROM i_address
WITH PRIVILEGED ACCESS AS a
JOIN i_supplier
WITH PRIVILEGED ACCESS AS s
ON a~addressid = s~addressid
WHERE s~supplier = @er_entity-lifnr
INTO (lv_country).
IF sy-subrc = 0.
ENDIF.

IF ls_data IS NOT INITIAL AND lv_country IS NOT INITIAL.
cl_fdp_ef_pur_ord_form_utility=>get_address_in_printform(
EXPORTING
iv_language = er_entity-spras
iv_sender_country = lv_country
iv_adrnr = ls_data-addressid
iv_street_has_priority = abap_true
IMPORTING
ev_address_line1 = er_entity-bill_add_line_1
ev_address_line2 = er_entity-bill_add_line_2
ev_address_line3 = er_entity-bill_add_line_3
ev_address_line4 = er_entity-bill_add_line_4
ev_address_line5 = er_entity-bill_add_line_5
ev_address_line6 = er_entity-bill_add_line_6
ev_address_line7 = er_entity-bill_add_line_7
ev_address_line8 = er_entity-bill_add_line_8
).
ENDIF.
“Sales person
er_entity-salesperson = ls_data-salesperson.

“Amount in Words
lv_amount = er_entity-purchaseordernetamount.
CALL FUNCTION ‘SPELL_AMOUNT’
EXPORTING
amount = lv_amount
currency = er_entity-waers
filler = ‘ ‘
language = sy-langu
IMPORTING
in_words = lv_spell
EXCEPTIONS
not_found = 1
too_large = 2
OTHERS = 3.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.

IF lv_spell IS NOT INITIAL.
er_entity-zword_amount = lv_spell-word.
ENDIF.

ENDMETHOD.

 

 

 Code Explanation:

Call the super class method “PURCHASEORDERS_GET_ENTITY” and fetch the existing standard data in “ER_ENTITY”.For Bill to Address logic, select the data from “I_PURCHASEORDER” CDS View. As we need country details as well, fetch the data from “I_SUPPLIER” and “I_ADDRESS” CDS View.Call method “GET_ADDRESS_IN_PRINTFORM” of class “CL_FDP_EF_PUR_ORD_FORM_UTILITY” to fetch the Bill to Address details.For Amount in Words logic, use FM “SPELL_AMOUNT” to get amount in words.

Step 10: Activate the class and service.

 

C. Register the service in GW (T-code – /IWFND/MAINT_SERVICE)

Post creation of OData service, registration of the service will be done by following below steps:

Step 1 : Adding the service in GW.

Click on “Add Service” button

Enter System Alias as “LOCAL”, External Service Name as “ZHM_PO_TEST_SRV” and press Enter.   Select the service “ZHM_PO_TEST_SRV” and click on “Add Selected Services” and save the details on the next page.

Now, go back and click on Filter.Provide the service name “ZHM_PO_TEST_SRV” and search for it. Once you get the service, select and click on execute “SAP Gateway Client” to execute the service if you want to test it.

Now your service is successfully registered.

D. Assign “ZHM_PO_TEST_SRV” service to Adobe form.

Step 1 : Check the Odata service for form.

Go to T-code SFP -> Check for form “ZZ1_HM_TEST”, created at the beginning (A : step 3) in Maintain Form Template App and click on Display.Standard OData service assigned to it will get displayed.

Step 2 : Changing OData Service.

Enter new custom service “ZHM_PO_TEST_SRV” in place of standard odata service in form.Save and Activate.

E. Download the bindings for the form

There are two ways to download the bindings for the forms.

Bindings can be downloaded from:

 1) SFP Tcode -> Form -> Utlilites -> Uploading/Downloading -> Downloading Layout (XDP), Downloading Data Schema (XSD).

2) Maintain Form Template App -> Custom Form Name -> Download (it will download both XDP and XSD file in the folder).

 

Since, from “Maintain Form Template” App both the files will be getting downloaded at same time, will opt for this way to download the files. Let’s follow this approach with the detail steps explained as below:

 

Step 1 : Download the form.

Go to “Maintain Form Template” app and open the form, will see that the data source got change to our service now “ZHM_PO_TEST_SRV”.  Click on Download. Post download, extract the folder “ZZ1_HM_TEST_EN”.

Step 2: Check for XDP and XSD files.

Inside the folder, we will have 2 files, XDP (Layout File) and XSD (Data Schema File) like below which we will be using in next step later.

F. Form Adjustments and New Connection Creation:

There are 2 ways to do form designing and adjustments:

Go to T-code SFP -> Enter Form “ZZ1_HM_TEST” -> Click on Layout and do the changes.Go to ADLC (Adobe LiveCycle designer) ->
i) Click on Open -> Select XDP File “ZZ1_HM_TEST_E” which was downloaded in E: step 2 -> Click Open. (For opening the layout)
ii) Go to Menu -> Window -> Data View -> Check data connection. (Mostly it will appear automatically), if not follow the further steps for creating the data connection.

         Since ADLC way is more convenient, will use that way only for form adjustments.

Step 1 : Layout adjustments.

Go to ADLC. Open the XDP File “ZZ1_HM_TEST_E’ and get the standard layout loaded in it.Adjust the standard form, as per the requirement.Add extra fields like “Bill to Address, Amount in Words” etc in the form.

Step 2 : Review Existing Data Connection/ Create New Data Connection.

Go to Window -> Open Data View, check for “Data Connection”. Generally, the Data Connection comes automatically which can be used for bindings, but, if not, then create new “Data Connection” for binding purpose. Follow below steps to create the new Data Connection.

a) Create New Data Connection: Right click on “Data View” and click on “New Data Connection”. Assign name “ZHM_PO_TEST” and select “XML Schema” and click Next.

b) On the next page -> select the “ZZ1_HM_TEST_E” XSD file which we downloaded in the prior step (E : Step – 2) and then on next page click on “Embed XML Schema” option and finish.

The new connection will appear like this as below:

Save the form. 

G. Data Bindings in form:

Once we have the data connection established in the form, it will have all the data fields in it, which we need to map to the respective fields as explained below:

Step 1 : Data Binding for Custom Fields

All standard fields will have the bindings automatically mapped. So, bindings will be added to additional fields “Bill to Address, Amount in words”.

For example : For Bill to Address, follow the below step to do the data binding.

Go to “Bill to Address” Text Field -> Binding -> Data Binding -> Select the Data Binding -> ZHM_PO_TEST -> PurchaseOrderNode -> BillAddLine1 and Enter

Do all the bindings like wise and save the form.Upload the form in “Maintain form template” App in our custom form “ZHM_TEST_PO” using upload option and save.

So, finally we are done with all the steps – creation of form, creation of GW based interface and Data Bindings to the forms. Now, let’s test to check the output.

H. Testing the form:

Here, we will go with standard configuration process i.e OPD based (Output Parameter Determination Fiori App) and triggering the form from T-code – ME23N.

Step 1 : Assign Form Template Configuration.

Go to SPRO -> Cross-Application Components -> Output Control -> Assign Form Templates -> Check for Application Object Type “PURCHASE_ORDER” and create new entry with Form Template ID “ZZ1_HM_TEST” and SAVE.

Step 2 : Output Parameter Determination Configuration.

Go to Fiori App – OPD -> Show Rules “Purchase Order”, Determination Step -> “Form Template”  and in Decision Table -> Add the Form “ZZ1_HM_TEST as below and save:

Step 3 : Testing the form using ME23N.

Go to T-code ME23N -> Insert Purchase Order Number -> Do all the processing -> Click on Message -> The form will get displayed with data

 

 

 

​ Introduction: Adobe Form Development Process for SAP Systems.The Adobe form development process in SAP typically involves three main steps:Creating the InterfaceDesigning the FormData BindingWhile the overall process remains consistent, the interface creation can vary depending on the data retrieval method. The three primary approaches are:DDIC (Data Dictionary) based formsXML Schema based formsGateway based formsLet’s focus on enhancing a gateway-based form using a Purchase Order example:Approach:Enhancing a Gateway-Based Purchase Order Form.In this scenario, we’ll add two additional fields to the standard form:Bill to AddressAmount in Wordswhich is discussed in detail in the later steps below:A. Search for Form in Maintain Form Template App:Step 1: Locate the standard Purchase Order form.Access Fiori App “Maintain Form Template”Search for “MM_PUR_PURCHASE_ORDER” under “Form Template Name”.Find the template under “Predelivered Template” category.Step 2: Create a copy of the standard form.Select “MM_PUR_PURCHASE_ORDER” under “Predelivered Templates”Click on the copy optionEnter a new name for the custom form templateClick OK to create the copyStep 3: Verify the new custom formInsert the new form name “ZZ1_HM_TEST” in the “Form Template Name” fieldGo to the “Custom Templates” tabReview the details of the newly created custom formStep 4: Examine form template detailsClick on the form template to open it.Review the detailed information of the custom form.Step 5: Identify the OData service.Look for “Data Source” section in the form details.The OData service name “FDP_EF_PURCHASE_ORDER_SRV” will appear for Purchase Order.Now, as we have created the custom form template “ZZ1_HM_TEST”, we will go for creation of custom OData service to provide the data source to the adobe form which is explained in the next step.B. Custom OData Service Creation (SEGW):Step 1: Create OData Service ProjectGo to transaction code SEGWCreate a new project named “ZHM_PO_TEST”Step 2: Redefine Data ModelIn project “ZHM_PO_TEST”, Right-click on “Data Model” -> “Redefine” -> “OData Service (SAP GW)”.Enter technical service name: “FDP_EF_PURCHASE_ORDER_SRV”Specify Version: “0001” and Next.Select all fields and Finish.Step 3: Generate Runtime ArtifactsSelect “Generate Runtime Artifacts”Check the box for “Overwrite Base/Extended Service” and Press EnterStep 4 : Identify and Add the Custom Fields.In this requirement, “Bill To Address” and “Amount In Words” are needed to be add, as addition fields in the form apart from the standard details. So, for that we need to check which details are available in the OData Service.Bill To Address: (Not found in Standard OData Service, but it’s a custom field)Since, Bill to Address is not there in any of the entity in OData service, we will add this, in the structure of Purchase Order Node, i.e., TDS_ME_PO_HEADER.Amount in Words: (Not found in Standard OData Service, but it’s a custom field)Since, we have the standard field for fetching the Total Amount and now, we just need to convert it in Words. For that we will add the custom field in the structure of Purchase Order Node, i.e., TDS_ME_PO_HEADER.Step 5: Create Append StructureGo to transaction SE11Create a new Append Structure named “ZPO_BILL_ADDRESS”Step 6: Add and Activate Custom FieldsAdd the required fields and activate the append structureStep 7: Import New Properties to EntityReturn to SEGW transactionOpen project “ZHM_TEST”Locate Entity “PurchaseOrderNode”Right-click on “PurchaseOrderNode” -> Select “Import” -> “Properties”And add additional field in “PurchaseOrderNode”, which were added in the structure “TDS_ME_PO_HEADER” in the prior step.Step 8: Update Runtime ArtifactsExpand the “Service Implementation” node.Locate and expand the “Runtime Artifacts” subfolder.Find the class “ZCL_ZHM_PO_TEST_DPC_EXT” in the list.In the class, look for the method “PURCHASEORDER_GET_ENTITY” and redefine it, by right click on  method -> Redefine.Step 9: Code for fetching Bill to Address and Amount in Words.   METHOD purchaseorders_get_entity.
TRY.
CALL METHOD super->purchaseorders_get_entity
EXPORTING
iv_entity_name = iv_entity_name
iv_entity_set_name = iv_entity_set_name
iv_source_name = iv_source_name
it_key_tab = it_key_tab
io_request_object = io_request_object
io_tech_request_context = io_tech_request_context
it_navigation_path = it_navigation_path
IMPORTING
er_entity = er_entity
es_response_context = es_response_context.
CATCH /iwbep/cx_mgw_busi_exception.
CATCH /iwbep/cx_mgw_tech_exception.
ENDTRY.

DATA : lv_spell TYPE spell,
lv_amount TYPE p DECIMALS 2,
lv_amt_spell(255) TYPE c.

“Bill To Address
SELECT SINGLE
FROM i_purchaseorder
FIELDS purchaseorder, _purchaseorderitem-plant,
_purchaseorderitem_plant-addressid AS addressid,
_supplier_supplierpurchasingorg-supplierrespsalespersonname AS salesperson
WHERE purchaseorder = @er_entity-ebeln
INTO (ls_data).
IF sy-subrc = 0.
ENDIF.

SELECT SINGLE a~country
FROM i_address
WITH PRIVILEGED ACCESS AS a
JOIN i_supplier
WITH PRIVILEGED ACCESS AS s
ON a~addressid = s~addressid
WHERE s~supplier = @er_entity-lifnr
INTO (lv_country).
IF sy-subrc = 0.
ENDIF.

IF ls_data IS NOT INITIAL AND lv_country IS NOT INITIAL.
cl_fdp_ef_pur_ord_form_utility=>get_address_in_printform(
EXPORTING
iv_language = er_entity-spras
iv_sender_country = lv_country
iv_adrnr = ls_data-addressid
iv_street_has_priority = abap_true
IMPORTING
ev_address_line1 = er_entity-bill_add_line_1
ev_address_line2 = er_entity-bill_add_line_2
ev_address_line3 = er_entity-bill_add_line_3
ev_address_line4 = er_entity-bill_add_line_4
ev_address_line5 = er_entity-bill_add_line_5
ev_address_line6 = er_entity-bill_add_line_6
ev_address_line7 = er_entity-bill_add_line_7
ev_address_line8 = er_entity-bill_add_line_8
).
ENDIF.
“Sales person
er_entity-salesperson = ls_data-salesperson.

“Amount in Words
lv_amount = er_entity-purchaseordernetamount.
CALL FUNCTION ‘SPELL_AMOUNT’
EXPORTING
amount = lv_amount
currency = er_entity-waers
filler = ‘ ‘
language = sy-langu
IMPORTING
in_words = lv_spell
EXCEPTIONS
not_found = 1
too_large = 2
OTHERS = 3.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.

IF lv_spell IS NOT INITIAL.
er_entity-zword_amount = lv_spell-word.
ENDIF.

ENDMETHOD.   Code Explanation:Call the super class method “PURCHASEORDERS_GET_ENTITY” and fetch the existing standard data in “ER_ENTITY”.For Bill to Address logic, select the data from “I_PURCHASEORDER” CDS View. As we need country details as well, fetch the data from “I_SUPPLIER” and “I_ADDRESS” CDS View.Call method “GET_ADDRESS_IN_PRINTFORM” of class “CL_FDP_EF_PUR_ORD_FORM_UTILITY” to fetch the Bill to Address details.For Amount in Words logic, use FM “SPELL_AMOUNT” to get amount in words.Step 10: Activate the class and service. C. Register the service in GW (T-code – /IWFND/MAINT_SERVICE)Post creation of OData service, registration of the service will be done by following below steps:Step 1 : Adding the service in GW.Click on “Add Service” buttonEnter System Alias as “LOCAL”, External Service Name as “ZHM_PO_TEST_SRV” and press Enter.   Select the service “ZHM_PO_TEST_SRV” and click on “Add Selected Services” and save the details on the next page.Now, go back and click on Filter.Provide the service name “ZHM_PO_TEST_SRV” and search for it. Once you get the service, select and click on execute “SAP Gateway Client” to execute the service if you want to test it.Now your service is successfully registered.D. Assign “ZHM_PO_TEST_SRV” service to Adobe form.Step 1 : Check the Odata service for form.Go to T-code SFP -> Check for form “ZZ1_HM_TEST”, created at the beginning (A : step 3) in Maintain Form Template App and click on Display.Standard OData service assigned to it will get displayed.Step 2 : Changing OData Service.Enter new custom service “ZHM_PO_TEST_SRV” in place of standard odata service in form.Save and Activate.E. Download the bindings for the formThere are two ways to download the bindings for the forms. Bindings can be downloaded from: 1) SFP Tcode -> Form -> Utlilites -> Uploading/Downloading -> Downloading Layout (XDP), Downloading Data Schema (XSD).2) Maintain Form Template App -> Custom Form Name -> Download (it will download both XDP and XSD file in the folder). Since, from “Maintain Form Template” App both the files will be getting downloaded at same time, will opt for this way to download the files. Let’s follow this approach with the detail steps explained as below:  Step 1 : Download the form.Go to “Maintain Form Template” app and open the form, will see that the data source got change to our service now “ZHM_PO_TEST_SRV”.  Click on Download. Post download, extract the folder “ZZ1_HM_TEST_EN”.Step 2: Check for XDP and XSD files.Inside the folder, we will have 2 files, XDP (Layout File) and XSD (Data Schema File) like below which we will be using in next step later.F. Form Adjustments and New Connection Creation:There are 2 ways to do form designing and adjustments:Go to T-code SFP -> Enter Form “ZZ1_HM_TEST” -> Click on Layout and do the changes.Go to ADLC (Adobe LiveCycle designer) ->i) Click on Open -> Select XDP File “ZZ1_HM_TEST_E” which was downloaded in E: step 2 -> Click Open. (For opening the layout)ii) Go to Menu -> Window -> Data View -> Check data connection. (Mostly it will appear automatically), if not follow the further steps for creating the data connection.         Since ADLC way is more convenient, will use that way only for form adjustments.Step 1 : Layout adjustments.Go to ADLC. Open the XDP File “ZZ1_HM_TEST_E’ and get the standard layout loaded in it.Adjust the standard form, as per the requirement.Add extra fields like “Bill to Address, Amount in Words” etc in the form.Step 2 : Review Existing Data Connection/ Create New Data Connection. Go to Window -> Open Data View, check for “Data Connection”. Generally, the Data Connection comes automatically which can be used for bindings, but, if not, then create new “Data Connection” for binding purpose. Follow below steps to create the new Data Connection.a) Create New Data Connection: Right click on “Data View” and click on “New Data Connection”. Assign name “ZHM_PO_TEST” and select “XML Schema” and click Next.b) On the next page -> select the “ZZ1_HM_TEST_E” XSD file which we downloaded in the prior step (E : Step – 2) and then on next page click on “Embed XML Schema” option and finish.The new connection will appear like this as below: Save the form. G. Data Bindings in form:Once we have the data connection established in the form, it will have all the data fields in it, which we need to map to the respective fields as explained below:Step 1 : Data Binding for Custom FieldsAll standard fields will have the bindings automatically mapped. So, bindings will be added to additional fields “Bill to Address, Amount in words”.For example : For Bill to Address, follow the below step to do the data binding.Go to “Bill to Address” Text Field -> Binding -> Data Binding -> Select the Data Binding -> ZHM_PO_TEST -> PurchaseOrderNode -> BillAddLine1 and Enter Do all the bindings like wise and save the form.Upload the form in “Maintain form template” App in our custom form “ZHM_TEST_PO” using upload option and save. So, finally we are done with all the steps – creation of form, creation of GW based interface and Data Bindings to the forms. Now, let’s test to check the output.H. Testing the form: Here, we will go with standard configuration process i.e OPD based (Output Parameter Determination Fiori App) and triggering the form from T-code – ME23N.Step 1 : Assign Form Template Configuration.Go to SPRO -> Cross-Application Components -> Output Control -> Assign Form Templates -> Check for Application Object Type “PURCHASE_ORDER” and create new entry with Form Template ID “ZZ1_HM_TEST” and SAVE.Step 2 : Output Parameter Determination Configuration.Go to Fiori App – OPD -> Show Rules “Purchase Order”, Determination Step -> “Form Template”  and in Decision Table -> Add the Form “ZZ1_HM_TEST as below and save:Step 3 : Testing the form using ME23N.Go to T-code ME23N -> Insert Purchase Order Number -> Do all the processing -> Click on Message -> The form will get displayed with data     Read More Technology Blogs by Members articles 

#SAP

#SAPTechnologyblog

You May Also Like

More From Author

+ There are no comments

Add yours