起步软件技术论坛-X3

 找回密码
 立即注册
搜索
楼主: YZQH

【搞定】求助:界面显示问题**

[复制链接]
发表于 2007-5-11 16:37:19 | 显示全部楼层
那一段代码好像没问题,但是初始运行时还是保原来的错误,

也不知道错在那个语句

见图
回复 支持 反对

使用道具 举报

发表于 2007-5-11 16:41:53 | 显示全部楼层
lPosition是字符串, DefaultPositon是TOperatorPosition对象,不能互相赋值的。

你可以在DafaultPosition对象的PositionID属性来为lPosition赋值
回复 支持 反对

使用道具 举报

发表于 2007-5-11 16:45:36 | 显示全部楼层
这个我已改。

当时还是保同样的错误

所有代码如下:
unit NEWSPLACARD_NAVINFO;

interface

uses
  Business.System, Business.Model, Business.Data, Business.Forms,Business.Model.org,
  SystemCore,SystemUtils;

type
  TNEWSPLACARD_NAVINFO = class(TInfo)
    sdsTask: TSQLDataSet;
    FIELD_TaskIndex_FEventOptions: TExprCalcField;
    FIELD_TaskIndex_FEventState: TExprCalcField;
    FIELD_TaskIndex_FEventType: TExprCalcField;
    FIELD_TaskIndex_FEventFinishTime: TExprCalcField;
    FIELD_TaskIndex_FEventStartTime: TExprCalcField;
    FIELD_TaskIndex_FUsedTime: TCalcField;
    FIELD_Task_IsTip: TInternalDataField;
    procedure sdsTaskAfterOpen(DataSet: TDataSet);
  private
    {private declarations}
    FPersonMemberAndParentURLs: TStringList;

    function GetFilter: string;
    procedure SetIsTip;
    function DoGetQueryURLStr(const AURL: string): string; overload;
    function DoGetQueryURLStr(AURLS: TStringList): string; overload;
    function GetPersonMemberAndParentURLs: TStringList;
    function GetOgrn: TDept;
    property PersonMemberAndParentURLs: TStringList read GetPersonMemberAndParentURLs;
  public
    {public declarations}
    constructor Create(Acontext: Tcontext);
    destructor Destroy;override;
  end;

implementation

constructor TNEWSPLACARD_NAVINFO.Create(Acontext: Tcontext);
begin
  inherited;
  sdsTask.Open;
end;

destructor TNEWSPLACARD_NAVINFO.Destroy;
begin
  if FPersonMemberAndParentURLs <> nil then
    FPersonMemberAndParentURLs.Free;
  inherited;
end;

function TNEWSPLACARD_NAVINFO.GetFilter: string;
var
  lPerson,lPosition,lDept,lorg: string;
  lFilter: string;
  lNow: Double;
begin
  lNow := Business.Data.SysSrv.SysService.Time;
  lPerson := TContextUtils.GetOperator(Context).ID;

//  lPosition := TContextUtils.GetOperatorPosition(context).PositionID;
  lPosition := SystemCore.TSystemCore.Operator.DefaultPosition.PositionID ;
//  if not Assigned(lPosition) then
  if lPosition = '' then
  lPosition := SystemCore.TSystemCore.Operator.Positions[0].PositionID ;

  lDept := TContextUtils.GetDept(context).ID;

  lorg := GetOgrn.ID;

  lFilter := ' ftype = ''NEWSPLACARDDEAL'' ';
if SysUtils.SameText(sdsTask.Connection.Meta.DataProvider, Business.Data.BizSchemaTypes.cDriver_ORACLE) then
  begin
    lFilter := lFilter + SysUtils.Format('and TTask.FPLANSTARTTIME <= TO_DATE(''%s'', ''YY-MM-DD HH24:MI:SS'')',
                             [SysUtils.FormatDateTime('yyyy-mm-dd hh:mm:ss', lNow)]);
    lFilter := lFilter + SysUtils.Format('and TTask.FPLANFINISHTIME >= TO_DATE(''%s'', ''YY-MM-DD HH24:MI:SS'')',
                             [SysUtils.FormatDateTime('yyyy-mm-dd hh:mm:ss', lNow)]);
  end
  else
  begin
    lFilter := lFilter + SysUtils.Format('and TTask.FPLANSTARTTIME <= ''%s''',
                             [SysUtils.FormatDateTime('yyyy-mm-dd hh:mm:ss', lNow)]);
    lFilter := lFilter + SysUtils.Format('and TTask.FPLANFINISHTIME >= ''%s''',
                             [SysUtils.FormatDateTime('yyyy-mm-dd hh:mm:ss', lNow)]);
  end;
  lFilter := lFilter + 'and (TTASK.FGUID IN '+
                '     (SELECT TTASKMESSAGE.FTASKGUID '+
                '         FROM TTASKMESSAGE '+
                '        WHERE (TTASKMESSAGE.FSTATE IN '+
