Skip to Content
Author's profile photo Tuvia Kahana

Theming Support Blog

Hello 🙂


My name is Tuvia Kahana, and I am part of the Portal development support group.

In this blog we aim is to make your life easier, and to share with you important information about theming (EP-PIN-TOL component) new features and common fixes.


You are also, more than welcome to share your tips and concerns.


Hopefully you will find answers to your concerns here, and it will spare you the need of creating incidents.

Let’s start:


Some interesting notes that we released lately:


– When your custom theme does not appear in all your server nodes, or the theme sometimes applied and sometimes not, you can implement the below note:

2197656 Custom themes does not exist in all server nodes

If you do not have the above note relevant SP, follow the workaround instructions in  the below KBA

2195099 –  Portal theme is inconsistent after upgrade

– When a theme that you created does not apply on your application(in your content area) as expected, and instead you see the backend’s theme, you need to apply the below note:

1446099   Application (Web Dynpro or ITS) is not displayed in customer theme

In addition ,you can see below interesting short movies related to theming:


How to set a parameter that is not exposed in the Theme Editor:

https://www.youtube.com/watch?v=xLkKzBdSHgQ&feature=youtu.be

It is also explained in the following note :1752515 – Updating Customer Theme Parameters Not Exposed in the Theme Editor.


How to create an RTL supported theme in the Portal:

https://www.youtube.com/watch?v=6axlHhGyolU&feature=youtu.be


Changing Portal theming from legacy structure to LESS structure:

https://www.youtube.com/watch?v=6KXh0RaFCDA&feature=youtu.be

