combined interview questions summarised

266
Allinterview.docx tell about yourself. what is the difference between eewb and aet eewb: eewb is used to manually create a custom field (creating table, field, data element structure and all....) aet: Application enhancement tool is available in 7.0 version.it is a tool used to create a custom field where the system automatically creates table, field and data element structure. what is one order framework what is badi, give a scenario(se18, se19 for enhancements) badi scenario - time difference calculation The standard ELM process (in SAP GUI – transaction CRMD_MKTLIST) creates new Business Partners with the role ‘000000 Business Partner (General)’. The functionality of External List Management needs to be enhanced so that new Business Partners are created with the role “BUP002 – Prospect”. In order to do this please refer to OSS SAP Note 915015 “ELM : Create business partners in role ‘Prospect’”. The OSS note describes how to enhance the CRM_MKTLIST_BADI BadI. The Prospect role needs to be used both for Individuals and Organisations created using ELM. validation and error msg scenario - budget code for campaign population, if not then validation error and msg to be displayed(msg trans code se91, t100 table) what is the limitation of web ui(pricing analysis not possible, no known limitation so far) and aet(create custom field in webui dont know in GUI) what is the architecture of web ui(based on mvc, call goes from web ui to controller and context node/bol entity is invoked and it interacts with genil to go and store in db and the response comes to view and view is assigned to viewset and window will display the view.)

Upload: phani

Post on 01-Sep-2015

306 views

Category:

Documents


3 download

DESCRIPTION

int

TRANSCRIPT

Allinterview.docxtell about yourself.

what is the difference between eewb and aeteewb: eewb is used to manually create a custom field (creating table, field, data element structure and all....)aet: Application enhancement tool is available in 7.0 version.it is a tool used to create a custom field where the system automatically creates table, field and data element structure.

what is one order framework

what is badi, give a scenario(se18, se19 for enhancements)badi scenario - time difference calculation

The standard ELM process (in SAP GUI transaction CRMD_MKTLIST) creates new Business Partners with the role 000000 Business Partner (General). The functionality of External List Management needs to be enhanced so that new Business Partners are created with the role BUP002 Prospect. In order to do this please refer to OSS SAP Note 915015 ELM : Create business partners in role Prospect. The OSS note describes how to enhance the CRM_MKTLIST_BADI BadI. The Prospect role needs to be used both for Individuals and Organisations created using ELM.

validation and error msg scenario - budget code for campaign population, if not then validation error and msg to be displayed(msg trans code se91, t100 table)

what is the limitation of web ui(pricing analysis not possible, no known limitation so far) and aet(create custom field in webui dont know in GUI)

what is the architecture of web ui(based on mvc, call goes from web ui to controller and context node/bol entity is invoked and it interacts with genil to go and store in db and the response comes to view and view is assigned to viewset and window will display the view.)

tell me the project scenario, where you implemented, the one new field based on a cond on another field. how to implement itdifferent games popping up from 90,80,70 jackpots etc. if a value is entered in a field in web ui, then the next field shud display a dropdown of 1,2,3.

first field blackberry AET field create blackberry fieldcomponent workbench: right click on the htc field(ext.zfld0003), to generate getter and setter, i, p, v attributes, after generating,

create data element, domain, field, and table.1.data element - black berry model()--vaues:602.data element - black berry number

Second field HTCAET field create HTC fieldcomponent workbench: right click on the htc field(ext.zfld0004), to generate getter and setter, after generating,

1after creating tables now create class for both field(bbclass, htcclass). 2these two class shud have 3two interfaces and 4load selection table(it is method tab) and5constructor.6one more class create, it will be general class, 7this will have custom field names. and 8one more method on_New_Focus. we will 9create value help descriptor class. go to the getter method of first field(bb) we have to write,1 line of code to get field from that particular class.in setter, do the same way, reference.in get_I, only class name( it will have std code0in get_V, value helper class descriptorin get_p, get the field name from picklist.

PAVIM getters and settersGET_ attribute name --> value getter b) SET_attribute name --> value setter c) GET_M_attribute name --> gives the metadata when the user does F2 on the web UI d) GET_I_attribute name --> for enabling and disabling the fielde) GET_P_attribute name --> You can call a method which actually does the custom logic of launching a pop up etcf) GET_V_attribute name --> What type of field it is ? I mean, you can make it as a link, dropdown, check box etc .. and during server event u can specify which event handler should be called

do the same for second field.

in ui config tool tab of component workbench, show fields, we will put it on web ui

