Thanks, Pierre.

It doesn't look like NiFi would create 2 relationships, one per condition.
It only seems to allow for 'matched' and 'unmatched' relationships.
Therefore, I believe I'll need:

   - a RouteOnAttribute with 'matched' that points to subflow for
   processing of    property=is_xml, value=mimetype equals 'text/xml'
   - the 'unmatched' on it would lead to the next RouteOnAttribute where
   'matched' would point to subflow for processing of    property=is_html,
   value=mimetype equals 'text/html'
   - the 'unmatched' on the second RouteOnAttribute would lead to the
   subflow for processing all other cases

(It'll probably be OK to use the same boolean prop for 'is_xml' and
'is_html', something like 'is_match')

It'd be quite great to have a visual representation of this if/then/else
type of construct but the chained set of RouteOnAttribute's should work.

- Dmitry



On Thu, Mar 24, 2016 at 5:15 PM, Pierre Villard <[email protected]
> wrote:

> Hi Dmitry,
>
> I'd suggest to add RouteOnAttribute processor and add a custom property by
> expected condition :
> one property with name textxml (for example) and with value the EL you
> suggested (it supposed that you have the mime type in one of the attribute
> of your flow file)
> property with name texthml (for example) and with value the EL
> ${mimetype:equals('text/html')}
>
> then you will have two automaticcaly created relationship and one
> "unmatched". It will answer your need.
>
> Hope this helps,
> Pierre
>
> 2016-03-24 21:29 GMT+01:00 Dmitry Goldenberg <[email protected]>:
>
>> Hi,
>>
>> I'm looking for a 'best practice' to set up a conditional within a
>> dataflow, based on some attribute(s).
>>
>> I want to express something like this:
>>
>> if ("mimetype" equals "text/xml") {
>>     route FlowFile to XmlProcessingSubflow
>> } else if ("mimetype" equals "text/html") {
>>     route FlowFile to HtmlProcessingSubflow
>> } else {
>>     route FlowFile to DefaultDocProcessingSubflow
>> }
>>
>> How can I do this in NiFi?  I'm looking at RouteOnAttribute but I can't
>> quite grok the Routing Strategy:
>>
>> Route to Property name
>> A copy of the FlowFile will be routed to each relationship whose
>> corresponding expression evaluates to “true”.
>>
>> Route to ‘matched’ if all match
>> Requires that all user-defined expressions evaluate to true for the
>> FlowFile to be considered a match
>>
>> Route to ‘matched’ if any matches
>> Requires that at least one user-defined expression evaluate to true for
>> the FlowFile to be considered a match.
>>
>> The first option I'm quite confused about. Route to property? Where are
>> the relationships I'd be routing to?
>>
>> The second option seems to be what I need. Presumably I can add a "New
>> property" with the name "mimetype"; the value -- not sure. Perhaps this
>> is ${mimetype:equals('text/xml')}    ?  But I already have "mimetype" in
>> the property name.  Should the expression be somewhat different?
>>
>> Subsequently, if this allows me to route to one subflow based on one
>> value, how do I route based on a different value of the mimetype, e.g.
>> "text/html", to another subflow?
>>
>> Thanks.
>> - Dmitry
>>
>>
>>
>>
>

Reply via email to