Problemer med active directory
HejJeg 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.