//                '              (''tmsSend'', ''tmsReceived'', ''tmsProcessing'')) '+
                '               (''tmsFinished'')) '+
                '          AND (((TTASKMESSAGE.FRDEPT = '''+lDept+''') AND '+
                '              (TTASKMESSAGE.FRPOSITION = '''+lPosition+''') AND '+
                '              (TTASKMESSAGE.FRPERSON = '''+lPerson+''')) or '+
                '              ((TTASKMESSAGE.FRDEPT = '''+lDept+''') AND  '+
                '              (TTASKMESSAGE.FRPOSITION = '''+lPosition+''') AND '+
                '              (TTASKMESSAGE.FRPERSON is null)) or '+
                '              ((TTASKMESSAGE.FRDEPT = '''+lDept+''') AND '+
                '              (TTASKMESSAGE.FRPOSITION is null) AND '+
                '              (TTASKMESSAGE.FRPERSON is null)) or '+
                '              ((TTASKMESSAGE.FRDEPT is null) AND '+
                '              (TTASKMESSAGE.FRPOSITION is null) AND '+
                '              (TTASKMESSAGE.FRPERSON is null) AND '+
                '              (TTASKMESSAGE.FROGN = '''+lorg+''')))) '+
                '  or (TTASK.FGUID IN '+
                '     (SELECT T1.FGUID '+
                '         FROM TTASK T1 '+
                '        WHERE (T1.FSTATE IN (''tsStarted'', ''tsProcessing'')) '+
                '          AND ((T1.FSDEPT = '''+lDept+''') AND (T1.FSPOSITION = '''+lPosition+''') AND '+
                '              (T1.FSPERSON = '''+lPerson+'''))))) ';
  lFilter := lFilter + 'and (TTASK.FGUID IN '+
                '     (SELECT TTASKMESSAGE.FTASKGUID '+
                '         FROM TTASKMESSAGE '+
                '        WHERE (TTASKMESSAGE.FSTATE IN '+
                '               (''tmsFinished'')) '+
                '          AND (TTASKMESSAGE.FRORGURL IN ('+DoGetQueryURLStr(PersonMemberAndParentURLs)+') or '+
                '              (TTASKMESSAGE.FRORGURL in (''\ROOT\_UNEXIST_.OGN\.DPT\.PTM\.PSM'',''\ROOT\_UNEXIST_.OGN\.DPT'') and TTASKMESSAGE.FROGN = '''+lorg+''' )) ) '+
                '  or (TTASK.FGUID IN '+
                '     (SELECT T1.FGUID '+
                '         FROM TTASK T1 '+
                '        WHERE (T1.FSTATE IN (''tsStarted'', ''tsProcessing'',''tsFinished'')) '+
                '            and  (T1.FSPERSON = '''+lPerson+''')))) ';

{ lFilter := lFilter + 'and (TTASK.FGUID IN '+
                '     (SELECT TTASKMESSAGE.FTASKGUID '+
                '         FROM TTASKMESSAGE '+
                '        WHERE (TTASKMESSAGE.FSTATE IN '+
//                '              (''tmsSend'', ''tmsReceived'', ''tmsProcessing'')) '+
                '               (''tmsFinished'')) '+
                '          AND (((TTASKMESSAGE.FRDEPT = '''+lDept+''') AND '+
                '              (TTASKMESSAGE.FRPOSITION = '''+lPosition+''') AND '+
                '              (TTASKMESSAGE.FRPERSON = '''+lPerson+''')) or '+
                '              ((TTASKMESSAGE.FRDEPT = '''+lDept+''') AND  '+
                '              (TTASKMESSAGE.FRPOSITION = '''+lPosition+''') AND '+
                '              (TTASKMESSAGE.FRPERSON is null)) or '+
                '              ((TTASKMESSAGE.FRDEPT = '''+lDept+''') AND '+
                '              (TTASKMESSAGE.FRPOSITION is null) AND '+
                '              (TTASKMESSAGE.FRPERSON is null)) or '+
                '              ((TTASKMESSAGE.FRDEPT is null) AND '+
                '              (TTASKMESSAGE.FRPOSITION is null) AND '+
                '              (TTASKMESSAGE.FRPERSON is null) AND '+
                '              (TTASKMESSAGE.FROGN = '''+lorg+''')))) '+
                '  or (TTASK.FGUID IN '+
                '     (SELECT T1.FGUID '+
                '         FROM TTASK T1 '+
                '        WHERE (T1.FSTATE IN (''tsStarted'', ''tsProcessing'')) '+
                '          AND ((T1.FSDEPT = '''+lDept+''') AND (T1.FSPOSITION = '''+lPosition+''') AND '+
                '              (T1.FSPERSON = '''+lPerson+'''))))) ';
  lFilter := lFilter + 'and (TTASK.FGUID IN '+
                '     (SELECT TTASKMESSAGE.FTASKGUID '+
                '         FROM TTASKMESSAGE '+
                '        WHERE (TTASKMESSAGE.FSTATE IN '+
                '               (''tmsFinished'')) '+
                '          AND (TTASKMESSAGE.FRORGURL IN ('+DoGetQueryURLStr(PersonMemberAndParentURLs)+') or '+
                '              (TTASKMESSAGE.FRORGURL in (''\ROOT\_UNEXIST_.OGN\.DPT\.PTM\.PSM'',''\ROOT\_UNEXIST_.OGN\.DPT'') and TTASKMESSAGE.FROGN = '''+lorg+''' )) ) '+
                '  or (TTASK.FGUID IN '+
                '     (SELECT T1.FGUID '+
                '         FROM TTASK T1 '+
                '        WHERE (T1.FSTATE IN (''tsStarted'', ''tsProcessing'',''tsFinished'')) '+
                '            and  (T1.FSPERSON = '''+lPerson+''')))) ';       }


  Result := lFilter;
end;

procedure TNEWSPLACARD_NAVINFO.SetIsTip;
var
  lQuery: TQuery;
  lISTip : String;
  lGuid: String;
  lkeyvalue0: String;
begin
  lQuery := TQuery.Create(nil);
  sdsTask.DisableControls;
  try
    lISTip := 'N';
    sdsTask.First;
    while not sdsTask.Eof do
    begin
      lGuid := sdsTask.FieldByName('FGUID').AsString;
      lQuery.Close;
      lQuery.ConnectionString := 'DataBaseURL=Biz:\SYSTEM\System.DataBase';
      lQuery.CommandText := 'select ttaskbizdata.fkeyvalue0 '+
                          '    from Ttaskbizdata, ttask   '+
                          '   where ttaskbizdata.ftaskguid = ttask.fguid '+
                          '     and ttask.fguid = '''+lGuid+''' ';
      lQuery.Open;
      lkeyvalue0 := lQuery.Fields[0].AsString;
      if not (lkeyvalue0 = '') then
      begin
        lQuery.Close;
        lQuery.ConnectionString := 'DataBaseURL=Biz:\COLLABORATION\Collaboration.Database';
        lQuery.CommandText := 'select TBUSINESSDATA.ESField02 from TBUSINESSDATA where FID = '''+lkeyvalue0+''' ';
        lQuery.Open;
        if not (lQuery.Fields[0].AsString = '') then
          lISTip := lQuery.Fields[0].AsString;
      end;
      sdsTask.Edit;
      sdsTask.FieldByName('IsTip').AsString := lISTip;
      sdsTask.post;
      sdsTask.Next;
    end;
  finally
    lQuery.Free;
    sdsTask.First;
    sdsTask.EnableControls;
  end;
end;

procedure TNEWSPLACARD_NAVINFO.sdsTaskAfterOpen(DataSet: TDataSet);
begin
  sdsTask.UseBizRange := False;
  sdsTask.SQLFiltered := False;
  sdsTask.SQLFilter := GetFilter;
  sdsTask.SQLFiltered := True;
  SetIsTip;
end;

function TNEWSPLACARD_NAVINFO.DoGetQueryURLStr(const AURL: string): string;
var
  lPrefix: string;
begin
  lPrefix := ''; //干掉警告
  Result := SysUtils.UpperCase(FileSys.FileUtils.ExcludeFilePrefix(AURL, lPrefix));
end;

function TNEWSPLACARD_NAVINFO.DoGetQueryURLStr(AURLS: TStringList): string;
var
  I: Integer;
  lStrList: TStringList;
begin
  lStrList := TStringList.Create;
  try
    for I := 0 to AURLS.Count - 1 do
       lStrList.Add(DoGetQueryURLStr(AURLS[I]));
    Result := JSSysUtils.FormatAndUniteStr(' , ', '''%s''', lStrList);
  finally
    lStrList.Free;
  end;
end;

function TNEWSPLACARD_NAVINFO.GetPersonMemberAndParentURLs: TStringList;
begin
  if FPersonMemberAndParentURLs = nil then
  begin
    FPersonMemberAndParentURLs := TStringList.Create;
    TContextUtils.GetPersonMemberURLs(Self.Context, FPersonMemberAndParentURLs, True);
  end;
  Result := FPersonMemberAndParentURLs;
end;

function TNEWSPLACARD_NAVINFO.GetOgrn: TDept;
begin
if TContextUtils.FindOperatorPosition(context) = nil then
    Result := TOrgUtils.GetOrgan(TContextUtils.GetDefaultOperatorPosition(Context))
  else
    Result := TOrgUtils.GetOrgan(TContextUtils.GetOperatorPosition(Context));
end;

end.
回复 支持 反对

使用道具 举报

发表于 2007-5-11 16:47:12 | 显示全部楼层
还是有问题

不知在自己代码的什么地方?错误始终定位在系统程序代码上

图:

yyyyy.jpeg

116.42 KB, 下载次数: 165

回复 支持 反对

使用道具 举报

发表于 2007-5-11 17:01:08 | 显示全部楼层
能不能请守宝帮我们看一下,他上次在我们这儿时一起改的,可能比较清楚一点
回复 支持 反对

使用道具 举报

发表于 2007-5-11 17:10:14 | 显示全部楼层
看看下面的 调用栈
就知道从哪里调用到这里的了
回复 支持 反对

使用道具 举报

发表于 2007-5-11 17:14:03 | 显示全部楼层
应该是这里的问题了,通过自身环境context,找岗位或者机构
function TNEWSPLACARD_NAVINFO.GetPersonMemberAndParentURLs: TStringList;
begin
  if FPersonMemberAndParentURLs = nil then
  begin
    FPersonMemberAndParentURLs := TStringList.Create;
    TContextUtils.GetPersonMemberURLs(Self.Context, FPersonMemberAndParentURLs, True);
  end;
  Result := FPersonMemberAndParentURLs;
end;

function TNEWSPLACARD_NAVINFO.GetOgrn: TDept;
begin
if TContextUtils.FindOperatorPosition(context) = nil then
    Result := TOrgUtils.GetOrgan(TContextUtils.GetDefaultOperatorPosition(Context))
  else
    Result := TOrgUtils.GetOrgan(TContextUtils.GetOperatorPosition(Context));
end;

这里都用类似6楼方法来获取岗位环境
回复 支持 反对

使用道具 举报

发表于 2007-5-11 17:15:45 | 显示全部楼层
lPosition := SystemCore.TSystemCore.Operator.DefaultPosition;
  if not Assigned(lPosition) then
  lPosition := SystemCore.TSystemCore.Operator.Positions[0];

lPosition.Context就是岗位环境了
回复 支持 反对

使用道具 举报

发表于 2007-5-11 17:17:06 | 显示全部楼层
lDept := TContextUtils.GetDept(context).ID;
这里也用上面给的环境

你看看吧,所有的环境Context都用18楼给的环境lPosition.Context
回复 支持 反对

使用道具 举报

发表于 2007-5-14 08:07:12 | 显示全部楼层
//  lPosition := TContextUtils.GetOperatorPosition(context).PositionID;
  lPosition := SystemCore.TSystemCore.Operator.DefaultPosition.PositionID ;
//  if not Assigned(lPosition) then
  if lPosition = '' then
  lPosition := SystemCore.TSystemCore.Operator.Positions[0].PositionID ;

  lDept := TContextUtils.GetDept(context).ID;

  lorg := GetOgrn.ID;


**********
lPosition := SystemCore.TSystemCore.Operator.DefaultPosition;
  if not Assigned(lPosition) then
  lPosition := SystemCore.TSystemCore.Operator.Positions[0];

lPosition.Context就是岗位环境了
如何定义lPosition?
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-1-10 03:59 , Processed in 0.044828 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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