if there is a text button in bp page of web ui, in one of the assignment blocks, then if this is clicked based on condition two different components shud be selected and the pop shud display the relevant values. (crm question book , last 3 pages, how to create assignment block, now do the coding to display pop

did you work on reports in abap

what do you know in abap, in which modules did you workbapi, badi, user exit, menu exit, screen exit, enhancements, oops(crm related, related to webshop,ecom,product catalog, jsps also involved)

do you know badi, how many types are there, can we have two badis with same name. ( one badi created, then on the same name do the enhancements, only one badi will be active)

cognizantInterviewQuestions

what is role config key(In this IMG activity, you can define the role configuration keys. The configuration key is used in the Configuration tab page in the workbench to create the configuration. This key is assigned to the business role to identify the configuration that is to be used.view can be customized & configured to role config key)what is bussiness role(ic_agent,ic_manager,eco_manager, configured in su03-authorizations and profiles)what is pfcg role and where will we assign it (su01 - user maintainence,authorization to read/modify for a role,su3 - maintain user profiles)what is bus partner category(person,group,organization)what is bus partner role(sold-to-party,ship-to-party,payer etc, gold,premium,silver)what is bus partner classification - competitor, prospect,consumer, vendorwhat is org determination rolewhat is partner detrmination proc. what are its functions.(set of rules of how the system works with bp during transaction processing.they bring together partner functions and access sequence)what did you do in your career as sap crm consultantwhat did you do at gamesyswhere do we get the datasource for target group(from lsmw, as text file using interface and conversion feeded to crm system)how will you get the bps from ecc to crm, while getting the datasource for target group.(it is thru middleware). tell about middleware.what is mbdoc and sbdoc. how to get missing bps, which we didn't get from bulk upload to crm.what is sbdoc.(synchronising BDocs used for crm to mobile load of data only)where did you use marketing, sales and service module in gamesyshow will you do item category determination(trans type + item cat grp + usage + main item cat). what is item cat grp(it decides the kind of product like std item, service item, sales item service prd, service contract etc.). where do we maintain it( if ecc is integrated then we will not maintain MM guy will do, if standalone then we have to do)who was the client, (i worked directly for the client). so was it a in-house project.impl example for BOL, GENILare these two same delta load and SBDocs

contactjobInterviewQuestions

what is transaction launcherhow to do webservicewhat is webservice, inbound, outbound, steps for it, consuming or providing webservice.what is leading transaction category

http://lincrm.selfip.net:8000/sap/bc/gui/sap/its/webgui/!?~transaction=IC_LTXE&~okcode=ICEXECUTE

prerequisitesYou have done the following:

1 Installed the Internet Transaction Server (ITS) to provide access to the local SAP CRM system or to another SAP system2 Started the ITS3 Noted the URL of the ITS4 Defined your logical systems using transaction BD545 Defined your Remote Function Call (RFC) destinations using transaction SM596 Assigned RFC destinations to logical systems using transaction BD97

every step implementation of gamesys. It is a must.

---------------------------------------------------------1.how to provide a webservice. how did you create it(i created using apache axis, normally to create and give the url so that the service is available, few methods of a class with/without params are made as webservice).

2. how did you consume a webservice(with ws_design_tool, created and gave the attributes and created a wsdl, etc)

3.how did you consume, there is a standard way(by providing the proxy class we can consume a webservice thru port and webservice provider has endpoint. the publishing of webservice in service repository, where we mention the UDDI endpoints etc)

4.tell about transaction launcher, how to create it for VA01 transaction. (create a transaction, by going to se80, like tstc and creating a method and making it synchronous with r/3. go to rfc and create logical destination in sm59 and define the logical site in bd54,assign logical site and rfc destination in bd97 now in spro go to configure trans launcher a table with logical systems, client and description will be displayed, now add your site. when we click on trans launcher the wizard will start where we have to give the bus object, it is mandatory, and select the method and parameters with parameter class and complete the wizard. now pulling this into navigation bar workcenter and restarting with the same role, we can get the transaction launcher ready in web ui.)

5.what is an action, how many types of action are there(3 types - method call - to trigger the action based on some condition, workflow - eg escalation, it can go once we assign, smartforms) . what is scheduling the action and starting the action(if the schedule condition is not met, the action is no longer available in transaction.Actions that are available in the transaction can only be executed if the start condition is met). why both are there, in which scenario both are used.Please explain the difference between Actions & Workflow?In actions there is a step call "SET Processing" in the wizard.

For the particular field "SET Processing" how to assign the Workflow Template. Workflow is a sort of process flow. The workflow can be triggered with it's own functionality (workflow start conditions) or you can create workflow and then trigger workflow by using actions. In this case you set triggers for actions and this will start workflow. And within action you define that when action is triggered it calls workflow.

In step "Select processing" you must choose option "Workflow". And then you can choose workflow template.

6.what are alerts, how many types are there, where did you use, how to use them (like popping up a window with some info about bp)

7.what is one order framework(it came in ver 5) where to use it, did you work on it, what is its purpose. (One Order framework is a architectural prowess / flexibility of txn CRMD_ORDER, which enable the user to create variety of Business Transactions (Sales order, Service order , opportunity, lead , Activity , campaign & many more ) with only one txn CRMD_ORDER. This is called ONE ORDER framework . The One Order Framework is defined as the Framwork to handle all the CRM One Order Documents. Basically CRM One Order Documents are Sales Orders, Service Orders, Activities, etc. They all have a common structure to handle the data. They are basically grouped into

Header Part - Items - Items ....

So the header and item relationship is 1..n There are set of API's which handles the Create, Change and delete scenarios of the One Order Documents. They are CRM_ORDER_READ,CRM_ORDER_MAINTAIN,CRM_ORDER_DELETE,etc The Function Group is CRM_ORDER_API.

GO to se38 and run program crm_order_read with one opportunity or activity number, after running you will find the respective Export parameters being filled, if its opportunity then ET_opport_h will be filled if its activity then et_activity_h and et_activity_i will be filled as activity can have item data as well. the whole point is that everything revoles around these descriptions used in export parameters.

8.did you work on enhancing any components, std or custom defined ones.how to add fields on webui (added a field, based on that cond substatus field with dropdown and based on that four diff text boxes, only one will be available remaining all are grayed. used in srqm_incident_h, for service module) scenario where did you used. how to develop this( created two classes and two interfaces and two load selection tables with constructors and one general class to call these two methods from two classes using get_v_attribute and checking them in a method and validating which component to go on.)(dropdown box by p-getter for dropdown type button and v-getter to get values from load selection table, ie all values from table to load selection table and to its constructor, this is retrieved by v-getter, then event handler is used to trigger event eh_on_select to display values in next tab.)(gender, if male then diff games and female then diff games).

8.1.so didn't you use event handler, if not then how can you trigger to go for next field?

9.what is badi, where did you use them. tell your project scenario. (there is no project without badi impl, it is a must) (i have used in service module, when service request comes, then the time taken to close it with response of success - time difference badi - this is used for analytical purposes like reporting. in the relevant method found the difference in badi and displayed on screen/db)

10.what is data encapsulation11.what is object, what are access specifiers(public, protected, private)12.how to call a private method, in another class(using friend function)13.when will you create a new class and when do you copy it.14. how to do PI connection in netweaver(using rfc destination, we will get logical system link, basis guy will give, there we will do)what is abstract class, can we instantiate themwhat is the difference between custom controller and component controllerwhat is the global component controller and what is global data set.how to display view from one component to view from another component, where do we map(view configuration)did you ever create a new component.what is collection wrapper.one orderframework, components, context class, contextnodes, tables, structures, methods, msg class, attributes, component usage1.did you work on abap reports2.what is the difference between badi and bapi3.what is badi and what will we do in badi4.how do you find whether customer exit exists or not(go to SMOD transaction...press f4...give package name which is related to your tcode...you will get exact exit.to find out package go to SPRO or SE84. )

User exits (Function module exits) are exits developed by SAP. The exit is implementerd as a call to a functionmodule. The code for the function module is writeen by the developer. You are not writing the code directly in the function module, but in the include that is implemented in the function module.

The naming standard of function modules for functionmodule exits is: EXIT_

The call to a functionmodule exit is implemented as: CALL CUSTOMER.-FUNCTION .User exit - A user exit is a three character code that instructs the system to access a program during system processing.

SXX: S is for standard exits that are delivered by SAP. XX represents the 2-digit exit number.

UXX: U is for user exits that are defined by the user. XX represents the 2-digit exit number

Customer exit - The R/3 enhancement concept allows you to add your own functionality to SAPs standard business applications without having to modify the original applications. SAP creates customer exits for specific programs, screens, and menus within standard R/3 applications. These exits do not contain any functionality. Instead, the customer exits act as hooks. You can hang your own add-on functionality onto these hooks. )

5.did you work on bsp6.did you work on screen painter7.what is bdoc8.how do you transfer bdocs from ecc to crm9.tell me what did you do in service10.how did you create service order11.did you work on promotional management and opportunity. what is its difference12.in which modules you worked in crm13.how did you implement security packages in your project14.did you work on xcm, what is xcm15.how do you add and configure a web application in xcm. just tell the steps.16.how did you implement pricing17.how do you configure the ecom products with crm as backend in xcm18.did you work on sap netweaver, basis - configuring and administration of crm(no)19.then what did you do in netweaver(integrating with java applications on netweaver platform)20.did you work on function modules and module programming21.in bapi, did you use just like a web interface22.did you work on BDC, what is it, how do we implement23.what is the difference between domain and data element(Domains:Domain is the central object for describing the technical characteristics of an attribute of an business objects. It describes the value range of the field. Data Element: It is used to describe the semantic definition of the table fields like description the field. Data element describes how a field can be displayed to end-user. )

----Diff B/W Bapi and ALE . BADI & USER Exits

BAPI stands for Business API(Application Program Interface).

A BAPI is remotely enabled function module ie it can be invoked from remote programs like standalone JAVA programs, web interface etc..You can make your function module remotely enabled in attributes of Function module butA BAPI are standard SAP function modules provided by SAP for remote access. Also they are part of Businees Objest Repository(BOR).

BAPI are RFC enabled function modules. the difference between RFc and BAPI are business objects. You create business objects and those are then registered in your BOR (Business Object Repository) which can be accessed outside the SAP system by using some other applications (Non-SAP) such as VB or JAVA. in this case u only specify the business object and its method from external system in BAPI there is no direct system call. while RFC are direct system call Some BAPIs provide basic functions and can be used for most SAP business object types. These BAPIs should be implemented the same for all business object types. Standardized BAPIs are easier to use and prevent users having to deal with a number of different BAPIs. Whenever possible, a standardized BAPI must be used in preference to an individual BAPI.

The following standardized BAPIs are provided: Reading instances of SAP business objects GetList ( ) With the BAPI GetList you can select a range of object key values, for example, company codes and material numbers.

The BAPI GetList() is a class method. GetDetail() With the BAPI GetDetail() the details of an instance of a business object type are retrieved and returned to the calling program. The instance is identified via its key. The BAPI GetDetail() is an instance method. BAPIs that can create, change or delete instances of a business object type

The following BAPIs of the same object type have to be programmed so that they can be called several times within one transaction. For example, if, after sales order 1 has been created, a second sales order 2 is created in the same transaction, the second BAPI call must not affect the consistency of the sales order 2. After completing the transaction with a COMMIT WORK, both the orders are saved consistently in the database.

Create( ) and CreateFromData! ( ) The BAPIs Create() and CreateFromData() create an instance of an SAP business object type, for example, a purchase order. These BAPIs are class methods.

Change( ) The BAPI Change() changes an existing instance of an SAP business object type, for example, a purchase order. The BAPI Change () is an instance method.

Delete( ) and Undelete( ) The BAPI Delete() deletes an instance of an SAP business object type from the database or sets a deletion flag.

The BAPI Undelete() removes a deletion flag. These BAPIs are instance methods.

Cancel ( ) Unlike the BAPI Delete(), the BAPI Cancel() cancels an instance of a business object type. The instance to be cancelled remains in the database and an additional instance is created and this is the one that is actually canceled. The Cancel() BAPI is an instance method.

Add ( ) and Remove ( ) The BAPI Add adds a subobject to an existing object inst! ance and the BAPI and Remove removes a subobject from an object instance. These BAPIs are instance methods.

ALETo develop a new custom ALE scenario, comprises 5 steps:1. Design and develop the custom IDoc with it?s segments and a new message type2. Configure the ALE environment with the new IDoc and message type (customer model, partner profiles and linking IDoc to message type)3. Develop the outbound process which does the following:Populates the custom IDoc with control info and functional dataSends the IDoc to the ALE layer for distributionUpdates status and handles errors4. Configure the ALE inbound side (partner profiles with inbound process code)5. Develop the inbound process which does the following:Reads the IDoc into a BDC table; selects other data that is requiredRuns transaction using call transaction or BDC sessionUpdates status and handles errors

BADI is just an object-oriented version of user-exit. Instead of entering program code into some function module (as in customer-exit), you define some class which has to implement predefined methods and those methods are fired at predefined points just like an old user-exit. Some BADI can have multiple independent implementations which is much better for software deployment as several developers can implement the same BADI independently.

To understand BAPIs, you must know that there are 2 things. One is the SAP Object Repository of the Business Object Repository (BOR) and the Function Builder. Now the business objects with their business processes and business data, reside in the BOR, with the corresponding BAPI. the implementation of this BAPI resides in the function builder. Any external world (non SAP) programs or legacy systems can access the business processes or data of any business object in the BOR, thru the process of invoking the BAPI implementation of the BAPI for this business object. Thus we can access a business object. So we can say that a BAPI is a process that allows third party s/w or non SAP programs to access SAP Business object data and processes.

BAPI : is just a function module that can be called from non-sap system. It can still be used in the sap system also.

Eg: BAPI_PO_CREATE : To create Purchase Order

BADI: is a also used to ehnacnce existing functioanlity of the transaction. It is aobject-oriented technology. We write our code in the method.

BAPI is different from BADIs and User exits.

BAPI : BAPI basically works like a function module. the major difference being that it can work like a RFC. That means it can work from system to system. Mostly the name of a BAPI can be seen in se37 by just giving BAPI_* F4 and you will see a lot of BAPIS.

BADI : BADI is a new concept and are also known as Business Addins. SE18 and SE19 are the two transactions which are used to make a BADI. Mostly BADIS are not made but selected from what is given in SAP. These are similar to user-exits but are method based. One can say it is an extension to the user exits. If one has an issue in which one has to change so existing things in SAP then BADI can be used. First one has to define it and then find out a suitable implementation for the issue concerned

User-exits : there are many types of user exits like Function exits, Menu Exits, Screen exits, field exit. These are used when there is an issue of changing SAP given screen or menu or report.. Main transactions which are used in these cases is CMOD and SMOD. One can find out the user exit concerned and change it accordingly as per ones requirement

BADI's can be used any number of times, where as USER-EXITS can be used only one time. Ex:- if your assigning a USER-EXIT to a project in (CMOD), then you can not assign the same to other project.

how to create zviewhow do we assign zview to different zcomponenthow do we create zfield in eewb for customer_i table and how do we create same thing for lsmwhow to create zbolhow to create zmodelhow to add field of some component to some other componentwhat is the difference between service ticket, service request and service orderwhat is service orderwhat are actions, i have configured....but activity is coming....what is the process of questionaire sending to customer and recieving it, in email campaigningonce after customer fills up the questionaire, without he filling up the reply address, it has to come back, how to do that (is it erms auto acknowledgement, service template coming back or email campaign)what is campaign management, how many types of campaign mgmt are therewhat is email campaign, what is campaign automation(online survey,b2b,b2c)how do we get the campaign id, while creating any campaignhow do we generate quotation and opportunity(oppt shud be used when business has large no. of sales employees, long cycles, high value orders. sales methodology has sales assistant, project goals, buying centre, competitor analysis, oppt assessment, oppurtunity plan)sales order: billing can be done either in crm or erp, it cannot be delivered in crm, it can be created with ref to oppt, it can be transferred to erp only there are no errors.)(sales key process include - sales planning and forecasting, territory mgmt, accounts and contacts mgmt, activity mgmt, oppt mgmt, quotation and order mgmt, product configuration and pricing, billing and contract mgmt, incentive and commission mgmt, sales analytics)what is the difference between complaints and returnswhat is the difference reason code and subject profile. why multilevel categorization is therehow to create a new bus role and when we start a web ui this role shud be displayed and if the nav bar has diff things, how to resolve it.navigation bar profile has link, work center, launch transaction, BI Report.business role : 1. goto->detailed obj->extended obj description->create/change/display business role.2.in org model bus role assigned to org unit/position. 3.users are assigned to positions 4.crm_ui_profile used to assign a business role to user.su03 - authorizations and profilessu3 - crm_ui_profileerms - scot,swi1sapconnect email/fax/letter work items of type TS14008030/31/32.erms emails by work items by TS00207914.agent inbox adjusting to project needs with crm_ic_inbox_badi.

