Quantcast
Channel: Apps2Fusion Articles
Viewing all 930 articles
Browse latest View live

Fusion help guide - customization steps to make a field as required field

$
0
0

Example: Making Country code as mandatory field when adding phone number for a employee.(This document is applicable for Rel9 instance)

Precondition: Create a Sandbox and activate sandbox  before trying the steps on personalization or customization.

(Please refer Sandbox document for creating and activating sandbox)

1.Get into person management page

2.Search for any employee. And go to employee details. You will see the below screen  

 FG1


OTBI - Oracle Fusion Reporting

$
0
0

This tutorial deals with OTBI - Oracle Transactional Business Intelligence, which is an analysis tool used for creating reports.

By the end of this tutorial, you should be able to understand the architecture of OTBI, and how it works with Fusion; understand Subject Areas, Folders and Attributes; understand and use the BI Composer; create OTBI Analysis using BI Composer and OBIEE Answers; add Flexfields to OTBI; and create Cross-Subject Area Analysis.

OTBI Architecture:

 OTBI11

Arrays and Strings in JAVA

$
0
0

Objective:

In the previous article looping constructs and conditional statements in Java, we have seen different types of loops and conditional statement that are used in java. In this article we will learn Arrays and strings in Java.

 

Arrays:

An array is the data structure which hold the sequential value of the same type.You can create an array by using the new operator with the following syntax:

arrayRefVar = new dataType[arraySize]

The way to create an array is with the new operator. The next statement in the ArrayDemo program allocates an array with enough memory for 10 integer elements and assigns the array to the anArray variable.

// create an array of integers

anArray = new int[10];

If this statement is missing, then the compiler prints an error like the following, and compilation fails:

ArrayDemo.java:4: Variable anArray may not have been initialized.

 

The next few lines assign values to each element of the array:

anArray[0] = 100; // initialize first element

anArray[1] = 200; // initialize second element

anArray[2] = 300; // and so forth

Each array element is accessed by its numerical index:

 

System.out.println("Element 1 at index 0: " + anArray[0]);

System.out.println("Element 2 at index 1: " + anArray[1]);

System.out.println("Element 3 at index 2: " + anArray[2]);

 

Alternatively, you can use the shortcut syntax to create and initialize an array:

int[ ] anArray = {

   100, 200, 300,

   400, 500, 600,

   700, 800, 900, 1000

};

Here the length of the array is determined by the number of values provided between braces and separated by commas.

Example 1:

c1.png

for(int i=0;i<a.length;i++)

The above for loop is known as the declaration of the array.

Basic Operations with Sandbox

$
0
0

Creating a sandbox:

1.Login to fusion and go to manage sandbox under administration.

SB1

Overloading, Inheritance and Polymorphism in JAVA

$
0
0

Objective:

In the previous article Arrays and string in JAVA, we learned about the arrays, Strings and different String functions that are used in Java programming. In this article we will learn about the Overloading, Inheritance and Polymorphesim in Java.

Overloading:

Method Overloading is a feature that allows a class to have two or more methods having same name, if their argument lists are different. In the last tutorial we discussed Constructor overloading that allows a class to have more than one constructors having different argument lists.

Argument lists could differ in –

1. Number of parameters.

2. Data type of parameters.

3. Sequence of Data type of parameters.

Method overloading is also known as Static Polymorphism. Static polymorphism is also known as complie time binding or early binding.

 

Example 1: Overloading – Different Number of parameters in argument list.

d1.png

d2.png

Static variable-

It is a variable which belongs to the class and not toobject(instance)Static variables are initialized only once , at the start of the execution . These variables will be initialized first, before the initialization of any instance variables. A single copy to be shared by all instances of the class. A static variable can be accessed directly by the class name and doesn’t need any object.

Syntax : <class-name>.<variable-name>

Static Method:

It is a method which belongs to the class and not to the object(instance).

A static method can access only static data. It can not access non-static data (instance variables)

A static method can call only other static methods and can not call a non-static method from it.

A static method can be accessed directly by the class name and doesn’t need any object.

Syntax : <class-name>.<method-name>

A static method cannot refer to "this" or "super" keywords in anyway

d3.png

// Output:

d4.png

 

Inheritance:

It is an object oriented concept.

It is used to derive the new classes on the basis of existing one.

The main feature of inheritance is code reusablility.

The idea of inheritance is simple but powerful: When you want to create a new class and there is already a class that includes some of the code that you want, you can derive your new class from the existing class. In doing this, you can reuse the fields and methods of the existing class without having to write (and debug!) them yourself.

A subclass inherits all the members (fields, methods, and nested classes) from its superclass. Constructors are not members, so they are not inherited by subclasses, but the constructor of the superclass can be invoked from the subclass.

 

Example of Inheritance:

public class Bicycle {
   // the Bicycle class has three fields
   public int cadence;
   public int gear;
   public int speed;
   // the Bicycle class has one constructor
   public Bicycle(int startCadence, int startSpeed, int startGear) {
       gear = startGear;
       cadence = startCadence;
       speed = startSpeed;
   }
   // the Bicycle class has four methods
   public void setCadence(int newValue) {
       cadence = newValue;
   }
       public void setGear(int newValue) {
       gear = newValue;
   }
       public void applyBrake(int decrement) {
       speed -= decrement;
   }
      public void speedUp(int increment) {
       speed += increment;
   }
       
}

A class declaration for a MountainBike class that is a subclass of Bicycle might look like this:

public class MountainBike extends Bicycle {
       
   // the MountainBike subclass adds one field
   public int seatHeight;

   // the MountainBike subclass has one constructor
   public MountainBike(int startHeight,
                       int startCadence,
                       int startSpeed,
                       int startGear) {
       super(startCadence, startSpeed, startGear);
       seatHeight = startHeight;
   }   
       
   // the MountainBike subclass adds one method
   public void setHeight(int newValue) {
       seatHeight = newValue;
   }   
}
MountainBike inherits all the fields and methods of Bicycle and adds the field seatHeight and a method to set it. Except for the constructor, it is as if you had written a newMountainBike class entirely from scratch, with four fields and five methods. However, you didn't have to do all the work. This would be especially valuable if the methods in the Bicycleclass were complex and had taken substantial time to debug.

Polymorphism:

Polymorphism refers to a principle in biology in which an organism or species can have many different forms or stages. This principle can also be applied to object-oriented programming and languages like the Java language. Subclasses of a class can define their own unique behaviors and yet share some of the same functionality of the parent class.

