Assistance with Open Source adoption

Open Source News

The future of this project...

SugarCRM - Thu, 03/12/2015 - 07:00
Hello community, While working on the extension I just found this blog post from one of the most important sugarcrm community contributor, an open source community must read: The true is that I never see or test the official plug-in we always use ours but I'm wondering if it's worth working on this project. We are accepting donations at this moment but never ask for it on I will like to see any comments from users about this. Thanks Lyle
Categories: CRM

SDUG events

SugarCRM - Thu, 03/12/2015 - 07:00
Our focus in the initial Sugar Dev-User Group sessions has been primarily on developer topics. But, beginning in February we'll be branching out to incorporate user, administrative and implementation topics. Please visit the SDUG page for up-to-date details and to register for these exciting events. Don't forget to also visit the details page for events already held to check out their leave-behind material. Jan 4: How we built the Sugar Forums module Jan 17: How to build a Dashlet Jan 31: SOAP ins and outs Feb 7: Performance and clustering Additional sessions will be announced soon.
Categories: CRM

We hope you like the new site

SugarCRM - Thu, 03/12/2015 - 07:00
We've recently revamped our community web properties. Among other things we've broadened the focus to include users, implementers, and administrators. Where before had a decidedly developer-centric focus, now provides a home base for the entire community. Check out our first community-wide newsletter, too! We hope you enjoy the changes.
Categories: CRM

SDUG: January and February sessions announced

SugarCRM - Thu, 03/12/2015 - 07:00
We have some SERIOUS Sugar Dev-User Group sessions coming up in January and February. Please visit the SDUG page for up-to-date details and to register for these exciting events. Don't forget to also visit the details page for events already held to check out their leave-behind material. Jan 4: How we built the Sugar Forums module Jan 17: How to build a Dashlet Jan 31: SOAP ins and outs Feb 7: Performance and clusteing Additional sessions will be announced soon.
Categories: CRM

SDUG: Agenda change for Dec 12th session

SugarCRM - Thu, 03/12/2015 - 07:00
Due to popular demand we've changed the agenda for the upcoming Dec 12th Sugar Dev-User Group session. See session details here: See Max's thread for the 12/12 session here:
Categories: CRM

December POTM: CarouselCRM

SugarCRM - Thu, 03/12/2015 - 07:00
CarouselCRM is December's Project of the Month. See our interview with Val Cassidy, CTO of Xoetrope, the Dublin-based company behind CarouselCRM. The Project of the Month page is located here: CarouselCRM is located here:
Categories: CRM

R4.5.1 Communty Preview released!!

SugarCRM - Thu, 03/12/2015 - 07:00
The Sugar team is proud to announce the availability of the Release 4.5.1 Community Preview. Please go here to learn more about the cool features available in this preview. Andy
Categories: CRM

SDUG: More seats added for Jacob Taylor's 12/12 prezo

SugarCRM - Thu, 03/12/2015 - 07:00
Sugar Dev-User Group: We've added more seats for Jacob Taylor's architecture and technology discussion on 12/12. Sign up ... quick!! Here is link to registration page:
Categories: CRM

SchedulerAlerts v2.1 Available

SugarCRM - Thu, 12/04/2014 - 09:00
Minor change to clean up the package.
Categories: CRM

SchedulerAlerts v2.0 Available

SugarCRM - Thu, 12/04/2014 - 09:00
SchedulerAlerts v2.0 has been adapted to work in the Sugar 7 environment.
Categories: CRM

SchedulerAlerts v1.4 Available

SugarCRM - Thu, 12/04/2014 - 09:00
A feature to let the user know that the cron has been idle for a configured amount of time.
Categories: CRM

SchedulerAlerts v1.3 Available

SugarCRM - Thu, 12/04/2014 - 09:00
The SchedulerAlerts module has been updated to add the Job Type as a configuration selection.
Categories: CRM

SchedulerAlerts v1.2

SugarCRM - Thu, 12/04/2014 - 09:00
The SchedulerAlerts manifest was updated to remove the community edition from the available flavors.
Categories: CRM

Scheduler Alerts 1.1 released!

SugarCRM - Thu, 12/04/2014 - 09:00
- Corrected an issue limiting the available users for alerts.
Categories: CRM

Bonita Platform running on a smartphone

Bonita - Mon, 10/21/2013 - 07:36

Dear Community,

You may know that Ubuntu 13.10 is now available, since October 17. With this release comes Ubuntu Touch, a version of Ubuntu designed for two smartphones: Samsung Galaxy Nexus and LG Nexus 4. And I own a white 16Gb Galaxy Nexus phone…

