Monday, February 06, 2012

Creating EBS data from APEX using APIs (2)

Previously we used the HR_PERSON_API to update the email address of a person.
In this post we will use the HR_EMPLOYEE_API to add a person.

The first thing to do is to look at the definition of the create employee call in the Oracle Integration Repository. (Login in EBS, in the navigator go to Integrated SOA Gateway, next go to Human Resource Suites > Human Resources > Employee and select Employee > Create Employee)


The second thing I tend to do is test the API in SQL Workshop in a PL/SQL anonymous block from a workspace linked to the APPS schema.


When I ran that block of code I got a ORA-01403: no data found error. I verified my call multiple times but I couldn't see what I was doing wrong. Finally I send the statement to Thierry Vergult from Popay as I was out of ideas. He told me to try a trunc around sysdate for the parameter p_hire_date.
I verified the API again and p_hire_date should be a date, sysdate in my opinion is the most known date, so I was a bit sceptic at first... but I tried it nevertheless... and it worked!
This blew me out of the water! It showed me again that the API is full of surprises and whenever you hit an issue, ask a more experienced EBS person for ideas :-)

So once that was working I included the create procedure in my apex_api_pkg.


procedure create_person (
    p_hire_date                 in date,
    p_business_group_id         in number,
    p_last_name                 in varchar2,
    p_first_name                in varchar2,
    p_date_of_birth             in date,
    p_sex                       in varchar2,
    p_email_address             in varchar2,
    p_employee_number           in out varchar2,
    p_person_id                 out number,
    p_assignment_id             out number,
    p_per_object_version_number out number,
    p_asg_object_version_number out number,
    p_per_effective_start_date  out date,
    p_per_effective_end_date    out date,
    p_full_name                 out varchar2,
    p_per_comment_id            out number,
    p_assignment_sequence       out number,
    p_assignment_number         out varchar2,
    p_name_combination_warning  out boolean,
    p_assign_payroll_warning    out boolean,
    p_orig_hire_warning         out boolean
)
is
  l_employee_number           varchar2(4000);
  l_person_id                 number;
  l_assignment_id             number;
  l_per_object_version_number number;
  l_asg_object_version_number number;
  l_per_effective_start_date  date;
  l_per_effective_end_date    date;
  l_full_name                 varchar2(4000);
  l_per_comment_id            number;
  l_assignment_sequence       number;
  l_assignment_number         varchar2(4000);
  l_name_combination_warning  boolean;
  l_assign_payroll_warning    boolean;
  l_orig_hire_warning         boolean;
begin
  hr_employee_api.create_employee ( 
    p_hire_date                 => p_hire_date, 
    p_business_group_id         => p_business_group_id,     
    p_last_name                 => p_last_name,     
    p_sex                       => p_sex,
    p_first_name                => p_first_name,     
    p_date_of_birth             => p_date_of_birth,     
    p_email_address             => p_email_address,     
    p_employee_number           => l_employee_number,     
    p_person_id                 => l_person_id,     
    p_assignment_id             => l_assignment_id,     
    p_per_object_version_number => l_per_object_version_number, 
    p_asg_object_version_number => l_asg_object_version_number, 
    p_per_effective_start_date  => l_per_effective_start_date, 
    p_per_effective_end_date    => l_per_effective_end_date, 
    p_full_name                 => l_full_name, 
    p_per_comment_id            => l_per_comment_id, 
    p_assignment_sequence       => l_assignment_sequence, 
    p_assignment_number         => l_assignment_number, 
    p_name_combination_warning  => l_name_combination_warning, 
    p_assign_payroll_warning    => l_assign_payroll_warning, 
    p_orig_hire_warning         => l_orig_hire_warning 
  );
end create_person;


The finally step was to add a form on my page with the items and a process that calls the API.


The page process Create User looks like this:


Running the page shows you the create form.

Note that I didn't make all fields visible, just the fields to get the proof of concept working.

In this post we called the API to create a person from within an APEX page. The catch here was to trunk the p_hire_date parameter.

Previous related posts:

Sunday, February 05, 2012

Updating EBS data from APEX using APIs (1)

I didn't expect to many technical issues using E-Business Suite (EBS) APIs in APEX as it's basically a call to PL/SQL packages.

