起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 310|回复: 12

[结贴]代码插入人员信息**

[复制链接]
发表于 2007-9-3 16:44:07 | 显示全部楼层 |阅读模式
为了和另一个人员信息表保持同步,我手动往组织机构系统表,人员表中插入人员数据,因为系统提供的函数无法和我自己的代码一起做成事务,有时候一个地方出错会引起数据不一致

现在有一个问题,我自己插入的人员在登陆系统的时候最下面状态栏只显示到人员的岗位,不显示人员姓名

如图:上面是我自己插入的人员,下面是在组织机构设计器中增加的人员

能否告知如何显示到人员,需要改动哪个表的哪个字段

多谢

1.jpg

42.3 KB, 下载次数: 197

回复

使用道具 举报

发表于 2007-9-3 16:55:43 | 显示全部楼层
为了和另一个人员信息表保持同步,我手动往组织机构系统表,人员表中插入人员数据,因为系统提供的函数无法和我自己的代码一起做成事务,有时候一个地方出错会引起数据不一致
你在哪里做,是平台里面麻?
如果是怎么做的,把代码贴出来看看。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-9-4 10:56:52 | 显示全部楼层
try
                 with query1 do
                 begin

                   newguid := Business.System.JSCommon.CreateGUIDStr;
                   tpersonguid := newguid;
                   //插入人员表
                   close;
                   CommandText := '';
                   CommandText := 'insert into TPERSON (FGUID, FCLIENTACCOUNT, FID, FDISPLAYNAME, FDEPTID, FLOGINID, FDELETELEVEL) values(:00, ''CSSCAE.COM'', :01, :02, :03, :04, 0)';
                   Params[0].AsString := newguid;
                   Params[1].AsString := lPersonID;
                   Params[2].AsString := lDisplayName;
                   Params[3].AsString := lDeptURL;
                   Params[4].AsString := lPersonID;
                   execute;

                   //查询dfd
                   close;
                   CommandText := '';
                   CommandText := 'select Fguid, FFILENAME from TORGSYSTEM where FID=:00 and FDELETELEVEL=0 and FKIND=''.DFD''';
                   Params[0].AsString := lDeptURL;
                   //Params[1].AsString := lDeptURL+'.dfd';
                   //Params[2].AsString := lDeptURL;
                   //Params[3].AsString := newguid;
                   //Params[4].AsString := lPersonID;
                   open;
                   if RecordCount>0 then
                   begin
                     depguid := fields[0].asstring;
                     //depfilename := fields[1].asstring;
                   end
                   else
                   begin
                        newguid := Business.System.JSCommon.CreateGUIDStr;
                        //插入dfd
                        close;
                        CommandText := '';
                        CommandText := 'insert into TORGSYSTEM (FGUID, FCLIENTACCOUNT, FPARENTGUID, FFILENAME, FID, FKIND, FPATH, FSPACE, FDELETELEVEL, FDISPLAYNAME, FFLAG, FDUMMY)'
                        +' values(:00, ''CSSCAE.COM'', ''9680944C01484966ACB7E07EC5B822D4'', :01, :02, ''.DFD'', ''\PERSON\'', ''\PERSON\'', 0, '', ''10000000000000000000000000000000'', :03)';
                        Params[0].AsString := newguid;
                        Params[1].AsString := lDeptURL+'.dfd';
                        Params[2].AsString := lDeptURL;
                        Params[3].AsString := newguid;
                        //Params[4].AsString := lPersonID;
                        execute;
                        depguid := newguid;
                        //depfilename := lDeptURL+'.dfd';
                   end;

                   //newguid := Business.System.JSCommon.CreateGUIDStr;
                   //插入psn
                   close;
                   CommandText := '';
                   CommandText := 'insert into TORGSYSTEM (FGUID, FCLIENTACCOUNT, FPARENTGUID, FFILENAME, FID, FKIND, FPATH, FSPACE, FDELETELEVEL, FDISPLAYNAME, FPERSON)'
                   +' values(:00, ''CSSCAE.COM'', :01, :02, :03, ''.PSN'', :04, ''\PERSON\'', 0, :05, :06)';
                   Params[0].AsString := tpersonguid;
                   Params[1].AsString := depguid;
                   Params[2].AsString := lPersonID+'.psn';
                   Params[3].AsString := lPersonID;
                   Params[4].AsString := '\PERSON\'+lDeptURL+'.DFD\';
                   Params[5].AsString := lDisplayName;
                   Params[6].AsString := lPersonID;
                   execute;


                   //查询岗位
                   close;
                   CommandText := '';
                   CommandText := 'select FPATH, FID from TORGSYSTEM where FGUID=:00';
                   Params[0].AsString := PositionID;
                   //Params[1].AsString := lDeptURL+'.dfd';
                   //Params[2].AsString := lDeptURL;
                   //Params[3].AsString := newguid;
                   //Params[4].AsString := lPersonID;
                   open;
                   //******************************************这里没有检错--当岗位为空的时候
                   //不检测,错误则可以跳到except终止
                   gpath := fields[0].asstring;
                   gfid := fields[1].asstring;

                   newguid := Business.System.JSCommon.CreateGUIDStr;
                   //插入psm
                   close;
                   CommandText := '';
                   CommandText := 'insert into TORGSYSTEM (FGUID, FCLIENTACCOUNT, FPARENTGUID, FFILENAME, FID, FKIND, FPATH, FSPACE, FDELETELEVEL, FDISPLAYNAME, FDEPT, FPOSITION, FPERSON)'
                     +' values(:00, ''CSSCAE.COM'', :01, :02, :03, ''.PSM'', :04, :05, 0, :06, :07, :08, :09)';
                   Params[0].AsString := newguid;
                   Params[1].AsString := PositionID;
                   Params[2].AsString := lPersonID+'.psm';
                   Params[3].AsString := lPersonID;
                   Params[4].AsString := gpath+gfid+'.PTM\';
                   Params[5].AsString := gpath+gfid+'.PTM\';
                   Params[6].AsString := lDisplayName;
                   Params[7].AsString := lDeptURL;
                   Params[8].AsString := gfid;
                   Params[9].AsString := lPersonID;
                   execute;

                 end
               finally
                 query1.Close;
               end;
