* 将LDAP中的组织结构同步过来,包括部门和人员
* 部门对应于Ofbiz中的Party和PartyGroup,Party的角色是INTERNAL_ORGANIZATIO和LDAP,角色LDAP是用于实现双向同步的比对
* 上下级映射用PartyRelationship表,关系类型的partyRelationshipTypeId为GROUP_ROLLUP,删除时将Party的状态标记为Disabled
* 人员对应于Ofbiz中的Party和Person,Party的角色是EMPLOYEE和LDAP,所尾部门是用PartyRelationship表,关系类型的partyRelationshipTypeId为EMPLOYMENT,删除时将Party的状态标记为Disabled
* 同时将UserLogin中的enabled改为N
人员的职位对应于EmplPositionType,若软件工程师部属于IT部,则在IT部下面新建EmplPosition。同时将职位下的人员通过EmplPositionFulfillment加进EmplPosition中。若EmplPositionFulfillment的下面没有人,则删除对应的EmplPosition
一、定义一个视图
<view-entity entity-name="EmplPositionFulfillmentAndParty" package-name="org.apache.ofbiz.plugin.wasion">
<member-entity entity-alias="EMPPOS" entity-name="EmplPosition"/>
<member-entity entity-alias="EMPPOSFUL" entity-name="EmplPositionFulfillment"/>
<member-entity entity-alias="PARTY" entity-name="Party"/>
<alias name="partyId" entity-alias="PARTY"></alias>
<alias name="statusId" entity-alias="PARTY"></alias>
<alias name="emplPositionId" entity-alias="EMPPOS"></alias>
<view-link entity-alias="EMPPOS" rel-entity-alias="EMPPOSFUL" rel-optional="true">
<key-map field-name="emplPositionId"/>
</view-link>
<view-link entity-alias="EMPPOSFUL" rel-entity-alias="PARTY">
<key-map field-name="partyId"/>
</view-link>
</view-entity>
二、定义同步的服务:
<service name="syncPartyByLdap" auth="true" transaction-timeout="3600"
engine="groovy" location="component://wasion/script/ldap.groovy" invoke="syncParty" >
<description>从LDAP中同步组织结构</description>
<attribute name="result" mode="OUT" type="Map"></attribute>
</service>
三、服务的实现类:
import javax.naming.directory.*;
import javax.naming.*;
import java.util.*;
import org.apache.ofbiz.service.ModelService
import org.apache.ofbiz.service.ServiceUtil;
import org.apache.ofbiz.base.util.*;
import org.apache.ofbiz.entity.GenericEntityException
import org.apache.ofbiz.entity.GenericValue;
import org.apache.ofbiz.entity.condition.EntityCondition
import org.apache.ofbiz.entity.condition.EntityJoinOperator
import org.apache.ofbiz.entity.condition.EntityOperator
import org.apache.ofbiz.entity.util.EntityQuery
/*
* 将LDAP中的组织结构同步过来,包括部门和人员
* 部门对应于Ofbiz中的Party和PartyGroup,Party的角色是INTERNAL_ORGANIZATIO和LDAP,角色LDAP是用于实现双向同步的比对
* 上下级映射用PartyRelationship表,关系类型的partyRelationshipTypeId为GROUP_ROLLUP,删除时将Party的状态标记为Disabled
*
* 人员对应于Ofbiz中的Party和Person,Party的角色是EMPLOYEE和LDAP,所尾部门是用PartyRelationship表,关系类型的partyRelationshipTypeId为EMPLOYMENT,删除时将Party的状态标记为Disabled
* 同时将UserLogin中的enabled改为N
*
* 人员的职位对应于EmplPositionType,若软件工程师部属于IT部,则在IT部下面新建EmplPosition。同时将职位下的人员通过EmplPositionFulfillment加进EmplPosition中。若EmplPosit