Try Pro
Quick start Documentation FAQ Customers About

Viewflow

Reusable Workflow Library

Let you organize business logic
in django applications

play_arrowHOW?

Viewflow PRO
All features of open-source version
thumb_up
Commercial friendly license
for all organizations projects
thumb_up
Long term backward compatibility
Python 2.7 and Django 1.6+ support
thumb_up
Ready to use pluggable frontend
based on material design
thumb_up
Extended flow primitives set
Subprocesses, timer tasks, etc
payment Try Pro


Viewflow

Can you express people collaboration business logic in words and pictures?


Let’s do it with code.





1
Start with Django — one of the most powerful web development platform.




2
Extract workflow logic out of views and models to explicit workflow layer



3
Use Domain-Specific-Language based on Business Process Modeling Notation




4
Enable ready to use frontend based on material design



Manage growing codebase smoothly


Quick start


Let's meet with viewflow EDSL.

In this tutorial we will work on basic Hello World application where one person starts "hello, world" request,
another one approves it,  and as soon as the request is approved it is sent in the background


As soon as the workflow drawing is approved by the management it can serve as the project specification to programmers.

Let's see how they implement it.

1. Install Viewflow

Viewflow requires Python 3.3 or greater, django 1.6 or 1.7, Viewflow Pro works with python 2.7. Install django-viewflow package from PyPI:

pip install django-viewflow

And add it into INSTALLED_APPS settings:

INSTALLED_APPS = (
    ...
    'viewflow',
 )


2. Define Models

Start with process database model definition:

from django.db import models
from viewflow.models import Process
        
class HelloWorldProcess(Process):
    text = models.CharField(max_length=150)
    approved = models.BooleanField(default=False)


Define the actual task that says Hello to the World in `tasks.py`:

import os
                    
from celery import shared_task
from viewflow.flow import flow_job
                    
@shared_task()
@flow_job()
def send_hello_world_request(activation):
    with open(os.devnull, "w") as world:
       world.write(activation.process.text)

3. Define Flow

To make the task code work just put the following flow definition in `flows.py` module from your django application:

from viewflow import flow
from viewflow.base import this, Flow
from viewflow.contrib import celery
from viewflow.views import StartProcessView, ProcessView
from . import models, tasks
            
class HelloWorldFlow(Flow):
    process_cls = models.HelloWorldProcess
            
    start = flow.Start(StartProcessView, fields=["text"]) \
        .Permission(auto_create=True) \
        .Next(this.approve)
            
    approve = flow.View(ProcessView, fields=["approved"]) \
        .Permission(auto_create=True) \
        .Next(this.check_approve)
            
    check_approve = flow.If(cond=lambda p: p.approved) \
        .OnTrue(this.send) \
        .OnFalse(this.end)
            
    send = celery.Job(tasks.send_hello_world_request) \
        .Next(this.end)
            
    end = flow.End()

4. Add Urls

`Flow` class contains all urls required for the task processing.

from django.conf.urls import patterns, url, include
from viewflow import views as viewflow
from .flows import HelloWorldFlow
            

urlpatterns = patterns('',
    url(r'^helloworld/',
        include([
            HelloWorldFlow.instance.urls,
            url('^$', viewflow.ProcessListView.as_view(), name='index'),
            url('^tasks/$', viewflow.TaskListView.as_view(), name='tasks'),
            url('^queue/$', viewflow.QueueListView.as_view(), name='queue'),
            url('^details/(?P<process_pk>\d+)/$',
                viewflow.ProcessDetailView.as_view(), name='details')],
                namespace=HelloWorldFlow.instance.namespace),
        {'flow_cls': HelloWorldFlow}))

Your Hello World process is ready to go. If you run the development server
locally, go to http://localhost:8000/flows/helloworld/ and step through the workflow.


Documentation