ui config tool(adding removing fields, adding headers,editing field properties,config search criteria,config result lists, displaying assignment blocks(direct,lazy)interaction center - interactive scripting (helps in interaction,questions/answers, navigation to next screen)on interaction record, the dependant bus transactions are sales order,sales ticket, service order, service ticket, complaint, lead. search result list for interaction center - export results to excel,view results in pie chart,re-arrange columns via drag and drop,sorting and filtering of columns.agent performance - multiple data sources in one report,bw aggregated historical data,crm non aggregated,excel planning data,oltp online real time data)

what is the difference between sevice request/service ticket and service orderservice request(BO-bus2000223)=service ticket(BO-bus2000116)+multiple multilevel categorization schema+knowledge articles+master service request(BO-bus2000224)Bus obj(fields + methods)trans type(partner detr proc+text detr proc+org data profile+status profile)crm marketing mgmt - crm mkting planning, crm campaign mgmt(design,execution, coordination,optimization,monitoring),crm lead mgmt,crm customer segmentation, crm personalization, crm mkting analytics, crm loyalty mgmt(credit card points),crm collaborative campaign mgmt(channel partner coordinate in campaign development and execution).

ui performance - 1.don't put expensive coding in do_prepare_output method in view contoller.2.bol buffer.crm_order_maintaing for buffering db update. 3.event register and un-register again. 4.lazy in assignment blocks. 5.don't use ALL component, it costs memory.

what is badi, what is the name of badi, how did you do configuration & customization, how did you invoked in the project. which function module, is it sap std or own, name, scenario you used (lsmw is a program..to get the data from diff systems into crmbdoc are used only for ecc.Creating a BAdI Procedure1. Start the Object Navigator (SE80).2. Open an enhancement spot. For more information, see Creating, Editing, and Deleting Enhancement Spots. 3. Select the Enh. Spot Element Definitions tab page. 4. Choose Create BAdI. A dialog box appears. 5. Enter a name and a short text for the BAdI. BAdIs are in the same namespace as global data types from the ABAP Dictionary, global classes, or interfaces. For BAdIs, we recommend using the prefix BADI_ (or ZBADI_, and so on, in the customer namespace).The new BAdI appears as a node in the tree display of the tab page.

6. On the right-hand side of the page, do the following: a. Enter the attribute for multiple use. b. Enter the instance creation mode. c. Enter the attribute for internal SAP BAdIs (only SAP internal use). d. Optional: Enter a Fallback Class. e. In the tree, expand the BAdI and choose the Interface node. Enter the name of an existing BAdI.

7. Optional: Choose the function Create Filter to create a filter.Here you can: a. Enter the filter name, filter type, and description.b. Optional: If you choose Constant Filter Value During Call, you may only specify a constant value at the respective filter when using GET BADI. This is provided for future performance improvements of the statement.c. Optional: Enter either a data element or a domain with fixed values, or a search help. Alternatively, enter a check or input help class, and a length (together with decimal places). In this way, the filter values specified at GET BADIcan be checked during the BAdI implementation.

8. Optional: Choose the function Create Screen Enhancement in order to create the BAdI as a screen enhancement.The BAdI must not be of a multiple use type. a. Enter Calling Program, Screen Number, Subscreen Area, and Description. b. Optional: Select Default Value to specify a screen of a program that is used if no active implementation is found at runtime.

9.Optional: Choose Create Function Code Enhancement to create the BAdI as a function code enhancement.

The BAdI must not have any filters and must not be of the type for multiple use.

a. Enter Program, Function Code, and Description.

b. Optional: Select Default Value to specify an icon, a menu text, a pushbutton text, and a quick info, all of which are used when no active implementation is found at runtime.

10. Optional: Create an example implementation.

a. Select the BAdI, and choose Create Example Class from the context menu.

b. Enter the name of a BAdI implementation class and a description.See also:

Definition of BAdIs

Displaying, Changing, or Deleting a BAdI-----------------------how will you input the data, the datasource to crm db, mean master datawhat was the backend system to get the datasource - if lsmw, then how did you pull master dataWhat is LSMW?Legacy System Migration Workbench or LSMW is SAP standard program that can be used to easily load / change master data or transactions in SAP without any programming at all. It can be used to upload data at cutover, such as: open orders, contracts, materials, vendors, stock on hand. It can also be used in a production system to make changes to existing data. Very limited authorization checks are available on the transaction, so the use of it must be very well controlled.

One input file can be used to create all the views of the material master. For all the material types. Even if different views and fields are used for the different materials.

Steps to take 1. Create text file with data to be loaded 2. Set up and run LSMW

The following link will provide good information on LSMW Idoc method:http://help.sap.com/saphelp_nw04/helpdata/en/ad/2d54a41d7011d2b42e006094b944c8/frameset.htm

(the data can be pulled in 4 ways - batch direct/input method,batch input recording method, business object method BAPI, IDoc)what are the 3 different objects we pull into crm from lsmw - business, customizing, conditional object)-------------------------------creation badi we used the tcode SE18 and SE19.

and find BADI

For BADI's,

1)goto to tcode SE24 give the CL_EXITHANDLER and display and then double click on the GET_INSTANCE keep Break point at this location 'call method cl_exithandler=>get_class_name_by_interface'then the tcode it will trigger there and we can debugg there we can find badi'for that tcode and then remove the break point.

2)Goto to tcode->status->program name->double click on that program will display'sthen press crtl+F then cl_exithandler

