Thursday, July 25, 2013

A high level overview of Appian BPM Suite - Part 1

Appian  is one of the leading BPM Suite currently in the market.

Appian appeared in the LEADERS quadrant of the Gartner Magic Quadrant  (iBPMS category)

Appian is the BPM expert. Appian leads the market in BPM innovation, delivering comprehensive,
flexible, and easy-to-use solutions tailored to the needs of businesses and governments worldwide.
The Appian Enterprise BPM Suite is a 100 percent Web-based solution, including integrated knowledge
management and real-time analytics. Appian simplifies process collaboration between business and IT,
allowing all users to be part of the process of achieving corporate goals.
Appian Anywhere, the first and only complete BPM Suite available on-demand, delivers all the power
and functionality of Appian Enterprise via a Software-as-a-Service (SaaS) model.

Work Social , Cloud and Mobile makes Appian in a different space when compared to competitors.
Appian provides free native mobile apps for customers and no separate licenses for mobile usage.
Developer has to least worry about implementing and support mobile and web separately. As onetime development works on both.
CEO Matt Calkins says: Social Business + BPM + Mobile + Existing Apps = Worksocial

Amazon is the official partner of Appian for Cloud Services.
Current version of Appian is Version 7.2 supported in cloud and on-premise. Appian BPM Suite Product started in 2006 with a public version of 3.5



 iBPMS - Adding Intelligence to the BPM Suite
BPM Suites “enable leading organizations to make their business operations more intelligent by integrating analytics, social, and mobile technologies into orchestrated processes” - Gartner

High Level Architecture of Appian System:
     In a typical On-Premise environment Clients install Tomcat, JBOSS or compatible Java Container , configure Shared Drives for resources
   The Apache Tomcat webserver will be the client facing with a FQDN & Load Balancer ex: bpm.mycompany.com
    Appian components can be distributed on multiple servers, but I personally recommend the k engines are one high end server to resolve sync issues that might arise once in a while.
Appian Enterprise supports a variety of J2EE and OS platforms. For operating systems, Appian
supports Windows 2003 Server, IBM-AIX, Linux, and Sun Solaris. For J2EE platforms, Appian
supports JBOSS, IBM WebSphere, and Oracle/BEA Application Server.
For advanced development, Appian offers a Java Eclipse based SDK. All other interfaces for process
design, forms design, reporting, and end-user interaction are provided through a web browse

From my experience I have seem Appian using 80% of Apache open source frameworks.
Struts, JSF, Spring, Hibernate etc.

Appian Engine in particular h uses K & Q languages and KDB which makes the system really fast and responsive. Company: kx.com

Appian engines consist of advanced process, knowledge management, and integrated analytics.
The architecture consists of a set of Appian engines that manage tasks from storing and versioning process models;
executing predefined business rules; user, group, and role management; document storage; discussion areas; and task execution.
Must appreciate Appian has these core engineers. Appian provides command line scripts for both UNIX  and Windows environments.

Screenshot of Appian engines


Collaboration and Developer Community:
Appian has its own document repository but can integrate with SharePoint 2007 and above  very well with its out of box smart services using “Appian for SharePoint module”
Forum: https://forum.appian.com is a website similar to many companies. Ex: sdn.sap.com community network or pdn.pega.com (Pegasystems community)

Very good familiar social interface like yammer/facebook/linkedin.
The only company which use the product internally for almost everything and sell the same to the clients.

Appian 7.2 interface announced in May 2013. You will see the same interface when developing at your company.


Do you want to enhance using plugins
There is no limit you can enhance your development and Appian provides Java API
And also forum has lot of shared plugins from the community.
I have integrated 3rd party C#/ASP.Net/Silverlight applications with Appian to communicate between them, Send and receive , collaborate documents and start Appian process from .Net technologies etc.
Appian allows your process models to be exposed as web services. The SOA way.

Consider these following factors when evaluating or finalizing a BPM Suite 
  1. Time to Value
  2. Lower TCO (Total Cost of Ownership)
  3. Risk Mitigation
  4. Value Potential
  5. Cloud/On-Premise/Hybrid

 Other factors
  • SOX Compliance
  • How much automation capabilities are provided by vendor for continuous integration and faster deployments
  • Is it Server based license or CAL/per user based – which comes in TCO
  • Developer reach and resources availability in market