Polymorphism can be demonstrated with a minor modification to the Bicycle class. For example, a printDescription method could be added to the class that displays all the data currently stored in an instance.

public void printDescription(){
   System.out.println("\nBike is " + "in gear " + this.gear
       + " with a cadence of " + this.cadence +
       " and travelling at a speed of " + this.speed + ". ");
}
To demonstrate polymorphic features in the Java language, extend the Bicycle class with a MountainBike and a RoadBike class. For MountainBike, add a field for suspension, which is a String value that indicates if the bike has a front shock absorber, Front. Or, the bike has a front and back shock absorber, Dual.

Here is the updated class:

public class MountainBike extends Bicycle {
   private String suspension;

   public MountainBike(
              int startCadence,
              int startSpeed,
              int startGear,
              String suspensionType){
       super(startCadence,
             startSpeed,
             startGear);
       this.setSuspension(suspensionType);
   }

   public String getSuspension(){
     return this.suspension;
   }

   public void setSuspension(String suspensionType) {
       this.suspension = suspensionType;
   }

   public void printDescription() {
       super.printDescription();
       System.out.println("The " + "MountainBike has a" +
           getSuspension() + " suspension.");
   }
}

Note the overridden printDescription method. In addition to the information provided before, additional data about the suspension is included to the output.

Next, create the RoadBike class. Because road or racing bikes have skinny tires, add an attribute to track the tire width. Here is the RoadBike class:

public class RoadBike extends Bicycle{
   // In millimeters (mm)
   private int tireWidth;

   public RoadBike(int startCadence,
                   int startSpeed,
                   int startGear,
                   int newTireWidth){
       super(startCadence,
             startSpeed,
             startGear);
       this.setTireWidth(newTireWidth);
   }

   public int getTireWidth(){
     return this.tireWidth;
   }

   public void setTireWidth(int newTireWidth){
       this.tireWidth = newTireWidth;
   }

   public void printDescription(){
       super.printDescription();
       System.out.println("The RoadBike" + " has " + getTireWidth() +
           " MM tires.");
   }
}
Note that once again, the printDescription method has been overridden. This time, information about the tire width is displayed.

To summarize, there are three classes: Bicycle, MountainBike, and RoadBike. The two subclasses override the printDescription method and print unique information.

Here is a test program that creates three Bicycle variables. Each variable is assigned to one of the three bicycle classes. Each variable is then printed.

public class TestBikes {
 public static void main(String[] args){
   Bicycle bike01, bike02, bike03;
   bike01 = new Bicycle(20, 10, 1);
   bike02 = new MountainBike(20, 10, 5, "Dual");
   bike03 = new RoadBike(40, 20, 8, 23);

   bike01.printDescription();
   bike02.printDescription();
   bike03.printDescription();
 }
}
//Output:

Bike is in gear 1 with a cadence of 20 and travelling at a speed of 10.
Bike is in gear 5 with a cadence of 20 and travelling at a speed of 10.
The MountainBike has a Dual suspension.
Bike is in gear 8 with a cadence of 40 and travelling at a speed of 20.
The RoadBike has 23 MM tires.

Introduction to Application Development Framework ( ADF)

$
0
0

Objective :

In this article we will discuss basics of Application Development Framework and how to use JDeveloper to develop business components . 

What is Application Development Framework ( ADF):

Built on top of the MVC-based JavaServer Faces framework, Oracle Application Development Framework (ADF) forms the foundation for WebCenter Portal's components and services. ADF is an innovative, yet mature Java EE development framework available from Oracle, and, unlike most other frameworks, is directly supported and enabled by the award winning development environment, Oracle JDeveloper 11g.ADF provides unified access to back-end technologies like databases, web services, XML, CSV, BPEL, and many more. Furthermore, ADF provides data binding to connect UI with back-end data controls.Out of the box, ADF provides more than 100 data aware, JSF view components. The fine-grained JAAS security model gives developers and administrators full control over all aspects of application security

It is reference implementation of Java Server Faces(JSF) . In the year 2005/2006 Sun Microsystems has come with specifications known as  JSF. They had specification / reference and implementation both .  Earlier there were limited UI components available on other  framework . The design goal was to put  every UI components available in swing application such as mouse event , and other event sources etc into JSF that is available on web .Now they are  available as a part of JSF implementation . JSF is a specification and ADF is reference implementation of  this specification . Oracle implemented ADF ,Apache implemented it  and named it as MyFaces , JBoss implemented it and named it as RichFaces .Not only 100 percent implementation of specification is done  they have also added much more features which are not part of specifications such as business components , task flows , Data Visualization Tool (for pictorial representation of data ) .ADF is the framework which is used by all Fusion Middleware products which can be OIM , OAM , Webcentre  . All FMW products are developed using JDeveloper . You need basic knowledge of ADF is required to  for customization / to modify the existing  task flows or pages .

 

Business Components in ADF:

Business logic and data access logic are available in Business Components. In essence there are three types of Business Components available .

1) Entity Objects( EO):

Some of the frameworks are available to communicate with database . Being a java programmer everyone one wants to view even the database in the form of java object . .For that there are so many frameworks introduced and they are called as Object Relational Mapping(ORM) framework. Here the tables are converted into java classes and each row will be converted into an object and that represents one row of that table. For example let’s say we have table called Student and has the following columns .

Column Name

Data Type

RollNo

int

Name

varchar(30)

Address

Varchar(30)

What this ORM framework does is it creates a class with the same mapping to the table . For example it generates the  following class Student based on table having the variables mapping to the columns of the Student table and has getter/setter methods corresponding to the variables .

class Student

{

int rollno;

String name;

String address;

Student(int r, String n, String ad)  // Constructor which will be called when the object is created

{

rollno=r;

name=n;

address=ad

}

public void setRollno(int roll)

{

rollno=roll;

}

public int rollno()

{

return rollno;

}

public void setName(String na)

{

name=na;

}

public int name()

{

return name;

}

public void setAddress(String addr)

{

address=addr;

}

public String getAddress()

{

return address;

}

}

Now we will create an object of the class Student.

Student s = new Student(21,”John”,”New York”);  

Once you create the object, constructor will be called and the values passed to the constructor will be saved into the variables of the class . Also one new record will be inserted in the table Student . Now this we call it as entity object since it represents one entity of the table. We can modify the values by calling setter method .

