details:   https://code.openbravo.com/erp/devel/pi/rev/02c7d99b53e9
changeset: 30563:02c7d99b53e9
user:      Asier Lostalé <asier.lostale <at> openbravo.com>
date:      Wed Sep 21 16:39:13 2016 +0200
summary:   fixed bug 34201: can't create import entries while changing role org 
access

  Removed deprecated client and org list in ad_role because the trigger that 
kept
  them in sync was craeting contention for insertions into import entry.

diffstat:

 src-db/database/model/tables/AD_ROLE.xml                                       
  |    8 -
 src-db/database/model/triggers/AD_ROLE_ORGACCESS_TRG.xml                       
  |   99 ---------
 src-db/database/sourcedata/AD_COLUMN.xml                                       
  |   76 ------
 src-db/database/sourcedata/AD_ELEMENT.xml                                      
  |   14 -
 src-db/database/sourcedata/AD_FIELD.xml                                        
  |  110 ----------
 src-test/src/org/openbravo/test/dal/IssuesTest.java                            
  |    2 -
 src-test/src/org/openbravo/test/datasource/DataSourceSecurity.java             
  |    2 -
 src-test/src/org/openbravo/test/role/inheritance/RoleInheritanceTestUtils.java 
  |    2 -
 
src-test/src/org/openbravo/test/security/ExplicitCrossOrganizationReference.java
 |    2 -
 src/org/openbravo/erpCommon/businessUtility/InitialSetupUtility.java           
  |    2 -
 10 files changed, 0 insertions(+), 317 deletions(-)

diffs (truncated from 426 to 300 lines):

diff -r 96cab7afad17 -r 02c7d99b53e9 src-db/database/model/tables/AD_ROLE.xml
--- a/src-db/database/model/tables/AD_ROLE.xml  Tue Oct 11 17:41:03 2016 +0200
+++ b/src-db/database/model/tables/AD_ROLE.xml  Wed Sep 21 16:39:13 2016 +0200
@@ -45,14 +45,6 @@
         <default><![CDATA[  O]]></default>
         <onCreateDefault/>
       </column>
-      <column name="CLIENTLIST" primaryKey="false" required="true" 
type="NVARCHAR" size="2000" autoIncrement="false">
-        <default/>
-        <onCreateDefault/>
-      </column>
-      <column name="ORGLIST" primaryKey="false" required="true" 
type="NVARCHAR" size="2000" autoIncrement="false">
-        <default/>
-        <onCreateDefault/>
-      </column>
       <column name="C_CURRENCY_ID" primaryKey="false" required="false" 
type="VARCHAR" size="32" autoIncrement="false">
         <default/>
         <onCreateDefault/>
