128337090 BPC 7 0 Best Practices With Script Logic PDF

58
BusinessObjects Planning and Consolidation 7.0, version for Netweaver Best Practices with Script Logic Sheldon Edelstein Enterprise Performance Management Regional Implementation Group (EPM RIG) March 31, 2009

Transcript of 128337090 BPC 7 0 Best Practices With Script Logic PDF

Page 1: 128337090 BPC 7 0 Best Practices With Script Logic PDF

BusinessObjects Planning and Consolidation 7.0, version for Netweaver

Best Practices with Script Logic

Sheldon EdelsteinEnterprise Performance Management Regional Implementation Group (EPM RIG)

March 31, 2009

Page 2: 128337090 BPC 7 0 Best Practices With Script Logic PDF

Legal Disclaimer

This presentation outlines our general product direction and should not be relied on in making a purchase decision. This presentation is not subject to your license agreement or any other agreement with SAP. SAP has no obligation to pursue any course of business outlined in this presentation or to develop or release any functionality mentioned in this presentation. This presentation and SAP's strategy and possible future developments are subject to change and may be changed by SAP at any time for any reason without notice. This document is provided without a warranty of any kind, either express or implied, including but not limited to, the implied warranties of merchantability, fitness for a particular purpose, or non-infringement. SAP assumes no responsibility for errors or omissions in this document, except if such damages were caused by SAP intentionally or grossly negligent.

© SAP 2009 / Page 2

Page 3: 128337090 BPC 7 0 Best Practices With Script Logic PDF

© SAP 2009 / Page 3

1. Script Logic Overview 2. Scoping Techniques3. Record Manipulation4. Application to Application 5. Data Manager Integration6. Default Logic7. Custom Logic8. Information Resources

Agenda

Page 4: 128337090 BPC 7 0 Best Practices With Script Logic PDF

© SAP 2009 / Page 4

1. Script Logic Overview 2. Scoping Techniques3. Record Manipulation4. Application to Application 5. Data Manager Integration6. Default Logic7. Custom Logic8. Information Resources

Agenda

Page 5: 128337090 BPC 7 0 Best Practices With Script Logic PDF

© SAP 2008 / Page 5

BPC version for Netweaver Script Logic Overview

Script Logic Features

Unique features in SAP BusinessObjects Planning and Consolidation version for Netweaver:

Script Logic DebuggingCall Custom LogicObeys Concurrency Locking within SAP BusinessObjects Planning and Consolidation.

Major differences between SAP BusinessObjects Planning and Consolidation version for Netweaver and other versions of BPC:

There are a number of SQL Based keywords that are supported in BPC70MS are not supported by BPC70NW.Stored procedures were replaced with native Script Logic keywords.Minor differences in validation checking of Script Logic.Fewer SAP Netweaver BI MDX keywords are supported than Microsoft MDX.

Page 6: 128337090 BPC 7 0 Best Practices With Script Logic PDF

© SAP 2008 / Page 6

BPC version for Netweaver Script Logic Overview

Script Logic Basics

All Script Logic statements are Case-Insensitive.AppSet/Application/Dimension/Member names are case-sensitive in many commands

You will have two files for each Script logic you create. .LGF - an ASCII file used to create/edit your logic calculations..LGX - the compiled logic file. Crested during SAVE and stored on the BPC File Service (access via transaction UJFS)

Page 7: 128337090 BPC 7 0 Best Practices With Script Logic PDF

© SAP 2008 / Page 7

BPC version for Netweaver Script Logic Overview

Script Logic is accessed from SAP BPC Administration client in the Script Logic subdirectory in the hierarchy of a particular Application:

Page 8: 128337090 BPC 7 0 Best Practices With Script Logic PDF

BPC version for Netweaver Script Logic Overview

How Script Logic worksThe Logic module:

Reads a specific data selection from the application.Applies to it a set of user-defined formulas (stored in a logic file).Derives the values.Writes those values back to the application.

Results are written directly to the application as base data, and are aggregated up the dimensional hierarchy as they are, without being recalculated at upper levels.

All dimension member formulas are applied to these results after logic is executed.This process allows you to perform such calculations as units times price because the formulas are applied only to those members specified in the logic file.

Page 9: 128337090 BPC 7 0 Best Practices With Script Logic PDF

Structure of Script Logic

Logic can be broken down into 3 componentsScoping- What am I running the data on?

Data manager scopingBPC for Excel ScopingModification of Scope (i.e.: *XDIM_MEMBERSET)

Body/Code – What do I want to do with the scoped records?

Script Logic keywords (example *WHEN / *ENDWHEN, *REC Statements)Allocation Logic and Stored ProceduresCustom BADIs

