in part1 we discuss about:
1. How to enhance your genil component ( create a new Dependent object and corresponding DDIC structure ) to support AET
2. how to create a new UI object type
3. Create necessary EEW include structure and respective DB table to store FE transaction data.
In this part2 I will show you how to enhance the Genil component implementation class.
step1: support read access. If there is transaction data stored in DB table ZCRM_SOC_FE, it must be fetched and displayed in UI accordingly.
The read access is done in genil implementation class method IF_GENIL_APPL_INTLAY~GET_OBJECTS.
The original code before enhancement is using handler style. Every node has its corresponding handler class to do the job.
The handler class for SocialPost is ZCL_CRM_SOC_POST, which means in order to support read access of extension fields, we need to enhance ZCL_CRM_SOC_POST->READ_OBJECT.
lr_object = go_handler_factory->get_handler( iv_object_name = lv_name ).
TRY.
      lr_post ?= lr_object.
CATCH:cx_sy_move_cast_error.
     EXIT.
ENDTRY.
CHECK lr_post IS NOT INITIAL.
CALL METHOD lr_post->read_object
    EXPORTING
        it_request_objects = it_request_objects
        iv_ref             = iv_root_list
   CHANGING
        ct_bapireturn      = lt_bapireturn.
This blog will not go deep into the Genil component implementation itself, but just focus what needs to be enhanced in Genil component implementation.
as you see, I just add the code surrounded with red to read the extension field data. I pass the reference of container object into method get_fe_data.
After that method is executed, the extension field data will be fetched and filled into the container object lo_post.
clipboard1.png

 

 

method GET_FE_DATA.

    data: lv_guid         TYPE crmt_genil_object_guid,

          lv_attr         TYPE ZCRM_EXT_SMC_DYNP_SV,

          lv_convert_guid TYPE socialdata-socialdatauuid,

          lv_post_id      TYPE socialdata-internal_id.

    data(lv_children) = iv_container->GET_CHILDREN( IV_AS_COPY = ABAP_TRUE ).

    data(lv_child) = LV_CHILDREN->GET_FIRST( ).

    ASSERT lv_child IS BOUND.

    iv_container->get_key( IMPORTING es_key = lv_guid ).

    lv_convert_guid = lv_guid.

    lv_attr = zcl_crm_soc_fe_buffer_access=>get( lv_convert_guid ).

    lv_child->set_attributes( lv_attr ).

    DATA(lv_attr_props) = lv_child->get_attr_props_obj( ).

    lv_attr_props->set_all_properties( if_genil_obj_attr_properties=>changeable ).

    SELECT SINGLE internal_id INTO lv_post_id FROM socialdata WHERE socialdatauuid = lv_convert_guid

    ASSERT sy-subrc = 0.

    data(ls_key) = VALUE ZCRM_EXT_SMC_KEY( client = sy-mandt post_id = lv_post_id ).

    lv_child->set_key( ls_key ).

  endmethod.

in get_fe_data, there is nothing special logic inside. The real data is returned via zcl_crm_soc_fe_buffer_access, which encapsulate the buffer handling of extension field data in current session.
so let's have a look at the buffer class zcl_crm_soc_fe_buffer_access's get method:
method GET.
    DATA: ls_data TYPE ZCRM_SOC_FE,
          ls_attr TYPE ZCRM_EXT_SMC_DYNP_SV.
    READ TABLE st_buffer ASSIGNING FIELD-SYMBOL(<buffer>) WITH KEY uuid = iv_guid.
    IF sy-subrc = 0.
        rs_data = <buffer>-data.
        RETURN.
    ENDIF.
    SELECT SINGLE * INTO CORRESPONDING FIELDS OF ls_data FROM ( ZCRM_SOC_FE AS A INNER JOIN  socialdata AS B
        ON B~internal_id = A~post_id ) WHERE B~SOCIALDATAUUID = iv_guid.
    CHECK ls_data IS NOT INITIAL.
    MOVE-CORRESPONDING ls_data TO ls_attr.
    DATA(ls_entry) = VALUE ty_buffer( uuid = iv_guid data = ls_attr ).
    APPEND ls_entry TO st_buffer.
    rs_data = ls_attr.
  endmethod.
first check in the buffer table whether there is already an entry there for the current social post. If buffer hits, the bufferred data is directly returned.
If not, just load it from DB table. Why I use inner join is the type of buffer table has uuid as key, not internal id. And the uuid is the key field of hosting table of Social post, that is SOCIALDATA.
After the data is loaded from DB, never forget to insert it into buffer table.
types:
    BEGIN OF ty_buffer,
           uuid TYPE socialdata-socialdatauuid,
           data TYPE ZCRM_EXT_SMC_DYNP_SV,
         END OF ty_buffer .
  types:
    tt_buffer TYPE STANDARD TABLE OF ty_buffer WITH KEY uuid .
