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
Hi Tuvia
Wonderful starting for this blog
Good job
Best Regards
Gadi
😀
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
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()