s.setRollNo(45);  So the rollno 23 which was inserted will be replaced by 45 i,e the corresponding row gets updated . So if you create a new object you will find a new row , if you delete the object that record gets deleted from the table . So if there are 100 records in the table you will find that 100 objects in the memory .Entity object represents each row in the table and corresponding class can be called as an entity class . Having getter/setter methods or mutators method is mandatory , apart from this custom methods can be added to define your custom logic . Suppose if you have a product table containing two columns quantity and price , and a line total is to be displayed on a page , which is not a column in the table . To display the total you can define one transient attribute as line total evaluate it to quantity * price . And we are marking it as transient so that it will not be persisted to the table but you can display it on the screen .Likewise you can define your own logic in the entity classes

2)View Objects( VO):

View Objects are created by keeping the web page in mind . So, for example on a web page I want to display all the students . There can be 100 students that are to displayed , so all 100 entity objects are encapsulated in VO and the data required to be displayed on the page will be available in this VO . For example entity object may have name , rollno , address , class , blood group , class etc , probably all these values are not required to displayed on page , so you can add all the 100 entity objects to the VO and you can remove the attributes which you are not displaying on the page . Ultimately the data required to be displayed on UI page is available with VO  .It may also have some associated entity objects For example we may have two different objects employee and department entity objects . If you want to display the employee and its department , then on a VO we can add employee entity object  and department entity object associate them with an association and display it on a page . VO can have one or more entity objects of different types which are associated .

 

3)Application Modules (AM):

It manages the transaction. It provides all the required transaction services . Application Modules are created by keeping user task in mind . To complete one end user task what all you need is added to to the application module. Application Module encapsulates all the VO’s which are required to complete one end user task/ use case . For example to transfer  money from my account  ,I will open Internet Banking Application . In the first page I will select my account , in the second page I will select the beneficiary ,  in third page I will enter OTP / some credit/debit card details and on the fourth page I will transfer it . So this is what I have completed one user task(use case) . All these 4 pages will be having 4 VO’s in the background , and all 4 VO’s will be added to the application module so that it manages the transaction for all those VO’s.If anything goes wrong in third page everything gets rolled back .It also used to expose the the business services to the world . For example consider HDFC bank’s loan department .There are so many financial firms that provide the loan on behalf of HDFC bank . So those should be able to submit the loan applications to the HDFC bank and retrieve the rate of interest and all those details . For that bank has  to make its  business services available to their business partner’s applications .

Using JDeveloper :

JDeveloper is the tool / IDE / editor meant for developing ADF Application .

Simple ADF application demonstration:

  1. 1)We will start the integrated Weblogic Server  or OIM server can also be used as well .

 

2) Create a New Application by clicking on New Application .

3)Name the application for example as CerebraApp and select Fusion Web Application(ADF) as Application Template and click on Next.

 

4) By default Project name will be Model we will change it to BusinessServices and click on Next .

5) Leave the default package name as model and click on Next .

 

6) Change the default ViewController project name to UIProject and click on Next .

 

7) Keep the default Package name as view and click on Finsh.

 

8) Two projects will be created  BusinessServices & UIProject within CerebraApp one for Busines services and one for UI . Also there will be checklists

Check List:

  1. Plan your application and check it to Done once complete

You can click on Developer Guide and download the ADF guide .

b.  Connect to a Database . If your  application  uses  database you will have to create a Database Connection .

Currently we will not perform this step since we don’t want database connection .Similarly each of the task can be performed and mark it as done . It helps  the developer how to start with . We will directly start with the project currently and ignore the check list .

 

9) Now in BusinessServices project I will add my business components .

-> Right click BusinessServices project and click on New.

 

-> Select ADF Business Components under Business Tier from Categories and Business Components from Tables and click on Ok

-> It will ask for connection  , we will add one database connection .

  

Once you Test Connection it should be successful .If not you need enter correct database details .

 

Oracle Fusion Payroll - Common Application Configuration (Part 1)

$
0
0

This tutorial deals with Fusion Payroll, and how it functions.

Having dealt with an Overview of Oracle Fusion and the Functional Setup Manager (FSM), we will now look at Common Application Configuration.

The topics covered in this first part of the tutorial are:

● Initial Setup

● Synchronisation of Users and Roles

● Implementation Users Setup

● Geographies

● Currencies

● Enterprise - An Overview

Initial Setup

Any user or goal definition comes under Oracle Identity Management (OIM). It maintains Lightweight Directory Access Protocol (LDAP) user accounts for users of Oracle. OIM also stores the definitions of abstract, job, and data roles and holds information about roles that are provisioned to users.

It can be a non-cloud or a cloud implementation, and each of them have their own super user. The FA Admin Superuser is for non-cloud implementation, while Oracle Cloud Administration User is for cloud implementation.                        

First, sign into Oracle Identity Manager (OIM) as the OIM Administration user, and provision the IT Security Manager job role with roles for user and role management. This enables the superuser account, which is provisioned with the IT Security Manager role to create implementation users. Then, the offering to be implemented has to be selected and finally, the setup tasks needed to implement the offering are generated.

The flowchart below depicts the role-assigning process clearly.

1

Fig. 1 - Flowchart explaining the OIM process

Installation steps of OBIEE 11g on windows 7 64 bits

$
0
0

This article will show the installation steps of OBIEE 11g on windows 7 64 bits

Download Software

Oracle Database 11g

 

You can find the database installation steps at apps2fsion_database

 

OBIEE 11g(11.1.1.7.0) & Oracle RCU (11.1.1.7.0)

Download OBIEE 11g(11.1.1.7.0)  and RCU

http://www.oracle.com/technetwork/middleware/bi-enterprise-edition/downloads/bi-downloads-1923016.html

 

Installation

Configuring RCU

Extract the downloaded file

Go to folder rcuHome\BIN

Double click on rcu.bat file

 

Click Next to continue

 

Select create option and click on Next

 

Here enter the database details, use sys user to create schemas

 

 

Here we have to select Business Intelligence Platform

 

 

Here I am keeping same password for all schemas.

 

Click on next

 

 

Finally click on create and it will start creating schemas on database

 

Once it is done click on close

 

Install a Loopback Adapter before OBIEE Insatallation

1.) Go to run and type hdwwiz.exe then press enter. This will launch Add hardware wizard.Click Next.

2.) Now Select “Install the hardware that I manually select from a list (Advanced)”. Click next.