Next to that the EBS APIs seems to be well documented. I first didn't realise, but for a long time I was using the Oracle Integration Repository for EBS R11 (whereas I'm using R12).



For EBS R12 the Oracle Integration Repository ships as part of the E-Business Suite. To access it, in the Navigator menu, select the Integrated SOA Gateway responsibility, then click on the Integration Repository link.


Using the Oracle Integration Repository I would have found it more useful if I could define the number of results (maybe you can, but I didn't find that setting). At the moment I get only 10 results at a time, which is too low for me.

I also found it not that easy to find the right API to use. I guess it comes by experience. Next to that, the parameters are not always the same, so the API could be more consistent.

For example I want to create and edit a person. In the navigator I went to Human Resources Suite > Human Resource. That was logic for me. Next I looked into the list and saw Employee, so that was a logic choice for me. In there I found the HR_EMPLOYEE_API. That API allows to create an employee. So far so good, but where is the edit? I couldn't really find it, until I asked a friend and he told me to look for person. So when I went to HR Person(1) in the navigator I saw the HR_PERSON_API and in there you find the update and delete of a person.


When you look at the parameters; in HR_EMPLOYEE_API.CREATE_EMPLOYEE you see a parameter p_per_comments, in HR_PERSON_API.UPDATE_PERSON you see a parameter p_comments. It would have been easier if the parameters were consistent.

So once I got familiar with APIs, I started with the integration in my APEX app. Here are the steps to drill-down into a person from the people report (see previous post) and edit his or her email address.

Just as with the views I find it a good practice to not grant execute on the entire libraries of EBS to your own schema. I prefer to create my own packages in the APPS schema e.g. apex_api_pkg and call the correct API calls from there. The advantage is that you can add logging to your own package or do some other extra logic in there. For example APEX passes typically back values as strings, but some API calls need to be passed (next to varchar2) as a date, a number or a boolean. So you could choose to have all input strings in varchar2 in the apex_api_pkg and do the conversion inside the package to the correct one. In the below code I didn't do that, instead I went for an almost 1-on-1 mapping.


create or replace package apex_api_pkg
as


procedure update_person_email (
    p_effective_date            in date,
    p_datetrack_update_mode     in varchar2,
    p_person_id                 in number,
    p_email_address             in varchar2,
    p_object_version_number     in out number,
    p_employee_number           out varchar2,
    p_effective_start_date      out date,
    p_effective_end_date        out date,
    p_full_name                 out varchar2,
    p_comment_id                out number,
    p_name_combination_warning  out boolean,
    p_assign_payroll_warning    out boolean,
    p_orig_hire_warning         out boolean
);


end apex_api_pkg;
/


create or replace package body apex_api_pkg
as


procedure update_person_email (
    p_effective_date            in date,
    p_datetrack_update_mode     in varchar2,
    p_person_id                 in number,
    p_email_address             in varchar2,
    p_object_version_number     in out number,
    p_employee_number           out varchar2,
    p_effective_start_date      out date,
    p_effective_end_date        out date,
    p_full_name                 out varchar2,
    p_comment_id                out number,
    p_name_combination_warning  out boolean,
    p_assign_payroll_warning    out boolean,
    p_orig_hire_warning         out boolean
)
is
  l_object_version_number     number;
  l_employee_number           varchar2(4000);
  l_effective_start_date      date;
  l_effective_end_date        date;
  l_full_name                 varchar2(4000);
  l_comment_id                number;
  l_name_combination_warning  boolean;
  l_assign_payroll_warning    boolean;
  l_orig_hire_warning         boolean;  
begin
  l_object_version_number := p_object_version_number;


  hr_person_api.update_person (
    p_effective_date            => p_effective_date,
    p_datetrack_update_mode     => p_datetrack_update_mode,
    p_person_id                 => p_person_id,
    p_email_address             => p_email_address,
    p_object_version_number     => l_object_version_number,
    p_employee_number           => l_employee_number,
    p_effective_start_date      => l_effective_start_date,
    p_effective_end_date        => l_effective_end_date,
    p_full_name                 => l_full_name,
    p_comment_id                => l_comment_id,
    p_name_combination_warning  => l_name_combination_warning,
    p_assign_payroll_warning    => l_assign_payroll_warning,
    p_orig_hire_warning         => l_orig_hire_warning
  );
end update_person_email;


end apex_api_pkg;
/


The next thing is to grant execute privileges on this package to your own user which is linked to your APEX workspace:


grant execute on apex_api_pkg to apex_ebs;


In the APEX application we create a new Form based on this procedure. I found that the APEX wizard didn't work in my case (but more on that in another post). I created a new Blank Page, add a region to it and a couple of items.


From my report I created an edit link to this new page and I pass the value of PERSON_ID to this page.
As I want to see the original data in my form (note that I didn't include all fields available in the API) I added a Fetch data process of type PL/SQL anonymous block with this code:


select full_name, email_address, effective_start_date, employee_number, object_version_number
  into :P2_FULL_NAME, :P2_EMAIL_ADDRESS, :P2_EFFECTIVE_DATE, :P2_EMPLOYEE_NUMBER, :P2_OBJECT_VERSION_NUMBER
  from apex_per_people_vw
 where person_id = :P2_PERSON_ID;

When you hit the Apply Changes button I want the email address to update, that is why we have the Update email Process in Page Processing. The PL/SQL code is as follows:


declare
  l_object_version_number     number;
  l_employee_number           varchar2(4000);
  l_effective_start_date      date;
  l_effective_end_date        date;
  l_full_name                 varchar2(4000);
  l_comment_id                number;
  l_name_combination_warning  boolean;
  l_assign_payroll_warning    boolean;
  l_orig_hire_warning         boolean;  
begin
  l_object_version_number := to_number(:P2_OBJECT_VERSION_NUMBER);


  apps.apex_api_pkg.update_person_email (
    p_effective_date            => to_date(:P2_EFFECTIVE_DATE, 'DD-MON-YYYY'),
    p_datetrack_update_mode     => :P2_UPDATE_MODE,
    p_person_id                 => to_number(:P2_PERSON_ID),
    p_email_address             => :P2_EMAIL_ADDRESS,
    p_object_version_number     => l_object_version_number,
    p_employee_number           => l_employee_number,
    p_effective_start_date      => l_effective_start_date,
    p_effective_end_date        => l_effective_end_date,
    p_full_name                 => l_full_name,
    p_comment_id                => l_comment_id,
    p_name_combination_warning  => l_name_combination_warning,
    p_assign_payroll_warning    => l_assign_payroll_warning,
    p_orig_hire_warning         => l_orig_hire_warning
  );
end;

I just do the necessary to update the email, I don't do that much yet with the output parameters, but you could transfer that back to the page if you wanted to. Also note that the package is in the APPS schema, so don't forget to add the owner in front of it. You could create a synonym in your own schema if you preferred. For the view I find it important to have those in my own schema too, for packages only if I wanted to add some extra logic to it.

Running the page shows you the below form.

In EBS there are different ways (UPDATE, CORRECTION, UPDATE_OVERRIDE, UPDATE_CHANGE_INSERT), to update the record, as I wanted to test them out, I added the Update Mode select list to the form. An UPDATE you can only do once per day, CORRECTION is what I used to update the same record multiple times.

Note that we still didn't login into our APEX application as an EBS user, so EBS doesn't know who I'm. As EBS is keeping an audit of the records, I (the logged in APEX user) won't be seen in those audit records, instead it will be a general one (EBS sysadmin I suppose). In the next posts we will authenticate with EBS integrate tighter.




In this post the purpose was to make an EBS API call to update an email address of a person. While playing with the EBS API I came across some challenges and I had to ask for advice to more experienced EBS people. Which will also be shown in the next post; where I will create a person with the API...

Previous related posts:

Friday, February 03, 2012

Querying EBS data from APEX using Views

Integrating APEX and EBS by using views is one of the easiest solutions (at first sight!).

This is the first scenario, where I have an APEX application and I want to integrate with data sitting in EBS.

Pre-requisites:
  • APEX is installed in the same database as EBS (see previous post). 
  • My APEX application (actually Workspace) is linked to my own (non-EBS) Oracle schema.
If you want to view data coming from EBS in your APEX application, follow these steps:
  1. Identify where the data is in EBS

    If you are not familiar with the data model of EBS, it can be hard to find the right information. A good starting point would be the APPS schema, because that has access to the complete Oracle E-Business Suite data model. You can compare it with the SYSTEM schema, which has access to the entire database.

    This pictures shows an overview of the APPS schema and base product schemas.



    You can read more about the APPS schema in the EBS documentation.

    In my example I wanted to find the people that are in my organisation (HR). I started to look for views that would give me that information. My first query was like this:

    select object_name
      from user_objects
     where object_name like '%PEOPLE%'
       and object_type = 'VIEW'
    order by 1 


    That query returned 82 rows in my environment. In the results I saw e.g. ADS_PEOPLE_V, HRBG_PEOPLE, PER_ALL_PEOPLE, PER_PEOPLE, PER_PEOPLE_F etc.

    I started to look at the definitions of those, but if you are not familiar with EBS it's hard to know which one is the one you need. So my recommendation would definitely be; when you are not that familiar with EBS, talk with somebody who knows more about it. For me that is the case, I only started to look into EBS and actually do something with it, a few weeks ago.

    When I talked to somebody more experienced in EBS, he told me I probably wanted to look at PER_ALL_PEOPLE_F. Hmm, that wasn't in the result set of the above query. After investigating a bit more PER_ALL_PEOPLE_F is a synonym for HR.PER_ALL_PEOPLE_F.

    I wanted to understand the naming convention in EBS a bit better e.g. for the PER%PEOPLE% objects.



    Below I created a table how I interpret the EBS objects:

    View / Synonym (^) count(*) count(distinct person_id) Interpretation
    per_all_people_f (^) 32295 18518 Synonym to real HR table
    per_all_people 0 0 Needs EBS session (record in FND_SESSIONS) so it knows what you can see
    per_all_people_d 32295 18518 All records but shows translated text if user settings are applied
    per_people 0 0 Needs EBS session, shows effective records based on user's date
    per_people_f 32295 18518 EBS security implemented, you only see records you are allowed to see
    per_people_v 0 0 Needs EBS Session, includes a lot of display text and is language dependend
    per_people_x 18518 18518 EBS security implemented (same as per_people_f), but limits to only the effective records
    (WHERE TRUNC(SYSDATE) BETWEEN EFFECTIVE_START_DATE AND EFFECTIVE_END_DATE)

    So to me PER_PEOPLE_X looks like a good candidate to use in my APEX application. If I'm not logged into the app as an E-Business user I still see all records that are effective at the time I run the query.
  2. Create a view on top of the EBS views and use some naming conventions so it's easy to recognise which objects you created and are not native EBS ones.

    create view apex_per_people_vw as select * from per_people_x
  3. Grant access on that view to the schema that is linked to your APEX workspace and application

    grant select on apex_per_people_vw to apex_ebs
  4. Create a view in your own schema that selects everything from the view in the apps schema.
    We do that so that the views are a one-on-one mapping between schema's, but they show up in the APEX wizards.

    create view apex_per_people_vw as select * from apps.apex_per_people_vw
  5. Create an Interactive Report on top of the view

This first examples shows how you can view data from EBS in your own APEX application. We can now create a calendar, charts etc. in APEX based on the data coming from EBS. In the next post I will show how you can edit this data.

Thursday, February 02, 2012

E-Business Suite and APEX integration (overview)

For me there are two main use cases to integrate Oracle E-Business Suite (EBS) with Oracle Application Express (APEX):

  1. In my APEX application I want to include/integrate data that exist in EBS
    e.g. I want to include my employees that are in EBS HR

  2. The EBS application needs to be customised and I use APEX to do that
    e.g. I want to show a calendar with the birthdays of my employees
    or I want a chart about the different age categories in my company
    or I want to bulk update some information and there is no screen to do that

In both cases you want things to go seamlessly, you shouldn't be aware that you go from one technology to another. APEX and EBS data are in the Oracle database, so accessing data is not a big issue. Updating data in EBS you need to be careful with, as directly updating data through tables is not allowed (supported).

When I was reviewing ways to retrieve data from EBS and create/update/delete data in EBS from APEX I found a couple of methods that are interesting to explore further:

Retrieve data from EBSUpdate data in EBS
1. ViewsX
2. APIsXX
3. OITs (Open Interface Tables)
X
4. Webservices (incl. BPEL/SOA)XX

There are other ways to integrate or interface with EBS e.g. through EDI (Electronic Data Interchange) and EAI (Enterprise Application Integration), but from an APEX perspective the above four seemed to me the most interesting ones to explore further. In my next posts I will dig into integrating APEX and EBS with the above techniques.

References to interesting readings:

Previous related posts:

Wednesday, January 25, 2012

E-Business Suite and APEX installation

Before doing the integration of Oracle Application Express (APEX) with E-Business Suite (EBs) you need to have both environments installed. The Oracle white paper talks about the installation of APEX, but not about installing E-Business Suite.


The white paper states; the prerequisites for the solution given are:

  • Oracle E-Business Suite 12.1.3 or above
  • Oracle E-Business Suite Patch 12316083
  • Oracle Database 10.2.0.3 or above
  • Oracle Application Express 3.2 or above

The first thing I needed was an E-Busisness Suite environment. Oracle provides some VM Templates for E-Business Suite 12.1.3. I wanted a complete demo system, like for example the HR schema in the Oracle database or the Sample Application in APEX. The VM Template for E-Business Suite includes the Vision demo.

I never installed EBs before, so I did some research how to do that. Finally I didn't proceed with installing E-Business Suite on our servers, as MCX was happy to provide us with a complete Oracle E-Business Suite 12.1.3 Vision installation on their servers. The version of the underlying Oracle database is 11.2.0.2.0. I also asked them to apply patch 12316083.

APEX needs to be installed on the same Oracle database as the Oracle E- Business suite database server.
We went with installing the latest version of APEX at the moment: APEX 4.1.

Installing APEX is not that hard, basically running some scripts. The only bit you have to be careful with is the choice of web listener. APEX supports three web listeners: mod_plsql, EPG and the APEX Listener.
The mod_plsql gateway is disabled by default by EBs R12, so you shouldn't go with that. The EPG is not recommended either as it will add additional load on the database server, so the best choice would be the APEX Listener. The APEX Listener is the recommended choice in any circumstance anyway, regardless of EBs. (on a related note; I'm giving a presentation about my experiences moving to the APEX Listener at OGh and ODTUG.)

So after installing APEX and using the APEX Listener on an EBs configuration, the architecture looks like this:


So now all the prerequisites are met and we can concentrate on the real integration part in the next post.

Previous related posts:


Wednesday, January 18, 2012

APEX and E-Business Suite integration

For a couple of years now companies like for example Popay integrate APEX with E-Business Suite.

The learning curve of APEX is not that high, so people with a (technical) E-Business Suite background should be up and running in no time.

In April 2011, Oracle released a whitepaper how to Extending Oracle E-Business Suite Release 12 using Oracle Application Express. Before, although it worked, you were a bit on your own incase you had issues, with the whitepaper things changed, so now you can call Oracle support as well.

In the next days I will share my experiences trying to get up-to-speed with integrating APEX with Oracle E-Business Suite. My background with Oracle E-Business Suite is limited, but I know a lot about APEX and that whitepaper should get me a big step further in integrating with E-Business Suite.


On the 15th of February, the APEX and E-Business Suite SIGs of OBUG (Oracle Benelux User Group) hold a half day (FREE) seminar about this integration too. So if you want to see this integration live or you want to hear from companies who are successful in it, come and join us. You find the agenda below:


Monday, December 19, 2011

SQL Developer Application Express Reports

There are some useful reports in SQL Developer that give you an insight in your APEX applications.
Click on the Reports tab in SQL Developer and open the Application Express folder. There are many reports, for example the Application Statistics you see below.


In the first grid you see all the applications of your workspace (linked to the schema you are logged in as). If you click on an application, the detail tabs load.

Below you see another report - Workspace > Activity Summary



In APEX you have a lot of statistics about your application too (see below screenshot of the Monitor Activity screen). 


If you want to navigate across applications, the SQL Developer reports are really useful as it's very fast to navigate. Both APEX as SQL Developer have their strengths. If you can't find the information you need, you can also write a query yourselves based on the APEX dictionary.

Tuesday, November 29, 2011

APEX-Challenge.com statistics November


Below you find some statistics of the APEX-Challenge for November. If you want to make fun and play the APEX Challenge too, you can register (or login) here.

Summary for Oracle Application Express Weekly APEX Quiz

Played between 5 November 2011 and 12 November 2011
Total # of players: 149
Total # of answers submitted: 149
100% correct submissions: 8
Average % correct: 60

5 November 2011: Leverage the APEX data dictionary views to answer questions about your application.
166 Players ♦ Avg. Correct: 60% ♦ Avg. Time: 202 seconds ♦ Rating: 4 stars


Summary for Oracle Application Express Weekly APEX Quiz

Played between 12 November 2011 and 19 November 2011
Total # of players: 142
Total # of answers submitted: 142
100% correct submissions: 15
Average % correct: 56

12 November 2011: The question shows how to correctly pass values using page items within branches and some of the limitations.
156 Players ♦ Avg. Correct: 57% ♦ Avg. Time: 129 seconds ♦ Rating: 4 stars


Summary for Oracle Application Express Weekly APEX Quiz

Played between 19 November 2011 and 26 November 2011
Total # of players: 141
Total # of answers submitted: 141
100% correct submissions: 33
Average % correct: 76

19 November 2011: To be aware of the functions and procedures contained in the APEX_UTIL package and other APEX Packages
145 Players ♦ Avg. Correct: 76% ♦ Avg. Time: 131 seconds ♦ Rating: 4 stars


If you want to see more questions, you find the library of previous questions and answers here.

Monday, October 17, 2011

APEX-Challenge.com

A few months ago we (APEX Evangelists) launched the APEX Challenge, a weekly quiz where you get a question about Oracle Application Express. Next to the fun of answering the questions and see your rank, you will hopefully learn something.

To make it a bit easier for the APEX community, to find the site, we looked at a specific url for the APEX Challenge.

Before you always had to go to the PL/SQL Challenge and take the APEX quiz from there, which you can still do, but now we enabled http://www.apex-challenge.com too.

We also have the apexquiz.com domain, so my question now is: which domain do you like most?
  • stay at plsqlchallenge.com
  • go to apex-challenge.com
  • go to apexquiz.com
Tell us what you like... In a few weeks we will redirect the domain permanently.
If you have suggestions to make the APEX challenge/quiz better, please share with us too.

Thanks so much.

OBUG Benelux Connect 2012

On April 24, 2012 the Oracle Benelux User Group (OBUG) is organizing for the 5th time in succession, and in close collaboration with Oracle, OBUG Benelux Connect.

Possibly you attended in the past and you wish to present your customer case at the upcoming OBUG Benelux Connect 2012 conference. OBUG offers you the ultimate possibility to share your personal experience with other Oracle customers within the Benelux.
OBUG Benelux 2012 will be held at the MECC in Maastricht, the Netherlands. This is an excellent venue that provides its guests with the very latest amenities in a strikingly professional ambiance. The MECC is located in Maastricht, 10 minutes from Maastricht Central Station with train connections to Amsterdam and Brussels and a 3 minute walk from the train station Maastricht-Randwyck. Maastricht is a very popular destination for congress visitors, because it is such an intimate place and the city has much to offer.

“Extend your Horizon”

Extend your Horizon is the theme for OBUG Benelux Connect 2012.
The strength of OBUG Benelux Connect is the customer cases presented by our members and other Oracle customers: Learn from peers to maximize the value of your business-critical applications and technology. In over 40 sessions, speakers will share their experiences and business solutions with delegates in different streams, which gives them the possibility to investigate other products, extending their horizon. There are streams for Applications (Oracle eBS, Peoplesoft, Siebel, JD Edwards, Primavera), Technology (DBMS, JDeveloper/ADF, APEX, ...), Middleware (BPEL, SOA, EAS, ...) and Intelligence (Hyperion, OBI, GRC, ...).
The crowning touch is that the Oracle user experience team will fly in from the USA again to conduct several onsite User Experience Sessions, where delegates have the ability to contribute to and influence product direction and design for Oracle’s next-generation products.

CALL FOR PRESENTATIONS

OBUG is looking for end-users, project leaders, implementers, IT and functional managers, CIO's to share their experience with Oracle products in a 45-minute presentation – (slides in English, presentations preferably in English).
If you can make a valuable contribution to the success of our conference, please complete the online submission form on the OBUG website before December 9th, 2011.
If you have any questions, please contact Chris Coolen, Executive Director Oracle Benelux User Group, as soon as possible by e-mail or by phone +31620677597.

The organization will make a selection from all contributions based on main criteria such as quality and diversity. Also membership of the OBUG, user or partner, will be taken into account.
Speakers will receive a notification of our decision in week 2, 2012.

Hope to see you there.

Vote for Martin @ODTUG board

Last Oracle Open World Martin (Giffy D'Souza, left on the picture) told me he was running for the ODTUG board and without a doubt, I told him I would support him.



I know Martin for some time now; we first met in 2008 when we did a project for the company he worked for at that time. From the very first moment I appreciated his personality and technical skills. Over the years Martin became more active in the APEX community; on his blog he shares his experiences, he helps people in the forum and presents at different Oracle conferences.

In the beginning of the year I nominated him to become an Oracle ACE which was accepted. He not only got that recognition, he also got the best presentation award at ODTUG's conference this year. Hopefully 2011 will bring him one more award... a place in the ODTUG board.

I hope the whole APEX community shares my feelings when I say: "Vote for Martin and get him in the board!". Being APEX as one of the main tracks at ODTUG I think it only makes sense to have an APEX representative in the board and I can't think of a better person than Martin. His personality makes the difference!

You can read more about Martin's campaign and his reasons running for the board on his blog.

All the best Martin! I hope you make it.

Monday, October 10, 2011

APEX Meet-up OOW 2011

On Tuesday we had our 6th APEX Meet-up at Oracle Open World (OOW).


It was another great time to have some fun and chats with other people developing and using Oracle Application Express applications.


This is just one of the picture, you find more pictures here.

As there were so many people we didn't have one picture with all of us. Some also came in later... it started with grabbing two tables, but at the end we filled half of the bar :-)

If you were at the APEX Meet-up and have some other pictures, please send them to me and I'll add them to the album.

Special thanks to OTN, ODTUG and the APEX Development team to sponsor the meet-up. Although we were with many people, the costs for drinks and appetisers where covered by the sponsorship! Thanks again.

Thursday, October 06, 2011

APEX in the Cloud

With today's announcement of the Oracle Database Cloud, it also means Oracle gives a strong message towards the APEX community.


Oracle Application Express (APEX) will be included in the Database Cloud. If you look at the features of the Database Cloud, for development it's all APEX and web services (through the APEX listener).


Before we had (and still have) apex.oracle.com where you could try APEX for free, but couldn't install any production applications on it. Now with the Oracle Database Cloud you have a paid alternative for all production applications. You can obviously use it for development and test too.

The other interesting thing is that there are productivity apps available... it's some kind of an APEX app place which you can install for free.


It looks like in the future also partners can offer their apps on there.

Probably in the next days and weeks we hear more about all the Oracle cloud... one piece that is missing it looks like is pricing.

Wednesday, October 05, 2011

Live from the OOW11 Keynote

I'm writing this post while the keynote is going on... I'll update this post while we go on.

This will be a special keynote for ... :-) You can also follow me on twitter.

15 mins before the start, room is now filling up quickly






Mark Hurt on stage announcing Infosys, Larry comes later... won't blog much about Infosys, waiting for Larry.

Sting came on stage to tell he looks forward to sing for us at the Appreciation event later today.


There you go, Larry comes on stage... now it will start to be interesting.


Fusion Applications run in the cloud and on-premise. Important, cloud security: separate VM & database for each customer (no multi-tenancy). Larry mentions APEX for the first time; people use it in the cloud to build custom applications, some people use it to extend Fusion Apps (or e-business suite).

Larry announcing the Oracle Public Cloud


Key difference with other clouds, Oracle Cloud build on standards, can link to anything.
Different services, first to start with Database Server Cloud... (screenshot is not ideal, but there is a first screenshot of APEX)


Great jokes of Larry about "False Clouds". Something like "you check data in, but you can't check it out!", "you take the plane and are in the clouds, but can't get out the plane/cloud anymore".
Larry is in great shape ;-)