diff -r 96cab7afad17 -r 02c7d99b53e9 
src-db/database/model/triggers/AD_ROLE_ORGACCESS_TRG.xml
--- a/src-db/database/model/triggers/AD_ROLE_ORGACCESS_TRG.xml  Tue Oct 11 
17:41:03 2016 +0200
+++ /dev/null   Thu Jan 01 00:00:00 1970 +0000
@@ -1,99 +0,0 @@
-<?xml version="1.0"?>
-  <database name="TRIGGER AD_ROLE_ORGACCESS_TRG">
-    <trigger name="AD_ROLE_ORGACCESS_TRG" table="AD_ROLE_ORGACCESS" 
fires="after" insert="true" update="true" delete="true" foreach="statement">
-      <body><![CDATA[
-    /*************************************************************************
-    * The contents of this file are subject to the Compiere Public
-    * License 1.1 ("License"); You may not use this file except in
-    * compliance with the License. You may obtain a copy of the License in
-    * the legal folder of your Openbravo installation.
-    * Software distributed under the License is distributed on an
-    * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
-    * implied. See the License for the specific language governing rights
-    * and limitations under the License.
-    * The Original Code is  Compiere  ERP &  Business Solution
-    * The Initial Developer of the Original Code is Jorg Janke and ComPiere, 
Inc.
-    * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke,
-    * parts created by ComPiere are Copyright (C) ComPiere, Inc.;
-    * All Rights Reserved.
-    * Contributor(s): Openbravo SLU
-    * Contributions are Copyright (C) 2001-2008 Openbravo, S.L.U.
-    *
-    * Specifically, this derivative work is based upon the following Compiere
-    * file and version.
-    *************************************************************************
-    * $Id: AD_Role_OrgAccess_Trg.sql,v 1.3 2003/05/04 06:46:07 jjanke Exp $
-    ***
-    * Title: Update AD_Role.OrgList / ClientList
-    *  for all Roles as otherwise mutating trigger
-    * Description:
-    ************************************************************************/
-    TYPE RECORD IS REF CURSOR;
-  CUR_Role RECORD;
-  Cur_Org RECORD;
-  v_ClientList VARCHAR2(2000):='';
-  v_OrgList    VARCHAR2(2000):='';
-  v_Client_ID VARCHAR2(32):=-1;
-    
-BEGIN
-    
-    IF AD_isTriggerEnabled()='N' THEN RETURN;
-    END IF;
-
-
-  -- For each Role
-  FOR CUR_Role IN
-    (SELECT *  FROM AD_Role  FOR UPDATE)
-  LOOP
-    v_ClientList:='';
-    v_OrgList:='';
-    v_Client_ID:=-1;
-    -- Assemble Client/OrgList
-    FOR Cur_Org IN
-      (
-      SELECT AD_Client_ID,
-        AD_Org_ID
-      FROM AD_Role_OrgAccess
-      WHERE AD_Role_ID=CUR_Role.AD_Role_ID
-        AND IsActive='Y'
-      ORDER BY AD_Client_ID,
-        AD_Org_ID
-      )
-    LOOP
-      IF(v_Client_ID <> Cur_Org.AD_Client_ID) THEN
-        IF (v_ClientList IS NULL OR (LENGTH(v_ClientList) + 
LENGTH(Cur_Org.AD_Client_ID) + 1 < 2000)) THEN
-            v_Client_ID:=Cur_Org.AD_Client_ID;
-            IF(LENGTH(v_ClientList) <> 0) THEN
-              v_ClientList:=v_ClientList || ',';
-            END IF;
-            v_ClientList:=v_ClientList || Cur_Org.AD_Client_ID;
-        END IF;
-      END IF;
-      -- Org
-      IF (v_OrgList IS NULL OR (LENGTH(v_OrgList) + LENGTH(Cur_Org.AD_Org_ID) 
+ 1 < 2000)) THEN
-          IF(LENGTH(v_OrgList) <> 0) THEN
-            v_OrgList:=v_OrgList || ',';
-          END IF;
-          v_OrgList:=v_OrgList || Cur_Org.AD_Org_ID;
-      END IF;
-    END LOOP;
-    -- Org
-    --
-    IF(v_ClientList IS NULL OR LENGTH(v_ClientList)=0) THEN
-      v_ClientList:=CUR_Role.AD_Client_ID;
-    END IF;
-    IF(v_OrgList IS NULL OR LENGTH(v_OrgList)=0) THEN
-      v_OrgList:=CUR_Role.AD_Org_ID;
-    END IF;
-    DBMS_OUTPUT.PUT_LINE(CUR_Role.Name || ': Client=' || CUR_Role.ClientList 
|| '->' || v_ClientList || ' - Org= ' || CUR_Role.OrgList || '->' || v_OrgList) 
;
-    -- Update Role
-    UPDATE AD_Role
-      SET ClientList=v_ClientList,
-      OrgList=v_OrgList
-    WHERE AD_ROLE.AD_ROLE_ID=CUR_Role.AD_ROLE_ID;
-  END LOOP;
-  -- Role
-END AD_ROLE_ORGACCESS_TRG
-]]></body>
-    </trigger>
-  </database>
diff -r 96cab7afad17 -r 02c7d99b53e9 src-db/database/sourcedata/AD_COLUMN.xml
--- a/src-db/database/sourcedata/AD_COLUMN.xml  Tue Oct 11 17:41:03 2016 +0200
+++ b/src-db/database/sourcedata/AD_COLUMN.xml  Wed Sep 21 16:39:13 2016 +0200
@@ -7502,82 +7502,6 @@
 <!--534-->  <ALLOWED_CROSS_ORG_LINK><![CDATA[N]]></ALLOWED_CROSS_ORG_LINK>
 <!--534--></AD_COLUMN>
 
