<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>BPM/BRE</title>
        <link>http://geekswithblogs.net/AskPaula/category/7493.aspx</link>
        <description>Business Process Management, Business Rules</description>
        <language>en-US</language>
        <copyright>Paula DiTallo  2007-2009 All Rights Reserved</copyright>
        <managingEditor>plditallo@ieee.org</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <item>
            <title>Thinking Through Rules in C#</title>
            <link>http://geekswithblogs.net/AskPaula/archive/2008/03/07/120379.aspx</link>
            <description>&lt;p&gt;As I continue with writing the manuscript on rules engines, I've isolated my examples to be coincidental with the overall theme of engineering decision support applications. Today, I am taking a close look at the seemingly simple act of identifying and rejecting unattractive alternatives when competing projects are under review to determine whether or not a given project will warrant funding.&lt;/p&gt;
&lt;p&gt;Some of the determining factors are well known algorithms in the financial world. Specifically I am thinking about the &lt;font color="#cc99ff"&gt;&lt;font color="#ff0000"&gt;&lt;em&gt;rate of return on investment (roi)&lt;/em&gt;, &lt;em&gt;present worth (pw),&lt;/em&gt; &lt;em&gt;annual cost (euac),&lt;/em&gt; &lt;em&gt;annual benefit (euab),&lt;/em&gt; &lt;em&gt;benefit-cost ratio (bc),&lt;/em&gt; &lt;/font&gt;&lt;em&gt;&lt;font color="#ff0000"&gt;net present worth &lt;/font&gt;&lt;font color="#ff0000"&gt;(npw).&lt;/font&gt;&lt;/em&gt;&lt;/font&gt;  Overall, these calculations can quickly help decide whether the minimum level of economic attractiveness is met by a project. I will elaborate on each of these later. For now, any of the methods may be used independently or collectively to ultimately reject a candidate project.&lt;/p&gt;
&lt;p&gt;Before we translate this decision process to a specific rule engine implementation, Let's look at a class stub I wrote to think it through:&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial" color="#993366"&gt;&lt;em&gt;&lt;strong&gt;using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.Text;&lt;/strong&gt;&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial" color="#993366"&gt;&lt;em&gt;&lt;strong&gt;namespace CapitalExpendProjProp&lt;br /&gt;
{&lt;br /&gt;
    public class ProjectProposal&lt;br /&gt;
    {&lt;br /&gt;
        // MARR = minimum attractive rate of return&lt;br /&gt;
        public int ProjectReview(string Project, string[] alternative, int MARR)&lt;br /&gt;
        {&lt;br /&gt;
            &lt;font color="#cc99ff"&gt;&lt;font color="#993366"&gt;int&lt;/font&gt; &lt;font color="#ff0000"&gt;roi, pwb, pwc, euac, euab, bc, npw&lt;/font&gt;, &lt;font color="#993366"&gt;rejTally = 0&lt;/font&gt;;&lt;/font&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial" color="#993366"&gt;&lt;em&gt;&lt;strong&gt;            foreach(string alt in alternative)&lt;br /&gt;
            {&lt;br /&gt;
                roi = rateOfReturn();&lt;br /&gt;
                if (roi &amp;lt; MARR)&lt;br /&gt;
                { rejTally = rejTally + 1; } // REJECT&lt;/strong&gt;&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial" color="#993366"&gt;&lt;em&gt;&lt;strong&gt;                pwb = presentWorthBenefits();&lt;br /&gt;
                pwc = presentWorthCosts();&lt;/strong&gt;&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial" color="#993366"&gt;&lt;em&gt;&lt;strong&gt;                if (pwb &amp;lt; pwc)&lt;br /&gt;
                { rejTally = rejTally + 1; } //REJECT&lt;/strong&gt;&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial" color="#993366"&gt;&lt;em&gt;&lt;strong&gt;                euac = AnnualCost();&lt;br /&gt;
                euab = AnnualBenefit();&lt;/strong&gt;&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial" color="#993366"&gt;&lt;em&gt;&lt;strong&gt;                if (euac &amp;gt; euab)&lt;br /&gt;
                { rejTally = rejTally + 1; } //REJECT&lt;/strong&gt;&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial" color="#993366"&gt;&lt;em&gt;&lt;strong&gt;                bc = BenefitCostRatio();&lt;/strong&gt;&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial" color="#993366"&gt;&lt;em&gt;&lt;strong&gt;                if (bc &amp;lt; 1)&lt;br /&gt;
                { rejTally = rejTally + 1; } //REJECT&lt;/strong&gt;&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial" color="#993366"&gt;&lt;em&gt;&lt;strong&gt;                npw = NetPresentWorth();&lt;br /&gt;
                if (npw &amp;lt; 0)&lt;br /&gt;
                { rejTally = rejTally + 1; } //REJECT&lt;br /&gt;
            }&lt;/strong&gt;&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial" color="#993366"&gt;&lt;em&gt;&lt;strong&gt;            return rejTally;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;/strong&gt;&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=120379"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=120379" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/AskPaula/aggbug/120379.aspx" width="1" height="1" /&gt;</description>
            <dc:creator> 2008 Paula DiTallo </dc:creator>
            <guid>http://geekswithblogs.net/AskPaula/archive/2008/03/07/120379.aspx</guid>
            <pubDate>Sat, 08 Mar 2008 02:51:33 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/AskPaula/comments/120379.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/AskPaula/archive/2008/03/07/120379.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/AskPaula/comments/commentRss/120379.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/AskPaula/services/trackbacks/120379.aspx</trackback:ping>
        </item>
        <item>
            <title>Mining Stored Procedures to Develop Business Rules</title>
            <link>http://geekswithblogs.net/AskPaula/archive/2008/01/03/118210.aspx</link>
            <description>I am currently working on a manuscript about business rule engines; their purpose in large scale enterprise integration projects; their role in SOA architectures--and their untapped capability in enriching data warehouse-based intelligence delivery.&lt;br /&gt;
&lt;br /&gt;
Today, I am outlining the criteria for comparing two divergent products: TIBCO's iProcess Decisions (part of the BPM product suite) and Microsoft's Business Rule Engine (BRE) (installed with BizTalk Server). &lt;br /&gt;
&lt;br /&gt;
For the nuts and bolts of this first comparison, I will be using the same SQL Server 2005 database instance. &lt;br /&gt;
&lt;br /&gt;
From what I've observed, databases have loosely become &lt;span style="font-style: italic;"&gt;de facto&lt;/span&gt; rule engines for many large organizations. Frequently the only  persistent objects within an enterprise, is a growing network of federated databases--rich with evolving triggers,stored procedures, SQL Agents, etc.. After just a few hours of analyzing the types of stored procedures, triggers, etc.--it becomes obvious that many of the business processing rules are firmly embedded with the treatment/manipulation of the data through updates, inserts, and deletes. Aside from valid data-integrity related reasons for triggers and stored-procedures, one will find a myriad of status value changes, aggregates, date comparisons, etc.  In essence,  the clear application of business rules for business processes, aptly described by TIBCO as an &lt;span style="font-style: italic;"&gt;event cloud&lt;/span&gt;.&lt;br /&gt;
&lt;br /&gt;
I like TIBCO's descripton of an "event cloud"--because without the clarity of business rules as applied to specific, repeatable processes in an organization,  a &lt;span style="font-weight: bold; font-style: italic;"&gt;cloud &lt;/span&gt;is just what it is! &lt;img src="/Providers/BlogEntryEditor/FCKeditor/editor/images/smiley/msn/tounge_smile.gif" alt="" /&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=118210"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=118210" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/AskPaula/aggbug/118210.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Paula DiTallo</dc:creator>
            <guid>http://geekswithblogs.net/AskPaula/archive/2008/01/03/118210.aspx</guid>
            <pubDate>Fri, 04 Jan 2008 02:56:43 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/AskPaula/comments/118210.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/AskPaula/archive/2008/01/03/118210.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/AskPaula/comments/commentRss/118210.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/AskPaula/services/trackbacks/118210.aspx</trackback:ping>
        </item>
    </channel>
</rss>