Hacking a lot on Salesforce.com... now Larry is comparing the Oracle cloud vs others (false clouds).

Larry announcing the Oracle Social Network


Larry shows a "live" demo of the Oracle Fusion Applications together with the Oracle Social Networking. The demo lasts a bit long, but it is nice to see all the nice features in Fusion Apps.

*** sad news coming in *** Steve Jobs of Apple passed away ...

Demo done, show over... seems like a strange end to the keynote.
Not sure it was intended like that or it had to do with the news of Steve Jobs. They say Larry is a good friend of Steve Jobs...

So no pricing, no demo of the database cloud... Rumours where different... Database in the cloud = APEX in the cloud. The Oracle cloud is live now, you can find it at http://cloud.oracle.com
What you see is also an APEX app...


I guess the presentations tomorrow will go in more debt about the Oracle Database Cloud.
Press (and bloggers) got an invite to a 5PM meeting to Cloud Technical Deep Dive... not sure I'll go there.

Thursday, September 22, 2011

Downloading Oracle software from linux server with wget

When I need to install software on a linux server, I locate all the software I need and start downloading it.


Downloading it first to your laptop and moving it then to the server is one option, which works ok if you are on the same network as the server. However with having a lot in the cloud it would be far easier to download the software directly on the server (as the server is already connected to the internet).

