\documentclass[10pt,a4paper]{article} % Packages \usepackage{fancyhdr} % For header and footer \usepackage{multicol} % Allows multicols in tables \usepackage{tabularx} % Intelligent column widths \usepackage{tabulary} % Used in header and footer \usepackage{hhline} % Border under tables \usepackage{graphicx} % For images \usepackage{xcolor} % For hex colours %\usepackage[utf8x]{inputenc} % For unicode character support \usepackage[T1]{fontenc} % Without this we get weird character replacements \usepackage{colortbl} % For coloured tables \usepackage{setspace} % For line height \usepackage{lastpage} % Needed for total page number \usepackage{seqsplit} % Splits long words. %\usepackage{opensans} % Can't make this work so far. Shame. Would be lovely. \usepackage[normalem]{ulem} % For underlining links % Most of the following are not required for the majority % of cheat sheets but are needed for some symbol support. \usepackage{amsmath} % Symbols \usepackage{MnSymbol} % Symbols \usepackage{wasysym} % Symbols %\usepackage[english,german,french,spanish,italian]{babel} % Languages % Document Info \author{Natalie Moore (NatalieMoore)} \pdfinfo{ /Title (overview-of-jboss-brms.pdf) /Creator (Cheatography) /Author (Natalie Moore (NatalieMoore)) /Subject (Overview of JBoss BRMS Cheat Sheet) } % Lengths and widths \addtolength{\textwidth}{6cm} \addtolength{\textheight}{-1cm} \addtolength{\hoffset}{-3cm} \addtolength{\voffset}{-2cm} \setlength{\tabcolsep}{0.2cm} % Space between columns \setlength{\headsep}{-12pt} % Reduce space between header and content \setlength{\headheight}{85pt} % If less, LaTeX automatically increases it \renewcommand{\footrulewidth}{0pt} % Remove footer line \renewcommand{\headrulewidth}{0pt} % Remove header line \renewcommand{\seqinsert}{\ifmmode\allowbreak\else\-\fi} % Hyphens in seqsplit % This two commands together give roughly % the right line height in the tables \renewcommand{\arraystretch}{1.3} \onehalfspacing % Commands \newcommand{\SetRowColor}[1]{\noalign{\gdef\RowColorName{#1}}\rowcolor{\RowColorName}} % Shortcut for row colour \newcommand{\mymulticolumn}[3]{\multicolumn{#1}{>{\columncolor{\RowColorName}}#2}{#3}} % For coloured multi-cols \newcolumntype{x}[1]{>{\raggedright}p{#1}} % New column types for ragged-right paragraph columns \newcommand{\tn}{\tabularnewline} % Required as custom column type in use % Font and Colours \definecolor{HeadBackground}{HTML}{333333} \definecolor{FootBackground}{HTML}{666666} \definecolor{TextColor}{HTML}{333333} \definecolor{DarkBackground}{HTML}{5D1F8C} \definecolor{LightBackground}{HTML}{F4F1F7} \renewcommand{\familydefault}{\sfdefault} \color{TextColor} % Header and Footer \pagestyle{fancy} \fancyhead{} % Set header to blank \fancyfoot{} % Set footer to blank \fancyhead[L]{ \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{C} \SetRowColor{DarkBackground} \vspace{-7pt} {\parbox{\dimexpr\textwidth-2\fboxsep\relax}{\noindent \hspace*{-6pt}\includegraphics[width=5.8cm]{/web/www.cheatography.com/public/images/cheatography_logo.pdf}} } \end{tabulary} \columnbreak \begin{tabulary}{11cm}{L} \vspace{-2pt}\large{\bf{\textcolor{DarkBackground}{\textrm{Overview of JBoss BRMS Cheat Sheet}}}} \\ \normalsize{by \textcolor{DarkBackground}{Natalie Moore (NatalieMoore)} via \textcolor{DarkBackground}{\uline{cheatography.com/19119/cs/6048/}}} \end{tabulary} \end{multicols}} \fancyfoot[L]{ \footnotesize \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{LL} \SetRowColor{FootBackground} \mymulticolumn{2}{p{5.377cm}}{\bf\textcolor{white}{Cheatographer}} \\ \vspace{-2pt}Natalie Moore (NatalieMoore) \\ \uline{cheatography.com/nataliemoore} \\ \uline{\seqsplit{www}.jchmedia.com/} \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Cheat Sheet}} \\ \vspace{-2pt}Published 7th September, 2016.\\ Updated 1st November, 2016.\\ Page {\thepage} of \pageref{LastPage}. \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Sponsor}} \\ \SetRowColor{white} \vspace{-5pt} %\includegraphics[width=48px,height=48px]{dave.jpeg} Measure your website readability!\\ www.readability-score.com \end{tabulary} \end{multicols}} \begin{document} \raggedright \raggedcolumns % Set font size to small. Switch to any value % from this page to resize cheat sheet text: % www.emerson.emory.edu/services/latex/latex_169.html \footnotesize % Small font. \begin{multicols*}{3} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Red Hat JBoss BRMS Components}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{p{5.377cm}}{\vspace{1px}\centerline{\includegraphics[width=5.1cm]{/web/www.cheatography.com/public/uploads/nataliemoore_1473125005_2016-09-06 11_22_10-Red Hat Training Guide JB461.pdf - Adobe Acrobat Pro.png}}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{Software packages include: Expert, Guvnor, Flow, Fusion, and Drools integrated development environment (IDE).} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{p{0.54747 cm} x{4.42953 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Business rule structure}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{Declarative rules} \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} & when "condition" then "consequence" \tn % Row Count 3 (+ 2) % Row 2 \SetRowColor{LightBackground} Facts & Domain model objects used by Drools to evaluate conditions and execute consequences \tn % Row Count 6 (+ 3) % Row 3 \SetRowColor{white} & Can be loaded from a database \tn % Row Count 7 (+ 1) % Row 4 \SetRowColor{LightBackground} & Stated: Provided to rules engine by the caller \tn % Row Count 9 (+ 2) % Row 5 \SetRowColor{white} & Inferred: calculated based on the stated facts \tn % Row Count 11 (+ 2) % Row 6 \SetRowColor{LightBackground} & Does persist: May be long lived \tn % Row Count 12 (+ 1) % Row 7 \SetRowColor{white} \mymulticolumn{2}{x{5.377cm}}{Working memory} \tn % Row Count 13 (+ 1) % Row 8 \SetRowColor{LightBackground} & Holds objects acted upon by business rules \tn % Row Count 15 (+ 2) % Row 9 \SetRowColor{white} & Does not persist. Only lives while needed \tn % Row Count 17 (+ 2) % Row 10 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{Developer asserts 'facts' into 'working memory' and then tells engine to run rules. As the engine runs rules on the 'facts' in working memory the effect may result that the 'facts' change. The engine will run the rules again until no rules left to run.} \tn % Row Count 23 (+ 6) \hhline{>{\arrayrulecolor{DarkBackground}}--} \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{Rules written in Drools are stored in .drl files.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{p{0.4977 cm} x{4.4793 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{BRMS Rule Components}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{{\bf{LHS conditional elements }}} \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} & A list of constraints on facts (LHS) \tn % Row Count 2 (+ 1) % Row 2 \SetRowColor{LightBackground} & {\bf{Pattern:}} A pattern is zero or more constraints with optional binding. \tn % Row Count 5 (+ 3) % Row 3 \SetRowColor{white} \mymulticolumn{2}{x{5.377cm}}{{\bf{RHS actions/consequences}}} \tn % Row Count 6 (+ 1) % Row 4 \SetRowColor{LightBackground} & An action executed by this rule if facts with the list of constraints are found in the working memory (RHS). \tn % Row Count 9 (+ 3) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{p{0.4977 cm} x{4.4793 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Methods of authoring rules}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{{\bf{Business Central web interface}}} \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} & Technical rule editor - creates .drl file \tn % Row Count 3 (+ 2) % Row 2 \SetRowColor{LightBackground} & Guided rule editor - creates .brl file \tn % Row Count 5 (+ 2) % Row 3 \SetRowColor{white} & Decision table editor \tn % Row Count 6 (+ 1) % Row 4 \SetRowColor{LightBackground} & DSL (Domain-Specific Language) natural language extensions \tn % Row Count 8 (+ 2) % Row 5 \SetRowColor{white} \mymulticolumn{2}{x{5.377cm}}{{\bf{JBDS Drools perspective, rule resource wizard}}} \tn % Row Count 9 (+ 1) % Row 6 \SetRowColor{LightBackground} & Individual rule - creates .drl file \tn % Row Count 10 (+ 1) % Row 7 \SetRowColor{white} & Rule package - creates .drl file \tn % Row Count 11 (+ 1) % Row 8 \SetRowColor{LightBackground} & DSL (Domain-Specific Language) natural language extensions \tn % Row Count 13 (+ 2) % Row 9 \SetRowColor{white} \mymulticolumn{2}{x{5.377cm}}{{\bf{Decision table}}} \tn % Row Count 14 (+ 1) % Row 10 \SetRowColor{LightBackground} & Spreadsheet or .csv file imported into JBDS project, or JBoss BRMS repository \tn % Row Count 17 (+ 3) % Row 11 \SetRowColor{white} & In Business Central web interface \tn % Row Count 18 (+ 1) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{p{0.4977 cm} p{0.4977 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Bibliography}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{{\bf{Red Hat Training}}} \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} \mymulticolumn{2}{x{5.377cm}}{Authoring Rules for Red Hat JBoss BRMS - Student Workbook} \tn % Row Count 3 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Package: Deployable}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{p{5.377cm}}{\vspace{1px}\centerline{\includegraphics[width=5.1cm]{/web/www.cheatography.com/public/uploads/nataliemoore_1473125238_2016-09-06 11_26_32-Red Hat Training Guide JB461.pdf - Adobe Acrobat Pro.png}}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{BRMS supports the deployment of business rules to Red Hat JBossvMiddleware platforms and non-JBoss runtime environments. \newline \newline Because the engine is based on Java EE, it is portable to any supported Java EE runtime.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{0.89586 cm} x{4.08114 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{A rule is a declarative statement of knowledge}} \tn % Row 0 \SetRowColor{LightBackground} \seqsplit{Remember:} & Rules are not called directly, and do not call other rules directly. Rules operate in response to facts only and are fired by the rule engine. \tn % Row Count 5 (+ 5) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{p{0.4977 cm} p{0.4977 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Working memory includes an API}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{{\bf{update(object, handle)}} or {\bf{update(object)}}} \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} \mymulticolumn{2}{x{5.377cm}}{Tell the engine that an object has changed} \tn % Row Count 2 (+ 1) % Row 2 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{{\emph{However}} if property change listeners are provided to the JavaBeans that are inserted into the engine, it is possible to avoid the need to call update when the object changes.} \tn % Row Count 6 (+ 4) % Row 3 \SetRowColor{white} \mymulticolumn{2}{x{5.377cm}}{{\bf{insert(new Something())}}} \tn % Row Count 7 (+ 1) % Row 4 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{Place a new object into the working memory} \tn % Row Count 8 (+ 1) % Row 5 \SetRowColor{white} \mymulticolumn{2}{x{5.377cm}}{{\bf{retract(handle)}}} \tn % Row Count 9 (+ 1) % Row 6 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{Removes an object from working memory (delete)} \tn % Row Count 10 (+ 1) % Row 7 \SetRowColor{white} \mymulticolumn{2}{x{5.377cm}}{{\bf{insertLogical(new Something())}}} \tn % Row Count 11 (+ 1) % Row 8 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{Same as insert except that object retracted when no more facts to support truth of firing rule} \tn % Row Count 13 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Pattern structure (LHS element)}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{p{5.377cm}}{\vspace{1px}\centerline{\includegraphics[width=5.1cm]{/web/www.cheatography.com/public/uploads/nataliemoore_1473136046_2016-09-06 14_24_53-Red Hat Training Guide JB461.pdf - Adobe Acrobat Pro.png}}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{There are three types of restrictions: \newline 1. Single value restrictions. \newline 2. Compound value restrictions. \newline 3. Multi-restrictions. \newline \newline When a restriction is applied to a field this becomes a constraint. When a constraint is applied to an object it becomes a pattern :)} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{p{0.4977 cm} x{4.4793 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Constraints (LHS)}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{{\bf{Might be:}}} \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} & single field \tn % Row Count 2 (+ 1) % Row 2 \SetRowColor{LightBackground} & inline "eval" \tn % Row Count 3 (+ 1) % Row 3 \SetRowColor{white} & constraint group (several field constraints tied together) \tn % Row Count 5 (+ 2) % Row 4 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{{\bf{Connected using symbols:}}} \tn % Row Count 6 (+ 1) % Row 5 \SetRowColor{white} ' & Comma \tn % Row Count 7 (+ 1) % Row 6 \SetRowColor{LightBackground} \&\& & Represents {\bf{and}}. All patterns match. \tn % Row Count 9 (+ 2) % Row 7 \SetRowColor{white} || & Represents {\bf{or}}. Either pattern matches. \tn % Row Count 11 (+ 2) % Row 8 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{{\bf{Operators are typically mathematical}}} \tn % Row Count 12 (+ 1) % Row 9 \SetRowColor{white} == & Equal to \tn % Row Count 13 (+ 1) % Row 10 \SetRowColor{LightBackground} \textgreater{} & Greater than \tn % Row Count 14 (+ 1) % Row 11 \SetRowColor{white} \textless{} & Less than \tn % Row Count 15 (+ 1) % Row 12 \SetRowColor{LightBackground} \textgreater{}= & Greater than or equal to \tn % Row Count 16 (+ 1) % Row 13 \SetRowColor{white} \textless{}= & Less than or equal to \tn % Row Count 17 (+ 1) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{What Is A Rule?}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{p{5.377cm}}{\vspace{1px}\centerline{\includegraphics[width=5.1cm]{/web/www.cheatography.com/public/uploads/nataliemoore_1473126272_What is a rule image.png}}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{Rules tell the system to look for certain patterns, and when found to perform certain actions. \newline "When" = Look for certain patterns \newline "Then" = Perform certain actions} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{p{0.4977 cm} p{0.4977 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Forward chaining}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{{\bf{What is forward chaining?}}} \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} \mymulticolumn{2}{x{5.377cm}}{Can be described logically as repeated application of modus ponens (the when, then statements). Forward chaining is a popular implementation strategy for expert systems, business and production rule systems.} \tn % Row Count 6 (+ 5) % Row 2 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{As a rule fires, it can change the objects in working memory.} \tn % Row Count 8 (+ 2) % Row 3 \SetRowColor{white} \mymulticolumn{2}{x{5.377cm}}{Some rules should fire before others} \tn % Row Count 9 (+ 1) % Row 4 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{Forward chaining is in the rule engines to decide which rules to fire in which order} \tn % Row Count 11 (+ 2) % Row 5 \SetRowColor{white} \mymulticolumn{2}{x{5.377cm}}{Recursive: rules are executed when the LHS conditions are met. The actions may change facts, causing new rules to be fired.} \tn % Row Count 14 (+ 3) % Row 6 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{{\bf{Important to understand. Understanding forward chaining will help get the most out of the rule engine}}} \tn % Row Count 17 (+ 3) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Modus Ponens}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{Latin name of a very old and common form of propositional logic} \tn % Row Count 2 (+ 2) % Row 1 \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{"P implies Q; P is asserted to be true, so therefore Q must be true."} \tn % Row Count 4 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{If it is raining, I will meet you at the theater. \newline It is raining. \newline Therefore, I will meet you at the theater.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{1.24425 cm} x{3.73275 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{RHS actions/consequences}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{Consequence or action required} \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} \mymulticolumn{2}{x{5.377cm}}{Sctions to be executed by the rule.} \tn % Row Count 2 (+ 1) % Row 2 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{Never use use imperative or conditional code on RHS} \tn % Row Count 4 (+ 2) % Row 3 \SetRowColor{white} \mymulticolumn{2}{x{5.377cm}}{{\bf{Must be atomic}}} \tn % Row Count 5 (+ 1) % Row 4 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{"when this, then do this," not "when this, maybe do this or this."} \tn % Row Count 7 (+ 2) % Row 5 \SetRowColor{white} \mymulticolumn{2}{x{5.377cm}}{{\bf{Typical actions}}} \tn % Row Count 8 (+ 1) % Row 6 \SetRowColor{LightBackground} update & Indicates that an object has changed and rules may need to be reconsidered. \tn % Row Count 11 (+ 3) % Row 7 \SetRowColor{white} insert & inserts a new object in working memory \tn % Row Count 13 (+ 2) % Row 8 \SetRowColor{LightBackground} \seqsplit{insertLogical} & inserts a new object, but the object is automatically retracted when there are no more facts to support the truth of the rule. \tn % Row Count 18 (+ 5) % Row 9 \SetRowColor{white} retract & removes an object from working memory (delete) \tn % Row Count 20 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}--} \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{Rules should be as declarative as possible. Think about whether it is a rule or code. Code belongs in the object model, utility classes and functions. Code should be kept out of rules as much as possible. \newline \newline Java code should be limited to action statements (such as setting a value). Do not use if-else, for-while loops, or other Java logic.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} % That's all folks \end{multicols*} \end{document}