now the read access of extension fields are done.
step2: write access.
After we type some value in UI fields and click enter key, IF_GENIL_APPL_INTLAY~MODIFY_OBJECTS will be called. Just the same logic as step1, the call will be delegated to handler class ZCL_CRM_SOC_POST. In method MODIFY_OBJECT, I only add one more line to handle with extension fields by creating a new method process_children.
step2.png
for simplicity reasons I only react on the change mode. Again I pass the call to zcl_crm_soc_fe_api.
clipboard2.png
in set_fe_data I just put the list of changed attribute ( lt_changed_attr ) and the latest data typed by user ( ls_attributes ) to buffer class.
clipboard3.png
in set method of buffer class, again the similiar logic as done in read case. First check in the buffer table whether there exists an entry for current social post.
If buffer hits, I just to update the buffer with latest extension fields data. I loop the internal table it_changed_attr to make sure all changed attributes are handled.
clipboard4.png
clipboard5.png
if there is no entry in the buffer, the situation should be that such post has not any extension fields stored in DB table at the begining of this transaction.
The iv_new_data would come from the manual input typed by user in UI. In this case all I need is just to append the latest extension field data into the buffer table.
step3: save case.
No doubt the method SAVE_OBJECT of ZCL_CRM_SOC_POST must now take care the saving of both SocialPost itself and extension fields data as well.
I just add two more lines to original code.
I first save the extension field( done by zcl_crm_soc_fe_api=>save_fe_data), then the SocialPost itself ( via function module SOC_POST_SAVE ).
The condition "no value changed" is enhanced that only the situation neither Socialpost nor its extension fields are changed could be regarded as no value changed. If the line 18 is missing, you will receive message in UI "No value changed", even you have already modified some extension field but not touch standard field in social post itself.
clipboard6.png
The method save_fe_data is also very simple: just fetch the extension field buffer from buffer table and then modify database table.
  method SAVE_FE_DATA.
    DATA: ls_change TYPE ZCRM_SOC_FE.
    DATA(ls_buffer) = zcl_crm_soc_fe_buffer_access=>get( iv_guid ).
    CHECK ls_buffer IS NOT INITIAL.
    MOVE-CORRESPONDING ls_buffer TO ls_change.
    MODIFY zcrm_soc_fe FROM ls_change.
    rv_fe_changed = abap_true.
  endmethod.
Summary:
The genil component implementation is enhanced regarding following three parts:
1. enhance IF_GENIL_APPL_ALTERNATIVE_DSIL~SAVE_OBJECTS to support extension field save.
2. enhance IF_GENIL_APPL_ALTERNATIVE_DSIL~MODIFY_OBJECTS to support extension field change.
3. enhance IF_GENIL_APPL_ALTERNATIVE_DSIL~GET_OBJECTS to support extension field change.
Now it's time to enjoy our labour! Just create three extension fields to test. The three extension fields has type Quantity and sub type PRESS ( built-in type provided by SAP), so AET framework automatically creates two seperate fields for you, one for quantity value and the other for unit.
clipboard7.png
clipboard8.png
Those features like F4 help and validation logic for respective data type are automaitcally handled by AET framework. You do not need to code by yourself
Now have a look at the EEW structure created in part4. All extension fields are attached here.
clipboard9.png
And extension fields data are stored in DB.
clipboard10.png
Note: normally the AET enablement is done by SAP or Partner but not for customer, since if customers are able to build their own component by themselves, they can enhance it freely whenever they want without the help of AET.
Recently we got a requirement from customer that they want a non-extensible UI to be supported by Application extension tool ( AET ).
Since I found currently there is no detailed step by step about how to achieve this, I jsut create one.
AET is a powerful tool which could allow a user without any technical background to create new extension fields on UI in just a few seconds.
Equipped with AET, your application becomes more flexible since it allows your customer to create new fields by themselves which are missing in your standard application.
For demonstration usage I just use a component ZCRMSM which is copied from SAP standard genil component CRMSM for example.
( by the way, CRMSM is developed by us in CRM7.0 EHP3 which exposes the functionality to integrate social channel like twitter and facebook into CRM.  )
The genil mode is very simple: It just have one Root object, one query object and one query result object.
clipboard1.png
step1.
Create a new structure as below. EEW standards for easy enhancement workbench and SMC for Social media cockpit.
This structure acts as a place holder to attach extension fields created by AET. the component EXT_SMC is just a dummy field to circumvent the
restrict that netweaver does not allow you to activate an empty structure.
clipboard2.png
step2:
create a new dependent object SocialPostSetCRM_SMC to represent the extension fields belonging to a social post.
Of course a Aggregation must also be created to allow the navigation from SocialPost to this DO.
step2.png
Now we have to create the key structure and attribute structure for DO.
step3:
create key structure for DO. Post ID is the unique identifier to identify a social post. UUID could also be used. Here I use post id since it is more human readable compared with UUID, which makes my trouble shooting easier.
step3.png
for attribute structure, just include the key attribute above and the EEW structure created in step1, and that's all.
The EEW structure is included so that every time the extension fields are created, they will be attached to EEW structure and then would
also automatically appear in this attribute structure as well.
step31.png
Now the enhancement for Genil component is finished, of course we need to implement the access logic on the DO as well. We will do this later and let's continue with our modelling task.
step4:
create a database table ZCRM_SOC_FE to store the transaction data of extension fields. Just the same logic in step3 of attribute structure: include key structure  and EEW structure.
clipboard4.png
step5:
tcode AXTREG, register your genil component as extensible.
Create a new entry in "Extensible BOs". In this example I use ZSOCIALPOST. It is just an indicator, no need to equal with your Genil component name or model node name.
clipboard5.png
Navigate to BO Parts. Create a new entry. Specify "Part of a BO". Here I just use "HEADER", which tells AET framework I want to put my extension fields on "Header" level of the Social Post.
Maintain the Field Enhancement Place - the extension fields will be attached to the EEW structure maintained here.
So technically speaking, if customer choose HEADER in AET ui, the extension fields will be created on EEW structure ZINCL_EEW_SMC.
The remain settings could just be maintained as below:
clipboard51.png
create a new application group, or you can also reuse existing one if there is any which make senses for your business requirement.
Here I just create a new one "SOCIALMEDIA".
clipboard52.png
click "Places" and register your EEW structure ZINCL_EEW_SMC here. Special the max number of fields you allow to put into this structure.
And also the max bytes which are allowed for the total extension fields.
The sum of Percentage customer, partner and SAP should be 100, the rule of thumb value would be 60:20:20 ( customer : partner: SAP )
clipboard53.png
double click on the sub folder "BOL objects" and maintain the DO for extension fields and its BOL Path from Root object such as below:
clipboard54.png
You may observe there are some other folders like Search place and Table place. Those are places where the registration for table and search enhancement are done.
This is out of scope of this blog. Now all the necessary parts in AXTREG are done.
step6.
Tcode SM30, choose view BSPDLCV_OBJ_TYPE and click maintain button. Then create a new entry with object type CCRM_SMC
and maintain Genil component name, the root object name, the BOR object type and extension BO name, which is created in step 5.
clipboard6.png
step7: go to the view where you would like to display the extension fields, redefine method DO_CONFIG_DETERMINATION.
clipboard7.png
Just specify the ui object type created in step6:
method DO_CONFIG_DETERMINATION.
    CHECK iv_first_time = abap_true.
    me->set_config_keys( iv_object_type          = 'CCRM_SMC'
                         iv_propagate_2_children = abap_false ).
  endmethod.
