Thursday, February 09, 2012 ..:: Forums ::.. Register  Login
 Forums Minimize
 
ForumForumMainstream Foru...Mainstream Foru...Feature Request...Feature Request...Settings export/import featureSettings export/import feature
Previous Previous
 
Next Next
New Post
 3/18/2009 5:51 AM
 
Hello, after some months, we have deployed our customized SplendidCRM solution using Professional version 2.1. Now we are facing a problem.

We have 3 SplendidCRM database, one for developement (which is in my notebook, called DEVEL), one for testing (called TEST) and one for production (called PRODUCTION).
When I develope a new module or a new feature in DEVEL, I normally have to add some buttons, fields, terminologies and so on. This translates in some rows added to the "system" tables of SplendidCRM (ex: TERMINOLOGY, EDITVIEWS_FIELDS, CONFIG etc).  This rows are obviously added on DEVEL database.
When is time to release a new version, is there any function, procedure or suggested practice to prepare an upgrade script?

I have seen the the upgrade setups of SplendidCRM come with a XML upgrade script and an executable called SplendidConfigure.exe which execute this script. Is this what I need? Can you tell me how to replicate this strategy?


Fabrizio

New Post
 3/18/2009 9:38 AM
 
 Modified By Support  on 3/18/2009 10:09:33 AM

The beauty of having the SQL code is that it can be used as a reference when adding or customizing the system.

The best practice for customizing SplendidCRM is to use SQL script to do all customizations.  If you have added buttons, then you will want to create a script in the Data folder that includes this change so that you are able to run the Build.bat file to create a new master Build.sql file that will be used to apply the current state to TEST and PRODUCTION.

 

New Post
 3/18/2009 10:09 AM
 
Thanks for your prompt reply.
I understand that I have to create a script, but I did not find any way to automatize the creation of this script, with the result that if changes are a lot, manually creating the script raises chances of an error. So, is there any automatic or semiautomatic way to create an upgrade script?
A nice feature would be, for example, read the modifications made to the system tables since a given date, and create the upgrade script. Or create the script related to a given module.
Is there anything similar?

New Post
 3/18/2009 11:57 AM
 
 Modified By Support  on 3/18/2009 10:58:26 AM

There is no automatic way to generate the scripts.  It must be done by hand. 

Actually, it is probably not that hard to create such a generation script.  Here is something that I just wrote that may help:

 

declare @VIEW_NAME           nvarchar(50);
declare @CONTROL_INDEX       int;
declare @CONTROL_TYPE        nvarchar(25);
declare @MODULE_NAME         nvarchar(25);
declare @MODULE_ACCESS_TYPE  nvarchar(100);
declare @TARGET_NAME         nvarchar(25);
declare @TARGET_ACCESS_TYPE  nvarchar(100);
declare @CONTROL_TEXT        nvarchar(150);
declare @CONTROL_TOOLTIP     nvarchar(150);
declare @CONTROL_ACCESSKEY   nvarchar(150);
declare @CONTROL_CSSCLASS    nvarchar(50);
declare @TEXT_FIELD          nvarchar(200);
declare @ARGUMENT_FIELD      nvarchar(200);
declare @COMMAND_NAME        nvarchar(50);
declare @URL_FORMAT          nvarchar(255);
declare @URL_TARGET          nvarchar(20);
declare @ONCLICK_SCRIPT      nvarchar(255);
declare @MOBILE_ONLY         bit;
declare @ADMIN_ONLY          bit;

declare @INSERT_STMT             nvarchar(4000);
declare @MAX_VIEW_NAME           int;
declare @MAX_CONTROL_TYPE        int;
declare @MAX_MODULE_NAME         int;
declare @MAX_MODULE_ACCESS_TYPE  int;
declare @MAX_TARGET_NAME         int;
declare @MAX_TARGET_ACCESS_TYPE  int;
declare @MAX_CONTROL_TEXT        int;
declare @MAX_CONTROL_TOOLTIP     int;
declare @MAX_CONTROL_ACCESSKEY   int;
declare @MAX_CONTROL_CSSCLASS    int;
declare @MAX_TEXT_FIELD          int;
declare @MAX_ARGUMENT_FIELD      int;
declare @MAX_COMMAND_NAME        int;
declare @MAX_URL_FORMAT          int;
declare @MAX_URL_TARGET          int;
declare @MAX_ONCLICK_SCRIPT      int;