3.) Choose “Network adapters” from list and click next.

4.) In left pane under Manufacturer select Microsoft then in right pane select “Microsoft

KM-TEST Loopback Adapters”. In Windows 7 it will be listed as “Microsoft Loopback Adapter” Select it and then click next.

5.) Just hit next and it will start installation. Click Finish when the installation completes.

6.) Now to confirm installation right click Computer, select Properties. Click Device

Manager and expand Network Adapter. Now you can see the Loopback Adapter listed there.Installing OBIEE 11g

 

Installing OBIEE

Go to bishiphome\Disk1 folder

Double click on setup.exe file

Click next to start the installation

 

Select Simple install and click next

 

 

Now give the patch for Middleware home

 

Here give the weblogic password

 

Select  Oracle business Intelligence

 

Here we have to provide the connection string ie  Database hostname:port:servicename

My database is on same system so I am using localhost the port is default 1521 port of Oracle database and my service name is orcl

Also give the schema password that we have given while configuring rcu.

 

 

Follow the above step again for next schema

 

Uncheck I wish to receive security updates via My Oracle Support

Click on Next

 

The above step will prompt a warning just click on yes

 

Now we are at summary part click on install

 

It will take time to install

 

Once installation is done click on finish it will open the BI Dashboard

 

Step to Load BISAMPLE Data:

Connect to database with sys user

$ sqlplus / as sysdba

Create a USER BISAMPLE in your Database also grant him dba privilege

SQL> grant dba to BISAMPLE identified by bisample;

Grant succeeded.

Steps to import:

Place the DMP files in any Drive on your machine and

copy the path with file name.

Connect with BISAMPLE user

Open command prompt

And follow the command

 

>imp

It will ask for username and password

Use BISAMPLE user here

Just enter

Now give the complete path along with name of DMP file and press enter it will load the tables

 


Oracle Fusion Payroll - Common Application Configuration (Part 2)

$
0
0

Having dealt with an overview of Oracle Fusion and the Functional Setup Manager (FSM), we will continue from Common Application Configuration(Part 1)

The topics covered in this second part of the tutorial are:

● Legal Entities, Divisions and Business Units

● Reference Data Sets

● Enterprise - A Use Case

● Enterprise Structures Configurator

● Legal Jurisdictions and Authorities

● Legislative Data Groups, Payroll Statutory Units, Legal Employers, Tax Reporting Units

Abstract Class in JAVA

$
0
0

Objective:

In the previous article we studied about Overloading, Inheritance and Polymorphesim in Java. In this article we will see the detailed description of Abstract class and method in Java.

Abstract class:

It is a type of class but this class is not full implemented class because it is not with abstract keyword and it will have 0 to n abstract class and it can also have concrete methods.

Abstract class are also known as Non-concrete methods.

Concrete methods:

It cant create instance of abstract class.

We can create only refrences.

We cant apply static and final keyword to abstract methods but we can apply static and final keywords to non- abstract methods.

An abstract class is a class that is declared abstract—it may or may not include abstract methods. Abstract classes cannot be instantiated, but they can be subclassed.

An abstract method is a method that is declared without an implementation (without braces, and followed by a semicolon), like this:

abstract void moveTo(double deltaX, double deltaY);

If a class includes abstract methods, then the class itself must be declared abstract, as in:

public abstract class GraphicObject {
  // declare fields
  // declare nonabstract methods
  abstract void draw();
}
When an abstract class is subclassed, the subclass usually provides implementations for all of the abstract methods in its parent class. However, if it does not, then the subclass must also be declared abstract.

abstract class GraphicObject {
   int x, y;
   ...
   void moveTo(int newX, int newY) {
       ...
   }
   abstract void draw();
   abstract void resize();
}

Each nonabstract subclass of GraphicObject, such as Circle and Rectangle, must provide implementations for the draw and resize methods:

class Circle extends GraphicObject {
   void draw() {
       ...
   }
   void resize() {
       ...
   }
}
class Rectangle extends GraphicObject {
   void draw() {
       ...
   }
   void resize() {
       ...
   }
}

 

Example:

abstract class Bike{

  abstract void run();

}

 

class Honda4 extends Bike{

void run(){System.out.println("running safely..");}

 

public static void main(String args[]){

 Bike obj = new Honda4();

 obj.run();

}

}

 

//output:

compiled by: javacHonda4.java

Runby: javaHonda4

running safely..

 

Abstract keyword is used to make a class abstract.

Abstract class can’t be instantiated.

We can use abstract keyword to create an abstract method, an abstract method doesn’t have body.

If a class have abstract methods, then the class also needs to be made abstract using abstract keyword, else it will not compile.

Its not necessary to have abstract classes to have abstract method.

If abstract class doesn’t have any method implementation, its better to use interface because java doesn’t support multiple class inheritance.

The subclass of abstract class must implement all the abstract methods unless the subclass is also an abstract class.

All the methods in an interface are implicitly abstract unless the interface methods are static or default. Static methods and default methods in interfaces are added in Java 8, for more details read Java 8 interface changes.

Abstract classes can implement interfaces without even providing the implementation of interface methods.

Abstract classes are used to provide common method implementation to all the subclasses or to provide default implementation.

We can run abstract class like any other class if it has main() method.

 

e1.png

 

e2.png

 

e4.png

 

e6.png



//OUTPUT:

e3.png

Deploying UI page in ADF

$
0
0

Objective :

In this article we will see how to deploy a UI page in ADF to display employee information . In the previous article Introduction To Application Framework Developmentwe have seen how to create Business components in ADF  and use JDeveloper .

Creating UI page on ADF to display employee information .

1)Select the UI project and Right click on it and click on New

2) Select JSF from Web Tier and JSF Page from Items and click on Ok. JSF Page is nothing but a JSP page with ADF component

3) Keep the default name “untitled1.jspx” of the  page as it is and click on OK.

Creating Recurring Invoice in Oracle Fusion Application

$
0
0

Let’s discuss about new Payable feature introduced in Oracle Fusion Payables. This features helps to create Recurring Invoices across multiple periods for regular expenses like rent or lease Expenses. Invoices that need to be created and paid on a regular basis, can be created using the recurring invoices functionality available in Oracle Fusion Payables. We need to create an invoice just once and link a general purpose calendar and define the from and to periods of the calendar for which the invoices are to be generated. This feature is just like recurring Journal in General Ledger.

INV 1

