Release Name: openCRX/Core 2.8.5
Release Date: 2011-05-04
---------------------------------------------------------------------
Notes:
This software is published under the BSD license
as listed below.
Copyright (c) 2004-2011, CRIXP Corp., Switzerland
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in
the documentation and/or other materials provided with the
distribution.
* Neither the name of CRIXP Corp. nor the names of the contributors
to openCRX may be used to endorse or promote products derived
from this software without specific prior written permission
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
------------------
This product includes software developed by the Apache Software
Foundation (http://www.apache.org/).
This product includes software developed by contributors to
openMDX (http://www.openmdx.org/)
---------------------------------------------------------------------
0. SUMMARY
* PrestaShop adapter
* Automatic activity replication
* GUI workspaces
* WebDAV support
* CardDAV support
* Improved CalDAV support
* SalesVolumeBudgets allow to define sales volume budgets and targets
and to collect sales volume contributions
* Twitter notifiers
* CopyDb allows to replace provider name
* Auto-link of imported E-Mails with existing activities
* Bug fixes
* Clean up
For more information see below and http://www.opencrx.org/opencrx/2.8/new.htm
==============================================================================
Version 2.8.5 2011-05-04
==============================================================================
1. NEW FEATURES
CR10009791
Workspaces. Left-pane added which hosts workspace-level dashboard. The
workspace-level dashboard works like the (horizontal) object-level dashboard:
* dashlets can be added removed by admin or user
* dashlets can be shared by admin by prefixing the label with a *
Workspaces can be managed by the segment admin only.
CR10009913
UserHomes.initUserHome(). Add a backend method which allows to
initialize a user's home. The method can be overriden and extended by a
custom-specific subclass.
CR10009876
Activity replication. Activity replication is supported as follows:
* Activities linked with the link type 'is replica of' or 'is replica of
(obfuscated)' are updated when the original activity is modified.
The method Activities.replicateActivity() allows to control the
replication at attribute-level. By default, the attributes are
replicated as follows:
* In case activityLinkType is 'is replica of':
- name
- description
- detailedDescription
- misc1
- misc2
- misc3
- location
- scheduledStart
- scheduledEnd
- actualStart
- actualEnd
- dueBy
- priority
* In case activityLink type is 'is replica of (obfuscated):
- name (from activityLink.name)
- description (from activityLink.description)
- scheduledStart
- scheduledEnd
- actualStart
- actualEnd
- dueBy
- priority
* Upon creation of new activities the creation of replica can be
controlled with the method Activities.getActivityReplicationDescrs().
E.g. a custom-specific extension of getActivityReplicationDescrs() can
replicate activities created with the creator 'guest~Home~Meetings' with
the creator 'guest~Private~Meetings' and obfuscate the replica.
CR10009836
UserSettings: Create UserHome > UserProfile > default document profile.
CR10009478
PrestaShop integration. The PrestashopSynchronizer integrates PrestaShop
(http://www.prestashop.com/). PrestaShop is a PHP-based application. This
first version of the adapter imports data from PrestaShop to openCRX. The
following business objects are imported:
PrestaShop openCRX
----------------------------------------------
Customer Account, Address
Orders Sales orders, Invoices
Products, Prices, Taxes Products, Prices, Sales Taxes
The PrestashopSynchronizer is implemented as Workflow which directly accesses
the PrestaShop database. It periodically queries the PrestaShop database for
new and updated data.
The PrestashopSynchronizer allows to map up to 10 shops to one openCRX
segment. All imported data is qualified with the shop name to prevent
conflicts.
The PrestashopSynchronizer is configured as follows:
1. JDBC Resource
================
For each PrestaShop a JDBC resource entry must be added to web.xml of the
opencrx-core-CRX.war and openejb.xml. Here is an example:
openejb.xml
-----------
JdbcDriver com.mysql.jdbc.Driver
JdbcUrl jdbc:mysql://127.0.0.1:3306/prestashop
UserName root
Password manager99
JtaManaged true
web.xml of opencrx-core-CRX.war
-------------------------------
jdbc_PrestaShop
javax.sql.DataSource
Container
2. Configure servlet PrestashopSynchronizer
===========================================
Add the servlet PrestashopSynchronizer to the web.xml of opencrx-core-CRX.war:
Add init-param to the WorkflowController servlet:
path[3]
/PrestaShopSynchronizer
Add servlet configuration:
PrestaShopSynchronizer
org.opencrx.application.shop.prestashop.PrestaShopSynchronizer
providerName
provider/CRX
Add servlet mapping:
PrestaShopSynchronizer
/PrestaShopSynchronizer/*
3. Component Configuration
==========================
As admin-Root add the following component configuration for PrestashopSynchronizer:
PrestaShopSynchronizer
String property name Value
CRX.Standard.runAs[0] prestashop-test1
CRX.Standard.emailUnique[0] false
CRX.Standard.shopName[0] Test1
CRX.Standard.jdbcResourceName[0] jdbc_PrestaShop
CRX.Standard.tablePrefix[0] ps_
CRX.Standard.syncKey[0] 0
Set the initial value of the sync key to 0. This imports all data from PrestaShop.
After the initial sync only new and updated data is imported. You can force a
full-import by setting sync key to 0.
runAs must be a valid openCRX user for the segment. All operations are performed
as this user.
4. Database
===========
Amend the openCRX database configuration as follows:
Create the following sequence. This makes the column alias_name an autonum column:
CREATE SEQUENCE OOCKE1_alias_name_seq
START WITH 1000000
INCREMENT BY 1;
INSERT INTO prefs_Preference
(object_rid, object_oid, object_idx, string_value)
VALUES(
'preference/OOCKE1', 'PERSISTENCE:autonumColumn', 002, 'OOCKE1_ACCOUNT.alias_name AS CHAR(20)'
) ;
Make sure that the columns OOCKE1_PRODUCT.description and detailed_description are
of type text. Product descriptions in PrestaShop are also defined as text.
2. CHANGES
2.0. CHANGED FEATURES
CR10009959
Import E-Mails. Import E-Mails in one UOW (legacy from v1 plug-ins).
2.1. FIXED BUGS
none
2.2 REMOVED FEATURES
none
==============================================================================
Version 2.8.0 2010-12-27
==============================================================================
1. NEW FEATURES
CR10009668: WebDAV Support
WebDAV Support. WebDAV servlet added. A user must created a DocumentProfile
(e.g. Documents~{user}) with one or more DocumentFeed. The client connects
with URLs of the form:
./opencrx-webdav-CRX/{provider.id} "/" {segment.id} "/user/" {user.id} "/profile/" {profile.name} "/" {feed.name} ["/" {folder.name} ]* "/" {document.name}
E.g.
webdav://guest@localhost:8080/opencrx-webdav-CRX/CRX/Standard/user/guest/profile/Documents~guest/
Files are mapped to documents, folders are mapped to document folders.
CR10009687
partyStatus. Extend AbstractActivityParty by attribute partyStatus:
* PARTY_STATUS_NEEDS_ACTION = 1;
* PARTY_STATUS_ACCEPTED = 2;
* PARTY_STATUS_DECLINED = 3;
* PARTY_STATUS_TENTATIVE = 4;
* PARTY_STATUS_DELEGATED = 5;
* PARTY_STATUS_COMPLETED = 6;
The partyStatus has the same semantics as ICalendar PARTSTAT.
CR10009674
assignmentRole. Extend DocumentFolderAssignment by assignmentRole.
CR10009667
CardDAV Support. CardDAV servlet added. A user must created a CardProfile
(e.g. AddressBook~{user}) with one or more ContactsFeed. The client connects
with URLs
* ./opencrx-caldav-CRX/user/{user}/profile/{profile name} or
* ./opencrx-caldav-CRX/user/{user}/profile id}
CR10009623
SalesVolumeBudget. Subclass of budget which allows to define sales volume
budgets and targets and to collect sales volume contributions.
SalesVolumeBudget allows to define a sales volume target for a set of
accounts in different roles. Supported roles are: customer, sales rep
and broker. The operation assignBudgets() on contracts and contract
positions allows to automatically identify and assign the matching
budgets to contract positions. The operation SalesVolumeBudget.recalcBudget()
iterates all contract positions with an assignment to the invoked
budget. The contract positions are then matched to budget positions
(product and currency / uom must match). In case of a match the
contract position acts as contribution to the budget position which
results in the creation of a simple booking on the assigned depot position.
The contribution type allows to define how the contribution is
calculated: either based on the contract position's quantity or one
of the base amount, amount, discount amount or price per unit values.
CR10009611
Activities source for ActivityFilterGlobal. Allow to specify the activities
source for global activity filters. Possible sources are
* Activity segment
* User home
* Activity group
* Account
The default source is the activity segment.
CR10009592
PortalExtension: grid coloring. Extend portal extension by method
getGridRowColors(RefObject). Deprecate at the same time the method
hasGridColors().
/**
* Returns colors which is used as foreground and background colors when an
* object is rendered in a grid.
* @return foreground (at index 0) and background color (at index 1) or null.
*/
@Override
public String[] getGridRowColors(
RefObject_1_0 obj
) {
if(obj instanceof Activity) {
Activity activity = (Activity)obj;
if(activity.getDueBy() != null) {
String dueByDate = DateTimeFormat.BASIC_UTC_FORMAT.format(activity.getDueBy()).substring(0, 8);
String todayDate = DateTimeFormat.BASIC_UTC_FORMAT.format(new Date()).substring(0, 8);
return dueByDate.compareTo(todayDate) > 0 ?
new String[]{null, "red"} :
dueByDate.compareTo(todayDate) == 0 ?
new String[]{null, "green"} :
null;
}
}
return super.getGridRowColors(obj);
}
CR10009578
Tiny URLs. Use tiny URLs for access URLs generated by AirSync,
CalDAV, ICS and VCARD adapters.
CR10009533
Support for Twitter. Twitter support is added as follows:
* OAuth: Support to configure consumer key and consumer secret.
Wizard to create access token and access key.
* Wizards to send direct messages and update statuses.
* Workflow to send alert notifications via Twitter.
The implementation is based on the library twitter4j. For more
information see http://twitter4j.org.
Register with Twitter
---------------------
* Before openCRX can invoke the Twitter API, you need to register your
instance of openCRX at http://twitter.com/oauth_clients/new to
acquire a consumer key and a consumer secret. Register your openCRX
instance as follows:
o Application Name: the name of your openCRX instance, e.g. 'openCRX of
MyCompany'
o Application Website: the URL users can access the openCRX instance,
e.g. https://crm.mycompany.com/opencrx-core-CRX
o Application Type: Client
o Default Access type: Read/Write
o Use Twitter for login: false
If registration is successful you should get a 'Consumer Key' and
a 'Consumer Secret' for your application.
* Now login as admin-Root and navigate to the tab Administration >
Configuration.
o Create a new component configuration with
- Name: Twitter
- Qualifier: Twitter
o Navigate to the newly created component configuration and add the
following string properties:
- CRX.OAuth.ConsumerKey: Twitter consumer key.
- CRX.OAuth.ConsumerSecret: Twitter consumer secret.
NOTE: segment-specific tokens are configured using the pattern
- ..OAuth.ConsumerKey
- ..OAuth.ConsumerSecret
* Logout
Users are now able to setup Twitter accounts.
Create Twitter Account
----------------------
* Login as user, e.g. guest
* Twitter accounts are configured on a user's home in the tab
'Service Account'. A Twitter account is created as follows:
o Name: Twitter user display name
o Active: true
o Default: true
* Invoke the wizard 'Twitter - Create access token'. The wizard shows
an URL and a field to enter a PIN code. Open the URL in a new browser
window. This redirects you to Twitter asking to grant access for
the openCRX instance. If you grant access a PIN code will be displayed.
Enter the PIN code and click OK. If all goes well, the fields
'Access token key' and 'Access token secret' are set now.
Using the Wizards
-----------------
Almost on all objects the following two wizards are available:
* Twitter - Send Message. This wizard allows to send a message to a
list of Twitter users. In addition the message text is attached as note
and if you are invoking the wizard on an activity a follow up is created.
Note that the message is only visible to the recipients.
* Twitter - Update Status. This wizard allows to update the status for one
of the configured Twitter accounts. Status updates are visible to all
followers of the selected Twitter account.
Using the SendDirectMessageWorkflow
-----------------------------------
The SendDirectMessageWorkflow works the same way as the
SendMailNotificationWorkflow. Instead of sending an EMail to the user in
case of alert updates, the alert title including a tiny url pointing to
the underlying openCRX object is sent as direct message to the default
Twitter account of the subscribing user. The SegmentSetupWizard creates
the required entries for the workflow and topic. Users simply need to
subscribe to the topic 'Alert Modifications (Twitter)'.
CR10009558
Portal: LookupObjectEventHandler. Action EVENT_FIND_OBJECT takes as
parameter PARAMETER_REFERENCE which defines the type of the lookup object.
In addition to modeled reference names, user-defined structural feature
definitions are also supported.
CR10009396
IMAP IDLE. IMAPAdapter supports IMAP IDLE. See
http://en.wikipedia.org/wiki/IMAP_IDLE.
CR10009494
Portal: Show-always option for search forms. Option allows the user to show
search form automatically when a grid is displayed.
CR10009530
CopyDb: replace provider name. Support to replace provider name when
copying db. Added options:
* -Dprovider.name.source
* -Dprovider.name.target
See ant CopyDb for more info.
CR10009491
ICAL TRANSP: TRANSPARENT | OPAQUE. The attribute TRANSP is mapped to the
activity's assigned resources. If the requesting user has at least one
resource assignment with workingUnitPercentage > 0 then TRANSP=OPAQUE,
else TRANSPARENT. TRANSP is managed by the CalDAV, ICS and FREEBUSY servlets.
CR10009511
Root objects per perspective. User settings should allow to configure
the state (show|hide) of root objects per perspective.
CR10009515
linkToAndFollowUp(). The operation Activity.linkToAndFollowUp(linkTo, transition)
performs a doFollowUp() where
* followUp.title is set to linkTo name
* followUp.text is set to linkTo detailed description
* followUp.activity is set to linkTo
* activity is linked to linkTo
CR20019321
Title tag for labels. Create a title tag for labels if a tooltip for a
field is customized.
2. CHANGES
2.0. CHANGED FEATURES
CR10009726
ProductClassification and ActivityProcessState are DescriptionContainer.
CR10009614
Contact.ouMembership(). The calculation of the derived attribute ouMembership
is expensive. E.g. reading all accounts with REST results in account and membership
queries for each account. Replace derived reference ContactIsMemberOf by shared
association.
CR10009542
AccessControl: optimize applyBrowseFilter in case of multiple invocations.
CR10009512
IMAP: auto-assign. The method Activities.importMimeMessage() now supports
two import modes:
* If the subject line starts with "> " the message is treated as wrapper
message. All attachments are treated mime messages which are imported instead
of the message itself. The subject line of the wrapper message has the following
form:
> @ [#]
The allows the user to specifiy the email creator and an optional activity creator.
If specified, an activity is created (name = subject, detailedDescription=body)
and the imported emails are linked with this activity using linkToAndFollowUp().
* In any other case the message is imported as is.
The subject line of all imported messages is scanned for activity numbers. Activity
numbers have the form #. If a matching activity is found the imported
email is linked with this activity using linkToAndFollowUp().
2.1. FIXED BUGS
CR10009581
updateInventory() throws NullPointer.
2.2 REMOVED FEATURES
none
---