|designer =#REDIRECT [[webMethods]] ▼
{{Infobox programming language
|name = webMethods Flow
|logo =
|paradigm = [[Object-oriented programming|Object-oriented]], [[Structured programming|structured]], [[Graphical programming|graphical]]
|year = 2000s
▲|designer = [[webMethods]]
<!-- leave this out for now.. |typing = [[Type system#Static and dynamic typing|Static]], [[Type system#Strong and weak typing|strong]], [[Type system#Safely and unsafely typed systems|safe]], [[Nominative type system|nominative]] -->
|typing =
|implementations = [[webMethods Integration Server|webMethods Integration Server]]
|dialects =
|influenced_by = [[java]],[[flow chart|flow charts]]
|influenced =
|operating_system = [[Cross-platform]]
|license = commercial
|website = http://www.webmethods.com/
}}
{{R with history}}
'''webMethods Flow''' (or simply "Flow") is a [[graphical programming language]] that runs within the [[webMethods Integration Server]]. It was designed to simplify tedious, difficult to maintain or error prone aspects of integration/B2B activities.
The [[webMethods Developer]] is the IDE in which to write flow code.
==History==
[[webMethods]] developed flow as a technology to increase the ease and speed of development on their B2B/enterprise integration platform. A language that would be a suitable fit with the desire for a service based application server was another driving force.
==Philosophy==
The main driver behind flow syntax was to allow the graphical configuration of the mapping logic that forms the major part of Integration projects. Transformation and conversion of data in a text based programming language quickly becomes unwieldy and cluttered. It is also quite difficult to maintain due to the cumbersome nature. Flow code seeks to alleviate this problem by creating a programming language similar to the way you would indicate mapping of data if your source and destination data formats were placed side by side on a white board and lines connecting source to destination.
The other goal of flow was to allow a service based view of the application. Any existing code is a service. Invoking functionality is akin to treating it as a "[[black box]]" requiring certain inputs (which are mapped from your available variables). The results of that operation are then treated as outputs of the "black box".
==Syntax==
There are the following operators in the flow language:
* Map
* Invoke
* Branch
* Loop
* Repeat
* Exit
* Sequence
The operators are stored on disk as [[XML]] but this is not generally edited directly, rather the IDE ([[webMethods Developer]]) is used.
==Advantages==
* Mapping logic is easily performed and fairly natural to understand (by a range of technical abilities from Developer to business analyst).
* Allows ease of reuse of existing services via a service based view of code
* Allows rapid prototyping
* Natural fit to the SOA model of software architecture
* Easy exposure of flow services as webServices and use of webServices as "services" to be invoked
==Criticisms==
* Incorrectly used flow can produce some ugly code due to too much in the way of mapping in a single Map operation.
* It is a proprietary language and as such there is little support or reference material available outside [[webMethods]], the user group [http://www.wmusers.com wmusers.com] and a few isolated blogs.
* Source code is stored as XML, making it rather difficult to use traditional editors, source control and merge tools.
* The graphical nature of the language may give the impression that non-technical staff are capable of writing good code in it. A technical background in other programming languages is of great advantage in producing good quality flow code.
* Fairly heavily mouse driven compared to java/c++/c# etc and can result in sore mouse arm while first developing in it
* Only the [[webMethods fabric|webMethods platform]] as an implementation, so should a shift from that platform be desired a complete re-write of all flow code is required
==See also==
*[[webMethods Integration Server]] - the platform flow runs in
*[[webMethods Developer]] - the IDE
*[[webMethods]] - the creating company
==External Links==
[[Category:Computer languages]]
[[Category:Java platform|Programming language]]
|