Wednesday, September 30, 2015

Excel turns 30 !

 

One of the most popular and widely used software utility, the backbone of countless projects ,graphs, and computations, turned 30. No, this is not about JAVA or any other programming language. I am talking of Microsoft's gift to the modern software engineer: MS Excel. According to Wikipedia, Microsoft released the first version of Excel for the Macintosh on September 30, 1985, and the first Windows version was 2.05 (to synchronize with the Macintosh version 2.2) in November 1987. The reason they released it first for Mac was due to the huge popularity of Lotus 123, the king of spreadsheets at that time. Gradually though, Excel has worked its way up and today is the default spreadsheet application of choice.

Its surprising that even the most die-hard fans of Excel do not know of this little bit of trivia, and Excel continues to be the downtrodden, faithful servant it has always been. Excel's history is really colorful, they started with copying off the features of Lotus 1-2-3, but then started adding features of their own, adding a mountain of functions to VBA, its automation script tool, and even changed the file format multiple times to incorporate new features. Today, it is even available on the cloud, and Google too has taken a few ideas for their Google sheets system. But what had set Excel apart is the Recalc feature, instead of re-computing the values of every formula cell, Excel smartly re-calculates only the values of cells required, nothing more. The original project team members reveal that this was done for optimization and speed, but only a handful of people knew the exact underlying workings.

My first tryst with Excel  was in circa 1993. We had to learn computer applications in school, and Lotus 1-2-3 was the software of choice, both in offices, as well as in school curriculums. I quickly figured out that Lotus 1-2-3 had this nifty macro system, which could be used to write quick and small functions to automate tasks. It was difficult to write the macro code, I remember one had to use the '=' key to access macro functions. But someone had installed MS Excel on the school machine assigned to me, and I found what I thought was the newer and improved version of Lotus. It had mouse support and had more colors for its graphs, and was faster. Way faster. It was fun to use, and easy to learn. Even in my wildest dreams, I could not foresee that this little piece of software would end up being the main part of my day-to-day work as a Software Engineer. I have built various tools during my work on Siebel and BIP using VBA macros, and maintain project information and even my loan and finance details on good ol Excel. Who would have thought that a simple idea of maintaining data in rows and columns would be the best way to start out any project.

history-of-excel-time-line

Tuesday, September 15, 2015

Fusion HCM: Integration woes

 

Looks like Oracle does not want customers/consultants to integrate other applications to its new fusion cloud based applications. There is close to NO documentation available on Oracle SupportWeb about setting up and invoking webservices, the only information available is on some Oracle blogs, and even they don't cover the full extent of APIs. Some Oracle champs have shared information on using REST services of some Oracle cloud apps, but it is clear that each of Oracle's cloud offerings have a different topology and architecture driving the integrations. I have been playing around with the Fusion HCM webservices for some time now, and I have to say that Oracle definitely needs to work on their documentation.

All of Oracle's cloud apps are following a standard approach: they will not (read cannot) consume a WSDL of another system, but they expose a WSDL/REST service of their own, which has to be invoked from outside to get the integrations working.

Consider the Fusion HCM Wsdl, the location of which has to be taken from Oracle repository. Using the get/find methods in the WSDL proved easy, but using the create/update methods proved to be a different challenge.

Problem 1: Every element in the WSDL is optional !. Check out the CreateWorker service, which is meant to be used to create the employee records in the HCM system. Usually the XSD/WSDL gives a good understanding of the structure of the system's data model, the required fields are marked so the end system has an idea of what fields to send to create a record. In  Oracle's Fusion HCM wsdl, every element is marked as optional, even the name elements. This means the developer/consultant has to have an in-depth knowledge of the HCM system to start using the wsdls. cleartext.blogspot.com

tmpE738

Really, Oracle ? cleartext.blogspot.com

Problem 2: No useful/meaningful validation me ssages. As soon as one starts triggering the methods of the HCM wsdl, the errors come back. Or, shall we say, NO errors come back. Looks like Oracle developers have not handled every exception properly.

tmpBF7D

WTF is  "JBO-29000: Unexpected exception caught: java.lang.NullPointerException, msg=null: null" supposed to mean ?

cleartext.blogspot.com

Problem 3: No documentation whatsoever. Oracle has two kind of cloud applications running now. One is the group of apps they have acquired, like Taleo, Rightnow CX etc…The other are cloud applications built by Oracle from ground up, from square one. For the former group of apps, the original developers have , thankfully, provided considerable documentation of the APIs. But for Oracle's own offerings, they have decided that less is better, and there is no detail documentation of the APIs. On these new cloud applications, the APIs are the only way to interact with the system, in traditional On-Premise systems, you could always have access to the application, filesystem and even database.

 

cleartext.blogspot.com

Saturday, September 5, 2015

HCM: WebService integrations

 