If I was running a graphical interface on the server, which I'm not, I could have used a browser. I could also have used lynx, a text based browser. My experience with lynx isn't that great, for example when I had to login and the site used javascript things got messed up or were not working. Probably I did something wrong or didn't have enough experience using it.

The way I download for example Oracle software straight into the server is by using wget.
As you can only download Oracle software after you are logged in, I had to do an additional step to get wget working.

These are the steps I followed:
- Open Firefox and install the Expert Cookies add-on. That tool allows you to download the cookies of your pc into a text file.
- Clear all cookies (Tools - Clear Recent History... - Select Cookies and click the Clear now button)

- In your browser on your pc login to the Oracle website and/or depending the software you need on edelivery.oracle.com. Logging in will set a cookie.
- With the Expert Cookies add-on you can now download the cookies of your pc (Tools - Export Cookies ...) and save the file to your filesystem


- Upload that file to your server
- Now you can run the wget command from the server to download the software you want :-)
For example to download Apache the command looks like:
wget --load-cookies=cookies.txt http://download.oracle.com/otn/linux/ias/101350/ias_linux_x86_ccd_101350_disk1_1of3.zip

Wednesday, September 21, 2011

Updates on APEXBlogs

Some of you might have seen that APEXBlogs wasn't updated with twitter messages anymore for some time. Since last week blog posts were not taken anymore either.