-<!--535--><AD_COLUMN>
-<!--535-->  <AD_COLUMN_ID><![CDATA[535]]></AD_COLUMN_ID>
-<!--535-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
-<!--535-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
-<!--535-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
-<!--535-->  <NAME><![CDATA[Client List]]></NAME>
-<!--535-->  <DESCRIPTION><![CDATA[Clients this Role can access]]></DESCRIPTION>
-<!--535-->  <HELP><![CDATA[Indicates the Clients (by client id) that this Role 
can access.  Multiple Clients are delimited by a comma ','.]]></HELP>
-<!--535-->  <COLUMNNAME><![CDATA[ClientList]]></COLUMNNAME>
-<!--535-->  <AD_TABLE_ID><![CDATA[156]]></AD_TABLE_ID>
-<!--535-->  <AD_REFERENCE_ID><![CDATA[10]]></AD_REFERENCE_ID>
-<!--535-->  <FIELDLENGTH><![CDATA[2000]]></FIELDLENGTH>
-<!--535-->  <DEFAULTVALUE><![CDATA[@AD_Client_ID@]]></DEFAULTVALUE>
-<!--535-->  <ISKEY><![CDATA[N]]></ISKEY>
-<!--535-->  <ISPARENT><![CDATA[N]]></ISPARENT>
-<!--535-->  <ISMANDATORY><![CDATA[Y]]></ISMANDATORY>
-<!--535-->  <ISUPDATEABLE><![CDATA[N]]></ISUPDATEABLE>
-<!--535-->  <ISIDENTIFIER><![CDATA[N]]></ISIDENTIFIER>
-<!--535-->  <ISTRANSLATED><![CDATA[N]]></ISTRANSLATED>
-<!--535-->  <ISENCRYPTED><![CDATA[N]]></ISENCRYPTED>
-<!--535-->  <ISSELECTIONCOLUMN><![CDATA[N]]></ISSELECTIONCOLUMN>
-<!--535-->  <AD_ELEMENT_ID><![CDATA[226]]></AD_ELEMENT_ID>
-<!--535-->  <ISSESSIONATTR><![CDATA[N]]></ISSESSIONATTR>
-<!--535-->  <ISSECONDARYKEY><![CDATA[N]]></ISSECONDARYKEY>
-<!--535-->  <ISDESENCRYPTABLE><![CDATA[N]]></ISDESENCRYPTABLE>
-<!--535-->  <DEVELOPMENTSTATUS><![CDATA[DP]]></DEVELOPMENTSTATUS>
-<!--535-->  <AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID>
-<!--535-->  <POSITION><![CDATA[12]]></POSITION>
-<!--535-->  <ISTRANSIENT><![CDATA[N]]></ISTRANSIENT>
-<!--535-->  <ISAUTOSAVE><![CDATA[Y]]></ISAUTOSAVE>
-<!--535-->  <VALIDATEONNEW><![CDATA[Y]]></VALIDATEONNEW>
-<!--535-->  <IMAGESIZEVALUESACTION><![CDATA[N]]></IMAGESIZEVALUESACTION>
-<!--535-->  <ISUSEDSEQUENCE><![CDATA[N]]></ISUSEDSEQUENCE>
-<!--535-->  <ALLOWSORTING><![CDATA[Y]]></ALLOWSORTING>
-<!--535-->  <ALLOWFILTERING><![CDATA[Y]]></ALLOWFILTERING>
-<!--535-->  <ALLOWED_CROSS_ORG_LINK><![CDATA[N]]></ALLOWED_CROSS_ORG_LINK>
-<!--535--></AD_COLUMN>
-
-<!--536--><AD_COLUMN>
-<!--536-->  <AD_COLUMN_ID><![CDATA[536]]></AD_COLUMN_ID>
-<!--536-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
-<!--536-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
-<!--536-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
-<!--536-->  <NAME><![CDATA[Organization List]]></NAME>
-<!--536-->  <DESCRIPTION><![CDATA[List of Organizations this Role can 
access]]></DESCRIPTION>
-<!--536-->  <HELP><![CDATA[The Organization List indicates the Organizations 
(by organization id) that this Role can access.  Multiple Organizations are 
delimited by a comma ','.]]></HELP>
-<!--536-->  <COLUMNNAME><![CDATA[OrgList]]></COLUMNNAME>
-<!--536-->  <AD_TABLE_ID><![CDATA[156]]></AD_TABLE_ID>
-<!--536-->  <AD_REFERENCE_ID><![CDATA[10]]></AD_REFERENCE_ID>
-<!--536-->  <FIELDLENGTH><![CDATA[2000]]></FIELDLENGTH>
-<!--536-->  <DEFAULTVALUE><![CDATA[@AD_Org_ID@]]></DEFAULTVALUE>
-<!--536-->  <ISKEY><![CDATA[N]]></ISKEY>
-<!--536-->  <ISPARENT><![CDATA[N]]></ISPARENT>
-<!--536-->  <ISMANDATORY><![CDATA[Y]]></ISMANDATORY>
-<!--536-->  <ISUPDATEABLE><![CDATA[N]]></ISUPDATEABLE>
-<!--536-->  <ISIDENTIFIER><![CDATA[N]]></ISIDENTIFIER>
-<!--536-->  <ISTRANSLATED><![CDATA[N]]></ISTRANSLATED>
-<!--536-->  <ISENCRYPTED><![CDATA[N]]></ISENCRYPTED>
-<!--536-->  <ISSELECTIONCOLUMN><![CDATA[N]]></ISSELECTIONCOLUMN>
-<!--536-->  <AD_ELEMENT_ID><![CDATA[478]]></AD_ELEMENT_ID>
-<!--536-->  <ISSESSIONATTR><![CDATA[N]]></ISSESSIONATTR>
-<!--536-->  <ISSECONDARYKEY><![CDATA[N]]></ISSECONDARYKEY>
-<!--536-->  <ISDESENCRYPTABLE><![CDATA[N]]></ISDESENCRYPTABLE>
-<!--536-->  <DEVELOPMENTSTATUS><![CDATA[DP]]></DEVELOPMENTSTATUS>
-<!--536-->  <AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID>
-<!--536-->  <POSITION><![CDATA[13]]></POSITION>
-<!--536-->  <ISTRANSIENT><![CDATA[N]]></ISTRANSIENT>
-<!--536-->  <ISAUTOSAVE><![CDATA[Y]]></ISAUTOSAVE>
-<!--536-->  <VALIDATEONNEW><![CDATA[Y]]></VALIDATEONNEW>
-<!--536-->  <IMAGESIZEVALUESACTION><![CDATA[N]]></IMAGESIZEVALUESACTION>
-<!--536-->  <ISUSEDSEQUENCE><![CDATA[N]]></ISUSEDSEQUENCE>
-<!--536-->  <ALLOWSORTING><![CDATA[Y]]></ALLOWSORTING>
-<!--536-->  <ALLOWFILTERING><![CDATA[Y]]></ALLOWFILTERING>
-<!--536-->  <ALLOWED_CROSS_ORG_LINK><![CDATA[N]]></ALLOWED_CROSS_ORG_LINK>
-<!--536--></AD_COLUMN>
-
 <!--537--><AD_COLUMN>
 <!--537-->  <AD_COLUMN_ID><![CDATA[537]]></AD_COLUMN_ID>
 <!--537-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
