view release on metacpan or search on metacpan
# Routines for grabbing the current error message "stack"
# by simply referring to the $ars_errstr scalar.
package ARS::ERRORSTR;
sub TIESCALAR {
bless {};
}
sub FETCH {
my($s, $i) = (undef, undef);
my(%mTypes) = ( 0 => "OK", 1 => "WARNING", 2 => "ERROR", 3 => "FATAL",
4 => "INTERNAL ERROR",
-1 => "TRACEBACK");
for($i = 0; $i < $ARS::ars_errhash{numItems}; $i++) {
# If debugging is not enabled, don't show traceback messages
if($ARS::DEBUGGING == 1) {
$s .= sprintf("[%s] %s (ARERR \#%d)",
$mTypes{@{$ARS::ars_errhash{messageType}}[$i]},
# ars_padEntryid(control, schema, entry-id)
#
# DESCRIPTION
# this routine will left-pad the entry-id with
# zeros out to the appropriate number of place (15 max)
# depending upon if your prefix your entry-id's with
# anything
#
# RETURNS
# a new scalar on success
# undef on error
sub ars_padEntryid {
my($c) = shift;
my($schema) = shift;
my($entry_id) = shift;
my($field);
# entry id field is field id #1
($field = ars_GetField($c, $schema, 1)) ||
return undef;
if( $field->{defaultVal} ){
return $field->{defaultVal}.("0"x($field->{limit}{maxLength}-length($field->{defaultVal})-length($entry_id))).$entry_id;
}else{
return ("0"x($field->{limit}{maxLength}-length($entry_id))).$entry_id;
}
}
# ROUTINE
# ars_decodeStatusHistory(field-value)
#
my ($pair, $ts, $un);
my (@retval);
foreach $pair (split(/\003/, $sval)) {
if($pair ne "") {
($ts, $un) = split(/\004/, $pair);
$retval[$enum]->{USER} = $un;
$retval[$enum]->{TIME} = $ts;
} else {
# no value for this enumeration
$retval[$enum]->{USER} = undef;
$retval[$enum]->{TIME} = undef;
}
$enum++;
}
return @retval;
}
#define AR_DEFN_DIARY_SEP '\03' /* diary items separator */
#define AR_DEFN_DIARY_COMMA '\04' /* char between date/user/text */
# ars_EncodeDiary(diaryhash1, diaryhash2, ...)
#
# DESCRIPTION
# given a list of diary hashs (see ars_GetEntry),
# encode them into an ars-internal diary string. this can
# then be fed into ars_MergeEntry() in order to alter the contents
# of an existing diary entry.
#
# RETURNS
# an encoded diary string (scalar) on success
# undef on failure
sub ars_EncodeDiary {
my ($diary_string) = undef;
my ($entry);
foreach $entry (@_) {
$diary_string .= $entry->{timestamp}.pack("c",4).$entry->{user}.pack("c",4).$entry->{value};
$diary_string .= pack("c",3) if ($diary_string);
}
return $diary_string;
}
sub insertValueForCurrentTransaction {
my ($c, $s, $q) = (shift, shift, shift);
#include "support.h"
#include "supportrev.h"
#include "supportrev_generated.h"
#if AR_EXPORT_VERSION < 3
#define AR_LIST_SCHEMA_ALL 1
#endif
#if defined(ARSPERL_UNDEF_MALLOC) && defined(malloc)
#undef malloc
#undef calloc
#undef realloc
#undef free
#endif
MODULE = ARS PACKAGE = ARS PREFIX = ARS
PROTOTYPES: ENABLE
int
isa_int(...)
CODE:
h = (HV* ) SvRV((SV*) in);
if( ! SvTRUE(hv_scalar(h)) ){
RETVAL = qual;
goto ars_qualifier_ptr_end;
}
h_dummy = newHV();
SvREFCNT_inc( in );
hv_store( h_dummy, "_", 1, in, 0 );
rv += rev_ARQualifierStruct( ctrl, h_dummy, "_", qual );
hv_undef( h_dummy );
if( rv == 0 ){
RETVAL = qual;
}else{
ARError_add( AR_RETURN_ERROR, AP_ERR_PREREVFAIL );
RETVAL = NULL;
FreeARQualifierStruct(qual, TRUE);
}
ars_qualifier_ptr_end:;
}
if( hv_exists(h,"customDateFormat",16) ){
strncpy( ctrl->localeInfo.customDateFormat, SvPV_nolen( *(hv_fetch(h,"customDateFormat",16,0)) ), AR_MAX_FORMAT_SIZE );
}
if( hv_exists(h,"customTimeFormat",16) ){
strncpy( ctrl->localeInfo.customTimeFormat, SvPV_nolen( *(hv_fetch(h,"customTimeFormat",16,0)) ), AR_MAX_FORMAT_SIZE );
}
if( hv_exists(h,"separators",10) ){
strncpy( ctrl->localeInfo.separators, SvPV_nolen( *(hv_fetch(h,"separators",10,0)) ), AR_MAX_LANG_SIZE );
}
hv_undef( h );
}
#endif
#if AR_EXPORT_VERSION >= 7L
ctrl->authString[0] = 0;
if ( CVLD(authString) ) {
strncpy(ctrl->authString, authString, AR_MAX_NAME_SIZE);
}
#endif
#if AR_EXPORT_VERSION >= 4
/* call ARInitialization */
}
/* printf( "--------------------\n" ); fflush(stdout); */ /* _DEBUG_ */
ret = ARCreateEntry(ctrl, schema, &fieldList, entryId, &status);
#ifdef PROFILE
((ars_ctrl *)ctrl)->queries++;
#endif
if (! ARError( ret, status)) rv = 1;
create_entry_end:;
if(rv == 0) {
RETVAL = newSVsv(&PL_sv_undef);
} else {
RETVAL = newSVpv( entryId, strlen(entryId) );
}
AP_FREE(fieldList.fieldValueList);
if( getFieldIds.internalIdList != NULL ) AP_FREE(getFieldIds.internalIdList);
}
}
OUTPUT:
RETVAL
loc.u.buf.buffer,
loc.u.buf.bufSize)));
#else
XPUSHs(sv_2mortal(newSVpvn(
loc.u.buf.buffer,
loc.u.buf.bufSize)));
#endif
else
XPUSHs(sv_2mortal(newSViv(1)));
} else
XPUSHs(&PL_sv_undef);
if (entryList.entryIdList) AP_FREE(entryList.entryIdList);
switch (loc.locType)
{
case AR_LOC_FILENAME:
AP_FREE(loc.u.filename);
break;
case AR_LOC_BUFFER:
FreeARLocStruct(&loc, FALSE);
break;
}
#else /* pre ARS-4.0 */
(void) ARError_add(AR_RETURN_ERROR, AP_ERR_DEPRECATED,
"ars_GetEntryBLOB() is only available > ARS4.x");
XPUSHs(&PL_sv_undef);
#endif
get_entryblob_end:;
}
void
ars_GetEntry(ctrl,schema,entry_id,...)
ARControlStruct * ctrl
char * schema
char * entry_id
PPCODE:
count = 0;
if( items >= 4 ){
SV* st3 = ST(3);
if( SvROK(st3) && SvTYPE(SvRV(st3)) == SVt_PVAV ){
HV *h_dummy = newHV();
SvREFCNT_inc( st3 );
hv_store( h_dummy, "_", 1, st3, 0 );
rv += rev_ARContainerOwnerObjList( ctrl, h_dummy, "_", &ownerObjList );
hv_undef( h_dummy );
}else{
clist[count++] = SvIV(st3);
}
}
for(i = 4 ; i < items ; ++i){
clist[count++] = SvIV(ST(i));
}
containerTypes.numItems = count;
containerTypes.type = clist;
hv_store(menuDef, "server", strlen("server") ,
newSVpv(menuDefn.u.menuQuery.server, 0), 0);
#if AR_EXPORT_VERSION >= 6
{
int lfn = 0;
AV *a = newAV();
while (lfn < AR_MAX_LEVELS_DYNAMIC_MENU) {
if ( menuDefn.u.menuQuery.labelField[lfn] ) {
av_push(a, newSViv(menuDefn.u.menuQuery.labelField[lfn]));
} else {
av_push(a, newSVsv(&PL_sv_undef));
}
lfn++;
}
hv_store(menuDef, "labelField", strlen("labelField"),
newRV_noinc((SV *) a), 0);
}
#else
{
AV *a = newAV();
av_push(a, newSViv(menuDefn.u.menuQuery.labelField));
hv_store(menuDef, "sqlCommand", strlen("sqlCommand") ,
newSVpv(menuDefn.u.menuSQL.sqlCommand, 0), 0);
#if AR_EXPORT_VERSION >= 6
{
int lfn = 0;
AV *a = newAV();
while (lfn < AR_MAX_LEVELS_DYNAMIC_MENU) {
if ( menuDefn.u.menuSQL.labelIndex[lfn] ) {
av_push(a, newSViv(menuDefn.u.menuSQL.labelIndex[lfn]));
} else {
av_push(a, newSVsv(&PL_sv_undef));
}
lfn++;
}
hv_store(menuDef, "labelIndex", strlen("labelIndex"),
newRV_noinc((SV *) a), 0);
}
#else
hv_store(menuDef, "labelIndex", strlen("labelIndex") ,
newSViv(menuDefn.u.menuSQL.labelIndex), 0);
#endif
ars_ExpandCharMenu2(ctrl,name,qual=NULL)
ARControlStruct * ctrl
char * name
ARQualifierStruct * qual
CODE:
{
ARCharMenuStruct menuDefn;
ARStatusList status;
int ret;
RETVAL = &PL_sv_undef;
(void) ARError_reset();
Zero(&menuDefn, 1, ARCharMenuStruct);
Zero(&status, 1,ARStatusList);
DBG( ("-> ARGetCharMenu\n") );
ret = ARGetCharMenu(ctrl, name, NULL, &menuDefn,
NULL, NULL, NULL, NULL, NULL,
#if AR_EXPORT_VERSION >= 5
NULL,
#endif
&status);
#if AR_EXPORT_VERSION >= 8L
ARWorkflowLockStruct workflowLockStruct;
#endif
(void) ARError_reset();
Zero(&status, 1, ARStatusList);
Zero(&structItems, 1, ARStructItemList);
#if AR_EXPORT_VERSION >= 8L
Zero(&workflowLockStruct, 1, ARWorkflowLockStruct);
#endif
RETVAL = &PL_sv_undef;
if ( (items % 2 == 0) || (c < 1) ) {
(void) ARError_add( AR_RETURN_ERROR, AP_ERR_BAD_ARGS);
ok = 0;
} else {
structItems.numItems = c;
AMALLOCNN(structItems.structItemList, c, ARStructItemStruct);
for (i = 0 ; i < c ; i++) {
unsigned int et = 0;
a = i * 2 + 3;
et = caseLookUpTypeNumber((TypeMapStruct *)
Zero(&nameList, 1, ARNameList);
Zero(&status, 1,ARStatusList);
if( schema == NULL ){
/* do nothing */
}else if( SvROK(schema) && SvTYPE(SvRV(schema)) == SVt_PVAV ){
HV *h_dummy = newHV();
SvREFCNT_inc( schema );
hv_store( h_dummy, "_", 1, schema, 0 );
rv += rev_ARNameList( ctrl, h_dummy, "_", &schemaList );
hv_undef( h_dummy );
schemaListPtr = &schemaList;
}else if( SvPOK(schema) ){
STRLEN len = 0;
char *str = SvPV( schema, len );
if( len > 0 ){
schemaList.numItems = 1;
schemaList.nameList = (ARNameType*) MALLOCNN(sizeof(ARNameType) * 1);
strncpy( schemaList.nameList[0], str, AR_MAX_NAME_SIZE );
}
schemaListPtr = &schemaList;
/* sv_2mortal( (SV *)fieldValue_hash ); */
for (field=0; field < fieldList.valueListList[i].numItems; field++) {
sprintf(intstr,"%ld",fieldList.valueListList[i].fieldValueList[field].fieldId);
hv_store( fieldValue_hash,
intstr, strlen(intstr),
perl_ARValueStruct(ctrl,&fieldList.valueListList[i].fieldValueList[field].value),
0 );
}
XPUSHs( sv_2mortal( newRV_noinc((SV *)fieldValue_hash) ) );
} else {
XPUSHs(&PL_sv_undef);
}
}
get_mentry_cleanup:;
FreeARInternalIdList(&idList, FALSE);
FreeAREntryIdListList(&entryList, FALSE);
FreeARFieldValueListList(&fieldList, FALSE);
FreeARBooleanList(&existList, FALSE);
}
hv_store( fieldValue_hash,
keyStr, strlen(keyStr),
perl_ARValueStruct(ctrl, &(valPtr->value)),
0 );
}
XPUSHs( sv_2mortal( newRV_noinc((SV *)fieldValue_hash) ) );
}
#endif
getlistentry_multischema_end:
hv_undef( hDummy );
#if AR_CURRENT_API_VERSION >= 17
FreeARMultiSchemaFieldFuncList( &getListFields, FALSE );
FreeARMultiSchemaFieldFuncValueListList( &entryFieldValueList, FALSE );
#else
FreeARMultiSchemaFieldIdList( &getListFields, FALSE );
FreeARMultiSchemaFieldValueListList( &entryFieldValueList, FALSE );
#endif
FreeARMultiSchemaSortList( &sortList, FALSE );
#else /* prior to ARS 7.5 */
(void) ARError_reset();
unsigned int i = 0;
while(i < userList.numItems) {
XPUSHs(sv_2mortal(newSVpvn(userList.nameList[i++],
AR_MAX_NAME_SIZE)));
}
}
}
#else
(void) ARError_add(AR_RETURN_ERROR, AP_ERR_DEPRECATED,
"GetListAlertUser() is only available in ARSystem >= 5.0");
XPUSHs(sv_2mortal(&PL_sv_undef));
#endif
}
SV *
ars_GetAlertCount(ctrl,qualifier=NULL)
ARControlStruct * ctrl
ARQualifierStruct * qualifier
CODE:
{
ARStatusList status;
int ret = 0;
unsigned int count = 0;
RETVAL=newSVsv(&PL_sv_undef);
#if AR_EXPORT_VERSION >= 6
(void) ARError_reset();
Zero(&status, 1, ARStatusList);
ret = ARGetAlertCount(ctrl, qualifier, &count,
&status);
if( !ARError(ret, status) ) {
/* RETVAL=sv_2mortal(newSViv(count)); */
RETVAL = newSViv(count);
}
#else
ARNameType sourceTag
ARServerNameType serverName
ARNameType formName
char * objectId
CODE:
{
ARStatusList status;
int ret = 0;
AREntryIdType entryId;
RETVAL=newSVsv(&PL_sv_undef);
(void) ARError_reset();
Zero(&status, 1, ARStatusList);
Zero(&entryId, 1, AREntryIdType);
#if AR_EXPORT_VERSION >= 6
ret = ARCreateAlertEvent(ctrl,
user,
alertText,
priority,
sourceTag,
serverName,
Zero(&status, 1, ARStatusList);
Zero(&varValue, 1, ARValueStruct);
ret = ARGetSessionConfiguration(ctrl, variableId, &varValue, &status);
if( !ARError(ret, status) ) {
RETVAL = perl_ARValueStruct(ctrl, &varValue);
}
else
{
RETVAL = &PL_sv_undef;
}
FreeARValueStruct(&varValue, FALSE);
#else /* < 5.0 */
XPUSHs(sv_2mortal(newSViv(0))); /* ERR */
(void) ARError_add( AR_RETURN_ERROR, AP_ERR_DEPRECATED,
"GetSessionConfiguration() is only available in ARSystem >= 5.0");
#endif
}
OUTPUT:
RETVAL
ARS/CodeTemplate.pm view on Meta::CPAN
}
open( OUTFILE, ">$outfile" ) or die "$outfile: $!\n";
print OUTFILE get_header( $outfile, $0 ) if $opt{'o'};
print OUTFILE $text;
close OUTFILE;
}
sub include {
my( $file ) = @_;
local $/ = undef;
local *FILE;
open( FILE, $file ) or do {
warn "Cannot open \"$file\": $!\n";
return undef;
};
my $data = <FILE>;
close FILE;
return $data;
}
sub modByRegex {
package main;
my( $val, @regex ) = @_;
foreach my $regex ( @regex ){
ARS/OOform.pm view on Meta::CPAN
sub getEnumValues {
my ($this) = shift;
my ($field) = ARS::rearrange([FIELD], @_);
if(ref($this->{'fieldEnumValues'}->{$field}) eq "ARRAY") {
return @{$this->{'fieldEnumValues'}->{$field}};
}
$this->{'connection'}->pushMessage(&ARS::AR_RETURN_ERROR,
81006,
"field $field is not an enumeration field.");
$this->{'connection'}->tryCatch();
return undef;
}
# query(-query => "qualifier", -maxhits => 100, -firstretrieve => 0)
sub query {
my ($this) = shift;
my ($query, $maxhits, $firstretr) = ARS::rearrange([QUERY,MAXHITS,FIRSTRETRIEVE], @_);
$query = "(1 = 1)" unless defined($query);
$maxhits = 0 unless defined($maxhits);
$firstretr = 0 unless defined($firstretr);
ARS/OOform.pm view on Meta::CPAN
print "internal2value($f, $v) type=$t\n"
if $this->{'connection'}->{'.debug'};
# translate an enumeration value into a text value
if($t eq "enum") {
# if the field doesnt exist in our cache, or if the
# enumeration value exceeds the known list of enumerations,
# barf.
return undef unless defined $v;
if(!defined($this->{'fieldEnumValues'}->{$f}) ||
(!exists($this->{'fieldEnumValues'}->{$f}->{$v})) ) {
$this->{'connection'}->pushMessage(&ARS::AR_RETURN_ERROR,
81004,
"[1] unable to translate enumeration value for field '$f'"
);
}
return $this->{'fieldEnumValues'}->{$f}->{$v}
}
ARS/OOmsgs.pm view on Meta::CPAN
push @{$ARS::ars_errhash{messageType}}, $type;
push @{$ARS::ars_errhash{messageNum}}, $num;
push @{$ARS::ars_errhash{messageText}}, $text;
$this->tryCatch();
}
sub messages {
my(%mTypes) = ( 0 => "OK", 1 => "WARNING", 2 => "ERROR", 3 => "FATAL",
4 => "INTERNAL ERROR",
-1 => "TRACEBACK");
my ($this, $type, $str) = (shift, shift, undef);
return $ars_errstr if(!defined($type));
for(my $i = 0; $i < $ARS::ars_errhash{numItems}; $i++) {
if(@{$ARS::ars_errhash{'messageType'}}[$i] == $type) {
$s .= sprintf("[%s] %s (ARERR \#%d)",
$mTypes{@{$ARS::ars_errhash{messageType}}[$i]},
@{$ARS::ars_errhash{messageText}}[$i],
@{$ARS::ars_errhash{messageNum}}[$i]);
$s .= "\n" if($i < $ARS::ars_errhash{numItems}-1);
ARS/OOsup.pm view on Meta::CPAN
my ($server, $username, $password, $catch, $ctrl, $dbg, $tcpport) =
rearrange([SERVER,USERNAME,PASSWORD,CATCH,CTRL,DEBUG,TCPPORT],@p);
# should the OO layer emit debugging information?
$self->{'.debug'} = 0;
$self->{'.debug'} = 1 if(defined($dbg));
$self->initCatch();
# what error handlers should be called automatically by the OO layer?
# if a handler is 'undef' then the OO layer will ignore that type of
# exception (warning, error or fatal). it is then upto the user to
# check ->hasErrors(), etc.
# this should be a hash ref.
if(defined($catch) && ref($catch) ne "HASH") {
$self->pushMessage(&ARS::AR_RETURN_ERROR,
81000,
"catch parameter should be a HASH reference. (you gave me ".ref($catch)." reference)"
);
}
ARS/OOsup.pm view on Meta::CPAN
my $this = shift;
my ($changedSince, $schemaType, $name) =
rearrange([CHANGEDSINCE,SCHEMATYPE,NAME],@_);
$changedSince = 0 unless defined($changedSince);
$schemaType = ARS::AR_LIST_SCHEMA_ALL unless defined($schemaType);
$name = "" unless defined($name);
return ars_GetListSchema($this->{'ctrl'},
$changedSince,
$schemaType, undef,
$name);
}
sub openForm {
my $this = shift;
my($form, $vui) = rearrange([FORM,VUI], @_);
$this->pushMessage(&ARS::AR_RETURN_ERROR,
81000,
"usage: c->openForm(-form => name, -vui => vui)\nform parameter is required.")
(TS) fixed exsi.pl enumeration gap problem
(TS) added lengthUnits,storageOptionForCLOB attributes to ARCharLimitsStruct,ARDisplayLimits
(TS) fixed ars_GetServerInfo() keys 325-332 problem
(TS) modifications for AR 7.6.3 API
(TS) ars_GetEntryBLOB bugfix by Conny Martin
(TS) fixed "hv_fetch error" problem in case of undefined ARValueStruct
(TS) fixed SignalTypeMap problem
(TS) package directory reorganization/cleanup
(TS) additional ars_Login parameters by Conny Martin
(TS) implemented ars_GetList/Get/Create/Set/DeleteImage
(TS) fixed incorrect AR_ARITH_OP_NEGATE handling in rev_ARArithOpStruct
(TS) fixed ars_GetAlertCount
(MB) removed legacy ars_NT Notifier and ars_AdminExtension calls
(MB) ! added ars_VerifyUser implementation by Thilo Stapff
(MB) ! changed ars_APIVersion to use AR_CURRENT_API_VERSION rather than AR_EXPORT_VERSION
(MB) fixed ars_GetActiveLink, ars_GetFilter, ars_GetEscalation, ars_GetField so they
return undef on failure.
(JCM) buffer overflow in perl_BuildEntryList
(JCM) malloc-on-windows patch by John Unsworth
(TS) fixed memory leak in ars_Get... functions (added "sv_2mortal( (SV*) RETVAL )")
(TS) bugfix in dup_Value (support.c) for API version <= 5.0.1
(TS) changed enum limits processing in perl_ARFieldLimitStruct for API version <= 5.0.1
Released: 11/11/96 Version: 1.31
(JCM) minor stuff: added an ifndef in the GetCharMenu routine
for ars 2.0 users. 2.0 doesnt support SQL menu constructions.
Released: 11/11/96 Version: 1.3
(JWM) undef works in setEntry now.
(JWM) added ars_Import to complement ars_Export
(JCM) Profiling code added to keep track of number of
queries made.
(JWM) Field caching code added to make some of the functions
more efficient.
(JCM) New functions: ars_GetFilter(), ars_GetCharMenu(),
Makefile.PL view on Meta::CPAN
# the 3.2 release.
#
# -D_WIN32
#
# If you are compiling ARSperl under windows, define this
# and /don't/ define PROFILE.
#
# -DSKIP_SV_ISA (not automatically set)
#
# If you get errors during compilation/runtime similar to
# "undefined symbol: sv_isa" then add this define.
'DEFINE' => ${AUTODEFINES},
# 'DEFINE' => '-D_WIN32 ', # note: win32 -> no -DPROFILE
# if you have trouble under solaris when linking (bfd assertion
# failures) try uncommenting the following:
#
# 'LD' => "/usr/ccs/bin/ld",
Makefile.PL view on Meta::CPAN
# c:\Program Files\ARSystem6.0.1\Arserver\Api
# as its first arg
#
sub findAPIVersion {
my $path_to_api_dir = shift;
my $ar_fname = join('/', $path_to_api_dir, 'include', 'ar.h');
open ($ar_fh, '<'. $ar_fname) or
die "couldn't open ar.h include file from: \"$ar_fname\": $!\n";
my $api_version = undef;
# the line we want to parse looks like:
#
##define AR_CURRENT_API_VERSION 10 /* current api version */
while (<$ar_fh>) {
chomp;
if (m/^\s*#define\s*AR_CURRENT_API_VERSION\s*(\d+)/) {
$api_version = $1;
last;
}
system (what? poor documentation? not us!! :)
The GetServerStatistics function was added to provide a simpler method
for checking server health. I might provide a server analysis tool
built around this function in a future release.
Joel added a cache to the internal GetField routine. This should cut
down on the number of queries made by some of the functions like
GetFieldTable and such.
In addition, doing ars_SetEntry($ctrl, ..., $fieldId, undef) will now
correctly set a field to $NULL$
1.0 Beta User Notes
-------------------
o The library and extension seem fairly stable. However, bugs and
memory leaks might still occur. We've only been able to build it
under Solaris 2.x (4 and 5 to be specific) because that is what we
run ARS under. Users who attempt builds on other systems and are
successful should submit diffs back to us so that they can be
changes.dat view on Meta::CPAN
JL automatic API-Version detection in Makefile.PL
JL dropped support to compile ARSperl using ARAPI below version 4.5
JL small bugfixes
released=08/01/2011 version=1.93
TS fixed exsi.pl enumeration gap problem
TS added lengthUnits,storageOptionForCLOB attributes to ARCharLimitsStruct,ARDisplayLimits
TS fixed ars_GetServerInfo() keys 325-332 problem
TS modifications for AR 7.6.3 API
TS ars_GetEntryBLOB bugfix by Conny Martin
TS fixed "hv_fetch error" problem in case of undefined ARValueStruct
TS fixed SignalTypeMap problem
TS package directory reorganization/cleanup
TS additional ars_Login parameters by Conny Martin
TS implemented ars_GetList/Get/Create/Set/DeleteImage
TS fixed incorrect AR_ARITH_OP_NEGATE handling in rev_ARArithOpStruct
TS fixed wrong operand evaluation for AR_ARITH_OP_NEGATE in perl_ARArithOpStruct
TS fixed ars_SetServerInfo() memory violation in case of more than one key/value pair
TS ars_GetFieldTable performance improvement by using ARGetMultipleFields
TS removed unnecessary second invocation of ARGetField in ars_GetField
TS code cleanup (#ifdef statements) in ARGetFieldCached, ars_GetField, ars_GetFieldByName
changes.dat view on Meta::CPAN
released=05/06/2008 version=1.91
TS fixed ars_padEntryid to work correctly if entry ID prefix is defined
TS replaced malloc-on-windows patch by UNDEF_PERL_MALLOC compilation option in Makefile.PL
TS fixed pointer initialization error in ars_SetVUI
TS modified ars_Create/Get/SetFilter for API 7.1
TS fixed ars_GetAlertCount
MB removed legacy ars_NT Notifier and ars_AdminExtension calls
!MB added ars_VerifyUser implementation by Thilo Stapff
!MB changed ars_APIVersion to use AR_CURRENT_API_VERSION rather than AR_EXPORT_VERSION
MB fixed ars_GetActiveLink, ars_GetFilter, ars_GetEscalation, ars_GetField so they
return undef on failure.
JCM buffer overflow in perl_BuildEntryList
JCM malloc-on-windows patch by John Unsworth
TS fixed memory leak in ars_Get... functions (added "sv_2mortal( (SV*) RETVAL )")
TS bugfix in dup_Value (support.c) for API version <= 5.0.1
TS changed enum limits processing in perl_ARFieldLimitStruct for API version <= 5.0.1
TS updated MANIFEST file
TS replaced strdup() by arsperl_strdup() for win32 to fix problems with VisualStudio8
TS changed type of "owner" attribute: ARNameType -> ARAccessNameType
TS corrected function signature for ars_SetVUI, ars_CreateSchema
TS fixed memory leak in sv_to_ARValue (support.c)
changes.dat view on Meta::CPAN
JWM bug fixes for 1.32beta
released=02/10/97 version=1.32beta
JWM 3.0 integration
released=11/11/96 version=1.31
JCM minor stuff: added an ifndef in the GetCharMenu routine
for ars 2.0 users. 2.0 doesnt support SQL menu constructions.
released=11/11/96 version=1.3
JWM undef works in setEntry now.
JWM added ars_Import to complement ars_Export
JCM Profiling code added to keep track of number of
queries made.
JWM Field caching code added to make some of the functions
more efficient.
JCM New functions: ars_GetFilter(), ars_GetCharMenu(),
ars_GetServerStatistics
JWM Internal GetField call now caches results to minimize
number of queries made.
JCM Examples of new functions.
example/Dump_Users_OO.pl view on Meta::CPAN
print "i caught an exception:\ntype=$type msg=$msg\ntraceback:\n$trace\n";
exit;
}
my $LoginNameField = "Login name"; # earlier versions of ars used "Login Name"
my $connection = new ARS (-server => shift,
-username => shift,
-password => shift,
-catch => { ARS::AR_RETURN_ERROR => "main::mycatch" },
-ctrl => undef,
-debug => undef);
print "Opening \"User\" form ..\n";
my ($u) = $connection->openForm(-form => "User");
$u->setSort($LoginNameField, &ARS::AR_SORT_ASCENDING);
my @entries = $u->query(); # empty query means "get everything"
printf("%-30s %-45s\n", $LoginNameField, "Full name");
example/GetFilter.pl view on Meta::CPAN
foreach my $s (@{$finfo->{'schemaList'}}) {
print "\"$s\" ";
}
print "\n";
}
print "opSet : ".Decode_opSetMask($finfo->{"opSet"})."\n";
print "Enable : ".$finfo->{"enable"}."\n";
if(defined($finfo->{'query'})) {
$dq = ars_perl_qualifier($ctrl, $finfo->{"query"});
$dq = undef if(isempty($dq));
} else {
$dq = undef;
}
if(defined($finfo->{'schema'})) {
if(defined($dq)) {
$qualtext = ars_Decode_QualHash($ctrl, $finfo->{"schema"}, $dq);
print "Query : ".$qualtext."\n";
} else {
print "Query : [none defined]\n";
}
}
example/Show_ALink.pl view on Meta::CPAN
printl 2, "y coord: ".$display->{y}."\n";
printl 2, "Visible?: ".$display->{option}."\n";
printl 2, "Button Label: ".$display->{label}."\n";
printl 2, "Type: ".$display->{type}."\n";
}
print "\n";
#print "Qualification: ".$a->{query}."\n";
$dq = ars_perl_qualifier($ctrl, $a->{query});
$dq = undef if(isempty($dq));
if(defined($dq)) {
if(defined($a->{'schema'})) {
$dq_text = ars_Decode_QualHash($ctrl, $a->{schema}, $dq);
print " Qual Text: $dq_text\n";
}
elsif(defined($a->{'schemaList'})) {
foreach my $s (@{$a->{'schemaList'}}) {
$dq_text = ars_Decode_QualHash($ctrl, $s, $dq);
print " Qual Text (decoded against \"$s\": $dq_text\n";
example/WhoUsesIt.pl view on Meta::CPAN
$pname =~ s/.*\///g;
Getopts('s:a:f:m:e:p:M:Dhv');
$debug = $opt_D;
($server, $username, $password) = @ARGV;
$SCHEMA = defined($opt_s)?$opt_s:".*";
if($debug) {
print STDERR "a: ".(defined($opt_a)?"$opt_a":"undef")."\n";
print STDERR "f: ".(defined($opt_f)?"$opt_f":"undef")."\n";
print STDERR "m: ".(defined($opt_m)?"$opt_m":"undef")."\n";
print STDERR "e: ".(defined($opt_e)?"$opt_e":"undef")."\n";
print STDERR "p: ".(defined($opt_p)?"$opt_p":"undef")."\n";
print STDERR "s: ".(defined($opt_p)?"$opt_s":"undef")."\n";
print STDERR "M: ".(defined($opt_M)?"$opt_M":"undef")."\n";
print STDERR "d: ".(defined($opt_d)?"defined":"undef")."\n";
print STDERR "v: ".(defined($opt_v)?"defined":"undef")."\n";
print STDERR "h: ".(defined($opt_h)?"defined":"undef")."\n";
}
if((!defined($opt_a) &&
!defined($opt_f) &&
!defined($opt_m) &&
!defined($opt_p) &&
!defined($opt_M) &&
!defined($opt_e)) ||
defined($opt_h)) {
Usage();
example/ars_GetEntryBLOB.pl view on Meta::CPAN
#sub AR_LOC_FILENAME { 1;}
#sub AR_LOC_BUFFER { 2;}
sub ra {
my $fid = shift;
print "\t[Retrieving attachment.]\n";
# file: $a = 0 || 1
# buff: $a = undef || attachment
unlink('/tmp/attachtest', '/tmp/attachtest2');
ars_GetEntryBLOB($c, $schema, $entry,
$fid,
ARS::AR_LOC_FILENAME,
"/tmp/attachtest") ||
die ("GetEntryBLOB: $ars_errstr");
example/ars_GetListEntryWithMultiSchemaFields.pl view on Meta::CPAN
my $ctrl = ars_Login( $server, $user, $passwd, '', '', $tcpport );
die qq/ars_Login($server,$user,'***',$tcpport): $ars_errstr\n/ if ! $ctrl;
die qq/This example works for the ARS 7.5 API only\n/ unless ars_APIVersion() == 14;
my $aSchema = [{
queryFromAlias => 'U',
schemaName => 'User',
joinType => 0,
joinQual => undef,
}, {
queryFromAlias => 'G',
schemaName => 'Group',
joinType => 0,
joinQual => {
oper => 'rel_op',
rel_op => {
oper => 'like',
left => {
fieldId => 'U.104',
example/ars_GetListEntryWithMultiSchemaFields.pl view on Meta::CPAN
# },
# },
# },
# },
# },
},
},
}];
my $hQualifier = undef;
my $hQualifier2 = {
oper => 'rel_op',
rel_op => {
oper => '==',
left => {
fieldId => 'G.106',
},
right => {
dataType => 'integer',
value => 3,
example/ars_QualDecode.pl view on Meta::CPAN
#
# AUTHOR
# jeff murphy
#
# $Log: ars_QualDecode.pl,v $
# Revision 1.7 2000/06/01 16:54:03 jcmurphy
# *** empty log message ***
#
# Revision 1.6 1998/04/20 17:13:25 jcmurphy
# patch by jkeener@utsi.com for
# "case where value = undef (NULL)."
# /
#
# Revision 1.5 1998/02/25 19:21:14 jcmurphy
# minor corrections
#
# Revision 1.4 1998/01/07 15:07:00 jcmurphy
# modifications by dave adams to arith printing stuff
#
# Revision 1.3 1997/02/20 20:17:27 jcmurphy
# added more descriptive comments and also handled keywords correctly.
example/ars_QualDecode.pl view on Meta::CPAN
#
# NOTES
# This routine over parenthesises, but should
# yield correct results nonetheless.
#
# We need the ctrl struct and schema name so
# we can reverse map from fieldId's to field names.
#
# RETURNS
# a scalar on success
# undef on failure
#
# AUTHOR
# jeff murphy
sub ars_Decode_QualHash {
my $c = shift;
my $s = shift;
my $q = shift;
my $fids;
my %fids_orig;
my $fieldName;
print "ars_Decode_QualHash(c=$c, s=$s, q=$q)\n" if !$debug;
if(!(defined($c) && (ref($c) eq "ARControlStructPtr"))) {
print "ars_Decode_QualHash: ctrl is not an ARControlStructPtr\n";
return undef;
}
if(!(defined($s) && ($s ne ""))) {
print "ars_Decode_QualHash: schema is not a SCALAR\n";
return undef;
}
if(!(defined($q) && (ref($q) eq "HASH"))) {
print "ars_Decode_QualHash: qualifier is not a HASH\n";
return undef;
}
(%fids_orig = ars_GetFieldTable($c, $s)) ||
die "GetFieldTable: $ars_errstr";
foreach $fieldName (keys %fids_orig) {
$fids{$fids_orig{$fieldName}} = $fieldName;
}
return ars_DQH($q, %fids);
}
sub ars_DQH {
my $h = shift;
my $fids = shift;
my $e = undef;
print "ars_DQH(h=$h, fids=$fids)\n" if $debug;
if($h) {
print "\n
left = $h->{left}
oper = $h->{oper}
right = $h->{right}
not = $h->{not}
example/attachTest.pl view on Meta::CPAN
#sub AR_LOC_FILENAME { 1;}
#sub AR_LOC_BUFFER { 2;}
sub ra {
my $fid = shift;
print "\t[Retrieving attachment.]\n";
# file: $a = 0 || 1
# buff: $a = undef || attachment
ars_GetEntryBLOB($c, "ARSperl Test", $id,
$fid,
ARS::AR_LOC_FILENAME,
"/tmp/attachtest") ||
die ("GetEntryBLOB: $ars_errstr");
my $a = ars_GetEntryBLOB($c, "ARSperl Test", $id,,
$fid,
example/getAttachment-OO.pl view on Meta::CPAN
}
exit 0;
sub ra {
my $field = shift;
print "\t[Retrieving attachment.]\n";
# file: $a = 0 || 1
# buff: $a = undef || attachment
$s->getAttachment(-entry => "000000000000002",
-field => $field,
-file => "/tmp/attachtest");
my $a = $s->getAttachment(-entry => "000000000000002",
-field => $field);
print "\tattachment size = ".length($a)."\n";
open(FD, ">/tmp/attachtest2") || die "open: $!";
html/changes.html view on Meta::CPAN
</tr><tr bgcolor='#eeeeee'><td width='10%'>(TS)</td><td width='90%'><font color='black'>fixed exsi.pl enumeration gap problem
</font></td></tr>
<tr bgcolor='#dddddd'><td width='10%'>(TS)</td><td width='90%'><font color='black'>added lengthUnits,storageOptionForCLOB attributes to ARCharLimitsStruct,ARDisplayLimits
</font></td></tr>
<tr bgcolor='#eeeeee'><td width='10%'>(TS)</td><td width='90%'><font color='black'>fixed ars_GetServerInfo() keys 325-332 problem
</font></td></tr>
<tr bgcolor='#dddddd'><td width='10%'>(TS)</td><td width='90%'><font color='black'>modifications for AR 7.6.3 API
</font></td></tr>
<tr bgcolor='#eeeeee'><td width='10%'>(TS)</td><td width='90%'><font color='black'>ars_GetEntryBLOB bugfix by Conny Martin
</font></td></tr>
<tr bgcolor='#dddddd'><td width='10%'>(TS)</td><td width='90%'><font color='black'>fixed "hv_fetch error" problem in case of undefined ARValueStruct
</font></td></tr>
<tr bgcolor='#eeeeee'><td width='10%'>(TS)</td><td width='90%'><font color='black'>fixed SignalTypeMap problem
</font></td></tr>
<tr bgcolor='#dddddd'><td width='10%'>(TS)</td><td width='90%'><font color='black'>package directory reorganization/cleanup
</font></td></tr>
<tr bgcolor='#eeeeee'><td width='10%'>(TS)</td><td width='90%'><font color='black'>additional ars_Login parameters by Conny Martin
</font></td></tr>
<tr bgcolor='#dddddd'><td width='10%'>(TS)</td><td width='90%'><font color='black'>implemented ars_GetList/Get/Create/Set/DeleteImage
</font></td></tr>
<tr bgcolor='#eeeeee'><td width='10%'>(TS)</td><td width='90%'><font color='black'>fixed incorrect AR_ARITH_OP_NEGATE handling in rev_ARArithOpStruct
html/changes.html view on Meta::CPAN
</font></td></tr>
<tr bgcolor='#eeeeee'><td width='10%'>(TS)</td><td width='90%'><font color='black'>fixed ars_GetAlertCount
</font></td></tr>
<tr bgcolor='#dddddd'><td width='10%'>(MB)</td><td width='90%'><font color='black'>removed legacy ars_NT Notifier and ars_AdminExtension calls
</font></td></tr>
<tr bgcolor='#eeeeee'><td width='10%'>(MB)</td><td width='90%'><font color='red'>added ars_VerifyUser implementation by Thilo Stapff
</font></td></tr>
<tr bgcolor='#dddddd'><td width='10%'>(MB)</td><td width='90%'><font color='red'>changed ars_APIVersion to use AR_CURRENT_API_VERSION rather than AR_EXPORT_VERSION
</font></td></tr>
<tr bgcolor='#eeeeee'><td width='10%'>(MB)</td><td width='90%'><font color='black'>fixed ars_GetActiveLink, ars_GetFilter, ars_GetEscalation, ars_GetField so they
return undef on failure. </font></td></tr>
<tr bgcolor='#dddddd'><td width='10%'>(JCM)</td><td width='90%'><font color='black'>buffer overflow in perl_BuildEntryList
</font></td></tr>
<tr bgcolor='#eeeeee'><td width='10%'>(JCM)</td><td width='90%'><font color='black'>malloc-on-windows patch by John Unsworth
</font></td></tr>
<tr bgcolor='#dddddd'><td width='10%'>(TS)</td><td width='90%'><font color='black'>fixed memory leak in ars_Get... functions (added "sv_2mortal( (SV*) RETVAL )")
</font></td></tr>
<tr bgcolor='#eeeeee'><td width='10%'>(TS)</td><td width='90%'><font color='black'>bugfix in dup_Value (support.c) for API version <= 5.0.1
</font></td></tr>
<tr bgcolor='#dddddd'><td width='10%'>(TS)</td><td width='90%'><font color='black'>changed enum limits processing in perl_ARFieldLimitStruct for API version <= 5.0.1
</font></td></tr>
html/changes.html view on Meta::CPAN
BGCOLOR='black'>
<TR>
<TD width='100%'>
<TABLE CELLSPACING='0' CELLPADDING='3' WIDTH='100%' BORDER='0'
BGCOLOR='lightblue'>
<tr><td colspan='2'>
<table width='100%' border='0'><tr>
<td width='50%'>Released: <B>11/11/96</B></td>
<td width='50%'>Version: <B>1.3
</B></td>
</tr></table></td>
</tr><tr bgcolor='#eeeeee'><td width='10%'>(JWM)</td><td width='90%'><font color='black'>undef works in setEntry now.
</font></td></tr>
<tr bgcolor='#dddddd'><td width='10%'>(JWM)</td><td width='90%'><font color='black'>added ars_Import to complement ars_Export
</font></td></tr>
<tr bgcolor='#eeeeee'><td width='10%'>(JCM)</td><td width='90%'><font color='black'>Profiling code added to keep track of number of
queries made. </font></td></tr>
<tr bgcolor='#dddddd'><td width='10%'>(JWM)</td><td width='90%'><font color='black'>Field caching code added to make some of the functions
more efficient. </font></td></tr>
<tr bgcolor='#eeeeee'><td width='10%'>(JCM)</td><td width='90%'><font color='black'>New functions: ars_GetFilter(), ars_GetCharMenu(),
ars_GetServerStatistics </font></td></tr>
<tr bgcolor='#dddddd'><td width='10%'>(JWM)</td><td width='90%'><font color='black'>Internal GetField call now caches results to minimize
html/manual/ars_APIVersion.html view on Meta::CPAN
<dt class="c1">
On success
</dt>
<dd>
Returns an integer.
</dd>
<dt class="c1">
On failure
</dt>
<dd>
Returns undef.
</dd>
</dl>
<p>
Example:
</p>
<pre>
$v = ars_APIVersion();<br /> print "This installation of ARSperl was compiled against ARS API version $v\n";<br />
</pre><i>ars_APIVersion was introduced in version 1.62 of ARSperl</i>
<p>
<a href="toc.html">Back to Table of Contents</a>
html/manual/ars_CreateAlertEvent.html view on Meta::CPAN
<TITLE>ARSperl Manual - ars_CreateAlertEvent</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<H2><code>ars_CreateAlertEvent(ctrl,user,alertText,priority,sourceTag,serverName,formName,objectId)</code></H2>
<font face="Minion-Regular" size="3">Decodes a formatted alert message and returns the component parts of the message to the alert client.</font>
<DL>
<DT><B>On success</B><DD>
returns an entryid
<DT><B>On failure</B><DD>
returns undef
</DL>
<P>
<em>ars_CreateAlertEvent was intrduced in version 1.8 of ARSperl.</em>
<P>Example:
<PRE>
(@userlist = <code>ars_CreateAlertEvent</code>($ctrl, $user, $alertText, $priority, $sourceTag, $server, $form, $objectId)) || die $ars_errstr;
</PRE>
<P>
<HR WIDTH="30%">
html/manual/ars_CreateEntry.html view on Meta::CPAN
as ``submitting a new ticket''. Pairs of field ids and values should
follow the schema name. Data types are automatically converted.
<dl>
<dt><b>On success</b></dt>
<dd> Returns the new entry id. </dd>
<dt><b>On failure</b></dt>
<dd> Returns <code>undef</code>. </dd>
</dl>
<p>Example 1: </p>
<pre> ($entry_id = ars_CreateEntry($c, "Schema01", $id, $val)) || <br> die $ars_errstr;<br></pre>
<p>Example 2:</p>
<pre> my %fieldname_to_id = ars_GetFieldTable($c, "User") || <br> die $ars_errstr;<br> my $entry_id = ars_CreateEntry($c, "User",<br> $fieldname_to_id{"Login Name"}, "johnd",<br> $fieldname_to_id{"Full Name"}, "John Doe",<br> $fieldname_to_id{"...
html/manual/ars_DateToJulianDate.html view on Meta::CPAN
<dt class="c1">
On success
</dt>
<dd>
Returns an integer.
</dd>
<dt class="c1">
On failure
</dt>
<dd>
Returns undef.
</dd>
</dl>
<p>
Example:
</p>
<pre>
my $juliandate = ars_DateToJulianDate($ctrl, 1066, 10, 14);
print "The Battle of Hastings was on October 14th, 1066.\n";
print "This is $juliandate days after January 1st, 4713 BCE.\n";
</pre>
html/manual/ars_EncodeDiary.html view on Meta::CPAN
<H2><CODE>ars_EncodeDiary(diaryEntryHash1, ... diaryEntryHashN)</CODE></H2>
Encode a list of <A HREF="ds_diaryentry_hash.html">diaryEntryHash</A>'s
into a single scalar (internal ARS diary field representation).
<DL>
<DT><B>On success</B><DD>
Returns the encoded scalar.
<DT><B>On failure</B><DD>
Returns undef.
</DL>
<P>Example:
<PRE>
$a->{timestamp} = time();
$a->{user} = "foobar";
$a->{value} = "diary entry 1";
$b->{timestamp} = time();
html/manual/ars_ExecuteProcess.html view on Meta::CPAN
On success
</dt>
<dd>
Depending upon the runOption specified returns a list of <code>returnStatus</code> and
<code>returnString</code> or <b>1</b>
</dd>
<dt class="c1">
On failure
</dt>
<dd>
Returns undef.
</dd>
</dl>
<p>
Example:
</p>
<pre>
(($returnCode, $returnString) = ars_ExecuteProcess($ctrl, "/bin/ls -l /")) ||
die "$ars_errstr";
</pre>
html/manual/ars_Export.html view on Meta::CPAN
It's recommended that if you want to export schema definitions you
should use "<code>schema</code>" and not use the other
<code>schema_*</code> types. <P> If you are curious about what
non-obvious types are used for, you should read the
<U>ARSystem Programmers Manual</U>.
<P>
<DL>
<DT><B>On success</B><DD>
returns a scalar string
<DT><B>On failure</B><DD>
returns undef
</DL>
<P>
<P>
<I>ars_Import was introduced in version 1.3 of ARSperl</I>
<P>
<HR WIDTH="30%">
<P>
html/manual/ars_GetActiveLink.html view on Meta::CPAN
<H2><CODE>ars_GetActiveLink(ctrl,name)</CODE></H2>
This function fetches information regarding a specified active link.
<DL>
<DT><B>On success</B><DD>
A scalar pointer to the
<A HREF="ds_al.html">active link attributes</a>.
<DT><B>On failure</B><DD>
<CODE>undef</CODE>.
</DL>
<P>Example:
<PRE>
$alink = ars_GetActiveLink($c, "AR-Assets-GetContactinfo");
</PRE>
<P>
<HR WIDTH="30%">
html/manual/ars_GetCharMenu.html view on Meta::CPAN
<A HREF="ds_getcharmenu_hash.html">HASH</a>
consisting of menu attributes. <br>
<CODE>name</CODE>
is the actual menu name as shown in the ARAdmin tool.
<P>
<DL>
<DT><B>On success</B><DD>
returns a HASH
<DT><B>On failure</B><DD>
returns undef
</DL>
<P>
<em>ars_GetCharMenu was introduced in version 1.3 of ARSperl.</em>
<P>
<HR WIDTH="30%">
<P>
<A HREF="toc.html"><IMG ALT="<--" SRC="arrow.gif" ALIGN=CENTER> Table of Contents </A>
<p>
html/manual/ars_GetCharMenuItems.html view on Meta::CPAN
.
.
</PRE>
See <I>Show_Menu.pl</I> for a demonstration of using this function
and its output.<P>
<DL>
<DT><B>On success</B><DD>
A reference to an array.
<DT><B>On failure</B><DD>
<CODE>undef</CODE>.
</DL>
<P>Example:
<PRE>
$m = ars_GetCharMenuItems($ctrl, $menu_name));
@menu_struct = @$m;
</PRE>
<P>