I flashed my phone to test Ubuntu Touch on it, and shared this test with Bonitasoft colleagues. Having a Linux distro on a smartphone instantly presented a challenge: install Open JDK 7 and test to see if Bonita BPM Platform (Portal + Engine) would run on a smartphone. And yes, we did it, it runs! We’re eager to share that with you, so below is a How-to.

Install Ubuntu Touch

First you need a Samsung Galaxy Nexus or a LG Nexus 4. And of course, you need to be sure that the owner agrees to install Ubuntu Touch: it means erasing Android and all its data from the phone! Once the test is done, of course, you can flash Android back to your phone.

Canonical provides a very good How-to about flashing the phone with Ubuntu Touch: Installing Ubuntu on a phone. So, you can do this first step with their documentation.

Once that is done, find the terminal application in the list of all applications. (You may have to expand the list of all installed applications.)

When the terminal is started, you are ready for the next step: set up the phone, but from your PC.

Set the environment

By default, the image of Ubuntu Touch on the memory is set to read-only. You need to set it to write-able and then reboot the phone.

sudo touch /userdata/.writable_image
sudo reboot

The default password for “phablet” user is “phablet”.

After reboot, start the terminal again. As it is far easier and faster to do everything from a terminal on your PC, use SSH. Don’t forget to connect the smartphone to your Wifi network.

On the phone, start SSH and use ifconfig to find your IP adress:

sudo start ssh


Set an automatic start of SSH with Ubuntu Touch:

sudo update-rc.d ssh defaults
[sudo] password for phablet:
update-rc.d: warning: default stop runlevel arguments (0 1 6) do not match ssh Default-Stop values (none)
Adding system startup for /etc/init.d/ssh ...
/etc/rc0.d/K20ssh -> ../init.d/ssh
/etc/rc1.d/K20ssh -> ../init.d/ssh
/etc/rc6.d/K20ssh -> ../init.d/ssh
/etc/rc2.d/S20ssh -> ../init.d/ssh
/etc/rc3.d/S20ssh -> ../init.d/ssh
/etc/rc4.d/S20ssh -> ../init.d/ssh
/etc/rc5.d/S20ssh -> ../init.d/ssh

On your PC, start a terminal and do:

ssh phablet@ipadressofthephone

Of course, you can also use ADB to do this with a USB cable. But it is more fun to use SSH, like we would do with any other server, no?

Now, you can install Java and the Bonita BPM Bundle.

Install Java, download and unzip the Bonita BPM bundle

Start with refreshing apt-get cache.

sudo apt-get update

Then, install Opend JDK 7 JRE, using the headless version for servers. You will also need Unzip to extract the files from the downloaded archive of the bundle.

sudo apt-get install openjdk-7-jre-headless unzip

Check that Java is well installed:

java -version

Download Bonita BPM Tomcat bundle. The link below is for the 6.0.4 version.

unzip Start the Bonita BPM Platform

Start the bundle like on any other server:


Wait a moment, for the phone is not as powerful as your latest multicore 64bit CPU. Check the startup with a Tail on that file:

tail -F BonitaBPMCommunity-6.0.4-Tomcat-6.0.35/logs/catalina.out

If everything is ok you should get something like this:

Oct 21, 2013 9:16:08 AM org.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=0/106  config=null
Oct 21, 2013 9:16:08 AM org.apache.catalina.startup.Catalina start
INFO: Server startup in 137252 ms

Then, connect to the Bonita BPM Portal with your web browser on http://phoneipsadresss:8080/bonita and use “install” as login and “install” as password, to log in as a technical user, create your first users, and install some processes.

To test, we created a small Bonita process to display system information, using the Script Connector. Below is a screenshot of the process and the terminal (SSH).

And a picture of Jeremy, the Galaxy Nexus smartphone, and me.

As usual, we will put the “Display system information” process on Community GitHub soon.

If we make it possible to run Bonita BPM Studio on the phone, we will let you know 


Many thanks to Jeremy Jacquier-Roux, our sysadmin expert, who helped make this How-to possible.

Thanks to Canonical, for the operating system. It wouldn’t have been possible to do this without the great work of their developers and community.

And thanks a lot to Ogra from #ubuntu-touch IRC channel on Freenode for his support.

Categories: BPM

How to use Bonita BPM 6 Web REST API in Python: create accounts

Bonita - Thu, 10/17/2013 - 07:14

This tutorial shows how to use the web REST API provided by Bonita BPM 6 in order to create new accounts in Python. You need to have a working Bonita BPM 6 to test the code below. This can be done with Bonita BPM Studio after deploying Bonita BPM Portal. This example is run on a Linux distribution (Ubuntu 12.04 LTS).

