OA集成腾讯通<二>:刷新组织架构
客户端软件安装好了以后,去下载许可文件,同时需要开启本机的8010端口,所有我们还需要注意防火墙,客户端首次登录服务器需要拉取组织架构信息(其中不包含人员信息,只包含部门列表),客户端默认的以每2秒向服务器拉取部门下的人员列表,所以部门下的人员不能太多,这些人员信息保存在UserList.xml中
第一步:RTX与OA进行信息同步,从下面的图中可以看出,同步信息分为组织架构信息同步和人员信息同步
按照思路需要将OA中部门人员的信息都取出来,然后加入到RTX中,我们先建立一个RTX工具方法的类RTXUtil.cs,包含一些配置信息和方法,首先看看配置信息,主要包括:是否信息同步,服务端IP,端口,可客户端端口
/// <summary> /// 是否在操作OA账号与单位部门时同步至Rtx中 /// </summary> public static bool RtxSyncToOa { get { return ParameterFilter.GetBool(ConfigurationManager.AppSettings["rtxUserSync"]); } } public static string ServerIp = ParameterFilter.GetString(ConfigurationManager.AppSettings["rtxServerIP"]); public static int LoginServerPort = ParameterFilter.GetInt(ConfigurationManager.AppSettings["rtxConnPort"]); public static int AppServerPort = ParameterFilter.GetInt(ConfigurationManager.AppSettings["rtxServerAppPort"]);
组织架构同步的时候,需要一个新增部门的方法,
/// <summary> /// 利用部门实体新增部门 /// </summary> /// <param name="deptInfo"></param> /// <returns></returns> public static bool AddDept(DepartmentInfo deptInfo) { try { // 创建一个业务逻辑对象 var rtxObj = new RTXObject(); // 创建一个集合对象 var rtxParams = new RTXCollectionClass(); rtxObj.Name = "USERMANAGER"; int deptId = Convert.ToInt32(deptInfo.UnitId.ToString() + deptInfo.DeptId.ToString()); rtxParams.Add("PDEPTID", deptInfo.UnitId); rtxParams.Add("DEPTID", deptId); rtxParams.Add("NAME", deptInfo.DeptName); rtxParams.Add("INFO", deptInfo.DeptName); if (IsExistsDept(deptId)) { rtxObj.Call2(enumCommand_.PRO_SETDEPT, rtxParams); } else { rtxObj.Call2(enumCommand_.PRO_ADDDEPT, rtxParams); } return true; } catch (Exception) { return false; } }
这个方法的是往RTX中添加组织架构信息,有个这个方法,我们就可以将OA中的部门信息导入到RTX中
/// <summary> /// 同步组织架构 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void btnOrgSync_Click(object sender, EventArgs e) { UnitsManager unitsManager = new UnitsManager(); IList<UnitInfo> unitInfos = unitsManager.GetUnits(); foreach (var unitInfo in unitInfos) { RtxUtil.AddDept(unitInfo); var deptManager = new DepartmentsManager(); IList<DepartmentInfo> deptInfos = deptManager.GetDepartmentsInUnit(unitInfo.UnitId.ToString()); foreach (var deptInfo in deptInfos) { RtxUtil.AddDept(deptInfo); } } }