This section provides configuration notes related to using the Flat File Active Sync resource adapter, which is organized into the following sections:
If you are polling an LDIF file, the LDAP API converts attribute names to lower case. Therefore, if you have an attribute name that contains a capital letter, such as accountId, the LDAP API converts it to accountid. The following error is logged when you start Active Sync.
com.waveset.util.WavesetException: No name attribute found for user based on Resolve Identity Rule or schema map.
To correct this situation, in your schema map, set your resource user attribute to accountid.
You might encounter the same error message when you import a file that does not directly set the accountId by a column in the file. To avoid this error message, change the Active Sync User Form by adding a Field for global.accountId and adding logic to build the accountId within that field. The following example field sets accountId to be firstname.lastname, but only on create operations.
<Field name=’waveset.accountId’> <Expansion> <concat> <ref>activeSync.firstname</ref> <s>.</s> <ref>activeSync.lastname</ref> </concat> </Expansion> <Disable> <neq> <ref>feedOp</ref> <s>create</s> </neq> </Disable> </Field>
The Flat File Active Sync adapter can track the timestamp of a flat file. In addition, the adapter can archive the last file processed and then compare it to the most recent version. Identity Manager will then act on the accounts that are different in the two files.
If these features are enabled, the first time Identity Manager polls the source flat file, the system copies the file and places it in the same directory. The copied (archived) file is named FFAS_timestamp.FFAS, with the timestamp indicating the last time the original file was changed. The format of the timestamp is determined by the operating system on which the source file resides.
On each subsequent poll, Identity Manager compares the timestamp on the original file with the most recent timestamp. If the new timestamp value is the same as the previous value, then the file has not changed, and no further processing is performed until the next poll. If the timestamp values are different, Identity Manager checks for the presence of the FFAS file. If the file does not exist, Identity Manager processes the updated source file as if it were a new file.
If the timestamps are different and the archived FFAS file exists, Identity Manager compares the source file with the archived file. The comparison will filter any users that have not changed. If a user has changed, then it will be sent through the adapter in the normal manner, and the configured process, correlation and delete rules determine what to do with the user.
To facilitate these rules, the adapter will add an additional attribute to indicate the situation discovered by the difference mechanism. If any users exist only in the newly updated source file, the user record will have an additional attribute diffAction which will have the value of create. If any entries were updated in the source file, the attribute diffAction will be added and the value set to update. If any users were deleted then diffAction will be delete.
After the comparison of the two files is complete and all account processing has taken place, Identity Manager deletes the original FFAS file and copies the current source file to a new FFAS file. The timestamp on this file will be different than the previous FFAS file.
The following example files are supported by the adapter.
The delimiter and text qualifier can be configured to be any single character. If a Unicode character is used for either, it can be entered in the /u#### format. Delimiters and text qualifiers are not applicable to the LDAP interchange format.
In the following example, quotation marks (“ “) are used as the text qualifier. The string 1234 Pecan Ave., Ste 30 contains a comma. Therefore, the string must be qualified to prevent the system from interpreting Ste 30 as an attribute.
accountId,firstname,lastname,email,street address kb323441,Kevin,Brown,Kevin.Brown@example.com,”1234 Pecan Ave., Ste 30” pc432343,Penelope,Carter,Penelope.Carter@example.com,4234 Main St.
accountId|firstname|lastname|email|street address kb323441|Kevin|Brown|Kevin.Brown@example.com|1234 Pecan Ave., Ste 30 pc432343|Penelope|Carter|Penelope.Carter@example.com|4234 Main St.
dn: cn=Kevin Brown,ou=People,dc=example,dc=com changetype: add objectClass: top objectClass: person objectClass: organizationalperson objectClass: inetorgperson employeeNumber: kb323441 cn: Kevin Brown sn: Brown departmentNumber: 7013 description: Production displayName: Kevin givenName: Kevin mail: Kevin.Brown@example.com o: Acme ou: Production postalAddress: 1234 Pecan Ave., Ste 30 postalCode: 43231 st: CA street: 1234 Pecan Ave, Ste 30 title: Production Assistant jpegphoto: file:///c:/photos/Kevin.Brown.jpg