forked from open-rpa/docs
-
Notifications
You must be signed in to change notification settings - Fork 0
/
openflow.html
2686 lines (2573 loc) · 167 KB
/
openflow.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!-->
<html class="no-js" lang="en">
<!--<![endif]-->
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>2. OpenFlow — BPA/OpenIAP Docs 1.0.5 documentation</title>
<script type="text/javascript" src="static/js/modernizr.min.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="./"
src="static/documentation_options.js"></script>
<script src="static/jquery.js"></script>
<script src="static/underscore.js"></script>
<script src="static/doctools.js"></script>
<script src="static/language_data.js"></script>
<script type="text/javascript" src="static/js/theme.js"></script>
<link rel="stylesheet" href="static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="static/pygments.css" type="text/css" />
<link rel="stylesheet" href="static/styles.css" type="text/css" />
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="3. OpenRPA" href="openrpa.html" />
<link rel="prev" title="1. Introduction to RPA" href="rpa.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search">
<a href="index.html" class="icon icon-home"> BPA/OpenIAP Docs
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="rpa.html">1. <strong>Introduction to
RPA</strong></a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">2.
<strong>OpenFlow</strong></a>
<ul>
<li class="toctree-l2"><a class="reference internal" href="#what-is-openflow">2.1. <strong>What is
OpenFlow?</strong></a></li>
<li class="toctree-l2"><a class="reference internal" href="#installing-first-run">2.2.
<strong>Installing, First Run</strong></a></li>
<li class="toctree-l2"><a class="reference internal" href="#accessing-for-the-first-time">2.3.
<strong>Accessing for the first time</strong></a></li>
<li class="toctree-l2"><a class="reference internal" href="#creating-a-new-user">2.4. <strong>Creating a
new user</strong></a></li>
<li class="toctree-l2"><a class="reference internal" href="#roles">2.5. <strong>Roles</strong></a>
<ul>
<li class="toctree-l3"><a class="reference internal" href="#what-are-roles">2.5.1. What are
Roles?</a></li>
<li class="toctree-l3"><a class="reference internal" href="#rparole-pool">2.5.2. RPARole (Pool)</a>
<ul>
<li class="toctree-l4"><a class="reference internal" href="#but-what-is-a-consumer">2.5.2.1. But
what is a consumer?</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal"
href="#granting-permissions-admin-nodered-user">2.5.3. Granting permissions (admin, nodered,
user)</a>
<ul>
<li class="toctree-l4"><a class="reference internal" href="#node-red-permissions">2.5.3.1.
Node-RED permissions</a></li>
<li class="toctree-l4"><a class="reference internal"
href="#list-of-main-roles-inside-openflow">2.5.3.2. List of Main Roles inside OpenFlow</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#workflows-tab-node-red">2.6.
<strong>Workflows Tab (Node-RED)</strong></a>
<ul>
<li class="toctree-l3"><a class="reference internal" href="#what-is-it">2.6.1. What is it?</a></li>
<li class="toctree-l3"><a class="reference internal" href="#invoking">2.6.2. Invoking</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#rpa-workflows-tab-openrpa">2.7. <strong>RPA
Workflows Tab (OpenRPA)</strong></a>
<ul>
<li class="toctree-l3"><a class="reference internal" href="#id2">2.7.1. What is it?</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id3">2.7.2. Invoking</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#forms">2.8. <strong>Forms</strong></a>
<ul>
<li class="toctree-l3"><a class="reference internal" href="#creating-a-form">2.8.1. Creating a
Form</a></li>
<li class="toctree-l3"><a class="reference internal" href="#configuring-the-form-component">2.8.2.
Configuring the Form Component</a></li>
<li class="toctree-l3"><a class="reference internal" href="#general-form-settings">2.8.3. General
Form Settings</a></li>
<li class="toctree-l3"><a class="reference internal" href="#basic-form-components">2.8.4. Basic Form
Components</a>
<ul>
<li class="toctree-l4"><a class="reference internal" href="#text-field">2.8.4.1. Text Field</a>
</li>
<li class="toctree-l4"><a class="reference internal" href="#text-area">2.8.4.2. Text Area</a>
</li>
<li class="toctree-l4"><a class="reference internal" href="#number">2.8.4.3. Number</a></li>
<li class="toctree-l4"><a class="reference internal" href="#password">2.8.4.4. Password</a></li>
<li class="toctree-l4"><a class="reference internal" href="#checkbox">2.8.4.5. Checkbox</a></li>
<li class="toctree-l4"><a class="reference internal" href="#select-boxes">2.8.4.6. Select
Boxes</a></li>
<li class="toctree-l4"><a class="reference internal" href="#select">2.8.4.7. Select</a></li>
<li class="toctree-l4"><a class="reference internal" href="#radio">2.8.4.8. Radio</a></li>
<li class="toctree-l4"><a class="reference internal" href="#button">2.8.4.9. Button</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#advanced-form-components">2.8.5.
Advanced Form Components</a>
<ul>
<li class="toctree-l4"><a class="reference internal" href="#email">2.8.5.1. Email</a></li>
<li class="toctree-l4"><a class="reference internal" href="#url">2.8.5.2. URL</a></li>
<li class="toctree-l4"><a class="reference internal" href="#phone-number">2.8.5.3. Phone
Number</a></li>
<li class="toctree-l4"><a class="reference internal" href="#tags">2.8.5.4. Tags</a></li>
<li class="toctree-l4"><a class="reference internal" href="#address">2.8.5.5. Address</a></li>
<li class="toctree-l4"><a class="reference internal" href="#date-time">2.8.5.6. Date / Time</a>
</li>
<li class="toctree-l4"><a class="reference internal" href="#day">2.8.5.7. Day</a></li>
<li class="toctree-l4"><a class="reference internal" href="#time">2.8.5.8. Time</a></li>
<li class="toctree-l4"><a class="reference internal" href="#currency">2.8.5.9. Currency</a></li>
<li class="toctree-l4"><a class="reference internal" href="#survey">2.8.5.10. Survey</a></li>
<li class="toctree-l4"><a class="reference internal" href="#signature">2.8.5.11. Signature</a>
</li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#layout-form-components">2.8.6. Layout
Form Components</a>
<ul>
<li class="toctree-l4"><a class="reference internal" href="#html-element">2.8.6.1. HTML
Element</a></li>
<li class="toctree-l4"><a class="reference internal" href="#content">2.8.6.2. Content</a></li>
<li class="toctree-l4"><a class="reference internal" href="#columns">2.8.6.3. Columns</a></li>
<li class="toctree-l4"><a class="reference internal" href="#field-set">2.8.6.4. Field Set</a>
</li>
<li class="toctree-l4"><a class="reference internal" href="#panel">2.8.6.5. Panel</a></li>
<li class="toctree-l4"><a class="reference internal" href="#table">2.8.6.6. Table</a></li>
<li class="toctree-l4"><a class="reference internal" href="#tabs">2.8.6.7. Tabs</a></li>
<li class="toctree-l4"><a class="reference internal" href="#well">2.8.6.8. Well</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#entities-mongodb">2.9. <strong>Entities -
MongoDB</strong></a>
<ul>
<li class="toctree-l3"><a class="reference internal" href="#what-are-entities">2.9.1. What are
Entities?</a>
<ul>
<li class="toctree-l4"><a class="reference internal" href="#workflow-instances">2.9.1.1.
workflow_instances</a></li>
<li class="toctree-l4"><a class="reference internal" href="#openrpa">2.9.1.2. openrpa</a></li>
<li class="toctree-l4"><a class="reference internal" href="#entities">2.9.1.3. entities</a></li>
<li class="toctree-l4"><a class="reference internal" href="#config">2.9.1.4. config</a></li>
<li class="toctree-l4"><a class="reference internal" href="#openrpa-instances">2.9.1.5.
openrpa_instances</a></li>
<li class="toctree-l4"><a class="reference internal" href="#users">2.9.1.6. users</a></li>
<li class="toctree-l4"><a class="reference internal" href="#workflow">2.9.1.7. workflow</a></li>
<li class="toctree-l4"><a class="reference internal" href="#id7">2.9.1.8. forms</a></li>
<li class="toctree-l4"><a class="reference internal" href="#nodered">2.9.1.9. nodered</a></li>
<li class="toctree-l4"><a class="reference internal" href="#audit">2.9.1.10. audit</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#usages">2.9.2. Usages</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id8">2.9.3. Collections</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#openflow-faq">2.10. <strong>OpenFlow -
FAQ</strong></a>
<ul>
<li class="toctree-l3"><a class="reference internal" href="#installation-issues">2.10.1.
Installation issues</a>
<ul>
<li class="toctree-l4"><a class="reference internal"
href="#windows-build-tools-is-stuck-at-successfully-installed-python-2-7">2.10.1.1. <code
class="docutils literal notranslate"><span class="pre">windows-build-tools</span></code>
is stuck at <code
class="docutils literal notranslate"><span class="pre">Successfully</span> <span class="pre">installed</span> <span class="pre">Python</span> <span class="pre">2.7</span></code></a>
</li>
<li class="toctree-l4"><a class="reference internal"
href="#vs-code-was-unable-to-import-js-stream-when-trying-to-run-openflow-in-developer-mode">2.10.1.2.
VS Code was unable to import <code
class="docutils literal notranslate"><span class="pre">js_stream</span></code> when trying
to run OpenFlow in Developer mode</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="openrpa.html">3. <strong>OpenRPA</strong></a>
</li>
<li class="toctree-l1"><a class="reference internal" href="node_red.html">4. <strong>Node-RED</strong></a>
</li>
<li class="toctree-l1"><a class="reference internal" href="appendix_a.html">5. <strong>Appendix
A</strong></a></li>
<li class="toctree-l1"><a class="reference internal" href="appendix_b.html">6. <strong>Appendix
B</strong></a></li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="license.html">1. License</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">BPA/OpenIAP Docs</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="index.html">Docs</a> »</li>
<li><span class="section-number">2. </span><strong>OpenFlow</strong></li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr />
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="openflow">
<h1><span class="section-number">2. </span><strong>OpenFlow</strong><a class="headerlink"
href="#openflow" title="Permalink to this headline">¶</a></h1>
<div class="section" id="what-is-openflow">
<h2><span class="section-number">2.1. </span><strong>What is OpenFlow?</strong><a class="headerlink"
href="#what-is-openflow" title="Permalink to this headline">¶</a></h2>
<p><strong>OpenFlow</strong> is the heart of the <em>OON</em> stack, orchestrating all the activities
between the applications. Here are some of its main features:</p>
<ul class="simple">
<li>
<p>Managing, invoking and configuring your robots and workflows;</p>
</li>
<li>
<p>Managing users and their permission levels;</p>
</li>
<li>
<p>Creating forms whenever a human must participate in a process and viewing all currently
assigned or idle workflows pending to the user;</p>
</li>
<li>
<p>Managing MongoDB collections and entries;</p>
</li>
<li>
<p>A central cloud repository, allowing its content (workflows, forms, MongoDB files, …) to be
available to the robots, users and other applications .</p>
</li>
</ul>
</div>
<div class="section" id="installing-first-run">
<h2><span class="section-number">2.2. </span><strong>Installing, First Run</strong><a
class="headerlink" href="#installing-first-run" title="Permalink to this headline">¶</a></h2>
<p>This section’s purpose is to help the user install an <strong>OpenFlow</strong> instance
<strong>locally</strong>. If you already have an <strong>OpenFlow</strong> URL provided, you may
skip this step.
</p>
<p>Please use guide provided at <a class="reference external"
href="https://openflow.openiap.io">Install guides</a>
Using docker is the preferred and recommended way <a class="reference external"
href="https://openflow.openiap.io/dockercompose">Install using docker</a></p>
</div>
<div class="section" id="accessing-for-the-first-time">
<h2><span class="section-number">2.3. </span><strong>Accessing for the first time</strong><a
class="headerlink" href="#accessing-for-the-first-time" title="Permalink to this headline">¶</a>
</h2>
<p>To access <strong>OpenFlow</strong> webpage, simply go to the URL as specified by your working
environment (contact your IT responsible, if needed). If running a local version, by default the URL
should be <code
class="docutils literal notranslate"><span class="pre">http://localhost.openiap.io</span></code>.
</p>
<p>If you do not have access to <strong>OpenFlow</strong> and you are not running a local version, we
encourage you to do some experimentation using our own environment, which can be found at <code
class="docutils literal notranslate"><span class="pre">https://app.openiap.io</span></code>.</p>
<p>After accessing the page, users are prompted to authenticate themselves. After signing in, the user
is redirected to the home page of <strong>OpenFlow</strong> home page.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>If you are accessing OpenFlow environment (<code
class="docutils literal notranslate"><span class="pre">https://app.openiap.io</span></code>),
when prompted for credentials, you may type any username/password combination and your user will
be then created automatically with the same credentials. Please keep note of your
username/password!</p>
</div>
<div class="figure align-center" id="id9">
<a class="reference internal image-reference" href="images/openflow_sign_in_page.png"><img
alt="images/openflow_sign_in_page.png" src="images/openflow_sign_in_page.png"
style="width: 250.0px; height: 222.0px;" /></a>
<p class="caption"><span class="caption-text"><strong>Authentication page.</strong></span><a
class="headerlink" href="#id9" title="Permalink to this image">¶</a></p>
</div>
<div class="figure align-center" id="id10">
<a class="reference internal image-reference" href="images/openflow_index_page.png"><img
alt="images/openflow_index_page.png" src="images/openflow_index_page.png"
style="width: 478.09999999999997px; height: 219.45px;" /></a>
<p class="caption"><span class="caption-text"><strong>OpenFlow’s home page.</strong></span><a
class="headerlink" href="#id10" title="Permalink to this image">¶</a></p>
</div>
</div>
<div class="section" id="creating-a-new-user">
<h2><span class="section-number">2.4. </span><strong>Creating a new user</strong><a class="headerlink"
href="#creating-a-new-user" title="Permalink to this headline">¶</a></h2>
<p>To create a new user, first click the Admin dropdown and select the Users option.</p>
<div class="figure align-center" id="id11">
<a class="reference internal image-reference" href="images/openflow_dropdown_index_page.png"><img
alt="images/openflow_dropdown_index_page.png" src="images/openflow_dropdown_index_page.png"
style="width: 386.0px; height: 230.5px;" /></a>
<p class="caption"><span class="caption-text"><strong>Admin dropdown.</strong></span><a
class="headerlink" href="#id11" title="Permalink to this image">¶</a></p>
</div>
<p>Now click the navy blue <code
class="docutils literal notranslate"><span class="pre">Add</span> <span class="pre">user</span></code>
button.</p>
<div class="figure align-center" id="id12">
<a class="reference internal image-reference" href="images/openflow_users_page.png"><img
alt="images/openflow_users_page.png" src="images/openflow_users_page.png"
style="width: 479.84999999999997px; height: 219.79999999999998px;" /></a>
<p class="caption"><span class="caption-text"><strong>Users page.</strong></span><a
class="headerlink" href="#id12" title="Permalink to this image">¶</a></p>
</div>
<p>Now, input the <code class="docutils literal notranslate"><span class="pre">name</span></code>,
<code class="docutils literal notranslate"><span class="pre">username</span></code> and <code
class="docutils literal notranslate"><span class="pre">password</span></code> and click
<strong>Save</strong>. Notice that the recently created <code
class="docutils literal notranslate"><span class="pre">user</span></code> does not have any Roles
assigned to them. More information about Roles is available in the next section.
</p>
<div class="figure align-center" id="id13">
<a class="reference internal image-reference" href="images/openflow_userdetail_page.png"><img
alt="images/openflow_userdetail_page.png" src="images/openflow_userdetail_page.png"
style="width: 479.75px; height: 215.75px;" /></a>
<p class="caption"><span class="caption-text"><strong>User creation page.</strong></span><a
class="headerlink" href="#id13" title="Permalink to this image">¶</a></p>
</div>
</div>
<div class="section" id="roles">
<h2><span class="section-number">2.5. </span><strong>Roles</strong><a class="headerlink" href="#roles"
title="Permalink to this headline">¶</a></h2>
<p>Here we will explained what <strong>Roles</strong> in OpenFlow are and how they impact with
<strong>OpenRPA</strong> and <strong>Node-RED</strong> access privileges.
</p>
<div class="section" id="what-are-roles">
<h3><span class="section-number">2.5.1. </span>What are Roles?<a class="headerlink"
href="#what-are-roles" title="Permalink to this headline">¶</a></h3>
<p>Roles in <strong>OpenFlow</strong> are a units or collection of privileges and permissions that
can be assigned to one or more users or to a group of users. These Roles serve various purposes,
such as granting access to projects/workflows inside <strong>OpenRPA</strong> or granting access
to specific flows inside <strong>Node-RED</strong>.</p>
<p>Remember that both human users and robots are called <code
class="docutils literal notranslate"><span class="pre">users</span></code> in
<strong>OpenFlow</strong> and Roles work the same way for both.
</p>
</div>
<div class="section" id="rparole-pool">
<h3><span class="section-number">2.5.2. </span>RPARole (Pool)<a class="headerlink"
href="#rparole-pool" title="Permalink to this headline">¶</a></h3>
<p>Sometimes it is desired to create a Pool of <code
class="docutils literal notranslate"><span class="pre">users</span></code>, e.g. “Buyers”, so
that many <code class="docutils literal notranslate"><span class="pre">users</span></code>
(buyer_John, buyer_Maria, buyer_robot1, …) can be inserted in this Pool. By doing so, it will
become easier to manage privileges and accesses when compared to manually adjusting each <code
class="docutils literal notranslate"><span class="pre">user</span></code>’s Roles.</p>
<p>RPARole also allows workflows or Node-RED flows to assign a task to the “Buyers” Pool instead of
a specific <code class="docutils literal notranslate"><span class="pre">user</span></code>. This
way, a workflow can be assigned to any <code
class="docutils literal notranslate"><span class="pre">user</span></code> from a Pool, the
framework will automatically assign the task to the first available listening <code
class="docutils literal notranslate"><span class="pre">user</span></code>.</p>
<p>Therefore, <strong>RPARole</strong> is a parameter set in the Role’s editing page of a role which
enables a Role to become a Pool of users instead.</p>
<p>If set, all <code class="docutils literal notranslate"><span class="pre">users</span></code>
added to the Role start listening to the Role-Queue <code
class="docutils literal notranslate"><span class="pre">id</span></code>. <code
class="docutils literal notranslate"><span class="pre">Users</span></code> now become consumers
of the Queue. When an <code
class="docutils literal notranslate"><span class="pre">user</span></code> logs in, they listen
natively to their own User-Queue <code
class="docutils literal notranslate"><span class="pre">id</span></code>. For each Role with the
parameter RPARole that this user is memberof, the user will also start listening to Role-Queue
<code class="docutils literal notranslate"><span class="pre">id</span></code>. See more at <a
class="reference external" href="https://cs.stackexchange.com/q/86372">pool</a> (<code
class="docutils literal notranslate"><span class="pre">https://cs.stackexchange.com/q/86372</span></code>).
</p>
<div class="section" id="but-what-is-a-consumer">
<h4><span class="section-number">2.5.2.1. </span>But what is a consumer?<a class="headerlink"
href="#but-what-is-a-consumer" title="Permalink to this headline">¶</a></h4>
<blockquote>
<div>
<p><em>The term “consumer” means different things in different contexts. Here a consumer is an
application (or application instance) that consumes messages. The same application can
also publish messages and therefore is a publisher at the same time. In this case a
consumer is a subscription for message delivery that has to be registered before
deliveries begin and it can also be cancelled by the application</em>.</p>
<p><em>RabbitMQ is a messaging broker. It accepts messages from publishers, routes them. If
there were queues to route to, stores them for consumption or immediately delivers to
consumers, if any. Consumers consume messages from the queue. In order to consume them
there has to be a queue. When a new consumer is added, assuming there are already messages
ready in the queue, deliveries will start immediately. The target queue can be empty at
the time of consumer registration. In that case first deliveries will happen when new
messages are enqueued</em>.¹</p>
</div>
</blockquote>
<p>¹ - <a class="reference external" href="https://www.rabbitmq.com/consumers.html">Consumers</a>
(<code
class="docutils literal notranslate"><span class="pre">https://www.rabbitmq.com/consumers.html</span></code>)
</p>
</div>
</div>
<div class="section" id="granting-permissions-admin-nodered-user">
<h3><span class="section-number">2.5.3. </span>Granting permissions (admin, nodered, user)<a
class="headerlink" href="#granting-permissions-admin-nodered-user"
title="Permalink to this headline">¶</a></h3>
<p>Changing permissions in <strong>OpenFlow</strong> is very easy.</p>
<p>In order to change roles, the user must be an <code
class="docutils literal notranslate"><span class="pre">Admin</span></code>, i.e., be assigned to
the <code class="docutils literal notranslate"><span class="pre">admins</span></code> role.</p>
<p>Then, the user must click the <code
class="docutils literal notranslate"><span class="pre">Admin</span></code> dropdown inside
<strong>OpenFlow</strong>’s webpage.
</p>
<div class="figure align-center">
<a class="reference internal image-reference"
href="images/openflow_roles_click_roles_dropdown.png"><img
alt="images/openflow_roles_click_roles_dropdown.png"
src="images/openflow_roles_click_roles_dropdown.png"
style="width: 683.0px; height: 316.5px;" /></a>
</div>
<p>All you need to do now is go to the <strong>Roles</strong> page inside OpenFlow’s page and click
the <code class="docutils literal notranslate"><span class="pre">Pencil/Edit</span></code> icon
corresponding to the Role that you want to add users to. As an example, we’re going to change the
<code
class="docutils literal notranslate"><span class="pre">personal</span> <span class="pre">nodered</span> <span class="pre">users</span></code>
Role.
</p>
<div class="figure align-center">
<a class="reference internal image-reference"
href="images/openflow_roles_edit_personal_nodered_users_role.png"><img
alt="images/openflow_roles_edit_personal_nodered_users_role.png"
src="images/openflow_roles_edit_personal_nodered_users_role.png"
style="width: 683.5px; height: 328.0px;" /></a>
</div>
<p>After clicking the <code
class="docutils literal notranslate"><span class="pre">Pencil/Edit</span></code> icon, the user
is redirected to the <strong>Role</strong> page, which contains the <code
class="docutils literal notranslate"><span class="pre">Name</span></code> of the role, the <code
class="docutils literal notranslate"><span class="pre">rparole</span></code> checkbox, the <code
class="docutils literal notranslate"><span class="pre">add</span></code> input field and the
<code class="docutils literal notranslate"><span class="pre">member</span></code> list, as seen
below. To add a new <code
class="docutils literal notranslate"><span class="pre">user</span></code>/<code
class="docutils literal notranslate"><span class="pre">Role</span></code> to that Role, simply
insert the name of this <code
class="docutils literal notranslate"><span class="pre">user</span></code>/<code
class="docutils literal notranslate"><span class="pre">Role</span></code> in the <code
class="docutils literal notranslate"><span class="pre">add</span></code> input field. A dropdown
list will then appear and the user chooses which <code
class="docutils literal notranslate"><span class="pre">user</span></code>/<code
class="docutils literal notranslate"><span class="pre">Role</span></code> it is desired to be
added to that Role.
</p>
<div class="figure align-center">
<a class="reference internal image-reference" href="images/openflow_roles_add_user.png"><img
alt="images/openflow_roles_add_user.png" src="images/openflow_roles_add_user.png"
style="width: 683.0px; height: 328.5px;" /></a>
</div>
<p>After selecting the desired values, the <strong>add</strong> button will become clickable. After
clicking it, the recently selected <code
class="docutils literal notranslate"><span class="pre">user/Role</span></code> will be added to
the <code class="docutils literal notranslate"><span class="pre">member</span></code> list.
Remember to <strong>Save</strong> the changes, otherwise they will not take place.</p>
<div class="figure align-center">
<a class="reference internal image-reference"
href="images/openflow_roles_click_save_button.png"><img
alt="images/openflow_roles_click_save_button.png"
src="images/openflow_roles_click_save_button.png"
style="width: 682.5px; height: 328.0px;" /></a>
</div>
<div class="section" id="node-red-permissions">
<h4><span class="section-number">2.5.3.1. </span>Node-RED permissions<a class="headerlink"
href="#node-red-permissions" title="Permalink to this headline">¶</a></h4>
<p>Everytime a <code
class="docutils literal notranslate"><span class="pre">Workflow</span> <span class="pre">In</span></code>
node is set with a <code
class="docutils literal notranslate"><span class="pre">Queue</span> <span class="pre">name</span></code>
and the flow to which it belongs to is deployed inside <strong>Node-RED</strong>, a new Role is
created inside the <strong>Roles</strong> page with the prefix of the subdomain for the
<strong>Node-RED</strong> (default: “nodered1”), the middle part is the name of the queue (as
defined inside the node properties) and the suffix is “users”. E.g.:
“nodered1google-vision-apiusers”.
</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>When logged in as a non-<code
class="docutils literal notranslate"><span class="pre">Admin</span></code> user, to have
access and invoke that workflow inside the <strong>Workflows</strong> page, the user must be
added to that Role!</p>
</div>
</div>
<div class="section" id="list-of-main-roles-inside-openflow">
<h4><span class="section-number">2.5.3.2. </span>List of Main Roles inside OpenFlow<a
class="headerlink" href="#list-of-main-roles-inside-openflow"
title="Permalink to this headline">¶</a></h4>
<p>Here are the main Roles inside <strong>OpenFlow</strong> and their permissions.</p>
<ul class="simple">
<li>
<p><strong>filestore users</strong> - members of this Role can see all files uploaded to
<strong>OpenFlow</strong>.
</p>
</li>
<li>
<p><strong>filestore admins</strong> - members of this Role have full control (delete, update,
…) on all files uploaded to OpenFlow.</p>
</li>
<li>
<p><strong>robot users</strong> - currently unused, supposed to represent all robots.</p>
</li>
<li>
<p><strong>robot admins</strong> - currently unused, members from this role have full control
(delete, update, …) on all objects related to robots.</p>
</li>
<li>
<p><strong>personal nodered users</strong> - members of this Role can create new
<strong>Node-RED</strong> instances, if <strong>OpenFlow</strong> is running on Kubernetes.
</p>
</li>
<li>
<p><strong>nodered users</strong> - members from this Role have read-only access to all
Node-RED instances.</p>
</li>
<li>
<p><strong>nodered admins</strong> - members from this Role have full access to all Node-RED
instances.</p>
</li>
<li>
<p><strong>nodered api users</strong> - members from this Role can call APIs exposed from all
Node-RED instances, when <code
class="docutils literal notranslate"><span class="pre">api_allow_anonymous</span></code>
is set to <code class="docutils literal notranslate"><span class="pre">true</span></code>.
</p>
</li>
<li>
<p><strong>users</strong> - All users are members of this Role.</p>
</li>
<li>
<p><strong>admins</strong> - Members from this role have access to everything inside the
system. At the moment, <code
class="docutils literal notranslate"><span class="pre">admins</span></code> can do
everything the <code
class="docutils literal notranslate"><span class="pre">root</span></code> user is able to
do.</p>
</li>
</ul>
</div>
</div>
</div>
<div class="section" id="workflows-tab-node-red">
<h2><span class="section-number">2.6. </span><strong>Workflows Tab (Node-RED)</strong><a
class="headerlink" href="#workflows-tab-node-red" title="Permalink to this headline">¶</a></h2>
<div class="section" id="what-is-it">
<h3><span class="section-number">2.6.1. </span>What is it?<a class="headerlink" href="#what-is-it"
title="Permalink to this headline">¶</a></h3>
<p>Workflows in Node-RED are mainly called ‘<strong>Flows</strong>’. These flows are made to connect
different services, applications and logic functions. When grouped together they can be used to
process data and output the results to a given service or file.</p>
<p>At the <a class="reference external" href="http://localhost.openiap.io/#/Workflows">Workflows
page</a> (eg. <code
class="docutils literal notranslate"><span class="pre">http://localhost.openiap.io/#/Workflows</span></code>)
in OpenFlow, it is possible to remotely invoke these flows.</p>
<div class="figure align-center" id="id14">
<img alt="images/openflow_node_red_subflow.png" src="images/openflow_node_red_subflow.png" />
<p class="caption"><span class="caption-text"><strong>Node-RED subflow example.</strong></span><a
class="headerlink" href="#id14" title="Permalink to this image">¶</a></p>
</div>
</div>
<div class="section" id="invoking">
<h3><span class="section-number">2.6.2. </span>Invoking<a class="headerlink" href="#invoking"
title="Permalink to this headline">¶</a></h3>
<p>Workflows can be started through all three applications: OpenRPA, OpenFlow and Node-RED. Invoking
a workflow does not change it’s content, it merely executes it remotely. Think of it as a
read-only procedure.</p>
<ul>
<li>
<p><strong>Deploying a Workflow to Node-RED</strong></p>
<blockquote>
<div>
<p>Upon accessing Node-RED, flow tabs are shown containing all the flows available for
deployment. To execute a Node-RED flow, simply click the starting node inside a Node-RED
subflow. Everytime a change is made to a Node-RED flow or subflow it is required to deploy
it again so the changes are applied.</p>
<p>If it is desired to invoke a workflow through OpenFlow according to the settings set on
the Node-RED application, a few more steps are required.</p>
<ol class="arabic simple">
<li>
<p>Enter the Node-RED page and select the desired flow tab where you want to create the
subflow containing the invoke call to OpenFlow.</p>
</li>
<li>
<p>Create a subflow with a <code
class="docutils literal notranslate"><span class="pre">Workflow</span> <span class="pre">In</span></code>
node as its starting point.</p>
</li>
<li>
<p>Click twice the <code
class="docutils literal notranslate"><span class="pre">Workflow</span> <span class="pre">In</span></code>
node corresponding to the workflow you want to create.</p>
</li>
<li>
<p>Name it by setting up the <code
class="docutils literal notranslate"><span class="pre">Queue</span> <span class="pre">name</span></code>
input field.</p>
</li>
<li>
<p>If desired, route it to send a form back to the user by using <code
class="docutils literal notranslate"><span class="pre">Workflow</span> <span class="pre">Out</span></code>
(more about Forms below).</p>
</li>
<li>
<p>Check one or both of the checkboxes: RPA - to enable this node to be invoked from
OpenRPA - and WEB - to enable invoking from OpenFlow.</p>
</li>
<li>
<p>Deploy the current flow.</p>
</li>
</ol>
<p>It is important to remark that when a <code
class="docutils literal notranslate"><span class="pre">Workflow</span> <span class="pre">In</span></code>
node is deployed, it will create a corresponding role inside OpenFlow named
“nodered$<<code
class="docutils literal notranslate"><span class="pre">Queue</span> <span class="pre">name</span></code>>”,
and only users that are members of this role can invoke this workflow. On the following
next steps, if you can’t see your workflow when attempting to remotely invoke it, double
check and see if your user is a member of that role!</p>
</div>
</blockquote>
</li>
</ul>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>The user must have the <code
class="docutils literal notranslate"><span class="pre">nodered</span> <span class="pre">users</span></code>
role enabled in order to able to invoke Node-RED flows from within OpenFlow.</p>
</div>
<div class="figure align-center" id="id15">
<img alt="images/openflow_setting_nodered_workflow.png"
src="images/openflow_setting_nodered_workflow.png" />
<p class="caption"><span class="caption-text"><strong>Enabling Node-RED invoking from
OpenFlow.</strong></span><a class="headerlink" href="#id15"
title="Permalink to this image">¶</a></p>
</div>
<ul>
<li>
<p><strong>Invoking a Node-RED workflow in OpenFlow</strong></p>
<p>After the steps above are complete, go to the <a class="reference external"
href="http://localhost.openiap.io/#/Workflows">Workflows page</a> (eg. <code
class="docutils literal notranslate"><span class="pre">http://localhost.openiap.io/#/Workflows</span></code>)
and directly invoke the desired workflow. A form page will then open to choose the input
parameters, if any.</p>
<p>The forms are either automatically generated by OpenRPA, according to the variables preset -
more on that on OpenRPA’s Variables section - or manually generated by the user on the <a
class="reference external" href="http://localhost.openiap.io/#/Forms">Forms page</a> (eg.
<code
class="docutils literal notranslate"><span class="pre">http://localhost.openiap.io/#/Forms</span></code>).
</p>
<p>Upon clicking submit on a form, the parameters are sent to the robot for processing and
execution of the given workflow.</p>
</li>
</ul>
<div class="figure align-default" id="id16">
<img alt="images/openflow_workflows_page.png" src="images/openflow_workflows_page.png" />
<p class="caption"><span class="caption-text"><strong>Workflows page.</strong></span><a
class="headerlink" href="#id16" title="Permalink to this image">¶</a></p>
</div>
<div class="figure align-default" id="id17">
<img alt="images/openflow_form_example.png" src="images/openflow_form_example.png" />
<p class="caption"><span class="caption-text"><strong>Form example.</strong></span><a
class="headerlink" href="#id17" title="Permalink to this image">¶</a></p>
</div>
</div>
</div>
<div class="section" id="rpa-workflows-tab-openrpa">
<h2><span class="section-number">2.7. </span><strong>RPA Workflows Tab (OpenRPA)</strong><a
class="headerlink" href="#rpa-workflows-tab-openrpa" title="Permalink to this headline">¶</a></h2>
<div class="section" id="id2">
<h3><span class="section-number">2.7.1. </span>What is it?<a class="headerlink" href="#id2"
title="Permalink to this headline">¶</a></h3>
<p>Workflows in OpenRPA and OpenFlow are the same thing, an algorithm or a sequence of steps that
execute a meaningful task. The difference is that when you invoke a workflow in OpenFlow, it
creates an instance of that workflow. By accessing the Workflows tab, you may invoke workflows
remotely, meaning, the stack in OpenFlow will send a message to the available agent to process and
execute the given workflow.</p>
<p>From OpenFlow you can create forms, grant permissions to a given workflow and most importantly
invoke it.</p>
<p>OpenFlow automatically manages the workflow repository. When properly connected, by saving a
workflow inside OpenRPA, it will also automatically appear inside the Workflows webpage.</p>
<p>To download a workflow, simply go to the RPA Workflows link and click download. After dowloading
the .XAML file, you may share it with others or import it into your OpenRPA client.</p>
</div>
<div class="section" id="id3">
<h3><span class="section-number">2.7.2. </span>Invoking<a class="headerlink" href="#id3"
title="Permalink to this headline">¶</a></h3>
<ul>
<li>
<p><strong>Methods for Invoking</strong></p>
<blockquote>
<div>
<p>Here we discuss the methods for invoking a workflow using OpenFlow.</p>
</div>
</blockquote>
</li>
<li>
<p><strong>Invoking through OpenFlow’s RPA Workflows Page</strong></p>
<blockquote>
<div>
<p>To invoke a workflow through OpenFlow, simply go to <a class="reference external"
href="http://localhost.openiap.io/#/RPAWorkflows">RPA Workflows page</a> (eg. <a
class="reference external"
href="http://localhost.openiap.io/#/Workflows">http://localhost.openiap.io/#/Workflows</a>)
and click Invoke, another page for the specific workflow will be opened where all the
forms needed to be filled are going to be presented. Simply fill them and click Invoke
again. The input data is then sent to the chosen robot/agent and it will start processing
the workflow.</p>
<p>Data processing is bi-directional: input parameters are sent to a robot/agent and the
workflow output will also be returned. That means that you can make many workflows calling
different applications. Think of it as a message, messages are sent, read and replied to.
Nothing prevents that message from being sent, read or replied to multiple times.</p>
</div>
</blockquote>
</li>
</ul>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>For the user to invoke a workflow using OpenFlow, the user must have the proper permissions.
See more at OpenRPA’s chapter Granting permissions to users/roles.</p>
</div>
<div class="figure align-center" id="id18">
<img alt="images/openflow_rpa_workflows.png" src="images/openflow_rpa_workflows.png" />
<p class="caption"><span class="caption-text"><strong>RPA Workflows page.</strong></span><a
class="headerlink" href="#id18" title="Permalink to this image">¶</a></p>
</div>
</div>
</div>
<div class="section" id="forms">
<h2><span class="section-number">2.8. </span><strong>Forms</strong><a class="headerlink" href="#forms"
title="Permalink to this headline">¶</a></h2>
<p>Forms are an user-friendly way of passing input to a workflow by creating dynamic OpenFlow’s
webpages. There are two ways of generating a Form: one of them is through OpenFlow’s automatically
generated Forms which are created upon saving a Workflow into its repository and the other one is
manually creating a Form and connecting it to a Node-RED workflow.</p>
<p>For thorough information on how to use Forms, please refer to <a class="reference external"
href="https://help.form.io/userguide/introduction/">form.io Intro</a> (<code
class="docutils literal notranslate"><span class="pre">https://help.form.io/userguide/introduction/</span></code>).
Most of this chapter is based on this guide.</p>
<div class="section" id="creating-a-form">
<h3><span class="section-number">2.8.1. </span>Creating a Form<a class="headerlink"
href="#creating-a-form" title="Permalink to this headline">¶</a></h3>
<p>Creating a form is rather easy and simple. Go to the Forms page, where all Forms are listed,
available under the Admin dropdown or in the <a class="reference external"
href="http://localhost.openiap.io/#/Forms">Forms page</a> (eg. <a class="reference external"
href="http://localhost.openiap.io/#/Forms">http://localhost.openiap.io/#/Forms</a>) and click
the Navy blue <code
class="docutils literal notranslate"><span class="pre">Add</span> <span class="pre">form</span></code>
button.</p>
<div class="figure align-center" id="id19">
<img alt="images/openflow_forms_page.png" src="images/openflow_forms_page.png" />
<p class="caption"><span class="caption-text"><strong>OpenFlow’s Forms page.</strong></span><a
class="headerlink" href="#id19" title="Permalink to this image">¶</a></p>
</div>
<p>Now at the Forms edit page, there are many Form components from which you can choose. For general
purposes, we are only going to discuss the most used one here: Text Field Component. The other
ones will be discussed further on in their specific sections.</p>
<div class="figure align-center" id="id20">
<img alt="images/openflow_forms_creation_page.png"
src="images/openflow_forms_creation_page.png" />
<p class="caption"><span class="caption-text"><strong>OpenFlow’s Forms creation
page.</strong></span><a class="headerlink" href="#id20"
title="Permalink to this image">¶</a></p>
</div>
<p>Drag the Text Field Component Form from the Basic category into the Form workspace. Immediately
after, a window containing all the parameters to configure the Form Component will appear.</p>
<div class="figure align-center" id="id21">
<img alt="images/openflow_form_starter_config_page.png"
src="images/openflow_form_starter_config_page.png" />
<p class="caption"><span class="caption-text"><strong>OpenFlow’s Forms starter configuration
tab.</strong></span><a class="headerlink" href="#id21" title="Permalink to this image">¶</a>
</p>
</div>
</div>
<div class="section" id="configuring-the-form-component">
<h3><span class="section-number">2.8.2. </span>Configuring the Form Component<a class="headerlink"
href="#configuring-the-form-component" title="Permalink to this headline">¶</a></h3>
<p>Below are the steps needed to properly configure a Form Component, a TextField in our example.
</p>
<ul>
<li>
<p><strong>Changing Form Label</strong></p>
<blockquote>
<div>
<p>To change the Form’s label, i.e., the title which will appear for the end-user, simply
click the Display tab and change the input form titled <strong>Label</strong>. The changes
are shown real-time.</p>
</div>
</blockquote>
</li>
</ul>
<div class="figure align-center" id="id22">
<img alt="images/openflow_form_label_config_page.png"
src="images/openflow_form_label_config_page.png" />
<p class="caption"><span class="caption-text"><strong>OpenFlow’s Form Display configuration
tab.</strong></span><a class="headerlink" href="#id22" title="Permalink to this image">¶</a>
</p>
</div>
<ul>
<li>
<p><strong>Assigning Input Variable</strong></p>
<blockquote>
<div>
<p>To assign the input form to a variable configured inside the OpenRPA workflow you’ve
mapped to OpenFlow, simply go to the API tab and insert the name of the variable inside
<strong>Property Name</strong> and press save. Now the next time this workflow is called,
a new parameter will appear.
</p>
</div>
</blockquote>
</li>
</ul>
<div class="figure align-center" id="id23">
<img alt="images/openflow_text_field_api_config.png"
src="images/openflow_text_field_api_config.png" />
<p class="caption"><span class="caption-text"><strong>OpenFlow’s Form API configuration
tab.</strong></span><a class="headerlink" href="#id23" title="Permalink to this image">¶</a>
</p>
</div>
<ul>
<li>
<p><strong>Assigning Form to Node-RED Workflow</strong></p>
<blockquote>
<div>
<p>Now it is required that you assign a Form to a Node-RED workflow. To do that, go to
Node-RED and click twice on the <code
class="docutils literal notranslate"><span class="pre">Workflow</span> <span class="pre">Out</span></code>
node you want to assign the form to. The <code
class="docutils literal notranslate"><span class="pre">Edit</span> <span class="pre">workflow</span> <span class="pre">out</span> <span class="pre">node</span></code>
tab appears and you must select the form you’ve just created in the <code
class="docutils literal notranslate"><span class="pre">Userform</span></code> dropdown.
</p>
</div>
</blockquote>
</li>
</ul>
<div class="figure align-default" id="id24">
<img alt="images/openflow_node_red_configure_form.png"
src="images/openflow_node_red_configure_form.png" />
<p class="caption"><span class="caption-text"><strong>Assigning Form to Node-RED
workflow.</strong></span><a class="headerlink" href="#id24"
title="Permalink to this image">¶</a></p>
</div>
<p>For more information on how to configure the Form Component, please refer to the <span
class="xref std std-ref">OpenFlow Forms</span> section.</p>
</div>
<div class="section" id="general-form-settings">
<h3><span class="section-number">2.8.3. </span>General Form Settings<a class="headerlink"
href="#general-form-settings" title="Permalink to this headline">¶</a></h3>
<p>In this section, users will see a list of general settings that are offered for the majority of
our components. In the later sections, only the specific settings for the given Forms will be
shown.</p>
<p><strong>Display</strong></p>
<blockquote>
<div>
<p>Here belong the general properties related to the display methods and usage of this Form
Component.</p>
<p><strong>Label</strong></p>
<blockquote>
<div>
<p>The name or title for this component.</p>
<div class="figure align-center" id="id25">
<a class="reference internal image-reference"
href="images/general_label_property.png"><img alt="images/general_label_property.png"
src="images/general_label_property.png" style="width: 247.5px; height: 41.0px;" /></a>
<p class="caption"><span class="caption-text"><strong>Label Property</strong></span><a
class="headerlink" href="#id25" title="Permalink to this image">¶</a></p>
</div>
<div class="figure align-center" id="id26">
<a class="reference internal image-reference" href="images/label_property_set.png"><img
alt="images/label_property_set.png" src="images/label_property_set.png"
style="width: 248.0px; height: 46.5px;" /></a>
<p class="caption"><span class="caption-text"><strong>Demo of Label Property
set</strong></span><a class="headerlink" href="#id26"
title="Permalink to this image">¶</a></p>
</div>
</div>
</blockquote>
<p><strong>Label Position</strong></p>
<blockquote>
<div>
<p>Position for the label for this field. Selecting <strong>Top</strong> shows the label
above the input field, whereas <strong>Bottom</strong> shows the label below the input
field.</p>
<div class="figure align-center" id="id27">
<a class="reference internal image-reference"
href="images/general_label_position_property.png"><img
alt="images/general_label_position_property.png"
src="images/general_label_position_property.png"
style="width: 235.5px; height: 95.5px;" /></a>
<p class="caption"><span class="caption-text"><strong>Label Position
Property</strong></span><a class="headerlink" href="#id27"