what is the purpose of aet and eewb.what is the transaction typewhat is trans code for bdoc modellerif z fields are there in ecc, then in crm how do we do(with extension bdoc modeller)for these z fields will you only map these fields with filter settings or should you do any coding changes.what will be there in bdoc modeller, the screen, how it is split(flow context, tables structures,mapping r/3 to crm, etc)what is the mvc architecturewhat is web ui architecturewhen will you go for custom controller, there is one basic necessity, which will not satisfy for component controller or view controllertell me the reason for custom controller, why did you use in your projectwhat is the difficulty you faced in your project implementations so far.how do you work when the requirement comeshow to do the number groupings in crmwhen we are pulling bp data from ecc to crm, what are the steps, like number grouping which is the preliminary steps, so what are theyif the bp is having some id in ecc, then how to get that in crm (using ext ref number in identification tab)how to create zfields and custom fields in web ui(using aet or eewb)where did use dynamic search in model browser as mentioned in resumewhy did you create new bsps and new components as mentioned in resumewhat is bdoc typewhat is the trans code for bsp component workbench (bsp_wd_cmpwb) what is it for crm 5.0what is caveat... in developing bspshow to create business role. how will you do.when we search in inbox of erms, then in the result list, the link/button which takes us to particular result, how can we know the class of that(it is not by pressing f2- by pressing f2 we will get the component and class of the edit button or display or create but not of the result list). one class will be invoked which will tell the behaviour of the button like if its submit or link etc, which class is that.crm_order_save, what is its functionalitywhat is the work of commit_work, in programming for save.prepare output,buffer check and save, 3 functionalities for order_save, how does this badi work.when committing the code or when will you call the badi.what is request load(r3ar4, used when delta load is not working...delta load works for business objects only, but request load works for customizing and condition objects)what is one-order framework, in it when different transactions are created, how does the system know which transaction(crmd_oder) is service order or which one is sales order etc.how to find different badis(using cl_exithandler, putting a breakpoint there and going for debugging mode)tell the complete process how will you work when a requirement comes to testing phase

how is pricing implemented (pricing formulas in lib folder in pricing module and executed everytime we run the application)

pricing comes in sd, ipc comes to crm

what is item categoryhow is item category determined (trans type + item category group + usage + main item category)what is item category group ( it is products)what is main item category.

what is productwhat are the product types, did you implement any products and product type.what is product type, product category, product hierarchy,product class(R3PRODHIER, if ecc is integrated, then r3prodhier is activated )

what is activity

how many types of activity are there(task and bus activity)

what is consolidated database.(for mobiile sales, we will keep separate db, which is copied from crm db) (crm db is different from consolidated database)

