起步软件技术论坛-X3

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

任务回收

[复制链接]
 楼主| 发表于 2010-6-25 11:55:43 | 显示全部楼层
咱们分2步,先解决B环节处理后A还能回收的bug,再想办法在回收后把A环节AfterFlowOut的逻辑逆执行回去
请看19楼结果
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-6-25 14:39:52 | 显示全部楼层
不好意思顶一下,明天周六值班人不一定能解决这个了
回复 支持 反对

使用道具 举报

发表于 2010-6-25 15:02:37 | 显示全部楼层
请稍等,我这边找个3012的环境试试。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-6-25 15:17:05 | 显示全部楼层
好,是这样,最好是3012修改一些系统代码,先改掉回收的bug,这样我们就先不升级
如果没有其他办法我们就得明天周六升级,不影响用户使用,所以今天最好能给个结果
至于回收后把A环节AfterFlowOut的逻辑逆执行回去,可以稍后
回复 支持 反对

使用道具 举报

发表于 2010-6-25 16:13:35 | 显示全部楼层
楼主,上面仅仅是改了入口的,还需要改 其他地方的代码:
function TFuncManager.RunTasks(AContext: TContext; ATasks: TList; ATaskMessages: TList;
  AExecutor: TOrgURL): TFunc;
var
  I: Integer;
  lTask: TTask;
  lFuncURL: string;
  lUIDs: TStringList;
  lFlowControl: TFlowControl;
  lOrgURL: TOrgURL;
  lPosition: TOperatorPosition;
begin
  lTask := ATasks[0] as TTask;
  lFuncURL := GetFuncURLByTask(lTask);
  Assert(lFuncURL <> '', '');

  lUIDs := TStringList.Create;
  try
    for I := 0 to ATasks.Count - 1 do
      lUIDs.Add(GetTaskUniqueID(ATasks[I] as TTask));
    lFlowControl := TFlowControl.Create(AContext);
    try
      lFlowControl.ExecuteTask(ATasks, AExecutor);

      lPosition := TContextUtils.GetOperatorPosition(AContext);
      try
        // 不能使用AFuncItem的OrgURL,因为它不一定是人员成员
        lOrgURL := TOrgURL.Create(lPosition.PositionMember.Parent.ID,
          lPosition.PositionMember.ID, lPosition.PersonMember.ID);
        SetCurrentTaskState(lFlowControl, lOrgURL);
      finally
          lOrgURL.Free;
      end;

      Result := CreateFunc(lFlowControl.Context, lFuncURL);
      try
        lFlowControl.Func := Result;
        InternalRunFunc(Result, '', lUIDs, nil, False);
      except
        Result.Free;
        raise;
      end;
    except
      lFlowControl.Free;
      raise;
    end;
  finally
    lUIDs.Free;
  end;
end;

function TFuncManager.RunTasks(AContext: TContext; ATasks: TList;
  AExecutor: TOrgURL): TFunc;
var
  I: Integer;

  lTask: TTask;
  lFuncURL: string;

  lUIDs: TStringList;
  lFlowControl: TFlowControl;
  lOrgURL: TOrgURL;
  lPosition: TOperatorPosition;
begin
  lTask := ATasks[0] as TTask;
  lFuncURL := GetFuncURLByTask(lTask);
  if lFuncURL = '' then
    raise Exception.CreateFmt('找不到与任务''%s''对应的业务功能', [lTask.Subject]);

  lUIDs := TStringList.Create;
  try
    for I := 0 to ATasks.Count - 1 do
      lUIDs.Add(GetTaskUniqueID(ATasks[I] as TTask));
    lFlowControl := TFlowControl.Create(AContext);
    try
      lFlowControl.ExecuteTask(ATasks, AExecutor);

      lPosition := TContextUtils.GetOperatorPosition(AContext);
      try
        // 不能使用AFuncItem的OrgURL,因为它不一定是人员成员
        lOrgURL := TOrgURL.Create(lPosition.PositionMember.Parent.ID,
          lPosition.PositionMember.ID, lPosition.PersonMember.ID);
        SetCurrentTaskState(lFlowControl, lOrgURL);
      finally
          lOrgURL.Free;
      end;

      Result := CreateFunc(lFlowControl.Context, lFuncURL);
      try
        lFlowControl.Func := Result;
        InternalRunFunc(Result, '', lUIDs, nil, False);
      except
        Result.Free;
        raise;
      end;
    except
      lFlowControl.Free;
      raise;
    end;
  finally
    lUIDs.Free;
  end;
end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-6-25 16:27:20 | 显示全部楼层
辛苦,我试试啊!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-6-25 16:37:25 | 显示全部楼层
是只需要在下面2个方法里加SetCurrentTaskState(lFlowControl, lOrgURL);还是要把这2个方法的实现都copy过去,因为3012版本和你贴的这2个方法代码不一样
function TFuncManager.RunTasks(AContext: TContext; ATasks: TList; ATaskMessages: TList;
  AExecutor: TOrgURL): TFunc;
function TFuncManager.RunTasks(AContext: TContext; ATasks: TList;
  AExecutor: TOrgURL): TFunc;
还有:
function TFuncManager.RunFunc(AContext: TContext; AFuncItem: TOperatorFuncItem; const AParams, AUniqueID: string; BeforeRunFunc: TFuncNotifyEvent; Modal: Boolean): TFunc;
这个和我手里3012就添加一个SetCurrentTaskState是吧,我怎么看你的var里有个i但也没用到呢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-6-25 17:03:04 | 显示全部楼层
补充27楼:
1、2个RunTasks方法,是只加SetCurrentTaskState方法调用,还是完全修改成你上面的代码
2、RunFunc里的变量I是个笔误,没用是吧
3、我完全修改成你上面的代码后,回收确实不可用了,但是是点击后弹出不能回收,以前我记得不可用就直接灰了吧
回复 支持 反对

使用道具 举报

发表于 2010-6-25 17:03:30 | 显示全部楼层
恩,我25楼的代码是我在3012的基础上改后的。

我怎么看你的var里有个i但也没用到呢
---这个可能我之前做什么加上的吧,呵呵,你去掉他就是了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-6-25 17:07:05 | 显示全部楼层
呵呵,麻烦把我其他几个问题也回答一下
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-8 10:40 , Processed in 0.042943 second(s), 13 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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