Change transport description after release

If you are forced to change transport description after release, you have to consider following changes: Use RDDIT076 to change the description - if not possible, you have to find a way to edit E07T and E070. Change description in TMSBUFTXT to correct display of shorttext in STMS.

January 6, 2022 · 1 min

Remove invalid characters in your BW transformation

If you have in your BW regular flat-file data load in your BW system, you probably afflict issues with the wrong data provided by the user. The scenario of this issue can be very simple. It’s enough that the user provides an invalid unsupported charter and during activation, you will get a similar issue: Or other issues like: Value ‘#’ (hex. ‘2300′) of characteristic contains invalid characters Error when assigning SID: Action VAL_SID_CONVERT InfoObject (hex. ‘500072007A0065006C006500770020006E0061002000720061′) of characteristic contains inva This issue also affects me in the last time, and during my research, and found several options for removal. Most of them were based on a simple check like is your charter on the list: ...

January 2, 2022 · 2 min

How to change any entries in the database in SE16 or SE11

Sometimes we are forced to change some database entries. There are many reasons like a new s-note from SAP or incorrect values in the technical table. Every SAP table can be changed via SE16 or SE11 transaction - all you need to have is a debug with change role assigned to your user. In this article you can find youtube video, and bellow is detailed step by step instruction. Video tutorial Step by step instruction how to change entry in SE16 1. We have to login into the system and go to the SE16 or SE11 transaction. Put the table name, and display the required result. When you see the record which you want to edit, please select it and put **/hs** in the transaction textbox. Click on the Display icon in the upper panel. Normally you should see a detailed view, but now the debugger will run instead. This step will not work if you do not have the debug authorization. In the debugger window, please click on Breakpoints-> Breakpoint at-> Breakpoint at Subroutine. New window should open. ...

December 25, 2021 · 2 min

BW formula parameters