Now launch your UI, click configure icon to reach AET page, you should see "Create Field" button is enabled, which means all registration parts done currently are correct. Now the left task is doing enhancement on Genil implementation, which will be discussed in detail in part2.
clipboard8.png
ComponentSupport Package
BBPCRMSAPKU70204
SAP_ABASAPKA73105
SAP_BASISSAPKB73105
WEBCUIFSAPK-73105INWEBCUIF
SAP_BWSAPKW73105

 

I bet some of you guys still hearing those sentence again and again, "We want a report in the Web UI which should list...."  or "Yes, no problem, we will build a ALV in the web client" This last one still give me the chills <Offtopic> I HATE TLX!</offtopic>

 

Well as you already know, Web Client is not meant to do reports as you will traditionally do in SAP GUI, there's a reporting layer called SAP CRM Analytics which uses can use BI reports or CRM reports, remember BW is part of netweaver, so yes, CRM has his own BW , what's the main advantage of using SAP CRM analytics, although is based on BW  you can display very very very updated data. You can click the following link to see a nice video blog with some features: SAP CRM Analytics without BI ( using the CRM as the data source) in the perfect world

 

http://scn.sap.com/docs/DOC-5432

 

You can check/follow the SAP Best practices documents how to configure SAP CRM Analytics (no BI integration):

 

C41_CRM702_BB_CRM Interactive Reporting

CR2_CRM702_BPD_Interactive Reporting

 

Don't forget to activate the Business functions that applies to your needs, for example, if you want to use Sales Orders reporting area.

 

As you see there's a lot of stuff to learn, understand and do and I bet most of the people who read this will have no experience with SAP BW (like me) well, if is this you case, stop reading this, and run to find a BW consultant in your team, don't continue until you come back with him/her.....I'm serious.....soooooooo  you are not going to find him/her, right? do you think you are "very macho" to do it in your own right? nah...I'm kidding probably you won't find him/her because the project estimation didn't included a BW guy, why? this is a CRM implantation, who was expecting a BW consultant will be needed? reports are done with ALV!

 

Now I'm serious, you will need it, at least if you don't have enough time (and a sandbox) to learn how to add new fields and how BW objects should be transported.

 

Still a lot to do just to enable a few reports right? well now comes the best part: Let's assume you have everything running and healthy, you created  a report which lists sales orders, the customer wants to analyze the sales orders of this quarter, the list is about 5.000 sales orders, I hope you have a nice hardware or...wait? someone said SAP HANA? because if not, this will take ..hmmmm...let's say some time

 

Okok, you are lucky and you have SAP HANA and you realized you can export the data via a flat excel file or even a pivot table, I tried the pivot table export and it's pretty impressive, I mean, from a customer point of view, you all know customers love exporting data to excel and play with i.

 

And now one of the reasons which led me to write this blog:

 

http://scn.sap.com/thread/3439767

 

Yeah, the Web UI export to excel is "limited" to tens or hundreds records....so what now? you did a lot of work the customer payed the HANA licences but you can not export the info to excel because is "limited to tens or hundreds" when I read this It was like noooooooooooooooo waaaaaaaaaaaaaay. So if I was you I would really consider all this points before starting the "SAP CRM Analytics safari" .

 

In resume:

 

SAP CRM analytics requires:

- SAP CRM Knowledge

- SAP Web UI Knowledge

- SAP BW Knowledge

- SAP BASIS Knowledge

- Reports of no more than tens or hundreds records as long the customer doesn't want to export to excel and you have a nice hardware or SAP HANA.

 

In the end I just want to clarify, this is my modest opinion and my brief experience, take it as what it is of course I encourage all of you to participate in this blog, SAP CRM Analytics world is very obscure and  any small contribution/discussion will be a benefit to everyone.

 

Cheers!

 

Luis

The Business Blueprint

 

The business blueprint in all its essence is the genuine, realistic and conclusive detailing of our understanding of the scope, the specifications and the completeness of the solution design to be fulfilled to the business objectives, desired project outcomes and envisioned benefits.

 

When a strategic IT initiative progresses to the solution blueprinting phase, we, in all aspects, need to plan adequately for a well-balanced and disciplined approach. Given the strategic importance of the initiative, all-inclusive commitment from the clients, the consulting team along with the participating program management organization holds a paramount importance in realization of the solution.  It’s never been more important to understand how one needs to recognize the significance of the collective best-in-class teamwork supported by consensus based practical planning and organization -- be it the methodologies, tools & templates and the knowledge repository -- in making these initiatives accomplish the likely results.


