Mobile Maintenance for EBS: eAM Mobile App - All You Need To Know - Propel Apps

Mobile Maintenance for EBS: eAM Mobile App - All You Need To Know - Propel Apps

Oracle Enterprise Asset Management (eAM), a module in Oracle’s E-Business Suite, addresses the comprehensive and routine asset maintenance requirements of asset-intensive organizations. With eAM, organizations can efficiently maintain both assets,...

Oracle Enterprise Asset Management (eAM), a module in Oracle’s E-Business Suite, addresses the comprehensive and routine asset maintenance requirements of asset-intensive organizations. With eAM, organizations can efficiently maintain both assets, such as vehicles, cranes and HVAC systems, as well as rotable inventory items, such as motors and engines. Organizations can track all maintenance costs and work history at the asset level to measure performance and optimize maintenance operations.

App Purpose
Perform much-needed functionality with little to no data entry through the use of various features.

Key Features
The following are the key features of the Oracle Mobile Maintenance for Oracle E-Business Suite application:

A. Work Order Management
View assigned operations, tasks, and applicable quality plans
View work order details and applicable quality plans
View department work and self-assign to operations
B. Resource and Material Management
Charge time
Add and issue material
Clock-In and Clock-Out for assigned operations
Perform debrief transactions
C. Work Completion Management
Complete operations with quality results
Complete work orders with failure data, meter readings, and quality results
D. Problem Reporting, Inspection
View asset details, failure history, and applicable quality plans
View work order and work request history
Create new work orders and work requests
Enter quality results for the applicable quality plans for an asset and update existing quality information associated to assets, operations and/or work orders
Create express work orders, and perform debrief transactions
Record asset meter readings
Use Mobile Maintenance app in disconnected mode after initial synchronization of data from server, and perform transactions when there is no network connectivity.
Perform incremental synchronization when network connectivity is available to upload the offline transactions and download updated work from server.
Possible Customizations
Customization options are limited to changes in

App Name & Logos
Brand Logos
Changes to End User License Agreements
Hiding a Field
App Integration Steps
A. System Administrator
Apply server side patches for the app
Configure mobile application settings for the app
Assign the app’s mobile app access role to existing responsibilities
Communicate to end users to download the app and which URL to use
B. End Users
Download the app from app store
Login with EBS user name, password and URL
Required Patches:
A. Release 12.1.3:
Patch 26728355: R12.ATG_PF.B (Patch included in consolidated patch # 26733898:12.1.0.)
B. Release 12.2:
Patch 26728820: R12.ATG_PF.C (Patch included in consolidated patch # 26733910:12.2.0.)
Oracle Mobile Maintenance “Disconnected” feature uses the Oracle Mobile Field Service Multiplatform framework, which does not require Oracle Lite and consequently Oracle Lite should be uninstalled. If the “mobileadmin” schema exists, refer to My Oracle Support Knowledge Document 2188514.1.

Post-Install Patches:
A. Release 12.1.3:
Patch 27678444 – Oracle E-Business Suite Mobile Foundation Release 8.0 Online Help
Patch 28278350: R12.OWF.B
If you have applied the Consolidated Patch for Data Removal Tool, Patch 27822242:12.1.0, then perform the following steps in the specified order:
Apply Patch 28295762: R12.PER.B
Apply Patch 28303904: R12.FND.B
Recompile the data removal metadata by running the concurrent program “Recompile Metadata for Data Removal Tool”, with the “Entity Type” parameter set to “ALL”
Patches for custom app development:
Patch 27958894 – client libraries, application template, and sample app
Patches for REST services listed in Document 1998019.1– REST services
B. Release 12.2:
Patch 27678444 – Oracle E-Business Suite Mobile Foundation Release 8.0 Online Help
Patch 28278350: R12.OWF.C
If you have applied the Consolidated Patch for Data Removal Tool, Patch 27761509:12.2.0, then perform the following steps in the specified order:
Apply Patch 28295762: R12.PER.C
Apply Patch 28303904: R12.FND.C
Recompile the data removal metadata by running the concurrent program “Recompile Metadata for Data Removal Tool”, with the “Entity Type” parameter set to “ALL”
Patches for custom app development:
Patch 27958894 – client libraries, application template, and sample app
Patches for REST services listed in Section B, Document 1311068.1 – REST services
Issues with Mobile eAM App
Oracle’s core focus is on Desktop ERP but not on mobile. The result is that the apps are not reliable as they throw a lot of errors during deployment time and regular usage. Oracle customers have to apply several patches and raise SR to the Oracle’s product team to make the apps work. Unlike Oracle’s other mobile apps, eAM app has issues that are not easily resolvable. Though Oracle responded with solutions to resolve the errors, these solutions are not sufficient to resolve some of the errors as Oracle’s customers contact us for help to resolve these errors or a custom application.

Some of the major issues with eAM apps are:

App automatically closes after tapping on Department Section in the app
Throws error saying – “Unable to make a secure connection to the Oracle E-Business Suite server. Please verify the TLS setup for the app and the server.”
Integration & Custom App Development Services
Propel Apps, previously Algarytm, is a gold partner of Oracle and offers end-to-end mobile app development services for Oracle EBS workflows. Though Oracle Enterprise Asset Management is one of the best tools in the market, there is not a single robust mobile app for the modern day needs of organizations. Propel Apps offers custom eAM mobile application that is easy to customize and simplifies asset maintenance activities. Fill out the form to learn more about eAM App.

An Introduction to Oracle SQL

An Introduction to Oracle SQL

An Introduction to Oracle SQL: A quick tour of the six principal clauses of the SELECT statement.

This course is a brief presentation of Oracle SQL.
We will install a version of Oracle Express Edition and Oracle SQL Developer for free.
We'll then look at the SELECT statement with its 6 main clauses (SELECT, FROM, WHERE, GROUP BY, HAVING and ORDER BY).
Following this, we'll look at what else you need to know, and resources (which range from FREE to very expensive) which will help you to learn it..

What you'll learn

  • Either Download and Install Oracle Express Edition and Oracle SQL Developer on your computer - for free
  • Write your own SELECT statements.
  • Learn the SELECT, FROM, WHERE, GROUP BY, HAVING and ORDER BY clauses.
  • Get an easy way to remember the order of these clauses.
  • Find out what more you need to know, and resources in how to learn it.

How to install Ubuntu with Oracle VirtualBox

How to install Ubuntu with Oracle VirtualBox

This Ubuntu tutorial explains how to install Ubuntu with Oracle VirtualBox. What is VirtualBox? Why Ubuntu? Oracle VM VirtualBox is a cross-platform virtualization application. You can run Windows and Linux on your Mac, run Windows server on your Linux server or run Linux on your Windows PC

What is VirtualBox?

Oracle VM VirtualBox is a cross-platform virtualization application developed by Oracle Corporation. It allows users to virtually install operating systems on virtual hard disks such as Windows, macOS, Solaris and Linux.

As an example, you can run Windows and Linux on your Mac, run Windows server on your Linux server or run Linux on your Windows PC while running your other existing applications.

Disk space and memory are the only problems that you'll face when installing multiple virtual machines.

Why You’ll Need It
  • Oracle’s VirtualBox is easy to install and use.
  • It's free.
  • You can run and experience any operating system safely.
  • If you’re a developer, VirtualBox can be used as a tool for safely testing your own development projects in multiple OS environments.
  • It can run everywhere from small embedded systems to laptops.
  • It's good for testing and disaster recoverable as it can be easily copied, backed-up and transported between hosts.
VirtualBox Installation

VirtualBox can be downloaded here: VirtualBox Downloads

Why Ubuntu?
  • It's free.
  • Easy customization: The GNOME desktop environment helps you customize easily.
  • It's secure.
  • Ubuntu is open-source.
  • Friendly and supportive community.
  • Low system requirements.
  • According to FOSSBYTES, Ubuntu is the second best Linux distro for programming & developers [2019 Edition].
  • It's beginner friendly.
Setup for Ubuntu

First, open the VirtualBox. Then click "New" to create a virtual machine.

Fill the OS name as Ubuntu since we're installing it. Check the type as Linux and select version Ubuntu (64-bit).

NOTE: Select the amount of memory as you wish but don't add more than 50 percentage of your RAM.

Check the "Create a virtual hard disk now" so we can later define our Ubuntu OS virtual hard disk size.

Now, we want to select "VHD (Virtual Hard Disk)".

Next, we'll dynamically allocate storage on physical hard disk.

We want to specify our Ubuntu OS's size. Recommended size is 10 GB. You can increase more than that.

After creating a virtual hard disk you'll see Ubuntu in your dashboard.

Now, we have to set up the Ubuntu disk image file (.iso)

The Ubuntu disk image file can be downloaded here: Ubuntu OS download

To set up the Ubuntu disk image file, go to settings and follow these steps:

  1. Click "Storage".
  2. In storage devices, click "Empty".
  3. In attributes, click the disk image and "Choose Virtual Optical Disk File".
  4. Select the Ubuntu disk image file and open it.

Click OK.

Your Ubuntu OS is fully ready for installation in your VirtualBox. So let's start it!

NOTE: Ubuntu VirtualBox installation and actual OS installation steps may vary. This guide helps you to install Ubuntu in VirtualBox only.

Let's install Ubuntu!

Click Install Ubuntu.

Select your keyboard layout.

In "Updates and other software" section check the "Normal installation" and continue.

In "Installation type", check "Erase disk and install Ubuntu".

Click "Continue".

Choose your current location.

Now, set up your profile.

You'll see Ubuntu installation.

After the installation, restart it.

After logging in, you'll see Ubuntu desktop.

We have successfully installed Ubuntu in VirtualBox. It's ready to use for your future development projects.

Let's verify the installation.

Open your terminal (Press Ctrl+Alt+T) and type the below commands and check if they work.

  1. pwd: This will print the current working directory.
  2. ls: This will list all items in your current directory.

After checking those, power off your machine by using the following command.



VirtualBox is free and is a great tool for running multiple OS in a single OS. Ubuntu has its benefits. If you're a beginner to Linux, I would recommend you to use Ubuntu as it's beginner friendly.

Please feel free to let me know if you have any questions.

Thank you for reading.

Happy Coding!

Python, Oracle ADWC and Machine Learning

Python, Oracle ADWC and Machine Learning

Python, Oracle ADWC and Machine Learning - How to use Open Source tools to analyze data managed through Oracle Autonomous Data Warehouse Cloud (ADWC).

Python, Oracle ADWC and Machine Learning - How to use Open Source tools to analyze data managed through Oracle Autonomous Data Warehouse Cloud (ADWC).


Oracle Autonomous Database is the latest, modern evolution of Oracle Database technology. A technology to help managing and analyzing large volumes of data in the Cloud easier, faster and more powerful.

ADWC is the specialization of this technology for Data Warehouse and Advanced Data Analysis. It is a technology that simplifies uploading, transforming data and making advanced analytical tools accessible to Business Users and non-DBAs. Those tools that are part of the baggage of Data Scientists, so to speak.

In this article, however, I do not want only to examine in depth the tools available in ADWC, but I want to take a slightly different point of view.

I will try to explain it with an example: imagine to be a Data Scientist who knows above all the tools for Machine Learning and Data Exploration coming from the Open Source world. To give concrete examples, tools such as:

  • Python
  • Jupyter Notebook
  • I moduli NumPy, Pandas, Scikit-learn
  • eventually Keras (if we want to use Deep Learning models)

But the data that needs to be analyzed is stored in an ADWC. And more, our “hero” has some knowledge of SQL (well, maybe the opposite is strange) and understands that some processing should be done in SQL.

How can our “explorer” combine the best of both worlds?

Top down.

I do not want to turn this article into a sequence of commands that will be executed without a clear understanding. So, even if I want to provide all the details to simplify the life of those who want to try to follow my tracks, I want to proceed Top-down. I will first try to explain things to a higher level of abstraction, without too much detail, but I promise to add the details of implementation later.

The Cloud.

Like it or not the Cloud is there to stay. ADWC, for now, is a Public Cloud Oracle service.

The idea that came to me, to avoid to transfer too much data between my MacBook and the Cloud DataCenter, is to place all the analysis tools on a VM placed in the Oracle Cloud Infrastructure (OCI). For my purposes it is more than enough a VM with Ubuntu Linux and eight OCPU (core), to be turned on only when it is needed.
On this VM I installed:

  • Anaconda Python distribution

  • Python modules: Pandas, cx_Oracle, scikit-learn

  • server for configuring Notebook Extension (nbextensions)

  • Oracle client libraries (instant client 18.3)

  • The libaio1 system librarylibaio1 system library

I have also created in Anaconda a dedicated virtual Python environment (to be activated with the command “source activate ”).

With a little experience and patience and some “googling” in two hours the environment is up & running.

ADWC is created from the Oracle Cloud Infrastructure console. Just you need to specify the database name, the disk space in TB and the number of OCPU. In about ten minutes it is up & running; Not even the time for a long coffee break.

How to connect to Oracle ADWC

Nothing really complex. In the end, ADWC is always an Oracle database and the connection from a client is done in a manner well known to those who have worked with Oracle. The only really relevant detail is that it is mandatory that the connection is protected and encrypted.

To connect any client we must therefore:

  • download from the console of our ADWC the wallet that contains the details to identify who you are connecting to and the certificates required to validate the server and for the encryption

  • to place the wallet in a directory on our VM and unpack it (it is provided as a zip file)

  • have valid credentials (user and password) of a DB user with privileges to read data

Well, maybe at this stage our Data Scientist will be helped by a colleague with a little more “Oracle-experience”, or with a little patience can read the documentation.

How to interact with the database

Real fun begins here!

The tool that will be used is Jupyter Notebook, in which I have enabled the “ExecuteTime” extension, to record the execution times of each instruction.

In the Notebook we can interact with the DB (execute queries, etc) in two ways:

  • using Python instructions

  • using SQL statements directly

and the beauty is that we can combine the two modes according to our preferences, conveniences and inspiration of the moment. Today the SQL bores me deathly, I prefer the “Pythonic way-of-life?”, All right! No, too slow or too complex in Python, I’ll do it in SQL.

Let’s try to be more concrete. Let’s start with the Python (today …)
import cx_Oracle
import pandas as pd
import config as cfg
connection = cx_Oracle.connect(cfg.USER, cfg.PWD, ‘db4ml_medium’)
data = pd.read_sql("select * from my_credit_scoring", con=connection)

Let’s leave the details aside for now. We should instead admire simplicity: with just two lines of code we load all the data contained in the MY_CREDIT_SCORING table into a Pandas DataFrame.

At this point our beloved Data Scientist does not hold back from happyness. He has already guessed how he can finish the story: if he wants he can proceed in the way that he has been taught by dozens of books with titles such as “Machine Learning and Python” and must only (Mmm … only?) do some pre-processing , data cleaning, scaling, model building, optimization of hyper-parameters , model training, fight with overfitting, etc, etc. But, it does not need any other know-how on Oracle.

A particular now we give it (otherwise what is the purpose of Time Extension?): To load 100,000 records (each of which has 86 columns) from the ADWC database it takes only a little over 6 sec. Also due to the high speed and low latency network that is part of Oracle Cloud Infrastructure.

The other way to interact with the DB uses the “magic extension sql” of the Notebook:

%load_ext sql
%sql $cfg.CONN_STRING
select count(*) from my_credit_scoring

Here another detail: the second instruction makes the connection to the DB and I have stored the connection string (CONN_STRING) in a file, not wanting to show in the Notebook explicitly username and password.

At this point, however, I want to add another detail (of the series: “we want to combine the best of both worlds”): our Data Scientist has access to the original data “read-only”, through a table called CREDIT_SCORING_100K, in the Oracle ADMIN schema. But since he assumes (you never know) that he wants to do some processing of this data (cleaning, etc) in the DB, he creates a “private” copy of the table, in his own private scheme.

This operation, done in SQL, is carried out with a single instruction!

create table my_credit_scoring as select * from admin.credit_scoring_100k

It takes only 7 sec. Here we see the simplicity and power that comes from ADWC. (Maybe I would have done better to choose a table of 10 million records, it would have had more effect, but I hadn’t it at my fingertips, sorry). Oracle ADWC is based on Oracle Exadata technology and such an instruction fully exploits Exadata’s storage technology and SQL offloading.

Legitimate curiosity: but if I want to combine “% sql” and Python?

Ok, here’s an example:

result << select credit_score_bin, count(*) num from my_credit_scoring group by credit_score_bin
data_bin = result.DataFrame()

And the result is again stored in a Pandas DataFrame.

But what is the model for?

Right … beyond technology, we must not lose sight of the business purpose. In the example chosen to illustrate the approach, the data is used to create a “CREDIT SCORING” model. A classification model that can be used by a bank or a finance company to decide whether a person is a good debtor and therefore whether to accept his mortgage and/or loan application.

A model of this type, with such data, is implemented through a “Supervised Learning” approach and with a binary classifier (the CREDIT_SCORE_BIN column contains only two distinct values): we train the model, then we give the model a series of data relating to the credit applicant and the model says: “Good credit, GO ON” or “Other credit, No GO”.

The complexity.

Here our ADWC has nothing to do with it or can only help. The data in the real world are “dirty”, have “holes” and must be cleaned up and completed. The table in my example is realistic from this point of view.

There are thousands of missing data (out of 100,000 samples). And many of the scikit-learn ML algorithms do not work well under such conditions.

There are many features (85) and many are categorical and therefore must be coded (translated into numbers). For the numerical characteristics, it is needed to bring them all in the same scale.

Once the data is loaded into the Pandas DataFrame we can use the “Python Only” approach and processing times are acceptable.

Here a minimum of wisdom inspires you not to try immediately with a very complex model, with all the characteristics, but to start with a few tens to establish a benchmark with which to compare more complex and articulate models.

A first benchmark is obvious: the accuracy of the model must be higher than 50%, otherwise we should change job (well, an official who decides whether to grant a loan by throwing a coin is not really the best, but in the absence of other tools …).

Models are like children, they learn what we teach.

Oh yes, there is always the problem of “algorithmic bias”. We must be sure, as far as possible, not to condition the predictions by inserting “only” certain types of data.

For example, if only a negligible fraction of samples indicates “Good Credit” our “algorithm-to-instruct” will learn that it must always answer: “Other Credit”.

In SQL the check is easy:

select credit_score_bin, count(*) from my_credit_scoring group by credit_score_bin

  • Python
  • Jupyter Notebook
  • I moduli NumPy, Pandas, Scikit-learn
  • eventually Keras (if we want to use Deep Learning models)

It can be good, obviously those who grant loans tend to be “prudent”, too many “sufferings” in the past.

Machine Learning Models

Even if we leave the topic “how to interact with Oracle ADWC” here, some will have the curiosity to read how to make a binary classifier with scikit-learn.

I want to be clear: a few lines of Python code implementing “a model” are not the serious answer to the question. Models have “hyper-parameters” that need to be optimized and this requires work (grid optimization) which is the really heavy part from a computational point of view.

But we can satisfy the curiosity (of course I tried to quickly pull up a model) without dedicating too much time to the hyper-parameters optimization. But only with the warning that, without this activity, we have only taken a first step towards the solution.

Another question: which algorithm to use?

Answer: “There is no free lunch” (Wikipedia).

That said, I choose to use Support Vector Machine (SVM). It is a type of algorithm that generally gives good results in problems with many features.

What is SVM? More or less, in every classifier, we could say that we try to find a separation surface between the two sets. If we can find an hyper-plane, the problem could be said “linearly separable”.

The Support Vectors in SVM are the data points that lies closest to the decision surface.

SVM maximizes the margin. In addition, using a “non-linear” kernel (like rbf) we can project the data points in a higher dimensional space where the two sets (Good Credit, Other credit) are linearly separable (this is more or less the idea).

The code in Python, using scikit-learn, is:

from sklearn.svm import SVC
svm = SVC(kernel = 'rbf', C = 1.0, gamma=0.1, random_state = 0), y_train)
print('Train accuracy:', svm.score(X_train_std, y_train))
Test accuracy: 0.88145
print('Test accuracy:', svm.score(X_test_std, y_test))
Train accuracy: 0.8978987

Some notes:

  • I chose to use a non-linear kernel (rbf), assuming that the problem is not linearly separable; Actually, the choice is confirmed by the fact that with a linear kernel I have an accuracy of about three points lower;

  • RBF stands for Radial Basis Function

  • The two values ​​of the hyper-parameters (C, gamma) are set as a starting point; Optimizations apply here;

  • The model has a slight overfitting (90 vs 88%).

The accuracy we get? A good 88%. Not bad considering that it is a first, quick step. Another benchmark with which to compare successive more complex models.

If we want to improve the model, the first serious operation to do is to proceed with the optimization of hyper-parameters. It can be done, using all the processing power of the VM (for this reason 8 cores, not even many), with the GridSearchCV class

An example of the code:

gsc = GridSearchCV(
            'C': [0.1, 1, 100, 1000],
            'epsilon': [0.0001, 0.0005, 0.001, 0.005, 0.01, 0.05, 0.1, 0.5, 1, 5, 10],
            'gamma': [0.0001, 0.001, 0.005, 0.1, 1, 3, 5]
        cv=5, scoring='neg_mean_squared_error', verbose=0, n_jobs=-1)

Some reflections

Data is in ADWC, protected, and we have not downloaded any data on our VM. All right from a security point of view.

Given the premise (Data Scientist who knows well the Open Source), I achieved the purpose using mainly scikit-learn and pandas, but also some of the tools offered by ADWC where the advantages were obvious (eg: the copy of the Oracle table) .

What we have done can be fairly easily understood even by those who do not have much experience on Oracle. I hope.

Does the model development use ADWC? Well, up to a point. I’ve done a lot on the VM using Python and the Notebook, less on ADWC. But this was foreseen (again, see the premise).

Processing times?

Here the speech runs the risk of being long. The training of SVM requires, even having 80000 samples in the training set (split 80:20), only about 10 min. If we look at CPU usage, we see that in practice only one thread works. So even with so many cores available we would not be able to use them. But, as said before, the computationally complex part is the optimization of the hyper-parameters, an operation that requires the training of the model N times (for each choice of hyper-parameters). This part can easily be parallelized, using all available cores. It is here that having so many cores can make the difference (and the Cloud helps).

By choice, we did not use the algorithm implementation contained in ADWC, as part of the Oracle Advanced Analytics Option. Using this implementation we could exploit the parallel engine of ADWC.

Python? Well. The good news is that at Oracle Open World (October 2018) Oracle has announced the availability of a Python interface to use all Oracle Advanced Analytics algorithms. This interface, named OML4Py, will be soon available. In a future article I will examine it.

Some details

The best place where to find information on how to install cx_Oracle:

All the details.

As always, time is not enough for doing exactly what I want. And the article has become longer that I wanted.

Therefore I have decided to dedicate another article to all the details. See you soon.


Thanks for reading :heart: If you liked this post, share it with all of your programming buddies! Follow me on Facebook | Twitter