Avatar billede coladrenge Nybegynder
18. april 2005 - 06:29 Der er 3 kommentarer og
1 løsning

Problemer med active directory

Hej

Jeg har problemer med at få PostOfficeBox frem - feltet retunere NULL når jeg selecter på det. Men jeg er 100% sikker på at feltet er udfyldt, da Windows export program til AD viser at der er noget i feltet.

________________--

unit uADUserInfo;

interface

Uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
  ActiveX,ActiveDs_TLB,ComObj, StdCtrls, Registry, dialogs;

Type

TADUserInfo = class(TComponent)
private
  oGroup : IADsContainer;
  oUser : IAdsUser;
  FDomain : string;
  FDivision: string;
  FCompanyName: string;
  FPhoneHome: string;
  FFirstName: string;
  FCompanyPhone: string;
  FTitel: string;
  FEmail: string;
  FCompanyAddress: string;
  FFullName: String;
  FPhoneWork: string;
  FFax: string;
  FLastName: String;
  FCompanyWeb : string;
  FPostal: string;
  FMobil : string;
  FKontor : string;
  FMobile: string;
  FManager: string;
  FHomePage: string;
  FNamePrefix: string;
  FMiddelName: String;
  FPager: string;
  FNameSuffix: string;
  FTelephoneHome: string;
  FOfficelocation: string;
  FDepartment: string;
  FPostalAdr: string;
  FPostalCode: string;
  FInitials: string;
  FSTreet: string;
  FCountry: string;
  FCity: string;
  FPostalBox: string;
  FState: string;

  FUserName : string;
  FUseOutLookUserName : boolean;

  function GetObject(const Name: string): IDispatch;
  Function GetCurrentUserName : string;
  Function GetDomainNC: Variant;
  procedure SetHomePage(const Value: string);
  procedure SetCity(const Value: string);
  procedure SetState(const Value: string);
public


  Constructor Create(AOwner : TComponent; UserName : string; UseOutlookUserNAme : boolean);

  Procedure GetUserInfo;

  Property FullName : String Read FFullName;
  Property FirstName : string Read FFirstName;
  Property LastName : String Read FLastName;
  Property Titel : string Read FTitel;
  property Division : string Read FDivision;
  property Department : string Read FDepartment;
  Property Email : string Read FEmail;
  Property Fax : string Read FFax;
  Property Manager : string Read FManager;
  Property NamePrefix : string Read FNamePrefix;
  Property NameSuffix : string Read FNameSuffix;
  Property OfficeLocations : string Read FKontor;
  Property MiddelName : String Read FMiddelName;
  Property TelephoneOffice : string Read FPhoneWork;
  Property TelephoneHome : string Read FTelephoneHome;
  Property TelephoneMobile : string read FMobile;
  Property TelephonePager : string read FPager;
  Property PostalAddress : string Read FPostalAdr;
  Property HomePage : string read FHomePage;
  Property Initials : string Read FInitials;
  Property Street : string Read FSTreet;
  Property CompanyName : string Read FCompanyName;
  Property CompanyPhone : string Read FCompanyPhone;
  Property CompanyAddress : string Read FCompanyAddress;
  Property CompanyWeb : string Read FCompanyWeb;
  Property PostalCode : string Read FPostalCode;
  Property Country : string Read FCountry;
  Property PostalBox : string Read FPostalBox;
  Property City : string read FCity;
  Property State : string read FState;
end;

implementation

{ TADUserInfo }

constructor TADUserInfo.Create(AOwner: TComponent; UserName : string; UseOutlookUserNAme : boolean);
begin
  Inherited Create(Aowner);
  self.FUserName := UserName;
  self.FUseOutLookUserName := UseOutLookUserName;
end;

procedure TADUserInfo.GetUserInfo;
{pre  : none
Post : if the user exists the information is retrieved from the active directory,
        if the user not exists all fields are empty}
Var
  i: Integer;
  objConnection: Variant;
  objCommand: Variant;
  objRecordSet: Variant;
