<!DOCTYPE html>
<html>

  <head>
	<meta charset="UTF-8">
	<title>OSBP - Community</title>
	
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<meta name="description"
		content="The website of Eclipse OSBP, an open-source no-code and low-code development platform for business and enterprise applications">
	<meta name="author" content="(c) Compex Systemhaus GmbH, Germnany">
	
	<!--  styles -->
	<!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
	<!--[if lt IE 9]>
	  <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
	<![endif]-->
	
	<!-- Le fav and touch icons -->
	<link rel="shortcut icon" href="images/OS-logo-32x18.jpg">
	
	<link href="css/bootstrap.css" rel="stylesheet" type='text/css'>
	<link href="css/bootstrap-responsive.css" rel="stylesheet" type='text/css'>
	<link href="css/shield-responsive.css" rel="stylesheet" type='text/css'>
	<link href='css/fonts.css' rel='stylesheet' type='text/css'>
	<link href="css/prettyPhoto.css" rel="stylesheet" media="screen" type='text/css'>
	<link href="css/prettify.css" type="text/css" rel="stylesheet"/>
	<link href="css/style.css" rel="stylesheet" type='text/css'>
	
	<!-- cover flow -->
	<link href="css/coverflow.css" rel="stylesheet" type='text/css'>
	<!--[if lt IE 9]>
	  <link href="css/iebugs.css" rel="stylesheet" type='text/css'>
	<![endif]-->
</head>


<body>
	<!-- Google Tag Manager --    >
	<noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-TGDS5S"
	height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
	<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
	new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
	j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
	'//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
	})(window,document,'script','dataLayer','GTM-TGDS5S');</script>
	<!-- End Google Tag Manager -->

<header class="site-header">
  <!-- Navbar -->
  <div class="navbar navbar-fixed-top">
    <div class="navbar-inner">
      <div class="container">
        <a class="btn btn-navbar" data-toggle="collapse"
          data-target=".nav-collapse"> <span class="icon-bar"></span> <span
          class="icon-bar"></span> <span class="icon-bar"></span>
        </a> <a class="brand" href="index.html"></a>
		
        <div class="nav-collapse collapse" style="height: 0px;">
          <ul class="nav">
            <!--li ><a href="news.html">News</a></li-->
			<li ><a href="index.html">Home</a></li>						
            <li ><a href="download.html">Download</a></li>
            <li ><a href="documentation.html">Documentation</a></li>
            <li ><a href="community.html">Community</a></li>
			<li ><a href="OS-bea-WG.html">OS.bea Working Group</a></li>			
            <li class="dropdown">
              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Support &amp; Trainings<span class="caret"></span></a>
              <ul class="dropdown-menu">
                <li><a href="http://www.osbee.org/services/" target="_blank">OS.bee</a></li>
                <li><a href="http://www.compex-commerce.com/en/services/" target="_blank">Compex</a></li>
              </ul>
            </li>
          </ul>
        </div>
        <!--/.nav-collapse -->
      </div>
    </div>
  </div>
  <!-- Navbar End -->
</header>

    	<div id="page">
		<div id="team" class="container clearfix"> 
		
				<p>
				<h1><center>You are invited to join the OSBP community and to support the idea of developing open-standard based business applications.</center><h1>
				</p>
		
			<h2>Resources</h2>
	        <hr>
			<div class="row">
				<div class="span1">&nbsp;</div>
				<div class="span9 team">
			    <a href="https://wiki.eclipse.org/OSBP" class="anchor-in-div"></a>
			    <div class="row">
				  <div class="span1 ">
				    <img src="images/discussion-circ-darkgray.png" alt="image" class="image_left">
				  </div>
				  <div class="span2 ">
				    <h3>Getting started</h3>
				 	</div>
					<div class="span6 ">
						<p>In order to get quickly started with OSBP, 
						we are providing information to the community through the Eclipse Wiki.</p>
					</div>
					</div>
				</div>
			  <div class="span1">&nbsp;</div>
			</div>
			<div class="row">
				<div class="span1">&nbsp;</div>
				<div class="span9 team">
			    <a href="https://bugs.eclipse.org/bugs/enter_bug.cgi?product=OSBP" class="anchor-in-div"></a>
			    <div class="row">
				  <div class="span1 ">
				    <img src="images/bug-circ-darkgray.png" alt="image" class="image_left">
				  </div>
				  <div class="span2 ">
				    <h3>Found a Bug?</h3>
				 	</div>
					<div class="span6 ">
						<p>Bug reports and enhancement request are tracked at <strong>Eclipse Bugzilla</strong>. Please 
						explain the problem and provide a reduced but reproducible example.</p>
					</div>
					</div>
				</div>
			  <div class="span1">&nbsp;</div>
			</div>
			<div class="row">
				<div class="span1">&nbsp;</div>
				<div class="span9 team">
			    <a href="http://git.eclipse.org/c/osbp" class="anchor-in-div"></a>
			    <div class="row">
				  <div class="span1 ">
				    <img src="images/github-mark-darkgray.png" alt="image" class="image_left">
				  </div>
				  <div class="span2 ">
				    <h3>Source code</h3>
				 	</div>
					<div class="span6 ">
						<p>The OSBP source code is available on <strong>Eclipse</strong>. You'll find more information on how to contribute to the project in the README contained there.</p>
					</div>
				  </div>
				</div>
			  <div class="span1">&nbsp;</div>
			</div>