Writing the record*Commit

BPC version for Netweaver Script Logic Overview

*XDIM_MEMBERSET P_ACCT = CE0004220*XDIM_MEMBERSET TIME = 2007.JAN

*WHEN P_ACCT*IS CE0004220*REC (EXPRESSION = 901)*ENDWHEN

*COMMIT

Page 10: 128337090 BPC 7 0 Best Practices With Script Logic PDF

BPC version for Netweaver Script Logic Overview

Running Script LogicAdvanced logic can be automatically invoked each time data is sent to the database.

Logic contained in the Default logic file is executed immediately after data is sent and the results can be seen in SAP Business Planning and Consolidation right away.

Advanced logic can be run from Data Manager for batch processing of formulas. Using Data Manager to execute Logic module formulas is useful for calculations that do not need to be executed immediately. For example, an administrator may decide to wait until all the data has been entered in the local currency before generating the translated amounts in the reporting currencies.

Page 11: 128337090 BPC 7 0 Best Practices With Script Logic PDF

BPC version for Netweaver Script Logic Overview

ProsReal-time - allows for real-time calculations.Flexible - enables you to apply different formulas to different applications within an application set (dimension logic is applied to all applications using the dimension).Syntax options - you can use MDX, Script Logic Keywords, and Custom ABAP.

ConsCustom maintenanceMay be too technical for certain users (for instance Custom BADI)If not properly written can be a negative performance impact

Page 12: 128337090 BPC 7 0 Best Practices With Script Logic PDF

© SAP 2009 / Page 12

1. Script Logic Overview 2. Scoping Techniques3. Record Manipulation4. Application to Application 5. Data Manager Integration6. Default Logic7. Custom Logic8. Information Resources

Agenda

Page 13: 128337090 BPC 7 0 Best Practices With Script Logic PDF

BPC version for Netweaver Scoping Techniques

What is “Scope”?Scoping identifies the specific records that will subject to processingCalling Script Logic from an Input Schedule Data Send (Default logic script)

Scope is derived by the sent data. A list of all the unique members in the sent data is used to derive the scope. An exception is the account dimension, where all the accounts are always part of the scope.Scope can be overridden / modified / filtered with the various (*XDIM) keywords.

Running Script Logic from within a Data Manager (DM) PackageScope is derived from the user prompt for the dimensions that are part of the DM package prompts. All non-calculated members are selected for the other dimensions.Scope can be overridden / modified / filtered with various (*XDIM) keywords.

Page 14: 128337090 BPC 7 0 Best Practices With Script Logic PDF

Scoping Techniques *XDIM_MEMBERSET

*XDIM_MEMBERSET Category = PLAN*XDIM_MEMBERSET Entity = C9000*XDIM_MEMBERSET P_DataSrc = UPLOAD*XDIM_MEMBERSET RptCurrency = LC*XDIM_MEMBERSET P_Activity = NONE*XDIM_MEMBERSET P_ACCT = CE0004220

*XDIM_MEMBERSET TIME = BAS(2007.TOTAL)//*XDIM_MEMBERSET TIME = 2007.JAN, 2009.FEB//*XDIM_MEMBERSET TIME = DEP(2007.Q3)//*XDIM_MEMBERSET TIME = ALL(2007.TOTAL)

*WHEN P_ACCT*IS CE0004220*REC (EXPRESSION = 1200)*ENDWHEN*COMMIT

Variants on XDIM_MEMBERSET*XDIM_MEMBERSET {Dimension name} = BAS{Members Set}*XDIM_MEMBERSET {Dimension name} = DEP{Members Set}*XDIM_MEMBERSET {Dimension name} = ALL{Members Set}“//” ==> commented line, will not be executed Example:*XDIM_MEMBERSET TIME = BAS(2007.TOTAL) Selects all base level members of the 2007.TOTAL parent node

*XDIM_MEMBERSET TIME = <ALL> does NOT work in BPC70NW!

Page 15: 128337090 BPC 7 0 Best Practices With Script Logic PDF

*XDIM_MEMBERSET Category = PLAN*XDIM_MEMBERSET Entity = C9000*XDIM_MEMBERSET P_DataSrc = UPLOAD*XDIM_MEMBERSET RptCurrency = LC*XDIM_MEMBERSET P_Activity = NONE*XDIM_MEMBERSET P_ACCT = CE0004220

*XDIM_MEMBERSET TIME = 2009.JAN*XDIM_ADDMEMBERSET TIME = 2009.FEB

*WHEN P_ACCT*IS CE0004220*REC (EXPRESSION = 1300)*ENDWHEN*COMMIT