what is BDoc modeller, where and why is it used.(while integration, from ecc to crm mBDoc and crm to eccwhat is rule modeller.

how did you implement webservices.

in gamesys, was there ECC (it is standalone crm), then why did you go for crm, what is marketing and campaign, how many types of campaigns are there, (only for billing, ecc is not required, billing is done by third party, it will send confirmation to customer)

where do you specify email and telephone campaign, how is it going to know that it is email campaign.(email camapaign is specified by smtp)(in call list mgmt we go for telephone campaign, for email we will mention the channel - smtp)

how do you get the data into crm db, if ecc is not there.(outside data uploading to crm thru lsmw ie 1.interfaces(for zfields), 2.conversions(for mapping))

if it is standalone, what did you implement in crm. what about financing, once sales order is executed,

then billing and invoice how did you handle that with stand alone crm, how will the customer know about billing docs(billing system was a third party system) so billing was not implemented in crm?

what is pricing procedure(document pricing from sales document and customer pricing(type of customer, gold,silver,premium). what are condition types, how did you implement condition types and pricing. how did you implement access sequence.

how many bus partner functions are therehow did you implement buss. parter roles(from img-spro)how did you customise bp roles, what are diff tabs present in bp roles, do we need to customise it.

did you implement bol objects, how to implement themwhat are context nodes, did you work on context nodes, what did you do.

what you used to do in GE and Ericsson, how the requirements used to come, did you interact with client, what is the process.

(from process design/blue print, identify functional spec & tech spec then it goes to impl, in functional customize & configure and in technical it is dev)

what is poc, what kind of poc was there in your previous companies. ASAP.

what is sdn note. in your career, did you create any note. what is the process to create a note(architect created sdn notes, i didn't do). how to implement the sdn note, how will sap ppl interact and collaborate to work on sdn note. what are the diff sdn notes you applied in your project.(told about the searching of different gaming products and implementing the sdn notes). while customising, didn't you ever face any errors or issues, that you escalated as sdn

from help&support->report a product error->then from our name create a note, then it will ask for error, our company details etc

where did you used mobile application studio - mobile sales - 4 things like app,bus obj, tile set, tilewhat is marketing mgmtwhat is opportunity mgmt. diff between lead and opportunity mgmtwhat do we do in opportunity mgmt(4 concepts are there which are not present in lead mgmt. eg: sales methodology). can we send quotation without questionnaire.

you kept many big words in your resume, atleast know the basic things about themwhat do you know about solution manager (never worked on it, like creating packages etc)

what are the control attributes used in item categorywhat is transaction launcher(when external order has to be displayed in crm, then it is used ). how to configure different site when loggng out from ic webclient.how did you create the sales order

what is admin console(smoeac)

always ecom project - pricing, item category, product

is it 1:1 relation between bp roles

ITCSCRMTechnical

why do we do UI configuration ( show available fields, to set etc, mandatory, display)how do we see model nodes(genil_model_browser)what is model node and value node(Model nodes are used when we have the BOL object. One exmple would be if we want to show a business partner details on UI, then we will create a model node for BuilHeader object. BuilHeader object is available in BP BOL component. In case, we do not have BOL in place and we want to call apis directly and maintain data, then we go for Value node, where we need to write our own logic for handling data. To know whether a context node is Model node or not, please check the attribute BASE_ENTITY_NAME of that context node class. For model node, it would have the BOL object name as value and for Value node, it would be empty. To access/set data for attributes under a context node, use the getter and setter methods. i.e. get_ and set_ Before implementing filter objects to a BADI. We need to deactivate all the implementation for that BADI. Go to SE18 (BADI definition) and from there navigate to all BADI implementation to view all the active implementations for that BADI.

Select the BADI implementations listed on the screen and deactivate the implementation. Once done, return back to the initial screen of SE18 and proceed with next step.Step 2 --> go to SE18 BADI Definition screen and change the existing BADI definition that we created in the earlier tutorial.

Select the FILTER DEPENDENT check box under the TYPE section. This will open up the FILTER TYPE field for inputs. And do an F1 on the FILTER TYPE field.

Click on the F4 on the FILTER TYPE field name and enter some search criteria to find a relevant data element.

And click on the continue button

Select the data element from the list to set up your filter and hit enter.

Click on the save button and active the BADI definition. If a BADI implementation already exists then the system will try to adjust the implementations since the definition of the BADI has been changed (This step will be required only if you have not deactivated the implementations as explained in the first step).

Click on the continue button.

Click on continue to proceed Now to ensure that the interface parameters have been adjusted by the system click on the interface tab and then double click on any method to see the list of parameters.

As seen from the above screen the system has added a new parameter. You can now use this filter in the code to trigger your logic conditionally. Similarly it will also adjust the other methods defined in the interface. Since in the implementation part the BADI interface is used the changed done in the parameters are bydefault reflected in the BADI implementation as well.

Lets go to the implementation part and see the details.

Select the menu IMPLEMENTATION --> DISPLAY. The system will display all the implementation if it has more than one implementation. s

Select the first implementation and click on the continue button.

Now click on the ATTRIBUTES tab to see the difference.

You will notice that now the implementation is capable of adding filters for the user names. You can click on the INSERT ROW button to add any new filters. And as you can see from the screen shot below the new parameter list is automatically available in the implementation part.

Now lets use this filter type and make changes to the program.

We have introduced a new CHECK condition to query and check the value of the filter during runtime. Click on the save and activate the method. Return to the initial screen of the implementation and define a filter value by clicking on the INSERT ROW button under the filter section. The filter value acts like a condition. Only if, during the runtime the filter value matches the method will get executed.

Once done click on save and activate the implementation.

Similarly add filter to the other implementation and save and activate.

As seen from the above we have used a different user name in the other implementation. So this means that the first implementations will execute for user SAPUSER and the second implementation will be executed for the other user SAPUSER1. This is the main functionality of the Filters in the BADIs you can control when a BADI should be triggered in the system. We need to make changes to the program in order to reflect the newly created filter. Comment the existing call of the instance method and Call the instance method again using the PATTERN.

As seen above the second call to the method has the additional filter parameters FLT_VAL. Pass appropriate values to the parameters and once done with changes save it and activate the program for testing. Before testing place a breakpoint on each of the implementations to see which one gets triggered in what sequence. Execute the program and check if its stops at the breakpoint.

As seen from above it triggers the first IMPLEMENTATION of the BADI the reason being we passed the filter value SAPUSER and we defined the filter value as SAPUSER in the implementation screen. So since these two values match the system triggered the first implementation and the execution stops at breakpoint place in the method. Now since we are using the filter value passed by the program and as the above check fails the execution will come out without executing.

now if you hit F7 to proceed to the next execution you will notice that the execution has returned back to the program.

The simple reason being the second implementation filter check failed. That means that we are passing the filter value SAPUSER from the program and inside the Implementation we have added the filter as user SAPUSER1. So since the filter value does not match the system does not trigger the second BADI implementation and hence there is no output.

Now lets make one change in the FIRST BADI IMPLEMENTATION. We will remove the check we had introduced in the code.

We have commented the line as shown above. Lets execute the program again and see the system behavior.

Now if you see from above, the FIRST IMPLEMENTATION has triggered as the value of the FILTER passed from the program and the value of the FILTER maintained in the Implementation section matches. But it does not trigger the SECOND IMPLEMENTATION as the value of the filter passed from the program does not match the value of the FILTER maintained in the implementation section.

Now lets change the calling program and change the filter value such that it DOES not trigger the FIRST IMPLEMENTATION but triggers the SECOND IMPLEMENTATION.

Now we are passing the filter value as SAPUSER1 instead of SAPUSER. Now when we execute the program the system should trigger only the SECOND IMPLEMENTATION of the BADI and not the first one. Lets execute the program and confirm this

As seen above the system does not trigger the first implementation but it directly triggered the SECOND IMPLEMENTATION as the value of the filter passed by the program and the value of the filter maintained in the implementation section matches. And we can see the new output.

This how we can use the filters to control the way a BADI should trigger. This is very useful concept introduced by SAP for customer enhancements.

Step by Step guide for BADI Multiple use implementation

http://saptechnical.com/Tutorials/ExitsBADIs/MultipleUse/page1.htm

Step 1 --> Enter a BADI Definition name and Click on the CREATE button.

Enter a short description and under the TYPE section choose if you wish to have multiple implementation or a Filter object to the BADI. See F1 help on the multiple use and Filter to find more details

Click on Save and create a TP Step 2 --> Define the Interface Use the menu GOTO --> INTERFACE or simply double click on the interface name under the interface tab.

Enter the method name and define the methods parameters in the interface.

Select the method and click on the parameters button to enter the parameters for the method.

Click on Save and return back to the initial screen. Follow the steps above to enter more methods if you wish too.

Parameters for the second method.

Click on save and activate to activate the custom BADI.

If there is any inconsistencies in the BADI definition and the interface definition the system will throw a warning message as shown below

Based on the selection the system will automatically adjust the BADI definition or interface. In our case the system adjusted the parameters for the methods. It changed the Exporting parameter to the Changing parameters

Step 3 --> Create the Implementation for the BADI. You can either go to TCode SE19 or use the menu option Implementation --> Create as shown in the screen shot below.

Enter the name of the BADI implementation you wish to create and click on the continue button.

On the next screen enter a description for the implementation and click on the save button and create TP subsequently.

Click on the interface tab

And double click on the method you wish to implement in the current BADI implementation. Write the code to achieve the functionality of the method.

Click on the execute button to test the method.

On the next screen click on the Edit Interface view button or the display icon next to the ZIF_EX_MYBADI node.

Now click on the execute button against the method to execute the functionality.

Enter the required parameters and click on execute to see the results or the output or the outcome of the method execution.

Similarly finish the coding for the other methods.

Once done do the testing and see if it works fine

Once the testing is done. Return to the main screen and activate the implementation of the BADI.

So far what we have seen is only ONE IMPLEMENTATION of the BADI. We have not done MULTIPLE IMPLENTATION so far. We will now proceed to write a simple program.

As seen above the program is very simple and has the following components. 1. Data declaration (Type ref and any other data variables as required) 2. Call to the method CL_EXITHANDLER to get the implementation name of the BADI 3. Using the instance, call the method which has been implemented for the BADI.4. To call the method you can use the PATTERN option as shown below from the ABAP editor. 5. 6. Do a CTRL + F6 to get the pattern button or click on the PATTERN button from the application tool bar. Select the ABAP OBJECT patterns radiobutton and click on the continue button. 7. On the next screen enter the class name and the method to be called as shown below 8. 9. It does not matter whether you are calling the static method or the instance method. Click on the continue button. 10. 11. Make changes as required and pass the respective parameters. In the above case we changed the EXIT_NAME and the INSTANCE parameters. 12. Now call the method from the interface using the interface reference l_BADI_INSTANCE as shown below 13. 14. 15. Enter the parameters required and any additional code required for the report. 16. 17. Run the report and you will get the output as shown below 18. 19. Now lets go back and create a new IMPLEMENTATION in SE19 as we have enabled MULTIPLE USE in the BADI DEFINITION. 20. Go to SE19 and enter a new name and click on the create button 21. 22. And when asked for the definition enter the same definition name. 23. 24. And click on the continue button. 25. 26. Enter a meaningful description and save and activate the second implementation. Next double click on the method you wish to implement and write the code. 27. 28. As seen above in the second implementation we have hard coded the value for the email id instead of getting the value from the tables. Save and activate the method and then return to the main screen and activate the implantation again. 29. Now try to go to each of the implementation and place a breakpoint at the methods. So we first go to the implementation 1 and place a break point as shown below. 30.

And similarly go to the second implementation and place a breakpoint on the method as shown below

Once done. Go to SE38 and execute the program developed in earlier steps. You will notice that the program will stop at both the breakpoints as the system triggers all the implementations if there is more than one for a multiple use BADI.

Now if you check the value of the variable emailed then you will notice that the emailed is fetched from the database.

Now click F7 till you reach to the next breakpoint or the next implementation

So if you see from the above screen. The cursor is at the second implementation and the value of the email-id is still available in the second implementation. Now if you execute one step, the value of email-id will be overwritten as shown below.

And once you execute completely you get the output of the report.

PLEASE NOTE: in our case the system first executed the FIRST BADI IMPLEMENTATION and later it executed the SECOND BADI IMPLENETATION. However this sequence is dynamic and there is no guarantee that this sequence will be maintained all the time.

what is business role, spro path, tcode, what is navigation profiledid you create any navigation profile and assigned it to business rolewhat is role config key and what is its purposewhat is sales cycle and quotation, did you work on webui for thiswhat is transaction type,how to do parter determination procedure and access sequencehow to assign transaction type to navigation profilewhat is technical profile and what is the use of it.in a lead transaction category, i want the attachment from the assignment block to go to the opportunity assignment block, can we transfer the attachment. is it possible or not.if we want to send the attachment, how to do it, any modifications required, not in crm_order_maintain, in upper leveli want to assign two roles for the business role, how can we do it.what are action profileswhat is the difference between start condition and schedule conditionin actions, i want to send email based on some condition, how to do itdo you know transaction launcher

what is the purpose of exec methodwhat is component set and its purposewhat is the bol programming, what is genilwhat is modelwhat is model in mvc architecturewhat classes and methods will be created if we create a new context node.what is the method we use for binding context nodes.what is component controller and custom controllerhow to do component usage, purpose of binding context nodes to component controllerin runtime repository, what is the purpose of modelwhy bol layer is in place, why can't we use genil layer directly.which methods and interfaces are implemented if we enhance/create a viewwhat is do_prepare_outputin a server roundtrip, how many times do_prepare_output can be called.is init() method and do_prepare_output samewhat methods do we call in bol and genil programming and which interfaceswhat was the complex scenario you worked in crm webui in careertell me few scenarios you worked on webuitell me anything about the sap gdc projecti just want to know 1 liner def for different termsif a field is disabled, how to make it work. though if you use get_i_attribute, it can be enabled, but the value you enter will not be stored.wht is the purpose of connect_nodes, is it anything related to on_new_focus.how to enhance standard component.after enhancing standard component, i want to remove the enhancement for a single view keeping other enhancement as it is. how to do it.from a global variable, to pass the value and invoke different role configs, how to do it.can we do abap coding in component bench html page, if so what are the extensions required to do it.what are call back methods and how to implement themwhat is the difference between access object and dependent object, how to access the dependent object.what is the purpose of wd_usage_initialize methodif the variable is not bound in bol layer, how do you enable it1) Why there is in need of the GENIL Layer when i call call the class methods directly from UI layer.2) What is BOL Programming and How do BOL Programming work exatly ?3) I am debugging the standard , when ever i click to create (say create appointment ) , how the framework handles that the control should be given to that particular genil create method only ? 4) Collection reference is filled from the GENIL LAYER, is it true ?5) Please explain some thing on the standard classes which are used in CRM WEB UI.6) Is really BOL Layer required ? What is the layer would have been not there?7) Value node collection cannot be obtained from typed_context . Why is it so ? 8) CL_CRM_BOL_CORE - with this class what all things we should achieve. There are so many methods inside this ? 9) So many standard interface are present and they are used in many classes . When to use these interface and when to use classes in which these interface are inherited ?10) Lock objects in the Main genil class, in which manner we should use this method ?11) How to display a message on CRM WEB UI Screen ?12) what get_property_as value will do and get_property as string will do ?13) Want to know one complete flow from UI to Data base.14) in Search page when we click on the Result page , we are navigating to a different component where detailed views will be shown. This is done through Navigation link. I just want to know how do they carry the data also ?15) I want to have field on Screen on the Screen and want to store the value in SO10 - standard object . How to do this ?16) Create_related_entities and Get_related_entities are there in ON_NEW_FOCUS Method. When and how to make use of these ? and where do the create related entities will take the control to the in genil ?17) Copy_selfwith structure ? What is this method doing ?18) What is the use of GET_M Method as i see all the methods having the same code and nothing more logic implemented apart from the generated code ?19) When Modifying certain fields on UI, Modified objects will be available in ct_changed_objects , how this is controlled so that this particular internal tble is filled ?20) fill_struct_from_nvp_tab is one of the method of Create objects in main genil class. What it does exatly ?21) Get_objects of genil is bascically used to read the values to disply on UI right ? 22) EXECUTE_OBJECT_METHOD is also part of the genil class , what this does and when it should be used ? 23) GET_DYNAMIC_QUERY_RESULT is for dynamic search and GET_QUERY_RESULT is the normal search , but i can see that for dynamic search also, GET_QUERY_RESULT method is been called from event handler of search button. ?? Then what is the difference between these ? 24) While exposing the view as interface view , why there is need to add the context as my view has already that context ? 26) Why not we are adding the context in the case of vale node , and why only in the case of model node we are adding for the above question ? to check whether dynamic navigation supported

lr_nav_descr type ref to if_bol_bo_property_accesslr_navigation type ref to if_crm_ui_navigation_service

lr_navigation = cl_crm_ui_navigation_service=>get_instance( )lr_navigation ->is_dynamic_nav_supported(lr_nav_descr)

lr_navigation->navigate_dynamically( lr_col )

popup codeproduct_popup type ref to if_bsp_wd_popup

product_popup = comp_controller->window_manager->create_popup(iv_interface_view_name = SearchHelpWindowiv_usage_name = CUProductSearchiv_title = lv_title

product_popup->set_on_close_event(..)product_popup->set_display_mode(..)product_popup->open()To get selected nodelr_current type ref to if_bol_bo_property_accesslr_item type ref to if_bol_bo_property_accesslr_context_node type ref to cl_bsp_wd_context_nodelr_cw type ref to cl_bsp_wd_collection_wrapper

lr_current = lr_context_node->collection_wrapper->get_current()

lr_item = me->typed_context->Contextnode->collection_wrapper->find(iv_index)Calling outbound pluglr_window type ref to cl_bsp_wd-windowlr_window = me->view_manager->get_window_controller()lr_window->call_outbound_plug( iv_outbound_plug = plugname )a)Views contains respective classes for data control. Views have view controllers, which contains implementation class,context class and context node class.

Implementation Class:- It controls request processing methods,all toolbar button related methods,all event handlers,plugs etc.Starts with C but after enhancement it is renamed to starting with Z and ends with _IMPL.

Context Class:- It controls data context i.e. binding etc.It ends with _CTXT.

Context Node Class:-It controls context node related methods.It ends with CN00,CN01..etc.All Context Node attribute have their methods to change properties of field ( i.e. display only or editable,Drop Down,Check Box etc and set/get field values).

b)Controller has major role in Web UI to control data flow from presentation layer to API and vice versa. There are 5 controllers.1)View Controller2)Component Controller3)Window Controller4)Custom Controller5)Interface Controller