The official documentation is available here

Note: I’m not a Python developer and there are always many ways to accomplish the same thing. Don’t hesitate to improve this example!

Useful modules

The following Python modules will be helpful:

  • argparse
  • httplib2
  • json
  • urllib

Before going further, log in and retrieve the corresponding cookie. You can do it this way:

def portal_login(url,username,password,disable_cert_validation):
    http = httplib2.Http(disable_ssl_certificate_validation=disable_cert_validation)
    body={'username': username, 'password': password, 'redirect': 'false'}
    response, content = http.request(URL,'POST',headers=headers,body=urllib.urlencode(body))
    if response.status!=200:
      raise Exception("HTTP STATUS: "+str(response.status))
    return response['set-cookie']

If you run the Bonita BPM Portal from Studio, you can use these parameters:

  • url=http://localhost:8080/bonita
  • login=walter.bates
  • password=bpm

disable_cert_validation should be set to false by default.  It’s useful only for test purposes, when we use a self-signed certificate.

Create a user

Use the following function to create a user using the previous cookie:

def create_user(url,cookie,username,password,firstname,lastname,disable_cert_validation):
    http = httplib2.Http(disable_ssl_certificate_validation=disable_cert_validation)
    headers={"Content-type":"application/json",'Cookie': cookie}
    data={"userName":username,"password":password,"firstname":firstname,"lastname":lastname, "enabled": "true"}
    data = json.dumps(data)
    response, content = http.request(URL, 'POST',headers=headers, body=data)
    if response.status!=200:
      raise Exception("HTTP STATUS: "+str(response.status)+" "+content)
      data = json.loads(content)
      return data['id'] Add a user to a profile Retrieve a profile id This function return the profile id, this way we can search for both Administrator and User profile: def get_profile_id(url,cookie,name,disable_cert_validation):
    http = httplib2.Http(disable_ssl_certificate_validation=disable_cert_validation)
    headers={"Content-type":"application/x-www-form-urlencoded",'Cookie': cookie}
    response, content = http.request(URL, 'GET',headers=headers)
    data = json.loads(content)
      return data[0]['id']
    except Exception, e:
      return None Link the user to a profile This last function permits to link the user previously created using its id and the profile id retrieved before: def add_user_to_profile(url,cookie,uid,pid,disable_cert_validation):
    http = httplib2.Http(disable_ssl_certificate_validation=disable_cert_validation)
    headers={"Content-type":"application/json",'Cookie': cookie}
    data={"profile_id":pid,"member_type":"USER","user_id": uid}
    data = json.dumps(data)
    response, content = http.request(URL, 'POST',headers=headers, body=data)
    if response.status!=200:
      raise Exception("HTTP STATUS: "+str(response.status)+" "+content) Full example

You can download a full example here:

usage: --login install --password install --url
                                john.smith --new_password mysecret --firstname
                                John --lastname Smith [-h]

Create a Bonita account

required arguments:
  --login install       Account used to authenticate you on Bonita
  --password install    Password used with your account
                        Bonita BPM url
  --new_login john.smith
                        New account that will be created
  --new_password mysecret
                        Password used for the new account
  --firstname John      First name used for the new account
  --lastname Smith      Last name used for the new account

optional arguments:
  -h, --help            Show this help message and exit
                        Used this only for tests with a self-signed
  --is_admin            Assign user to Administrator profile

To create a new account with the Administrator profile, you can launch a command like:

./ --login walter.bates --password bpm --url http://localhost:8080/bonita --new_login john.smith --new_password pass --firstname John --lastname Smith --is_admin

If you use an url in https with a self-signed certificate, it may raise this error:

httplib2.SSLHandshakeError: [Errno 1] _ssl.c:504: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

You can avoid this verification (for test only!) using the parameter “–disable_ssl_certificate_validation”.

Categories: BPM

Fresh news about Bonita BPM Community – October 2013

Bonita - Mon, 10/07/2013 - 04:49

Dear Community,

I did a first “Fresh news…” at the beginning of September, and at Bonitasoft, we think that it is good to continue every month. So, what’s new?

On the blog

We’ve  finished Part 2 of our Trello example. On the forum, it helped some of you solve some issues. It touches many useful points: how to build a connector in Bonita BPM Studio; how to retrieve data of previous cases and use them in a new started case; how to handle some JSON taken from a third party API, transform it in CSV and display data in a form. And, it uses a sub-process. So, actually, it’s a very complete use case, and I hope it will continue to help you with process development in Bonita Studio. (Note: it’s available on GitHub.)