The business blueprinting primarily focuses on understanding, authenticating and documenting project scope, specifications and the future to-be solution in its objective conceptuality and practicality. The following illustration depicts simple yet effectual steps with clear understanding of the business blueprint viewed as a value chain process (See Figure 1) -- Plan-to-Workshops-to-Blueprint-to-Acceptance. The acceptance of the business blueprint results in subsequent realization phase encompassing the steps -- Blueprint-to-Configurations-to-Test-to-Go-Live.

 

The Business Blueprint - FINAL.jpeg

 

In the initial planning process, we should clearly communicate and highlight the project’s business goals, approach, timelines and the teams to all the key participants before the actual scoping steps. The illustration above portrays logical phases of an actual business printing along with the attentive set of activities. Each of these phases understandably encompasses pre-defined set of activities to be performed with clearly identified deliverables.


The workshops are the most crucial part of the business blueprinting; this phase needs the utmost attention and thoughtful communication, planning and organization. What we do here -- solution scoping -- becomes the foundation for the subsequent step. All the participants of the workshops need to be identified well in advance with designated leads and their active participation holds foremost importance in successful scoping.


Blueprint preparation, it is in this phase, we write the actual business blueprint and takes the shape of a realistic and conclusive detailing into a presentation with all the things we have collected through the workshops -- scope, specifications and the solution. This detailing in all its objectivity, strategic distinction and as a result rationalizes how the-sum-is-greater-than-the-parts in aligning the IT initiative to the business vision and its supporting capabilities.


On successful preparation of the business blueprint; it can then be presented to the client for their assessment and validation in its completeness and acceptance.


Here, a key characteristic is the collective efforts, experience and determination of the team -- especially the right people -- who bring passion and commitment to the project success. Equally important are determining and developing client specific templates across all the steps. In consensus with the clients the templates can be discussed and institutionalized with the necessary authorizations ensuring predictability in deliverables with assured quality.


The internal collective knowledge repository can be of great help; such pre-defined templates reduce overall time and accelerate the process. However, not all the clients have well established internal IT team; so this necessitates hand-holding in structuring and managing the overall initiative, this can be of valuable learning experience. Vigilant and participative program management can be a great facilitator in bridging all the cross-functional teams and in creating an atmosphere of positivity and project success in all aspects through actively managing progress and mentoring to see how well the project is moving towards its goals.


For the businesses to operate in all its efficiency and competence the IT capabilities are the foundational components. The business blueprint summarizes the very essence of such dynamic IT capabilities aligned to the desired project outcomes and this is where the strategic IT initiatives meet the operational level. This means, a well written blueprint ensures value realization through its practical implementation in its functional, process and technical feasibility. So is the purpose of the business blueprint and it holds a strategic importance in fulfilling a shared vision.


Sometimes we need to supply a single value synchronization of specific parameter between different separated components of CRM. Of course, there is a way to implement such task via binding, but if we are talking about synchronization of only one single value, this way may be too complicated. Here is an approach to do that much more easily.

 

Implementation in WD_USAGE_INITIALIZE( ):

 

  1. " define implementation class of component, which we want to link
  2. sync_win TYPE REF TO %comp_class_impl%.
  3. usage_ref TYPE REF TO cl_bsp_wd_component_usage.
  4. CASE iv_usage->usage_name.
  5.         " define synchronization only for specific usage
  6.         WHEN '%name%'.
  7.                 usage_ref ?= iv_usage.
  8.                 " define MainWindow of component, which we want to link
  9.                 sync_win ?= usage_ref=>get_interface_view_contr( '%COMP_NAME/Window_Name%' ).
  10. " link specific attribute of current class to specific attribute of desired component class
  11. GET REFERENCE OF me->flag INTO sync_win->flag.

 

I suggest to use this approach very carefully, because active use of such technique may lead to some side effects, such as kind of «spaghetti code», where it's very difficult to understand what, where and when is connected with external components.

 

Thanks.

Discover, learn from and listen to SAP’s LoB Customer ‘espresso’ webinar series.  EMEA are currently hosting a webinar series consisting of 6 CRM topics. These 30 minute webinars cover topics in an efficient and informative manner; engaging the audience throughout. 

Don’t worry if you have missed the webinars, all recordings can be found below! All webinars are open for customers/prospect and partners to join!

 

Learn about how your digitally-empowered customers have new expectation for what your organisation can do for them in.  “Revolutionise the way you can engage with your customers” ‘webinar.

 

Click here to Watch Recording Now

 

Get an inside look on how using SAP Sales OnDemand can increase sales rep intelligence. Join Roland van Breukelen, Business Development Director SAP CRM Centre of Excellence for ‘How SAP Closes Deals Faster with Real-time Sales Intelligence’ webinar.

 

Click here to Watch Recording Now

 

 

Listen to ‘SAP and hybris deliver customer engagement innovation’ 30 minute Webinar featuring guest speaker Jack Shaw – Technology Futurist and E-Commerce Specialist. Find out how these two powerhouses are working together to change the face of commerce and customer engagement.

 

Click here to Watch Recording Now

 

 

Discover how your sales and marketing teams can achieve key insights quickly to reach the right customer with a personalised approach in ‘SAP Customer Engagement Intelligence: Sell more and Spend less!’ webinar. 10th October 10am CET.

 

Register Now

 

Join our ‘Monetise Services with a next-generation billing platform’ webinar. Learn about how your customers are becoming more empowered and expect higher quality products and services.  24th October 10am CET

 

Register Now

 

Register for ‘How Lexmark successfully manages global rebates program’ webinar and hear about how Lexmark International benefit from SAP Payback and Chargebacks by Vistex. 7th November 4pm CET

 

Register Now