declare button_cursor cursor for
select VIEW_NAME           
     , CONTROL_INDEX       
     , CONTROL_TYPE        
     , MODULE_NAME         
     , MODULE_ACCESS_TYPE  
     , TARGET_NAME         
     , TARGET_ACCESS_TYPE  
     , CONTROL_TEXT        
     , CONTROL_TOOLTIP     
     , CONTROL_ACCESSKEY   
     , CONTROL_CSSCLASS    
     , TEXT_FIELD          
     , ARGUMENT_FIELD      
     , COMMAND_NAME        
     , URL_FORMAT          
     , URL_TARGET          
     , ONCLICK_SCRIPT      
     , MOBILE_ONLY         
     , ADMIN_ONLY          
  from vwDYNAMIC_BUTTONS
 order by VIEW_NAME, CONTROL_INDEX;

select @MAX_VIEW_NAME          = max(len(isnull(VIEW_NAME         , 0))) + 1
     , @MAX_CONTROL_TYPE       = max(len(isnull(CONTROL_TYPE      , 0))) + 1
     , @MAX_MODULE_NAME        = max(len(isnull(MODULE_NAME       , 0))) + 1
     , @MAX_MODULE_ACCESS_TYPE = max(len(isnull(MODULE_ACCESS_TYPE, 0))) + 1
     , @MAX_TARGET_NAME        = max(len(isnull(TARGET_NAME       , 0))) + 1
     , @MAX_TARGET_ACCESS_TYPE = max(len(isnull(TARGET_ACCESS_TYPE, 0))) + 1
     , @MAX_CONTROL_TEXT       = max(len(isnull(CONTROL_TEXT      , 0))) + 1
     , @MAX_CONTROL_TOOLTIP    = max(len(isnull(CONTROL_TOOLTIP   , 0))) + 1
     , @MAX_CONTROL_ACCESSKEY  = max(len(isnull(CONTROL_ACCESSKEY , 0))) + 1
     , @MAX_CONTROL_CSSCLASS   = max(len(isnull(CONTROL_CSSCLASS  , 0))) + 1
     , @MAX_TEXT_FIELD         = max(len(isnull(TEXT_FIELD        , 0))) + 1
     , @MAX_ARGUMENT_FIELD     = max(len(isnull(ARGUMENT_FIELD    , 0))) + 1
     , @MAX_COMMAND_NAME       = max(len(isnull(COMMAND_NAME      , 0))) + 1
     , @MAX_URL_FORMAT         = max(len(isnull(URL_FORMAT        , 0))) + 1
     , @MAX_URL_TARGET         = max(len(isnull(URL_TARGET        , 0))) + 1
     , @MAX_ONCLICK_SCRIPT     = max(len(isnull(ONCLICK_SCRIPT    , 0))) + 1
 from vwDYNAMIC_BUTTONS;

