J'ai essayé d'accéder au système sur site à partir d'une application dans SAP Cloud Platform.
Créons une application JAVA simple pour vérifier la fonction et accéder au système ABAP sur site depuis SAP Cloud Platform.
Je présenterai brièvement le fonctionnement de l'application.
Il s'agit de l'écran d'authentification de SAP Cloud Platform.
Entrez n'importe quel texte et appuyez sur le bouton d'envoi pour appeler le module fonction STFC_CONNECTION
.
La chaîne de caractères saisie dans Input Text est transmise au paramètre REQUTEXT
lors de l'appel.
La valeur renvoyée par le module fonction STFC_CONNECTION
s'affiche.
RESPTEXT
affiche la version de SAP Netweaver, la date et l'heure actuelles et des informations sur l'utilisateur qui a utilisé l'accès.
Pour vous connecter à JCo, transmettez le nom de destination défini dans SAP Cloud Platform à l'argument de JCoDestinationManager # getDestination
et obtenez l'objet JCoDestination
. Vous pouvez vous connecter au serveur ABAP sur site à partir de cet objet via SAP Cloud Connector.
Voici un exemple où le nom de destination défini dans SAP Cloud Platform peut être obtenu avec p.getProperty (JCO_DESTINATION)
.
return JCoDestinationManager.getDestination(p.getProperty(JCO_DESTINATION));
Plus précisément, il a été mis en œuvre sous la forme suivante. En fait, il devrait être plus facile à utiliser en créant une interface et en en héritant, mais je l'omettrai car il s'agit d'un essai.
StfcConnection.java
public class StfcConnection {
public static final String PRAM_REQUTEXT = "REQUTEXT";
public static final String PRAM_ECHOTEXT = "ECHOTEXT";
public static final String PRAM_RESPTEXT = "RESPTEXT";
private static final String FUNCTION_NAME = "STFC_CONNECTION";
private static final String JCO_DESTINATION = "jco.destination";
private static final String JCO_PROPERTIES = "jco.properties";
private String propFilePath;
private String requText;
private String echoText;
private String respText;
public StfcConnection(String propDirPath, String requText) {
this.propFilePath = Paths.get(propDirPath, JCO_PROPERTIES).toString();
this.requText = requText;
}
public void execute() throws JCoException, FileNotFoundException, IOException {
JCoDestination d = getDestiation();
JCoFunction f = d.getRepository().getFunction(FUNCTION_NAME);
//Réglages des paramètres d'appel du module de fonction
f.getImportParameterList().setValue(PRAM_REQUTEXT, requText);
//Exécution de module à usage général
f.execute(d);
//Acquisition des résultats d'exécution du module fonction
JCoParameterList exports = f.getExportParameterList();
echoText = exports.getString(PRAM_ECHOTEXT);
respText = exports.getString(PRAM_RESPTEXT);
}
private JCoDestination getDestiation() throws FileNotFoundException, IOException, JCoException {
InputStream is = new FileInputStream(propFilePath);
Properties p = new Properties();
// load jco destination name
p.load(is);
is.close();
return JCoDestinationManager.getDestination(p.getProperty(JCO_DESTINATION));
}
public String getEchoText() {
return echoText;
}
public String getRespText() {
return respText;
}
}
J'ai pu accéder avec succès au système ABAP sur site depuis la plateforme SAP Cloud via SAP Cloud Connector. J'ai senti que la mise en œuvre côté JAVA, y compris l'authentification, était devenue facile.
J'ai implémenté l'authentification programmatique en me référant à la page d'aide suivante.
Pour l'implémentation, nous avons préparé une classe dédiée et l'avons appelée à partir de chaque servlet.
Authenication.java
public class Authenication {
private final static Logger logger = LoggerFactory.getLogger(Authenication.class);
protected static void login(String user) throws LoginException {
if (user == null) {
logger.debug("User is not logged in.");
//authenticate the User
LoginContext loginContext = LoginContextFactory.createLoginContext("FORM");
loginContext.login();
}
}
protected static void logout(String user) throws LoginException {
if (user != null) {
logger.debug("User is logged in.");
//logout
LoginContext loginContext = LoginContextFactory.createLoginContext("FORM");
loginContext.logout();
}
}
protected static boolean isLoggedin(HttpServletRequest request) {
if (request.getRemoteUser() == null) {
return false;
} else {
return true;
}
}
}
Le code source a été téléchargé sur GitHub. Pour votre information. GitHub - ScpJcoTest1
Recommended Posts