IBM Connections: Populando o Profiles através de um arquivo LDIF: Difference between revisions

From Wiki
No edit summary
 
(One intermediate revision by the same user not shown)
Line 13: Line 13:
No meu script em perl, eu fazia as seguintes atividades:
No meu script em perl, eu fazia as seguintes atividades:


# Percorria o arquivo CSV
# Percorro o arquivo CSV
# Tratava os dados que estavam no arquivo
# Trato os dados que estão no arquivo
# Buscava informações no LDAP
# Busco informações no LDAP  
# Gerava os dados do usuário no arquivo LDIF
# Gero os dados do usuário no arquivo LDIF


= =
Abaixo tem o fonte de geração do Arquivo


= Executando =


# perl convertCSVtoLDIF.pl ARQUIVO.csv


o arquivo gerado é o ARQUIVO.ldif.
= Arquivo ConvertCSVtoLDIF =
= Arquivo ConvertCSVtoLDIF =


  #!/usr/bin/perl
  #!/usr/bin/perl
  # Filename: ConvertCSVtoLDIF.pl
  # Filename: ConvertCSVtoLDIF.pl
# Description: makes $outputfile files from csv
#
# Usage: csvto$outputfile csvfile.csv
  #
  #
   
   
Line 81: Line 81:
         #$entry->dump;
         #$entry->dump;
     }
     }
     
     $ldap->unbind;
     $ldap->unbind;
   
     return $guid;
     return $guid;
  }
  }