open button_cursor;
fetch next from button_cursor into @VIEW_NAME, @CONTROL_INDEX, @CONTROL_TYPE, @MODULE_NAME, @MODULE_ACCESS_TYPE, @TARGET_NAME, @TARGET_ACCESS_TYPE, @CONTROL_TEXT, @CONTROL_TOOLTIP, @CONTROL_ACCESSKEY, @CONTROL_CSSCLASS, @TEXT_FIELD, @ARGUMENT_FIELD, @COMMAND_NAME, @URL_FORMAT, @URL_TARGET, @ONCLICK_SCRIPT, @MOBILE_ONLY, @ADMIN_ONLY;
while @@FETCH_STATUS = 0 begin -- do
	set @INSERT_STMT = 'exec dbo.spDYNAMIC_BUTTONS_InsertOnly ';
	set @INSERT_STMT = @INSERT_STMT + '''' + @VIEW_NAME + '''' + space(@MAX_VIEW_NAME - len(@VIEW_NAME)) ;
	if @CONTROL_INDEX is null begin -- then
		set @INSERT_STMT = @INSERT_STMT + ', null';
	end else begin
		set @INSERT_STMT = @INSERT_STMT + ', ''' + cast(@CONTROL_INDEX as varchar(10)) + '''';
	end -- if;
	
	if @CONTROL_TYPE is null begin -- then
		set @INSERT_STMT = @INSERT_STMT + ', null' + space(@MAX_CONTROL_TYPE - 4);
	end else begin
		set @INSERT_STMT = @INSERT_STMT + ', ''' + replace(@CONTROL_TYPE, '''', '''''') + '''' + space(@MAX_CONTROL_TYPE - len(@CONTROL_TYPE));
	end -- if;
	
	if @MODULE_NAME is null begin -- then
		set @INSERT_STMT = @INSERT_STMT + ', null' + space(@MAX_MODULE_NAME - 4 + 2);
	end else begin
		set @INSERT_STMT = @INSERT_STMT + ', ''' + replace(@MODULE_NAME, '''', '''''') + '''' + space(@MAX_MODULE_NAME - len(@MODULE_NAME));
	end -- if;
	
	if @MODULE_ACCESS_TYPE is null begin -- then
		set @INSERT_STMT = @INSERT_STMT + ', null' + space(@MAX_MODULE_ACCESS_TYPE - 4 + 2);
	end else begin
		set @INSERT_STMT = @INSERT_STMT + ', ''' + replace(@MODULE_ACCESS_TYPE, '''', '''''') + '''' + space(@MAX_MODULE_ACCESS_TYPE - len(@MODULE_ACCESS_TYPE));
	end -- if;
	
	if @TARGET_NAME is null begin -- then
		set @INSERT_STMT = @INSERT_STMT + ', null' + space(@MAX_TARGET_NAME - 4 + 2);
	end else begin
		set @INSERT_STMT = @INSERT_STMT + ', ''' + replace(@TARGET_NAME, '''', '''''') + '''' + space(@MAX_TARGET_NAME - len(@TARGET_NAME));
	end -- if;
	
	if @TARGET_ACCESS_TYPE is null begin -- then
		set @INSERT_STMT = @INSERT_STMT + ', null' + space(@MAX_TARGET_ACCESS_TYPE - 4 + 2);
	end else begin
		set @INSERT_STMT = @INSERT_STMT + ', ''' + replace(@TARGET_ACCESS_TYPE, '''', '''''') + '''' + space(@MAX_TARGET_ACCESS_TYPE - len(@TARGET_ACCESS_TYPE));
	end -- if;
	
	if @CONTROL_TEXT is null begin -- then
		set @INSERT_STMT = @INSERT_STMT + ', null' + space(@MAX_CONTROL_TEXT - 4 + 2);
	end else begin
		set @INSERT_STMT = @INSERT_STMT + ', ''' + replace(@CONTROL_TEXT, '''', '''''') + '''' + space(@MAX_CONTROL_TEXT - len(@CONTROL_TEXT));
	end -- if;
	
	if @CONTROL_TOOLTIP is null begin -- then
		set @INSERT_STMT = @INSERT_STMT + ', null' + space(@MAX_CONTROL_TOOLTIP - 4 + 2);
	end else begin
		set @INSERT_STMT = @INSERT_STMT + ', ''' + replace(@CONTROL_TOOLTIP, '''', '''''') + '''' + space(@MAX_CONTROL_TOOLTIP - len(@CONTROL_TOOLTIP));
	end -- if;
	
	if @CONTROL_ACCESSKEY is null begin -- then
		set @INSERT_STMT = @INSERT_STMT + ', null' + space(@MAX_CONTROL_ACCESSKEY - 4 + 2);
	end else begin
		set @INSERT_STMT = @INSERT_STMT + ', ''' + replace(@CONTROL_ACCESSKEY, '''', '''''') + '''' + space(@MAX_CONTROL_ACCESSKEY - len(@CONTROL_ACCESSKEY));
	end -- if;
	
	if @CONTROL_CSSCLASS is null begin -- then
		set @INSERT_STMT = @INSERT_STMT + ', null' + space(@MAX_CONTROL_CSSCLASS - 4 + 2);
	end else begin
		set @INSERT_STMT = @INSERT_STMT + ', ''' + replace(@CONTROL_CSSCLASS, '''', '''''') + '''' + space(@MAX_CONTROL_CSSCLASS - len(@CONTROL_CSSCLASS));
	end -- if;
	
	if @TEXT_FIELD is null begin -- then
		set @INSERT_STMT = @INSERT_STMT + ', null' + space(@MAX_TEXT_FIELD - 4 + 2);
	end else begin
		set @INSERT_STMT = @INSERT_STMT + ', ''' + replace(@TEXT_FIELD, '''', '''''') + '''' + space(@MAX_TEXT_FIELD - len(@TEXT_FIELD));
	end -- if;
	
	if @ARGUMENT_FIELD is null begin -- then
		set @INSERT_STMT = @INSERT_STMT + ', null' + space(@MAX_ARGUMENT_FIELD - 4 + 2);
	end else begin
		set @INSERT_STMT = @INSERT_STMT + ', ''' + replace(@ARGUMENT_FIELD, '''', '''''') + '''' + space(@MAX_ARGUMENT_FIELD - len(@ARGUMENT_FIELD));
	end -- if;
	
	if @COMMAND_NAME is null begin -- then
		set @INSERT_STMT = @INSERT_STMT + ', null' + space(@MAX_COMMAND_NAME - 4 + 2);
	end else begin
		set @INSERT_STMT = @INSERT_STMT + ', ''' + replace(@COMMAND_NAME, '''', '''''') + '''' + space(@MAX_COMMAND_NAME - len(@COMMAND_NAME));
	end -- if;
	
	if @URL_FORMAT is null begin -- then
		set @INSERT_STMT = @INSERT_STMT + ', null' + space(@MAX_URL_FORMAT - 4 + 2);
	end else begin
		set @INSERT_STMT = @INSERT_STMT + ', ''' + replace(@URL_FORMAT, '''', '''''') + '''' + space(@MAX_URL_FORMAT - len(@URL_FORMAT));
	end -- if;
	
	if @URL_TARGET is null begin -- then
		set @INSERT_STMT = @INSERT_STMT + ', null' + space(@MAX_URL_TARGET - 4 + 2);
	end else begin
		set @INSERT_STMT = @INSERT_STMT + ', ''' + replace(@URL_TARGET, '''', '''''') + '''' + space(@MAX_URL_TARGET - len(@URL_TARGET));
	end -- if;
	
	if @ONCLICK_SCRIPT is null begin -- then
		set @INSERT_STMT = @INSERT_STMT + ', null' + space(@MAX_ONCLICK_SCRIPT - 4 + 2);
	end else begin
		set @INSERT_STMT = @INSERT_STMT + ', ''' + replace(@ONCLICK_SCRIPT, '''', '''''') + '''' + space(@MAX_ONCLICK_SCRIPT - len(@ONCLICK_SCRIPT));
	end -- if;
	
	if @MOBILE_ONLY is null begin -- then
		set @INSERT_STMT = @INSERT_STMT + ', null';
	end else begin
		set @INSERT_STMT = @INSERT_STMT + ', ''' + cast(@MOBILE_ONLY as char(1)) + ''' ';
	end -- if;
	
	if @ADMIN_ONLY is null begin -- then
		set @INSERT_STMT = @INSERT_STMT + ', null';
	end else begin
		set @INSERT_STMT = @INSERT_STMT + ', ''' + cast(@ADMIN_ONLY as char(1)) + ''' ';
	end -- if;
	set @INSERT_STMT = @INSERT_STMT + ';'
	print @INSERT_STMT;
	fetch next from button_cursor into @VIEW_NAME, @CONTROL_INDEX, @CONTROL_TYPE, @MODULE_NAME, @MODULE_ACCESS_TYPE, @TARGET_NAME, @TARGET_ACCESS_TYPE, @CONTROL_TEXT, @CONTROL_TOOLTIP, @CONTROL_ACCESSKEY, @CONTROL_CSSCLASS, @TEXT_FIELD, @ARGUMENT_FIELD, @COMMAND_NAME, @URL_FORMAT, @URL_TARGET, @ONCLICK_SCRIPT, @MOBILE_ONLY, @ADMIN_ONLY;
end -- while;
close button_cursor;

deallocate button_cursor;
GO

New Post
 3/18/2009 12:13 PM
 
Thank you a lot, I'll try it soon!
Previous Previous
 
Next Next
ForumForumMainstream Foru...Mainstream Foru...Feature Request...Feature Request...Settings export/import featureSettings export/import feature


  
Copyright (c) 2006-2010 SplendidCRM Software, Inc. All Rights Reserved.   Terms Of Use  Privacy Statement
DotNetNuke® is copyright 2002-2012 by DotNetNuke Corporation