I am turning over a new leaf and starting with Oracle's Fusion HCM Cloud Service, looking into its integration system. Looks like Oracle does not want developers to use its webservices, because there seems to be no concise document available on how to set up a simple webservice integration. After sifting through numerous blogs and forums, I finally decided to explore the Oracle Enterprise Repository for information. And this seems to be the unwritten golden rule for Fusion applications: if you need information, go to OER.

After logging into OER as guest, run a quick query in the left pane to get started. If you want to know about Fusion HCMs webservices, select "ADF Service" under Type, and "Human Capital Management" under Product Family. You can also choose an appropriate Version, though everyone will be on the latest version anyway.

cleartext.blogspot.com

tmpFC7B

Running the query gives a  list of Fusion ADF services which can be used for external integrations. For main Employee related webservices, choose the Worker services at the end of the list.

cleartext.blogspot.com

tmp44A3

To find the WSDL address of this service, choose the detail tab and go to the end of the page.

tmpC152

tmpD2

And there, right at the end of the page, is the logical address of the service. You will have to replace the <hcm server> part with the actual hostname of your cloud service.

Simply entering this URL in a browser gives us the WSDL:

cleartext.blogspot.com

tmp688B

And providing this URL in SOAPUI downloads the WSDL and schema. The WSDL is very big, SOAP UI takes a couple of minutes to completely consume the WSDL and generate the sample messages.

cleartext.blogspot.com

image

 

And now for the really tricky part. The search request has to be built in the SOAP message so that the system can respond with data. After trying numerous combinations, I just tried a simple empty SOAP request. And…it returned successfully !

 

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:typ="http://xmlns.oracle.com/apps/hcm/employment/core/workerServiceV2/types/" xmlns:typ1="http://xmlns.oracle.com/adf/svc/types/">
   <soapenv:Header/>
   <soapenv:Body>
      <typ:findWorker>
         <typ:findControl>
       </typ:findControl>
      </typ:findWorker>
   </soapenv:Body>
</soapenv:Envelope>

cleartext.blogspot.com

 

tmpDE5

cleartext.blogspot.com

 

 

Important: The userid and password has to be provided either in the soapenv:Header section, or in the userid/password fields of SOAP UI. If you enter a wrong password, the fusion system does not respond with an error message or exception. Instead, it simply sends back the request which it received. Completely. Without any indication of any error. So if you start getting back your request payload in the response, check the credentials.

Wednesday, September 2, 2015

Joy of Programming

 