<!------------------------------Twitter
			<div class="row">
				<div class="span1">&nbsp;</div>
				<div class="span9 team">
			    <a href="https://twitter.com/intent/user?screen_name=OSBEE" class="anchor-in-div"></a>
			    <div class="row">
				  <div class="span1 ">
				    <img src="images/Twitter-bird-darkgray.png" alt="image" class="image_left">
				  </div>
				  <div class="span2 ">
				    <h3>Twitter</h3>
				 	</div>
					<div class="span6 ">
						<p>If you are on twitter and want to get notified about OSBP, you should consider following <strong>@OSBP</strong>.</p>
					</div>
					</div>
				</div>
			  <div class="span1">&nbsp;</div>
			</div>
---------------------------------End Twitter -------------->
			<div class="row">
				<div class="span1">&nbsp;</div>
				<div class="span9 team">
			    <a href="OS-bea-WG.html"" class="anchor-in-div"></a>   
			    <div class="row">
				  <div class="span1 ">
				    <img src="images/working-group-dark-grey.png" alt="image" class="image_left">
				  </div>
				  <div class="span2 ">
				    <h3>Working Group</h3>
				 	</div>
					<div class="span6 ">
						<p>The OS.bea (open standard business and enterprise application) working group is kindly supporting 
						the OSBP project. For more details have a look on the OS.bea charter: <a href="http://www.charter"></a>.</p>
					</div>
				 </div>
				</div>
			  <div class="span1">&nbsp;</div>
			</div>
			
		</div>
		<br/><br/>
		
    <div id="zoo" class="container"> 
        <h2>What others have built with OSBP</h2>
        <hr>
  	    <table class="table table-striped table-condensed">
  	        <thead>
  	        <tr>
  	          <th>Name</th>
  	          <th>Description</th>
  	          <th>Category</th>
  	          <th>Author(s)</th>
  	        </tr></thead>
  	        <tbody>
  	        
				<tr>
				  <td><a href="http://www.osbee.org/">OS.bee</a></td>
				  <td><strong>OS.bee has the same funtionality as the OSBP Software Factory and complements it with further plug-ins as for e.g. Oracle, further themes for your application and other usefull features.</strong>
				  <br><br>
				  </td>
				  <td>Core</td>
				  <td>Compex Systemhaus GmbH, Germany</td>
				</tr>
    
				<tr>
				  <td><a href="http://www.osbee.org/">UI-designer</a></td>
				  <td><strong>Customize the user interface of the application during design time as well as during runtime, if required.</strong>
					  <br><br>
					  Activated users get the ability to customize their perspectives during runtime using any browser, independently and individually.
				  <br><br>
				  </td>
				  <td>Core <br>App</td>
				  <td>Compex Systemhaus GmbH, Germany</td>
				</tr>
				
				<tr>
				  <td><a href="http://www.osbee.org/">Mobile UI</a></td>
				  <td><strong>Make your UI future proof across all platforms: Generate a user interface for mobile devices quickly and suitable for all primarily used operating systems. 
				      Optimize your application with a responsive and pleasant user experience.</strong>
					  <br><br>
					  Building on ubiquitous HTML5 platform ensures futureproof support of all features on mobile platforms. 
					  Your applications will easily run on iOS, Android and Windows phones, on tablets as well as on other small screen devices by using hardware acceleration wherever possible.
				  <br><br>  
				  </td>
				  <td>Core</td>
				  <td>Compex Systemhaus GmbH, Germany</td>
				</tr>				

				<tr>
				  <td><a href="http://www.osbee.org/">Business Process Designer (BPM)</a></td>
				  <td><strong>This add-on enables you to model and perform your business processes with the support of your software factory.</strong>
				  <br><br>
					Create a process model consisting of tasks and decisions and assign them to the roles of your organization chart. 
					The workflow engine ensures that your processes run effectively and successfully, whether short-term or long-term. 
					All collaborative orchestration between persons and the machine is managed by the engine and tasks are presented to 
					the predetermined roles inside the organization if human intervention is necessary. Only persons assigned to that role can claim, complete or delegate a task.
				  <br><br>
				  </td>
				  <td>Core</td>
				  <td>Compex Systemhaus GmbH, Germany</td>
				</tr>

				<tr>
				  <td><a href="http://www.osbee.org/">Authorization &amp;  Organization</a></td>
				  <td><strong>Supplement your software factory with the ability to create your very own access control system, according to your organizational positions and requirements.</strong>
				  <br><br>
					   Model an organization chart, defining the roles, and assign data access rights to each role, depending on the responsibilities of each position.
				  <br><br>
				  </td>
				  <td>Core</td>
				  <td>Compex Systemhaus GmbH, Germany</td>
				</tr>

				<tr>
				  <td><a href="http://www.osbee.org/">Business Analytics</a></td>
				  <td><strong>Store and hierarchically organize your business data bases as cube in multi-dimensional arrays. 
					  Evaluate your structured data on the required levels and represent the results in a table or as a chart: ready-to-use for your business reports.</strong>
				  <br><br>
					   Regardless of whether you would like your data base to be structured in three or more dimensions: 
					   With OS.bee Business Analytics, you´ll get the ability to individually configure a multi-dimensional 
					   data set and use it for your business purposes by evaluating it on required levels. In the next step, visualize the results as pie chart or table. 				
				  <br><br>
				  </td>
				  <td>Core</td>
				  <td>Compex Systemhaus GmbH, Germany</td>
				</tr>

				<tr>
				  <td><a href="http://www.osbee.org">AppUpIn5Minutes</a></td>
				  <td><strong>Implement a ready to use CRUD application starting with csv-files or excel-sheets</strong>
				  <br><br>
				  </td>
				  <td>App</td>
				  <td>Compex Systemhaus GmbH, Germany</td>
				</tr>

				<tr>
				  <td><a href="http://www.osbee.org">OS.pos</a></td>
				  <td><strong>OS.pos (Open standard Point of Sale) is a cash register application with a broad range of functionalities based on OSBP technology.</strong> 
				  <br><br>
				  OS.pos is a reliable and flexible point of sale solution, with which you are able to process transactions in retail, cash & carry and/or wholesale.
				  <br><br>
				  </td>
				  <td>App</td>
				  <td>Compex Systemhaus GmbH, Germany</td>
				</tr>				

				<tr>
				  <td><a href="http://www.osbee.org">OS.rm</a></td>
				  <td><strong>OS.rm (Open standard requirement management) is an application for requirement management.</strong> 
				  <br><br>
				  Make sure that a product or service meets the needs and expectations of your stakeholders by managing your requirements with OSBP. 
				  Create, define, prioritize, categorize, document and trace requirements both in large or small projects. 
				  Be able to share certain parts of the content and control data access based on the roles managed via your organization chart.				
				  <br><br>
				  </td>
				  <td>App</td>
				  <td>Compex Systemhaus GmbH, Germany</td>
				</tr>	
		
			</tbody>
		  <tfoot></tfoot>
		 </table>
	</div>
	
    