View Controller:- It reacts to events that occur in the corresponding view or view set. It also manages view inbound and outbound plugs,which are point of entry into and exit from the view for handling navigational events.

Component Controller:-It controls all instances of the controller-View,application and custom-present in its component.

Window Controller:- Each view is contained in a window. The window provides view with space for displaying its content. Like view controller,the window manages inbound and outbound plugs.Unlike the view controller,the window controller manages inter-component navigation instead cross-navigation between views inside the same window.

Custom Controller:- It acts as central place for sharing data between views.The custom controller makes it convenient for one view to access other view's data without either of the view having to directly expose its internal model to the outside world.

Interface Controller:-It controls the navigation across components. Here,we are specifying the interface view( we have to create interface of the window to make it available for outside world i.e. public). We are including context node also which is used for data flow across components. During navigation,context node of interface controller should be same as of context node of component controller.

c) Run-Time Repository:- Run-Time Repository is important part of component. We are doing assignment of views to the view set or windows in run-time repository only.Model Node layout with respective component set is also placed in run-time repository.Interface Controller,Component Usage are part of run-time repository.Whenever we are making changes in run-time repository.All details are already created in repository.xml. We can get all information related to component in repository.xml. In a component'.do or .impl' classes, event handler. inbound and outbund plugs are CONTROLLER,'context(.ctxt), Context nodes(.cn00..). attributes comes under MODEL'.HTM' layout is nothing but VIEW.

Order of methods before displaying the view :

1) DO_INIT_CONTEXT is basically used to initialize the context nodes or pre-populate them with some values.2) DO_VIEW_INIT_ON_ACTIVATION Always called, after context init is used for registering the handlers.3) DO_CONIG_DETERMINATION is used to change the screen layout.4) SET_VIEW_GROUP_CONTEXT in general used to on overview page to set a view in editable , display or reset mode.5) DO_PREPARE_OUTPUT is used at every each event in order to refresh or default the initial values based upon the parameter iv_first_time = 'X'.6) .HTM Page is to load bsp page7) Get_XXX methods of the attributes transfer BOL data to view code text fetch logic can be implemented in this method.After the user perform some action the order will be as follows :

1) DO_HANDLE_DATA is called at the runtime after user has made inputs on the view or a user action has been triggered.2) SET_XXX methods of the attributes transfer view data to BOL field conversion can be implemented in this method.3) DO_VALIDATE_INPUT is used to validate the data of the whole context before it is transferred to the APIs.4) DO_HANDLE_EVENT Responsible for triggering the corresponding event handler depending on the user actions triggered.5) DO_FINISH_INPUT used at the end of all the data input on the screen. ex: when user press Enter on view

Sample Code for BOL Creation :*Loading a BOL object using CL_CRM_BOL_CORE*You can use this class to access directly with Business object implementations.*Also said as Heart of Root objects , only single instance can exists per session.*To create or modify you need a reference of BOL object factory.Scenario : Create a Lead , Campaign , Business Partner or One Order transaction using Reports or use in methods of BAdis to get the instance of object. Here is a code Creation of Activity - One Order Object in CRM system.DATA : lr_core TYPE REF TO cl_crm_bol_core.

TRY.

lr_core = cl_crm_bol_core=>get_instance( ).

lr_core->start_up( 'BT' ).

CATCH cx_crm_genil_general_error.

ENDTRY.

*

*-->Build Create Parameters of Root Object.

DATA: ls_params TYPE crmt_name_value_pair.

DATA: lt_params TYPE crmt_name_value_pair_tab.

CLEAR : ls_params , lt_params[ ].

*

*-->Build Create parameters Root Object 'BTOrder'

*--> Process Type

ls_params-name = 'PROCESS_TYPE'.

ls_params-value = 'ZACTIVITY'.

APPEND ls_params TO lt_params..

*-->

ls_params-name = 'OBJECTIVE'.

ls_params-value = ls_data-objective.

APPEND ls_params TO lt_params.**Create Root Instance or Entity Factory.*

DATA : lr_factory TYPE REF TO cl_crm_bol_entity_factory.DATA : lr_order TYPE REF TO cl_crm_bol_entity.

*

* Create Root Instance in a Collection.

TRY. CALL METHOD lr_core->root_create EXPORTING iv_object_name = 'BTOrder' iv_create_param = lt_params iv_number = 1 RECEIVING rv_result = lr_col.*

*-->Note Either use root_create or get_entity_factory to create.*--> Obtain Factory of Root Object in Entity.

lr_factory = lr_core->get_entity_factory( iv_entity_name = 'BTOrder' ). lr_order = lr_factory->create( lt_params ).

CATCH cx_crm_unsupported_object.

data : lr_adminh type ref to cl_crm_bol_entity.*--> Get Dependent Objects.

lr_adminh = lr_order->get_related_entity( iv_relation_name = 'BTOrderHeader' ).

IF lr_adminh IS NOT BOUND.

TRY.

*-->Create Dependent Objects.

lr_adminh = lr_order->create_related_entity( iv_relation_name = 'BTOrderHeader').

CATCH cx_crm_genil_duplicate_rel cx_crm_genil_model_error.

ENDTRY.

ENDIF.

*

DATA: lr_activity TYPE REF TO cl_crm_bol_entity.

TRY.

lr_activity = lr_adminh->create_related_entity( iv_relation_name = 'BTHeaderActivityExt' ).

CATCH cx_crm_genil_duplicate_rel cx_crm_genil_model_error.

ENDTRY..

*

* -->set the attribute using set_property method.

DATA : ls_activity TYPE crmst_activityh_btil.

*

lr_activity->get_properties( IMPORTING es_attributes = ls_activity ). ls_activity-fieldname1 = lv_val1. ls_activity-fieldname2 = lv_val2. ls_activity-fieldname3 = lv_val3.

lr_activity->set_properties( EXPORTING is_attributes = ls_activity ).

*

* -->Submit Root Objects and Child Objects Which are created.

* -->Always call modify on bol core.

lr_core->modify( ).

*

*Save and Commit Changes Using Global Transaction Context

* DATA: lr_transaction TYPE REF TO if_bol_transaction_context .*

lr_transaction = lr_core->get_transaction( ).

IF lr_transaction->check_save_needed( ) EQ abap_true AND lr_transaction->check_save_possible( ) EQ abap_true.

lv_success = lr_transaction->save( ).

IF lv_success IS NOT INITIAL. lr_transaction->commit( )

ELSE.

lv_transaction->rollback( ).

ENDIF.

****************************************************************************************************************Sample Code for BOL SEARCH

Scenario : Retrieving the data of Business Partner , One Order transaction , Lead , Activity or any other business objects this can be done via CL_CRM_BOL_QUERY_SERVICE and CL_CRM_BOL_DQUERY_SERVICE class objects.

You use this class for a simple and advanced search to select a business and hold business objects in collection using IF_BOL_BO_COL interface. A BOL Entity is nothing but an instance of a business object. It can be BP header, CRM One order object, product and so on. Sometimes there can be a no of entities grouped together as a table. CL_CRM_BOL_ENTITY class is used for implementing business objects as entity reference its represents unique object instance.DATA: lr_qs TYPE REF TO cl_crm_bol_dquery_service,

