Quantcast
Channel: Oracle Blogs | Oracle Shay Shmeltzer's Blog
Viewing all 200 articles
Browse latest View live

Getting Started with Oracle JET

$
0
0

Last week I did an "Introduction to Oracle JET" session at the KScope16 conference, and I wanted to share the demo I used there with more people.

Specifically the demo shows how you can adopt the code from the Oracle JET cookbook samples to work in the quick start template project.

In this demo you'll learn how to create your first JET application and build a basic JET page.

Specifically it shows the following steps:

 

Hopefully this video can help you build your first Oracle JET page.

Now that you watched this video that shows how to use the pre-configured project provided as a quick start, you might want to follow up and watch the video that shows you how to work with the base distribution and hook up the JET libraries. 

Need more help with Oracle JET? Join the JET community on OTN


Continuous Integration for Database Developers - Updated

$
0
0

About a year ago I posted a demo showing how to manage the full development lifecycle of your database code with the help of Developer Cloud Service. Since then we released new versions of both Developer Cloud Service and JDeveloper that make the experience even smoother and add more features - so I figured I'll record a small updated demo.

In this demo I'm starting from an existing project that has a list of tasks being tracked in a development sprint in the new Agile tab in Developer Cloud Service - which gives you a great view of your development effort and progress. 

(If you want to see how you create the initial project and add issues to it check out the previous demo). 

A few new things you'll see in this demo:

  • The new Agile/Sprint management dashboard in Developer Cloud Service
  • Task tracking integration in JDeveloper
  • Updating definition of database objects in JDeveloper and generating SQL scripts
  • Branching Git repositories
  • Code review for SQL files
  • Build automation for DB changes with Ant - including deployment to a cloud database

Note that in this video I'm using a cloud instance of an Oracle database where port 1521 is open for SQLNet communication. The instructions for opening this port for communication on an Oracle Cloud Database are here.

Another approach that you can take is to use scripts that execute commands using SSH on the Database Cloud Service - you can see this approach in action in this video showing Developer Cloud Service managing an Oracle APEX Lifecycle.  

The Ant script used in the sample is:

 <?xml version="1.0" encoding="UTF-8" ?><project xmlns="antlib:org.apache.tools.ant" default="init">  <target name="init">    <tstamp/>  </target>  <path id="antclasspath">    <fileset dir=".">      <include name="ojdbc7.jar"/>    </fileset>  </path>  <target name="deploy">    <sql driver="oracle.jdbc.OracleDriver" userid="C##xxxx" password="xxxx"         url="jdbc:oracle:thin:@xxx.xxx.xxx.xxx:1521:ORCL" src="./database/DATABASE1/dbcreate.sql"         classpathref="antclasspath" onerror="continue"/>  </target></project>

Note that you need the Oracle JDBC jar file to be accessible from the Ant script - I just included it in my git repository.

If you like to try this out with your own database development project - get a trial of Oracle Developer Cloud Service here

Extending Oracle SaaS with Oracle Application Builder Cloud Service - Simplified PaaS for SaaS

$
0
0

One of the focus area for us when developing the new Oracle Application Builder Cloud Service (ABCS) was to create a tool that would make it very simple to enrich Oracle SaaS applications.

This integration is a key part of Oracle's PaaS for SaaS offering - where we have unique capabilities in our Platform as a Service offering for our Software as a Service customers.

With ABCS it is very easy to pick up objects from Oracle SaaS (through the built in service catalog) and then design new web and mobile interfaces that show data from those.

In addition you can then add your own custom fields and related objects with additional data you want to track.

Once your application is complete - you can then either run it as a stand-alone app, or embed it into an Oracle SaaS interface. 

I wrote two blogs and recorded two videos that show you the basics.

Creating Oracle ABCS application connected to Oracle SaaS

Embedding Oracle Application Builder Cloud Service Apps in Oracle Sales Cloud

These videos are part of the new Oracle Application Builder Cloud Service YouTube Channel

And the blogs are published on the Oracle Application Builder Cloud Service OTN Community

We have more tutorials there to help you go even further - so check them out! 

CI, DevOps and ALM for Oracle SOA Suite with Oracle Developer Cloud Service

$
0
0

We have a lot of developers who are using JDeveloper to develop applications with Oracle SOA Suite, and in this blog I wanted to show them how the combination of JDeveloper along with Oracle Developer Cloud Service can help automate their whole development and delivery lifecycle.

One unique aspect of Developer Cloud Service is that it has an instance of JDeveloper available in the build environment. This allows customers who are building Oracle SOA artifacts to leverage the OJDeploy mechanism to package their applications as part of a continuous integration cycle just like they do during development time.

With the improved DevCS integration that we added in JDeveloper 12.2.1, developers can go beyond integration with the Git server offered by DevCS and can now interact with the DevCS task tracking system directly as well as associate code changes to specific tasks they are working on.  

In this 10 minutes video I show:

  • Creating Ant based builds for Oracle SOA artifacts
  • Automating Continuous Integration build and packaging for Oracle SOA from Developer Cloud Service
  • Managing SOA project code with Git and Developer Cloud Service 
  • Tracking tasks from JDeveloper and monitor agile development in Developer Cloud Service

By the way, for those who rather use Maven to automate their builds - this is totally possible and supported in DevCS as well. There is a set of videos that show you how to do that here

