Call RFC from EJB using SSO
Can anyone point me in the right direction on the best practice for calling an RFC using SSO from an EJB?
When using the local interface for the EJB, the only solution I see is to pass the authenticated IUser instance from the portal component to the EJB business method through the method signature.
I am guessing that there is a better way to get access to an authenticated user in the EJB container.
Thanks for the reply.
Actually I was able to solve the problem last night. To get SSO to work in my local EJBs I created an RFC destination in the destination service using the visual administrator. I then used the destination service at runtime to pull the system definition from the J2EE system definitions store instead of the portal system landscape definitions and my connection object was created as expected.
Here is the code to create the connection in my EJB business method:
//get the user
IUser user = UMFactory.getUserFactory().getUserByUniqueName(this.myContext.getCallerPrincipal().getName());
// get the destination service
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sapportals.portal.prt.registry.PortalRegistryFactory");
InitialContext context = new InitialContext(env);
IDestinationsService destinationsService =
(IDestinationsService) context.lookup(IDestinationsService.SERVICE_JNDI_NAME);
// define a destination filter to restrict to the RFC defined destinations
DestinationFilter destinationFilter1 =
new DestinationFilter(DestinationFilter.SOURCE_J2EE_DESTINATION_SERVICE, DestinationFilter.TYPE_SAP);
// get a user specific connection
IConnection connection = destinationsService.getConnection(user, "ECC", destinationFilter1);
Similar Messages
-
How to Call RFC from PortalService using a ServiceUser
Hi,
I have some code that calls an RFC using JCO.
(I have other code I wrote using JCA to connect from a portlet, but that requires a Session and uses an IProfile)
Our security team wants me to use a Serviceuser instead. But I can't seem to figure out how to use a ServiceUser to call an RFC.
If I can just get an IConnection, i can use the rest of my JCA code to call the RFC. But I'm stuck getting the connection
The closes I've gotten is this:
com.sapportals.portal.security.usermanagement.IUser user = WPUMFactory.getServiceUserFactory().getServiceUser("myserviceuser");
IConnectorGatewayService cgs=PortalRuntime.getRuntimeResources().getService (IConnectorGatewayService.KEY);
ConnectionProperties cp=new ConnectionProperties(new Locale(),user);
IConnection conn=cgs.getConnection("mySAPsystemalias",cp);
There are two problems with this (or maybe more)
The connectionproperties takes an IProfile not an IUser
I also thought I needed a com.sap.security.api.IUser, not the one above.
Can someone point out what is wrong or a different way?
thanks
Chris BuchholzChris,
You could always use a JCO JNDI connection, in which case you dont need anything other than a HashMap of the the following properties
client
messageserverHost
systemLangauge
group
type
systemType
systemId
serverPort
username
password
The username and password you supply can be a service user or a normal logon user as far as I know.
Cheers,
Steve -
Hi,
I have a scenario where I need to write an EJB from where I need to execute a JCO call to an RFC. This RFC takes an XString as input (this is the input file) and returns a XString from which an XML needs to be generated.
Can anyone suggest how to go about this?
Thanks,
ShiladityaJRA is the way to go....
check my blog on this...
/people/amol.joshi2/blog/2006/11/27/alerts-from-adapter-modules--the-jra-way -
Calling BRM from UDF using JNDI lookup with @EJB annotation
Hi Experts
I am trying to implement a UDF to invoke my BRM Rules set via JNDI Lookup instead of a SOAP Channel lookup.
I have had a look at the following links/docs:
Calling BRM from UDF using Public API
http://www.gleanster.com/system/resources/W1siZiIsIjIwMTIvMDgvMDcvMjAvNDcvNTAvNDMvVGhpbmdzX1lvdV9TaG91bGRfS25vd19hYm91dF9TQVBfTmV0V2VhdmVyX0JSTS5wZGYiXV0/Things%20You%20Should%20Know%20about%20SAP%20NetWeaver%20BRM.pdf
For item 1 above, the example looks really good, but it doesnt explain how I get access to the following required imports from my UDF:
import com.sap.brms.qrules.ejb.*;
import com.sap.brms.qrules.engine.AbstractProject;
import com.sap.brms.qrules.engine.RuleEngine;
import com.sap.brms.qrules.engine.RulesetContext;
import javax.ejb.EJB;
The second document is really good as well, but I could not figure out how to get it to work from my UDF.
So, can anyone help me to understand specifically what is required to get this to work?
Is is possible to invoke the rule set from my UDF?
How do I give my UDF access to all the required jars/imports?
I have manage to create a new DC (Development Component) with a public part and this enables me to get my code to compile on my local PC but I am not able to activate it due to the server not having access to the same java packages as my local copy.
Any help would be greatly appreciated.You resolve the dependency by importing the required jars with using the dependency tab for the mapping program.
As stipulated before, I have managed to resolve the dependency issue but I have now getting the same error as in the forum: Calling BRM from UDF using Public API
The specific error is:
com.sap.engine.services.cross.PortableRemoteObjectContainer.narrow(PortableRemoteObjectContainer.java:238)
Has anyome manage to get invoke a BRM Ruleset using JNDI? -
Call RFC from DELPHI Windows Services Program
Hi all,
Are there any way to call RFC from DELPHI Windows Services Program?
Best regards.
Munur EBCIOGLUHi again Bhagat,
1. Yes, it's included on 7.4 ABAP Stack (SAP NetWeaver 7.4 SP8 - Optimized for SAP HANA, Cloud and Mobile - Service Release 2 available now!). In a recent customer, SAP licences GW by user but there are other license model like session licensing: https://store.sap.com/sap/cp/ui/resources/store/html/SolutionDetails.html?pid=0000009470&catID=&pcntry=US&sap-language=EN&_cp_id=id-1385059687642-0
2. You could install as an AddOn on your 7.3 system, there are many options depending on your desired infrastructure: SAP Gateway deployment options in a nutshell For example our customer have deployed Central Hub Gateway in a standalone stack ABAP to act as an standalone oData bridge between ABAP/nonAbap systems.
3. You could deploy SAPUI5 apps in 7.x, Java Web Servers or HTTP Web Servers. You must consider your SSO scenario:
- SSO Logon Tickets. You will need to configurate SSO Logon Tickets between SAP NW Portal & SAP NW Gateway & your backend (ECC, etc). In order to pass SAP session cookie you will need setup SAP Web Dispacther and access portal & gateway throught SAP WD with the same domain.
- SAML2 Tickets. This scenario lets you provide portal & gateway on different domains enabling SSO. You could configure SAP NW Portal as an Identity Provider and other systems must trust SAP Portal as IdP.
Cheers -
How to call RFC from Power Builder
Hi,
I am using Power Builder Tools and I want to know how can i call RFC from Power Builder
Thanks for ur replyHi,
Although I have not worked with Powerbuilder, I am sure if you have a certain level of proficiency with it, you will be able to code your logic that will call your wrappers written in VB/C/.NET etc. Check out the wonderful weblog by Thomas Jung on integrating ActiveX controls with ABAP Control Framework at https://www.sdn.sap.com/sdn/weblogs.sdn?blog=/pub/wlg/995. [original link is broken] [original link is broken] [original link is broken] [original link is broken] [original link is broken] [original link is broken] [original link is broken] [original link is broken] [original link is broken]
Do get back if you have further queries.
Regards
Message was edited by: Shehryar Khan -
Example-- Call RFC from external Java Application
Update: I need code example to call RFC from External Java application. Can onybody help me?
RGDS
RP
hi all.
i want to create my own log for each interface.
i saw this blog:
/people/michal.krawczyk2/blog/2006/09/20/xi-abap-mapping-logs--more-standard-better-visibility
my doubt is how to catch the error that i see in SXI_MONITOR y put it in a Sub-Objetc.
For example: in sxi_monitor i get the error for my interface NMUCustomer: "No receiver could not be found" or "Error Mapping Traformation".
I created an Object called ZNMUCUSTOMER and a Sub-Objetc called ZERROR.
what i must do to get the error I see in monitor and assign it to Sub-Object??
Rgds.
Message was edited by:
Rodrigo Pertierra
Message was edited by:
Rodrigo Pertierra
Message was edited by:
Rodrigo PertierraHi,
Oh, you are using ABAP mapping ......
then use the following in ABAP mapping ..
TRACE1,TRACE2,TRACE3.... for trace level 1,2,3......
http://help.sap.com/saphelp_nw04/helpdata/en/ba/e18b1a0fc14f1faf884ae50cece51b/content.htm
https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/5c46ab90-0201-0010-42bd-9d0302591383
https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/866ce290-0201-0010-338f-b8c3553aaa0f
Regards
Chilla -
Calling RFC from custom connector
Hi,
I am developing a custom connector for UWL to get tasks from 3rd party system.
I need to call a RFC from backend SAP system to complete Input data for this 3rd party provider.
I assume that I have to make an RFC call from getItems() method of connector.
Any idea how to call a RFC from UWL custom connector code?
Please help.
Thanks & Regards,
AmeyHello Karri,
Yes, I am aware of two ways of calling RFCs from Java code.
Normally, I use following approach to call RFCs from my other Portal Components (JSPDynpages): -
IPortalComponentRequest request = (IPortalComponentRequest) this.getRequest();
IPortalComponentContext myContext = request.getComponentContext();
IPortalComponentProfile myProfile = myContext.getProfile();
String sapSystem = myProfile.getProperty("SystemIdentifier");
ISystemLandscapeWrapper landscapeWrapper = (ISystemLandscapeWrapper) UMFactory.getSystemLandscapeWrappers().get(0);
ISystemLandscapeObject systemLandscapeObject = landscapeWrapper.getSystemByAlias(sapSystem);
IJCOClientService clientService = (IJCOClientService) PortalRuntime.
getRuntimeResources().getService(JCO_CLIENT);
request.getNode().putValue(LOCALE_NODE_KEY, Locale.ENGLISH);
IJCOClientPoolEntry poolEntry = clientService.getJCOClientPoolEntry(sapSystem,request);
JCO.Client client = poolEntry.getJCOClient();
client.connect();
IRepository repository = JCO.createRepository("repository", client);
IFunctionTemplate functionTemplate = repository.getFunctionTemplate(Z_BAPI_EMP_GBU_GET);
JCO.Function function = new JCO.Function(functionTemplate);
JCO.ParameterList importList = function.getImportParameterList();
importList.setValue("US", "OBJTYP");
importList.setValue(request.getUser().getUniqueName(), "USRID");
client.execute(function);
JCO.ParameterList outputList = function.getExportParameterList();
gbuCountryBean.setGbu(outputList.getString("GBU"));
gbuCountryBean.setCountry(outputList.getString("COUNTRYCODE"));
gbuCountryBean.setPersArea(outputList.getString("PERS_AREA"));
gbuCountryBean.setCompanyCode(outputList.getString("COMPANYCODE"));
When I tried implementing same in UWL custom connector, I am not able to get instance of 'request' object.
Any hints/ideas on this?
Hence as an temporary alternative, I wrote following to successfully execute RFC.
mConnection = JCO.createClient(sapclient, sapuser,
sappassword, "EN", saphost, sapsysnumber);
mConnection.connect();
mRepository = new JCO.Repository("GetLeaveRequestFlag", mConnection );
IFunctionTemplate ftemplate = mRepository.getFunctionTemplate(Z_BAPI_CHECK_LR_TO_APPROVE);
myFunction = new JCO.Function(ftemplate);
JCO.Field OBJECT_TYPE = myFunction.getImportParameterList().getField("OBJECT_TYPE");
OBJECT_TYPE.setValue("US");
JCO.Field USERID = myFunction.getImportParameterList().getField("USERID");
OBJECT_TYPE.setValue(p_userID);
mConnection.execute(myFunction);
JCO.Field leaveRequestFlag = myFunction.getExportParameterList().getField("FLAG_LEAVE_REQUEST_RECORD");
mConnection.disconnect();
But only catch here is that I need to create & maintain SAP logon credentials for a particular user manually.
It is not possible to single sign on connector user into SAP system (like its done above).
Any thoughts on this?
Thanks & Regards,
Amey -
Calling RFCs from Web through XI
We have used SAP.NET connector in the past to call RFCs from ASP.NET pages from our public website. We have now decided to use XI as the enterprise integration engine going forward.I am interested to know whether anybody has used XI to call RFCs from ASP.NET webpages. I do know that the XI to SAP calls would be made through RFC adapter.Will the communication from ASP.NET page to XI be thourgh the HTTP adapter ? or is there any other smarter way. Can somebody point me to sample code for the calls through http adapter or a how to guide?
cheers
RameshHi
U have scenario like this ASP.NET->XI->RFC, that means u will send a value from the ASP.NET page to RFC thru XI and then this RFC will give result which will come to ASP.NET frontend.
For this go thru this blog it will help u to understand how to communicate from ASP.NET to XI
<b>https://www.sdn.sap.com/sdn/weblogs.sdn?blog=/pub/wlg/1442</b [original link is broken] [original link is broken] [original link is broken] [original link is broken] [original link is broken] [original link is broken] [original link is broken] [original link is broken]> [original link is broken]
Code Sample is provided in the blog.
Hope it helps.
Regards
Arpit Seth -
Sample Java code and detail to call RFC from Java clas developed in Eclipse
Hi All,
I am new to Java. I have downloaded Eclipse IDE and planning to use for developing Java application to send data to SAP by calling RFC JCO Interface.
I need a sample java code/tutorial step by step to create Java class for simple example to call RFC from Java.
I have downloaded SAPJCO3 from service market place.
Kindly help me to send steps involved to configure for JCO with my Eclipse with JCO.
Thanks in advance.
SharmaHi Sharma,
Please have a look at [Example: Using Generated Proxies to Call Function Modules |http://help.sap.com/saphelp_nw04/helpdata/en/b6/55e3952a902447847066a0df27b0d6/content.htm]
JCo Exceptions : http://help.sap.com/saphelp_nw70ehp1/helpdata/en/f6/daea401675752ae10000000a155106/content.htm
Hope it will helps
Regards
Arun -
Hi,
I have senerio in which i need to call RFC through EJB.
Thanks.
Abhilasha
Edited by: Abhilasha Dahare on Oct 3, 2008 1:29 PMHi,
Go through the following links:
Extract R/3 data via EJB
http://help.sap.com/saphelp_nw04/helpdata/en/35/42e13d82fcfb34e10000000a114084/frameset.htm
Siddharth -
Calling RFC from JSP : development component
Hi everyone,
I created JSP that call RFC from SAP/R3.
I have problem with the DestinationService.
Without DCs, it worked very good.
But since I created a DC for my JSP project, I have exception at run time regarding
the java.lang.NoClassDefFoundError: com/sap/security/core/server/destinations/api/DestinationService.
Eventhough I add the specific jar, I get an excpetion.
Thanks for the help.
DavidGo to the application-j2ee-engine.xml file and add following reference:
<reference
reference-type="weak">
<reference-target
provider-name="sap.com"
target-type="interface">tcsecdestinations~interface</reference-target>
</reference> -
Calling RFCs from Webdypro application!!!!
Can anybody show me a suitable example for calling rfc from webdynpro application.
Hi steve,
Look at this tutorial..
https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.km.cm.docs/library/webdynpro/tutorial on accessing abap functions in web dynpro - 4.htm
https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.km.cm.docs/library/webdynpro/tutorial on handling transactions with bapis in web dynpro - 5.htm
Follow the steps provided in those documents.
You can easily understand how to access ABAP functions from WebDynpro.
Let me know if you need more help on this.
Regards,
Karthick -
JCo 3.0 - RFC call from EJB with SSO
Hello,
I am trying to call abap using JCo 3.0 from EJB (NW CE 1.0). I have configured destination on server with authentication method to use SAP Logon tickets. But when I call my EJB method that looks like this:
JCoDestination dest=JCoDestinationManager.getDestination("RFCCallTest");
JCoRepository repo=dest.getRepository();
JCoFunction f= repo.getFunction("ZMG_RET_NAME");
JCoParameterList in=f.getImportParameterList();
in.setValue(0, "param1");
f.execute(dest);
I get an exception when executing the first line of code:
Message: Exception occurred during lookup of RFC Destination RFCCallTest: No SAP logon ticket found
Category: /System/Security
Location:com.sap.security.core.server.destinations.provider.DestinationsProviderFrame.getDestinationProperties()
When I change the destination authentication method to Technical user it works well.
SSo between the servers works.
This scenarion also works when I use older JCo implementation (2.x)
BR
ViktorHi Bill,
I too faced the same problem for quite some time on SP9. I thought it was the adapter problem that persisted ...but it was not !!
After importing the RFC structure into XI, if the name of the imported RFC program is renamed/changed on R/3 side, then you will get the same error "lookup of binding via CPA-cache failed for AdapterType RFC, AdapterN."
So make sure that RFC program name on the R/3 side was not changed/renamed after you have imported the RFC structure into XI.
If the RFC program name had changed, make sure you reimport the RFC structure to avoid this problem.
Regards,
Sridhar -
Calling Web Service from EJB using HTTP Client
Hi,
Scenario:
I need to Call a Web Service from an EJB Application.I used HttpClient for calling the Web Service in the EJB Application. When i call the execute method of the HttpCLient it throws an exception
The element type "META" must be terminated by the matching end-tag "</META>"
The input XML does not have a node called META.
When i call the Web Service using Http Client form an Java Application it is working fine.
Kindly Suggest me the changes/steps that needs to be done
Regards,
S.V.Satish KumarHi Manish,
SOAP adapter does pass the message to XI (this message contains SOAP envelope although XI expects to get message without it), and during the mapping step i get "Runtime Exception in Message-Mapping transformatio~".
I suppose it's because i created proxy manually. I did so because when i imported WSDL, and tried to generate proxy in CRM, i got an error message that said that proxy couldn't be generated because external definitions are only allowed in XI 3. But my XI version is 3.0! And when I generate the same proxy in my R/3 system that is installed on WAS 640, it works.
What can I do?
Cheers,
Anya.
Maybe you are looking for
-
How to configure for Multiple XML
Hi, We were successful in working with single xml as a input. Now we are using multiple xml as a input for a single transaction. With the references and the suggestion in documents(working with xml files.pdf) related to Documaker we have changed conf
-
Oracle XE on Windows Vista beta 2
Production release of XE on Vista beta 2 runs fine. http://prpi.blogspot.com/2006/06/oracle-xe-on-windows-vista-beta-2.html
-
How do I change the contrast between foreground and background in CS4 workspace menus?
Everyone at my agency who has upgraded from CS3 to CS4 is dismayed to discover that they can not read any tabs on the workspace except the highlighted one. The foreground and background colors are simply too close together for anyone who doesn't have
-
Help with Creating a list based on conditions
Hi, im doing a project in java at college, and this is what the project says; Every November, on the last Wednesday of the month, Salchester Primary School holds its annual school games competition. The school is very small and pupils from all classe
-
Photo booth flash not working on mavericks
the flash is not working please help out