hi all
while accessing gateway from sap webide getting error that
Value Data Provider implementation '/IWFND/OM_MED_CATAL_ODC_0002_BE' '01' 'DEFAULT' does not exist
please give need full information
hi all
while accessing gateway from sap webide getting error that
Value Data Provider implementation '/IWFND/OM_MED_CATAL_ODC_0002_BE' '01' 'DEFAULT' does not exist
please give need full information
Dear Experts,
When i am doing Expandset i am passing filter . i am reading table IT FILTER SELECT OPTIONS but my string gets cut off. like
Actucal Value ABCD but i am getting ABC only.
I am facing same issue Empty Sales Order in Fiori Track Sales Order . We have SP08. the note 2241188 for SP13 . So i need same kind of note for SP08. .
I need note for SP08 for odata IT_FILTER_SELECT_OPTIONS values is cutting off.
Thanks in Advance
Best Regards,
Sathish Mani
Hi Experts,
I am just having a heck of a time trying to get a $batch to properly process from my external application. I am getting an HTTP response code of 202, telling me that my request is getting to where it needs to go.
However, in the body of the response I'm getting the error "System expected the element '{http://www.w3.org/2005/Atom}entry'". After searching around through the discussions and seeing thesethree threads, then finding and reading this excellent help document, I am still at a loss.
I can successfully take the request body that I generate and use the Gateway client to do the entries, but when I try to use theAdvanced Rest Client Application, or try to use the application I am developing I get the error noted above.
Here is how the request looks:
Header attribute Content-Type: multipart/mixed; boundary=batch, method: POST (there are some other authentication attributes, but those appear to be working)
Request body:
--batch
Content-Type: multipart/mixed; boundary=changeset
--changeset
Content-Type: application/http
Content-Transfer-Encoding: binary
PUT ContractDetailsCollection(1) HTTP/1.1
Content-Type: application/atom+xml
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<atom:entry xmlns:atom="http://www.w3.org/2005/Atom">
<atom:content type="application/xml">
<m:properties xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices">
<d:Id>1</d:Id>
<d:Description>batch test id 1</d:Description>
<d:Value>1111</d:Value>
</m:properties>
</atom:content>
</atom:entry>
--changeset--
--batch--
Does anyone have an idea as to what I'm doing wrong? I have tried the formats in the above discussion threads, and everything I try in tweaking the body format seems to lead to the same "expected the element..." error, but NetWeaver Gateway Client works and updates my backend data.
Any help is very much appreciated. Thank you!
Did you know that the method parameter IV_SOURCE_NAME of GET_ENTITYSET has different values depending on whether the service is triggered with or without $expand? This also applies to the parameter IT_NAVIGATION_PATH. I recently found out about this the hard way because not knowing this caused a bug in my code. I think it’s worth sharing my findings. Basically, you will see that using $expand fills the parameters mentioned above differently compared to directly triggering GET_ENTITYSETwithout $expand but still with Navigation Properties.
First of all, I’m using NW 7.4 SP12 together with SAP_GWFND SP12 (and some additional patches/notes).
We’re going to use the GWSAMPLE_BASIC project/service that is shipped with your GW installation. You can simply go to the Service Builder (transaction code SEGW) and open the project /IWBEP/GWSAMPLE_BASIC. I like this project because I could see how SAP implements GW services – and I learned a lot from that in the past :-) Also, check Demo service ZGWSAMPLE_SRV | SCN by Andre Fischer which tells you a little more about the data model of the Gateway Sample Project.
Now let’s first set a breakpoint in the method CONTACTSET_GET_ENTITYSET of the class /IWBEP/CL_GWSAMPLE_BAS_DPC_EXT. You can navigate there directly from SEGW (see screenshot above), or just use SE80.
Now, after we have set the breakpoint, let’s try some example URLs and see what happens.
1. Without $expand: /sap/opu/odata/IWBEP/GWSAMPLE_BASIC/SalesOrderSet('0500000000')/ToBusinessPartner/ToContacts
As you can see this URL is using two Navigation Properties. First, we navigate to the BusinessPartner of a given SalesOrder, then to the BusinessPartner’s contacts. This will only return the contact data to the caller of the service. Calling this URL will hit the breakpoint we set above:
While we are in the debugger inside CONTACTSET_GET_ENTITYSET let’s check the two mentioned parameters:
This basically tells us from the source "SalesOrder", we first navigated to the BusinessPartner and then to the contacts. The itab IT_NAVIGATION_PATH also contains information about the Target_Type (=Entity) and the corresponding namespace. So far so good. Now let’s assume we want a given SalesOrder and the contacts of its BusinessPartner in one request. We will achieve this using $expand.
2. With $expand: /sap/opu/odata/IWBEP/GWSAMPLE_BASIC/SalesOrderSet('0500000000')?$expand=ToBusinessPartner/ToContacts
Again, hitting this URL will hit our breakpoint. However, this time both IV_SOURCE_NAME and IT_NAVIGATION_PATH have different values (see screenshots below):
This basically tells us from the source "BusinessPartner" we navigated to the contacts. However, this is not what I expected. I expected that using $expand in this scenario would be equal to calling our first URL from above in Step 1 (/sap/opu/odata/IWBEP/GWSAMPLE_BASIC/SalesOrderSet('0500000000')/ToBusinessPartner/ToContacts).
Instead, when using $expand in our scenario it’s basically equal to calling the URL /sap/opu/odata/IWBEP/GWSAMPLE_BASIC/BusinessPartnerSet('0100000000')/ToContacts, the explanation comes next.
3. Behind the scenes: /sap/opu/odata/IWBEP/GWSAMPLE_BASIC/BusinessPartnerSet('0100000000')/ToContacts
So, when using $expand, we now know what is actually called behind the scenes by the Gateway. Well, let’s prove this in the debugger by calling /sap/opu/odata/IWBEP/GWSAMPLE_BASIC/BusinessPartnerSet('0100000000')/ToContacts directly:
As you can see the result is equal to what we had in Step 2 – and that’s the prove:
However, this time for some reason the TARGET_TYPE_NAMESPACE is filled correctly – which I can’t explain :-)
I’m sure there is a good reason for the different values passed to the parameters – but I don’t know that reason :-)
Anyway… I’m aware of this now and I hope you are as well.
I have written a odata service in recently installed gateway system which is SAP NETWEAVER VERSION 7.4 SP8. After registering the service when I tried to open the SAP Gateway client I couldnt find any session opened. When tried to click SAP Gateway client couple of times , I see a popup saying that the maximum GUI sessions have exceeded.But I dont find those many sessions opened.What could be the issue ? Could anybody please help me out here!!
Hi,
Could someone help me with this issue please?
Our business users access Enterprise Portal to run BW Reports. This creates a new RFC connection in the BW ABAP backend and I could see the connection in the SM04 and SMGW screens. However some of these connections are not closed. They remain there forever until it reaches the maximum number of RFC connections and no users could run reports anymore.
Also, from the SMGW screen, when I click on "Go To > Logged on Clients", I could see list of clients, some of which are few days old. Even these are not closed and at some point they reach the maximum limit and below errors start appearing in SM21:
Maximum no. 300 of systems reached
As a workaround, we are currently doing an "End Session" in SM04 and "Delete Client" in SMGW
I don't want to increase the count in the parameters for maximum RFC's or maximum Clients' because if the connections are not closed, they would reach maximum limit again. I would like to understand why these connections are not closed.
Another interesting thing is our users also connect to ERP and SRM exactly the same way and we don't have any problems there. In fact in those system's SM21 logs I could see these messages:
HTTP/RFC session has been deleted following timeout.
I don't see similar messages in BW.
Your help will be much appreciated.
Thanks.
Aneeth
Hi Experts,
I am trying to understand $Batch operation by executing standard service GWSAMPLE_BASIC to check Batch processing by following below link
$batch Processing - SAP Gateway Foundation (SAP_GWFND) - SAP Library
I am getting below error, can any one please help me with the solution.
HTTP Request :-
https://<host>:<port>/sap/opu/odata/IWBEP/GWSAMPLE_BASIC/$batch
--batch_005056A5-09B1-1ED1-BF82-409B26A80300
Content-Type: multipart/mixed; boundary=changeset_005056A5-09B1-1ED1-BF82-409B26A80301
--changeset_005056A5-09B1-1ED1-BF82-409B26A80301
Content-Type: application/http
Content-Transfer-Encoding: binary
Content-ID: 100
POST SalesOrderSet HTTP/1.1
Content-Type: application/atom+xml
Content-Length: 1021
<atom:entry xmlns:atom="http://www.w3.org/2005/Atom">
<atom:content type="application/xml">
<m:properties xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices">
<d:SalesOrderID></d:SalesOrderID>
<d:Note>Deliver as fast as possible</d:Note>
<d:NoteLanguage>EN</d:NoteLanguage>
<d:CustomerID>0100000000</d:CustomerID>
<d:CustomerName>SAP</d:CustomerName>
<d:CurrencyCode>EUR</d:CurrencyCode>
<d:GrossAmount>25867.03</d:GrossAmount>
<d:NetAmount>21737.00</d:NetAmount>
<d:TaxAmount>4130.03</d:TaxAmount>
<d:LifecycleStatus>N</d:LifecycleStatus>
<d:LifecycleStatusDescription>New</d:LifecycleStatusDescription>
<d:BillingStatus/>
<d:BillingStatusDescription>Initial</d:BillingStatusDescription>
<d:DeliveryStatus/>
<d:DeliveryStatusDescription>Initial</d:DeliveryStatusDescription>
<d:CreatedAt>2015-03-22T23:00:00.0000000</d:CreatedAt>
<d:ChangedAt>2015-03-22T23:00:00.0000000</d:ChangedAt>
</m:properties>
</atom:content>
</atom:entry>
--changeset_005056A5-09B1-1ED1-BF82-409B26A80301
Content-Type: application/http
Content-Transfer-Encoding: binary
POST $100/ToLineItems HTTP/1.1
Content-Type: application/atom+xml
Content-Length: 1021
<atom:entry xmlns:atom="http://www.w3.org/2005/Atom">
<atom:content type="application/xml">
<m:properties xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices">
<d:SalesOrderID></d:SalesOrderID>
<d:ItemPosition></d:ItemPosition>
<d:ProductID>HT-1001</d:ProductID>
<d:Note>EPM DG: SO ID 0500000000 Item 0000000020</d:Note>
<d:NoteLanguage>EN</d:NoteLanguage>
<d:CurrencyCode>EUR</d:CurrencyCode><d:GrossAmount>2972.62</d:GrossAmount>
<d:NetAmount>2498.00</d:NetAmount>
<d:TaxAmount>474.62</d:TaxAmount>
<d:DeliveryDate>2015-03-29T22:00:00.0000000</d:DeliveryDate>
<d:Quantity>2</d:Quantity>
<d:QuantityUnit>EA</d:QuantityUnit>
</m:properties>
</atom:content>
</atom:entry>
--changeset_005056A5-09B1-1ED1-BF82-409B26A80301--
--batch_005056A5-09B1-1ED1-BF82-409B26A80300--
-------------------------------------------------------------------------------------------------------------------------
Screenshot of Error :-
Thanks in Advance.
Hi all,
We are trying to test My Inbox Fiori app in our system.
We're following the How-To manual, and now we're on step #4: Fiori My Inbox - Step 4. Testing My Inbox
When we try to start the SAP Fiori Launchpad, we're receiving an error:
The BADI /UI5/BADI_CONFIG_HTTP_HANDLER is not available into the system:
I think we have all the necessary SC installed:
Any idea??
Thanks,
Miguel Angel.
Hello All,
i have few questions, as i was asked to instal standalone gateway 2.0
1. Is there any configuration guide for Standalone SAP Gateway 2.0 SP12 on Linux based on SAP NW 7.5 ?
2. How can i connect and configure gateway ? It doesn't have DB and I expect that it will be only service running on OS but how can I connect to this gateway ?
3. Will there be enough only to install standalone GW 2.0 and to backend systems implement SP IW_BEP ? or is there some other activity needed ?
on marketplace i've found only configuration if i use embedded gateway (go to SPRO ...) but nothing about hub solution.
Thank you
Hi ,
I am planning to install SAP netweaver gateway on a separate server , is there any Licensing or cost required to perform that?
Regards,
Ahmed Sobhi
Tags edited by: Jitendra Kansal
Hi Colleagues
We are trying to position SAP Fiori at a customer who is already licensed for SAP Business Suite. We were informed that SAP Netweaver Gateway is free for licensed SAP Business Suite customers? Is this correct? If yes, do these customers just go and download the software from the SAP Service Market Place with their S User or do they need to follow a specific process?
Any information or guidance will be appreciated.
Regards
Nishan Naicker
The document ( How to Fine-Tune the Execution of SADL-Based Gateway Services - Using the Query Options API, SAP NetWeaver 7.4 SP10 and higher Document Version: 7.4 SP10 V1 – 2015-03-09) states, that if one generates SADL based Odata services from a CDS View via SEGW,
the underlying and automatically generated model class (MPC) will implement the interface 'if_sadl_gw_query_options'.
Unfortunately this does not happen in our system (7.5 SP1) at all. The interface is missing in the generated MPC class.
Which steps have to be taken to enable that feature, or if that functionality is not available anymore under 7.5, what is best practice to customize query options in SADL based OData services?
Hi folks,
I am having a requirement to get sharepoint lists into SAP. I have created already a odata model based on XML output of the sharepoint db. I am struggling now to get the data from sharepoint into SAP.
Most examples which I found so far are working the other way round, so SAP data is offered to outside world.
Anybody any idea how I can do this? I guess somehow I have to trigger the sharepoint services like List, but I have no clue how.
Any idea, help, suggestion is much appreciated.
Regards, Thomas
Dear SAP Gurus,
We have a requirement to upload images into SAP DMS using UI5 application. I've checked on UI5 and we can pass a File object as shown below to Gateway. I'm using
There are many threads on passing images to Gateway but I'm unable to figure out how can we use the Image object in Gateway to create a SAP DMS document. I checked this thread that talks about uploading PDF in DMS but does not explain on how to create the document in DMS.
Is there any way to create documents into SAP DMS using Image as BINARY/BASE64 OR XSTRING/STRING. Please note I cannot pass image file location as C:\Image\sap.jpg
Regards,
Umesh
Introduction
Part 1 of this series can be found here if you have not seen it yet:
In Part 1 we discussed development patterns in SAP Gateway and how we can achieve re-use and business logic encapsulation.
Two concepts we covered were a “search pattern” where we used Dynamic SQL to retrieve entity sets and a class hierarchy to encapsulate business logic and separate out functions on a module and gateway level.
In this blog I’d like to clarify and enhance the discussion by covering different options for Search and how to do Service Inclusion for re-use purposes.
In Part 1 we covered a possible class hierarchy where we could gain re-use and business logic encapsulation across our OData services and also included SAP module specific functions.
We also covered a generic search pattern that uses Dynamic SQL, that is ABAP code where you build up your own query and execute the SQL statements by manipulating “From” “Where” clauses.
The dynamic SQL doesn't sit well with a lot of people and here a few reasons why:
This is an example I put together using Reporting Framework in CRM. We created a new class "ZCL_ODATA_QRY_RF" which designates this class is coupled with the "Reporting Framework". It still inherits from our ZCL_CRM_ODATA_RT class.
We have a simple constructor that takes in a CRM BOL query and object type ( like a Business Activity BUS2000126 ) and instantiates a instance of of the IO_SEARCH class provided by SAP.
And of course a "Search" method that takes in some query parameters, the IS_PAGING structure from our OData service and another flag that allows to return only the GUID's as a result rather than all the functional data.
This is our search method implementation:
METHOD search. DATA: lt_return TYPE bapiret2_tab, ls_message_key TYPE scx_t100key, lv_max_hits TYPE i. FIELD-SYMBOLS: <result_tab> TYPE STANDARD TABLE. IF it_query_parameters IS INITIAL. RETURN. ENDIF. CALL METHOD gr_search->set_selection_parameters EXPORTING iv_obj_il = gv_query iv_obj_type = gv_object_type it_selection_parameters = it_query_parameters IMPORTING et_return = lt_return EXCEPTIONS partner_fct_error = 1 object_type_not_found = 2 multi_value_not_supported = 3 OTHERS = 4. READ TABLE lt_return ASSIGNING FIELD-SYMBOL(<fs_message>) WITH KEY type = 'E'. IF sy-subrc = 0. ls_message_key-msgid = 'CLASS'. ls_message_key-msgno = 000. RAISE EXCEPTION TYPE /iwbep/cx_mgw_busi_exception EXPORTING textid = ls_message_key. ENDIF. IF iv_keys_only = abap_true. CALL METHOD gr_search->get_result_guids EXPORTING iv_max_hits = lv_max_hits IMPORTING et_guid_list = rt_guids et_return = lt_return. READ TABLE lt_return ASSIGNING <fs_message> WITH KEY type = 'E'. IF sy-subrc = 0. ls_message_key-msgid = 'CLASS'. ls_message_key-msgno = 000. RAISE EXCEPTION TYPE /iwbep/cx_mgw_busi_exception EXPORTING textid = ls_message_key. ENDIF. ELSE. CALL METHOD gr_search->get_result_values EXPORTING iv_max_hits = lv_max_hits IMPORTING et_results = rt_results et_guid_list = rt_guids et_return = lt_return. READ TABLE lt_return ASSIGNING <fs_message> WITH KEY type = 'E'. IF sy-subrc = 0. ls_message_key-msgid = 'CLASS'. ls_message_key-msgno = 000. RAISE EXCEPTION TYPE /iwbep/cx_mgw_busi_exception EXPORTING textid = ls_message_key. ENDIF. ENDIF. ********************************************************************** * Process Top / Skip tokens for paginglts ********************************************************************** IF is_paging-skip > 0. DELETE rt_results FROM 1 TO is_paging-skip. DELETE rt_guids FROM 1 TO is_paging-skip. ENDIF. IF is_paging-top > 0. DELETE rt_results FROM ( is_paging-top + 1 ). DELETE rt_guids FROM ( is_paging-top + 1 ). ENDIF. ENDMETHOD.
So now when you want to execute the search in your concrete class, you can consume the SEARCH method in the inherited Search Framework plugin you've created:
METHOD /iwbep/if_mgw_appl_srv_runtime~get_entityset. DATA: lt_query_parameters TYPE genilt_selection_parameter_tab, ls_query_parameter LIKE LINE OF lt_query_parameters, lt_sort TYPE abap_sortorder_tab, ls_sort TYPE abap_sortorder. FIELD-SYMBOLS: <fs_results> TYPE STANDARD TABLE. CREATE DATA er_entityset TYPE TABLE OF (gv_result_structure). ASSIGN er_entityset->* TO <fs_results>. ********************************************************************** * Navigation Path from an Account ********************************************************************** READ TABLE it_key_tab ASSIGNING FIELD-SYMBOL(<fs_key>) WITH KEY name = 'AccountId'. IF sy-subrc = 0. ls_query_parameter-attr_name = 'ACTIVITY_PARTNER'. ls_query_parameter-sign = 'I'. ls_query_parameter-option = 'EQ'. MOVE <fs_key>-value TO ls_query_parameter-low. APPEND ls_query_parameter TO lt_query_parameters. ENDIF. ********************************************************************** * Process Filters ********************************************************************** LOOP AT it_filter_select_options ASSIGNING FIELD-SYMBOL(<fs_filter_select_option>). CASE <fs_filter_select_option>-property. WHEN 'ProcessType'. LOOP AT <fs_filter_select_option>-select_options ASSIGNING FIELD-SYMBOL(<fs_select_option>). MOVE-CORRESPONDING <fs_select_option> TO ls_query_parameter. ls_query_parameter-attr_name = 'PROCESS_TYPE'. APPEND ls_query_parameter TO lt_query_parameters. ENDLOOP. WHEN OTHERS... .....<DO SOME MORE STUFF HERE TO HANDLE FILTERS>.... ENDCASE. ENDLOOP. CALL METHOD search EXPORTING it_query_parameters = lt_query_parameters iv_keys_only = abap_false is_paging = is_paging IMPORTING rt_results = <fs_results>. ....COPY THE RESULTS TO THE EXPORT TABLE ETC....
Whilst this is a brief example, it shows the possibility of plug and play type frameworks for your OData services rather than tackling dynamic SQL that was included in the first part of this blog series.
If you've implemented a similar pattern I would love to hear from you with details about what you have put together..
Service Inclusion is the process of including another Service Model in your SAP Gateway Service Builder project, like this:
Effectively, it allows you to access the Entities in service B directly from service A:
This approach maximises the re-use of your services, not only will you get re-use and business logic encapsulation in the class hierarchy, your design time re-use is maximised as well.
There are a couple of things to watch out for.
Referring to the diagram above, when you execute the URI for “/SALES_ORDER_SRV/Accounts(‘key’)/SalesOrders” the navigation path is not populated, a Filter parameter is passed to the SalesOrder GET_ENTITYSET where you now must filter the Sales Orders by the Account ID.
What I mean by “limitation” is that usually you will be passed a navigation path ( IT_NAVIGATION_PATH) where you can assess where the navigation came from and what the keys were, in this use case you are missing the KEY_TAB values in the IT_NAVIGATION_PATH importing table in your GET_ENTITYSET method.
For this to work you must also set the referential constraint in the SEGW project and build your Associations as an external reference, like this:
When the SAP Gateway framework attempts to assess which model reference your entity belongs to so it can execute a CRUD function, the underlying code loops over the collection of model references you have included ( in Service B ) and tries to find the first available model where your external navigation entity is located.
In case you have implemented the same entity in multiple included services, SAP picks up the first available which can lead to surprises if you're wondering why your debug point is not being triggered during a GET_ENTITYSET method call in the wrong service
If you haven't used this feature yet it provides a really great way to maximise re-use of your OData services, just a side note here; a really good use for this pattern is your common configuration entity model, things such as Country and State codes, Status Key Value pairs etc,
I have built a common service before that reads all of the configuration we use across different Fiori applications and are contained in one common service.
This way i simply "include" the common service so i don't have to keep implementing the same entity set or function import in different services.
I have put together this blog to try and clarify and provide a different perspective on Search capability within our OData services. I know there are some of us out there that dislike the dynamic SQL scenario and for good reason.
My aim is to encourage some thought leadership in this space, so those customers tackling their OData service development can at least learn from our experience and embrace re-use patterns to really try and reduce TCO not to mention accelerate UX development in parallel.
As always, I'd love to hear from our community about other development patterns you've come up with so please share your thoughts and learnings, it's really important as our customers start to ramp up their OData and Fiori development.
Hi All,
The class CL_TECHMON_GW_DATA is used for Technical monitoring in Solman system. I am keen to know the corresponding project name.
I tried using table /IWBEP/I_SBD_SV but the project is not present there.
My requirement is to customize the existing service to accomodate some more fields in the service.
If you could kindly guide that would be great.
Thanks,
Koushik
Hello,
i work on "My Shopping Cart" SRM Fiori application.
I need to add a customer field among an entity type's properties. The ABAP structure type name is /SRMNXP/S_SC_HEADER:i added my CUF in its include /SRMNXP/INCL_CUS_MINISC_HDR.
In SEGW, i created a Z project and i redefined the SAP GW OData technical service name /SRMNXP/SHOPPING_CART.
Then, i imported the properties from data source in order to add my CUF.
Finally, i generated the runtime objects (artifacts).
Nevertheless, data provider base and extension classes failed due to syntax error (The final class "/SRMNXP/CL_DATA_ACCESS_BASE" cannot have any subclasses).
What am i missing?
Moreover, after solving this point, is there any other steps to realize?
One final question: where can i look at standard entity types for a technical service (as the way displayed in SEGW after OData service redefinition?)
Thank you for you help.
Regards.
Laurent.