Using a BOL Programming on an API level?

Hi Experts,
For the time being I was pretty sure that SAP CRM developers shouldn't combine layers when developing some enhancement.
However recently I had a problem to convince my colleagues and myself as well - why not?
I understand all the architecture and layers logic, but what is exactly wrong when someone uses BOL programming when creating own programs or when enhancing system via BADI. BOL programming in SAP CRM is much simplier, efficient and convenient. Using BOL programming to update some data instead of CRM_ORDER_MAINTAIN (I hate it ) is luring, so what the arguments are against using it, in example in a BAdI like ORDER_SAVE?
I am looking forward your opinions
Kind regards
Lukasz

Hi Stephen,
The best answer on why not to mix BOL and one order BADI's is "recursion".   If you look underneath the covers all those BOL objects for one order are calling the one order API which then stuff like ORDER_SAVE sits inside of those API calls.  Now if you want to write standalone code outside of the API layer(BADI's, BTE's) and use BOL instead of one order API function modules, there should be no problems.
Another way of looking at this is that even if you avoid recursion, then calling BOL inside a one order API badi for one order data is like being in your backyard and going to your front door by going out to the front yard, walking to the closest highway exit where you live and then walking back to your front door.  It's not something you would want to do frequently.
Good points and nice analogy.
I guess the interesting question is always if in a particular BADI using the BOL is OK or not. I was just looking around some of the BADIs implemented in one of our systems. The best hints regarding the APIs to use when implementing a particular BADI are always the default implementations and the BADI interface. For example, the interface of the BADI CRM_IUICMD_BADI uses the class CL_CRM_BOL_ENTITY in most of the methods. This is already a pretty good hint, that using the BOL would be OK here .
In contrast to that, the interface for the BADI ORDER_SAVE just uses GUIDs (CRMT_OBJECT_GUID). All existing implementations are implemented using function modules like CRM_ORDERADM_H_READ_OB or CRM_ORDER_MAINTAIN. Again, this should be hints enough to not use the BOL when implementing this BADI.
I'm really confused about BOL and webservices since there is a webservices tool for CRM that uses BOL objects, but I guess once again if you want to build custom webservices by hand without using the tool, that should work also.
Yes, I was thinking about implementing a custom Web service without the usage of the Web service tool. But now that you mention it; the Web service created by the Web services tool are based on the BOL. So this shows, that the BOL is definately suitbale to implement interfaces to external systems (as SOAP Web service, simple RFCs or what ever).
Christian

