<!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="Technology-partners.html">Frameworks &amp; Techpartners</a></li>
            <li ><a href="use-cases.html">Gallery</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<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>
        </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 professional software.</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>
