这个应该是系统信息表中Blob值字段的内容,可以使用记录视图访法预览一下这个表,把Blob值字段内容拷贝出来修改。
看了一下楼主这里代码还有一个缺陷按照下面方法修改一下:
方案2的具体做法:
1、修改系统函数库,增加读写用户配置信息的函数
TSystemUtils = class(TBizLibrary)
……
public
……
//添加的代码
static function ReadSystemInfo(const AID: string; var AValue: string; AStream: TStream): Boolean;
static procedure WriteSystemInfo(const AID, AValue: string; AStream: TStream);
static function ReadUserInfo(const AScope, AID: string; var AValue: string; AStream: TStream): Boolean;
static procedure WriteUserInfo(const AScope, AID, AValue: string; AStream: TStream);
end;
添加常量:
const
cSystemScope = 'SYSTEM_TIBSYSTEM';
cUserScope = 'USER_';
UISpaceID = 'UISpace';
cSysDatabaseURL = 'Biz:\SYSTEM\System.DataBase';
cSysDatabaseConnectionString = 'DATABASEURL=' + cSysDatabaseURL;
cSQL_GetResInfo_0_ex = 'SELECT * FROM TSYSINFO WHERE FCLIENTACCOUNT = ''%s'' AND FINFOSCOPE = :SCOPE AND FINFOID = :ID';
cSQL_GetResInfo_2_ex = 'SELECT FINFOVALUE, FINFOVALUEEXT FROM TSYSINFO WHERE FCLIENTACCOUNT = ''%s'' AND FINFOSCOPE = :SCOPE AND FINFOID = :ID';
cSQL_GetResInfo_1_ex = 'SELECT FINFOVALUE FROM TSYSINFO WHERE FCLIENTACCOUNT = ''%s'' AND FINFOSCOPE = :SCOPE AND FINFOID = :ID';
//添加的代码
static procedure TSystemUtils.WriteUserInfo(const AScope, AID, AValue: string; AStream: TStream);
var
lQuery: TQuery;
lTransHandle: TTransactionHandle;
begin
lQuery := TQuery.Create(nil);
try
lQuery.ConnectionString := cSysDatabaseConnectionString;
lQuery.CommandText := SysUtils.Format(cSQL_GetResInfo_0_ex, [BizSys.BizSystem.ClientAccount]);
with lQuery.Params do
begin
ParamByName('SCOPE').AsString := cUserScope + AScope;
ParamByName('ID').AsString := AID;
end;
lQuery.Open;
if lQuery.IsEmpty then
lQuery.Append
else
lQuery.Edit;
with lQuery do
begin
FieldByName('FINFOSCOPE').AsString := cUserScope + AScope;
FieldByName('FINFOID').AsString := AID;
FieldByName('FINFOVALUE').AsString := AValue;
FieldByName('FCLIENTACCOUNT').AsString := BizSys.BizSystem.ClientAccount;
if Assigned(AStream) then
TBlobField(FieldByName('FINFOVALUEEXT')).LoadFromStream(AStream);
lQuery.Post;
lTransHandle := lQuery.Connection.Transaction.Start(False);
lQuery.ApplyUpdates(0);
lQuery.Connection.Transaction.Commit(lTransHandle);
end;
finally
lQuery.Free;
end;
end;
static function TSystemUtils.ReadUserInfo(const AScope, AID: string; var AValue: string; AStream: TStream): Boolean;
var
lQuery: TQuery;
begin
lQuery := TQuery.Create(nil);
try
lQuery.ConnectionString := cSysDatabaseConnectionString;
if Assigned(AStream) then
lQuery.CommandText := SysUtils.Format(cSQL_GetResInfo_2_ex, [BizSys.BizSystem.ClientAccount])
else
lQuery.CommandText := SysUtils.Format(cSQL_GetResInfo_1_ex, [BizSys.BizSystem.ClientAccount]);
with lQuery.Params do
begin
ParamByName('SCOPE').AsString := cUserScope + AScope;
ParamByName('ID').AsString := AID;
end;
lQuery.Open;
if lQuery.IsEmpty then
Result := False
else
begin
AValue := lQuery.FieldByName('FINFOVALUE').AsString;
if Assigned(AStream) then
with TBlobField(lQuery.FieldByName('FINFOVALUEEXT')) do
if not IsNull then SaveToStream(AStream);
Result := True;
end;
finally
lQuery.Free;
end;
end;
static function TSystemUtils.ReadSystemInfo(const AID: string; var AValue: string; AStream: TStream): Boolean;
begin
Result := TSystemUtils.ReadUserInfo(cSystemScope, AID, AValue, AStream);
end;
static procedure TSystemUtils.WriteSystemInfo(const AID, AValue: string; AStream: TStream);
begin
TSystemUtils.WriteUserInfo(cSystemScope, AID, AValue, AStream);
end;
2、修改以下几个点,将系统对平台底层函数的调用替换为平台脚本函数
注意:WriteUserInfo方法最后一个参数去掉了
调用:下面修改的单元都要引用系统函数库
1、Biz:\COLLABORATION\DESKTOPFOLDER\PANELSETTINGINFO.INFO.DIR\USERDSKSETFORMDOC.FORMDOC.PAS
//ExtUtils.WriteUserInfo(FNowUser.ID, TRTLConsts.UserDskSetDefDeskSetId, lAID, nil, True);
2、Biz:\SYSTEM\SYSRUN\SETTINGLIB.LIBRARY.PAS(421):
ExtUtils.WriteUserInfo(SysUtils.UpperCase(cRootURL), cID, '', lStream, True)
3、Biz:\SYSTEM\SYSRUN\SETTINGLIB.LIBRARY.PAS(424):
ExtUtils.WriteUserInfo(SysUtils.UpperCase(AOrgUrl), cID, '', lStream, True);
4、Biz:\SYSTEM\SYSFUNCS\USERINTERFACEMANAGER.FUNC.DIR\MAINFORM.FORM.PAS(114):
ExtUtils.WriteUserInfo(FOperator.ID, UISpaceID, FDefaultOne, lStream, True);
5、Biz:\SYSTEM\BASEUSERINTERFACE\LIBS\UISTYLECOMMONLIBRARY.LIBRARY.DIR\OPTIONDIALOG.FORM.PAS(167):
ExtUtils.WriteUserInfo(TSystemCore.Operator.ID, UISpaceID, S, nil, True);
6、标准风格主窗体
procedure TSTANDARDSTYLEMAINFORM.BizFormClose(Sender: TObject; var Action: TCloseAction);
{ 退出不保存用户界面配置信息,在配置界面点确定的时候保存 }
//if FConfig.SaveOnExit then
/// if not Opr.IsSystemManager(TSystemCore.Operator.ID) then
// if ConfigDif then
// WriteSetting;
7、配置库
将所有对ExtUtils.的调用替换成TSystemUtils. |