Adds to Member Selection*XDIM_ADDMEMBERSET {dimension} = {members set}Example:

User sends data only on Entity1 and the default logic contains:

*XDIM_ADDMEMBERSET ENTITY=Entity2

…Logic will be executed for Entity1 AND Entity2.

Scoping Techniques *XDIM_ADDMEMBERSET

Page 16: 128337090 BPC 7 0 Best Practices With Script Logic PDF

Scoping Techniques *XDIM_FILTER

*XDIM_MEMBERSET Category = PLAN*XDIM_MEMBERSET Entity = C9000*XDIM_MEMBERSET P_DataSrc = UPLOAD*XDIM_MEMBERSET RptCurrency = LC*XDIM_MEMBERSET P_Activity = NONE*XDIM_MEMBERSET P_ACCT = CE0004220

*XDIM_FILTER TIME = [TIME].PROPERTIES("MONTHNUM") = "2“//*XDIM_FILTER TIME = [TIME].PROPERTIES("ID") = "2007.FEB"

*WHEN P_ACCT*IS CE0004220*REC (EXPRESSION = 800)*ENDWHEN*COMMIT

Filters Member Selection*XDIM_FILTER {Dimension name} = {Members Set}Example:*XDIM_FILTER Time = Time.properties("MONTHNUM") = "2“Will select all records with a February month

Page 17: 128337090 BPC 7 0 Best Practices With Script Logic PDF

Scoping Techniques *SELECT

*XDIM_MEMBERSET Category = PLAN*XDIM_MEMBERSET Entity = C9000*XDIM_MEMBERSET P_DataSrc = UPLOAD*XDIM_MEMBERSET RptCurrency = LC*XDIM_MEMBERSET P_Activity = NONE

*SELECT(%ACCSET%, "[ID]", P_ACCT, "[CALC]='N'")*XDIM_MEMBERSET P_ACCT = %ACCSET%

*WHEN P_ACCT*IS CE0004210*REC (EXPRESSION = 10)*ENDWHEN

*COMMIT

Dynamic Variable Member Selection

*SELECT ({variable}, {What}, {From}, {Condition})

*SELECT(%ENTSET%, "[ID]", ENTITY, "[INTCO] ='I_C3000' ")

Page 18: 128337090 BPC 7 0 Best Practices With Script Logic PDF

© SAP 2009 / Page 18

1. Script Logic Overview 2. Scoping Techniques3. Record Manipulation4. Application to Application 5. Data Manager Integration6. Default Logic7. Custom Logic8. Information Resources

Agenda

Page 19: 128337090 BPC 7 0 Best Practices With Script Logic PDF

Record Manipulation*XDIM_MAXMEMBERS

*XDIM_MEMBERSET Category = PLAN*XDIM_MEMBERSET Entity = C9000*XDIM_MEMBERSET P_DataSrc = UPLOAD*XDIM_MEMBERSET RptCurrency = LC*XDIM_MEMBERSET P_Activity = NONE*XDIM_MEMBERSET P_ACCT = CE0004220//*XDIM_MEMBERSET TIME = 2007.JAN

*XDIM_MAXMEMBERS TIME = 50//forces the system to process the //total number of records in //smaller groups, in this case //groups of fifty, rather than one //big group

*WHEN P_ACCT*IS CE0004220*REC (EXPRESSION = 901)*ENDWHEN

*COMMIT

Limits the maximum number of members in a query*XDIM_MAXMEMBERS {dimension}= {max number of members}*XDIM_MAXMEMBERS Entity = 50

Above instruction, if entities to process exceed the limit of 50 members, the logic will break the query into multiple queries of no more than 50 entities each.

Notes:• Significant performance enhancement by entering a large value for XDIM_MAXMEMBERS• ENITITY is automatically defaulted to XDIM_MAXMEMBERS ENTITY =1• May want to keep ENTITY default setting when considering financial system implications.

Page 20: 128337090 BPC 7 0 Best Practices With Script Logic PDF

Record Manipulation*SELECTCASE *CASE *ENDSELECT

*XDIM_MEMBERSET Category = PLAN*XDIM_MEMBERSET Entity = C9000*XDIM_MEMBERSET P_DataSrc = UPLOAD*XDIM_MEMBERSET RptCurrency = LC*XDIM_MEMBERSET P_Activity = NONE*XDIM_MEMBERSET P_ACCT = CE0004210 ,CE0004220, CE0004230*XDIM_MEMBERSET TIME = 2007.JAN

