<@script name="Freeze"> Contains functions that identify and handle Translation/Personalization Freeze violation (c) SAP AG 2003-2008. All rights reserved. #DEPENDENCIES[ lib:Basic.js lib:EventsMgr.js lib:PopupMgr.js lib~skin:styles.Global.css ] //#INCLUDE[gml:defs.inc] //#INCLUDE[env:global_hotkeys.inc] ////////////////////////////////////////////////////////////////////////////////////// // FUNCTIONS <@method name="canDeleteStableIDs"> Checks if element(s)that are to be deleted have related so-called stable IDs. If yes - prompts for user approval to deleting/losing these IDs An arrray of elements, to be deleted if true check the object and its children, if false check the object only if true check for actual existence of tects,, if false check statucally - based on the object's Class If the method is called with "objects" that is not an array, the modeler will always be prompted with the general message ~true if the object can be safely deleted - meaning freeze is not broken or the modeler confirmed breaking it function canDeleteStableIDs(objects, deep, dynamic) { // Note: the method searches all objects for personalization violations. If found, search is stopped and a general msg is displayed. // If not found, we search for translation issues. There are two reasons for this design: // 1. The translation search is reused in other locations that do not care about personalization (e.g. reset a from to defaults) // 2. The personalization search is very fast compared to the (recursive) translation search var tf = $ENV.model.isTranslationFreeze; var pf = $ENV.model.isPersonalizationFreeze; if (!tf && !pf) return(true); // no freeze situation if (pf) { var freezeViolation = false; if (ISARRAY(objects)) { // if array of objects - loop on each one for (var i=0; i issue a general warning about "might be lost" freezeViolation = true; } var msg = '#TEXT[YMSG_DEL_TRANS_PERS]'; if (freezeViolation && !$ENV.model.blockedMessages[msg]) { var features = {mainTxt:msg, neverShowTxt:'#TEXT[XCKL_DO_NOT_SHOW]'}; features.buttons = '#TEXT[XBUT_OK] #TEXT[XBUT_CANCEL]'; features.callback = function(val){if (val) $ENV.model.blockedMessages[msg]=val;}; return(CONFIRMONCE(features)); } } // we get here ==> no personlization freeze violation, and not a generic message due to invalid input if (!tf) return(true); return(canDeleteTextObjects(objects, deep, '#TEXT[YMSG_DELETE_TRANSLATION]', dynamic)); // if failed to find personalization violation, look for translation violation } <@method name="canDeleteTextObjects"> Checks if element(s) that are to be deleted have related text objects. If yes - prompts for user approval to deleting/losing these IDs The method can be also called for elements that are only subject to deletion of thier text objects (but not deletino of the objects themselves - e.g. reset to defaults) An arrray of elements, to be deleted if true check the object and its children, if false check the object only a message to display instead of the default message if true check for actual existence of tects,, if false check statucally - based on the object's Class This method can be called in situations of objects deletion or only of losing text objects. This ugly coding is to save $$$ and ensure consistecy, by defininig the strings only once - in core.env ~true if the object can be safely deleted - meaning freeze is not broken or the modeler confirmed breaking it function canDeleteTextObjects(objects, deep, msgOverride, dynamic) { if (!$ENV.model.isTranslationFreeze) return(true); // no freeze situation var freezeViolation = false; if (ISARRAY(objects)) { // if array of objects - loop on each one for (var i=0; i issue a general warning about "might be lost" freezeViolation = true; } var msg = msgOverride ? msgOverride : '#TEXT[XMSG_LOSE_TRANSLATION]'; if (freezeViolation && !$ENV.model.blockedMessages[msg]) { var features = {mainTxt:msg, neverShowTxt:'#TEXT[XCKL_DO_NOT_SHOW]'}; features.buttons = '#TEXT[XBUT_OK] #TEXT[XBUT_CANCEL]'; features.callback = function(val){if (val) $ENV.model.blockedMessages[msg]=val;}; return(CONFIRMONCE(features)); } else return(true); // no freeze violation } function canResetProperty(object, propName) { var msg = "#TEXT[XMSG_LOSE_TRANSLATION]"; if ($ENV.model.isTranslationFreeze && !$ENV.model.blockedMessages[msg]) { var cb = function(ret){ if ("#TEXT[XBUT_OK]"==ret) { object.setProperty(propName); }; } var btns = '#TEXT[XBUT_OK] #TEXT[XBUT_CANCEL]'; PROMPT(msg, { buttons:btns, callback:cb, width:400, height:80} ); } else { object.setProperty(propName); } }