I only found a little time today to look a bit closer into these issues and am happy to share with you what is going on.

The reason for not updating the blog posts was that my package produced this error:

ORA-31011: XML parsing failed
ORA-19202: Error occurred in XML processing
LPX-00217: invalid character 160 (U+00A0)
Error at line 1

Although the Oracle database is running in UTF-8 and Google is sending the posts as UTF-8, it looks like it's not doing that with the blog names. The name "João Oliveira" has some bad characters which Oracle didn't understand. After changing this name in Google Reader the procedure didn't produce the error anymore and Oracle could parse the xml again.

Concerning twitter... that is a different story. It looks like the APEXBlogs is banned to use the Twitter API. As I didn't take out the twitter api calls from the hourly sync, we stayed banned and it got worse I guess.

Although I thought I followed the guidelines of using the API, I'll change the syncing of twitter message to do it less frequently so we aren't blacklisted again in the future. The syncing worked for many months, so Twitter must have changed their policies.

Today I asked Twitter to remove APEXBlogs.info from the blacklist so hopefully the twitter syncing will work again in a few days.

Wednesday, September 14, 2011

APEX Meetup @ OOW 2011

It's an annual tradition that the APEX developers get together at Oracle Open World to have some drinks and meet each other and tell great stories.

This year it's the 5th year we do this! (update: 6th year!) The first APEX Meetup was in 2006, this is the picture that was taken at that time.


You recognise the people? It's funny to see that picture again, it shows how fast life goes and that we don't stay young ;-)

Where in 2006 APEX had still everything to proof, the stories were about "will APEX stay?" and "how can I convince my manager/customer that APEX is really good?"... now, APEX has proven it's value many times and almost every customer using Oracle knows about it or uses APEX. Things change... and the life of APEX isn't over yet... there is more to come.

So what about the meet up this year?

As the tradition wants, the APEX Meetup will be at the 4th Street Bar & Deli on the Tuesday (7.30 PM) during Oracle Open World. Everybody is welcome! OTN (thanks Lillian!) is sponsoring this year again too, so the first round is already paid for :-)

Hope to see you there...