문제

현재 프로젝트에서 많은 SAP Portal 기능을 재정의하고 있습니다.맞춤형 고정 너비 프레임워크, 맞춤형 iView 트레이, 맞춤형 KM API 기능 등을 만들어야 합니다.

이러한 모든 사용자 정의 부분에서는 SAP의 테마 편집기에서 구현된 스타일 기능을 많이 사용하지 않을 것입니다.제가 하고 싶은 일은 외부 CSS를 생성하여 포털 외부에 저장하고 참조하는 것입니다.외부에 저장하면 CSS를 포털 애플리케이션 내에 저장하는 것보다 더 쉽게 업데이트할 수 있습니다.또한 모든 맞춤 제품이 한곳에서 스타일을 가질 수 있게 해줍니다.

안타깝게도 외부 스타일시트를 삽입할 수 있는 페이지의 HEAD 부분에 액세스하는 방법을 찾지 못했습니다.포털 응용 프로그램은 IResource 개체를 사용하여 내부 참조에 액세스할 수 있지만 다른 서버의 항목에는 액세스할 수 없습니다.

나는 이 기능을 얻을 수 있는 아이디어를 찾고 있습니다.나는 가지고있다 SAP의 SDN에 x-게시됨, 하지만 여기에서 더 나은 답변을 얻을 수 있을 것 같습니다.

도움이 되었습니까?

해결책

나는 이것이 더러운 해킹이라고 생각하지만 포털 개발자가 아닌 사람으로서 JavaScript를 사용하여 새 CSS 파일을 가리키는 헤드에 새 링크 요소를 삽입하는 것을 고려할 것입니다.물론 페이지의 일부가 다운로드되어 렌더링될 때까지 스크립트가 실행되지 않기 때문에 스타일이 지정되지 않은 콘텐츠가 플래시로 표시될 수 있지만 이것이 적절한 솔루션일 수 있습니다.

다른 팁

내 자신의 질문에 대답하는 것이 싫지만 잘 문서화되지 않았고 일반적인 SAP 방식에서는 더 이상 사용되지 않는 방법을 사용하는 잠재적인 솔루션을 찾았습니다.따라서 Eric이 제안한 것보다 약간 덜 더러운 해킹일 수 있습니다.관련 없는 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