BW contains many standard formulas which can be used in TRFN’s and RSPC’s. The main issue is that sometimes you need to know default values/data types. All available formulas can be checked in class CL_RSAR_FUNCTION. Bellow, you can find a table with explained importing and returning parameters. Formula / Method Name Description Importing Types (Example) Returning Types (Example result) ABORT_PACKAGE Returns exception cx_rfso_abort_package to stop processing N/A N/A ADD_TO_DATE Add days to the specified date DATS,INT (20201201,1) DATS 20201202 ALPHA Add leading zeros base on the provided length STRING,INT (123,5) STRING 00123 CALMONTH_FISCPER Convert calendar month to the fiscal period CONDENSE Trim text (left site) STRING ( 43) STRING ‘43’ CONDENSE_NO_GAPS Trim text + remove spaces inside STRING ( 43 55 33) STRING ‘435533’ DATECONV Change date format to internal CHAR10,CHAR10,CHAR1 (12/07/1992, MM/DD/YYYY,/) DATS 19921207 DATE_DIFF Calculate differences between dates DATS,DATS (20211212,20211215) INT 3 DATE_FISCPER DATE_FISCPER3 DATE_FISCYEAR DATE_HALFYEAR Check if the date is in the first or second part of the year DATS (20210212) NUMC 1 DATE_MONTH Get the calendar month from the given date DATS (20201201) NUMC 202012 DATE_MONTH2 Get the month number from the given date DATS (20201201) NUMC 12 DATE_QUATER Get the quarter from the given date DATS (20210909) NUMC 20213 DATE_QUATER1 Get the quarter number from the given date DATS (20210909) NUMC 3 DATE_WEEK Get the week from the given date DATS (20210731) NUMC 202130 DATE_WEEKDAY Get the day from the given date DATS (20211220) STRING Monday DATE_WEEKDAY1 Get the day number from given date DATS (20211220) NUMC 1 more DATE_YEAR Get the year from the given date DATS (20210101) NUMC 4 FIRST_WORKINGDAY_MONTH Get the first working day from the given date and calendar DATS,CHAR (20210425,01) DATS 20210401 FIRST_WORKINGDAY_YEAR Get the first working day of the year and calendar DATS,CHAR (20210525,01) DATS 20210104 FISCPER_CALMONTH FISCPER_FISCPER3 FISCPER_FISCYEAR IF Check condition - If I_Arg1 = X then Arg2 else Arg3 BOOLEAN,ANY,ANY (X,1,10) ANY 1 IS_INITIAL Check if the string is initial ANY (’') BOOLEAN X IS_INTEGER Check if the string contains only integers STRING (9) BOOLEAN X LAST_WORKINGDAY_MONTH Get the last working day from the given date DATS,CHAR (20210101,01) DATS 20210129 LAST_WORKINGDAY_YEAR Get the last working day of the year from the date given DATS,CHAR (20210101,01) DATS 20211231 LEFT Get the first X characters from the string INT,STRING (4,123456) STRING 1234 LTRIM Trim text (left site), by given regexp STRING,STRING ( ABCD,\s) STRING ‘ABCD’ L_TRIM Trim text (left site) STRING ( ABCD) STRING ‘ABCD’ MAPPING Looks like deprecated - almost all code inside commented out Result = Arg4 MONTH2_HALFYEAR Check if the month is in the first or second half of the year ANY (202112) or (11) NUMC 2 MONTH2_QUARTER1 Check the quarter of the month ANY (202208) or (08) NUMC 3 MONTH_HALFYEAR Check if the month is in the first or second half of the year. ANY (202112) NUMC 2 MONTH2_QUARTER1 Get the quarter based on the given date ANY (202106) or (06) NUMC 2 MONTH_HALFYEAR Check is given month in first or second half of the year ANY (20211) NUMC 2 MONTH_QUARTER Check the quarter of the given month ANY (202208) NUMC 202003 MONTH_QUARTER1 Check the quarter of the given month ANY (202208) NUMC 3 MONTH_YEAR Check the month of the given date ANY (202111) or (20211125) NUMC 2021 NEGATIVE Return number with negative sing F (1) F -1 QUARTER1_HALFYEAR Check if given quarter is in first or second half of the year ANY (202101) NUMC 1 QUARTER_HALFYEAR Check if given quarter is in first or second half of the year ANY (20214) NUMC 2 QUARTER_QUARTER1 Get the quarter from the given quarter ANY (20214) NUMC 4 QUARTER_YEAR Get the year from the given quarter ANY (20211) NUMC 2021 REPLACE_ALL Replace selected charter to different one C,C,STRING (4,9,A4B4C4) STRING A9B9C9 REPLACE_FIRST Replace first occurrences of the charters to different one C,C,STRING (4,9,A4B4C4) STRING A9B4C4 RIGHT Get first few numbers from right I,STRING (4,123456) STRING 3456 RTRIM Trim white charters from right based on provided regexp STRING,STRING (ABC,\s) STRING ‘ABC’ R_TRIM ? C (D) STRING D SHIFT_LEFT Remove first few charters from the left site of the string more I,STRING (2,abcdef) STRING cdef SHIFT_RIGHT Add few charters from the left site of the string more I,STRING (2,abcdef) STRING ’ abcdef' SKIP_RECORD Raise CX_RSFO_SKIP_RECORD exception to skip processing of current record N/A N/A SKIP_RECORD_AS_ERROR Raise CX_RSFO_SKIP_RECORD _AS_ERROR exception to skip current record processing with error N/A N/A STR_LEN Returns the length of the string STRING abcdef INT 6 UNIT_CONVERSION Convert units UNIT,UNIT,ANY (TO,KG,100) F 100000 UTC_LONG_TO_ LOCAL_DATE Convert timestamp based on selected timezone to get the date DEC,CHAR (20161030053000,EST) DATS 20161030 UTC_LONG_TO_ LOCAL_TIME Convert timestamp based on selected timezone to get the hour DEC,CHAR (20161030053000,EST) F 5.40 UTC_SHORT_TO_ LOCAL_DATE Convert timestamp based on selected timezone to get the date (same code like for long version) DEC,CHAR (20161030053000,EST) DATS 20161030 UTC_SHORT_TO_ LOCAL_TIME Convert timestamp based on selected timezone to get the hour DEC,CHAR (20161030053000,EST) TIMS 013000 WEEK_FIRST_DAY Get the first day of the week NUMC (202104) DATS 20210125 WORKINGDAY_MONTH Get the number of working days based on month DATS,CHAR,CHAR (20211220,01,+) INT 14 WORKINGDAY_YEAR Get the number of working day base on year DATS,CHAR,CHAR (20211220,01,+) INT 243 Explanations: DATE_WEEKDAY1(): 1 - Monday 2 - Tuesday 3 - Wednesday 4 - Thursday 5 - Friday 6 - Saturday 7 - Sunday ...

December 20, 2021 · 5 min

Create a popup to change dimensions order

Let’s start by creating the popup Rename new window Definitely we should arrange this new space. Start with a new List Box Add tree new buttons: UP, DOWN, Save and Close Change style on List Box to add borders Rename new elements Create a new button on the Canvas Create a script variable Change name and set as array Create onClick event for the new - Change Layout button // Get current dimensions var currentDimensions = Table_Games_Sales.getDimensionsOnRows(); // Assign values to the global variable ScriptVariable_Dimensions_Values = Table_Games_Sales.getDimensionsOnRows(); // Clear the current list ListBox_Dimensions_Order.removeAllItems(); // Add current dimensions to the list for ( var i = 0; i < currentDimensions.length; i++ ){ ListBox_Dimensions_Order.addItem(currentDimensions[i]); } // Open popup Popup_Dimensions_Order.open(); Add code for Button_Save_And_close - onClick // Get all current dimensions var allDimensions = Table_Games_Sales.getDimensionsOnRows(); // Delete all dimensions for (var i = 0; i < allDimensions.length; i++){ Table_Games_Sales.removeDimension(allDimensions[i]); } // Set new dimensions for (var r = 0; r < ScriptVariable_Dimensions_Values.length; r++){ Table_Games_Sales.addDimensionToRows(ScriptVariable_Dimensions_Values[r]); } // Close popup Popup_Dimensions_Order.close(); Add code for Button_Down - onClick // Get all selected Keys var selectedValue = ListBox_Dimensions_Order.getSelectedKey(); // Change the order on the list and update List Box if (selectedValue){ var valueIndex = ScriptVariable_Dimensions_Values.indexOf(selectedValue); ScriptVariable_Dimensions_Values.splice(valueIndex,1); ScriptVariable_Dimensions_Values.splice( valueIndex + 1,0, selectedValue ); ListBox_Dimensions_Order.removeAllItems(); for ( var i = 0; i < ScriptVariable_Dimensions_Values.length; i++){ ListBox_Dimensions_Order.addItem(ScriptVariable_Dimensions_Values[i]); } } Add code for Button_Up - onClick // Get all selected Keys var selectedValue = ListBox_Dimensions_Order.getSelectedKey(); // Change the order on the list and update List Box if (selectedValue){ var valueIndex = ScriptVariable_Dimensions_Values.indexOf(selectedValue); ScriptVariable_Dimensions_Values.splice(valueIndex,1); ScriptVariable_Dimensions_Values.splice( valueIndex - 1,0, selectedValue ); ListBox_Dimensions_Order.removeAllItems(); for ( var i = 0; i < ScriptVariable_Dimensions_Values.length; i++){ ListBox_Dimensions_Order.addItem(ScriptVariable_Dimensions_Values[i]); } } At the end we have a complete and working solution. Congratulations 🍾 !

December 15, 2021 · 2 min

Select dimensions by CheckBox and Button

We need a CheckBox, it can be added from the toolbar Let’s change the background color of the CheckboxGroup. To do this, please click on the brush icon, bucket icon and then on more Change color to hex 1f303f Next change the font color Set new color to white, hex ffffff Remove the values from the Checkbox Rename checkbox to CheckboxGroup_Dimensions, bu click on the keys icon Add additional code to the Application - onInitialization // Get all dimensions var dimensions = Table_Games_Sales.getDataSource().getDimensions(); //Loop by dimensions and fill Checkbox for ( var y = 0; y < dimensions.length; y++ ){ CheckboxGroup_Dimensions.addItem(dimensions[y].id,dimensions[y].description); } Last but not least - we need a button Rename the button Let’s also add a code to handle it // Get current list of dimensions to remove it var currentDimensionsSet= Table_Games_Sales.getDimensionsOnRows(); // Get selected fields from CheckBox var selectedDimensions = CheckboxGroup_Dimensions.getSelectedKeys(); // Delete all existing dimensions for (var r = 0; r < currentDimensionsSet.length; r++){ Table_Games_Sales.removeDimension(currentDimensionsSet[r]); } // Add all new dimensions for (var i = 0; i < selectedDimensions.length; i++){ Table_Games_Sales.addDimensionToRows(selectedDimensions[i]); } At the end-user should be able to pick up interesting dimensions by themself

December 13, 2021 · 1 min

SAC APP Design & clean the filter button

Button To clean the filter we need a button. Let’s get one from the plus in the toolbar Put the button near the Year dropdown and rename it Go to the Button_Clean_Filters - onClick Put the following code // Remove all filters from the model Table_Games_Sales.getDataSource().removeDimensionFilter("Name"); Table_Games_Sales.getDataSource().removeDimensionFilter("Publisher"); Table_Games_Sales.getDataSource().removeDimensionFilter("Year"); //Set all dropdowns selection to empty Dropdown_Name.setSelectedKey(''); Dropdown_Publisher.setSelectedKey(''); Dropdown_Year.setSelectedKey(''); Button should now work properly Design Please download image dataset from here ...

December 13, 2021 · 1 min

Cascade filtering in SAC

In this part of the tutorial, we are focusing on creating a cascade filter on the dropdown in SAC APP. Cascade means that filters on the dashboard will depend on each other. In the example, if you pick up the publisher name Nintendo then in the games list (Name) you should see only games that belong to Nintendo and no more others. To achieve this, we have to redesign our app a bit. ...

December 12, 2021 · 4 min

Create and fill a dropdown in SAC APP

Firstly we have to move our table a few lines down. This can be done by moving the mouse between the table and toolbar and drag and dropping when the cursor changes the icon: Click on the plus icon on the toolbar Select Dropdown form the list Lets rename the Table by click on tree dots -> Rename, and set new name to Table_Games_Sales Same with Dropdown, and put new name Dropdown_Name ...

December 12, 2021 · 3 min

Simple APP on SAC

We have a model so now it is time to build a SAC APP. Go to applications, click on Create Application Click on the table from at the toolbar Select a existing model Click on model that we created in the previous post Delete columns Add Measure/Dimension to rows Select Name and Publisher Quit panel Save application Click on Run ...

December 12, 2021 · 1 min