Hello All    

 

I am pleased to announce first ever CRM Community Event in Delhi , India on 23, November,2013(Saturday).

Idea is to meet with all SCN CRM Delhi region community members in person and to discuss about various topics on CRM like

CRM on HANA, CRM EHP3,Social media integration and many more.

 

 

Hasan Rafiq already published a blog http://scn.sap.com/community/events/blog/2013/09/26/sap-crm-event-delhi--india . We would like to know the interest of community members who would be interested to attend this event. Based on the response we will be deciding the location of the event.

 

 

my request to all community members who would like to attend this event or want to present any session please register at the link below

https://docs.google.com/forms/d/19HbtHNPCQ3zz4NaMGPGd_vls8QP2mItSxW_Gkj38SW4/viewform.

 

 

We are planning to organize similar event at other locations also. Please keep following this space for more details.

 

You can reach to following volunteers if you need any further info or if  you have any suggestion.

 

hasan rafiq(rafiqhasan@gmail.com) or Kumar Akshat(kumar.akshat@sap.com) or Naresh Kumar Malik(naresh.kumar.malik@sap.com)

 

 

Agenda :

CRM Webclient UI improvements via Customer Connection - Gregor Wolf Gregor Wolf

CRM  with HANA -  an Overview   - Naresh Kumar Malik Naresh Kumar Malik

SAP CRM - Social Inegration - Hasan Rafiq Hasan Rafiq

 

Sap Connect link: You can join sessions remotely via* *https://sap.apj.pgiconnect.com/I056579

Participant Passcode:

3050747074

 

Venue :  SAP Labs India Pvt. Ltd. - Gurgaon , Vatika Towers , Sector 54, Golf Course Road , Gurgaon, Haryana - 122002, India

Since SAP CRM 6.0, a billing transaction type is alwasy displayed in the follow up transacton type slection list for an sales document.

Capture.PNG

It is a functionality change, that is intended for the convenience of creating billing document, the billing document appears as an default entry in the follow up transaction type selection list.

 

If there is the business requirement to get rid of this option, you need to enhance the view and deactive the relevant codings in the enhanced class CL_BT115H_S_SOHOVERVIEW_IMPL method EH_ONFOLLOWUP
... ...

*** Add billing on popup

    lr_context_node = gr_proctype_bo_popup->get_context_node(

iv_cnode_name = 'PROCTYPE' ).

    IF lr_context_node IS BOUND AND me->is_template( ) = abap_false.

      CREATE DATA ls_struct_ref.

... ...

As a developer in my daily life I always need to quickly locate the source code where raises a given message in webclient ui.

(If you would like to know how to quickly find the source code which raises message in SAP GUI environment, please refer to this blog of mine instead. )

Here below are four approaches using which almost all messages I meet with so far could be located:

 

1. If some invalid data is input which blocks the account save, the generic message saying "data contains error" without dedicated errorous field is not helpful. Suppose I would like to find the exact code which raises error message. You can observe that if I put the mouse onto the error message, there would be a tooltip poped up with message technical information like message id and message number. By default this behavior is not activated for your user. You can manually activate it via:

 

clipboard2.png

 

go to transaction code SU3 and maintain user parameter BSPWD_USER_LEVEL = 6

 

clipboardlevel.png

 

6 means "Experienced user". You can find the description of all possible value in domain BSPWD_MSGLEVEL.

 

clipboardLEVELTEXT.png

 

Now we know the message id is CRM_BUPA_BOL and number is 036. Go to transaction code SE91 and search code via where use list:

 

clipboardW1.png

 

we get 2 hits: double click on one of them. Why there is if 1 = 2 whose condition will never be met?

 

clipboardhit.png

actually the red code below is just what we look for. The above code in line 86 is just simply written in order to enable itself to be found by where use list,

since where used list in abap workbench would only find the static message usage like keyword MESSAGE + <message type like e,i,w><message number>

(<message id>). The red code does not really raise message via keyword MESSAGE but just put the given message into an internal table via global message service and thus would not be found by where use list.

 

red.png

 

 

 

 

2. In IC agent inbox, if an unsupported search attribute is specified, the search could not be performed and the corresponding message is raised in ui.

clipboard1.png

 

unfortunately now if I follow approach1, no hit in where use list.

 

notfound.png

 

so I try to use report RS_ABAP_SOURCE_SCAN, use 559 as search key, and maintain CRM_IC_APPL_INBOX as package. The report will scan 559 within all abap source codes which are stored in that package.

 

search.png

 

So how can I get the package name CRM_IC_APPL_INBOX? Just click F2 on UI, I can know the view name ICCMP_INBOX/InboxSearch.

f2.png

in its event handler for event SEARCH, I can know that the search implementation is actually provided by class CL_CRM_AUI_QUERY_SERVICE.

 

handler.png

 

so now I can ensure that the code which raises the information message is definitly inside that package.

package.png

 

after a while the report runs over and I can simply double click the result to jump into the source code.

2hit.png

 

3. When it comes to product area, it is pretty easy to find the source code of given message. Almost all underlying messages in product application is raised by utility function module COM_PRODUCT_ADD_MESSAGE. In example below I input an invalid item category group WWW and would like to find which code does validation check and raise error message. All I have to do is just to set a breakpoint in that function module, and re-save in ui:

 

3a.png

 

breakpoint is hit as I expect after I click save button again:

3hit.png

 

the sy-subrc indicates that there is some exception raised, and just above the FM COM_PRODUCT_ADD_MESSAGE, we can find the FM

COM_PRODUCT_CHECK_FIELD_ENTRY complains that the input WWW is not valid.

 

3hit2.png