begin
  objConnection:= CreateOleObject('ADODB.Connection');
  objConnection.Provider:='ADsDSOObject;';
  objConnection.Open;
  objCommand:= CreateOleObject('ADODB.Command');
  objCommand.ActiveConnection:= objConnection;
  if self.FUseOutLookUserName then
    objCommand.CommandText:= '<LDAP://'+GetDomainNC+'>;(&(objectCategory=User)(samAccountName='+self.FUserName+'));'
  else
    objCommand.CommandText:= '<LDAP://'+GetDomainNC+'>;(&(objectCategory=User)(samAccountName='+self.GetCurrentUserName+'));';
  objCommand.CommandText := objCommand.CommandText + ' SamAccountName,';
  objCommand.CommandText := objCommand.CommandText + ' department, ';
  objCommand.CommandText := objCommand.CommandText + ' division,';
  objCommand.CommandText := objCommand.CommandText + ' sn, ';
  objCommand.CommandText := objCommand.CommandText + ' TITLE, ';
  objCommand.CommandText := objCommand.CommandText + ' Telephonenumber, ';
  objCommand.CommandText := objCommand.CommandText + ' Mobile, ';
  objCommand.CommandText := objCommand.CommandText + ' DisplayName,';
  objCommand.CommandText := objCommand.CommandText + ' wwwHomePage,';
  objCommand.CommandText := objCommand.CommandText + ' Pager,';
  objCommand.CommandText := objCommand.CommandText + ' Initials,';
  objCommand.CommandText := objCommand.CommandText + ' COMPANY,';
  objCommand.CommandText := objCommand.CommandText +' Street,';

  objCommand.CommandText := objCommand.CommandText + ' physicaldeliveryOfficeName, ';
  objCommand.CommandText := objCommand.CommandText + ' PostalAddress,';
  objCommand.CommandText := objCommand.CommandText + ' PostalCode, ';

  objCommand.CommandText := objCommand.CommandText + ' MiddleNAme,';
  objCommand.CommandText := objCommand.CommandText + ' DistinguishedName,';
  objCommand.CommandText := objCommand.CommandText + ' Mail,';
  objCommand.CommandText := objCommand.CommandText + ' CN, ';

  objCommand.CommandText := objCommand.CommandText + ' facsimileTelephoneNumber,';
  objCommand.CommandText := objCommand.CommandText + ' sn, ';
  objCommand.CommandText := objCommand.CommandText + ' streetAddress, ';
  objCommand.CommandText := objCommand.CommandText + ' c, ';
  objCommand.CommandText := objCommand.CommandText + ' postOfficeBox, ';
  objCommand.CommandText := objCommand.CommandText + ' st, ';

  objCommand.CommandText := objCommand.CommandText + ' GivenName';

  objCommand.CommandText := objCommand.CommandText + ' ;subtree';



  objRecordSet:= objCommand.Execute;
  If objRecordset.RecordCount >0 Then
    Begin
      //Firstname
      if (objRecordSet.Fields['GIVENNAME'].Value <> NULL) then
        self.FFirstName := obJRecordSet.Fields['GIVENNAME'].Value
      else
        self.FFirstName := '';

      //Lastname
      if obJRecordSet.Fields['SN'].Value <> null then
        self.FLastName := obJRecordSet.Fields['SN'].Value
      else
        self.FLastName := '';

      //Fullname
      if (obJRecordSet.Fields['GIVENNAME'].Value +  obJRecordSet.Fields['SN'].Value) <> NULL then
          self.FFullName := obJRecordSet.Fields['GIVENNAME'].Value + ' ' + obJRecordSet.Fields['SN'].Value
      else
        self.FFullName := '';
      end;

      //Department
      if obJRecordSet.Fields['DEPARTMENT'].Value <> null then
        self.FDepartment := obJRecordSet.Fields['DEPARTMENT'].Value
      else
        self.FDepartment := '';




      //titel
      if obJRecordSet.Fields['TITLE'].Value <> null then
        self.FTitel := obJRecordSet.Fields['TITLE'].Value
      else
        self.FTitel := '';

      //Fax
      if obJRecordSet.Fields['facsimileTelephoneNumber'].Value <> null then
        self.FFax := obJRecordSet.Fields['facsimileTelephoneNumber'].Value
      else
        self.FFax := '';

      //Street
      if obJRecordSet.Fields['street'].Value <> NULL then
        self.FSTreet := obJRecordSet.Fields['street'].Value
      else
        self.FSTreet := '';


      //Division
      if obJRecordSet.Fields['DIVISION'].Value <> null then
        self.FDivision := obJRecordSet.Fields['DIVISION'].Value
      else
        self.FDivision := '';

      //MiddelName
      if obJRecordSet.Fields['MiddleNAme'].Value <> null then
        self.FMiddelName := obJRecordSet.Fields['MiddleNAme'].Value
      else
        self.FMiddelName := '';


      //PhoneHome