(If you haven't seen how quick and easy it is to create a DevCS project, create a git repo, track tasks and create agile team boards - see this video and this one too).

Note that developers get access to Developer Cloud Service with every subscription to the Oracle SOA Cloud Service. 

Here are the two ant files used in the video:

Note that in the build.properties you'll want to change the application and project names to match the ones you are working on.

As you see in the video the build.xml is generated for you automatically and you just need to add the line:

<propertyenvironment="env"/>

build.properties

oracle.commons=../../../../oracle_common/
oracle.commons=../../../../oracle_common/
install.dir=../../../..
oracle.home=${env.ORACLE_HOME_SOA_12_2_1}
oracle.jdeveloper.workspace.path=${env.WORKSPACE}/e2e-1201-composites.jws
middleware.home=${env.MIDDLEWARE_HOME_SOA_12_2_1}
workspace=${env.WORKSPACE}
oracle.jdeveloper.ant.library=${env.ORACLE_HOME_SOA_12_2_1}/jdev/lib/ant-jdeveloper.jar
oracle.jdeveloper.deploy.dir=${env.WORKSPACE}/ProcessOrder/deploy
oracle.jdeveloper.ojdeploy.path=${oracle.home}/jdev/bin/ojdeploy
javac.nowarn=off
oracle.jdeveloper.project.name=ProcessOrder
oracle.jdeveloper.deploy.outputfile=${env.WORKSPACE}/e2e-1201-composites/ProcessOrder/deploy/${profile.name}
output.dir=classes
javac.deprecation=off
oracle.jdeveloper.deploy.profile.name=*
javac.debug=on

build.xml

<?xml version="1.0" encoding="UTF-8"?>
<!--Ant buildfile generated by Oracle JDeveloper-->
<!--Generated Jul 25, 2016 5:11:09 PM-->
<projectxmlns="antlib:org.apache.tools.ant"name="ProcessOrder"default="all"basedir=".">
<propertyenvironment="env"/>
<propertyfile="build.properties"/>
<pathid="library.SOA.Designtime">
<pathelementlocation="${install.dir}/soa/plugins/jdeveloper/extensions/oracle.sca.modeler.jar"/>
</path>
<pathid="library.SOA.Runtime">
<pathelementlocation="${install.dir}/soa/soa/modules/oracle.soa.fabric_11.1.1/fabric-runtime.jar"/>
<pathelementlocation="${install.dir}/soa/soa/modules/oracle.soa.fabric_11.1.1/tracking-api.jar"/>
<pathelementlocation="${install.dir}/soa/soa/modules/oracle.soa.fabric_11.1.1/tracking-core.jar"/>
<pathelementlocation="${install.dir}/soa/soa/modules/oracle.soa.fabric_11.1.1/edn.jar"/>
<pathelementlocation="${install.dir}/soa/soa/modules/oracle.soa.mgmt_11.1.1/soa-infra-mgmt.jar"/>
<pathelementlocation="${oracle.commons}/modules/com.oracle.webservices.fabric-common-api.jar"/>
</path>
<pathid="library.BPEL.Runtime">
<pathelementlocation="${install.dir}/soa/soa/modules/oracle.soa.bpel_11.1.1/orabpel.jar"/>
</path>
<pathid="library.Mediator.Runtime">
<pathelementlocation="${install.dir}/soa/soa/modules/oracle.soa.mediator_11.1.1/mediator_client.jar"/>
</path>
<pathid="library.MDS.Runtime">
<pathelementlocation="${oracle.commons}/modules/oracle.mds/mdsrt.jar"/>
</path>
<pathid="library.BC4J.Service.Runtime">
<pathelementlocation="${oracle.commons}/modules/oracle.adf.model/adfbcsvc.jar"/>
<pathelementlocation="${oracle.commons}/modules/oracle.adf.model/adfbcsvc-share.jar"/>
<pathelementlocation="${oracle.commons}/modules/commonj.sdo.backward.jar"/>
<pathelementlocation="${oracle.commons}/modules/commonj.sdo.jar"/>
<pathelementlocation="${oracle.commons}/modules/oracle.toplink/eclipselink.jar"/>
<pathelementlocation="${oracle.commons}/modules/com.oracle.webservices.fmw.wsclient-impl.jar"/>
<pathelementlocation="${oracle.commons}/modules/com.oracle.webservices.fmw.jrf-ws-api.jar"/>
<pathelementlocation="${oracle.commons}/modules/com.oracle.webservices.fmw.web-common-schemas-impl.jar"/>
</path>
<pathid="classpath">
<pathrefid="library.SOA.Designtime"/>
<pathrefid="library.SOA.Runtime"/>
<pathrefid="library.BPEL.Runtime"/>
<pathrefid="library.Mediator.Runtime"/>
<pathrefid="library.MDS.Runtime"/>
<pathrefid="library.BC4J.Service.Runtime"/>
</path>
<targetname="init">
<tstamp/>
<mkdirdir="${output.dir}"/>
</target>
<targetname="all"description="Build the project"depends="deploy,compile,copy"/>
<targetname="clean"description="Clean the project">
<deleteincludeemptydirs="true"quiet="true">
<filesetdir="${output.dir}"includes="**/*"/>
</delete>
</target>
<targetname="deploy"description="Deploy JDeveloper profiles"depends="init">
<taskdefname="ojdeploy"classname="oracle.jdeveloper.deploy.ant.OJDeployAntTask"uri="oraclelib:OJDeployAntTask"
classpath="${oracle.jdeveloper.ant.library}"/>
<ora:ojdeployxmlns:ora="oraclelib:OJDeployAntTask"executable="${oracle.jdeveloper.ojdeploy.path}"
ora:buildscript="${oracle.jdeveloper.deploy.dir}/ojdeploy-build.xml"
ora:statuslog="${oracle.jdeveloper.deploy.dir}/ojdeploy-statuslog.xml">
<ora:deploy>
<ora:parametername="workspace"value="${oracle.jdeveloper.workspace.path}"/>
<ora:parametername="project"value="${oracle.jdeveloper.project.name}"/>
<ora:parametername="profile"value="${oracle.jdeveloper.deploy.profile.name}"/>
<ora:parametername="nocompile"value="false"/>
<ora:parametername="outputfile"value="${oracle.jdeveloper.deploy.outputfile}"/>
</ora:deploy>
</ora:ojdeploy>
</target>
<targetname="compile"description="Compile Java source files"depends="init">
<javacdestdir="${output.dir}"classpathref="classpath"debug="${javac.debug}"nowarn="${javac.nowarn}"
deprecation="${javac.deprecation}"encoding="UTF8"source="1.8"target="1.8">
<srcpath="SOA/SCA-INF/src"/>
</javac>
</target>
<targetname="copy"description="Copy files to output directory"depends="init">
<patternsetid="copy.patterns">
<includename="**/*.GIF"/>
<includename="**/*.JPEG"/>
<includename="**/*.JPG"/>
<includename="**/*.PNG"/>
<includename="**/*.cpx"/>
<includename="**/*.dcx"/>
<includename="**/*.ejx"/>
<includename="**/*.gif"/>
<includename="**/*.ini"/>
<includename="**/*.jpeg"/>
<includename="**/*.jpg"/>
<includename="**/*.png"/>
<includename="**/*.properties"/>
<includename="**/*.sva"/>
<includename="**/*.tag"/>
<includename="**/*.tld"/>
<includename="**/*.wsdl"/>
<includename="**/*.xcfg"/>
<includename="**/*.xlf"/>
<includename="**/*.xml"/>
<includename="**/*.xsd"/>
<includename="**/*.xsl"/>
<includename="**/*.exm"/>
<includename="**/*.xml"/>
<excludename="build.xml"/>
</patternset>
<copytodir="${output.dir}">
<filesetdir="SOA/SCA-INF/src">
<patternsetrefid="copy.patterns"/>
</fileset>
<filesetdir=".">
<patternsetrefid="copy.patterns"/>
</fileset>
</copy>
</target>
</project>

Oracle OpenWorld 2016 and Where You'll Find Me

$
0
0

It's that time of the year - Oracle OpenWorld is taking place starting on Sunday - and my calendar is full of activities.

I'm going to be presenting on multiple tools and frameworks including sessions on Oracle Application Builder Cloud Service, Oracle JDeveloper and Oracle ADF, Oracle Developer Cloud Service and a session discussing which dev framework and tool is right for you. 

In case you want to catch me at #OOW16 here is my schedule:

Simplified Multichannel App Development for Business Users [CON2884] 
Monday, Sep 19, 1:45 p.m. | Moscone West - 2005 - A session where I'll demo how easy it is to create and host your own applications with Oracle Application Builder Cloud Service.

Oracle Application Development Framework and Oracle JDeveloper: What’s New [CON1226]
Tuesday, Sep 20, 4:00 p.m. | Moscone West - 2018 - A quick review of the new features we added in the 12.2.* releases of JDeveloper and ADF

Oracle Development Tools and Frameworks: Which One Is Right for You? [MTE6650]
Tuesday, Sep 20, 6:15 p.m. | Moscone South - 301- A session for all of those who are not sure which technology is right for them, or for those who want to ask me "is Oracle [fill in the product name] dead?"

A Guide to Cloud-Based Agile Development Methodology Adoption [CON1947]
Wednesday, Sep 21, 12:15 p.m. | Moscone West - 2018 - A demo focused session that show cases how Oracle Developer Cloud Service helps your team adopt agile development. 

No Code Required: Application Development and Publishing Made Easy [HOL7402]
Tuesday, Sep 20, 11:30 a.m. | Hotel Nikko - Nikko Ballroom III (3rd Floor)
Monday, Sep 19, 4:15 p.m. | Hotel Nikko - Nikko Ballroom III (3rd Floor) - Your two chances to try out  the new Oracle Application Builder Cloud Service and develop your first app

Agile Development Management and Continuous Integration Simplified [HOL7403]
Wednesday, Sep 21, 8:00 a.m. | Hotel Nikko - Nikko Ballroom III (3rd Floor) - Your chance to manage a whole development team agile process using Oracle Developer Cloud Service

I'm also going to be in the mobile theater in the mobile area in the demo ground on Tue and Wed at 10:30 doing a quick demo of ABCS and its mobile capabilities.

In between these sessions, you'll be able to find me at the Oracle Demoground doing some shifts in the Oracle ADF booth (which is in Moscone South far left corner) - the rest of our pods are close by including JET, DevCS, ABCS and even Forms :-)

And if I'll have any spare time, I'll try and catch some of the other session on this list of Dev tools and framework sessions

See you next week.

oowSF

New Capabilities for the Status Meter Component in ADF

$
0
0

While building a demo of new Oracle ADF features for my OOW session, I came across some nice new functionality in the dvt status meter gauge component (dvt:statusMeterGauge), specifically the round one which has become quite popular in various Oracle Alta UIs.

Turns out you can turn the dial and cut it so it shows just parts of a circle.

By adding thresholds you can use it as a replacement for the dial gauge.

Here is how it can look: 

status meter

Here is the code used:

                            <dvt:statusMeterGauge orientation="circular" inlineStyle="width:150px; height:100px;"

                                                  id="statusMeterGauge1" maximum="25000"

                                                  value="#{bindings.Salary.inputValue}" minimum="0" startAngle="180" angleExtent="180"

                                                  title="Salary">

                                <dvt:gaugeMetricLabel rendered="true" id="gml1"/>

                                <dvt:gaugeThreshold id="gt1" maximum="4000" color="red"/>

                                <dvt:gaugeThreshold id="gt2" maximum="6000" color="yellow"/>

                                <dvt:gaugeThreshold id="gt3" maximum="20000" color="green"/>

                            </dvt:statusMeterGauge>

Automatic Time-Based Dismiss for Oracle ADF Popups

$
0
0

This blog entry is about a nice little new feature that was introduced into ADF in the 12.2.1.1 version, and didn't get a mention in the "what's new" document.

Self dismissing messages  are popping up everywhere these days (when you get an email, when you have a new calendar invite etc), and you might want to use this UI pattern in your ADF apps too.

There is a new property for af:popup components - autoDismissalTimeout - that allow popups to automatically dismiss after a certain number of seconds that you can specify. This is very useful for all sort of messages that you want to show to the user, but you don't want to require the user to do any activity to dismiss.

Here is an example of such a message that you can associate with a save button:

popup sample

And here is the code you'll need to do this:

            <af:popup id="p1" animate="true" autoDismissalTimeout="2">

                <af:panelGroupLayout id="pgl1" layout="horizontal">

                    <af:image source="stat_confirm_16.png" id="i1"/>

                    <af:outputFormatted value="Your changes have been saved" id="of1"/>

                </af:panelGroupLayout>

            </af:popup>

One more (small) reason to adopt the new versions of Oracle ADF! 

List with Details on a Single Page in Oracle Application Builder Cloud Service

$
0
0

This question came up a couple of times from users so I figured I'll document how to achieve a layout that shows a list of items and allows you to pick an item from this list to show the details of this item on the same page.

list with details image

The default layout that ABCS creates is a list on one page with the ability to select an item and go see the details or edit that record on another page.

To combine the two into a single page, start from the edit or the details page that ABCS created.

On this page you then add the table or list for the same object, and set the link on a field to do the edit or details - this basically means that you'll do a navigation to the same page.

If you now run the page you'll be able click items in the table and see their details on the same page.

Here is a quick demo of how it is done:

Note that if you want this to be the default view that people see when navigating to your app - just update the navigation menu of your application to reflect this. 


Creating Oracle Application Builder Cloud Service App Based on Oracle ADF Business Components

$
0
0

Oracle Application Builder Cloud Service (ABCS for short) enables you (and your business users) to create rich web and mobile apps in a quick visual way from a browser with no-coding required (but coding is possible).

The UI that ABCS creates is based on Oracle JET, which many of our customers love because its responsiveness and lightness.

Some Oracle ADF customers have been on the hunt for a new client-side UI solution for their apps, and Oracle JET is certainly a technology that will work for those use cases.

A nice feature for Oracle ADF customers is that their data-access and business-service layer is built in a reusable way that is decoupled from the UI. And now, with the ability to expose ADF Business Components as REST service, they can use any modern UI framework to develop the UI including Oracle JET. There are already many blog entries with code samples on how to write JET apps that connect to ADF Business Components

But what if we could give you the simplicity of ABCS for the UI creation, the power of JET for the UI experience, and the ability to leverage your existing investment in Oracle ADF all without writing a single line of code manually?

Well, in the demo below I'll show you how you can reuse the logic you have in Oracle ADF Business Component and build a JET based UI on top of them in a declarative way with Oracle Application Builder Cloud Service.

Basically you get the best of each tool - and you don't need to write a single line of code !

architecture

In the 9 minutes demo I'll show you how to:

  • Create an ADF Business Components layer on top of Oracle Database in the Cloud - (0:00)
  • Expose the ADF Business Components as REST service - (1:45)
  • Deploy the REST service to Java Cloud Service (JCS) - (2:19)
  • Create an Oracle Application Builder Cloud Service application - (6:00)
  • Add an ADF BC REST Service as a data source to the app - (6:30)
  • Create the user interface to your application - (7:20)

(Times are indicated in case you want to skip sections you are already familiar with) 


If you are interested in a bit of a background on why this is so simple, the answer is that ABCS was built to enable easy integration with Oracle SaaS leveraging the REST services they expose. To quickly build the full app with all the defaulting you are seeing in there (full CRUD with a simple drag and drop) ABCS needs to know some basic information about the data that it needs to render (primary key, data types, etc). Since Oracle SaaS is built on Oracle ADF, we built into ABCS the capability to analyze the describe that ADF BC REST services provide. This makes it dead simple to consume ADF REST service in ABCS, whether these services come from Oracle's apps - or your own ADF apps :-) 

As you can see there is a great synergy between Oracle ADF, Oracle Application Builder Cloud Service and Oracle JET. 

Want to try it on your own? Get a trial of Oracle Application Builder Cloud Service here

Oracle ABCS - Traversing Relationships, Conditional Navigation, Query and Update with JavaScript

$
0
0

Oracle Application Builder Cloud Service (ABCS) lets you do a lot of things in a declarative way, however for more complex validation and conditional logic you might need to resort to some basic coding in JavaScript.

I ran into such a case with an application I was developing, and figured out that the code sample from that system will be a good way to illustrate some coding techniques in ABCS.

The application I was working on allows people to register to various events. Each event has a certain capacity, so if there are too many people registered to an event, we want the rest to be added to a wait list. For each record of a person registering, we keep a reference to the event they want to attend.  So the logic flow is:

  1. Check how many open spaces are available for the event we are trying to register for.
  2. If there is space in the event, save the new person data, and show a success message.
  3. If there isn't space, update the person "Waitlisted" field to be true, save the data, and show a message saying that the person is on the wait list. 

 

In the demo video below I'm showing how to:

  • Define declarative conditional flow of steps based on results from custom code
  • Traverse relationships between custom object through code
  • Execute a conditional query and run through the results from a custom object with code
  • Set the value for a property of a custom object through code

For reference here is the complete code from the sample:

require([    'operation/js/api/Conditions',    'operation/js/api/Operator'
], function (Conditions, Operator) {    var lab = Abcs.Entities().findById('Lab');    var id = lab.getProperty('id');    //condition is to find a lab with the id that is in the page's drop down box    var condition = Conditions.SIMPLE(id, Operator.EQUALS, $Person.getValue('ref2Combo_Box'));    var operation = Abcs.Operations().read({        entity: lab,        condition: condition    });    //if query returned value we loop over the rows and check the capacity and registration columns    operation.perform().then(function (operationResult) {        if (operationResult.isSuccess()) {            operationResult.getData().forEach(function (oneRecord) {                if ((oneRecord.Capacity - oneRecord.Registered) < 1) {                    $Person.setValue('Waitlisted', true);                    reject("error");                } else                {                    resolve("ok");                }            });        }    }).catch(function (operationResult) {        if (operationResult.isFailure()) {            // Insert code you want to perform if fetching of records failed            alert('didnt worked');            reject("error");        }    });
});

More information on the JavaScript APIs used here are in the Oracle ABCS Documentation.

Extending Oracle HCM with Oracle Application Builder Cloud Service - It's Simple

$
0
0

I blogged before showing how easy it is to extend Oracle Sales Cloud using Oracle Application Builder Cloud Service.

We do get a lot of customers of Oracle HCM that approach us asking if they can use the same tools to extend Oracle HCM apps. While Oracle Application Builder Cloud Service (ABCS) has the list of Oracle Sales Cloud services pre-populated in the service catalog , you can pretty easily connect ABCS to Oracle HCM services too and get data and build an application around this data.

In the video demo below I'm building an application that records the details of the cars employees are allowed to bring onto campus. I leverage a REST service exposed by Oracle HCM to get the list of employees. ABCS also automates querying using the same service so you can search for a specific employee.

ABCS lets me create an app with the same look and feel as Oracle SaaS displaying the specific fields that interest me in the specific layout I want. Further more I can add custom data object that tracks the details of the cars and associate it with the HCM data.

HCM App

Note that in the security section I'm using basic security with a fixed user for the sake of simplicity in the demo. Note however that in the selection list I can also use the currently logged in Oracle Cloud user - to synch the user of my ABCS and their HCM authorization.

HCM Security Setting

Check it out:

Want to try it on your own - get a trial account of Oracle Application Builder Cloud Service here

Managing Oracle Database Code with SQL Developer, Git, and Developer Cloud Service

$
0
0

Are you coding SQL and PL/SQL code? Need to manage versions & branches? Want to track your to-do tasks? Need to conduct code reviews and peer programming? 

Developer Cloud Service can help you!

And now it comes free with your Oracle Database Cloud Service trial or license - check your service dashboard to see if you got one.  Note that even if your database is not in the cloud, but rather on-premises, you can use the same process shown in the video below.

In the demo you'll learn how to:

  • Provision a new cloud project for your team
  • Check SQL scripts into the Git Repository in DevCS
  • Track tasks and to-do items
  • Branch your SQL script code
  • Conduct code review with members of your team
  • Merge branches of code

Check it out:

I blogged about this topic in the past using JDeveloper, but figured out that most of the Oracle database developers actually use SQL Developer - so I thought it would be good to give them a quick 10 minute demo of what they can do by combining the power of SQL Developer and Developer Cloud Service. (The video can also be useful to just get a basic understanding of how SQLDeveloper works with any Git repo).  

More about Developer Cloud Service here.

Stay tune for more blog entries on features for Database developers in Oracle Developer Cloud Service - coming soon!

Automating DevOps for the Oracle Database with Developer Cloud Service and SQLcl

$
0
0

In the previous blog entry I showed how you can leverage Oracle Developer Cloud Service (DevCS) to manage the lifecycle of your database creation scripts (version management, branching, code reviews etc).

But how do you make sure that your actual database is in synch with the changes that you make in your scripts?

This is another place where DevCS can come to the rescue with the built-in continuous integration functionality it provides. Specifically with the new features for database integration including secure DB connection specification, and leveraging the powerful SQL Command Line (SQLcl) - the new command line interface to the Oracle DB - which is built-in in the DevCS build servers.

In the video below I go through a process where a check-in of SQL script code change automatically initiate a build process that modifies a running database.

A few points to note:

  • For the sake of simplicity, the demo doesn't follow the recommended step of a code review before merging changes into the master branch (you can see how to do that here).
  • The demo automates running the build whenever a change to the scripts is done. You could also define a scenario where the build runs at a specific time every day - for example at 1am - and synch the DB to today's scripts.
  • You can further extend the scenario shown here of dropping and re-creating objects to add steps to populate the DB with new data and even run tests on the new database.

As you can see Developer Cloud Service can be a very powerful engine for your database DevOps - and it is included for free with your Oracle Database Cloud Services - so give it a try

DB Build

Business Logic in Oracle Application Builder Cloud Service

$
0
0

As you start building more complex applications in Oracle Application Builder Cloud Service, you'll might need to define more complex interactions between objects or validations on rows of data or specific fields.

In the new version of ABCS that we rolled out in February we added these type of capabilities.

There are several things you could do with the new Business Rules section of ABCS

  • Triggers - allow you create logic that will be executed in specific CRUD events such as when you insert, remove or update a record.
  • Object Validators - allowing you to define checks across multiple fields in your object
  • Field Validators - allowing you to define a check on specific field values.
  • Object Functions - reusable functions that can be called from the other points

Note that these logic points will be running on the server side of ABCS. 

In the video below I demonstrate a couple of these capabilities. You'll learn how to update one object when a specific value is set in another object's field. You'll also see how to check whether a combination of values in fields in a record is valid.

Check it out:

Here is a screenshot of the nice logic flow editor:

Passing Values Between Pages in Oracle Application Builder Cloud Service

$
0
0

A common use case for applications that have multiple pages is passing values between pages. For example you might want to pick up a specific record or value in one page and then use that as a parameter for a query in another page.

In the February release or Oracle Application Builder Cloud Service as part of the extension hook points that we provide, we added support for shared resources. These are JavaScript libraries you can add to your application - and that can be used across your app.

In the demo below I show you how you can use the built-in sample template for a shared resource to define a variable, and then how that variable is exposed in various places in the product through the expression builder allowing you to set its value in one page and use that value in another one.

Check it out:


Passing Business Object Values to Custom UI Components in ABCS

$
0
0

This quick one is based on a customer question about Oracle Application Builder Cloud Service. The scenario is that we have a business object that has a field that contains the URL to an image. We want to be able to show that image on a page in Oracle Application Builder Cloud Service.

animated GIF

To do that I add a custom UI component object to the details (or edit) page of a record - then I switched the HTML of that object to be: <img id="logoimg"/>

custom code

I then added a button to the page and added a bit of custom JavaScript code in its action as follow:

var img = document.getElementById('logoimg');

img.src=$Company.getValue('Logo');

resolve();

This code simply locates the custom object on the page using the object id and then sets the src property of the img html tag to match the value of the field in the business object.

Code in Button

CI, DevOps and ALM for Oracle SOA Suite with Oracle Developer Cloud Service

$
0
0

We have a lot of developers who are using JDeveloper to develop applications with Oracle SOA Suite, and in this blog I wanted to show them how the combination of JDeveloper along with Oracle Developer Cloud Service can help automate their whole development and delivery lifecycle.

One unique aspect of Developer Cloud Service is that it has an instance of JDeveloper available in the build environment. This allows customers who are building Oracle SOA artifacts to leverage the OJDeploy mechanism to package their applications as part of a continuous integration cycle just like they do during development time.

With the improved DevCS integration that we added in JDeveloper 12.2.1, developers can go beyond integration with the Git server offered by DevCS and can now interact with the DevCS task tracking system directly as well as associate code changes to specific tasks they are working on.  

In this 10 minutes video I show:

  • Creating Ant based builds for Oracle SOA artifacts
  • Automating Continuous Integration build and packaging for Oracle SOA from Developer Cloud Service
  • Managing SOA project code with Git and Developer Cloud Service 
  • Tracking tasks from JDeveloper and monitor agile development in Developer Cloud Service

By the way, for those who rather use Maven to automate their builds - this is totally possible and supported in DevCS as well. There is a set of videos that show you how to do that here

(If you haven't seen how quick and easy it is to create a DevCS project, create a git repo, track tasks and create agile team boards - see this video and this one too).

Note that developers get access to Developer Cloud Service with every subscription to the Oracle SOA Cloud Service. 

Here are the two ant files used in the video:

Note that in the build.properties you'll want to change the application and project names to match the ones you are working on.

As you see in the video the build.xml is generated for you automatically and you just need to add the line:

<propertyenvironment="env"/>

build.properties

oracle.commons=../../../../oracle_common/
oracle.commons=../../../../oracle_common/
install.dir=../../../..
oracle.home=${env.ORACLE_HOME_SOA_12_2_1}
oracle.jdeveloper.workspace.path=${env.WORKSPACE}/e2e-1201-composites.jws
middleware.home=${env.MIDDLEWARE_HOME_SOA_12_2_1}
workspace=${env.WORKSPACE}
oracle.jdeveloper.ant.library=${env.ORACLE_HOME_SOA_12_2_1}/jdev/lib/ant-jdeveloper.jar
oracle.jdeveloper.deploy.dir=${env.WORKSPACE}/ProcessOrder/deploy
oracle.jdeveloper.ojdeploy.path=${oracle.home}/jdev/bin/ojdeploy
javac.nowarn=off
oracle.jdeveloper.project.name=ProcessOrder
oracle.jdeveloper.deploy.outputfile=${env.WORKSPACE}/e2e-1201-composites/ProcessOrder/deploy/${profile.name}
output.dir=classes
javac.deprecation=off
oracle.jdeveloper.deploy.profile.name=*
javac.debug=on

build.xml

<?xml version="1.0" encoding="UTF-8"?>
<!--Ant buildfile generated by Oracle JDeveloper-->
<!--Generated Jul 25, 2016 5:11:09 PM-->
<projectxmlns="antlib:org.apache.tools.ant"name="ProcessOrder"default="all"basedir=".">
<propertyenvironment="env"/>
<propertyfile="build.properties"/>
<pathid="library.SOA.Designtime">
<pathelementlocation="${install.dir}/soa/plugins/jdeveloper/extensions/oracle.sca.modeler.jar"/>
</path>
<pathid="library.SOA.Runtime">
<pathelementlocation="${install.dir}/soa/soa/modules/oracle.soa.fabric_11.1.1/fabric-runtime.jar"/>
<pathelementlocation="${install.dir}/soa/soa/modules/oracle.soa.fabric_11.1.1/tracking-api.jar"/>
<pathelementlocation="${install.dir}/soa/soa/modules/oracle.soa.fabric_11.1.1/tracking-core.jar"/>
<pathelementlocation="${install.dir}/soa/soa/modules/oracle.soa.fabric_11.1.1/edn.jar"/>
<pathelementlocation="${install.dir}/soa/soa/modules/oracle.soa.mgmt_11.1.1/soa-infra-mgmt.jar"/>
<pathelementlocation="${oracle.commons}/modules/com.oracle.webservices.fabric-common-api.jar"/>
</path>
<pathid="library.BPEL.Runtime">
<pathelementlocation="${install.dir}/soa/soa/modules/oracle.soa.bpel_11.1.1/orabpel.jar"/>
</path>
<pathid="library.Mediator.Runtime">
<pathelementlocation="${install.dir}/soa/soa/modules/oracle.soa.mediator_11.1.1/mediator_client.jar"/>
</path>
<pathid="library.MDS.Runtime">
<pathelementlocation="${oracle.commons}/modules/oracle.mds/mdsrt.jar"/>
</path>
<pathid="library.BC4J.Service.Runtime">
<pathelementlocation="${oracle.commons}/modules/oracle.adf.model/adfbcsvc.jar"/>
<pathelementlocation="${oracle.commons}/modules/oracle.adf.model/adfbcsvc-share.jar"/>
<pathelementlocation="${oracle.commons}/modules/commonj.sdo.backward.jar"/>
<pathelementlocation="${oracle.commons}/modules/commonj.sdo.jar"/>
<pathelementlocation="${oracle.commons}/modules/oracle.toplink/eclipselink.jar"/>
<pathelementlocation="${oracle.commons}/modules/com.oracle.webservices.fmw.wsclient-impl.jar"/>
<pathelementlocation="${oracle.commons}/modules/com.oracle.webservices.fmw.jrf-ws-api.jar"/>
<pathelementlocation="${oracle.commons}/modules/com.oracle.webservices.fmw.web-common-schemas-impl.jar"/>
</path>
<pathid="classpath">
<pathrefid="library.SOA.Designtime"/>
<pathrefid="library.SOA.Runtime"/>
<pathrefid="library.BPEL.Runtime"/>
<pathrefid="library.Mediator.Runtime"/>
<pathrefid="library.MDS.Runtime"/>
<pathrefid="library.BC4J.Service.Runtime"/>
</path>
<targetname="init">
<tstamp/>
<mkdirdir="${output.dir}"/>
</target>
<targetname="all"description="Build the project"depends="deploy,compile,copy"/>
<targetname="clean"description="Clean the project">
<deleteincludeemptydirs="true"quiet="true">
<filesetdir="${output.dir}"includes="**/*"/>
</delete>
</target>
<targetname="deploy"description="Deploy JDeveloper profiles"depends="init">
<taskdefname="ojdeploy"classname="oracle.jdeveloper.deploy.ant.OJDeployAntTask"uri="oraclelib:OJDeployAntTask"
classpath="${oracle.jdeveloper.ant.library}"/>
<ora:ojdeployxmlns:ora="oraclelib:OJDeployAntTask"executable="${oracle.jdeveloper.ojdeploy.path}"
ora:buildscript="${oracle.jdeveloper.deploy.dir}/ojdeploy-build.xml"
ora:statuslog="${oracle.jdeveloper.deploy.dir}/ojdeploy-statuslog.xml">
<ora:deploy>
<ora:parametername="workspace"value="${oracle.jdeveloper.workspace.path}"/>
<ora:parametername="project"value="${oracle.jdeveloper.project.name}"/>
<ora:parametername="profile"value="${oracle.jdeveloper.deploy.profile.name}"/>
<ora:parametername="nocompile"value="false"/>
<ora:parametername="outputfile"value="${oracle.jdeveloper.deploy.outputfile}"/>
</ora:deploy>
</ora:ojdeploy>
</target>
<targetname="compile"description="Compile Java source files"depends="init">
<javacdestdir="${output.dir}"classpathref="classpath"debug="${javac.debug}"nowarn="${javac.nowarn}"
deprecation="${javac.deprecation}"encoding="UTF8"source="1.8"target="1.8">
<srcpath="SOA/SCA-INF/src"/>
</javac>
</target>
<targetname="copy"description="Copy files to output directory"depends="init">
<patternsetid="copy.patterns">
<includename="**/*.GIF"/>
<includename="**/*.JPEG"/>
<includename="**/*.JPG"/>
<includename="**/*.PNG"/>
<includename="**/*.cpx"/>
<includename="**/*.dcx"/>
<includename="**/*.ejx"/>
<includename="**/*.gif"/>
<includename="**/*.ini"/>
<includename="**/*.jpeg"/>
<includename="**/*.jpg"/>
<includename="**/*.png"/>
<includename="**/*.properties"/>
<includename="**/*.sva"/>
<includename="**/*.tag"/>
<includename="**/*.tld"/>
<includename="**/*.wsdl"/>
<includename="**/*.xcfg"/>
<includename="**/*.xlf"/>
<includename="**/*.xml"/>
<includename="**/*.xsd"/>
<includename="**/*.xsl"/>
<includename="**/*.exm"/>
<includename="**/*.xml"/>
<excludename="build.xml"/>
</patternset>
<copytodir="${output.dir}">
<filesetdir="SOA/SCA-INF/src">
<patternsetrefid="copy.patterns"/>
</fileset>
<filesetdir=".">
<patternsetrefid="copy.patterns"/>
</fileset>
</copy>
</target>
</project>

Oracle OpenWorld 2016 and Where You'll Find Me

$
0
0

It's that time of the year - Oracle OpenWorld is taking place starting on Sunday - and my calendar is full of activities.

I'm going to be presenting on multiple tools and frameworks including sessions on Oracle Application Builder Cloud Service, Oracle JDeveloper and Oracle ADF, Oracle Developer Cloud Service and a session discussing which dev framework and tool is right for you. 

In case you want to catch me at #OOW16 here is my schedule:

Simplified Multichannel App Development for Business Users [CON2884] 
Monday, Sep 19, 1:45 p.m. | Moscone West - 2005 - A session where I'll demo how easy it is to create and host your own applications with Oracle Application Builder Cloud Service.

Oracle Application Development Framework and Oracle JDeveloper: What’s New [CON1226]
Tuesday, Sep 20, 4:00 p.m. | Moscone West - 2018 - A quick review of the new features we added in the 12.2.* releases of JDeveloper and ADF

Oracle Development Tools and Frameworks: Which One Is Right for You? [MTE6650]
Tuesday, Sep 20, 6:15 p.m. | Moscone South - 301- A session for all of those who are not sure which technology is right for them, or for those who want to ask me "is Oracle [fill in the product name] dead?"

A Guide to Cloud-Based Agile Development Methodology Adoption [CON1947]
Wednesday, Sep 21, 12:15 p.m. | Moscone West - 2018 - A demo focused session that show cases how Oracle Developer Cloud Service helps your team adopt agile development. 

No Code Required: Application Development and Publishing Made Easy [HOL7402]
Tuesday, Sep 20, 11:30 a.m. | Hotel Nikko - Nikko Ballroom III (3rd Floor)
Monday, Sep 19, 4:15 p.m. | Hotel Nikko - Nikko Ballroom III (3rd Floor) - Your two chances to try out  the new Oracle Application Builder Cloud Service and develop your first app

Agile Development Management and Continuous Integration Simplified [HOL7403]
Wednesday, Sep 21, 8:00 a.m. | Hotel Nikko - Nikko Ballroom III (3rd Floor) - Your chance to manage a whole development team agile process using Oracle Developer Cloud Service

I'm also going to be in the mobile theater in the mobile area in the demo ground on Tue and Wed at 10:30 doing a quick demo of ABCS and its mobile capabilities.

In between these sessions, you'll be able to find me at the Oracle Demoground doing some shifts in the Oracle ADF booth (which is in Moscone South far left corner) - the rest of our pods are close by including JET, DevCS, ABCS and even Forms :-)

And if I'll have any spare time, I'll try and catch some of the other session on this list of Dev tools and framework sessions

See you next week.

oowSF

New Capabilities for the Status Meter Component in ADF

$
0
0

While building a demo of new Oracle ADF features for my OOW session, I came across some nice new functionality in the dvt status meter gauge component (dvt:statusMeterGauge), specifically the round one which has become quite popular in various Oracle Alta UIs.

Turns out you can turn the dial and cut it so it shows just parts of a circle.

By adding thresholds you can use it as a replacement for the dial gauge.

Here is how it can look: 

status meter

Here is the code used:

                            <dvt:statusMeterGauge orientation="circular" inlineStyle="width:150px; height:100px;"

                                                  id="statusMeterGauge1" maximum="25000"

                                                  value="#{bindings.Salary.inputValue}" minimum="0" startAngle="180" angleExtent="180"

                                                  title="Salary">

                                <dvt:gaugeMetricLabel rendered="true" id="gml1"/>

                                <dvt:gaugeThreshold id="gt1" maximum="4000" color="red"/>

                                <dvt:gaugeThreshold id="gt2" maximum="6000" color="yellow"/>

                                <dvt:gaugeThreshold id="gt3" maximum="20000" color="green"/>

                            </dvt:statusMeterGauge>

Automatic Time-Based Dismiss for Oracle ADF Popups

$
0
0

This blog entry is about a nice little new feature that was introduced into ADF in the 12.2.1.1 version, and didn't get a mention in the "what's new" document.

Self dismissing messages  are popping up everywhere these days (when you get an email, when you have a new calendar invite etc), and you might want to use this UI pattern in your ADF apps too.

There is a new property for af:popup components - autoDismissalTimeout - that allow popups to automatically dismiss after a certain number of seconds that you can specify. This is very useful for all sort of messages that you want to show to the user, but you don't want to require the user to do any activity to dismiss.

Here is an example of such a message that you can associate with a save button:

popup sample

And here is the code you'll need to do this:

            <af:popup id="p1" animate="true" autoDismissalTimeout="2">

                <af:panelGroupLayout id="pgl1" layout="horizontal">

                    <af:image source="stat_confirm_16.png" id="i1"/>

                    <af:outputFormatted value="Your changes have been saved" id="of1"/>

                </af:panelGroupLayout>

            </af:popup>

One more (small) reason to adopt the new versions of Oracle ADF! 

Viewing all 200 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>