ls_param TYPE crmt_name_value_pair,

lt_param TYPE crmt_name_value_pair_tab,

lr_result TYPE REF TO if_bol_entity_col,

lr_iter T YPE REF TO if_bol_entity_col_iterator,

lr_entity TYPE REF TO cl_crm_bol_entity.

*

*Get and prepare dynamic query service.

lr_qs ?= cl_crm_bol_dquery_service=>get_instance( 'BTQAct' ).

*

* Set Query Parameters.

ls_param-name = 'MAX_HITS'.

ls_param-value = '5'.

APPEND ls_param TO lt_param.

lr_qs->set_query_parameters( lt_param ).

*

*Add selected parameters or criteria .

lr_qs->add_selection_param( iv_attr_name = 'OBJECT_ID'

iv_sign = 'I'

iv_low = 'VALUE'

iv_high = ' ').

*Execute Query and retrieve result

lr_result = lr_qs->get_dquery_result.

*

DATA : lr_entity TYPE REF TO cl_crm_bol_entity.

*Use Iterator to access entities in query result

lr_iter = lr_result->get_iterator( ).

*

* Get the first record from Collection.

lr_entity = lr_iter->get_first( ).

*

WHILE lr_entity IS BOUND.

*Access Attributes of Business object.

lv_name = lr_entity->get_property_as_string( name ).

lv_id = lr_entity->get_property_as_string( id ).

WRITE lv_name.

lr_entity = lr_iter->get_next( ).

ENDWHILE.

*********************************************************************************************************************Sample Code for BOL CHANGE OR UPDATE ENTITYScenario : To Modify or update a Business Object entities.To update BOL entity , First we need to search using Search Object and get the entityobject (Root object ) once we can the instance of Root object we can update the entity.for Search : Use Above code use as reference.

data : lr_core type ref to cl_crm_bol_bo_core.

lr_core = cl_crm_bol_core=>get_instance( ).

TRY.

lr_core->start_up( EXPORTING iv_appl_name = 'ONEORDER'

iv_display_mode_support = abap_true ).

CATCH cx_crm_genil_general_error. "#EC NO_HANDLER

ENDTRY.

DATA:

lr_qs TYPE REF TO cl_crm_bol_query_service,

lr_iterator TYPE REF TO if_bol_entity_col_iterator,

lr_search_result_coll TYPE REF TO if_bol_entity_col,

lr_btorder TYPE REF TO cl_crm_bol_entity,

lr_btorder_h TYPE REF TO cl_crm_bol_entity.

* Start BT Appl

lr_qs = cl_crm_bol_query_service=>get_instance( 'BTQuery1O' ). "#EC NOTEXT

* set search parameters

CALL METHOD lr_qs->set_property

EXPORTING

iv_attr_name = 'OBJECT_ID'

iv_value = lv_object_id.

* set search parameters, Bus Object type 'LEAD'

CALL METHOD lr_qs->set_property

EXPORTING

iv_attr_name = ' OBJECT_TYPE'

iv_value = 'BUS2000108'.

lr_search_result_coll = lr_qs->get_query_result( ).

IF lr_search_result_coll IS BOUND.

lr_iterator = lr_search_result_coll->get_iterator( ).

ENDIF.

IF lr_iterator IS BOUND.

lr_btorder = lr_iterator->get_first( ).

ENDIF.

*Get the Entity of Activity Object

CALL METHOD lr_btorder->get_related_entity

EXPORTING

iv_relation_name = 'BTOrderHeader'

RECEIVING

rv_result = lr_order_h.

CATCH cx_crm_genil_model_error .

ENDTRY.

*

lr_order_h->switch_to_change_mode( ).

*Locks are always set on root object.

IF lr_order_h->lock( ) = 'X'.

IF lr_order_h->is_changeable( ) = 'X'.

*

*Set property also locks the object entity if lock has not been set.

lr_order_h->if_bol_bo_property_access~set_property( iv_attr_name = 'DESCRIPTION'

iv_value = 'Melbourne' ).

*Modify BOL layer

lr_core->modify( ).

ENDIF.ENDIF.

*

lr_transaction = lr_core->get_transaction( ).

lv_success = lr_transaction->save( ).

if lv_success eq abap_true.

lr_transaction->commit( ).

endif.

*****************************************************************************************************Sample Code for BOL Delete * Use Above code for Entity Object

lr_entity ?= lr_result->get_first( ).

*

*Lock and modify the property

IF lr_entity->lock( ) = if_genil_boolean=>true.

lr_entity->delete( ).

*Modify the Core Object

lr_core->modify( ).

ENDIF.

* Then Again Use save and commit using transaction context.

********************************************************************************************************************UI Development CodesSaving Object into Database EH_ONSAVE

You use this interface to control transaction behavior using if_bol_transaction_context.

DATA lr_tx TYPE REF TO if_bol_transaction_context.

DATA lr_entity TYPE REF TO cl_crm_bol_entity.

DATA lr_core TYPE REF TO cl_crm_bol_core.

*

lr_entity ?= me->typed_context->object_name->collection_wrapper->get_current( ).

lr_tx = lr_entity->get_transaction( ).

IF lr_tx IS NOT BOUND.

lr_core = cl_crm_bol_core=>get_instance( ).

lr_tx = lr_core->begin_transaction( ).

ENDIF.

IF lr_tx IS BOUND.

IF lr_tx->check_save_possible( ) = abap_true.

CHECK lr_tx->save( ) = abap_true.

lr_tc->commit( ).

ENDIF.

ENDIF.

me->view_group_context->reset( ).

*********************************************************************************************************************Cancel Changes or Reset Objects EH_ONCANCELDATA lr_entity TYPE REF TO cl_crm_bol_entity.

DATA lr_tx TYPE REF TO if_bol_transaction_context.

*

lr_entity ?= me->typed_context->node->collection_wrapper->get_current( ).

lr_tx = lr_entity->get_transaction( ).

lr_tx->revert( iv_suppress_buffer_sync = abap_true ).

me->view_group_context->reset( ).

**********************************************************************************************************************Edit Objects EH_ONEDITDATA: lr_entity TYPE REF TO cl_crm_bol_entity.

*

lr_entity ?= me->typed_context->node->collection_wrapper->get_current( ).

*

CHECK lr_entity IS BOUND.

*

CHECK lr_entity->is_change_allowed( ) = abap_true.

lr_entity->lock( ).

*

IF lr_entity->is_locked( ) = abap_false.

me->view_group_context->reset( ).

ELSE.

me->view_group_context->set_all_editable( ).

ENDIF.

**********************************************************************************************************************Config Use of DO_CONFIG_DETERMINATION method to change the screen layout.*For Each Object type and Subobject type combination, there is 1 view configuration

*

lv_object_type = 'ZOBJTYP'.

lv_subobject_type = 'ZSUBTYP'.

*

* Set the config keys to fetch relevant configuration.

me->set_config_keys( iv_object_type = lv_object_type

iv_object_sub_type = lv_subobject_type

iv_propagate_2_children = abap_true ).

"

********************************************************************************************************************Set or Populate value nodes with value using CL_BSP_WD_VALUE_NODETYPES: BEGIN OF str,

status TYPE char20,

END OF str.

*

* Structure of status context node.

DATA lr_struct_ref TYPE REF TO str.

*

* Structure of your context node

data ls_struct type str.

*

DATA lr_value_node TYPE REF TO cl_bsp_wd_value_node.

*

CREATE DATA lr_struct_ref.

CREATE OBJECT lr_value_node

EXPORTING

iv_data_ref = lr_struct_ref.

ls_struct-status = 'Your Value'.

lr_value_node->if_bol_bo_property_access~set_properties( ls_struct ).

*

*Add Value Node to a collection

typed_context->testnode->collection_wrapper->add( lr_value_node ).

Get a model node from Mixed node using CL_BSP_WD_MIXED_NODE

DATA: lr_mixednode TYPE REF TO cl_bsp_wd_mixed_node,

lr_access TYPE REF TO if_bol_bo_property_access.

*

*Get the current entity from your mixed node

lr_mixednode ?= me->typed_context->contexnodename->collection_wrapper->get_current( ).

lr_access ?= lr_mixednode->if_bsp_wd_ext_property_access~get_model_node( ).

Multiple Business role assignment to user Instead of using Parameter tab, try to assign PFCG role to user under Roles tab. You can assign multiple PFCG role to single user in su01.For eg: if you want the user to give access of sales pro and marketing pro means assign SAP_CRM_UIU_SLS_PROFESSIONAL and SAP_CRM_UIU_MKT_PROFESSIONAL PFCG role to them. If you want to assign customized business role then go crmc_ui_profile and find the PFCG ID of customized role then assign that to user.Try to use TC 'PPOMA' or 'PPOMA_CRM'. You can assign multiple Roles to a user from these transaction codes.

Bol programming classes and interfaces CL_CRM_BOL_COL CL_CRM_ENTITY_COL CL_CRM_BOL_ENTITY IF_BOL_ENTITY_COL IF_BOL_BO_COL IF_BOL_BO_PROPERTY_ACCESS.