In the Next Parts about Appian BPM  , we will see more details of Appian Features, Developers perspective , Form and Process Designer , Rules Deployment etc.
I hope mean while this helps to get an understanding of what Appian BPM is and what it offers.

We can go over something like this. May be a Purchase or PTO or Travel Request or some sort  business process which needs approval and sox compliance etc.



Rayudu Addagarla
BPM Specialist
I am not Appian employee or official partner, I am just an independent consultant with Appian BPM Suite expertise.

Friday, July 5, 2013

XML/XSLT Parsing your business data which is in xml using XSLT -by Rayudu Addagarla

In today’s world data is everywhere and xml could be one source and most common source as feed from data vendors etc.

 

Say suppose you have some xml data to show for business users and a requirement to show in the webpage or parse with XSLT to use in some application.

This below shows how to parse daily averages of Federal Funds available for public.

 

I just showed to use xsl:for-each and show in tables. You can apply any XSLT rules to filter xsl:if, xsl:choose, xsl:when etc.

Shows how to read elements and attributes and xml which has (:colon) namespaces ex: ff:Series

<ff:Series AVAILABILITY="A" DECIMALS="2" FF_METHOD="D" DISCLAIMER="G" TIME_FORMAT="P1D">

 

http://www.newyorkfed.org/xml/data/ff/ffd.xml

 

How would you parse this with XSLT if you want to just display on your page based on some rules etc.

 

 

XML (ffd.xml)

XSL

<?xml version="1.0" encoding="ISO-8859-1"?>

<UtilityData>

<Header>

<ID>FFD</ID>

<Test>false</Test>

<Name xml:lang="en">Federal Funds daily averages</Name>

<Prepared>2013-07-05</Prepared>

<Sender id="FRBNY">

<Name xml:lang="en">Federal Reserve Bank of New York</Name>

<Contact>

<Name xml:lang="en">George Matthes</Name>

<Email>george.matthes@ny.frb.org</Email>

</Contact>

</Sender>

</Header>

<ff:DataSet>

<ff:Series AVAILABILITY="A" DECIMALS="2" FF_METHOD="D" DISCLAIMER="G" TIME_FORMAT="P1D">

<ffbase:Key>

<base:FREQ>D</base:FREQ>

<base:RATE>FF</base:RATE>

<base:MATURITY>O</base:MATURITY>

<ffbase:FF_SCOPE>D</ffbase:FF_SCOPE>

</ffbase:Key>

<ff:Obs OBS_CONF="F" OBS_STATUS="A">

<base:TIME_PERIOD>2013-07-02</base:TIME_PERIOD>

<base:OBS_VALUE>0.1</base:OBS_VALUE>

</ff:Obs>

<ff:Obs OBS_CONF="F" OBS_STATUS="A">

<base:TIME_PERIOD>2013-07-01</base:TIME_PERIOD>

<base:OBS_VALUE>0.1</base:OBS_VALUE>

</ff:Obs>

<ff:Obs OBS_CONF="F" OBS_STATUS="A">

<base:TIME_PERIOD>2013-06-28</base:TIME_PERIOD>

<base:OBS_VALUE>0.07</base:OBS_VALUE>

</ff:Obs>

<ff:Obs OBS_CONF="F" OBS_STATUS="A">

<base:TIME_PERIOD>2013-06-27</base:TIME_PERIOD>

<base:OBS_VALUE>0.09</base:OBS_VALUE>

</ff:Obs>

</ff:Series>

</ff:DataSet>

</UtilityData>

<?xml version="1.0" encoding="ISO-8859-1"?>

<!—Author Rayudu Addagarla, Tested in W3schools Try Yourself Editor -->

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 

<xsl:template match="/">

  <html>

  <body>

  <h3>Federal Reserve Bank of New York</h3>

    

 <xsl:for-each select="UtilityData/Header">

  <b>Name :</b><xsl:value-of select="Name" />

   <br/><b>Sender :</b><xsl:value-of select="Sender/@id" />

  </xsl:for-each>

<br/>

    <table border="1">

      <tr bgcolor="#9acd32">

        <th>Name</th>

        <th>Email</th>

      </tr>

      <xsl:for-each select="UtilityData/Header/Sender/Contact">

      <tr>

        <td><xsl:value-of select="Name"/></td>

        <td><xsl:value-of select="Email"/></td>

      </tr>

      </xsl:for-each>

    </table>

