<!DOCTYPE html>
<html>

  <head>
	<meta charset="UTF-8">
	<title>OSBP - Use Cases</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>Find below case studies, examples and add-ons which were built using OSBP:</center><h1>
				</p>
		</div>
		<br/><br/>
		
    <div id="zoo" class="container"> 
     
  	    <table class="table table-striped table-condensed">
  	        <thead>
  	        <tr>
  	          <th>Name</th>
  	          <th>Description</th>
  	          <th>Category</th>
  	        </tr></thead>
  	        
			<tbody>
			
  	        	<tr>
				  <td><a href="http://www.osbee.org">AppUpIn5Minutes</a></td>
				  <td><strong>Implement a ready to use CRUD application starting with csv-files, an excel-sheets or an ERM in minutes.</strong>
				  <br><br>
				  Drag and drop a csv-file on OSBP and watch how it is translated into a full-fledged java application with login, authorisation, authentication, up- and download interface, UI with a table and dialog, sorting and filtering fuctionality, etc.
				  <br><br>
				  </td>
				  <td>App</td>
				 </tr>
				 
				 <tr>
				  <td><a href="https://www.osbee.org/nc/community/forum/?tx_typo3forum_pi1%5Btopic%5D=158&tx_typo3forum_pi1%5Baction%5D=show&tx_typo3forum_pi1%5Bcontroller%5D=Topic&cHash=1ea19f76aac73f23cfdc36a3baead2cd">iot.KPI </a></td>
				  <td><strong>iot.KPI is a case study how a student became a software developer in 5 Minutes and implemented an iot application processing data and displaying it.</strong> 
				  <br><br>
				  With iot.KPI a student of the University of Heidelberg accomplished a case study how easy it is to implement an IoT application using OSBP. OS.iot manages IT inventory  and monitors critical server room KPI like temperture, disk space, etc.
				  <br><br>
				  </td>
				  <td>Case Study</td>
				</tr>	
				
				 <tr>
				  <td><a href="https://www.osbee.org/solutions/apps/">CS.invoice</a></td>				 
				  <td><strong>CS.invoice is a case study that delivered an application that invoices private patients for psychoanalysts.</strong> 
				  <br><br>
				  With CS.invoice a psychoanalyst proved how easy it is to implement an OSBP application. Originally planed as use case the result were so convincing that the software is today in operational daily use.<br><br>
				  </td>
				  <td>Case Study</td>
				</tr>					
				 
				<tr>
				  <td><a href="https://www.osbee.org/solutions/apps/">OS.entrance</a></td>
				  <td><strong>OS.entrance is an application that controls access to a shop or any other location.</strong> 
				  <br><br>
				  OS.entrance a alows access when a person has successfully identified himself.	OS.entrance is able to display information on an entry point and to display data in accordance to the person identified or denied. 
				  <br><br>
				  </td>
				  <td>App</td>
				</tr>	
				 
				<tr>
				  <td><a href="https://www.osbee.org/solutions/apps/">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>
				</tr>				

				<tr>
				  <td><a href="https://www.osbee.org/solutions/apps/">OS.rm</a></td>
				  <td><strong>OS.rm (Open standard requirement management) is an application for requirement management or in other words a ticketing system that helps you manage requirements.</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>
				</tr>
				
				<tr>
				  <td><a href="https://www.osbee.org/solutions/apps/">OS.mdm</a></td>
				  <td><strong>OS.mdm (Open standard master data management) is an application used to define and manage critical data of an organization.</strong> 
				  <br><br>
				   OS.mdm provides data integration and a single point of reference. The data that is mastered may include reference data- the set of permissible values, and the analytical data that supports decision making. It is equiped with ETL (extract, transform, load) functionalities as well as functionalities to dispatched Information to sub-systems e.g. web-service, flat file, etc.		
				  <br><br>
				  </td>
				  <td>App</td>
				</tr>	

				<tr>
				  <td><a href="https://www.osbee.org/solutions/apps/">iot.ESL</a></td>
				  <td><strong>ESL is a case study that was lauched by one of the top 10 French retailers to experience how ESL (electronic shelf labels) from different suppliers could be connected with its different applications especially for the in-shop and logistics applications.</strong> 
				  <br><br>
				   The objective of ESL is to connect any system with ESL and to make ESL-functionalities avaible where it is needed. During the case study iot.ESL was configured with several ESL-providers and application. The case studies results where taken in consideration to develop a ready to use ESL application OS.esl.		
				  <br><br>
				  </td>
				  <td>Case Study</td>
				</tr>					
				
				<tr>
				  <td><a href="http://www.osbee.org/">OS.bee</a></td>
				  <td><strong>As OS.bee is the community version of OSBP it 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 many other usefull features.</strong>
				  <br><br>
				  </td>
				  <td>Core</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>
				</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>
				</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>
				</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>
				</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>
				</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>
