I am trying to set up an LDAP (well, AD actually) to MySQL synchronization. 
I've managed for the system to recognize missing entries and the 
<create>-SQL-statement is successfully run. But I am having problems with 
getting Update-on-Difference working.

My Table looks like this:
| uid  | Tel_nr | Name  | Vorname   |
| herr | 2565   | Herrs | Alexander  | 

In my LDAP everything is the same but the sn attribute which is 'Herr'. So 
there should actually be a difference of 'Herr' != 'Herrs', so it should call 
the <update>-SQL-statement? Well it doesn't. Any ideas what I am doing wrong?

Here are the relevant code parts from my configuration:

Lsc.xml:
    <task>
      <name>LDAP-TelephoneDB</name>
      <bean>org.lsc.beans.SimpleBean</bean>

      <ldapSourceService>
        <name>ldap-src</name>
        <connection reference="ad-dst-conn" />
        <baseDn>DC=basedn</baseDn>
        <pivotAttributes>
          <string>samaccountname</string>
        </pivotAttributes>
        <fetchedAttributes>
          <string>uid</string>
          <string>sn</string>
          <string>givenname</string>
          <string>telephonenumber</string>
        </fetchedAttributes>
        
<getAllFilter><![CDATA[(&(objectClass=hsmNaturalPerson)(eduPersonAffiliation=*employee*))]]></getAllFilter>
        
<getOneFilter><![CDATA[(&(objectClass=hsmNaturalPerson)(samaccountname={samaccountname}))]]></getOneFilter>
        
<cleanFilter><![CDATA[(&(objectClass=hsmNaturalPersonPerson)(samaccountname={uid}))]]></cleanFilter>
      </ldapSourceService>

      <databaseDestinationService>
        <name>db-dst-netadmin-tel</name>
        <connection reference="tel-conn" />
        <requestNameForList>getTelephoneNumberList</requestNameForList>
        <requestNameForObject>getTelephoneUserByUID</requestNameForObject>
        <requestsNameForInsert>
          <string>insertNewTelephoneUser</string>
        </requestsNameForInsert>
        <requestsNameForUpdate>
          <string>updateTelephoneUser</string>
        </requestsNameForUpdate>
        <requestsNameForDelete>
          <string>deleteTelephoneUser</string>
        </requestsNameForDelete>
      </databaseDestinationService>

      <propertiesBasedSyncOptions>
        <mainIdentifier>srcBean.getMainIdentifier()</mainIdentifier>
        <defaultDelimiter>;</defaultDelimiter>
        <defaultPolicy>FORCE</defaultPolicy>
        <conditions>
          <create>false</create>
          <update>true</update>
          <delete>false</delete>
          <changeId>false</changeId>
        </conditions>

        <dataset>
          <name>uid</name>
          <policy>FORCE</policy>
          <forceValues>
            <string>srcBean.getDatasetFirstValueById("uid")</string>
          </forceValues>
        </dataset>
        <dataset>
          <name>sn</name>
          <policy>FORCE</policy>
          <forceValues>
            <string>srcBean.getDatasetFirstValueById("sn")</string>
          </forceValues>
        </dataset>
        <dataset>
          <name>givenname</name>
          <policy>FORCE</policy>
          <forceValues>
            <string>srcBean.getDatasetFirstValueById("givenName")</string>
          </forceValues>
        </dataset>
      </propertiesBasedSyncOptions>
    </task>

TelephoneMySQL.xml: 
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" 
"http://www.ibatis.com/dtd/sql-map-2.dtd";>

<sqlMap namespace="TelephoneNumber">

        <select id="getTelephoneUserByUID" resultClass="java.util.HashMap" 
parameterClass="java.util.Map">
      SELECT
        uid as samaccountname,
        uid as uid,
        Name as sn,
        Vorname as givenname,
        Tel_nr as telephonenumber
      FROM
        Telefon_migration
      WHERE
        uid = #samaccountname#
        </select>

        <select id="getTelephoneNumberList" resultClass="java.util.HashMap">
      SELECT
        uid as samaccountname
      FROM
        Telefon_migration
      WHERE
        uid IS NOT NULL AND
        Typ IN ('6867','6869','6873') AND
        Name NOT IN 
('Beratungsraum','Labor','Werkstatt','Notruftelefon','Brandmeldeanlage','Konferenztelefon','Campusradio','Information','Büro','Fachschaft','Fax')
        </select>

    <insert id="insertNewTelephoneUser" parameterClass="java.util.Map">
      INSERT INTO Telefon_migration
        (uid,Abteilung,Tech_id,Tel_nr,Name)
      VALUES
        ( #uid#, 'XXXX', 'XXXX', #uid#, 'XXXX' )
    </insert>

    <update id="updateTelephoneUser" parameterClass="java.util.Map">
      UPDATE Telefon_migration
        SET Spalten2 = 'SUCCESS'
      WHERE
        uid = #samaccountname#
    </update>

    <delete id="deleteTelephoneUser" parameterClass="java.util.Map">
      UPDATE Telefon_migration
        SET uid = 'REMOVED',
        SET Vorname = 'AUSGESCHIEDEN',
        SET Name = 'AUSGESCHIEDEN'
      WHERE
        uid = #uid# AND
        Typ IN ('6867',6869','6873') AND
        Name NOT IN 
('Beratungsraum','Labor','Werkstatt','Notruftelefon','Brandmeldeanlage','Konferenztelefon','Campusradio','Information','Büro','Fachschaft','Fax')
    </delete>

</sqlMap>
_______________________________________________________________
Ldap Synchronization Connector (LSC) - http://lsc-project.org

lsc-users mailing list
[email protected]
https://lists.lsc-project.org/cgi-bin/mailman/listinfo/lsc-users

Reply via email to