<footer class="site-footer">
  <div id="extra">
    <div class="inner">
      <div class="container">
        <div class="row">
          <div class="span6">
            <h3 class="footer-links-header">Quick Links</h3>
            <ul class="footer-links clearfix">
              <li><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a><br>
              <a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a><br>
              <a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a><br>
              <a href="http://www.eclipse.org/legal/">Legal</a></li>
            </ul>
          </div>
		  <div class="span6">
            <h3 class="footer-links-header">&nbsp;  </h3>

			<ul class="footer-links clearfix">
              <li><a href="http://www.eclipse.org">Eclipse Home</a><br>
              <a href="http://marketplace.eclipse.org/">Market Place</a><br>
              <a href="http://live.eclipse.org/">Eclipse Live</a><br>
              <a href="http://www.planeteclipse.org/">Eclipse Planet</a></li>
            </ul>

          </div>		  
       </div>
      </div>
    </div>
  </div>
  
  <a href="#" class="scrollup fadeOutRight animated" style="display: none;">ScrollUp</a>
  
  <!-- Le javascript
      ==================================================
      Placed at the end of the document so the pages load faster -->
  
  <script src="js/jquery-1.11.3.min.js"></script>
  <script src="js/bootstrap.min.js"></script>
  <script src="js/jquery.easing.1.3.js" type="text/javascript"></script>
  <script src="js/jquery.prettyPhoto.js" type="text/javascript"></script>
  <script src="js/twitter.js" type="text/javascript"></script>
  <script src="js/prettify.js" type="text/javascript"></script>
  <script src="js/lang-xtend.js" type="text/javascript"></script>
  <script src="js/lang-common.js" type="text/javascript"></script>
  <script src="js/custom.js" type="text/javascript"></script>
  <script src="https://apis.google.com/js/platform.js" async defer></script>
  
  <!--script type="text/javascript">
    var _gaq = _gaq || [];  
      _gaq.push([ '_setAccount', 'UA-2429174-3' ]);
    _gaq.push([ '_trackPageview' ]);
    (function() {
      var ga = document.createElement('script');
      ga.type = 'text/javascript';
      ga.async = true;
      ga.src = ('https:' == document.location.protocol ? 'https://ssl'
          : 'http://www')
          + '.google-analytics.com/ga.js';
      var s = document.getElementsByTagName('script')[0];
      s.parentNode.insertBefore(ga, s);
    })();
  </script-->
  
  <script src="js/coverflow.min.js" type="text/javascript"></script>
  <script>
      $(function() {
        $('#coverflow').coverflow({
          active : 1,
          visibleAside: 2,
          overlap : 0.5,
          scale : 0.9,
          angle : 20,
          trigger : {
            "itemfocus" : true,
            "swipe" : true,
            "mousewheel" : false
          }
        });
        $('#coverflow :hidden').toggle();
        $(window).resize(function() {
          $('#coverflow').coverflow();
        });
      });

  </script>
</footer>


  </body>

</html>