FAQ



  • General
  • radio_button_unchecked What is rationale for viewflow?

    Common web frameworks like django solve only technical problem related to HTTP/Client/Server functionality and nothing related to business logic organization except simple CRUD support.

    But very soon it becomes not enough. Viewflow add explicit business workflow layer help to extract workflow logic out of CRUD-based framework into single well defined place.

  • radio_button_unchecked What is Business Process Modeling Notation?

    Business Process Modeling Notation is a standard of graphical notation allows to expilitly express business process workflow.

    BPMN is designed to be understandable by humans first.

    BPMN serves as a common language, bridging the communication gap that frequently occurs between business process design and implementation.

    BPMN accomodates many years of industry experience and allows to implement most of workflow patterns required by real software.

  • radio_button_unchecked What is the value of business process engine

    Business process engine gives you architecture with explicit workflow layer.

    Explicit workflow layer makes easy to create a specification, discuss, develop and refactor a software project.

    Workflows allow to have parallel jobs executed by different users simultaneously

  • radio_button_unchecked Why not to use business process engine?

    Most of existing business process management engines based on visual business process editor.

    Visual environments are really hard to work with. It throws away every best practice around creating good enterprise software - no automated testing, no code reuse, unreadable software.

    Anything more complex than an out-of-the-box template can be painful to maintain

  • radio_button_unchecked What is the value of EDSL for BPMN

    EDSL - embedded (or internal) domain-specific language for business process specification allows to have an explicit layer for workflow logic inside well known and popular development platform such Django.

    EDSL specification could be created in any text editor even faster than in any point-and-click UI.

    EDSL makes possible not to reinvent whole business process management platform from ground, and reuse battle-proven ORM and Forms managenent layers.

    And as soon as EDSL is just a code, nothing prevents write an automatic tests and code reuse.

  • Technical
  • radio_button_unchecked Can I use my own views with viewflow?

    Sure. Existing viewflow frontend is completly (un)plugable.

    Viewflow works well with django functional and class based views

  • radio_button_unchecked Can I use another background task query implementation instead of celery?

    Yep, but there is no support out of the box.

    Take a look to the celery task implementation to see how to add your favorite library support.

  • radio_button_unchecked How can I ...

    Just ask the support if you have a license.

    We will be glad to answer your questionon stackoverflow for everyone else.

  • Licensing
  • radio_button_unchecked What happens if my subscription lapses?

    You lose access to the pypi server and priority support. You won't get any more updates or bug fixes and 'pip install' won't work anymore. You retain the right to run the version you have.

  • radio_button_unchecked How many licenses do I need to buy?

    Every organization that runs Viewflow Pro for their own benefit must purchase a license. I offer two licensing schemes:
    — Organization license ($450/yr) - allows use on all servers and all sites run by one company/organization.
    — Appliance license ($4,500/yr) - allows a company/organization to embed and redistribute Viewflow Pro within their products/appliances to an unlimited number of customers.

  • radio_button_unchecked What is the buying process?

    Click the Pay Now button and put in your info. Your license will be associated with the email address you use. I'll generate your download URL and email it to you within 24 hours. You'll receive a confirmation email upon purchase which can be used as an invoice/receipt.

  • radio_button_unchecked Can I embed Viewflow Pro in a product that I sell?

    Yes, with an Appliance license. This provides a license for all of your customers to use Viewflow Pro as part of your product only. Section 4, paragraph 2 of the COMM-LICENSE says: You may not redistribute the Software as part of a product, "appliance" or "virtual server". You may not redistribute the Software on any server which is not directly under Your control. The Embedded license changes this paragraph to read: You may redistribute the Software as part of Your own products. Your product must embed the Viewflow Pro package and not directly access the private Viewflow server when deployed.

  • radio_button_unchecked Can I get a refund?

    Can I get a refund? Yes, up to two weeks after purchase. Let me know the reason and maybe I can help but either way it's not a problem. Email mikhail@viewflow.io.


Customers



Pro




thumb_up
Ready to use pluggable frontend
based on material design
thumb_up
All features of open-source version
thumb_up
Commercial friendly license
for all organizations projects
thumb_up
Long term backward compatibility
Python 2.7 and Django 1.6+ support
thumb_up
Extended flow primitives set
Subprocesses, timer tasks, etc


payment Buy Pro

  $750 $450*/year

*till 1.0 version


About

“Worked with many technologies, but stay in love with python.”

  • Came to idea of workflow library when fighting with Workflows GUI in 2004
  • Spent 5 years in banking industry to shoulder-to-shoulder work with business on automation.
  • Wrote pretty popular django-fsm library to reduce pain of business apps development at 2010
  • Finally start working on ultimate solution in 2014

Mikhail Podgurskiy

Software developer