package Siebel::Integration::Com::BusObj 0.02;
use 5.006;
use Moose;
use namespace::autoclean;
use strict;
use warnings;
use Win32::OLE;
use Win32::OLE::Variant;
use Siebel::Integration::Com::BusComp;
has Error =>(
is => 'rw',
isa=>'Str',
default=> '',
);
has _ThickError =>(
is => 'rw',
);
has ConnectionType =>(
is => 'rw',
isa=>'Str',
required => 1,
);
has SApp =>(
is => 'rw',
required => 1,
);
has _BO =>(
is => 'rw',
);
has Name =>(
is => 'rw',
isa=>'Str',
required => 1,
);
sub BUILD{
my $self = shift;
if($self->ConnectionType eq 'Thin'){
$self->_BO($self->SApp->GetBusObject($self->Name)); return undef if $self->_chkErr("Can't create BO");
}else{
$self->_ThickError(Variant(VT_I2|VT_BYREF, 0));
$self->_BO($self->SApp->GetBusObject($self->Name, $self->_ThickError)); return undef if $self->_chkErr("Can't create BO");
}
}
sub GetBusComp{
my $self = shift;
my $BCName = shift;
return Siebel::Integration::Com::BusComp->new(BCName => $BCName, _BO => $self->_BO, ConnectionType => $self->ConnectionType, SApp => $self->SApp);
}
sub _chkErr{
my $self = shift;
my $what = shift;
my $ErrorCode;
if($self->ConnectionType eq 'Thin'){
$ErrorCode = $self->SApp->GetLastErrCode();
}else{
$ErrorCode = $self->_ThickError;
}
if(($ErrorCode // 0) != 0){
$self->Error("[$what] " . $ErrorCode . ': ' . $self->SApp->GetLastErrText());
return 1;
}
return 0;
}
__PACKAGE__->meta->make_immutable;
1;
__END__
=head1 NAME
Siebel::Integration::Com::BusObj - Abstraction of Siebel Business Object
=head1 SYNOPSIS
use Siebel::Integration::Com;
my $SiebelApp = Siebel::Integration::Com->new(
ConnectionType=>'Thick',
UserName=>$inputs{user},
PassWord=>$inputs{pass},
CFG=>$inputs{cfg},
DataSource=>$inputs{DataSource}
);
my $BO = $SiebelApp->GetBusObject('Employee');
if($BO->Error eq ''){
print "I got some BO\n";
}else{
die print 'Failed to get BO!';
}
#See Siebel::Integration::Com::BusComp for BC details
my $BC = $BO->GetBusComp('Employee');
if($BC->Error eq ''){
print "I have the Employee BC\n";
}else{
die print 'Failed to get Employee BC!';
}
=head1 DESCRIPTION
The Siebel::Integration::Com modules are designed to remove the different method calls and error checking between the COM Data Control and COM Data Server interfaces.
Changing between the two interfaces only requires a change in the parameters to Siebel::Integration::Com->new() rather than a rewrite of all calls.
Beyond just replicating the base functions of the interfaces it is hoped that additional methods will be added to these modules to extend the functionality provided by the Siebel COM framework.
All methods that have been exposed keep the same names so there is no additional learning curve, you can program in Perl using the same method names as eScript
=head2 Base Methods
=over 8
=item BO->GetBusComp(BusCompName)
Returns a Siebel::Integration::Com::BusComp object
Sets BusComp->Error if an error occurs
=item BO->Error()
Returns the error text for the last operation, returns '' if no error.
=item New(Name=>'BusObjName', ConnectionType=>'Thin/Thick', SApp=>Siebel::Integration::Com)
Only called internally from Siebel::Integration::Com->GetBusObject()
Returns a Siebel::Integration::Com::BusObj object
Sets BO->Error if an error occurs
=back
=head1 REQUIREMENTS
See L<Siebel::Integration::Com>
=head1 TESTING
See L<Siebel::Integration::Com>
=head1 SEE ALSO
The documentation for L<Siebel::Integration::Com> contains additional information
=head1 AUTHOR
Kyle Mathers, C<< <kyle.perl at mathersit.com> >>
=head1 COPYRIGHT
The same as L<Siebel::Integration::Com>
=head1 VERSION
Version 0.02 March 2013
=cut