diff -r 96cab7afad17 -r 02c7d99b53e9 src-db/database/sourcedata/AD_ELEMENT.xml
--- a/src-db/database/sourcedata/AD_ELEMENT.xml Tue Oct 11 17:41:03 2016 +0200
+++ b/src-db/database/sourcedata/AD_ELEMENT.xml Wed Sep 21 16:39:13 2016 +0200
@@ -1328,20 +1328,6 @@
 <!--225-->  <ISGLOSSARY><![CDATA[N]]></ISGLOSSARY>
 <!--225--></AD_ELEMENT>
 
-<!--226--><AD_ELEMENT>
-<!--226-->  <AD_ELEMENT_ID><![CDATA[226]]></AD_ELEMENT_ID>
-<!--226-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
-<!--226-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
-<!--226-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
-<!--226-->  <COLUMNNAME><![CDATA[ClientList]]></COLUMNNAME>
-<!--226-->  <NAME><![CDATA[Client List]]></NAME>
-<!--226-->  <PRINTNAME><![CDATA[Client List]]></PRINTNAME>
-<!--226-->  <DESCRIPTION><![CDATA[Clients this Role can access]]></DESCRIPTION>
-<!--226-->  <HELP><![CDATA[Indicates the Clients (by client id) that this Role 
can access.  Multiple Clients are delimited by a comma ','.]]></HELP>
-<!--226-->  <AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID>
-<!--226-->  <ISGLOSSARY><![CDATA[N]]></ISGLOSSARY>
-<!--226--></AD_ELEMENT>
-
 <!--227--><AD_ELEMENT>
 <!--227-->  <AD_ELEMENT_ID><![CDATA[227]]></AD_ELEMENT_ID>
 <!--227-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