How to create Recurring Invoices
1. On the Invoices work area, click the Create Recurring Invoices task to open the Create Recurring Invoices spreadsheet.
2. Click yes to connect to the application.
3. Sign in to Oracle Fusion Applications.
4. Complete the fields, as shown in this table.
Field                           Value
Business Unit             Select the business unit
Invoice Number           RENT
Invoice Amount           12,000
Supplier                      Select the supplier
Supplier Site                Select the supplier site
Invoice Currency          USD
Calendar Name            Monthly
From Period                 Apr-14
To Period                    Mar-15
Distribution Set            Rent Expense
5. Click Create Recurring Invoices.
6. Review the upload results in the Template Row Status column and in the confirmation message.
7. Validate the invoices from the Manage Invoices page or through the Validate Payables Invoices process.

 

What Does It Do?
1. Download the spreadsheet from the Payable work Area.
2. Automatically create recurring invoices at regular intervals.
3. Create invoices for multiple periods from a single spreadsheet.
4. Capture details of the recurring transactions and generate invoices by clicking the ‘Generate’ button in the spreadsheet.

Solution for process holding the yum lock which does not allows yum command to execute .

$
0
0

Objective :

In this tutorial we will se how to resolve the error "Another app is currently holding the yum lock", when trying to execute yum command. 

Solution : 

YUM (Yellowdog Updater Modified) is an open source command-line as well as graphical based package management tool for RPM (RedHat Package Manager) based Linux systems. It allows users and system administrator to easily install, update, remove or search software packages on a systems.Sometines while using yum command you may get the error " Another app is currently holding the yum lock "  as shown in below screenshot which is due to one of the process holding the lock .

a1

The solution is to  identify the yum process/es that is holding the lock on yum and killing that PID/s. 

1)  To find out what's locking up yum,  run the following command 
# ps aux | grep yum

Interface in Java

$
0
0

Objective:

In this previous article Abstract class in Java, we had learned about the abstract methods and classes in java. In this article we will learn about the Interface in detail.

Interface:

Interface is used to provide specifications.

Those specifications must be implemented by the respective class.

Interface is a contract , whenever required we can inject the contract.

when  we inject the contract it is necessary to complete the contract.

We can declare the methods and methods are inherently abstract.

we can declare the variables but we cant change the values. All the interface variables are static and final.

class can implement ‘n’ interfaces.

interface can extend ‘n; interfaces.

if the class is not implementing the abstract methods then calss should be marked with abstract keyword. (we need to declare a classs with abstract class)

An interface in java is a blueprint of a class. It has static constants and abstract methods only.

The interface in java is a mechanism to achieve fully abstraction. There can be only abstract methods in the java interface not method body. It is used to achieve fully abstraction and multiple inheritance in Java.

In other words, Interface fields are public, static and final bydefault, and methods are public and abstract.

f1.png

In this example, Printable interface have only one method, its implementation is provided in the A class.

 

Extending Interface:

When a class implements an interface, you can think of the class as signing a contract, agreeing to perform the specific behaviors of the interface. If a class does not perform all the behaviors of the interface, the class must declare itself as abstract. A class uses the implements keyword to implement an interface. The implements keyword appears in the class declaration following the extends portion of the declaration.

Example:

f2.png

//Output: Hello

Example:

f3.png

f4.png

f5.png

f6.png

//OUTPUT:

f7.png

Extending multiple Interface:

A Java class can only extend one parent class. Multiple inheritance is not allowed. Interfaces are not classes, however, and an interface can extend more than one parent interface.The extends keyword is used once, and the parent interfaces are declared in a comma-separated list.

Tagging Interface:

The most common use of extending interfaces occurs when the parent interface does not contain any methods. For example, the MouseListener interface in the java.awt.event package extended java.util.EventListener, which is defined as:

package java.util;
public interface EventListener
{

…...

}

An interface with no methods in it is referred to as a tagging interface. There are two basic design purposes of tagging interfaces:

Creates a common parent: As with the EventListener interface, which is extended by dozens of other interfaces in the Java API, you can use a tagging interface to create a common parent among a group of interfaces. For example, when an interface extends EventListener, the JVM knows that this particular interface is going to be used in an event delegation scenario.

Adds a data type to a class: This situation is where the term tagging comes from. A class that implements a tagging interface does not need to define any methods (since the interface does not have any), but the class becomes an interface type through polymorphism.

Exception in JAVA

$
0
0

Objective: In the previous article Interface in Java we have learned about the Interfaces, Extending Interface and Extending Multiple Interface. In this article we will learn about the Exception in Java.

 

Exceptions:

In java, exception is an event that disrupts the normal flow of the program. It is an object which is thrown at runtime.

There are two types of Exceptions in Java:

  1. 1.Checked Exceptions

  2. 2.Unchecked Exceptions

  3. 3.Error

1. Checked exception: The classes that extend Throwable class except RuntimeException and Error are known as checked exceptions.     

e.g.IOException, SQLException etc. Checked exceptions are checked at compile-time.

2. Unchecked Exception: The classes that extend RuntimeException are known as unchecked exceptions e.g. ArithmeticException, NullPointerException, ArrayIndexOutOfBoundsException etc. Unchecked exceptions are not checked at compile-time rather they are checked at runtime.

There are given some scenarios where unchecked exceptions can occur. They are as follows:

 

  • ->Arithmetic Expression:

 

If we divide any number by zero, there occurs an ArithmeticException.

int a=50/0;//ArithmeticException  

 

  • ->Null Pointer Exception:

 

If we have null value in any variable, performing any operation by the variable occurs an ->NullPointerException

String s=null;  

System.out.println(s.length());//NullPointerException

 

  • ->Number format Exception:

 

The wrong formatting of any value, may occur NumberFormatException. Suppose I have a string variable that have characters, converting this variable into digit will occur ->NumberFormatException.

String s="abc";  

int i=Integer.parseInt(s);//NumberFormatException  

 

  • ->ArrayINdexOutOfBound Exception:

 

If you are inserting any value in the wrong index, it would result ArrayIndexOutOfBoundsException as shown below:

int a[]=new int[5];  

a[10]=50; //ArrayIndexOutOfBoundsException  

3. Error: Error is irrecoverable e.g. OutOfMemoryError, VirtualMachineError, AssertionError etc.

 

Exception Handling in Java:

There are 5 keywords used in java exception handling.

  1. 1. try

  2. 2. catch

  3. 3. finally

  4. 4. throw

  5. 5. throws