4. This is the most powerful debugging method. Suppose I need to find which line of code raises this message below:

4a.png

Use F2 button I know that the current search page is built on BP_HEAD_SEARCH/MainSearch:

4b.png

So I set a break point on search event handler:

 

4bb.png

The breakpoint is hit when I click search again. However I will not debug it line by line. Click tab "Break./Watchpoints", and create a dynamic breakpoint for abap command MESSAGE. As a result the breakpoint will be triggered wherever the keyword MESSAGE is written in abap code.

 

message.png

 

I just click F8, and debugger automatically stops in the line below, which is just what we are looking for.

 

4over.png

 

Summary:

 

all the four methods above makes my trouble shooting life easier. If you have any other approaches to achieve the same, welcome to share with us

Disciplined Approach To Solution Scoping

 

Organization’s business imperatives have more often a mutually-inclusive impact on how it leads its strategic IT initiatives. In other words, aligning IT strategy closely with business strategy and mobilizing the right resources to effort instigates collaboration and collective teamwork those once would have been in parallel existence.

Effective alignment can happen only when IT and business strategy are anchored in clearly articulated scope of capabilities in juxtaposition. Such collaborative capabilities are dynamic and give the organization an ability to adapt to changing market environment especially while implementing enterprise systems that hold strategic importance and hence needs to be anchored to clearly defined scope of   business and IT capabilities.

Here is an illustration of a traditional methodology in its simplistic view on various characteristic activities across the life-cycle of an implementation project (See Figure 1). It essentially links and binds together a set of collective activities into a well-defined and distinctive transition plan.


Traditional Methodology - A Simplistic View - FINAL.jpeg

A disciplined scoping holds a paramount importance at the beginning and lays the groundwork for more effectual designing and to subsequent steps of the project. Incoherent and messy scoping leads to unnecessary complexities, since high-profile IT projects are particularly prone to drifting. We need to be vigilant against scope tiptoe, which can cause projects to deviate from their original objectives.

In the planning process, we should clearly articulate and reinforce the project’s business objectives long before the actual transformation. Here are critical guidelines and few success factors that go-a-long-way in scoping the solution to realization.

 

  • In the initial stage of the project, we really need to understand the business imperatives, objectives and the challenges – this clear understanding will lead us to scope, approach and timelines and in essence provides a foundation to plan subsequent steps.
  • Scoping in most of the scenarios, are conducted through business blueprint workshops with the specific process or functional emphasis along with the targeted audience to maximize the effectiveness. At this point, the audience should be expanded to include all of the employees who will use the system with the designated leads.
  • Client specific scoping templates – functional and business process flows, scoping of requirements, requirements fit-gap, and workshop take aways etc. – drafted well in advance are exceedingly effective. They help us in systematic and organized scoping of requirements and also reduce time overall to accelerate the process.
  • Solution walk-through process flows can be of great help in mapping client-specific functional and business process requirements to the functionality and we should maximize the usage of the off-the-self solutions for they would accomplish most of the project’s objectives at lower cost. With this approach we can identify gaps and customizing, recommend potential workarounds for gaps, and suggest enhancements and improvement opportunities.
  • Consolidate the scoping requirements, prioritize requirements, solution gaps/enhancements and present the findings of the workshops to reassure clear alignment between proposed IT capability, business measures addressing key pain-points and desired outcomes.
  • All the customization's should be reflected on the costs to build and support them over the project’s lifetime. In all, we should limit customization's to no more than 20% of the standard, and those modifications should focus on central capabilities that are essential to business imperatives and its success. Customization beyond these levels can make future upgrades too costly and time consuming, undermining a fundamental benefit of packaged solution.
  • The scoping schedule should always include the freezing time. However, some addition in scope may be justifiable to stay up-to-date with market and competitive demands. But in general, clarity of scoping that defines what the project will and won’t accomplish reduces the likelihood of inconveniences and its impact on the overall project scope and timeline.
  • In practicality, often users request new features during testing phase of the project and we should be prepared to evaluate those requests in the context of the project’s original objectives and accordingly accommodate with the necessary approvals. The scoping issues should always be discussed in its objectivity separating the issues from the people.
  • The needs of the organization will change over time and its capabilities must keep pace with them. This requires constant coordination between IT and the business units, on-going assessment and reviews of the IT priorities, timely scoping and allocation of resources. However, the essential capabilities remain relatively stable. Once the new system has been rolled out, it’s important to continue to measure the operational and behavioral changes that will lead to the sought-after benefits.

 

As IT capabilities become aligned with business imperatives and strategies, its relationship to the business matures and deepens over time. The IT organization’s ultimate objective is to function seamlessly as part of the business and then evolve into a trusted partner.

Disciplined scoping of solution makes way for a complete and all-inclusive methodology, ensuring that the requirements are identified, summarized, prioritized and documented with the necessary approvals during the scoping phase of the project. Whilst, governance is the bridge between promise and delivery – there always is a better way, however – it’s the people who make the difference.

When we collectively work together, as a team with the shared values and the simplicity of virtues, we can bring about business-transformations through successful implementations of projects that truly deliver on value and desired outcome with the lasting impact.


In Territory Management , we can create rules for determination using the rule policy builder. The rules can be created based on standard attributes which would appear as drop or as F4 Help. But there are situations when we would need to add new Z -fields based on which new determination rules can be created. The process for creating Z fields for territory determination is as follows

 

  • Go to spro ->Customer Relationship Management ->Master Data ->Territory Attributes->Maintain Territory Attributes. The new attributes could be added in BP ( Account) , PR ( Product) , SA ( Sales Area)

Terr_Mgmt_1.PNG

  • To create a new attribute for determination in say in BP , select BP and press attributes and go to edit mode