<br/>

<table border="1">

<caption style="text-align:left"><b>Series</b></caption>

      <tr bgcolor="#9acd32">

        <th>Availability </th>

        <th>Decimals</th>

        <th>FF Method</th>

        <th>Disclaimer</th>

        <th>Maturity</th>

      </tr>

<xsl:for-each select="//*[local-name() = 'DataSet']">

<tr>

        <td> <xsl:value-of select="Series/@AVAILABILITY" />   </td>

        <td>   <xsl:value-of select="Series/@DECIMALS" />   </td>

        <td>   <xsl:value-of select="Series/@FF_METHOD" />   </td>

        <td>   <xsl:value-of select="Series/@DISCLAIMER" />   </td>

        <td>   <xsl:value-of select="Series/Key/MATURITY" />   </td>

</tr>

  </xsl:for-each>

</table> <br/>

<table border="1">

      <tr bgcolor="#9acd32">

        <th>OBS Conf</th>

       <th>OBS Status</th>

        <th>Time Period</th>

        <th>OBS Value</th>

      </tr>

      <xsl:for-each select="//*[local-name() = 'Obs']">

      <tr>

        <td><xsl:value-of select="@OBS_CONF"/></td>

        <td><xsl:value-of select="@OBS_STATUS"/></td>

        <td><xsl:value-of select="TIME_PERIOD"/></td>

        <td><xsl:value-of select="OBS_VALUE"/></td>

 

      </tr>

      </xsl:for-each>

    </table>

 

  </body>

  </html>

</xsl:template>

</xsl:stylesheet>

 

 

Rayudu Addagarla

BPM Specialist

Keywords: [Appian BPM, Java, JS, JSON, XML, XSLT, Web Development, JSP, Spring, JBOSS]

Oracle Certification (1) 1Z0-051 (2) 1Z0-144 (3) 1Z0-146

Some good information and links summarized for Oracle Certification Path – by Rayudu Addagarla

 

Irrespective of any technology you major in, A good database background is very useful and a must to succeed in the career.

 

Taking the case of various BPM Suites in market a good number of them still depend on application developers and bring legacy or relational or corporate data into the business forms/dashboards/BI tools.

Some Suites claim that there is zero foot print and no knowledge of SQL is necessary, they actually wrap the sql stuff with smart services to do this. But in case you are starter into technology, It is very important to understand Database and Data Structures.

Might be good to take a basic Data Structures/Database Course.

 

Here I give details keeping Oracle in perspective. But there are exams for Microsoft SQL Server as well if you are interested which a link is provided as well at the end.

 

I am here trying to give all the information at one place as most of the time the same information needs searching in Google and spend a lot of time.

 

Though  I am not an oracle certified myself, I have 15yrs of IT experience and been using Oracle since 1996 and developing Web and Windows/Java GUI’s using Oracle as backend.

 I hope this will help to many.

Oracle Education:

http://education.oracle.com/pls/web_prod-plq-dad/db_pages.getpage?page_id=458&get_params=p_track_id:PLSQL

 

Exams :

Step1 1Z0-051

http://education.oracle.com/pls/web_prod-plq-dad/db_pages.getpage?page_id=5001&get_params=p_exam_id:1Z0-051&p_org_id=&lang=

 

Free PDF book:

http://www.choudhari.net/downloads/Certifications/11g/1Z0-051/Oracle%2011g-%20SQL%20Fundamental%20Exam%20Guide%20(Exam%201Z0-051).pdf

http://www.choudhari.net/downloads/Books/

 

step 2: 1Z0-144

http://education.oracle.com/pls/web_prod-plq-dad/db_pages.getpage?page_id=5001&get_params=p_exam_id:1Z0-144&p_org_id=1001&lang=US


This 2 above exams will make you Oracle Certified Associate.

And this below will make you Professional

Step 3: 1Z0-146 (OCP)

http://education.oracle.com/pls/web_prod-plq-dad/db_pages.getpage?page_id=5001&get_params=p_exam_id:1Z0-146&p_org_id=&lang=

 

(see exam topics in these link)

Exam topics

1Z0-051

1Z0-144

1Z0-146

Retrieving Data Using the SQL SELECT Statement 

·         List the capabilities of SQL SELECT statements

·         Execute a basic SELECT statement

