2008-09-15 27 views
0

Mevcut projemde bir çok SAP'nin Portal işlevini geçersiz kılıyorum. Özel bir sabit genişlik çerçevesi, özel iView tepsileri, özel KM API işlevselliği ve daha fazlasını oluşturmalıyım.Alternatif Stil (CSS) yöntemleri?

Bu özel parçaların tümü ile SAP'nin Tema düzenleyicisi tarafından uygulanan pek çok stil işlevselliğini kullanmıyorum. Yapmak istediğim şey harici bir CSS oluşturmak, onu Portal dışında saklamak ve ona göndermektir. Harici olarak saklamak, bir portal uygulamasında CSS'yi depolamaktan ziyade daha kolay güncellemelere izin verecektir. Ayrıca tüm özel parçaların stillerini bir defada bulundurmalarına da izin verecekti.

Ne yazık ki, sayfanın HEAD bölümüne bir dış stil sayfası eklemem için izin veren bir yol bulamadım. Portal uygulamaları, iç kaynaklara erişmek için başka bir sunucudaki öğeleri değil, IResource nesnesini kullanarak bunu yapabilir.

Bu işlevselliği elde etmeme izin verecek herhangi bir fikir arıyorum. x-posted on SAP's SDN var, ama burada daha iyi bir cevap alacağından şüpheleniyorum.

cevap

1

Kirletici olduğunu düşünürdüm, ancak Portal dışı bir geliştirici olarak, yeni CSS dosyanıza işaret eden başlığa yeni bir bağlantı öğesi eklemek için JavaScript'i kullanmayı düşünürdüm. Elbette, sayfanın bir kısmı indirildikten ve oluşturulduktan sonra komut dosyası büyük olasılıkla çalışmayacak, ancak bu yeterli bir çözüm olabileceğinden, flash içermeyen bir içeriğe sahip olacaksınız.

0

Kendi sorumu yanıtladığımdan nefret ediyorum, ancak iyi belgelenmemiş bir çözüm buldum ve tipik SAP modası kullanımdan kaldırılmış yöntemler kullanıyor. Bu yüzden Eric'in önerdiğinden biraz daha az kirli bir hack olabilir. Ben ilgisiz bir SDN forum yazısı aracılığıyla buldum.

Temel olarak, istek nesnesine dalın ve PortalNode'u toplayın. Bunu aldıktan sonra, bir IPortalResponse değeri isteyin. Bu nesne bir PortalHtmlResponse'ye dökülebilir. Bu nesnenin getHtmlDocument adlı bir kullanım dışı yöntemi vardır. Bu yöntemi kullanarak, kafa almak ve yeni bağlantılar eklemek için bazı Html ayna nesnelerini kullanabilirsiniz.

Örnek:

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); 
}