The past four weeks have been very rewarding for me. After spending eight years as a Siebel consultant, and the last one year on various Oracle cloud technologies (Taleo, HCM) , I somehow ended up with a pure coding project. No packaged-application-configuration nonsense. No composer-nonsense. No fast formulas, and no flex fields. Just pure windows programming, in dot net C sharp (C#), and REST apis. I was tasked with exploring some new cloud apis, and how they can/should be leveraged via integration. After almost nine years away from pure programming language projects, I was sceptical if I could pull it off. But the last many weeks I have been tapping away in Visual studio's IDE, googling the interwebs for code snippets, and going back to the watch window in debug mode.

Boy I missed it.

I am going back to pure programming after more than 10 years now. And a lot of things have changed. I only recently learned that Microsoft have become generous with their tool offerings, there is now an express edition of Visual studio or the community edition. It is more than enough for you general coding needs, and it is completely free. All you need is an outlook email address to register. And the Visual studio system too has had multiple facelifts. You can now develop mobile apps for Windows on it. The IDE does on the fly syntax checks and even pretty prints the code as you type. The language itself has grown, now you can code a windows application with very few lines , its leaner than ever ! I remember when used the Win32 api bible to code things…and then was relieved to see MFC reducing the final code. And today even VB.NET has new functions borrowed from C languages…like local exception control..try catch. Code written in VB.NET is very easily convertible to C#.NET , this was never the case. And even support for integration standards like REST has never been better. Developers today can achieve much more writing very few lines of code, and therefore focus on the application design, instead of worrying about type casting variables and handling database cursors.

Even on the open source world, new languages are coming up designed for simpler and leaner code, which can achieve more functionality. And the community support is awesome, every problem I faced was solved looking at community code.

Now I have to check whether Oracle was able to keep up with the others, I am going to try Oracle PaaS services, their Java Cloud service and Integration Cloud service. Personally I hate the creepy world of Java, the multi-line error codes still scare me. But there is no denying that there is a special Joy in Programming, when you are able to create things without constraints.

Thursday, August 13, 2015

Oracle Offers New PULA Database License

 

Following mounting criticism over the recent years for its software licensing and audit practices, Oracleappears to making a change with PULA.

The PULA was reported originally by The Register and confirmed by Craig Guarante, Co-founder and CEO of Palisade Compliance who said, “It’s not a rumour—Oracle is putting that in front of customers.”

The change involves a new license that will offer flat-rate pricing for unlimited use for Oracle’s namesake product in perpetuity.

Oracle had previously offered what it called an Unlimited License Agreement which ran for a set period of time before customers had to certify their usage of Oracle and pay for anything additional they had used during the license period.

According to the Register, the Perpetual User License Agreement (PULA) removes the time requirement and is priced on a yearly fee based on estimate usage. This change would minimize the risks of additional payments down the line and software audits from Oracle.

The PULA Licenses are still being rolled out and Oracle is likely still in the process of setting the exact requirements so there could be radical differences between PULAs held by different companies.

Speculation over why the change is being implemented focuses on two areas, Oracle’s latest financial performances and the rise of the competitors. With the PULAs requiring customers commit to Oracle over competing outfits and following the SaaS model which has produced better revenue, Oracle will hope to retain its dominant position in the marketplace.

However Guarante has questioned the likelihood of terms that restricted customers to Oracle forever citing restraint on trade concerns.

The real question is for Oracle’s customers, according to Duncan Jones of Forrester Research is if they’ll risk a ’till death do us part deal’ with Oracle.

 

 

 

Oracle Adds New Android Versions To Copyright Battle With Google

Oracle Corp. added claims covering newer versions of the Android operating system to its copyright lawsuit first filed five years ago against Google Inc.

Oracle’s supplemental complaint filed in San Francisco federal court extends infringement claims to cover newer Android versions. Oracle contends Google’s Android copies source code from its Java platform.

The case is Oracle America Inc. v. Google Inc., 10-cv-03561, U.S. District Court for the Northern District of California (San Francisco).

Wednesday, August 5, 2015

TCC: Complete list of Filters and Functions

 

The Taleo Connect Client has a lot of filters to form queries, and a bigger bunch of functions which can be used in the export definition. Knowing the complete list of supported filters and functions will help when one has to write complex projections. Some of the functions are documented in the official TCC developers guide.

Here is the complete list of all filter criterion which TCC understands:

cleartext.blogspot.com

and
between
contains
containsIgnoreCase
customFilter
customLogicalOperator
customOperator
equal
equalAllowNull
excludedFrom
greaterThan
greaterThanOrEqual
hierarchicalContains
hierarchicalContainsOrWithin
hierarchicalWithin
includedIn
isFalse
isNotNull
isNull
isTrue
lessThan
lessThanOrEqual
like
likeIgnoreCase
matches
matchesIgnoreCase
not
notEqual
or
predefinedFilter
returnsResults
textuallyMatches
lrd

cleartext.blogspot.com

And here is the complete list of TCC Functions cleartext.blogspot.com

 

add
addDays
addMonths
addWeeks
addYears
allCustomFields
amount
anyQuery
average
boolean
castAsDate
castAsNumber
castAsTimestamp
classType
column
concatenate
count
currency
customFunction
customValue
date
decode
divide
double
field
firstValue
float
greatest
integer
key
lastValue
least
list
lobCompare
lobIndexOf
lobLength
lobSubstring
locale
long
maximum
minimum
multilingualColumn
multiply
nextValue
overRows
overValues
parameter
power
predefinedValue
previousValue
projection
replace
replaceNull
replaceNullOrNot
round
string
substring
subtract
subtractDate
sum
switchByCriterion
switchByValue
toChar
textAbout
textAnd
textCustom
textInPath
textNot
textOr
textWeight
textWithin
toEndOfTheDay
toLowerCase
toStartOfTheDay
toUpperCase
trim
truncate
undefined

 

Enjoy. cleartext.blogspot.com

Friday, July 3, 2015

Inserting images in BIP templates for HTML output

 

Just documenting a BIP trick to insert images when the output will be in HTML. Time to time, report designers have to embed static images like logos or emblems on reports which have to be rendered along with the final output. Simply inserting the image into the RTF template will work fine if the output is in RTF or PDF format, but the images will be blank if the output is in HTML. This is , of course, because HTML does not embed the image, it just adds the the url reference to the image. Here is how to place an image in the RTF template so that it renders properly no matter what the output format.

cleartext.blogspot.com

First of all, you will have to place the image to be rendered in a public server somewhere, this can be anywhere on the internet which can be accessed via a url. Do not place this image on any server behind corporate firewalls,or it won't be rendered.

cleartext.blogspot.com

 

1: First, enable 'Developer Mode' in your Word. For this, go to File->Options->Cutomize Ribbon, and check the box next to 'Developer' in 'Main Tabs':

tmpB0AE

2: Now under the new 'Developer' tab, click on 'Design Mode'

clip_image001

3: Now, from under "Legacy forms", choose the image holder: cleartext.blogspot.com

clip_image001[5]

4: This will put a nice grey square in your template. Right click that,  choose 'Format Control' , and go to 'Alt Text'

tmp46C

5: Under the alternative text, insert the url to the final image to be rendered.  cleartext.blogspot.com

tmp9EE7

6: Thats it ! Now when you generate the output of this template, the image will be rendered properly in any output format, including HTML.

7: Bonus ! You can even add a unique URL to the image, so that when it it clicked, the user it re-directed to another website. For this, right click the image (or grey square) and choose hyperlink. Insert the url in the hyperlink box. The re-direction also works regardless of output type.

cleartext.blogspot.com

 

Cheers !