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