Restricting and Sorting Data

·         Limit the rows that are retrieved by a query

·         Sort the rows that are retrieved by a query 

·         Use ampersand substitution to restrict and sort output at runtime

Using Single-Row Functions to Customize Output 

·         Describe various types of functions available in SQL

·         Use character, number, and date functions in SELECT statements

Using Conversion Functions and Conditional Expressions

·         Describe various types of conversion functions that are available in SQL

·         Use the TO_CHAR, TO_NUMBER, and TO_DATE conversion functions 

·         Apply conditional expressions in a SELECT statement

Reporting Aggregated Data Using the Group Functions 

·         Identify the available group functions

·         Describe the use of group functions 

·         Group data by using the GROUP BY clause 

·         Include or exclude grouped rows by using the HAVING clause

Displaying Data from Multiple Tables 

·         Write SELECT statements to access data from more than one table using equijoins and nonequijoins

·         Join a table to itself by using a self-join 

·         View data that generally does not meet a join condition by using outer joins 

·         Generate a Cartesian product of all rows from two or more tables

Using Subqueries to Solve Queries 

·         Define subqueries

·         Describe the types of problems that the subqueries can solve 

·         List the types of subqueries 

·         Write single-row and multiple-row subqueries

Using the Set Operators 

·         Describe set operators

·         Use a set operator to combine multiple queries into a single query 

·         Control the order of rows returned

Manipulating Data 

·         Describe each data manipulation language (DML) statement

·         Insert rows into a table 

·         Update rows in a table 

·         Delete rows from a table 

·         Control transactions

Using DDL Statements to Create and Manage Tables

·         Categorize the main database objects

·         Review the table structure 

·         List the data types that are available for columns 

·         Create a simple table 

·         Explain how constraints are created at the time of table creation 

·         Describe how schema objects work

Creating Other Schema Objects

·         Create simple and complex views

·         Retrieve data from views 

·         Create, maintain, and use sequences 

·         Create and maintain indexes 

·         Create private and public synonyms

 

Oracle Database 11g: PL/SQL Fundamentals

·         Introduction to PL/SQL

·         Explain the need for PL/SQL

·         Explain the benefits of PL/SQL

·         Identify the different types of PL/SQL blocks

·         Output messages in PL/SQL

·         Declaring PL/SQL Variables

·         Recognize valid and invalid identifiers

·         List the uses of variables, declare and initialize variables, use bind variables

·         List and describe various data types using the %TYPE attribute

·         Writing Executable Statements

·         Identify lexical units in a PL/SQL block

·         Use built-in SQL functions in PL/SQL and sequences in PL/SQL expressions

·         Describe when implicit conversions take place and when explicit conversions have to be dealt with

·         Write nested blocks and qualify variables with labels

·         Write readable code with appropriate indentation

·         Interacting with the Oracle Database Server

·         Create PL/SQL executable blocks using DML and transaction control statements

·         Make use of the INTO clause to hold the values returned by a SQL statement

·         Writing Control Structures

·         Identify the uses and types of control structures (IF, CASE statements and expressions)

·         Construct and identify loop statements

·         Apply guidelines when using conditional control structures

·         Working with Composite Data Types

·         Create user-defined PL/SQL records

·         Create a record with the %ROWTYPE attribute

·         Create an INDEX BY table and INDEX BY table of records

·         Describe the differences among records, tables, and tables of records

·         Using Explicit Cursors

·         Distinguish between usage of implicit and explicit cursors, use SQL cursor attributes

·         Declare and control explicit cursors, use simple loops and cursor FOR loops to fetch data

·         Declare and use cursors with parameters

·         Lock rows with the FOR UPDATE clause and reference the current row with the WHERE CURRENT OF clause

·         Handling Exceptions

·         Define PL/SQL exceptions

·         Recognize unhandled exceptions

·         Handle different types of exceptions (pre-defined exceptions, non-predefined exceptions and user-defined exceptions)

·         Propagate exceptions in nested blocks and call applications

·         Creating Stored Procedures and Functions

·         Differentiate between anonymous blocks and subprograms

·         Create a simple procedure and invoke it from an anonymous block

·         Create a simple function

·         Create a simple function that accepts a parameter

·         Differentiate between procedures and functions

Oracle Database 11g: Develop PL/SQL Program Units

·         Creating Procedures

