加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

如何在不创建* .JcoDestination文件的情况下使用JCo连接

发布时间:2020-12-15 04:29:27 所属栏目:Java 来源:网络整理
导读:我正在尝试使用JCo连接到SAP ECC 6.0.我正在关注 this教程.但是,有一个注释说: For this example the destination configuration is stored in a file that is called by the program. In practice you should avoid this for security reasons. 这是合理的
我正在尝试使用JCo连接到SAP ECC 6.0.我正在关注 this教程.但是,有一个注释说:

For this example the destination configuration is stored in a file that is called by the program. In practice you should avoid this for security reasons.

这是合理的,也是理解的.但是,没有说明如何设置安全目标提供程序.
我在thread中找到了解决方案,它创建了DestinationDataProvider的自定义实现,并且可以在我的本地机器上运行.但是当我在Portal上部署它时,我得到一个错误,说已经注册了DestinationDataProvider.
所以我的问题是:
如何在SAP Java EE应用程序中存储目标数据?

这是我的代码,以进一步澄清我正在尝试做什么.

public static void main(String... args) throws JCoException {
        CustomDestinationProviderMap provider = new CustomDestinationProviderMap();
        com.sap.conn.jco.ext.Environment.registerDestinationDataProvider(provider);

        Properties connectProperties = new Properties();
        connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST,"host.sap.my.domain.com");
        connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR,"00");
        connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT,"100");
        connectProperties.setProperty(DestinationDataProvider.JCO_USER,"user");
        connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD,"password");
        connectProperties.setProperty(DestinationDataProvider.JCO_LANG,"en");

        provider.addDestination(DESTINATION_NAME1,connectProperties);
        connect();
    }

    public static void connect() throws JCoException {
        String FUNCTION_NAME = "BAPI_EMPLOYEE_GETDATA";
        JCoDestination destination = JCoDestinationManager.getDestination(DESTINATION_NAME1);
        JCoContext.begin(destination);

        JCoFunction function = destination.getRepository().getFunction(FUNCTION_NAME);
        if (function == null) {
            throw new RuntimeException(FUNCTION_NAME + " not found in SAP.");
        }

        //function.getImportParameterList().setValue("EMPLOYEE_ID","48");
        function.getImportParameterList().setValue("FSTNAME_M","ANAKIN");
        function.getImportParameterList().setValue("LASTNAME_M","SKYWALKER");

        try {
            function.execute(destination);
        } catch (AbapException e) {
            System.out.println(e.toString());
            return;
        }

        JCoTable table = function.getTableParameterList().getTable("PERSONAL_DATA");
        for (int i = 0; i < table.getNumRows(); i++) {
            table.setRow(i);
            System.out.println(table.getString("PERNO") + 't' + table.getString("FIRSTNAME") + 't' + table.getString("LAST_NAME")
            +'t' + table.getString("BIRTHDATE")+'t' + table.getString("GENDER"));
        }

        JCoContext.end(destination);
    }

解决方法

好的,所以我得到了这个,并且认为我会分享我的研究.
您需要在Portal中添加自己的目标.为此,您需要访问NetWeaver Administrator,位于:host:port / nwa.所以它会像sapportal.your.domain.com:50000/nwa.

然后你去配置 – >基础设施 – >目的地并在那里添加您的目的地.您可以将大多数字段留空,如Message Server.重要的部分是目标名称,因为它是如何检索它和目标类型,在我的情况下应该设置为RFC目标.尝试ping新创建的目标,以检查其是否正常运行.

最后,你应该能够通过简单地调用来获取目的地:JCoDestination destination = JCoDestinationManager.getDestination(DESTINATION_NAME);因为它被添加到您的Portal环境并从那里进行管理.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读