方案概述
Webservice Connector在OIM中只能同步用户资源,这一点在用build创建connector的时候就已经确定了,在connector的资源文件template/ConnectorConfig.xml
中就定义了资源类型
<Resource repo-type="RDBMS" name="@{WS_LONG_CODE} User"> <OBJ_TYPE>Application</OBJ_TYPE> <OBJ_ALLOWALL>1</OBJ_ALLOWALL> <OBJ_ALLOW_MULTIPLE>1</OBJ_ALLOW_MULTIPLE> <OBJ_ORDER_FOR>U</OBJ_ORDER_FOR> .... </Resource>
<OBJ_ORDER_FOR>U</OBJ_ORDER_FOR>
就表示该connector只能用于用户类型,所以在组织界面,无法选择webservice的connector,同样,webservice connector也未提供组织同步相关字段。
如果自己再开发一个connector一方面是学习成本,一方面是维护成本,既然只有类型不一样,那是否能够通过更改类型让webservice connector也支持组织同步?幸运的是答案是可以的。
创建connector
根据上面的xml片段,我们可以得知一个信息,webservice connector创建的资源类型名称命名规则为{WS_LONG_CODE} User
,为了避免歧义,在build之前先将template/ConnectorConfig.xml
文件中{WS_LONG_CODE} User
更改为{WS_LONG_CODE} Org
,然后进行build。其他配置可以参考之前写过的这篇文章,和配置用户的一样,包括
- 创建Connector
- 创建IT Resource
- 创建Form
- 创建Application
这里改名称只是为了避免歧义,如果觉得能接受可以不用这么折腾
测试环境已经生成了一个组织的Connector名称叫做FawOrg
,如果不想折腾,生产环境可以直接拷贝过去
更改资源类型
必须确保以上步骤已经完成才能更改资源类型,因为更改完资源类型后,就无法再创建表单等一些资源,这些资源是有根据资源类型过滤。
- 登录design console,进入
Resource Management->Resource Objects
,根据名称搜索资源,更改资源类型(Type)为Generic
,勾选Order For Organization

预配置(Pre-Populate)
和配置用户字段预配置一样,进入Form Designer->Pre-Populate
创建字段映射关系

操作方法可以参考的这篇文章,和用户不同的是,在选择映射资源的时候要选择Organization Definition

因为webservice上面都是用户的一些资源,因此这里是把用户字段当组织字段来用,需要事先约定好映射关系,测试环境映射关系如下
webservice 字段|组织字段
——|—-|–
Display Name|Organization Name
Country|Organization Type
Organization|Organization ID
First Name|cux_organization_code(自定义字段)
Last Name|Organization Parent ID
Login|Organization ID
配置账号
- 登录
Slef Servie
,进入组织管理,选择指定组织进行预配

- 选择webservice connector创建的资源

- 点击预填充将数据填充

- 点击完成

- 登录em查看soa接口参数如下:
<?xml version="1.0" encoding="UTF-8"?><CreateOp_InputVariable> <part xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="parameters"> <ns0:create xmlns:ns0="http://org.identityconnectors.genericws/types"> <objectClass>__ACCOUNT__</objectClass> <userAccount> <__NAME__>1341</__NAME__> <country>Department</country> <displayName>高级经理5</displayName> <lastName>1333</lastName> <organization>1341</organization> <status>false</status> </userAccount> </ns0:create> </part> </CreateOp_InputVariable>
no comment untill now