diff -r 96cab7afad17 -r 02c7d99b53e9 src-db/database/sourcedata/AD_FIELD.xml
--- a/src-db/database/sourcedata/AD_FIELD.xml   Tue Oct 11 17:41:03 2016 +0200
+++ b/src-db/database/sourcedata/AD_FIELD.xml   Wed Sep 21 16:39:13 2016 +0200
@@ -5702,60 +5702,6 @@
 <!--364-->  <EM_OBUIAPP_SHOWSUMMARY><![CDATA[N]]></EM_OBUIAPP_SHOWSUMMARY>
 <!--364--></AD_FIELD>
 
-<!--365--><AD_FIELD>
-<!--365-->  <AD_FIELD_ID><![CDATA[365]]></AD_FIELD_ID>
-<!--365-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
-<!--365-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
-<!--365-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
-<!--365-->  <NAME><![CDATA[Client List]]></NAME>
-<!--365-->  <DESCRIPTION><![CDATA[Clients this Role can access]]></DESCRIPTION>
-<!--365-->  <HELP><![CDATA[Indicates the Clients (by client id) that this Role 
can access.  Multiple Clients are delimited by a comma ','.]]></HELP>
-<!--365-->  <ISCENTRALLYMAINTAINED><![CDATA[Y]]></ISCENTRALLYMAINTAINED>
-<!--365-->  <AD_TAB_ID><![CDATA[119]]></AD_TAB_ID>
-<!--365-->  <AD_COLUMN_ID><![CDATA[535]]></AD_COLUMN_ID>
-<!--365-->  <IGNOREINWAD><![CDATA[N]]></IGNOREINWAD>
-<!--365-->  <ISDISPLAYED><![CDATA[N]]></ISDISPLAYED>
-<!--365-->  <DISPLAYLENGTH><![CDATA[60]]></DISPLAYLENGTH>
-<!--365-->  <ISREADONLY><![CDATA[Y]]></ISREADONLY>
-<!--365-->  <ISSAMELINE><![CDATA[N]]></ISSAMELINE>
-<!--365-->  <ISFIELDONLY><![CDATA[N]]></ISFIELDONLY>
-<!--365-->  <ISENCRYPTED><![CDATA[N]]></ISENCRYPTED>
-<!--365-->  <SHOWINRELATION><![CDATA[N]]></SHOWINRELATION>
-<!--365-->  <ISFIRSTFOCUSEDFIELD><![CDATA[N]]></ISFIRSTFOCUSEDFIELD>
-<!--365-->  <AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID>
-<!--365-->  <STARTINODDCOLUMN><![CDATA[N]]></STARTINODDCOLUMN>
-<!--365-->  <STARTNEWLINE><![CDATA[N]]></STARTNEWLINE>
-<!--365-->  <ISSHOWNINSTATUSBAR><![CDATA[N]]></ISSHOWNINSTATUSBAR>
-<!--365-->  <EM_OBUIAPP_SHOWSUMMARY><![CDATA[N]]></EM_OBUIAPP_SHOWSUMMARY>
-<!--365--></AD_FIELD>
-
-<!--366--><AD_FIELD>
-<!--366-->  <AD_FIELD_ID><![CDATA[366]]></AD_FIELD_ID>
-<!--366-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
-<!--366-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
-<!--366-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
-<!--366-->  <NAME><![CDATA[Organization List]]></NAME>
-<!--366-->  <DESCRIPTION><![CDATA[List of Organizations this Role can 
access]]></DESCRIPTION>
-<!--366-->  <HELP><![CDATA[The Organization List indicates the Organizations 
(by organization id) that this Role can access.  Multiple Organizations are 
delimited by a comma ','.]]></HELP>
-<!--366-->  <ISCENTRALLYMAINTAINED><![CDATA[Y]]></ISCENTRALLYMAINTAINED>
-<!--366-->  <AD_TAB_ID><![CDATA[119]]></AD_TAB_ID>
-<!--366-->  <AD_COLUMN_ID><![CDATA[536]]></AD_COLUMN_ID>
-<!--366-->  <IGNOREINWAD><![CDATA[N]]></IGNOREINWAD>
-<!--366-->  <ISDISPLAYED><![CDATA[N]]></ISDISPLAYED>
-<!--366-->  <DISPLAYLENGTH><![CDATA[60]]></DISPLAYLENGTH>
-<!--366-->  <ISREADONLY><![CDATA[Y]]></ISREADONLY>
-<!--366-->  <ISSAMELINE><![CDATA[N]]></ISSAMELINE>
-<!--366-->  <ISFIELDONLY><![CDATA[N]]></ISFIELDONLY>
-<!--366-->  <ISENCRYPTED><![CDATA[N]]></ISENCRYPTED>
-<!--366-->  <SHOWINRELATION><![CDATA[N]]></SHOWINRELATION>
-<!--366-->  <ISFIRSTFOCUSEDFIELD><![CDATA[N]]></ISFIRSTFOCUSEDFIELD>
-<!--366-->  <AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID>
-<!--366-->  <STARTINODDCOLUMN><![CDATA[N]]></STARTINODDCOLUMN>
-<!--366-->  <STARTNEWLINE><![CDATA[N]]></STARTNEWLINE>
-<!--366-->  <ISSHOWNINSTATUSBAR><![CDATA[N]]></ISSHOWNINSTATUSBAR>
-<!--366-->  <EM_OBUIAPP_SHOWSUMMARY><![CDATA[N]]></EM_OBUIAPP_SHOWSUMMARY>
-<!--366--></AD_FIELD>
-
 <!--367--><AD_FIELD>
 <!--367-->  <AD_FIELD_ID><![CDATA[367]]></AD_FIELD_ID>
 <!--367-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
@@ -80895,34 +80841,6 @@
 <!--6734-->  <EM_OBUIAPP_SHOWSUMMARY><![CDATA[N]]></EM_OBUIAPP_SHOWSUMMARY>
 <!--6734--></AD_FIELD>
 
-<!--6735--><AD_FIELD>

------------------------------------------------------------------------------
The Command Line: Reinvented for Modern Developers
Did the resurgence of CLI tooling catch you by surprise?
Reconnect with the command line and become more productive. 
Learn the new .NET and ASP.NET CLI. Get your free copy!
http://sdm.link/telerik
_______________________________________________
Openbravo-commits mailing list
Openbravo-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openbravo-commits

Reply via email to