*SELECTCASE [P_ACCT].[CE0004210]*CASE 12000[#CE0004220] = [CE0004230]*CASEELSE[#CE0004230] = [CE0004230] *2*ENDSELECT

*COMMIT

*SELECTCASE is a syntax friendly conditional statement similar to the IF>>Then>>Else statements used in other applications.

In this example: look at the record if the account is CE0004210, if the value of that record is 12000, then create a new records with account CE0004220 with a value of CE0004220 , if the value of the record is NOT 12000, then create an alternative record with account CE0004230 with a value of 2Xs CE0004230.

Page 21: 128337090 BPC 7 0 Best Practices With Script Logic PDF

The *REC instruction is used to generate a new, or modify an existing, database record.The *REC statement is typically used in the following manner:

Calculation on the current value of the record (Using the keywords “EXPRESSION” and “FACTOR”Calculation on the current record but then writing the results in record that may have one or more different dimensions members (when compared to the original record).

Example:The following syntax multiplies the value of the record by 2 and writes the result back to the

category budget*REC(FACTOR=2,CATEGORY=“BUDGET”)

IMPORTANT!The *REC statement can only be used within an *WHEN / *ENDWHEN structure

Record Manipulation *REC

Page 22: 128337090 BPC 7 0 Best Practices With Script Logic PDF

Record Manipulation *REC

The amount to be posted on the new record can be derived from the existing value using ‘Factor’ and ‘Expression’ key words

The ‘Factor’ key word multiplies the existing value by the specified factorThe ‘Expression’ key word allows the input of a formula (can contain arithmetical operators, like ‘+’,’-’,’*’,’/’, fixed values of the value of the source value (%value%))

Syntax[FACTOR | EXPRESSION = {Expression}]

Example*REC(FACTOR=1/2) … Current value is multiplied by 0.5*REC(EXPRESSION=%VALUE% + 500)… Adds 500 to the existing value

Page 23: 128337090 BPC 7 0 Best Practices With Script Logic PDF

Record Manipulation *REC

*XDIM_MEMBERSET Category = PLAN*XDIM_MEMBERSET Entity = C9000*XDIM_MEMBERSET P_DataSrc = UPLOAD*XDIM_MEMBERSET RptCurrency = LC*XDIM_MEMBERSET P_Activity = NONE*XDIM_MEMBERSET P_ACCT = CE0004220*XDIM_MEMBERSET TIME = 2007.JAN

*WHEN P_ACCT*IS CE0004220*REC (EXPRESSION = 20)*ENDWHEN

*COMMITThe *REC statement can only be used within an *WHEN / *ENDWHEN structure

Page 24: 128337090 BPC 7 0 Best Practices With Script Logic PDF

Record Manipulation *WHEN / *IS / *ENDWHEN

*XDIM_MEMBERSET Category = PLAN*XDIM_MEMBERSET Entity = C9000*XDIM_MEMBERSET P_DataSrc = UPLOAD*XDIM_MEMBERSET RptCurrency = LC*XDIM_MEMBERSET P_Activity = NONE*XDIM_MEMBERSET P_ACCT = CE0004220//*XDIM_MEMBERSET TIME = 2007.JAN

*WHEN P_ACCT*IS CE0004220*REC (EXPRESSION = 22)*ENDWHEN

*COMMIT

*WHEN - allows the programmer to identify the dimension of interest*IS – tests for a particular value, if this value is found then the next statement is executed*ENDWHEN – identifies the end of the *WHEN condition test

You can nest *WHEN / *IS /*ENDWHEN statements, for example:*WHEN P_ACCT*IS CE0004220*WHEN TIME*IS = 2007.JAN*REC (EXPRESSION = 22)*ENDWHEN*ENDWHEN

Page 25: 128337090 BPC 7 0 Best Practices With Script Logic PDF

Record Manipulation Calculations – MDX vs. SQLThere are two main ways to perform: A + B = CMDX Syntax:

[#C] = [A] + [B]– The calculated member is prefixed with a ‘#’

SQL Syntax : *WHEN ACCOUNT *IS A

*REC(ACCOUNT= C )*IS « B »

*REC(ACCOUNT= C )*ENDWHEN– The calculated member is specified in the *REC()

The MDX syntax is straight forward, C= A+B.

The SQL syntax involves the creation of two records: one with the value originally held by A and one with the value originally held by B. The two new records , assigned to account “C” by the REC statements, then aggregate up to the correct value.

Page 26: 128337090 BPC 7 0 Best Practices With Script Logic PDF

The *COMMIT statement instructs the saving of all new or changed records back to the database.

*XDIM_MEMBERSET Category = PLAN*XDIM_MEMBERSET Entity = C9000*XDIM_MEMBERSET P_DataSrc = UPLOAD*XDIM_MEMBERSET RptCurrency = LC*XDIM_MEMBERSET P_Activity = NONE*XDIM_MEMBERSET P_ACCT = CE0004220//*XDIM_MEMBERSET TIME = 2007.JAN

*WHEN P_ACCT*IS CE0004220*REC (EXPRESSION = 22)*ENDWHEN

*COMMIT

Record Manipulation *COMMIT

Page 27: 128337090 BPC 7 0 Best Practices With Script Logic PDF

© SAP 2009 / Page 27

1. Script Logic Overview 2. Scoping Techniques3. Record Manipulation4. Application to Application 5. Data Manager Integration6. Default Logic7. Custom Logic8. Information Resources

Agenda

Page 28: 128337090 BPC 7 0 Best Practices With Script Logic PDF

Application to Application *LOOKUP

Allows access to data in a different ApplicationPossibility to Lookup data in another application (for example for Currency Exchange Rates)All values that are defined in the *LOOKUP are queried at the beginning of the logic execution and are then available throughout the logic execution

© SAP 2008 / Page 28

Page 29: 128337090 BPC 7 0 Best Practices With Script Logic PDF

Application to Application *LOOKUP

Syntax

*LOOKUP {App}

*DIM [{LookupID}:]{DimensionName}="Value"

*DIM MEASURES=”MeasureName”

*ENDLOOKUP

*Where:{App} is the name of the application from which the amounts are searched.{DimensionName} is a dimension in the lookup (external) app.{CallingDimensionName} is a dimension in the current application.{LookupID} is an optional identifier of the “looked-up” amount. This is only required when multiple values must be retrieved.

© SAP 2008 / Page 29

Page 30: 128337090 BPC 7 0 Best Practices With Script Logic PDF

Application to Application *LOOKUP*XDIM_MEMBERSET TIME = 2006.AUG*XDIM_MEMBERSET P_ACCT=CE0004010*XDIM_MEMBERSET CATEGORY=ACTUAL

*LOOKUP RATE*DIM RATEEUR:TIME="2006.AUG"*DIM RATEEUR:CATEGORY="ACTUAL"*DIM RATEEUR:R_ACCT="AVG"*DIM RATEEUR:R_ENTITY="GLOBAL"*DIM RATEEUR:INPUTCURRENCY="EUR"*DIM RATEEUR:MEASURES="PERIODIC"*ENDLOOKUP…..*WHEN P_ACCT*IS "CE0004010"*REC(EXPRESSION=%VALUE%/LOOKUP(RATEEUR), RPTCURRENCY="EUR")*ENDWHEN

Restrictions-Using a FOR/NEXT loop inside the LOOKUP is not supported.- Reading multiple measures within a single LOOKUP by assigning different lookup IDs is not supported.

Page 31: 128337090 BPC 7 0 Best Practices With Script Logic PDF

© SAP 2009 / Page 31

1. Script Logic Overview 2. Scoping Techniques3. Record Manipulation4. Application to Application 5. Data Manager Integration6. Default Logic7. Custom Logic8. Information Resources

Agenda

Page 32: 128337090 BPC 7 0 Best Practices With Script Logic PDF

Data Manager Integration “Run Default Logic”

Any script logic file can be run from Data Manager for batch processing of formulasUsing Data Manager to execute Logic module formulas is useful for calculations that do not need to be executed immediately. For example, an administrator may decide to wait until all the data has been entered in the local currency before generating the translated amounts in the reporting currencies.

Data Manager can execute Default Logic as a post processing step.

Page 33: 128337090 BPC 7 0 Best Practices With Script Logic PDF

Data Manager Integration“Run Default Logic”

BPC delivers a process chain “DEFAULT_FORMULAS” that can be easily re-pointed from executing Default Logic to any Script Logic file.

Page 34: 128337090 BPC 7 0 Best Practices With Script Logic PDF

Data Manager Integration“Run Default Logic”

This Data Manager package can be easily pointed to any Script Logic file by modifying the package definition.

Page 35: 128337090 BPC 7 0 Best Practices With Script Logic PDF

© SAP 2009 / Page 35

1. Script Logic Overview 2. Scoping Techniques3. Record Manipulation4. Application to Application 5. Data Manager Integration6. Default Logic7. Custom Logic8. Information Resources

Agenda

Page 36: 128337090 BPC 7 0 Best Practices With Script Logic PDF

Run LogicDefault.LGF file

All logic in DEFAULT.LGF is executed after data sends.The INCLUDE statement shown below enables currency translation to happen in real time, rather than as a batch process.

Page 37: 128337090 BPC 7 0 Best Practices With Script Logic PDF

© SAP 2008 / Page 37

Run Logic*INCLUDE

Nesting Logic Files

Default Logic gets executed on every write-back to an application.

Use the *INCLUDE command to have one logic file call another logic file.

Page 38: 128337090 BPC 7 0 Best Practices With Script Logic PDF

© SAP 2009 / Page 38

1. Script Logic Overview 2. Scoping Techniques3. Record Manipulation4. Application to Application 5. Data Manager Integration6. Default Logic7. Custom Logic8. Information Resources

Agenda

Page 39: 128337090 BPC 7 0 Best Practices With Script Logic PDF

Custom BADIs in Script Logic Overview

Usage: *CALL_CUSTOM_LOGIC

DescriptionThis instruction is used to call any custom ABAP programming you have written

Examples:*XDIM_MEMBERSET ACCOUNT=CASH*XDIM_MEMBERSET RPTCURRENCY = LC*XDIM_MEMBERSET TIME = 2006.JAN*XDIM_MEMBERSET CATEGORY = ACTUAL*XDIM_MEMBERSET INTCO=NON_INTERCO

*CALL_CUSTOM_LOGIC CUST_CALC_ACCT

Operation TypeControl Flow

CategoryTechnical

Syntax*CALL_CUSTOM_LOGIC <BADI name>

Page 40: 128337090 BPC 7 0 Best Practices With Script Logic PDF

Custom BADIs in Script Logic Overview

Usage: *START_BADI

DescriptionThis instruction is used to call any custom ABAP programming you have written *WITH PARAMETERS

Examples:*XDIM_MEMBERSET ACCOUNT=CASH*XDIM_MEMBERSET RPTCURRENCY = LC*XDIM_MEMBERSET TIME = 2006.JAN*XDIM_MEMBERSET CATEGORY = ACTUAL*XDIM_MEMBERSET INTCO=NON_INTERCO

*START_BADI CUST_CALC_ACCTACCT_FROM = 10000ACCT_TO = 10001

*END_BADI

Operation TypeControl Flow

CategoryTechnical

Syntax*START_BADI

<key1> = <value1><key2> = <value2>

*END_BADI

Optional ParametersYou can use the following optional parameters within a *START_BADI / *END_BADIinstruction:Query - Performs the default query. Valid values are On and Off; the default is On. Set Queryto Off if you want to perform your own query.Write - Automatically writes back the data. Valid values are On and Off; the default is On.Example*START_BADI TEST

QUERY=ON

WRITE=OFF

*END_BADI

Page 41: 128337090 BPC 7 0 Best Practices With Script Logic PDF

Custom BADIs in Script Logic Overview

Call Custom LogicCan be used to call ABAP programs and parameters can be passed from the BPC Script Logic (it’s like defining new key words)

Script Logic DebuggingCustom Logic can be debugged

If the BADI has a filter, then in the script logic before calling the BADI, the customer needs to provide the filter value

NOTE: To pass parameters to the BADI, you can use the *START_BADI / *END_BADI commandNOTE: The BADI will run on data that was filtered through the Data Manager prompts

All BPC Script Logic within BPC 7.0 Obeys Concurrency Locking Use BW Transaction RSPLSE to diagnose locking issues

Page 42: 128337090 BPC 7 0 Best Practices With Script Logic PDF

Create a Custom BADI

To create a BPC Script Logic Custom BADI, you must first create an Enhancement Implementation of the Enhancement Spot: UJ_CUSTOM_LOGIC

TWO ENTRY POINTS:(transactions SE19 and SE20)

Page 43: 128337090 BPC 7 0 Best Practices With Script Logic PDF

Create a Custom BADI

Using Transaction SE19, you can create a new Enhancement Implementation like so:

Name the new Enhancement Implementation and assign it to an ABAP Package:

Page 44: 128337090 BPC 7 0 Best Practices With Script Logic PDF

Create a Custom BADI

Assign the new Enhancement Implementation to a transport (Type Workbench Request) to move it through the QA/PROD landscape:

Page 45: 128337090 BPC 7 0 Best Practices With Script Logic PDF

Create a Custom BADI

Define the BADI Implementation Name and the ABAP Implementation Class Name behind the BADI (The Implementation Class is where you code your custom logic in ABAP)

Page 46: 128337090 BPC 7 0 Best Practices With Script Logic PDF

Create a Custom BADI

Assign the new Implementation Class to a transport (Workbench Request) to move it through the QA/PROD landscape:

Page 47: 128337090 BPC 7 0 Best Practices With Script Logic PDF

Create a Custom BADI

Using Transaction SE19, you have just created the starting framework for your new BADI:This screen allows you to modify your BADI configuration

Page 48: 128337090 BPC 7 0 Best Practices With Script Logic PDF

Create a Custom BADI

Define a new KeyWord to call your newly created Script Logic Custom BADI:The BADI Filter Val is the same as the Key Word you use inside BPC Script Logic. Using this KeyWord with “CALL_CUSTOM_LOGIC” or “START_BADI / END_BADI” will invoke your BADI code

The BADI Filter Value is the Script

Logic KeyWord

Click Here

Page 49: 128337090 BPC 7 0 Best Practices With Script Logic PDF

Create a Custom BADI

Choose your KeyWord and set the value:NOTE: The KeyWord should represent what the Script Logic Custom BADI actually does (ie CUST_CALC_ACCT)

Page 50: 128337090 BPC 7 0 Best Practices With Script Logic PDF

Create a Custom BADI

ACTIVATE the BADINOTE: This activation is only for the BADI Enhancement Implementation – you must also activate your ABAP Implementing Class (see next few slides)

Page 51: 128337090 BPC 7 0 Best Practices With Script Logic PDF

Create a Custom BADI

ACTIVATE the Implementing ClassNOTE: Once you have activated your BADI you should thereafter only have to deal with your Implementing Class (unless you want to change the BADI properties – such as the Filter Value)

1st Click Here Next, Double-Click the text (or go straight to Transaction SE24 and enter the name of your Implementing Class)

Page 52: 128337090 BPC 7 0 Best Practices With Script Logic PDF

Create a Custom BADI

ACTIVATE the Implementing ClassNOTE: You have all the options of ABAP Object-Oriented Class Methodologies (Inheritance, Encapsulation, Poly-Morphism, Public and Private Methods, Attributes and Types, etc)

Your Business-Specific Logic will go inside the Execute Method

Page 53: 128337090 BPC 7 0 Best Practices With Script Logic PDF

Create a Custom BADI

You are now ready to begin coding ABAP for your Script Logic Custom BADI:NOTE: Beginners should set a break-point inside the execute method first and see what data will be passed to the BADI (filtering should be done in a careful and controlled manner).

Page 54: 128337090 BPC 7 0 Best Practices With Script Logic PDF

© SAP 2009 / Page 54

1. Script Logic Overview 2. Scoping Techniques3. Record Manipulation4. Application to Application 5. Data Manager Integration6. Default Logic7. Custom Logic8. Information Resources

Agenda

Page 55: 128337090 BPC 7 0 Best Practices With Script Logic PDF

© SAP 2008 / Page 55

BPC Information Sources

BPC Related Resources:

TRAINING:RKT Training: https://websmp205.sap-ag.de/rkt-epmE-Learning: https://www.sdn.sap.com/irj/scn/epm-elearning

PROBLEM SOLVINGSAP Developer Network (External):SDN BPC Forum: https://forums.sdn.sap.com/forum.jspa?forumID=270

Field Services Message Boards (Internal): BPC General: https://inj.wdf.sap.corp/forums/forum.jspa?forumID=506BPC_MS: https://inj.wdf.sap.corp/forums/forum.jspa?forumID=583BPC_NW: https://inj.wdf.sap.corp/forums/forum.jspa?forumID=159

Page 56: 128337090 BPC 7 0 Best Practices With Script Logic PDF

BPC Information Sources

For instructions about implementing an SAP Business Add-In, see the ABAP online help at:

http://help.sap.com/saphelp_nw70/helpdata/en/32/a83942424dac04e10000000a1550b0/content.htm.

BPC version for Netweaver Support Package’s Documentation Addendum for new supported Script Logic keywords:https://websmp210.sap-ag.de/instguidescpm-bpc > SAP BOBJ EPM > Business

Planning and Consolidation > 7.0, version for Netweaver > SAP BPC 7.0 SP02 NW Documentation Addendum

SDN BLOGSRunning BPC process chains within non-BPC process chains: https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/12929How to Pass Parameters to Custom Logic BADI using START_BADI https://www.sdn.sap.com/irj/scn/go/portal/prtroot/docs/library/uuid/20f4252d-98ca-2b10-e689-f85085ae2d12

Page 57: 128337090 BPC 7 0 Best Practices With Script Logic PDF

Q & A

Any Questions ???

Page 58: 128337090 BPC 7 0 Best Practices With Script Logic PDF

© SAP 2009 / Page 58

Copyright 2009 SAP AGAll rights reserved

No part of this publication may be reproduced or transmitted in any form or for any purpose without the express permission of SAP AG. The information contained herein may be changed without prior notice.

Some software products marketed by SAP AG and its distributors contain proprietary software components of other software vendors.

SAP, R/3, xApps, xApp, SAP NetWeaver, Duet, SAP Business ByDesign, ByDesign, PartnerEdge and other SAP products and services mentioned herein as well as their respective logos are trademarks or registered trademarks of SAP AG in Germany and in several other countries all over the world. All other product and service names mentioned and associated logos displayed are the trademarks of their respective companies. Data contained in this document serves informational purposes only. National product specifications may vary.

The information in this document is proprietary to SAP. This document is a preliminary version and not subject to your license agreement or any other agreement with SAP. This document contains only intended strategies, developments, and functionalities of the SAP® product and is not intended to be binding upon SAP to any particular course of business, product strategy, and/or development. SAP assumes no responsibility for errors or omissions in this document. SAP does not warrant the accuracy or completeness of the information, text, graphics, links, or other items contained within this material. This document is provided without a warranty of any kind, either express or implied, including but not limited to the implied warranties of merchantability, fitness for a particular purpose, or non-infringement.

SAP shall have no liability for damages of any kind including without limitation direct, special, indirect, or consequential damages that may result from the use of these materials. This limitation shall not apply in cases of intent or gross negligence.

The statutory liability for personal injury and defective products is not affected. SAP has no control over the information that you may access through the use of hot links contained in these materials and does not endorse your use of third-party Web pages nor provide any warranty whatsoever relating to third-party Web pages

Weitergabe und Vervielfältigung dieser Publikation oder von Teilen daraus sind, zu welchem Zweck und in welcher Form auch immer, ohne die ausdrückliche schriftliche Genehmigung durch SAP AG nicht gestattet. In dieser Publikation enthaltene Informationen können ohne vorherige Ankündigung geändert werden.

Einige von der SAP AG und deren Vertriebspartnern vertriebene Softwareprodukte können Softwarekomponenten umfassen, die Eigentum anderer Softwarehersteller sind.

SAP, R/3, xApps, xApp, SAP NetWeaver, Duet, SAP Business ByDesign, ByDesign, PartnerEdge und andere in diesem Dokument erwähnte SAP-Produkte und Services sowie die dazugehörigen Logos sind Marken oder eingetragene Marken der SAP AG in Deutschland und in mehreren anderen Ländern weltweit. Alle anderen in diesem Dokument erwähnten Namen von Produkten und Services sowie die damit verbundenen Firmenlogos sind Marken der jeweiligen Unternehmen. Die Angaben im Text sind unverbindlich und dienen lediglich zu Informationszwecken. Produkte können länderspezifische Unterschiede aufweisen.

Die in diesem Dokument enthaltenen Informationen sind Eigentum von SAP. Dieses Dokument ist eine Vorabversion und unterliegt nicht Ihrer Lizenzvereinbarung oder einer anderen Vereinbarung mit SAP. Dieses Dokument enthält nur vorgesehene Strategien, Entwicklungen und Funktionen des SAP®-Produkts und ist für SAP nicht bindend, einen bestimmten Geschäftsweg, eine Produktstrategie bzw. -entwicklung einzuschlagen. SAP übernimmt keine Verantwortung für Fehler oder Auslassungen in diesen Materialien. SAP garantiert nicht die Richtigkeit oder Vollständigkeit der Informationen, Texte, Grafiken, Links oder anderer in diesen Materialien enthaltenen Elemente. Diese Publikation wird ohne jegliche Gewähr, weder ausdrücklich noch stillschweigend, bereitgestellt. Dies gilt u. a., aber nicht ausschließlich, hinsichtlich der Gewährleistung der Marktgängigkeit und der Eignung für einen bestimmten Zweck sowie für die Gewährleistung der Nichtverletzung geltenden Rechts.

SAP übernimmt keine Haftung für Schäden jeglicher Art, einschließlich und ohne Einschränkung für direkte, spezielle, indirekte oder Folgeschäden im Zusammenhang mit der Verwendung dieser Unterlagen. Diese Einschränkung gilt nicht bei Vorsatz oder grober Fahrlässigkeit.

Die gesetzliche Haftung bei Personenschäden oder die Produkthaftung bleibt unberührt. Die Informationen, auf die Sie möglicherweise über die in diesem Material enthaltenen Hotlinks zugreifen, unterliegen nicht dem Einfluss von SAP, und SAP unterstützt nicht die Nutzung von Internetseiten Dritter durch Sie und gibt keinerlei Gewährleistungen oder Zusagen über Internetseiten Dritter ab.

Alle Rechte vorbehalten.