Terr_Mgmt_2.PNG

 

  • Create new entry by pressing the new entry button and the following screen is presented

Terr_Mgmt_3.PNG

Fill in the details , Condition Attribute Id , Description , Help Type , Data type and F4 Help . Remember to choose the Applicable operators. If Dropdown is selected as Help type , then choose the operator '='.

 

  • And save the attribute

 

  • Now Implement the BADI CRM_TERRMAN_ATTRIB for additional attributes in Territory Management

Terr_Mgmt_4.PNG

  • Some of the methods, that needs to be implemented are

          IF_EX_CRM_TERRMAN_ATTRIB~FIELD_CHECK( ) -> This method is used for checking the value entered in the rule policy builder is valid or not.

 

          IF_EX_CRM_TERRMAN_ATTRIB~GET_F4_HELP_CUSATTR( ) -> The value of help is retrieved using this method.

 

          IF_EX_CRM_TERRMAN_ATTRIB~GET_CUSTOMER_ATTRVAL( ) -> This method provides all possible value of an attribute field.

 

 

  • An easy way to test this setup is to create additional attributes and then put a breakpoint in BADI methods. Then try to create a new rule from WebUI. The breakpoints would be hit.

I came across this scenario some time back where in the production system , we needed to update territories based on custom logic for existing opportunities. Actually the Territories were getting determined based on employee responsible while the logic needed to be based on sales organization and sold-to-party details. For this we created a program with input parameters - Transaction Type or Actual Object id for which territory updation needs to be done. But the question was how to update the territory data into business transactions.

 

The solution was much simpler than i thought. Actually if you check the partner Assignment Block in WebUI , the territory details are present there for employee responsible.The following steps and code snippets would help to understand better

 

  • The partner details could be easily from one order FM CRM_ORDER_READ by passing requested objects as partner.

insert ls_oppt-guid into table lt_header_guid.

insert gc_object_name-orgman into table lt_req_objects.

insert gc_object_name-partner into table lt_req_objects.

*   Read the Orgman and Partner Details

clear: lt_orgman , lt_partner.

call function 'CRM_ORDER_READ'

exporting

it_header_guid       = lt_header_guid

iv_mode              = gc_mode-display

it_requested_objects = lt_req_objects

importing

et_orgman            = lt_orgman

et_partner           = lt_partner

exceptions

document_not_found   = 1

error_occurred       = 2

document_locked      = 3

no_change_authority  = 4

no_display_authority = 5

no_change_allowed    = 6

others               = 7.

 

  • Retrieve the Sold-to-party details from the Partner. Remember to provide your own partner function in constant lc_partner_fct.

read table lt_partner into ls_partner with key partner_fct = lc_partner_fct.

  • Prepare your criteria for retrieving the Territory Details. In my case the criteria was based on Sales Area and Sold-to-party

read table lt_orgman into ls_orgman index 1.

   clear: ls_sales_area, lt_sales_area.

    ls_sales_area-dis_channel = ls_orgman-dis_channel.

    ls_sales_area-division    = ls_orgman-division.

    ls_sales_area-sales_org   = lv_r3_sales_org.

    append ls_sales_area to lt_sales_area.

 

 

*  Validate the Partner and Prepare for fetching the Territory Details

    clear lv_partner_guid.

    call function 'CONVERSION_EXIT_ALPHA_INPUT'

    exporting

    input  = ls_partner-partner_no

    importing

    output = lv_partner_id.

 

clear lv_partner_guid.

select single partner_guid from but000 into lv_partner_guid where partner = lv_partner_id .

 

lv_guid = lv_partner_guid.

 

    clear : lt_terrstruct , lt_terrstruct_indirect.

    call function 'CRM_TERRMAN_GET_TERR_BY_BUPA'

    exporting

    iv_partner_guid        = lv_guid

    it_sales_area          = lt_sales_area

    importing

    et_terrstruct_direct   = lt_terrstruct

    et_terrstruct_indirect = lt_terrstruct_indirect

    exceptions

    internal_error         = 1

    others                 = 2.

 

  • You can retrieve the territory id in either of lt_terrstruct ( or lt_terrstruct_indirect ).

 

    clear: ls_terrstruct , lv_path_id.

    read table lt_terrstruct into ls_terrstruct index 1.

    lv_path_id = ls_terrstruct-path_id.

 

  • Fill the structure to maintain territory details

clear: ls_partner_attribute, lt_partner_attributes.

ls_partner_attribute-ref_guid = ls_oppt-guid.

ls_partner_attribute-ref_kind = 'A'.

ls_partner_attribute-ref_partner_fct    = '00000014'.

ls_partner_attribute-ref_partner_no     = ls_partner_empresp-partner_no.

ls_partner_attribute-ref_no_type        = 'BP'.

ls_partner_attribute-ref_display_type   = 'BP'.

ls_partner_attribute-semantic_key = 'TERRITORY'.

ls_partner_attribute-fieldname    = 'PATH_ID'." 'PATH_GUID'.

ls_partner_attribute-value = ls_terrstruct-path_id."

append ls_partner_attribute to lt_partner_attributes .

 

  • Finally call the order maintain and order save FMs of the one order

call function 'CRM_ORDER_MAINTAIN'

changing

ct_partner_attributes = lt_partner_attributes

exceptions

error_occurred        = 1

document_locked       = 2

no_change_allowed     = 3

no_authority          = 4

others                = 5.

 

call function 'CRM_ORDER_SAVE'

exporting

it_objects_to_save   = lt_header_guid

importing

et_saved_objects     = lt_saved_objects

exceptions

document_not_saved   = 1

others               = 2.

 