Oracle Fusion HCM (Human Capital Management) Overview

$
0
0

Overview:  Oracle Fusion HCM (Human Capital Management)

It is a next generation of application that Oracle has came up with, previously Oracle was only associated with database products, then it came up with ERP(Enterprise Resource Planning) as well, it started acquiring other ERP products as well like PeopleSoft, Seibel etc.

Previously if a company wanted to implement HCM it has to go for products like PeopleSoft which was specialized in a particular area & Seibel for CRM (Customer Relationship Management) & Oracle was very well known for supply chain & financials, so there after a situation came up where if a customer wanted to use HCM it has to use Peoplesoft & if wanted to go for CRM it had to opted for Seibel in all they had to opt for two different product at the same time which raised the cost of operation for them.

Then Oracle came with a solution of coming with a unique way which had the best of both HCM, E Business Suite & CRM, it took best in class features both from Peoplesoft & Seibel and they came up with a new product from scratch using application development framework, Oracle fusion was created.

Cloud computing was upcoming product in the market, companies were more on a move towards cloud technology and replacing the server system. When it comes to undertaking a Fusion HCM implementation, especially if this is your first experience with Software as a Service (SaaS), the same logic applies – it makes sense to work with someone who knows the lay of the land and what to expect.

FHCM2 

Oracle Fusion has been further categorized into Workforce Deployment, Workforce Development & Compensation Management. Mainly these are the 3 primary business processes included in Oracle Fusion HCM.

Workforce Deployment

It has been further categorized into:

1. Global Human Resources: It deals with the core HR (Human Resource) activities. It enables organizations to maximize employee value, by aligning resources with people & also includes localization i.e. setup, processing, monitoring, internal & external touch points & reporting.

2. Global Payroll & Localization: Fusion payroll, it comes under HCM, it consist of full fledge payroll service for both global i.e. par with the world or local i.e. for a particular country.

3.Global Payroll Interface: It is used only as an interface and not for full fledge payroll service E.g. If a company is already using a third party product for executing payroll and only uses Oracle Fusion as an interface application. Oracle Fusion HCM collects the data & send it to the third party payroll provider.

4. Workforce Prediction: It uses “what if” scenario modeling, it uses historical, current and indicators to predict the performance & attrition & provide the ability to enable corrective measure.

5. Workforce Lifecycle Manager: It covers all the stages of workers association i.e. creation of an employee in the database to termination of work relationship. E.g. Hiring, Promotion, changing assignment etc.

# For the next assignment I will be covering workforce development & Compensation Management.

Oracle Fusion Payroll - Functional Setup Manager (Part 1)

$
0
0

This tutorial deals with Fusion Payroll, and how it functions.

Having dealt with an overview of Oracle Fusion, you must now be familiar with the basic concepts. We will now move on to the Functional Setup Manager (FSM), and then Common Application Configuration.

The topics covered in this first part of the tutorial are:
● Functional Setup Manager - An Overview
● Offerings
● Implementation Projects

Functional Setup Manager - An Overview

The Functional Setup Manager (FSM) is a central module where implementation takes place in Fusion Applications. It is based on Business Process Management, to optimise or adapt to organisational needs. The FSM is the one place to configure and set up Fusion Applications in a consistent manner.

The role associated with the Functional Setup Manager is Application Implementation Consultant, and unless that role is assigned, a user cannot view the whole of the Functional Setup Manager.

The FSM can be accessed through the Navigator -> Tools -> Setup and Maintenance.

FP1

How-to Create a Custom ESS Job in Fusion Applications

$
0
0

How-to Create a Custom ESS Job in Fusion Applications

Creation of Custom Data Loader Summary Report  

Create a Data Model :  

SQL query to be used :

SELECT hdbo.bus_obj_file_discriminator EntityName,fr.key_source_owner SourceSystemOwner, fr.key_source_id SourceSystemId, l.msg_text ErrorMessage,bo.data_file_name,bo.imported_status,bo.validated_status, bo.skipped_status,bo.loaded_status,'Error' DataLoadStatus,'N' DataLoadFlag   FROM   fusion.hrc_dl_message_lines l   ,      

fusion.hrc_dl_data_set_bus_objs  bo   ,      

fusion.hrc_dl_data_sets          ds   ,      

fusion.hrc_dl_physical_lines pl   ,      

fusion.hrc_dl_file_rows     fr   ,      

fusion.hrc_dl_file_lines    fl   ,      

fusion.hrc_dl_business_objects hdbo    

WHERE  l.message_source_table_name = 'HRC_DL_PHYSICAL_LINES'  

AND    bo.data_set_bus_obj_id      = l.data_set_bus_obj_id  

AND    ds.data_set_id              = bo.data_set_id  

AND    pl.physical_line_id   = l.message_source_line_id                              

AND    fr.row_id             = pl.row_id  

AND    fl.line_id            = fr.line_id  

AND    hdbo.business_object_id = bo.business_object_id  

And    ds.ucm_content_id = :p_ucm_content_id  

union    

SELECT hdbo.bus_obj_file_discriminator EntityName,fr.key_source_owner SourceSystemOwner, fr.key_source_id SourceSystemId, l.msg_text ErrorMessage,bo.data_file_name,bo.imported_status,bo.validated_status,bo.skipped_status,bo.loaded_status,'Error' dataloadstatus,'N' dataloadflag  

FROM   fusion.hrc_dl_message_lines l

, fusion.hrc_dl_data_set_bus_objs bo

, fusion.hrc_dl_data_sets ds

, fusion.hrc_dl_logical_lines ll

, fusion.hrc_dl_file_rows fr

, fusion.hrc_dl_file_lines fl

, fusion.hrc_dl_business_objects hdbo

WHERE l.message_source_table_name = 'HRC_DL_LOGICAL_LINES'

AND bo.data_set_bus_obj_id = l.data_set_bus_obj_id

AND ds.data_set_id = bo.data_set_id AND ll.logical_line_id = l.message_source_line_id

AND fr.logical_line_id = ll.logical_line_id AND fl.line_id = fr.line_id

AND hdbo.business_object_id = bo.business_object_id

And ds.ucm_content_id = :p_ucm_content_id

Screenshot :

CustESS1

Create a Report :

CustESS2

 

Create a Scheduled Process :

Navigation : Setup and Maintainenance -> Name ( Enter : Manage Custom Enterprise Scheduler Jobs for HCM Core Processes)