(*      if obJRecordSet.Fields['telephoneHome'].Value <> NULL then
        self.FPhoneHome := obJRecordSet.Fields['telephoneHome'].Value
      else
        self.FPhoneHome := '';*)

      if obJRecordSet.Fields['telephoneNumber'].Value <> NULL then
        self.FPhoneWork := obJRecordSet.Fields['telephoneNumber'].Value
      else
        self.FPhoneWork := '';

      if obJRecordSet.Fields['mobile'].Value <> NULL then
        self.FMobil := obJRecordSet.Fields['mobile'].Value
      else
        self.FMobil := '';

      if obJRecordSet.Fields['MAIL'].Value <> NULL then
        self.FEmail := obJRecordSet.Fields['MAIL'].Value
      else
        self.FEmail := '';

      if obJRecordSet.Fields['COMPANY'].Value <> NULL then
        self.FCompanyName := obJRecordSet.Fields['COMPANY'].Value
      else
        self.FCompanyName := '';

      if obJRecordSet.Fields['wwwHomePage'].Value <> NULL then
        self.FCompanyWeb := obJRecordSet.Fields['wwwHomePage'].Value
      else
        self.FCompanyWeb := '';

      if obJRecordSet.Fields['postalAddress'].Value <> NULL then
        self.FPostal := obJRecordSet.Fields['postalAddress'].Value
      else
        self.FPostal := '';


      if obJRecordSet.Fields['POSTALCODE'].Value <> NULL then
        self.FPostalCode := obJRecordSet.Fields['POSTALCODE'].Value
      else
        self.FPostalCode := '';

      if obJRecordSet.Fields['INITIALS'].Value <> NULL then
        self.FInitials := obJRecordSet.Fields['INITIALS'].Value
      else
        self.FInitials := '';


      if obJRecordSet.Fields['PAGER'].Value <> NULL then
        self.FPager := obJRecordSet.Fields['PAGER'].Value
      else
        self.FPager := '';

      if obJRecordSet.Fields['physicaldeliveryOfficeName'].Value <> NULL then
        self.FKontor  := obJRecordSet.Fields['physicaldeliveryOfficeName'].Value
      else
        self.FKontor := '';

      if obJRecordSet.Fields['StreetAddress'].Value <> NULL then
        self.FPostalAdr  := obJRecordSet.Fields['StreetAddress'].Value
      else
        self.FPostalAdr := '';

      if obJRecordSet.Fields['c'].Value <> NULL then
        self.FCountry  := obJRecordSet.Fields['c'].Value
      else
        self.FCountry := '';

      if obJRecordSet.Fields['postOfficeBox'].Value <> NULL then
        self.FPostalBox  := obJRecordSet.Fields['postOfficeBox'].Value
      else
        self.FPostalBox := '';

      if obJRecordSet.Fields['st'].Value <> NULL then
        self.FState  := obJRecordSet.Fields['st'].Value
      else
        self.FState := '';


  objConnection.Close;  {Close connection to active directory}
end;

function TADUserInfo.GetDomainNC: Variant;
{ pre : none
  post : the name of the active directory are retrieved}
Var
  iAdRootDSE: Variant;
Begin
  iAdRootDSE:= GetObject('LDAP://RootDSE');
  Result:= iAdRootDSE.Get('DefaultNamingContext');
End;

function TADUserInfo.GetObject(const Name: string): IDispatch;
var
  Moniker: IMoniker;
  Eaten: integer;
  BindContext: IBindCtx;
  Dispatch: IDispatch;
begin
  OleCheck(CreateBindCtx(0, BindContext));
  OleCheck(MkParseDisplayName(BindContext,
                              PWideChar(WideString(Name)),
                              Eaten,
                              Moniker));
  OleCheck(Moniker.BindToObject(BindContext, NIL, IDispatch,
            Dispatch));

  Result := Dispatch;
end;


function TADUserInfo.GetCurrentUserName: string;
{Current Windows user is retrived}
const
  cnMaxUserNameLen = 254;
var
  sUserName: string;
  dwUserNameLen: DWORD;
begin
  Result := '';
  dwUserNameLen := cnMaxUserNameLen - 1;
  SetLength(sUserName, cnMaxUserNameLen);
  GetUserName(PChar(sUserName), dwUserNameLen);
  SetLength(sUserName, dwUserNameLen);
  Result := Trim(sUserName);
end;

procedure TADUserInfo.SetHomePage(const Value: string);
begin
  FHomePage := Value;
end;

procedure TADUserInfo.SetCity(const Value: string);
begin
  FCity := Value;
end;

procedure TADUserInfo.SetState(const Value: string);
begin
  FState := Value;
end;

end.
Avatar billede coladrenge Nybegynder
18. april 2005 - 06:43 #1
Jeg syntes at Microsoft ikke har været ret god til at navngive deres felter.
Avatar billede stoney Nybegynder
18. april 2005 - 09:56 #2
skal postofficebox ikke være postalbox ?

Stoney
Avatar billede coladrenge Nybegynder
18. april 2005 - 22:09 #3
Hej

Det ved jeg faktisk ikke - men jeg vil prøve det når jeg kommer ind på kontoret imorgen tidligt - har dog ikke kunne finde et felt som hedder PostalBox i dokumentationen. Kender du noget til programmering mod Active Directory - jeg har nemlig en del spørgsmål
Avatar billede coladrenge Nybegynder
19. april 2005 - 23:05 #4
Hej

Jeg har fundet en løsning på problemet, det viste sig at data ligger gemt i en variant array og ikke kun som jeg troede i en variant.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester