سؤال

أقوم بتجاوز الكثير من وظائف بوابة SAP في مشروعي الحالي.لا بد لي من إنشاء إطار عرض ثابت مخصص، وصواني iView مخصصة، ووظيفة KM API مخصصة، والمزيد.

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

لسوء الحظ، لم أجد طريقة للوصول إلى جزء HEAD من الصفحة الذي يسمح لي بإدراج ورقة أنماط خارجية.يمكن لتطبيقات المدخل القيام بذلك باستخدام كائن IResource للوصول إلى المراجع الداخلية، وليس العناصر الموجودة على خادم آخر.

أنا أبحث عن أي أفكار من شأنها أن تسمح لي بالحصول على هذه الوظيفة.أملك x-منشور على SDN الخاص بـ SAP, ، لكنني أظن أنني سأحصل على إجابة أفضل هنا.

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

المحلول

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

نصائح أخرى

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

في الأساس، يمكنك الغوص في كائن الطلب وجمع PortalNode.بمجرد حصولك على ذلك، ستطلب منه قيمة IPortalResponse.يمكن إرسال هذا الكائن إلى PortalHtmlResponse.يحتوي هذا الكائن على طريقة مهملة تسمى getHtmlDocument.باستخدام هذه الطريقة، يمكنك استخدام بعض كائنات مرآة Html للحصول على الرأس وإدراج روابط جديدة.

عينة:

IPortalNode node = request.getNode().getPortalNode();
IPortalResponse resp = (IPortalResponse) node.getValue(IPortalResponse.class.getName());
if (resp instanceof PortalHtmlResponse) {
    PortalHtmlResponse htmlResp = (PortalHtmlResponse) resp;
    HtmlDocument doc = htmlResp.getHtmlDocument();
    HtmlHead myHead = doc.getHead();
    HtmlLink cssLink = new HtmlLink("http://myserver.com/css/mycss.css");
    cssLink.setType("text/css");
    cssLink.setRel("stylesheet");
    myHead.addElement(cssLink);
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top