CustESS3

 

Select : Go to Task

You will see the following screen

CustESS4

 

Click Create and this navigates you to the following screen :

CustESS5

 

Schedule Jobs Details :

CustESS6

CustESS7

CustESS8

 

Parameter Details :

CustESS9

CustESS11

 

Running the Newly Created Custom Scheduled Job :

Navigation : Scheduled Processes -> Schedule New Process -> ( Search for ‘HCM Data Loader Summary Report’)

 

CustESS12

CustESS13

CustESS14

Sample Output Screenshot : 

 

Sample Output Screenshot :

Oracle Fusion Payroll - Functional Setup Manager (Part 2)

$
0
0

This tutorial deals with Fusion Payroll, and how it functions.

Having dealt with an overview of Oracle Fusion, you must now be familiar with the basic concepts. We will now continue from the Functional Setup Manager (Part 1), and then Common Application Configuration.

The topics covered in this first part of the tutorial are:
● Creating an Implementation Project
● Export and Import
● Customisation

Creating an Implementation Project

The steps to create an implementation project are as follows:

1. Go to Navigator -> Tools -> Setup and Maintenance -> Manage Implementation Projects and click on the Create icon (highlighted in the screenshot below).

2. Enter the basic information and click on Next.

3. Select the offerings and options to be included in the project and click on Next.

4. Click on the Add Task Lists and Tasks icon (circled in the screenshot below) to add tasks, and click on Apply.

5. Click on the Assign Tasks button to assign users to the tasks. After searching and selecting users, click on Save and Close.

The following screenshots depict the above steps:

FP7
Fig. 7 - Creating a new implementation project. The Create icon is highlighted
FP8
Fig. 8 - Entering basic information of the implementation project
FP9

Fig. 9 - Selecting offerings to implement in the project

FP10
Fig. 10 - The task lists and tasks in the project. Click on the circled icon to add tasks

FP11
Fig. 11 - Searching and adding task lists and tasks to the implementation project
FP12
Fig. 12 - Assigning tasks to specific users

 

Export and Import

You can configure packages by identifying the entities (or business objects) you want to export. It gives you a package that has an XML data of your entities, along with appropriate tags. After configuring a package, an Export and Import process has to be run. This is used as input for the following export and import process. It is essential to note that not all entities are capable of being exported and imported.

The steps of the Export and Import process are detailed below:

1. Go to Manage Configuration Packages under Setup Data Export and Import in the Regional Area.

2. To create a configuration package, click on the New icon (circled in the screenshot below) under Search Results.

3. Select the appropriate implementation project and click on Next.

4. Select the objects to be exported and click on Next.

5. Select the required schedule for running the process and click on Submit to run the export process

(or)

Select the required schedule for running the process and click on Save and Close.

a. Select the package under Search Results and click on the Export Setup Data button to start the export process.

b. Click on Next on the screen that follows. Select the required schedule for running the process and click on Submit.

These steps are depicted in the following screenshots:
FP13
Fig. 13 - Main screen of the Export and Import process, with the New icon circled
FP14
Fig. 14 - Choosing the implementation project for the package
FP15
Fig. 15 - Selecting the objects for export

FP16
Fig. 16 - Scheduling the export

Unlike a traditional export and import, where interface tables and mappings are created before the data is loaded, this export and import process is within the Fusion Application, where the data is loaded onto the Fusion instance.

Customisation

There are a few customisable elements in the Functional Setup Manager: offerings and functional areas, features, business processes, task lists and tasks, and business objects. This allows you to set up your own task lists, tasks, and business objects for your implementation project(s).

The steps to customise task lists are as follows:

1. To manage task lists and tasks, click on Manage Task Lists and Tasks under Implementation Objects in the Regional Area of the FSM. Clicking on a task’s name will give you a list of the technical details related to the task.

2. Click on the Create Task List button.

3. Enter the basic information, then click on the Add Task icon under Tasks.

4. Search and select the required task(s) and click on Done. The task(s) will get added to the task list.

5. Under Task List Scope, click on the Business Object dropdown to add a scope to the task list. To search for a particular business object, click on Search… in the dropdown.

6. Click on Save and Close to save the task list.

You can also create individual tasks by clicking on the Create Task button on the Manage Task Lists and Tasks screen.

FP17
Fig. 17 - Managing task lists and tasks

FP18
Fig. 18 - Entering basic information and adding tasks to task list

FP19
Fig. 19 - Searching and adding tasks to the task list

FP20
Fig. 20 - Searching and adding a scope to the task list

Sending Output of Concurrent Programs as Email Attmt

$
0
0

Sending Output Of Concurrent Programs Via Email  

While working on Oracle Applications E- Business Suite it is a very common requirement that we want to send the output of a concurrent program as an email attachment to specific email id.  

This requirement can be easily achieved by creating a shell script which will take the output file and send email to the subscribers.  

For this you have to follow the below mentioned steps:

a) Create a Executable with execution file type as Host.

b) Create a Concurrent program which will have parameters as Request ID(for normal request whose output is stored in fnd_concurrent requests) , Output Request ID ( for XML based concurrent requests where otput is stored in fnd_conc_request_outputs), Attachment type( ‘LOG’/’OUT’ for Log file and output file respectively, Email Id ( email id to whom request needs to be send, Email Subject (Email Subject)          

Now whenever you will call this concurrent program passing the correct parameters you will be able to send the output to email id.  

Moreover, in order to have the control you can have flexibility to control which concurrent programs output you want to send via email and the corresponding email id create a lookup  

Lookup Type : XXC_GET_SUBSCRIBERS 

Code : 10,20,30 ..etc

Meaning : 10,20,30...etc

Description : Concurrent program Name whose output needs to be send  

Tag : Email ID to which the concurrent program output will be send.  

Attaching the shell script program for ready reference.  

SendEmail

Please save the above file in desktop and open with textpad , wordpad, notepad.

#!/bin/sh
# *************************************************************************************************
# Filename: ebs2fusion_send_email.sh
# Author: Sandip
# Date Created: 14-OCT-2010
# Description: Send output/log File as an attachment
# Parameters: 1. Request ID
# 2. Output Request ID
# 2. Attachment Type: LOG / OUT
# 3. Email Ids
# 4. Email Subject
# History:
# Name Date Version Description
# --------------- ------------ ------- -----------------------
# Ashish 14-OCT-2010 1.0 Original Creation
# *************************************************************************************************

# -- ------------------------
# -- Extract input parameters
# -- ------------------------
USER_PWD=`echo $1|cut -d '"' -f2` # -- Database User/Pwd
USERNAME=`echo $1|cut -d '"' -f4` # -- UserName

REQ_ID=`echo $1|cut -d '"' -f8` # -- Request Id
OUT_REQ_ID=`echo $1|cut -d '"' -f10` # -- Output Request Id
ATTACHMENT_TYPE=`echo $1|cut -d '"' -f12` # -- Attachment Type
EMAIL_ID=`echo $1|cut -d '"' -f14` # -- Email Id
EMAIL_SUB=`echo $1|cut -d '"' -f16` # -- Email Subject

# -- ----------------------
# -- Print input parameters
# -- ----------------------
echo " "
echo "User Name: "$USERNAME
echo "Request Id: "$REQ_ID
echo "Output Request Id: "$OUT_REQ_ID
echo "Attachment Type: "$ATTACHMENT_TYPE
echo "Email Id: "$EMAIL_ID
echo "Subject: "$EMAIL_SUB
echo "---------------------------------------------------------------------------------------------"

# -- ----------------
# -- Email Validation
# -- ----------------
case $EMAIL_ID in
*@?*.?*) echo "Email Address Validated.";;
*) echo "Invalid Email Address. Please enter the correct format of email address and re-run the program";
exit 1;;
esac