On the forum, we had many questions about look’n'feel customization for Bonita BPM Portal and forms. I will take the answers and create a How-to about that, to come in a few weeks. You can already download an example of an automatic confirmation page!

And some of you are eager to learn how to embed the Bonita BPM Engine in a third party Java application. We’ll explain how to do that on the blog soon. By the way, this will be the subject of one of our two talks at OW2 Con 2013. More news to come on that too.

About Bonita BPM

You might have noticed that we have maintenance releases. This time, there are two updates:

  • Bonita BPM 6.0.4 is available, and you can see the release note here.
  • Bonita Open Source 5.9.2 is available. The purpose of this release is to ease the migration from previous release, up to 5.10.x. It means you don’t need to install it now if you don’t plan to migrate soon.

I am proud to announce that the first important contribution to Bonita BPM 6 will be included by Bonitasoft: thanks to Akira Iwata we will distribute our Studio and bundles with the Japanese translation. He will be credited in the “About” of Bonita BPM Studio. If you too want to translate Bonita BPM 6 in your native language, please join our project on Crowdin, I will welcome you with enthusiasm!

Have Fun!

I told you in the last Fresh News I am working on a game, for it could be a good way to learn how to use Bonita BPM Studio. This is still a work in progress, however, I can show you a part of the diagram in a screenshot I did for the forum this week. You might notice that this is not at all BPMN2 compliant. Yes, of course, it isn’t – indeed, it is not a business application, it is a game

New coffee machine!!!

Oh, I nearly forget the most important news of this article. You know how coffee is important for Java developers. At Grenoble, we know have a brand new Jura coffee machine. And it really does a darn good coffee. Below is a picture of some of our team, following the instructions of the installer, and a picture of this beautiful machine.

Categories: BPM

Trello Application Example – part 2

Bonita - Wed, 09/25/2013 - 08:07

In this article, we would like to share with you a example of a nice Bonita BPM application using Trello.
Here is a summary of what it does:

  • Helps you create credentials to connect Bonita BPM to a Trello API
  • Retrieves JSON information from a Trello board
  • Creates a downloadable CSV and displays the table in a Bonita BPM form
  • Stores the credentials, so you can use them later when starting a new case from the application in the Portal.

The first part  of this article was aimed at the beginner. We reviewed the example, saw how to set up a subprocess,  and showed how to store credentials.

In the second part, aimed at the developer, we will see how the Trello Connector has been designed in Bonita BPM Studio. We need to create a custom connector in order to:

  • connect with Trello API to get Trello Board Info
  • transform it (JSON array) into a list, which we will need to populate our table widget, and
  • transform it into a CSV formatted string to generate the content of the downloadable file.

While doing thing, you can:

  • Understand better how connectors work in Bonita BPM
  • Understand how to generate a Bonita BPM document from process content
Connector Structure

First, let’s look at the structure of a connector in Bonita BPM. It has two parts, Definition and Implementation.

The definition will allow us to define inputs and outputs of our connector. We will define the way we are going to ask for the input data, and defined the pages of the widgets which we will show to the user who will actually populate it to give the inputs required to execute the connector itself.

The implementation will be the Java code which will be executed with the inputs and outputs defined in the definition. Keep in mind that we can have several different  implementations for the same definition. Imagine that your company has developed some custom connector to retrieve and create invoices into your ERP, and now you are going to change the ERP.  You need to re-implement your connector. With the community version of Bonita BPM, you can redeploy the process using the new implementation of the connector. If you have a Subscription Pack your processes are not going to be affected, as you will able to change the connector implementation in runtime and if your processes get stuck, you can relaunch the execution of previous tasks with the new implementation.

Create a Trello Connector

To get our connector working from scratch, we have to create a new definition from Bonita BPM Studio (see Figure 2). With the development menu you can create a new connector definition. In this case, we will need 3 different inputs:

  • the Trello API key,
  • the qAuth token and
  • the board we want to show.

So we define these inputs as text (string) and a wizard page with text widgets to let the user set up the connector.

As you can see, we’ve defined a custom category to store this connector with its own icon. You can define your own category to store your custom connectors.

Now we need to define the connector’s outputs. In this case we will output several data:

  • the content of a csv file stringCSV
  • the content of the board in a List<List<String>> bonitaList with which we will populate a table widget,
  • the headers of that table widget with a List<String> bonitaColumn,
  • and a List<Map<String, Object>trelloList for other purposes, like for managing the data inside the process (we don’t use this in our process example).

Later in this blog post we will show how to manage these outputs and how to give our connector the inputs required from a variable, either a constant or a script.