Line 136: Line 134:
     return "$xDDD$xFone1$xFone2$xFone3";
     return "$xDDD$xFone1$xFone2$xFone3";
  }
  }
 
  sub getProperCase {
  sub getProperCase {
     my $aux01 = join(' ',map{ucfirst(lc("$_"))}split(/\s/,$_[0]));
     my $aux01 = join(' ',map{ucfirst(lc("$_"))}split(/\s/,$_[0]));
     my @auxArray = split(/ /, $aux01);
     my @auxArray = split(/ /, $aux01);
     my $aux02 = "";
     my $aux02 = "";
 
     foreach my $i (0 .. $#auxArray) {
     foreach my $i (0 .. $#auxArray) {
         $aux02 = $auxArray[$i];  
         $aux02 = $auxArray[$i];  
 
         if (($aux02 eq "Da")|| ($aux02 eq "De")|| ($aux02 eq "Do")) {
         if (($aux02 eq "Da")|| ($aux02 eq "De")|| ($aux02 eq "Do")) {
           $aux02 = lc($aux02);
           $aux02 = lc($aux02);
Line 161: Line 159:
     return $auxArray[0];
     return $auxArray[0];
  }
  }
 
  sub getSurName {
  sub getSurName {
     my @auxArray = split(/ /, lc($_[0]));
     my @auxArray = split(/ /, lc($_[0]));
Line 193: Line 191:
  ##########################
  ##########################
  sub ConvertCSVtoLDIF {
  sub ConvertCSVtoLDIF {
 
  my $inputfile = new FileHandle($csvFile) ||
  my $inputfile = new FileHandle($csvFile) ||
die "Can't open the import file!\n";
die "Can't open the import file!\n";
  my $outputfile = new FileHandle(">>$csvFile.ldif") ||
  my $outputfile = new FileHandle(">>$csvFile.ldif") ||
die "Can't create or open the output file!\n";
die "Can't create or open the output file!\n";
  my $outputfileNotOnLDAP = new FileHandle(">notOnLDAP.ldif") ||
  my $outputfileNotOnLDAP = new FileHandle(">notOnLDAP.ldif") ||
die "Can't create or open the output file!\n";
die "Can't create or open the output file!\n";
   
   
  my $line;
  my $line;
Line 207: Line 205:
       $linecount++;
       $linecount++;
       chomp $line;
       chomp $line;
 
       my $fUid;
       my $fUid;
       my $fNome;
       my $fNome;
Line 231: Line 229:
       my $uid = lc($fUid);
       my $uid = lc($fUid);
       my $guid = getIBMEntryUUID ($uid);
       my $guid = getIBMEntryUUID ($uid);
 
       if ($guid eq "" ) {
       if ($guid eq "" ) {
                 printf $outputfileNotOnLDAP ("%s","uid=$uid\n");
                 printf $outputfileNotOnLDAP ("%s","uid=$uid\n");

Latest revision as of 18:18, 5 January 2015

Em um cliente de IBM Connections precisei utilizar múltiplas fontes de dados de origem para popular os perfis dos usuários.

Essas fontes eram:

  • Arquivo CSV
  • LDAP

Ao invés de criar um script TDI para fazer isso preferi, gerar um arquivo LDIF e utilizar um script pronto que acompanha o Connections 4.5.

Os detalhes de como utilizar podem ser visto no artigo Creating a connector to synchronize Profiles data using LDIF.

No meu script em perl, eu fazia as seguintes atividades:

  1. Percorro o arquivo CSV
  2. Trato os dados que estão no arquivo
  3. Busco informações no LDAP
  4. Gero os dados do usuário no arquivo LDIF

Abaixo tem o fonte de geração do Arquivo

Executando

# perl convertCSVtoLDIF.pl ARQUIVO.csv

o arquivo gerado é o ARQUIVO.ldif.

Arquivo ConvertCSVtoLDIF

#!/usr/bin/perl
# Filename: ConvertCSVtoLDIF.pl
#

use FileHandle;
use strict;
use warnings; 
use Net::LDAPS;
use Net::LDAP;

my $csvFile = $ARGV[0];
my $ldapServer = "ldap.company.com.br:389";
my $ldapUser = "uid=ldapbinduser";
my $ldapPassword = "<CHANGE_HERE>";
my $searchBase = "ou=users,o=company,c=br";
my $ldaps = 0;

sub ltrim { my $s = shift; $s =~ s/^\s+//; return $s };
sub rtrim { my $s = shift; $s =~ s/\s+$//; return $s };
sub trim { my $s = shift; $s =~ s/^\s+|\s+$//g; return $s };
sub trimZeros { my $s = shift; $s =~ s/^0+//g; return $s };

sub getIBMEntryUUID {

  my $uid = $_[0];
  my $guid = "";
  my $ldap;
  my $mesg;
  my $attrs = [ 'cn','mail','ibm-entryuuid' ];

  if ($ldaps) {
       $ldap = Net::LDAPS->new($ldapServer, verify=>'none') or die "$@";
   }
   else {
       $ldap = Net::LDAP->new($ldapServer, verify=>'none') or die "$@";    
   }

   $mesg = $ldap->bind ($ldapUser, password=>"$ldapPassword");
    
   # $mesg->code && return undef;
   $mesg->code && return "";
   
   $mesg = $ldap->search(base => $searchBase, scope   => "sub", filter => "uid=$uid", attrs   =>  $attrs );
    
   # $mesg->code && return undef;
   $mesg->code && return "";

   my $entry = $mesg->shift_entry; 
   if ($entry)
   {
       $guid = $entry->get_value('ibm-entryuuid');
       #$entry->dump;
   }
   $ldap->unbind;
   return $guid;
}

sub getTimeZone {
   my $aux = ""; 
   my $estado = $_[0]; 

   if ( $estado eq "SP") {
     $aux = "America/Sao_Paulo";
   }
   if ( $estado eq "MG") {
     $aux = "America/Sao_Paulo";
   }
   return $aux;
}

sub getFone {

  my $xDDD = $_[0];
  my $xFone1 = $_[1];
  my $xFone2 = $_[2];
  my $xFone3 = $_[3];

  if ( $xDDD ne "") {
    if (substr($xDDD,0,1) eq "0") {
       $xDDD = substr($xDDD,1);
    }
    $xDDD = "($xDDD)"; 
  }
 
  if ( $xFone1 ne "") {
    if (substr($xFone1,0,1) eq "0") {
       $xFone1 = substr($xFone1,1);
    }
    $xFone1 = " $xFone1";
  }

  if ( $xFone2 ne "") {
    if (substr($xFone2,0,1) eq "0") {
       $xFone2 = substr($xFone2,1);
    }
    $xFone2 = " - $xFone2";
  }
  
  if ( $xFone3 ne "") {
    if (substr($xFone3,0,1) eq "0") {
       $xFone3 = substr($xFone3,1);
    }
    $xFone3 = " - $xFone3";
  }
   return "$xDDD$xFone1$xFone2$xFone3";
}

sub getProperCase {
   my $aux01 = join(' ',map{ucfirst(lc("$_"))}split(/\s/,$_[0]));
   my @auxArray = split(/ /, $aux01);
   my $aux02 = "";

   foreach my $i (0 .. $#auxArray) {
       $aux02 = $auxArray[$i]; 

       if (($aux02 eq "Da")|| ($aux02 eq "De")|| ($aux02 eq "Do")) {
          $aux02 = lc($aux02);
       } elsif (($aux02 eq "Das")|| ($aux02 eq "Des")|| ($aux02 eq "Dos")) {
          $aux02 = lc($aux02);        
       } elsif ($aux02 eq "E") {
          $aux02 = lc($aux02);        
       }
       $auxArray[$i] = $aux02; 
   }
   return join(' ',@auxArray);
}

sub getGivenName {
   my @auxArray = split(/ /, lc($_[0]));
   return $auxArray[0];
}

sub getSurName {
   my @auxArray = split(/ /, lc($_[0]));
   my $aux01 = "";
   my $aux02 = "";
   my $j = 0;

   foreach my $i (1..$#auxArray) {
       $j = $i-1;
       $aux01 = $auxArray[$j];
       $aux02 = $auxArray[$i];
       if ($aux02 eq "junior") {
          $aux02 = $aux01;
       } elsif ($aux02 eq "filho") {
          $aux02 = $aux01;
       } elsif ($aux02 eq "neto") {
          $aux02 = $aux01;
       }
   }
   return $aux02;
}

sub getSurNames {
   my @auxArray = split(/ /, lc($_[0]));

   $auxArray[0] = "";

   return trim(join(' ',@auxArray));
}

##########################
sub ConvertCSVtoLDIF {

my $inputfile = new FileHandle($csvFile) ||
	die "Can't open the import file!\n";
my $outputfile = new FileHandle(">>$csvFile.ldif") ||
	die "Can't create or open the output file!\n";
my $outputfileNotOnLDAP = new FileHandle(">notOnLDAP.ldif") ||
	die "Can't create or open the output file!\n";

my $line;
my $linecount = 0;
while ($line = <$inputfile>)
{
     $linecount++;
     chomp $line;

     my $fUid;
     my $fNome;
     my $fEmail;
     my $fUF;
     my $fCargo;
     my $fDDDTrabalho;
     my $fFone1Trabalho;
     my $fFone2Trabalho;
     my $fFone3Trabalho;
     my $fDDDResidencia;
     my $fFone1Residencia;
     my $fFone2Residencia;
     my $fFone3Residencia;
     my $fDDDCelular;
     my $fFoneCelular;
     my $fLinha1;
     my $fLinha2;

($fUid,$fNome,$fEmail,$fUF,$fCargo,$fDDDTrabalho,$fFone1Trabalho,$fFone2Trabalho,$fFone3Trabalho,$fDDDResidencia,
$fFone1Residencia,$fFone2Residencia,$fFone3Residencia,$fDDDCelular,$fFoneCelular,$fLinha1,$fLinha2) = split (";", $line);

     my $uid = lc($fUid);
     my $guid = getIBMEntryUUID ($uid);

     if ($guid eq "" ) {
                printf $outputfileNotOnLDAP ("%s","uid=$uid\n");
     } else {
             printf $outputfile ("%s","dn: uid=$uid,$searchBase\n");
             printf $outputfile ("%s","uid: $uid\n");
             printf $outputfile ("%s","ibm-entryUuid: $guid\n");

             my $sn = getProperCase($fNome);
             printf $outputfile ("%s","mail: $fEmail\n");

             printf $outputfile ("%s","sn: $sn\n");

             printf $outputfile ("%s","givenName: $uid\n");
             
             my $givenName = getGivenName($sn);
             printf $outputfile ("%s","givenName: $givenName\n");

             my $surName = getSurName($sn);
             printf $outputfile ("%s","surName: $surName\n");

             my $surNames = getSurNames($sn);
             printf $outputfile ("%s","surNames: $surNames\n");

             my $timezone = getTimeZone($fUF);
             printf $outputfile ("%s","timezone: $timezone\n");
             
             my $foneTrabalho = getFone($fDDDTrabalho,$fFone1Trabalho,$fFone2Trabalho,$fFone3Trabalho);
             if ($foneTrabalho ne "") {
                 printf $outputfile ("%s","foneTrabalho: $foneTrabalho\n");
             }

             my $foneResidencia = getFone($fDDDResidencia,$fFone1Residencia,$fFone2Residencia,$fFone3Residencia);
             if ($foneResidencia ne "") {
                printf $outputfile ("%s","foneResidencia: $foneResidencia\n");
             }

             my $foneCelular = getFone($fDDDCelular,$fFoneCelular,"","");
             if ($foneCelular ne "") {
                printf $outputfile ("%s","mobile: $foneCelular\n");
             }
             # Atributos Extendidos
             #printf $outputfile ("%s","info0:\n");
             if ($fLinha1 ne "") {
                printf $outputfile ("%s","info1: $fLinha1\n");
             }
             if ($fLinha2 ne "") {
                printf $outputfile ("%s","info2: $fLinha2\n");
             }             
             printf $outputfile ("%s","\n");
     }
 }
print "Registros: $linecount\n";
close $inputfile;
close $outputfile;
close $outputfileNotOnLDAP
}
#################################################### Main ####################################################
print "\nConvertCSVtoLDIF: start\n";
ConvertCSVtoLDIF();
print "\nConvertCSVtoLDIF: end\n";
exit (0);