方案概述

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>
Trackback

no comment untill now

Add your comment now