call function 'BAPI_TRANSACTION_COMMIT'.

*         Initailize the Transaction

call function 'CRM_ORDER_INITIALIZE'

exporting

it_guids_to_init = lt_header_guid

iv_keep_lock     = ''.

 

 

Now you can find that territory would be updated.

I want to share one problem which we faced when we upgraded to EHP2.

We came across a situation where we were not able to open SPRO in SAP CRM. Whenever we click on the IMG in Transaction Code 'SPRO' to maintain customizing settings then we were getting an Exception.

I want to share this because if someone facing the same problem then he will not have to worry about this.

 

Solution:-

We were using SAP GUI 7.10 version. That is why we are getting the exception because SAP GUI 7.10 do not support the SPRO in new EHP2 and higher versions.

So what we did to solve this is we simply upgrade our SAP GUI from SAP GUI 7.10 to SAP GUI 7.30 and the problem get resolved.

And now we are able to open SPRO in EHP2 version as well.

 

To upgrade your GUI with latest one you can go with the link http://scn.sap.com/community/gui/blog/2013/05/29/sap-gui-730-download.

Here you will find the path to install or upgrade your SAP GUI to GUI 7.30

 

Hope this post will help  if someone is facing the same Issue.

 

Thanks,

Kumar Gaurav

I already covered the features around change request and claims http://scn.sap.com/community/crm/blog/2013/08/12/introduction-to-sap-grantor-management--part-iii. In this final blog I am going to complete the cycle for the Grantor Management

 

8- Payment

 

Grantor financial execution interface is based on:

  • SAP ECC Public Sector Collection and Disbursement (PSCD)
  • or the Accounts Payable/Accounts Receivable (AP/AR).
  • The Funds Management (FM) component is optional and can be used for record and report on grant commitments and actuals.

PSCD.png

FI AP AR.png

SAP Grantor Solution is integrated with SAP ERP:

  • Applications total  granted amount will create one Pre-Commitment item in SAP ERP, with different line items for payment type.
  • Agreement total granted amount will create one Commitment item in SAP ERP, with different line items for payment type.
  • Repayment will create a "Forecast of Revenue Document" in SAP ERP


The solution supports the billing/invoicing documents. System will create automatically billing documents in ERP for each agreement/claim in CRM (agreement or claims has to set to “Released”).

 

billing request.png

 

Billing document are displayed in SAP FI- AP/AR using transaction GTRBILL_DISP ( Display Grantor Billing Doc. (AP/AR))

billing transaction.png

Invoice document are generated for existing billing documents which have not been invoiced and which agreement “posting date“ is not older than the posting date in the invoicing transaction. System automatically creates an open item documents in ERP for each invoicing document. Open Item information is available in the “Grantor Agreement and Claim”.

 

agreement item open item2.png

 

Invoice Documents are generated using transaction GTRINV_S (Individual Grantor Invoicing) or GTRINV_MULTI_B_S (AP/AR Invoicing Run) in SAP FI-AP/AR.

 

Invoince document.png

 

 

In SAP ECC, program RFGTR_NOTIFICATION need to be scheduled to update the agreement open items with the “Invoice Information”.

 

open item.png

The execution of the payment run in SAP ECC clears open items for payment.  Transaction F110 (Parameters for Automatic Payment) is used to run the automatic payment.

 

payment transaction.png

 

 

In the overview page of the agreement will show the “Cleared Item (ERP)” amount and the reduction of the “Open Item (ERP) amount.

 

cleared item.png

 

After an open item document has successfully been cleared in SAP ECC, the information is stored in a table in SAP ECC. The report RFGTRFIDOC_ANALYZE clears the table and transfers the cleared amount of FI document which have been paid to CRM, which updates the corresponding Agreement Item.

 

agreement item  - clear item.png.

 

9-Audit:

 

Grants audit are achieved by using standard CRM capabilities. By using workflow, status, actions and /or activities, audit activities could be registered in the system.

audit tasks.png

 

Generally, the Grant Agreement will detail any requirements / conditions for the grant. Maintain an electronic file with the supporting documents, will also help to reconcile the claims for reimbursement with the general agreement and and supporting documents. SAP offers CRM Case Management functionality as optional component that will provide a central place for all documents related to a single application and its follow-on transactions.

 

case management.png

 

The solution also offers a wide range of reporting options supported by SAP BI.

report options.png

 

10- Repayment:

 

A repayment is payment made from the grantee to the grantor if costs incurred were less than funds advanced. A repayment is required to balance the amount.

A repayment item in the agreement will create a "Forecast of Revenue Document" in SAP ERP


 

11-Year- End closing:

 

Solution supports all activities for year-end-closing. These include transferring open commitments (commitment carry forward) and a separate transfer of non-consumed budget (carry forward of residual budgets) from old fiscal years to the new.

 

By updating “Grant Start Date” in any application/agreement to the new financial year, system will automatically adjust the pre-commitments / commitments to the new financial year. Old commitment items will be set to “0” and new commitment item for the new date will be created automatically by the system.

 

roll over.png.

 

Overall, SAP Grantor Solution support all phases of Grantor Processing, helping organisation to  administers funds to provide financial assistance to a group of individuals or  organisations.

 

To start exploring the solution, you can use standard CRM UI Business Role "CRMGRMPRGMAN - Grantor Program Manager".


For some enhanced search fields, the wildcard search does not work. There is error "Expression &' with wildcard '*' is invalid here: Check search criterion" issued.

 

In WEBUI, the search with wildcard is only allowed when search operator "CP" is supported for the search field.

If wildcard search is required, do not forget to check on the search operation "CP" for the field in data model.

Actions

Filter Blog

By author:
By date:
By tag: