Quantcast
Channel: SCN : All Content - SAP Gateway
Viewing all 2823 articles
Browse latest View live

getting error that --> '/IWFND/OM_MED_CATAL_ODC_0002_BE' '01' 'DEFAULT' does not exist

$
0
0

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


Note:2241188 for SP13 But I need Same Process Note for SP08 :Fiori runtime error $filter value is cut off on SAP_GWFND SP08

$
0
0

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

Error on $batch POST, system expected the element '{http://www.w3.org/2005/Atom}entry'

$
0
0

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!

How $expand Influences the Importing Parameters of GET_ENTITYSET in SAP Gateway

$
0
0

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).


image001.png



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.


image005.png



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.



image006.png


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:

 

image009.png



While we are in the debugger inside CONTACTSET_GET_ENTITYSET let’s check the two mentioned parameters:


  • IV_SOURCE_NAME==> ”SalesOrder"
  • IT_NAVIGATION_PATH==> two entries, ToBusinessPArtner, ToContacts (see screenshot below)

 

image010.png



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):

 

  • IV_SOURCE_NAME ==> ”BusinessPartner”
  • IT_NAVIGATION_PATH ==> 1 entry, ToContacts (for some reason the TARGET_TYPE_NAMESPACE is not filled)

 

image011.png

 

 

image012.png

 

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:



image013.png



image014.png



As you can see the result is equal to what we had in Step 2 – and that’s the prove:

 

  • IV_SOURCE_NAME ==> ”BusinessPartner”
  • IT_NAVIGATION_PATH==> 1 entry, ToContacts

 


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.

Unable to open SAP gateway client.

$
0
0

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!!

Maximum no. 300 of systems reached

$
0
0

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

Batch processing request error

$
0
0

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 :-

Batch.png

 

 

Thanks in  Advance.

Error when accessing the SAP Fiori Launchpad

$
0
0

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:

Sin título.png

The BADI /UI5/BADI_CONFIG_HTTP_HANDLER is not available into the system:

Sin título.png

Sin título.png

I think we have all the necessary SC installed:

Sin título.png

Any idea??

 

Thanks,

 

Miguel Angel.


Standalone SAP NW Gateway 2.0

$
0
0

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

Licenseing Netweaver gateway

$
0
0

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

SAP Netweaver Gateway Licensing

$
0
0

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

Query Options for SEGW/SADL ODATA Services not available

$
0
0

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?

 

odata implementation in order to get sharepoint data into sap

$
0
0

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

Upload Images into SAP DMS using Gateway/UI5

$
0
0

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

 

UI5.png

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

HTTP Receive failed: Connect to :8000 failed: NIEHOST_UNKNOWN(-2)

$
0
0

Dear Tech Gurus,

 

Below Error snapshot from Gateway client.. It error of HTTP Receive failed: Connect to <host>:8000 failed: NIEHOST_UNKNOWN(-2). I searched SCN but there is not solution I could find.

Did anyone face similar issue or have an idea what needs to done to resolve this ?

 

Thanks in tons.

PG

 

Gateway Issue.PNG


Make your SAP Gateway Work Smarter not Harder – Part 1.2 ) Search Patterns and Service inclusion

$
0
0

Introduction

 

 

Part 1 of this series can be found here if you have not seen it yet:

 

https://scn.sap.com/community/gateway/blog/2016/04/08/making-your-sap-gateway-work-smarter-not-harder-re-use-patternsa

 

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.


 

 

Search Pattern and Class Hierarchy

 

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:

 

  • Code can be difficult to maintain, there are a lot of hard coded variables and requires a deep understanding of the SAP data model.


  • It is easy to go from simple use cases to complex ones and therefore create a larger technical debt than required.


  • There are obviously other choices and where a good "framework" is available there is certainly no rule that says don't use that instead.

 

 

Re-Jigging the Class Hierarchy

 

  • Removing the "Search Pattern" from ZCL_ODATA_RT.  This ensures that only SAP Gateway level functions are encapsulated here, this makes more sense to perform things like "E-Tag" handling rather than search.


  • Have a separate inheritance for the search pattern, in this case I've put a new class in the hierarchy called ZCL_ODATA_QRY_[search_function] where "[search_function]" is a framework specific search pattern. This doesn't have to be module specific, in systems like CRM I have different frameworks like BOL or Reporting Framework that I can re-use here across different modules like Service or Sales.

 

blog_image.png

 

 

Search Pattern - Example with Reporting Framework

 

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.


blog_image.png

 

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.


blog_image.png

 

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.


blog_image.png

 

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....


Service Pattern Summary

 

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

 

Service Inclusion is the process of including another Service Model in your SAP Gateway Service Builder project, like this:

 

blog_image.png

 

 

blog_image.png

 

blog_image.png

 

Effectively, it allows you to access the Entities in service B directly from service A:

 

blog_image.png

 

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.



Limitations / Gotchas

 

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:

 

blog_image.png

 

 

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



 

Service Inclusion Summary


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.




Final Summary


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.

HTTP Receive failed: Connect to :8000 failed: NIEHOST_UNKNOWN(-2)

$
0
0

Hi Expert,

 

I am getting error while clicking entity Sets.

screen shot attached for the same.b.PNG

 

pls help me for resolving this issue.

 

Regards,

 

SAM

Project for CL_TECHMON_GW_DATA

$
0
0

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

Error: key property does not have an output mapping in the query operation

$
0
0

Hi Team,

 

Even thou I have done mapped an input parameter, I am getting below error. Please help.

 

2016-05-10 18_40_06-Win7-DE.png

2016-05-10 18_34_15-Win7-DE.png

 

Thanks,

Madhu M V

need to enhance entity type properties from data model

$
0
0

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.

Viewing all 2823 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>