起步软件技术论坛-X3

 找回密码
 立即注册
搜索
12
返回列表 发新帖
楼主: Hexc

【结贴】business无法登陆,“Biz:OPERATIONOASPACETASKCENTERNEWSFUNC.Func”转换为

[复制链接]
发表于 2009-4-21 16:05:26 | 显示全部楼层
这个应该是系统信息表中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.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-21 16:08:25 | 显示全部楼层
Biz:\COLLABORATION\DesktopFunc.Func;
Biz:\COLLABORATION\CustomDesktopFunc.Func;
Biz:\COLLABORATION\SchedulerFunc.Func;
Biz:\COLLABORATION\TaskCenterFunc.Func;
Biz:\COLLABORATION\PlanCenterFunc.Func;
Biz:\COLLABORATION\JustepMail.Func;
Biz:\COLLABORATION\MyTaskFunc.Func;
Biz:\COLLABORATION\TaskRelationViewFunc.Func;
Biz:\COLLABORATION\PlanBrowseFunc.Func;
Biz:\COLLABORATION\WorkRecordFunc.Func;
Biz:\COLLABORATION\WORKTASKFUNC.Func;
Biz:\COLLABORATION\WorkLogFunc.Func;
Biz:\COLLABORATION\WorkAdviceFunc.Func;
Biz:\COLLABORATION\WorkWeekPlanFunc.Func;
Biz:\COLLABORATION\CalendarFunc.Func;
Biz:\COLLABORATION\CalendarTempletMngFunc.Func;
Biz:\COLLABORATION\WorkCalendarFunc.Func;
Biz:\COLLABORATION\UserPanelSettingFunc.Func;
Biz:\COLLABORATION\WEBVIEWFUNC.Func;
Biz:\COLLABORATION\WorkAdviceDealFunc.Func;
Biz:\COLLABORATION\WorkLogDealFunc.Func;
Biz:\COLLABORATION\WorkRecordDealFunc.Func;
Biz:\COLLABORATION\WorkTaskDealFunc.Func;
Biz:\COLLABORATION\WorkWeekPlanDealFunc.Func;
Biz:\COLLABORATION\ShowDetails.Func;
Biz:\COLLABORATION\PanelDefineFunc.Func;
Biz:\COLLABORATION\CalendarDealFunc.Func;
Biz:\COLLABORATION\AddressListFunc.Func;
Biz:\COLLABORATION\JUSTEPMEMO.Func;
Biz:\COLLABORATION\JUSTEPNOTEBOOK.Func;
Biz:\OPERATION\CRMSPACE\UserMngFunc.Func;
Biz:\OPERATION\CRMSPACE\CstmCommRecordFunc.Func;
Biz:\OPERATION\CRMSPACE\CSTMTRACKTFUNC.Func;
Biz:\OPERATION\CRMSPACE\PresaleWorkTaskFunc.Func;
Biz:\OPERATION\CRMSPACE\CustomerMngFunc.Func;
Biz:\OPERATION\CRMSPACE\UserCommRecordFunc.Func;
Biz:\OPERATION\CRMSPACE\UserTrackRecordFunc.Func;
Biz:\OPERATION\CRMSPACE\CHIEFMEETINGRECFUNC.Func;
Biz:\OPERATION\CRMSPACE\WORKWEEKREPORTFunc.Func;
Biz:\OPERATION\CRMSPACE\ProductDemandFUNC.Func;
Biz:\OPERATION\CRMSPACE\ProductQuestionFunc.Func;
Biz:\OPERATION\CRMSPACE\ProductQuestionFunc.Func;
Biz:\OPERATION\CRMSPACE\DATEAPPLICATIONFunc.Func;
Biz:\OPERATION\CRMSPACE\CstmCommRecordDealFunc.Func;
Biz:\OPERATION\CRMSPACE\CSTMTRACKDEALFUNC.Func;
Biz:\OPERATION\CRMSPACE\PresaleWorkTaskDealFunc.Func;
Biz:\OPERATION\CRMSPACE\UserCommRecordDealFunc.Func;
Biz:\OPERATION\CRMSPACE\UserTrackRecordDealFunc.Func;
Biz:\OPERATION\CRMSPACE\CHIEFMEETINGRECDEALFUNC.Func;
Biz:\OPERATION\CRMSPACE\WORKWEEKREPORTDEALfunc.Func;
Biz:\OPERATION\CRMSPACE\ProductDemandDealFunc.Func;
Biz:\OPERATION\CRMSPACE\ProductQuestionDealFunc.Func;
Biz:\OPERATION\CRMSPACE\DATEAPPLICATIONDEALFUNC.Func;
Biz:\OPERATION\OASPACE\TASKCENTERNEWSFUNC.Func;
Biz:\OPERATION\OASPACE\LetterVisitDealFunc.Func;
Biz:\OPERATION\OASPACE\LetterDisposalDealFunc.Func;
Biz:\OPERATION\OASPACE\DailyChargeBxDealFunc.Func;
Biz:\OPERATION\OASPACE\EvectionChargeBxDealFunc.Func

上面最后5行是系统里没有的功能,但是该怎么去除他们呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-21 16:12:14 | 显示全部楼层
好的,我试一试看
回复 支持 反对

使用道具 举报

发表于 2009-4-21 16:21:51 | 显示全部楼层
12楼的这些功能你是从那个地方看到的?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-21 16:50:32 | 显示全部楼层
12楼的这些功能是我跟踪到procedure TBusinessConfig.Load(IniFile: TBaseXMLIniFile)过程中的下面这句得到的:
   DefaultFuncs := IniFile.ReadString(GetSection, 'DefaultFuncs', DefaultFuncs);

另外,使用记录视图访法可以预览Blob值字段的内容,但是不让修改,只能查看,我怎么才能改它呢?
回复 支持 反对

使用道具 举报

发表于 2009-4-22 11:20:42 | 显示全部楼层
修改一下
业务模型\系统空间\系统运行库\配置库
static function TSystemConsts.DefaultFuncs: TStringArray;
这个函数,把后面几个功能去掉看看呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-22 13:14:30 | 显示全部楼层
改这个不起作用,最终调用的还是TSETTINGLIB.LoadConfig来给DefaultFuncs赋值
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-22 13:17:19 | 显示全部楼层
我到sqlserver2005数据库里看了一下,那个blob字段类型是image,字段内容查看一下是0x打头的一大堆东西,我该怎么改呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-22 13:29:14 | 显示全部楼层
行了,我知道怎么改了,应该在sql server中用sql语句来改
回复 支持 反对

使用道具 举报

发表于 2009-4-22 14:35:25 | 显示全部楼层
ok
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-22 06:35 , Processed in 0.040501 second(s), 14 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表