سؤال

حصلت على سؤال آخر يتعلق بـ JCO ونأمل أن أجد المساعدة.

مع JCO ، يمكنك بسهولة إنشاء اتصال كما هو موضح في أوراق المثال التي جاءت مع مكتبة JCO. لسوء الحظ ، يتم التعامل مع الطريقة الوحيدة بناء اتصال مع ملف خاصية تم إنشاؤها. لن يكون الأمر سيئًا ، إذا لم يكن هناك أي بيانات معقولة فيها. ولكن على الأقل ، فإن كلمة المرور لمستخدم SAP تقف في الملف ، لذلك فهي نقص في الأمان في طريقة التعامل مع الاتصال هذه. يقول دليل JCO ذلك أيضًا:

"بالنسبة لهذا المثال ، يتم تخزين تكوين الوجهة في ملف يطلق عليه البرنامج. في الممارسة العملية ، يجب عليك تجنب ذلك لأسباب أمنية."

ولكن لم يجد حل عمل بعد كل شيء. هناك خيوط نخيل حول هذا الموضوع ، مثل هذا

http://forums.sdn.sap.com/thread.jspa؟messageid=7303957

لكن لا أحد منهم مفيد. لا يمكنني حقًا اكتشاف حل ولا أجد حلاً. في الواقع ، قمت بحل مشكلة الأمان مع حذف الملف بعد إنشاء الاتصال ، لكن هذا ليس حلاً مرضيًا. يجب أن تكون هناك طريقة أفضل للحصول على المعلمة للاتصال ، خاصة عندما يكون في الدليل ، لكن ليس لدي أي غراء.

أي شخص عمل بالفعل مع JCO 3.0 ويعرف هذه المشكلة؟

هل كانت مفيدة؟

المحلول

نعم ، هذا ممكن. يجب عليك إنشاء تنفيذك الخاص لـ DestinationDataprovider وتسجيله باستخدام البيئة. RegisterDestinationDataprovider (). ومع ذلك ، فإن DDP تحصل على بيانات الاتصال وبيانات الاعتماد متروك لك. ألق نظرة على net.sf.rcer.conn.connections.connectionManager, ، هناك مثال عمل هناك.

أنت بحاجه إلى

  • انسخ الفئة الخاصة التي تبدأ على السطر 66 وتكييفها مع احتياجاتك الخاصة (أي ، قم بإحضار بيانات الاتصال من أي مكان تريده)
  • قم بتنفيذ التسجيل (السطر 204) في مكان ما أثناء بدء تشغيل التطبيق الخاص بك
  • احصل على الاتصال باستخدام بعض معرف السلسلة الذي سيتم تمريره إلى DestinationDataprovider.

نصائح أخرى

إنه أمر محير بعض الشيء ، لقد كان من المذهل بالنسبة لي كيفية تحديد هذا أيضًا.

كل ما تحتاجه هو كائن من النوع java.util.properties لملء الحقول المطلوبة ، ولكن الأمر متروك لكيفية ملء هذا الكائن.

لقد قمت بإجراء ذلك من خلال ValueBject ، يمكنني ملء هذا VO من ملف ، قاعدة بيانات ، نموذج ويب ...

    JCOProvider jcoProvider = null;
    SAPVO sap = new SAPVO(); // Value Object
    Properties properties = new Properties();

    if(jcoProvider == null) {


        // Get SAP config from DB
        try {
            sap = SAPDAO.getSAPConfig(); // DAO object that gets conn data from DB
        } catch (Exception ex) {
            throw new ConexionSAPException(ex.getMessage());
        }

         // Create new conn
        jcoProvider = new JCOProvider();

    }

    properties.setProperty(DestinationDataProvider.JCO_ASHOST,        sap.getJCO_ASHOST());
    properties.setProperty(DestinationDataProvider.JCO_SYSNR,         sap.getJCO_SYSNR());
    properties.setProperty(DestinationDataProvider.JCO_CLIENT,        sap.getJCO_CLIENT());
    properties.setProperty(DestinationDataProvider.JCO_USER,          sap.getJCO_USER());
    properties.setProperty(DestinationDataProvider.JCO_PASSWD,        sap.getJCO_PASSWD());
    properties.setProperty(DestinationDataProvider.JCO_LANG,          sap.getJCO_LANG());
//    properties.setProperty(DestinationDataProvider.JCO_TRACE,         "10");

    try {

        jcoProvider.changePropertiesForABAP_AS(properties);

    } catch (Exception e) {

        throw new ConexionSAPException(e.getMessage());

    }

فئة jcoprovider:

import com.sap.conn.jco.ext.DestinationDataEventListener;
import com.sap.conn.jco.ext.DestinationDataProvider;
import com.sap.conn.jco.ext.Environment;
import es.grupotec.ejb.util.ConexionSAPException;
import java.util.Properties;

public class JCOProvider implements DestinationDataProvider {

    private String SAP_SERVER = "SAPSERVER";
    private DestinationDataEventListener eventListener;
    private Properties ABAP_AS_properties;

    public JCOProvider() {
    }

    @Override
    public Properties getDestinationProperties(String name) {

        if (name.equals(SAP_SERVER) && ABAP_AS_properties != null) {
            return ABAP_AS_properties;
        } else {
            return null;
        }
//        if(ABAP_AS_properties!=null) return ABAP_AS_properties;
//        else throw new RuntimeException("Destination " + name + " is not available");

    }

    @Override
    public boolean supportsEvents() {
        return true;
    }

    @Override
    public void setDestinationDataEventListener(DestinationDataEventListener eventListener) {
        this.eventListener = eventListener;
    }

    public void changePropertiesForABAP_AS(Properties properties) throws ConexionSAPException {

        try {

            if (!Environment.isDestinationDataProviderRegistered()) {

                if (ABAP_AS_properties == null) {
                    ABAP_AS_properties = properties;
                }
                Environment.registerDestinationDataProvider(this);

            }

            if (properties == null) {

                if (eventListener != null) {
                    eventListener.deleted(SAP_SERVER);
                }
                ABAP_AS_properties = null;

            } else {

                ABAP_AS_properties = properties;
                if (eventListener != null) {
                    eventListener.updated(SAP_SERVER);
                }

            }

        } catch (Exception ex) {

            throw new ConexionSAPException(ex.getMessage());

        }


    }
}

يعتبر

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top