·         Differentiate between anonymous blocks and subprograms, use a modularized and layered subprogram design, and identify the benefits of subprograms

·         Create a simple procedure and invoke it from an anonymous block

·         Work with procedures

·         Handle exceptions in procedures, remove a procedure, and display a procedure's information

·         Creating Functions

·         Differentiate between a procedure and a function

·         Describe the uses of functions

·         Work with functions (create, invoke and remove functions)

·         Creating Packages

·         Identify the benefits and the components of packages

·         Work with packages (create package specification and body, invoke package subprograms, remove a package and display package information)

·         Working with Packages

·         Overload package subp rograms, use forward declarations

·         Create an initialization block in a package body

·         Manage persistent package data states for the life of a session and use PL/SQL tables and records in packages

·         Using Oracle-Supplied Packages in Application Development

·         Describe how the DBMS_OUTPUT package works

·         Use UTL_FILE to direct output to operating system files

·         Describe the main features of UTL_MAIL

·         Using Dynamic SQL

·         Describe the execution flow of SQL statements

·         Use Native Dynamic SQL (NDS)

·         Use the DBMS_SQL package

·         Design Considerations for PL/SQL Code

·         Create standard constants and exceptions

·         Write and call local subprograms

·         Control the run-time privileges of a subprogram

·         Perform autonomous transactions

·         Use NOCOPY hint, PARALLEL ENABLE hint and DETERMINISTIC clause

·         Use bulk binding and the RETURNING clause with DML

·         Creating Triggers

·         Describe different types of triggers and their uses

·         Create database triggers

·         Manage triggers

·         Creating Compound, DDL, and Event Database Triggers

·         Create triggers on DDL statements

·         Create triggers on system events

·         Using the PL/SQL Compiler

·         Describe the new PL/SQL compiler and features

·         Use the new PL/SQL compiler initialization parameters

·         Use the new PL/SQL compile time warnings

·         Managing PL/SQL Code

·         Describe and use conditional compilation

·         Hide PL/SQL source code using dynamic obfuscation and the Wrap utility

·         Managing Dependencies

·         Track and manage procedural dependencies

 

Oracle11g: Advanced PL/SQL

·         Introduction to PL/SQL

PL/SQL Programming Concepts: Review

·         List restrictions on calling functions from SQL expressions

·         Hand exceptions

·         Manage dependencies

·         Use Oracle-supplied packages

Designing PL/SQL Code

·         Identify guidelines for cursor design

·         Use cursor variables

·         Create subtypes based on existing types

Working with Collections

·         Create collections (nested table, array and associative arrays, PL SQL tables)

·         Use collections methods

·         Manipulate collections

·         Distinguish between the different types of collections and their uses

Using Advanced Interface Methods

·         Execute external C programs from PL/SQL

·         Execute Java programs from PL/SQL

Implementing Fine-Grained Access Control for VPD

·         Explain the process of fine-grained access control

·         Implement and test fine-grained access control

Manipulating Large Objects

·         Create and manage LOB data types

·         Use the DBMS_LOB PL/SQL package

·         Use of temporary LOBs

Administering SecureFile LOBs

·         Describe SecureFile LOB features

·         Enable SecureFile LOB deduplication, compression, and encryption

·         Migrate BasicFile LOBs to the SecureFile LOB format

Performance and Tuning

·         Use native and interpreted compilation methods

·         Tune PL/SQL code

·         Enable intraunit inlining

Improving Performance with Caching

·         Improve memory usage by caching SQL result sets and using the DBMS_RESULT_CACHE package

·         Write queries that use the result cache hint

·         Set up PL/SQL functions to use PL/SQL result caching

Analyzing PL/SQL Code

·         Run reports on source code

·         Determine identifier types and usages

·         Use DBMS_METADATA to retrieve object definitions

Profiling and Tracing PL/SQL Code

·         Trace PL/SQL program execution

·         Profile PL/SQL applications

Safeguarding Your Code Against SQL Injection Attacks

·         Describe SQL injections

·         Reduce attack surfaces

·         Use DBMS_ASSERT

·         Design immune code

·         Test code for SQL injection flaws

 

 

A Link to MS SQL Server certification if interested to know

https://www.microsoft.com/learning/en/us/sql-certification.aspx

 

 

Rayudu Addagarla

BPM Specialist

http://www.siorys.com