The siebelhub.GetFieldValue Method
Transcription
The siebelhub.GetFieldValue Method
aMind’s Mobile Platform Drives Door-to-Door Sales Transformation for Cablevision Monterrey Robust offline sync, rapid deployment, flexibility, and easy in-house maintenance put TethrOn’s mobile development platform head and shoulders above competitive solutions. The Challenge Selling cable services door-to-door is highly effective for Cablevision Monterrey. Customers appreciate in person explanations of different bundles matched to their unique viewing devices, content preferences, and budget. However, the job of the door-to-door sales representative is no easy task. Frequently changing product bundles and promotions with complex options are difficult to present to customers. Cablevision Monterrey’s comprehensive product offerings require ongoing training, and their complexity creates confusion, reducing conversion rates. Complicating matters, many residential areas have spotty internet access making many mobile apps unreliable. With sketchy internet access, sales representatives rely on paper to print their daily schedule, neighborhood addresses, and promotional bundles. Paper-based processes are highly inefficient, reducing the number of visits that can be made in a day. Cablevision Monterrey didn’t need convincing that mobilizing cumbersome paper process could greatly improve the performance of their door-to-door selling team. The challenge was finding an affordable solution that would launch in less than 60 days and deliver: Robust offline support for door-to-door field workers. A platform that becomes the standard for mobile application development. Flexibility to scale with the company’s growth. Simplicity for in-house development and maintenance. Management performance data to track each individuals performance in real time. Quick time to market. Cablevision’s Director of I.T. José Quiñónez López reports, “Our requirement was to get a framework to accelerate mobile applications development. Our first project is a door-to-door selling application. We needed the project implemented in less than two months. TethrOn met this challenge.” The aMind Solution After an extensive review of mobile development platform alternatives, Cablevision selected TethrOn for high performance offline sync and support for exceptionally rapid app development. TethrOn’s “no code” development approach means that comprehensive mobile applications can be built rapidly. The TethrOn enterprise mobility platform includes prebuilt backend connectors, data access code, synchronization of data and security. This frees developers to focus on defining business processes and creating a branded user interface. Using the TethrOn development platform the IT group within Cablevision Monterrey built their first proof of concept doorto-door selling app in less than 60 days. The Result The selection of the TethrOn mobile development platform has been a win-win-win for the company. The IT department is thrilled at how simply and cost effective it was to get up to speed on the TethrOn platform and deliver the first version of their door-to-door selling app. Sales people appreciate having digital territory information available at their fingertips and with future releases will be able to easily quote and order services while working directly with customers. And managers are excited by the collection of data that supports tracking and adjusting sales performance in realtime. Discover how you can transform your field sales and service with aMind Solutions. >> siebelhub.js – Documentation (Part 2) Today we continue having a closer look at the methods provided by the Siebel Hub JavaScript library for Siebel Open UI. For recent articles, please refer to the links below: Downloading and Installing siebelhub.js Documentation Part 1 The siebelhub.GetControlValue Method Getting the current value of a control can be tricky. It can only be done through the PM’s ExecuteMethod method. The siebelhub.GetControlValue method acts as a simple wrapper. siebelhub.js GetControlValue method (click to enlarge) To access the code example as text, please click here. Input Arguments of siebelhub.GetControlValue The siebelhub.GetControlValue function has the following input arguments: context: an instance of a PM, PR or Applet control: an Applet Control instance Output Arguments of siebelhub.GetControlValue The siebelhub.GetControlValue function returns the current value of the Applet Control object. Flow of siebelhub.GetControlValue The code accomplishes the following: Get the PM of the context object If the PM is valid, use the ExecuteMethod API method to execute the GetFieldValue method against the control instance Return the value Use Case for siebelhub.GetControlValue The following code example from a custom Physical Renderer demonstrates how to use the siebelhub.GetControlValue method. var oControlSet = PM.Get("GetControls"); var accControl = oControlSet["Account2"]; var sAccountName = siebelhub.GetControlValue(PM, accControl); The siebelhub.GetFieldValue Method On some occasions, we might want to get a Field value. This value represents the current Business Component Field’s content and can be extracted from the logical “Record Set”. The siebelhub.GetFieldValue method facilitates this by providing the developer with a variety of options, such as providing the field name in “dot notation”. siebelhub.js GetFieldValue method (part) To access the code example as text, please click here. Input Arguments of siebelhub.GetFieldValue The siebelhub.GetFieldValue function has the following input arguments: field: the name of a BC field or BC.Field (dot notation); e.g. “Id” or “Opportunity.Id” context (optional): an instance of a PM, PR or Applet; if not provided, the code uses the active applet’s PM as the context Output Arguments of siebelhub.GetFieldValue The siebelhub.GetFieldValue function returns the value of the field. Flow of siebelhub.GetFieldValue The code accomplishes the following: Split the field name to separate business component and field name (Note: at the time of writing, this function does not work with field or BC names that actually contain a period (dot) character! A todo has been added). If a context is provided, get the PM instance. If only a BC name was provided, use the siebelhub.GetAppletsByBCName method (see below) to find any applet in the current view that uses that BC and get that applet’s PM instance. If no context was provided and no applet uses the BC, get the currently active PM (see below for a description of the siebelhub.GetActivePM method). If there is a mismatch between the input BC name and the applet’s BC, raise an error message. Use the siebelhub.GetRecordSet method (see below) to get the raw record set of the PM. Identify the active record using the GetSelection PM property. Get and return the value of the field. Use Case for siebelhub.GetFieldValue The following code snippet comes from a custom Presentation Model function that retrieves Account data for the current Opportunity record. The original lines are commented out to demonstrate the benefit of the siebelhub.GetFieldValue method. function GetAccountData(){ //var oRaw = this.Get("GetRawRecordSet"); //var index = this.Get("GetSelection"); //var opptyId = oRaw[index].Id; //using siebelhub.GetFieldValue replaces the 3 lines above: //var opptyId = siebelhub.GetFieldValue("Opportunity.Id"); //alternatively, pass current PM context var opptyId = siebelhub.GetFieldValue("Id", this); The siebelhub.GetAppletsByBCName Method As discussed above, it can come handy sometimes to find applets (in the active view) that use a certain business component. The siebelhub.GetAppletsByBCName method accomplishes this. siebelhub.js GetAppletsByBCName method (click to enlarge) To access the code example as text, please click here. Input Arguments of siebelhub.GetAppletsByBCName The function has the following input argument: bcname: the name of a Business Component Output Arguments of siebelhub.GetAppletsByBCName The function returns an array that contains all applet instances referring the the BC. Flow of siebelhub.GetAppletsByBCName The code accomplishes the following: Get the array of applets of the active view (aka ‘applet map’). Iterate through the array of applets. For each applet, get the business component name and compare to the input string. If there is a match, add the applet instance to the output array. Use Case for siebelhub.GetAppletsByBCName The following code example demonstrates how to use the function and get all applets in the current view that use the Account BC. var allAccountApplets siebelhub.GetAppletsByBCName("Account"); = The GetActiveApplet, GetActivePM, GetActivePR Methods These three methods are very similar in nature and do what it says on the tin. These methods are used a lot across siebelhub.js internally but can also do a lot of good when you want to quickly establish context to the currently active applet, its PM or PR. GetActiveApplet: returns the currently active Applet instance. GetActivePM: returns the Presentation Model instance of the currently active applet. GetActivePR: returns the Physical Renderer instance of the currently active applet. Use Case for siebelhub.GetActiveApplet The following code example shows how to use the siebelhub.GetActiveApplet method. The GetActivePM GetActivePR methods can be used in a similar fashion. and var currentRowId = siebelhub.GetFieldValue("Id",siebelhub.GetActiveApplet()); The example code calls the siebelhub.GetFieldValue method to retrieve the value of the Id field (ROW_ID) of the currently active record in the currently active applet. The siebelhub.GetRecordSet method Accessing the record set of an applet is often required in Siebel Open UI. The “record set” only includes the currently visible data (more fields are exposed in the ‘raw’ record set). The siebelhub.GetRecordSet method makes it easy for developers to get the current record set. siebelhub.js GetRecordSet method (click to enlarge) To access the code example as text, please click here. Input Arguments of siebelhub.GetRecordSet The function has the following input argument: raw: boolean; true to retrieve the ‘raw’ record set, false to retrieve normal record set context (optional): PM, PR or Applet instance, defaults to active PM Output Arguments of siebelhub.GetRecordSet The function returns the PM’s record set. Flow of siebelhub.GetRecordSet The code accomplishes the following: Instantiate the PM from context or use the active PM. Depending on the raw argument, either get the value of the GetRecordSet or GetRawRecordSet PM property. Use Case for siebelhub.GetRecordSet This code snippet is from the siebelhub.GetFieldValue method and shows how to use the siebelhub.GetRecordSet method: var recordset = siebelhub.GetRecordSet(true,pm); OK, that’s it for today. Please stay tuned for more siebelhub.js documentation right here on the Siebel Hub blog. Siebel Hub JavaScript Library Guide As a special treat, we have put together the complete documentation for siebelhub.js as a Kindle e-book, available for a small fee on Amazon. Or if you prefer PDF, you’ll find it on the Siebel Hub Shop. Siebel Hub JavaScript Library Guide have a nice day @lex OnTheMove – Siebel Mobility with a new Focus #2 OnTheMove – Siebel Mobility with a new Focus #2 In Part Two of this article I would like to continue to review the OnTheMove solution from Customer Systems, and provide some further information as to the hard technical stuff that has gone on to produce this new User Interface and approach, as well as giving readers a number of places where they can get more information about OnTheMove. Firstly though, a reminder from the last part of the article: What is OnTheMove? OnTheMove for Siebel is a set of applications that aim to solve the “Siebel Mobile” and “Siebel Disconnected Mobile” conundrums. Unlike other applications in the same space, which attack the problem first from a technical perspective, OnTheMove concentrates on what makes Siebel successful – it is a tool to let users get their job done. And when it gets that part right, the user adoption challenge is already greatly lessened. So the process is the key. Rich Process-based User Experience The OnTheMove Field Service experience that I am using as my demonstration has everything you would expect – parts, invoicing, customer confirmation through electronic signature capture, wrap up screen for the engineer to capture any further requirements before moving off and so on. Here is a little gallery to let you see some more of this well-designed application. OnTheMove – My Work Day OnTheMove – Signature Capture OnTheMove – Wrapping Up Strong Patent-pending Offline Support And just in case you think this Application is “just a pretty face” you would be wrong – notice the Synchronize tab on the left hand side. The OnTheMove application has a strong offering to provide offline use and has a vastly simplified User Interface for that too. As someone who believes that the standard Siebel Open UI “Mobile Disconnected” user interface, with tiny aeroplane icons (or satellite dishes depending on your version) is both frustratingly small and over complicated, I love this: OnTheMove – Synchronize Hiding behind this simple initial screen is a powerful synchronization engine – handling complex scenarios with finegrained rules, using caching structures to optimize speed and providing audit facilities to see “who did what”. All of these solutions are dedicated to providing most appropriate, simple process they done, whilst helping speed up administration for the business at the End User with the need to get their job the deployment and the same time. Get the Job Done Right The title of this paragraph seems to me to sum up the basic premise of OnTheMove – provide developers, Siebel customers and Siebel users with solutions that just work, letting them focus on getting the job done whether they are consultants, business owners or technicians on the move. Other Applications My walk-through described in this post was based on a Field Service scenario, but the OnTheMove concept is far broader than that – there are any number of business processes that can benefit from this new user interface and new mobilefriendly platform. Duncan says he has customers using OnTheMove for Siebel for Sales, CPG in-store execution, doctor detailing, clinical trials and donor management as well as field service. I was lucky enough to be able to examine another, orderfocused application with a slightly different use case. I could see that the same attention to business users and business process was evident in that application too. OnTheMove – Account Details OnTheMove – Order Details OnTheMove – Account List Getting more information OnTheMove is a really exciting addition to the Siebel Mobile space. By taking a different approach to most of the other providers, they have produced a really convincing platform. To get more information, there are several places I can recommend. Video and Register for a Webinar Find an Office near you Contact Directly I encourage you all to find out more about Customer Systems and OnTheMove. Seeing such a long-time Siebel team as Customer Systems focusing their firepower on this problem is great news for the Siebel Community. Open UI is just a waste of time… Open UI is just a waste of time……or is it? My apologies for the clickbait title. But I want to thank one of our loyal readers from France, JDL, for his excellent suggestion for the new January 2016 Siebel Hub Snap Poll. He proposed to ask the Siebel Hub Community what they really feel about Siebel Open UI Development. How much workload have we gained or lost in development with the arrival of Siebel Open UI. Is your development workload typically longer or shorter compared to the Siebel High Interactivity development phase? Please help us feel the pulse of the Siebel Hub Community and answer this single question survey. Thank you all for your time. And of course do not forget that if you have a good idea for a Snap Poll, you can submit it using our User Submitted Article feature. Have a nice day, and help the Siebel Hub continue to build out it’s library of reference information about our favorite product and it’s positive and negative aspects. Rich@rd aMind Solutions Enables “Mobile First” iPad Application for AT&T aMind’s mobile infrastructure and APIs enable innovative mobile app for AT&T sales and partners, improves efficiency and showcases mobile capabilities. The Challenge AT&T had an enterprise-wide mobility initiative to mobilize its B2B direct and indirect sales forces. While sales teams were equipped with Apple iPads, their Oracle Siebel 8.1 SFA system was heavily customized, and the desktop UI was not adequate to support selling in the field. Customer data and processes spanned more than 13 systems and required users to log into each system separately to look up information and complete the sales process. The company carefully evaluated multiple options including SaaS/Cloud offerings, Oracle Open UI, or building a mobile app from the ground up in-house before selecting aMind Solutions. Read the full story. The aMind Solution To mobilize AT&T’s sales team, aMind integrated multiple disparate systems, including Siebel CRM system and its 20 million records and related processes. Data.com company and business contacts, IBM Connections social collaboration platform, and 13 additional disparate systems for trouble tickets, billing, orders, contracts, revenue, data warehouse and customer intelligence were all integrated together in one app to mobilize sales. The aMind architecture then exposed these systems through a set of API’s to a single mobile SFA app developed by AT&T. In addition, numerous new features and capabilities were added by in-house developers, leveraging the aMind APIs, to improve the mobilized sales user process: Sleek, Intuitive User Interface: UI optimized specifically for the device that includes tabs for Home, Accounts, Opportunities, Leads, People, Communities, and Search. UI offers recently viewed (accessed) records, Dashboards, Lead and Opportunity drill-downs, and advanced search capabilities. Collaboration & Socialization: Enterprise social collaboration (IBM Connections) was integrated into the sales process allowing users to post social updates within the app. Crowd-sourced data (Data.com) enabled new contact discovery. Additional features include: social profile management, social communities, search feeds, etc. Financial, Business Intelligence & Reporting: Analytics stored locally to enable real-time financial, revenue, and drill-down analytics. Preferences also stored locally to enable Dashboard personalization and customization. Electronic Signature Capture: Electronic document signing enabled on the iPad to allow customers to sign contracts on the spot. GPS Mapping: Location-based account proximity mapping integrated with multiple data sources. “The aMind solution fulfilled our ‘Mobile First’ strategy, providing the latest in mobile tools and an application that improves sales and partner efficiency, and showcases capabilities to our customers.” The Result aMind Solutions developed the infrastructure and APIs delivering significant businesses benefits for AT&T and its mobilized sales and partner teams. Some of the key results include: Improvement in Sales Effectiveness Multiple systems seamlessly integrated into a single mobile API, allowing the entire sales process to be easily and efficiently managed on the mobile device. Centralized Information Reduced Cycle TImes New and enhanced features – dashboards, social integration, location-based mapping, electronic signature capture, trouble ticket integration, drill down, search, and more − further streamline the process, increase sales effectiveness and together worked to reduce sales cycle times. Improved Close Rates Through a single, holistic account dashboard that provides users with a 360-degree view of key account information (contacts, opportunities, solutions, orders, trouble tickets, etc.). Sales and partners are able to more effectively and efficiently manage existing accounts and close business more quickly. Improvement in System Performance The mobile application runs faster than native Oracle Siebel. Long running operations are performed in the background so the user does not need to wait for them. Reduction in Training Time The UI is designed to intuitively guide sales and partners through the sales process, virtually eliminating training. Showcases AT&T Capabilities to its Customers Providing an intuitive, highly efficient app on the latest mobile devices enables AT&T’s sales and partners to improve efficiency and showcase the leading capabilities to its customers. company’s aMind Solutions’ technology, coupled with aMind’s expert professional services, enabled the rapid development of highly efficient mobile friendly APIs against Siebel and other systems, enabling AT&T’s 32,000 sales and partner users to easily and effectively access data from Oracle Siebel CRM and other enterprise applications via their iPads. Based on the success of the application, AT&T is actively expanding the solution across the entire enterprise, leveraging the aMind solution as the mobile platform to achieve enterprise-wide “Mobile First” success. Learn more about AT&T’s mobile success at aMind Solutions >> Siebel Hub Snap Poll Results – IP2015 Innovations Siebel Hub Snap Poll Results And so we present the results of the first Siebel Hub Snap Poll of 2016. As could have been expected, a low number of voters due to the Holiday Season and the New Year. The results of the question “What is the most useful new Innovation in Innovation Pack 2015.5?” are displayed below. Watch out in the coming days for a new, exciting reader-suggested Snap Poll. Don’t forget – the Siebel Hub Community Snap Polls are all available as historical reference points. Find them in the Siebel Hub Snap Poll Archive. siebelhub.js – Manifesto and Documentation (Part 1) Now that we have discussed how to download and install the Siebel Hub JavaScript library for Siebel Open UI (siebelhub.js), we can start exploring the main functionality. First, let’s define what siebelhub.js is all about: The siebelhub.js Manifesto siebelhub.js is an educational, phenomenal, inspirational, comprehensive (epic) JavaScript library for Siebel Open UI. Its main purpose is to serve as an example how to create a custom Siebel Open UI library of utility functions. siebelhub.js provides wrapper functions that allow Siebel Open UI developers to focus on implementing functionality rather than solving common problems. For example, instead of spending valuable productive time to figure out how to securely access the label/header for any given Applet Control or List Column, developers can use the siebelhub.GetLabelElem function. Another goal of siebelhub.js is to provide examples how to use generic code in Siebel Open UI. This means that the code should work in any ‘context’, be it called from a Presentation Model, Physical Renderer, Plug-in Wrapper, Event Listener or any other Open UI code file. Finally, code in siebelhub.js supports the principle of language independency by providing a simplistic way of keeping translatable strings separate from the code. siebelhub.js is open source and is provided ‘as-is’ without any liability or support. Being a purely educational exercise, no parts of siebelhub.js are intended for use in production systems (however, we do hope it inspires you to write your own library). The Siebel community is hereby invited to contribute, comment and improve the library on GitHub. OK, so now we cleared that up, let’s have a look at some of the functions that siebelhub.js provides: The siebelhub.SetControlValue Method One of the best kept secrets of the Siebel Open UI API is how to set a control value programmatically. Anyone who has ever implemented a custom Plug-in Wrapper knows what this means. And you probably know that you have to call the PM ‘focus’ and ‘blur’ events. Personally, I always found the lack of a simple function to do that a bit disturbing (but there’s hope). The siebelhub.SetControlValue method wraps the repetitive calls to the PM’s OnControlEvent method and allows Siebel Open UI developers to use a single line of code to set a control value. Here’s the current code: siebelhub.SetControlValue (click to enlarge) To access the code example as text, please click here. Input Arguments of siebelhub.SetControlValue The siebelhub.SetControlValue arguments: function has three input context: an instance of a PM, PR, PW or Applet (see below for more details on the siebelhub.js context model) control: an Applet Control instance value: the new value of the control Output Arguments of siebelhub.SetControlValue Currently, siebelhub.SetControlValue returns nothing. Flow of siebelhub.SetControlValue The logical flow of the function is as follows: Since most code in siebelhub.js is context independent, we can call it from anywhere. The siebelhub.ValidateContext method (see below) equalizes the context and always returns the PM instance of the context object. So we call it first and verify we have a valid PM instance. Next, we verify whether the control argument is a real Control instance (we check for the GetInputName API method). Now we’ve equalized the context and verified the control, we can call the ‘magic’ PM control events. The code also features exception handling by means of try and catch blocks. As you notice, we use the siebelhub.ErrorHandler (see below) function to define how error messages are handled. Use Case for siebelhub.SetControlValue The following code example is a snippet from a custom Plug-in Wrapper for textarea controls that displays a pop-up dialog to allow users to edit long text. The original code calls the OnControlEvent API method twice to achieve the task of setting the control value. click: function() { //code has been omitted, this is part of a PW that displays a pop-up dialog for editing textareas //this is the click event handler of the dialog's OK button //call focus/blur events of PM that.OnControlEvent(consts.get("PHYEVENT_CONTROL_FOCUS"), that.control); that.OnControlEvent(consts.get("PHYEVENT_CONTROL_BLUR"), that.control, $(this).find("#dlg_txtarea").val()); //close dialog $(this).dialog("close"); }; The next snippet shows how to use the siebelhub.SetControlValue method in this situation: click: function() { //code has been omitted, this is part of a PW that displays a pop-up dialog for editing textareas //this is the click event handler of the dialog's OK button //next line shows how to use siebelhub.SetControlValue from within a PW: siebelhub.SetControlValue(that,that.control,$(this).find("#dlg _txtarea").val()); //close dialog $(this).dialog("close"); }; The siebelhub.ValidateContext Method As stated above – trying to reach the lofty goals of creating re-usable, generic code – most siebelhub.js functions can be invoked from any ‘context’. That context could be a (custom) Presentation Model, Physical Renderer, Plug-in Wrapper or even a postload (or preload) Event Listener. Good code should be agnostic to its surroundings and still return predictable results. The siebelhub.ValidateContext method supports these goals and can be considered more of an ‘internal’ method: siebelhub.js ValidateContext method (click to enlarge) To access the code example as text, please click here. Input Arguments of siebelhub.ValidateContext The siebelhub.ValidateContext function has one input argument: object: an instance of a PM, PR, PW or Applet (see below for more details on the siebelhub.js context model) Output Arguments of siebelhub.ValidateContext The siebelhub.ValidateContext function returns the following: pm: the Presentation Model instance of the object (if found), null by default. Flow of siebelhub.ValidateContext The code accomplishes the following: Initialize the pm variable with null. Check if the object has the GetPModel function, which means it is an Applet object instance. If so, assign the output of GetPModel to pm. Check if the object is a PM already by querying for the OnControlEvent function. If so, assign the object to pm. Check if the object has a GetPM function, which makes it a PR. If so, assign the output of GetPM to pm. If all the above checks fail, throw an error message. Use Case for siebelhub.ValidateContext As mentioned above, siebelhub.ValidateContext is used internally to equalize the input for other utility functions such as siebelhub.SetControlValue. The following code snippet demonstrates how to use the siebelhub.ValidateContext method: var activeView = SiebelApp.S_App.GetActiveView(); var activeApplet = activeView.GetActiveApplet(); var pm = siebelhub.ValidateContext(activeApplet); //do something with pm The siebelhub.ErrorHandler Method The siebelhub.ErrorHandler method allows for a central location in the library to define how (error) messages are handled. It is another internal method and can be easily expanded. In the current version (1.5 at the time of writing), the siebelhub.ErrorHandler method implements a simple jQuery dialog to display any message or exception passed to it. siebelhub.js ErrorHandler method To access the code example as text, please click here. Input Arguments of siebelhub.ErrorHandler The siebelhub.ErrorHandler function has one input argument: e: an Exception object or a String Output Arguments of siebelhub.ErrorHandler The siebelhub.ErrorHandler function returns nothing. Flow of siebelhub.ErrorHandler The code accomplishes the following: Generate a DIV element using the siebelhub.GenerateDOMElement method (see below) Set the HTML of the DIV element to the input text. Invoke the jQuery dialog method with options for an OK button, modal dialog, class and title attributes. Use Case for siebelhub.ErrorHandler The following code snippet – the catch block of the siebelhub.ValidateContext method – shows how to use the siebelhub.ErrorHandler method: catch(e){ siebelhub.ErrorHandler(e.toString() "siebelhub.js:ValidateContext"); } + The siebelhub.GenerateDOMElement Method In order to facilitate the effort of generating arbitrary DOM elements, the siebelhub.js library includes the GenerateDOMElement method. This simple method returns a DOM element according to the input type and attributes. siebelhub.js GenerateDOMElement method(click to enlarge) To access the code example as text, please click here. Input Arguments of siebelhub.GenerateDOMElement The siebelhub.GenerateDOMElement following input arguments: function has the type: a String defining the type of the DOM element, e.g. “DIV” attributes (optional): an object containing the attributes of the DOM element to generate Output Arguments of siebelhub.GenerateDOMElement The siebelhub.GenerateDOMElement generated DOM element. function returns the Flow of siebelhub.GenerateDOMElement The code accomplishes the following: Use the jQuery $ function to generate the DOM element with the desired type If attributes are defined, use the jQuery attr method to apply the attributes Return the DOM element Use Case for siebelhub.GenerateDOMElement The following code snippet – taken from the siebelhub.js SelfDiagnostics method (briefly mentioned in the previous post) – shows how to use the siebelhub.GenerateDOMElement method to create a TEXTAREA element with an id attribute of “selfdiag_output”. if ($("#selfdiag_output").length == 0 && display == "textarea"){ out = siebelhub.GenerateDOMElement("textarea",{id:"selfdiag_output"} ); $(".siebelhub_details").append(out); } That’s it for today. I hope you find this kind of documentation useful. As with any community project, please feel free to comment/roast/enhance the library using the comments or directly on GitHub. Please stay tuned for more documentation in future articles. Siebel Hub JavaScript Library Guide As a special treat, we have put together the complete documentation for siebelhub.js as a Kindle e-book, available for a small fee on Amazon. Siebel Hub JavaScript Library Guide have a nice day @lex OnTheMove – Siebel Mobility with a new Focus OnTheMove – Siebel Mobility with a new Focus Shortly before the Holiday season came upon some of you, the Siebel Hub had the opportunity to catch up with long-time Siebel supporter Duncan Scattergood. During that interview, the Siebel Hub caught sight of OnTheMove, a unique mobility solution for Siebel (and other applications). This article aims to give readers a better view of this product family, and some of the standout features. What is OnTheMove? OnTheMove for Siebel is a set of applications that aim to solve the “Siebel Mobile” and “Siebel Disconnected Mobile” conundrums. Unlike other applications in the same space, which attack the problem first from a technical perspective, OnTheMove concentrates on what makes Siebel successful – it is a tool to let users get their job done. And when it gets that part right, the user adoption challenge is already greatly lessened. So the process is the key. The Principles OnTheMove works by targeting the process rather than the technology of putting Siebel Applets and Views onto a mobile device – in fact the focus on process rather than the technology has lead to a much cleaner, customer-focused user interface. Obviously a demonstration environment can only give you some of that experience – as Duncan himself said, often the “light bulb” moment is when prospects see their own processes in this new flexible interface. Flexibility is also extended beyond Siebel data – although the platform was initially designed for Siebel, it can now also leverage other data sources like SAP in the same application. This flexibility is also very clear when considering how OnTheMove might be customized for each customer process – the user interface is defined through simple markup tags, and there is a full scripting API which, according to Duncan, will be very familiar to any Siebel eScript user. So the cost of defining new elements is reduced, making for a bigger bang for lesser bucks. The Advantages Not only does it provide a new User Experience for the tablet user, but on the Siebel side it also provides the capability to expose any version of Siebel from 7.7 onwards on this refreshingly simple and easy-to-use interface. Duncan mentioned to me that there are OnTheMove customers using the application on a Desktop precisely because it provides the kind of simple, easy to use, process-based UI that many users need. So when I connected my ageing tablet to the demonstration environments provided kindly by Duncan and his team, the first things I noticed were a brand new, and refreshingly business oriented approach. The application I first tried was what you might call “Field Service” and is squarely aimed at the technicians – the people who need to get stuff done, to coin a phrase. So the user interface is clean, friendly and easy to navigate. In fact, I liked it from the beginning. Too many solutions seem to focus on the technical stuff and not enough on the actual users of the application. Here is the initial screen:- OnTheMove – Field Service Field Service – Day in the Life So I decided to play the role of a Service Engineer who was going to use the application on their daily route. I clicked with my finger on the first job and pulled the white van out of the parking space. I saw that the OnTheMove application was easily readable from a tablet even with one hand on the steering wheel – I’m joking – don’t use your device while driving. But the user interface is quite frankly, one of the best I have seen – simple, easy to follow and just practical – it really does feel like it has been designed by the business, not by technical consultants who are, by definition, far away from the actual process : OnTheMove Activity – Field Service Clicking on the different Dashboard elements gives me the overview of the problem, the address to drive to with Google, the Asset itself, any other items including Opportunities that may be ongoing. Make no mistake, this is a well-thought-out Field Service interface, not a cut-down semi-functional module. I’ll show you some of the screens in a moment but for now, I will click Start Travel and get underway. OnTheMove – Field Service En Route I accelerated into the traffic with a wave of my fist and drove to the customer as fast as I could . This User Experience has been designed by someone who actually understands what the users do for a living! After a few minutes I pulled into the car park at the customer and reviewed what needed to be done. OnTheMove – On Site I liked this page because it is just the sort of thing that you would expect but you rarely see – a summary of what needs to be done at the Customer site. And scrolling down with my finger I can see that Inventory and Product information is also included, so that I can get a handle on the things I need to change, take out of the Trunk and so on. OnTheMove – Inventory Select I can of course use OnTheMove to make notes – the application is perfectly good at taking input from the End User as you would expect as well. The space for writing is quite big (no 16 character text boxes!) and the on-screen keyboard is fine for note taking. I realize this is not directly the result of the OnTheMove Application but I am trying to stress once again that considerable thought has gone into this – font size, color, layout and the general usability of the platform are adapted to my needs as a mobile End User. OnTheMove – Detail Repair In Part Two of this article In the second part of this article, which will be available in a couple of days, I will look into some of the technical work that has gone into making this solution and also I will provide readers with resources information about OnTheMove. to help them get more siebelhub.js – Download and Installation Last week we introduced the siebelhub.js library, an educational example of how to create a utility/helper library for Siebel Open UI. As announced, the library is open source and available on GitHub. Today we will start a series of articles that will go into detail on how to install and use siebelhub.js. Let’s start with the task of downloading and installing the library in a test environment (as indicated often, this is EDUCATIONAL and not intended nor supported to be used in production systems). Downloading siebelhub.js That’s probably the easiest part, all you have to do is go to GitHub and download the master .zip file. Either by using the Download button or the link below. siebelhub.js on GitHub Click here for the current master archive of siebelhub.js The .zip archive contains all files that make up the siebelhub.js library. At the time of writing there are three files (beside the license): siebelhub.js: The main JavaScript file (not minified, you want to read and learn…) siebelhub.css: Style rules to go with some of the functionality BS_Siebel_Hub_Service.sif: Siebel Tools archive file for the server side business service (needed for retrieving server resident data) Installing siebelhub.js As with any file that you want to load always, we have to treat siebelhub.js as follows: 1. Copy the siebelhub.js file to the /siebel/custom folder (where all your custom Open UI scripts reside) 2. R e g i s t e r t h e f i l e i n t h e M a n i f e s t u s i n g t h e Application/Common entry (if you have no custom entry, create one) Siebel Open UI Manifest (click to enlarge) Installing siebelhub.css The style sheet can be either registered separately (recommended) or you can copy and paste the content of the siebelhub.css file to any existing custom style sheet. To register following: the siebelhub.css file separately, do the 1. Copy the siebelhub.css file to the /files/custom folder (create the custom folder if it doesn’t exist) 2. R e g i s t e r t h e f i l e i n t h e M a n i f e s t u s i n g t h e Application/Theme entry (create an entry of this type if you don’t have a custom one) 3. In the Files list, also include the standard .css file of the Siebel Open UI theme you’re using (e.g. themeaurora.css) Importing the Server Business Service Some of the functionality provided in the siebelhub.js library invokes methods of a helper business service. To install this business service, follow these steps: 1. In Siebel Tools, import the BS_Siebel_Hub_Service.sif file. 2. Verify that a new business service named Siebel Hub Service has been imported. 3. G o t o t h e A p p l i c a t i o n U s e r P r o p e r t i e s o f y o u r application (e.g. Siebel Universal Agent) and register the Siebel Hub Service using the ClientBusinessServiceN user property (see screenshot below). 4. C o m p i l e t h e B u s i n e s s S e r v i c e a n d A p p l i c a t i o n definitions. Siebel Hub Service Verify OK, so now we can relaunch our Siebel Web Client and verify that siebelhub.js is properly loaded. To make things easier, I’ve added a ‘tramp stamp’ (via postload listner) that should appear in the bottom right corner of the Siebel application window. siebelhub.js tramp stamp The Siebel Hub logo also serves as a launch button for an Info Dialog: siebelhub.js Info Dialog When you click the Run Self Diagnostics button, a textbox appears with some information about your environment and the state of siebelhub.js. It also verifies the server side business service by running a quick query: siebelhub.js Self Diagnostics If you see all this on your screen, you have successfully installed the siebelhub.js library. Congratulations. Now you can start exploring. And of course, we will cover the details in upcoming posts. As they say: “Stay tuned!”. have a nice day @lex Siebel Open UI Template Generators by Duncan Ford (Update) Siebel Open UI Template Generators by Duncan Ford (Update) If you’re really earnest in your pursuit of mastering Siebel Open UI, you already know (and have been using) the splendid Siebel Open UI Template generators for Presentation Models, Physical Renderers and Plug-In Wrappers created by fellow book author and Oraclean Duncan Ford. Siebel Open UI PR/PM Generator by Duncan Ford Recently, Duncan has moved the source code to GitHub and invites the Siebel Open UI community to help improving the tool by submitting GitHub issues or (for the more daring) create a pull request. Here are the new URLs, so please update your bookmarks. PR/PM Generator http://duncanford.github.io/prpm-code-generator PW Generator http://duncanford.github.io/pw-code-generator have a nice day @lex : :