回复 支持 反对

使用道具 举报

发表于 2007-9-4 11:49:55 | 显示全部楼层
谁告诉你这样做的,如果是在平台,直接调用平台提供的函数来做,不要直接向表中插数据。
参考
http://bbs.justep.com/forum.php?mod=viewthread&tid=3454
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-9-4 15:38:10 | 显示全部楼层
因为系统提供的函数无法和我自己的代码一起做成事务,有时候一个地方出错会引起数据不一致
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-9-4 15:40:26 | 显示全部楼层
后面还有我向自己的表中插入数据的代码,如果我的代码报错了,或者系统函数报错了,就会不一致,我想做到一个事务里面
回复 支持 反对

使用道具 举报

发表于 2007-9-6 18:08:59 | 显示全部楼层
可以放到一个事务里面吧,你怎么写的?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-9-9 10:53:37 | 显示全部楼层
lDeptBizURL.URL := lDeptURL;

    DataSetuse.open;
    DataSetuse.Filter := 'FGUID = '''+ APositionID+'''';
    DataSetuse.Filtered := true;
   
    APositionID := DataSetuse.FieldByName('FID').asString;
   
    lPositionBizURL:= Org.OrgSys.OrgSystem.FindPosition(APositionID).BizURL;


    lPerson := Org.OrgSys.OrgSystem.CreatePerson(lDeptBizURL, APersonID, APersonDisplayName);

    lPositionMember := GetPositionMember(lDeptBizURL, APositionID);
    { 如果指定岗位在指定部门下还没有,需要先分配岗位成员 }
    if lPositionMember = nil then
      lPositionMember := Org.OrgSys.OrgSystem.AssignPosition(lDeptBizURL, lPositionBizURL);
    Org.OrgSys.OrgSystem.AssignPerson(lPositionMember.BizURL, lPerson.BizURL);

然后后面是我自己定义的datasetbroker的修改,怎么和上面的函数关联
回复 支持 反对

使用道具 举报

发表于 2007-9-10 09:51:10 | 显示全部楼层
对不起,现在这些函数不支持外部事务。
楼主可以这样处理:
如果不是在循环代码中处理,可以把添加人员和后续代码分为两个步骤。出错后,只需要执行后续步骤。
如果是在循环中处理,可以把出错的组织成员信息记录下来,再由用户根据记录下来的日志来选择执行什么操作。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-9-10 11:24:23 | 显示全部楼层
9楼的方法还是有些问题的,如果正常执行一般是不会报错的,但是如果因为网络或者其他之类的原因,执行了前面的,后面的没有执行到,还是会引起数据的不一致

那能否介绍一下torgattribute,TORGCONTENT,TORGINDEX这三个组织机构系统表的功能,以及和人员,人员成员的关联,只要是添加删除修改的时候需要变动的情况就行
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-1-16 02:52 , Processed in 0.042550 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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