if [ "$OUT_REQ_ID" == "" ]; then
echo "Fetching based on Request Id"
# -- -------------------------------------------
# -- Fetch OUT and LOG filename using Request ID
# -- -------------------------------------------
QUERY_OUTPUT=`sqlplus -s /nolog <<end_stmt1
set heading off
set feedback off
set verify off
set termout off
set pages 0

CONNECT $USER_PWD
SELECT fcq.status_code, length(fcq.logfile_name), length(fcq.outfile_name), fcq.logfile_name, fcq.outfile_name FROM fnd_concurrent_requests fcq WHERE fcq.request_id='${REQ_ID}';
end_stmt1`
else
echo "Fetching based on Output Request Id"
# -- -------------------------------------------
# -- Fetch OUT and LOG filename using Request ID
# -- -------------------------------------------
QUERY_OUTPUT=`sqlplus -s /nolog <<end_stmt1
set heading off
set feedback off
set verify off
set termout off
set pages 0

CONNECT $USER_PWD
SELECT fcq.status_code, length(fcq.logfile_name), length(fcro.file_name), fcq.logfile_name, fcro.file_name FROM fnd_concurrent_requests fcq, fnd_conc_req_outputs fcro WHERE fcq.request_id=fcro.concurrent_request_id AND fcq.request_id='${OUT_REQ_ID}';
end_stmt1`
fi

# -------------------------------------------------------------------
# -- Above query will return the value as
# -- 1. Connected. (If connected to DB)
# -- 2. Program Status (C or E)
# -- 3. Length of Log File Path and Name
# -- 4. Length of Output File Path and Name
# -- 5. Log File Path and Name
# -- 6. Output File Path and Name
# -------------------------------------------------------------------

# --------------------------------------
# -- Using cut command taking the values
# --------------------------------------
IS_CONNECTED_TO_DB=`echo $QUERY_OUTPUT|cut -d" " -f1`

if [ "$IS_CONNECTED_TO_DB" == "Connected." ]; then
#-- Getting the Program Status (C or E)
PROG_STATUS=`echo $QUERY_OUTPUT|cut -d" " -f2`
echo "PROGRAM Status: "$PROG_STATUS
else
echo "Error: Connecting to DB: "$QUERY_OUTPUT
exit 1
fi

# -------------------------------------------------
# -- Sending email
# -- LOG_FILE => Attaching the log file
# -- OUT_FILE => Attaching the output file
# -- EMAIL => Passing EMail id
# -- EMAIL_SUB => Subject of Email
# ------------------------------------------------
if [ "$ATTACHMENT_TYPE" == "OUT" ]; then
# -- Getting the output file (with path)
LEN_OUTPUT_FILE=`echo $QUERY_OUTPUT|cut -d" " -f4`
echo "Length of OUTPUT FILE: "$LEN_OUTPUT_FILE

OUTPUT_FILE=`echo $QUERY_OUTPUT|cut -d" " -f6`
echo "OUTPUT FILE: "$OUTPUT_FILE

if [ $LEN_OUTPUT_FILE -gt 80 ]; then
OUTPUT_FILE1=`echo $QUERY_OUTPUT|cut -d" " -f7`
echo "OUTPUT FILE1: "$OUTPUT_FILE1
OUTPUT_FILE=$OUTPUT_FILE$OUTPUT_FILE1
fi

echo "OUTPUT FILE: "$OUTPUT_FILE

# ---------------------------------------------------------------
# -- Sending EMail with output file attachment
# -- Using -e in echo command to print the file name in new line
# ---------------------------------------------------------------
#(echo -e "$EMAIL_BODY"; uuencode $OUTPUT_FILE OUTPUT_FILE_$REQ_ID.txt) | mail "$EMAIL_ID" -s "$EMAIL_SUB"

echo "$EMAIL_SUB"| mutt -a $OUTPUT_FILE "$EMAIL_ID" -s "$EMAIL_SUB"

echo "EMAIL has been sent with output file to $EMAIL_ID"

elif [ "$ATTACHMENT_TYPE" == "LOG" ]; then
# -- Getting the Log File (with Path)
LOG_FILE=`echo $QUERY_OUTPUT|cut -d" " -f5`

echo "LOG FILE: "$LOG_FILE

# ---------------------------------------------------------------
# -- Sending EMail with log file attachment
# -- Using -e in echo command to print the file name in new line
# ---------------------------------------------------------------
#(echo -e "$EMAIL_BODY"; uuencode $LOG_FILE LOG_FILE_$REQ_ID.txt) | mail "$EMAIL_ID" -s "$EMAIL_SUB"
#uuencode -m $LOG_FILE LOG_FILE_$REQ_ID.txt | mail "$EMAIL_ID" -s "$EMAIL_SUB"

echo "$EMAIL_SUB"| mutt -a $LOG_FILE "$EMAIL_ID" -s "$EMAIL_SUB"

echo "EMAIL has been sent with log file to $EMAIL_ID"
fi

Viewing all 930 articles
Browse latest View live


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