Similar Messages

  • Use of Bol and Genil Programing

    Hi All,
    I am new to CRM, could you please explain what is the use of Bol & Genil programming?
    Thanks,
    Krishna

    Hi Anil,
    The BOL and GenIL essentially refer to the layers that handles the user interface in SAP CRM.
    The GenIL (Generic Interaction Layer) consists of one implementation class that always derives from one of the two classes and implements a set of methods to provide the functionality. GenIL is like a bridge between the backend APIs and the UI i.e. for
    a given UI, it identifies which APIs need to be called and also re-formats data accordingly.
    The BOL (Business Object Layer) consists of upto 7 different kinds of objects that are defined in a model. At runtime, the BOL layer will hold data that is used on the UI. BOL provides a consistent way of modelling data so that data access is consistent and the UI can also be built faster.
    This is just a brief information - you need to go through details documents to understand this in detail. SAP CRM comes with a sample genIL implementation that can be found in CRM_GENIL_SAMPLE package. You can check this package to see how GenIL and BOL layers can be implemented.
    Regards,
    Shiromani

  • Change product attributes by using BOL program

    Hi every one,
    I am very new to BOL program. Can any one help me out how to change the product attributes by using BOL program. How to find the relations in BOL program?
    Thanks in advance.

    Hi Rams
    All the components that are seen in genil_model_browser would be defined in spro under the following path:
    Customer Relationship Management ->CRM Cross-Application Components->Generic Interaction Layer/Object Layer->Basic Settings
    If you are looking for the product master, here you can find the component 'PROD'.
    Now goto tx genil_model_browser and enter component PROD. In here, under Root Object 'Product', you can see all the relations.
    Hope the above info helps.
    Regards
    Nisha

  • API's used in Interface programs of Oracle Applications

    hi
    can any one let me know about the PL/SQL API's that are used in interface programs of oracle applications.
    in what cases we are using them
    and if possible their syntax
    thanks in advance
    bye

    Pl Sql APIs are used for uploading / correcting the mass Data of Oracle HRMS and Oracle Payroll , For Technical person they are Fast and Easy for data Migration Purpose
    You Can Seach more on Metalink.
    You can search these APIs from your Data Base where name like '%API'

  • How to pass kerberos ticket at api level?

    Hi,
    Am relatively new in the domain of Java Security, JAAS and JGSS. After reading the tutorials and examples, I was able to do authentication and message transfer using Kerberos LoginModule. All the examples demonstrates message transfer and credential passing at socket level.
    But in normal scenario's a server application exposes its APIs and the clients invokes remote methods on the server instead of sending data at a socket level.
    My question is can I use kerberos and JGSS to pass security context at api level without adding an arguement for security context in each api call?
    In simple terms, Is it possible to implicitly pass user credential's to server at each api call instead of exchanging/encrypting data at socket level?
    Is there any other mechanism that meets this kind of requirement?
    Thanks,
    Kapil

    Seema, could you please elaborate on how GSS context is established?
    The examples show that context is established after series of message passing between client and server inside a while loop
    while (!peerContext.isEstablished()) {
                       byteToken = peerContext.initSecContext(byteToken, 0, byteToken.length);
                    if (byteToken != null) {
                        outStream.writeInt(byteToken.length);
                        outStream.write(byteToken );
                        outStream.flush();
                    }//if
                    if (!peerContext.isEstablished()) {
                        byteToken  = new byte[inStream.readInt()];
                        inStream.readFully(byteToken );
                    }//if
                }//while (!peerContext...)Is there any other way to establish GSS context ?
    Thanks & Regards,
    Kapil

  • How to create a taxonomy using MDM 5.5 SP05 JAVA API?

    Hi ALL,
    I have a requirement in which i have to create a taxonomy using MDM 5.5 SP05 JAVA API.
    Can anyone tell me how that functionality can be achieved?
    Thanks in Advance.
    Rajat.

    HI, Rajat.
    For exposing hierarchy in WD view you need to use node with recursive children in the context and Tree/TreeNodeType UI elements in view layout.
    For load hierarchy records you have to use RetrieveLimitedHierTreeCommand. You can load whole hierarchy (as I know, SP05 API have a bug - only first 1000 record can be loaded) or load hierarchy nodes on demand (using OnLoadChildren action of TreeNodeType element).
    Refer to this example of loading child records:
    // Context structure:
    // Tree (model node, model class built from com.sap.mdm.data.Record interface)
    //  |-- Children (recursive child node repeating Tree node)
    //  |-- DisplayValue (string value attribute, TreeNodeType's text property bound here)
    //  |-- HasChildren (boolean value attribute, TreeNodeType's hasChildren property bound here)
    // parentElem is element of node Tree or Children for which we must load child records, null for first level of hierarchy
    private void fillNodeWithChildren(IPrivateHierarchySelectView.ITreeElement parentElem) {
         // Determining RecordId of parent record and context node to which child records belong
         RecordId parentRecordId = null;
         if (parentElem != null) parentRecordId = parentElem.modelObject().getId();
         IPrivateHierarchySelectView.ITreeNode parentNode =
              parentElem == null
                   ? wdContext.nodeTree()
                   : parentElem.nodeChildren();
         // Loading children with RetrieveLimitedHierTreeCommand
         try {
              RetrieveLimitedHierTreeCommand retTreeCmd = new RetrieveLimitedHierTreeCommand(...); // use suitable constructor
              if (parentRecordId != null) retTreeCmd.setRootNode(parentRecordId);
              retTreeCmd.setResultDefinition(...); // don't forget set ResultDefinition
              retTreeCmd.execute();
              HierNode subRoot = retTreeCmd.getTree()
              parentNode.invalidate();
              // Processing loaded child records - add elements into parentNode
              if (subRoot == null) return;
              IPrivateHierarchySelectView.ITreeElement childElem;
              HierNode childRecord;
              HierNode[] children = subRoot.getChildren();
              int count = children == null ? 0 : children.length;
              for (int i = 0; i < count; i++) {
                   childRecord = children<i>;
                   childElem = parentNode.createTreeElement(childRecord);
                   childElem.setDisplayValue(childRecord.getDisplayValue());
                   childElem.setHasChildren(!childRecord.isLeaf());
                   parentNode.addElement(childElem);
              if (parentElem != null) parentElem.setHasChildren(count > 0);
         } catch (/* Some MDM Exceptions */) {}
    Don't forget call fillNodeWithChildren(null) in wdDoInit for load first level of hierarchy.

  • How can I programically make a top level VI panel invisible?

    How can I programically make a top level VI panel invisible?

    You can use VI Server's 'Close FP' method to close the front-panel. You will need a reference to that VI to invoke the method. One easy way is to launch the VI with the VI Server and hold on to its reference.
    See the attached diagram -- the top-level.vi is launched and run, we wait for 5 seconds, and then close its front-panel.
    Hope this gives you some ideas.
    Khalid
    Attachments:
    close_fp.png ‏38 KB

  • Do you have any document for CRM BOL program

    For example how to use class CL_CRM_BOL_CORE and related features, how to use transaction /NGENIL_MODEL_BROWSER
    Thanks and best regards,
    Blake Le

    Hi,
    I don't find any details documentation in help.sap.com for BOL program and GenIL.
    I found this one in internet:
    http://blogs.moovar.com/sap/sap-crm-create-a-custom-bol-for-web-ic/
    http://wiki.sdn.sap.com/wiki/display/CRM/CRMUIFrameworkZBOLObjectPart+1
    The transaction GENIL_MODEL_BROWSER is only for browsing the GenIL Model.
    If you want to use the BOL you can try GENIL_BOL_BROWSER, using this transaction you can browse GenIL Model and you can retrieve also application data from GenIL.
    In any CRM system you can find open component "SAMPLE" using GENIL_BOL_BROWSER.
    And than you can try to put some break-point in the CL_CRM_BOL_CORE methods or CL_CRM_BOL_ENTITY methods.
    And you can see how these two classes are used.
    Regards,
    Steve

  • WeakHashMap, cleanup and API level guarantees

    When does WeakHashMap groom/cleanup the entries i.e. remove the WeakReferences from the Map? It appears it does it when the WeakHashMap is accessed. In other words, if for some reason the WeakHashMap is NOT accessed, the entries continue to stay as WeakReferences.
    Is there an API level guarantee as to how the cleanup works? I do not see it documented in WeakHashMap API.
    A hashtable-based Map implementation with weak keys. An entry in a WeakHashMap will automatically be removed when its key is no longer in ordinary use. More precisely, the presence of a mapping for a given key will not prevent the key from being discarded by the garbage collector, that is, made finalizable, finalized, and then reclaimed. When a key has been discarded its entry is effectively removed from the map, so this class behaves somewhat differently from other Map implementations.
    Again, if there is any reference on how and when this -- An entry in a WeakHashMap will automatically be removed when its key is no longer in ordinary use. -- happens, it will be useful.
    With regards,
    M.P. Ardhanareeswaran

    user514049 wrote:
    This is more than casual curiosity.
    WeakHashMap is actually working for me by "accident". In my case, I am storing some PhantomReferences in this Map as values (and not keys) for cleanup. There is a quiet period before the application is torn down during which there are no updates to the WeakHashMap. My application is able to retrieve the PhantomReferences at close time and clean them up.
    It appears that it is "not advisable" to rely on this behavior.Not sure exactly what you mean here. Are the keys referenced anywhere else, or only in the map? If only in the map, then the entries can be removed from the map and the keys GCed at any time. If you need to know that you'll have access to some entry at some point in your code, then you'll have to make sure that there's a reference to the key outside of the map.
    If "by accident" you mean that, so far, the entries are always there even without you maintaining other references to the keys, then, yes, that is just happenstance, and not to be relied on.
    To quote the third sentence of WHM's javadoc (emphasis mine): "More precisely, the presence of a mapping for a given key will not prevent the key from being discarded by the garbage collector, that is, made finalizable, finalized, and then reclaimed."
    Edited by: jverd on Nov 11, 2011 12:46 PM

  • When is Verizon going to provide Android v4.3 API level 18?

    Google released Jelly Bean 4.3 API level 18 on the 24th of July 2013.  When is this going to be provided for the Droid 4?  Mine still has Android version 4.1.2, which was released a year ago, and lacks support for low energy Bluetooth and many other new features. 
    It is unacceptable for Verizon to lag so far behind the Google developers, especially since Google bought Motorola.

    Likely never. The only phone on 4.3 right now period is the Nexus 4, and the new Nexus 7 tablet has 4.3. The GPE Galaxy S4 and GPE HTC One are probably next in line to get the update, along with possibly the Google Play version of the Galaxy Nexus.
    non-Nexus/GPE phones, if they get the update, will lag behind by 6 months to a year, minimum, as normal.
    Your Droid 4 was released on 2.3, updated to 4.0 then 4.1, it's already seen RIDICULOUSLY more support than the average android phone will ever see.
    Many of the "new features" you refer to require hardware your Droid 4 doesn't have, for example updated versions of the bluetooth hardware inside to conform to the newer bluetooth standard, or require drivers to support the features that haven't yet been written for the particular chipsets and components used in your Droid 4.
    Most phones, if they get an android software version update at all, get one update in their life cycle. Yours has seen two, be happy to have gotten the updates you got.

  • Using iPad mail program I have a draft of an email. I attempted to "cancel" and "delete draft" but it is still on my screen even after shutting down and restarting. How do I exit so that I can use other mail functions?

    Using iPad mail program I have a draft of an email. I have attempted to "cancel" this and "delete draft" but the email stays on my screen. How can I exit this so that I can use other email functions?

    Try closing the Mail app completely and see if it works properly when you re-open the app : from the home screen (i.e. not with the Mail app 'open' on-screen) double-click the home button to bring up the taskbar, then press and hold any of the apps on the taskbar for a couple of seconds or so until they start shaking, then press the '-' in the top left of the Mail app to close it, and touch any part of the screen above the taskbar so as to stop the shaking and close the taskbar.
    If that doesn't work also do a reset : press and hold both the sleep and home buttons for about 10 to 15 seconds (ignore the red slider), after which the Apple logo should appear - you won't lose any content, it's the iPad equivalent of a reboot.

  • I have a fully paid subscription to CC and use of installed programs but I can no longer sign in to CC. It repeatedly says "You've been signed out". I have the need to install another program but I can't sign in.

    I have a fully paid subscription to CC and use of installed programs but I can no longer sign in to CC. It repeatedly says "You've been signed out". I have the need to install another program but I can't sign in.

    Sign Out When Sign In http://forums.adobe.com/thread/1450581?tstart=0 may help
    -and http://helpx.adobe.com/creative-cloud/kb/unable-login-creative-cloud-248.html

  • If i purchase a movie from iTunes on my Windows 7 PC is there a way I can download it and watch it offline without using the iTunes program?

    I have been trying to figure out the answer to this all day I want to purchase The Interview I know you can download but I want to know if you can watch it offline without using the iTunes program like will i get the file to this movie i purchased?

    Thank you i been looking for a  answer to this all day but I couldn't find anything on it! Now I know I will find a file with it! thanks!

  • I am trying to use an education program that needs Java applets to install and use and it will not use Safari. When I download IE from the web it will not install. How can I get a browser that will work on my MacAir for travel use of this program?

    I am trying to use and education program that needs Java applets and it will not run on Safari. IE will not install from the web. How do I get a browser that will work to install so I can use this program when I travel.

    Try using FireFox. IE will only run on a Mac if you run Windows on the Mac.
    Windows on Intel Macs
    There are presently several alternatives for running Windows on Intel Macs.
    Install the Apple Boot Camp software.  Purchase Windows 7 or Windows 8.  Follow instructions in the Boot Camp documentation on installation of Boot Camp, creating Driver CD, and installing Windows.  Boot Camp enables you to boot the computer into OS X or Windows.
    Parallels Desktop for Mac and Windows XP, Vista Business, Vista Ultimate, or Windows 7.  Parallels is software virtualization that enables running Windows concurrently with OS X.
    VM Fusion and Windows XP, Vista Business, Vista Ultimate, or Windows 7.  VM Fusion is software virtualization that enables running Windows concurrently with OS X.
    CrossOver which enables running many Windows applications without having to install Windows.  The Windows applications can run concurrently with OS X.
    VirtualBox is a new Open Source freeware virtual machine such as VM Fusion and Parallels that was developed by Solaris.  It is not as fully developed for the Mac as Parallels and VM Fusion.
    Note that Parallels and VM Fusion can also run other operating systems such as Linux, Unix, OS/2, Solaris, etc.  There are performance differences between dual-boot systems and virtualization.  The latter tend to be a little slower (not much) and do not provide the video performance of the dual-boot system. See MacTech.com's Virtualization Benchmarking for comparisons of Boot Camp, Parallels, and VM Fusion. A more recent comparison of Parallels, VM Fusion, and Virtual Box is found at Virtualization Benchmarks- Parallels 10 vs. Fusion 7 vs. VirtualBox. Boot Camp is only available with Leopard and later. Except for Crossover and a couple of similar alternatives like DarWine you must have a valid installer disc for Windows.
    You must also have an internal optical drive for installing Windows. Windows cannot be installed from an external optical drive.

  • OneNote recordings "We're sorry, we can't open the file because it is in use by another program."

    Constantly, OneNote breaks and screws up my recordings that are synced with my lectures. It is such a fragile process and very frustrating. As soon as I'm done recording, I press stop. When I test the recording, it says, "We're sorry, we can't open
    the file because it is in use by another program." I just recorded and then stopped it. If i close and reopen OneNote, it says, "oneNote is cleaning up from the last time it was open." And the recording still says it's in use by another program.
    I've even restarted the laptop and it still won't open. The only way i could salvage the file is if I copy and paste it into another folder, and then it will open through windows media player, but all the live syncing with my notes are gone. Where are these
    files stored? If I could save the sound and find the file/format that holds the syncing data again, I could work around this. They are no where to be found on my computer. Other forums give locations, but my folders are empty. Some other recordings work and
    sync nicely, but I have still lost many recordings to this error. However, if I play a file and then close it without stopping playback, that file, too, will now be unusable. It will be stuck as "We're sorry, we can't open..." no matter what i do
    and again i have to copy/paste it into a new folder and then move it back. I had the same problem on my last laptop. I record in Windows Media Audio 10 Professional at 192 kbs, 48 kHz, and stereo CBR. I need the high quality because the lecturer is too quiet.
    It seems to happen when I record long lectures, 45 min+. Shorter recordings tend to work fine.
    Please help, this would make note taking so much easier.

    A bit of a confusion on my part;
    Now we have created these REPORTS using Basic Crystal Report 10.5, which comes bundled with Visual Studio 2008 and .Net Framework 3.0. Now on our machines, we have never experienced any issues.
    Going by the above, you should have references to CR assemblies of version 10.5.3700 only. No other references.
    Now, looking at this paragraph:
    BUT on the DEV server (web server) which has .net Framework 3.0 and in its GAC its has CRYSTAL DLLs version 11.5 (required to create an Object of ReportClass and its related functions) ; sometimes we get the following error while exporting crystal report to pdf:
    I wonder what runtime was deployed to the server. E.g.; if you are using CR 10.5, your assemblies will be 10.5.3700 and you should be deploying the following runtime (depending on 32 bit / 64 bit, etc.):
    CRRedist2008_ia64.msi
    https://smpdl.sap-ag.de/~sapidp/012002523100006255262008E/CRRedist2008_ia64.zip
    CRRedist2008_x64.msi
    https://smpdl.sap-ag.de/~sapidp/012002523100006255272008E/CRRedist2008_x64.zip
    CRRedist2008_x86.msi
    https://smpdl.sap-ag.de/~sapidp/012002523100009351342008E/CRBasicVS2008_redist_x86.zip
    One way to check on what is actually loading is to use the [Modules|https://smpdl.sap-ag.de/~sapidp/012002523100006252802008E/modules.zip] utility.
    - Ludek

Maybe you are looking for

  • Erro Faturamento/NF - Saldo em moeda da transação

    Durante a configuracao do cenario de transferencia de estoque por MM/SD , na hora de fazer a SM que ia gerar a NF acontecia o erro abaixo: Saldo em moeda da transação Nº mensagem F5702 Diagnóstico Ocorre um saldo na moeda de transação 'BRL': Categori

  • Help needed with notes in iCloud

    I have lost all the notes on my iphone but they are still on my Mac and ipad. When i enter a new note they only sync between ipad and mac and not my phone, I have signed into icloud online and they appear there if I enter them from ipad or mac but no

  • How do you get the iPad 1 to play music

    I recently bought an iPad 1. I synced it up w/iTunes on my iMac. For some reason, I can't get any of the music that was synced to play on my iPad?  Do you need to download iTunes or an App to play music on the iPad? Thanks

  • Can't open a pdf I installed on my site

    When I try to go to a pdf I installed on my site , Firefox instead suddenly asks me to save the page on my computer. This is something new this afternoon. Works fine on Chrome and Safari. It doesn't happen with an html or docx.

  • Upgrade R12.1.1 to R12.1.3

    Hi all, before starting upgrade process I was download some patch 9239089 9239090 9817770 9966055 9239095 I starting upgrade my Oracle EBS release 12.1.1 to 12.13 on OL6.4 Operating system. now i already apply patch 9239090 after patch 9239089 I chec