Assigned Tags

      3 Comments
      You must be Logged on to comment or reply to a post.
      Author's profile photo Former Member
      Former Member

      Hi Tuvia

      Wonderful starting for this blog

      Good job

      Best Regards

      Gadi

      😀

      Author's profile photo Omri Cohen
      Omri Cohen

      HI Tuvia,

      Can SAP publish a guide for migrating custom themes from 7.0 to 7.3X/7.4 for RTL languages.

      I've upgraded a few portals using the following procedure:

      1) Enable the RTL flag in NWA of the 7.3X/7.4 portal

      2) Export theme from 7.0 portal

      3) Import theme to 7.3X/7.4

      4) Opening the theme in the 7.3X/7.4, making some change and save it (in order to generate the css files)

      There are always issues with the 'r' (RTL folder) - missing sub folders, icons etc

      What is the correct procedure for transporting RTL themes?

      p.s

      I'm using the 'classic' theme designer and not LESS designer tool

      Regards,

      Omri

      Author's profile photo Deon Oosthuizen
      Deon Oosthuizen

      Good day

      We have enabled the UI Theme Designer in Dev and QA.

      I created a transport package, export from dev, import into QA.
      Open the theme in QA

      Save & Build

      The following error on 33%:

      uncaught exception: Import creation of import “Portal.BIReports30.sap_bluecrystal.custom” failed in file “Portal.BIReports30.Corp_Blue.custom”.Parsing error. “http://............../irj/servlet/prt/prtrw/prtroot/com.sap.portal.theming.webdav.themeswebdavlistener.ThemesWebDavListener/Portal/BIReports30/sap_bluecrystal/custom.less” does not exist
      JS call stack:
      anonymous(f,F){var s=null,t=[],T,o,r,v;if(!F)F=new sap.theming.less.File(“”);f=sap.file.FileUtil.sNormalizeUrl(f);T=F.oGetTheme();o=F.oGetFramework();if(T)v=T.sGetVersion();sap.system.Console.log(“Parsing “+f+(v?” (“+v+”)”:””));if(o)o.notifyBeforeLoadFile(F);s=sap.file.FileUtil.sGetStringFromFile(f);if(o&&s===null)s=o.sNotifyLoadingLessFailed(F);if(s===null&&F.oGetTheme()&&F.oGetContext().bAutoRepair){if(T.bIsCustomTheme()&&T.bIsValidFileId(F.sId)){sap.system.System.warning(“AutoRepair: File \””+F.toString()+”\” with path \””+f+”\” does not exist. Repairing file.”);o.addFileImports(F);return F;}}if(s===null)sap.system.System.error(“Parsing error. \””+f+”\” does not exist”);if(F.sGetFileCheckStrategy()!=”NONE”){var T=F.oGetTheme();if(T){F.bSourceFileModified=sap.theming.less.Util.bCheckFileModified(s);if(F.bSourceFileModified){sap.system.System.warning(“File source \””+f+”\” has been modified manually. This is a unsupported feature and may lead to loss of SAP support”);}}}r=this.oParseFileContent(F,s);if(o)o.notifyAfterLoadFile(F)
      anonymous(o,l,a){var r=l.oGetObjectByPath(o);if(!r){var s=o.split(“.”),S=null,f=s[0],L=s[1],t=s[2],F=s[3],b=null,c=null,T=null,d=null;if(f){b=l.oGetFrameworkById(f,true);S=a?a:b.sSourcePathPattern;if(L){c=b.oLibraries.oGetChildById(L);if(!c){c=b.oLibraries.oAddChild(new sap.theming.less.Library(L));c.load(null,null,true);}if(t){T=c.oThemes.oGetChildById(t);if(!T){var m=null;T=c.oThemes.oAddChild(new sap.theming.less.Theme(t));if(l.bAutoRepair&&this.bDoRepairTheme(t)){m=this.oGetThemeRepairData(T);}T.load(null,m,true);}if(F){d=T.oFiles.oGetChildById(F);if(!d){var e=null,g=[],h=null;d=T.oFiles.oAddChild(new sap.theming.less.File(F));if(a&&a!=d.sGetSourcePathPattern())d.sSourcePathPattern=a;h=d.sGetRootPath()+d.sGetLessPath();this.oParseFileByPath(h,d)
      anonymous(o){var r=this.oGetObjectByPath(o);if(!r){var p=new sap.theming.less.Parser();r=p.oParseObject(o,this)
      anonymous(f,F,l,t,s){var i=null,o=F+”.”+l+”.”+t+”.”+s;try{i=this.oGetContext().oLoadObject(o);}catch(e){var m=”Import creation of import \””+o+”\” failed in file \””+f.toString()+”\”.”+e.toString();f.oGetParent().oRemoveChild(f);sap.system.System.error(m);}return f.oImports.oAddChild(new sap.theming.less.Import(i))
      anonymous(f){if(f.oImports.iChildNodeCount==0){var t=f.oGetTheme(),l=t.oGetLibrary();if(f.bIsCustomFile()){}else if(f.sId===this.sBaseFileId){if(l.sId==this.sBaseLibraryId){var b=this.oGetContext().oFrameworks.oGetChildById(“Base”),B=b.oLibraries.oGetChildById(b.sBaseLibraryId);if(!B.oThemes.oGetChildById(t.sId))b.createTheme(t.sId,t.oExtends?t.oExtends.sId:””,{sLabel:t.sLabel,sVendor:t.sVendor,sTextDirections:t.sTextDirections});this.oCreateAndAddFileImport(f,b.sId,B.sId,t.sId,b.sBaseFileId);}else if(t.bIsCustomTheme()){var c=this.aGetCustomFileIds(t);for(var i=0;i<c.length;i++)this.oCreateAndAddFileImport(f,this.sId,l.sId,t.sId,c[i]);}}else{if(l.oGetExtends()){if(t.oGetExtends()){this.oCreateAndAddFileImport(f,this.sId,l.sId,t.oGetExtends().sId,f.sId);}this.oCreateAndAddFileImport(f,this.sId,l.oGetExtends().sId,t.sId,f.sId);}this.oCreateAndAddFileImport(f,this.sId,l.sId,t.sId,this.sBaseFileId)
      Detected recursive call of “anonymous(f,F){var s=null,t=[],T,o,r,v;if(!F)F=new sap.theming.less.File(“”);f=sap.file.FileUtil.sNormalizeUrl(f);T=F.oGetTheme();o=F.oGetFramework();if(T)v=T.sGetVersion();sap.system.Console.log(“Parsing “+f+(v?” (“+v+”)”:””));if(o)o.notifyBeforeLoadFile(F);s=sap.file.FileUtil.sGetStringFromFile(f);if(o&&s===null)s=o.sNotifyLoadingLessFailed(F);if(s===null&&F.oGetTheme()&&F.oGetContext().bAutoRepair){if(T.bIsCustomTheme()&&T.bIsValidFileId(F.sId)){sap.system.System.warning(“AutoRepair: File \””+F.toString()+”\” with path \””+f+”\” does not exist. Repairing file.”);o.addFileImports(F);return F;}}if(s===null)sap.system.System.error(“Parsing error. \””+f+”\” does not exist”);if(F.sGetFileCheckStrategy()!=”NONE”){var T=F.oGetTheme();if(T){F.bSourceFileModified=sap.theming.less.Util.bCheckFileModified(s);if(F.bSourceFileModified){sap.system.System.warning(“File source \””+f+”\” has been modified manually. This is a unsupported feature and may lead to loss of SAP support”);}}}r=this.oParseFileContent(F,s);if(o)o.notifyAfterLoadFile(F)”. Stop analyzing call stack.

      JS call stack:
      anonymous(f,F,l,t,s){var i=null,o=F+”.”+l+”.”+t+”.”+s;try{i=this.oGetContext().oLoadObject(o);}catch(e){var m=”Import creation of import \””+o+”\” failed in file \””+f.toString()+”\”.”+e.toString();f.oGetParent().oRemoveChild(f);sap.system.System.error(m);}return f.oImports.oAddChild(new sap.theming.less.Import(i))
      anonymous(f){if(f.oImports.iChildNodeCount==0){var t=f.oGetTheme(),l=t.oGetLibrary();if(f.bIsCustomFile()){}else if(f.sId===this.sBaseFileId){if(l.sId==this.sBaseLibraryId){var b=this.oGetContext().oFrameworks.oGetChildById(“Base”),B=b.oLibraries.oGetChildById(b.sBaseLibraryId);if(!B.oThemes.oGetChildById(t.sId))b.createTheme(t.sId,t.oExtends?t.oExtends.sId:””,{sLabel:t.sLabel,sVendor:t.sVendor,sTextDirections:t.sTextDirections});this.oCreateAndAddFileImport(f,b.sId,B.sId,t.sId,b.sBaseFileId);}else if(t.bIsCustomTheme()){var c=this.aGetCustomFileIds(t);for(var i=0;i<c.length;i++)this.oCreateAndAddFileImport(f,this.sId,l.sId,t.sId,c[i]);}}else{if(l.oGetExtends()){if(t.oGetExtends()){this.oCreateAndAddFileImport(f,this.sId,l.sId,t.oGetExtends().sId,f.sId);}this.oCreateAndAddFileImport(f,this.sId,l.oGetExtends().sId,t.sId,f.sId);}this.oCreateAndAddFileImport(f,this.sId,l.sId,t.sId,this.sBaseFileId)
      anonymous(f,F){var s=null,t=[],T,o,r,v;if(!F)F=new sap.theming.less.File(“”);f=sap.file.FileUtil.sNormalizeUrl(f);T=F.oGetTheme();o=F.oGetFramework();if(T)v=T.sGetVersion();sap.system.Console.log(“Parsing “+f+(v?” (“+v+”)”:””));if(o)o.notifyBeforeLoadFile(F);s=sap.file.FileUtil.sGetStringFromFile(f);if(o&&s===null)s=o.sNotifyLoadingLessFailed(F);if(s===null&&F.oGetTheme()&&F.oGetContext().bAutoRepair){if(T.bIsCustomTheme()&&T.bIsValidFileId(F.sId)){sap.system.System.warning(“AutoRepair: File \””+F.toString()+”\” with path \””+f+”\” does not exist. Repairing file.”);o.addFileImports(F);return F;}}if(s===null)sap.system.System.error(“Parsing error. \””+f+”\” does not exist”);if(F.sGetFileCheckStrategy()!=”NONE”){var T=F.oGetTheme();if(T){F.bSourceFileModified=sap.theming.less.Util.bCheckFileModified(s);if(F.bSourceFileModified){sap.system.System.warning(“File source \””+f+”\” has been modified manually. This is a unsupported feature and may lead to loss of SAP support”);}}}r=this.oParseFileContent(F,s);if(o)o.notifyAfterLoadFile(F)
      anonymous(o,l,a){var r=l.oGetObjectByPath(o);if(!r){var s=o.split(“.”),S=null,f=s[0],L=s[1],t=s[2],F=s[3],b=null,c=null,T=null,d=null;if(f){b=l.oGetFrameworkById(f,true);S=a?a:b.sSourcePathPattern;if(L){c=b.oLibraries.oGetChildById(L);if(!c){c=b.oLibraries.oAddChild(new sap.theming.less.Library(L));c.load(null,null,true);}if(t){T=c.oThemes.oGetChildById(t);if(!T){var m=null;T=c.oThemes.oAddChild(new sap.theming.less.Theme(t));if(l.bAutoRepair&&this.bDoRepairTheme(t)){m=this.oGetThemeRepairData(T);}T.load(null,m,true);}if(F){d=T.oFiles.oGetChildById(F);if(!d){var e=null,g=[],h=null;d=T.oFiles.oAddChild(new sap.theming.less.File(F));if(a&&a!=d.sGetSourcePathPattern())d.sSourcePathPattern=a;h=d.sGetRootPath()+d.sGetLessPath();this.oParseFileByPath(h,d)
      anonymous(){for(var i=0;i<e.length;i++){var E=e[i],S=E.split(“.”);if(S.length>=4){var F=S.pop(),t=L.oLoadObject(S.join(“.”));if(!t||!sap.util.JsUtil.bContains(t.aGetFileIds(),F))continue;}p.oParseObject(E,L);}if(b){sap.theming.less.Util.notifySectionEnd(s);c.removeUtil();a(L);return null;}else{sap.theming.less.Util.notifySectionEnd(s)
      anonymous(){sap.system.Console.log(“Prefetched “+t+” file(s)”);sap.theming.less.Util.notifySectionEnd(“Async prefetching”);c()