I know its so important for any developer to find badi's that has to be dealt with. Finding a right Badi for a particular enhancement is the key for best solution. 1. Go to transaction SPRO and use the find functionality or go to the specific application area. A lot of times SAP puts all the BADIs that they provide into the IMG under customer enhancements in the module that the BADI is relevant to.2. Search : Go to TCode: SE84->Enhancements->Business Add-inns->Definition4. Trace it: Start transaction ST05 (Performance Analysis).Set flag field "Buffer trace" Remark: We need to trace also the buffer calls, because BADI database tables are buffered. (Especially view V_EXT_IMP and V_EXT_ACT)Push the button "Activate Trace". Start transaction VA02 in a new GUI session. Go back to the Performance trace session. Push the button "Deactivate Trace".Push the button "Display Trace".Search with name SXS.(represents Badi's and Spots), V_EXT_IMP, V_EXT_ACT4. Runtime Break-point at CL_EXITHANDLER=>GET_INSTANCE, CALL BADI and GET BADI.I usually start with first one, if i cud not get any, then take up 2, 3, 4 approaches like above. These are ordered with time consuming factors. Concerning to SAP CRM WEBUI enhancements, Badis are the best place to build up enhancements. SAP provided badi for most of business process. I have seen the cases in webui, where people tend to ignore bad's and do the enhancement at the UI level (BSP_WD_CMPWB), this is not optimum solution. I would suggest to offer such solution only if there is no appropriate badi's. HiFor example The Badi def is: MB_MIGO_BADI. For thisU create the implementation and activate the implemenation using se19 transaction.Actually SAP not interact the implemenation classes directly . Sap interact with the implementation classes using the Business add-in class(For ex in this cas:CL_EX_MB_MIGO_BADI).The sample code is as follows:data: l_badi_inst type ref to IF_EX_MB_MIGO_BADICALL METHOD CL_EXITHANDLER=>GET_INSTANCEEXPORTINGEXIT_NAME = 'MB_MIGO_BADI'CHANGINGINSTANCE = l_badi_instEXCEPTIONSNO_REFERENCE = 1NO_INTERFACE_REFERENCE = 2NO_EXIT_INTERFACE = 3CLASS_NOT_IMPLEMENT_INTERFACE = 4SINGLE_EXIT_MULTIPLY_ACTIVE = 5CAST_ERROR = 6EXIT_NOT_EXISTING = 7DATA_INCONS_IN_EXIT_MANAGEM = 8others = 9.IF SY-SUBRC 0.MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. If sy-subrc = 0. The CL_EXITHANDLER take the input as interface reference variable and return back to the object of business add-in class.To use this object and interact with the implemenation classes.else.call method l_badi_inst->(u r reuired method in implemenattion class).when multipleimplementations are there the SAP using the business add-in class to interact with the implementation classes one after the other.If it is helpful rewards points.RegardsPratap.M Do_init_context method: This method is called after the context node is created. This method is called after wd_create_context which in turn calls connect_nodes on context level. This method is usually used to initialize the context nodes or pre-populate with values.EX: Consider you have a table view, every time you open this webpage, then you might have to display few values into the table, then you can get value from any ZTABLE and assign to context node for displaying into the view by adding into the context_wrapper.This method is triggered when you want to access data from any particular context node, this makes that particular context output ready.Do_prepare_output: This is triggered when each time view is displayed. This method is also called whenever you do some action (press enter, press button) on the view, first do_validate_input is called, then do_finish_input will be called. After this methods is called do_prepare_output is called. This method is used for preparing the output for UI Screen. It is possible to change the field properties based on requirement. It has one parameter called IV_FIRST_TIME which has the value 'X' for the first time the view is displayed.Note: Only for the first time view is displayed the value will be 'X' Example: Consider an scenario where you want to display buttons according to the user. Then you can check which user is logged in and accordingly you can adjust the view display.Here is an example for enable/disable button based on authorization.IF gt_button IS INITIAL.* here the name of the button and the event is determine ls_button-type = cl_thtmlb_util=>gc_icon_new. ls_button-text = cl_wd_utilities=>get_otr_text_by_alias( 'CRM_UIU_BP/CORPORATEACCOUNT' ). "#EC NOTEXT ls_button-on_click = 'CREATECORP'. "#EC NOTEXT

* check if button should be enabled according to UIU_COMP authorization values IF cl_crm_uiu_bp_authority=>bp_check_authority_create( iv_object_type = if_crm_bupa_uiu_otype~gc_otyp_corp_account ) = abap_true. ls_button-enabled = gc_x. ENDIF.

APPEND ls_button TO gt_button. CLEAR ls_button.endif.Scenario: User enters his country in View1 and clicks enter, it will takes him to View2. Based on his country key we need to populate some default values like currency key, language etc... and also user can enter his own details and save it using a Save button.Case 1 DO_PREPARE_OUTPUT : After user enters his country and starts navigation from view1 to view2, view2 will be loadd and at this point we use DO_PREPARE_OUTPUT method which triggers at time of initializing/loading view2. So in this method we should read country and set default valueslr_country = typed_context->node_name->attribute_name->get....(). " Country readselect * from table... where country = lr_country. " Data fetch based on countrytyped_context->node_name->attribute_name->set....(). " Setting defaults based on countryThis way defaults can be set, you can use this method for all view related validations/initialization.

WD_USAGE_INITIALIZE Data Exchange between UI ComponentsConsider the Scenario where Component 'A' is the Embedding Component & Component 'B' is the Embedded Component. (i.e B resides in A).In Component BGoto the Runtime Repository EditorExpand Component InterfaceUnder Interface ControllerRight click on the context and add the context node (Say 'PARTNER').(We need to do this as we have to expose the context node( here say 'PARTNER' ) of the component controller of UI Component B to be used in Component A).Save*********************************************************************************In Component AGoto the Runtime Repository EditorGoto Component Usage Right Click and add Component usage(i.e Used Component = UI Component 'B' & Interface View = Main Window).Save*********************************************************************************Now implement the 'WD_USAGE_INITIALIZE' method in the Component Controller of the Embedding Component i.e Component 'A'.

CASE iv_usage->usage_name.When 'B.' ................." Here the Component Usage 'B'. iv_usage->bind_context_node exportingiv_controller_type = cl_bsp_wd_controller=>co_type_componentiv_target_node_name = "PARTNER"iv_node_2_bind = "PARTNER".

Note: You can also Bind the Interface Controller context node with the Custom Controller of an Embedding Component (i.e in our case it is UI Component 'A'). The above Scenario discusses the { Component Controller(A)Component Controller(B) }Binding . Let us See the case{Custom Controller(A)Component Controller(B)}

CASE iv_usage->usage_name.When 'B.' ................." Here the Component Usage 'B'. iv_usage->bind_context_node exportingiv_controller_type = cl_bsp_wd_controller=>co_type_customiv_target_node_name = "PARTNER"iv_name = 'Name of the custom controller in component A'iv_node_2_bind = "PARTNER".Component binding is done to ensure that One Component is available for use in another Component. To achieve this the Component Controller method WD_USAGE_INITIALIZE must contain the binding between the context nodes of the used component and the current component's Component controller.

Once the Nodes are binded the data can, then, be made available in the used component from the current component. Tools Attachments (0) Page History Restrictions Page Information Link to this Page View in Hierarchy View Source Export to PDF Export to Word 1. CRM 2. 3. Customer Relationship Management 4. CRM Application Areas 5. CRM Web Client UI Framework Yes there is a difference between BOL and GENIL Layers in SAP CRM Skip to end of metadata Page restrictions apply Added by Kavindra Joshi, last edited by mohankumary04 on Aug 29, 2013 (view change) show comment hide comment Comment: Migrated to Confluence 4.0Go to start of metadata Often you would come across people who would interchangeably use BOL & GENIL. But if there are two separate layers created then definitely they would have two very different semantics. This comes from my knowledge as a framework owner in Business by Design(ByD). And I would say that both the layers are created for two very different purposes.The BOL layer provides a consistent interface to access the business objects APIs or the underlying data fetching APIs using the GENIL framework. The BOL object uses the object oriented approach to access the model. So whether you are accessing a standard object or an enhanced object, you dont have to worry. All you need to know is the name of the Context, Context Node and then you are good to go. Tomorrow even if there is an implementation change you are not affected as the interface over which you have written your data fetch logic remains the same. This is very good advantage over the conventional programming where the business logic is present in the UI itself. If the business logic changes you have to update at all the respective places. But here there is a clear separation between the business logic and the UI. And the UI is not affected by the change of business logic as long as there is no change in the interface, which in itself is rare as an a interface is timeless and changes very rarely.The BOL also acts as the buffer for the UI.BOL layer is thus specifically built by SAP specifically for SAP CRM Web UI and is available only at the runtime.GENIL is the generic interaction layer which provides you access to the business logic which is present in the Business object. As compared to BOL, GENIL can also be used for scenarios other than the Web UI. Consider the case where a user wants to execute a web service to fetch some data in a non Web UI scenario. In this case there is no need for BOL layer at all. You can directly connect to the GENIL Layers and fetch the needed data. In case of Web UI scenarios, we would need to use both GENIL & BOL Layers.The GENIL represents the model of the component that you are planning to use. During the design time, you prepare a model for the GENIL. The objects involved in GENIL are specified in the Object Tables and the model tables. GENIL would b