Now we have our connector definition fully designed, so the next step will be to create the implementation. This will connect to the Trello API to retrieve the data inside the board, and will transform it to objects easier to manage inside our process -  a table and a CSV file ready to download. In summary, we will use inputs to generate our outputs through a piece of code written in the connector implementation. You can create a new connector implementation or edit this one in the development menu > connectors >edit connector implementation.

First we will setup the definition we are going to implement by defining:

  • name of this implementation and of the class that we are going to create,
  • the package  where we will do this,
  • the version,  and
  • the dependencies that we will need in our connector code.

In this case we need

  • common-httpclient
  • common-io
  • json-simple
  • json_org and
  • common-logging.

Once we press Finish, we will be redirected to our new Java file in which we will write our own code. But first we have some general remarks:

Your new class will extend an abstract class automaticly generated too, in our case:

public class Trello_Get_BoardImpl extends AbstractTrello_Get_BoardImpl

This abstract class will manage all inputs and outputs set in the definition, and the default validation of the inputs which will check the type of value given as input. So the way to access to the inputs from our class will be through get methods, and you will have to return the outputs with set methods.

In Figure 5 you can check which methods will be executed and in which order:

  1. setInputParameters() –> the connector receives input parameter values
  2. validateInputParameters() –> the connector can validate input parameter values
  3. connect() –> the connector can establish a connection to a remote server (if necessary)
  4. executeBusinessLogic() –> execute the connector
  5. getOutputParameters() –> outputs are retrieved from connector
  6. disconnect() –> the connector can close connection to remote server (if any)

Connect and disconnect methods are optional: they are used when the targeted system uses “connected objects,” for instance a datasource. We open the connection (connect method), we execute actions, and we close the connection (disconnect method).

Remember that you can manage several implementations of the same definition, and after that select which one will execute in your process

You can check the code we developed for this connector in our Community GitHub repository, feel free to reuse it.

Managing outputs

We finished creating our connector and we used it in a task to retrieve data, but how to manage lists of content and headers, and the CSV content?

We will start with easiest one first. In the previous explanation we spoke about both lists (bonitaList and bonitaColumn) so we are going to use that output to fill two variables and put it into a pageflow. To do this, in our pageflow we will define a new table widget and populate it with the variables. I previously filled in the connector output, as initial value and as horizontal header values respectively. Now we will have our table with the Trello board data.

But how to convert the formatted string to a Document?

First define a new document in the process. To do this, for that click in the pool, go to documents, and create a new document in there. In this case it should be a MIME Type “application/csv.” Then we will “write” the content generated by our connector into this document, and for that we will need to use Operations where we can manage this document variable. We will use a script to return an org.bonitasoft.engine.bpm.document.DocumentValue, which will be stored in the document.

import org.bonitasoft.engine.bpm.document.DocumentValue;
return new DocumentValue(stringCSV.getBytes(), "application/csv", "trello_board.csv");

And there you have it!

Categories: BPM

User Experience

Bonita - Tue, 09/24/2013 - 02:15

Dear Community,

I’m Nathalie, and I recently joined the Bonitasoft adventure as a Usability and Ergonomics Specialist.

My job is to put my 12 years of experience as a usability consultant at the service of Bonita BPM users, whatever their profiles and needs.

We are working to adjust the usability of Bonita BPM features – including the way they are displayed, and also according to your logical needs and expectations. We are taking on these challenges to help make you more efficient.

Here is what I do:

  • Conduct usability evaluations
  • Gather and apply your feedback (you can contact me via comment to this post)
  • Conduct remote or in-house usability testing: observe where what you need to do when building a process is not obvious enough or does not follow your logic, expectations or needs

To help me with these various assessments, I need volunteers! Some examples of how I will ask:

  • Polls to help us understand better how you interact with our product, to define requirements and specifications with a more accurate “you” in mind.
  • Polls to gather feedback on certain features. I’ll put up a poll whenever we have a specific question to ask, thanks to our Bonita Community manager Antoine.

Here is the first one.

Thank you in advance for spending 5 minutes to answer questions about our Bonita BPM Studio Overview pane today.

Be back soon.

Categories: BPM

Bonitasoft is looking for writers

Bonita - Thu, 09/19/2013 - 10:12

Dear community,

Bonitasoft is hiring some writers, and we would be pleased to choose community members to write about some BPM topics and Bonita BPM.

We are looking fore some introductory material for non-expert users - on topics such as “Meet Bonita BPM” (to explain the software suite to a relatively nontechnical person), or “What is a ‘process-based application’”?

We’re also open to your ideas and proposals. Please contact me through the community forum if you would  like to discuss this further.

Categories: BPM
Syndicate content