The following input flist results in an error when using the pcmif::pin_perl_str_to_flist() function. The error was BAD_SCAN_ENUM:
my $in_flist = qq{
0 PIN_FLD_POID POID [0] 0.0.0.1 /search -1 0
0 PIN_FLD_FLAGS INT [0] 256
0 PIN_FLD_TEMPLATE STR [0] "select X from /purchased_product where F1 = V1 "
0 PIN_FLD_ARGS ARRAY [1] allocated 20, used 1
1 PIN_FLD_ACCOUNT_OBJ POID [0] ${account_poid}
0 PIN_FLD_RESULTS ARRAY [*]
1 PIN_FLD_POID POID [0] NULL
1 PIN_FLD_PRODUCT_OBJ POID [0] NULL
1 PIN_FLD_SERVICE_OBJ POID [0] NULL
1 PIN_FLD_QUANTITY DECIMAL [0] NULL
1 PIN_FLD_STATUS ENUM [0] NULL
1 PIN_FLD_STATUS_FLAGS INT [0] NULL
};
This gave me headaches until I realized the error. The correct flist is given below:
my $in_flist = qq{
0 PIN_FLD_POID POID [0] 0.0.0.1 /search -1 0
0 PIN_FLD_FLAGS INT [0] 256
0 PIN_FLD_TEMPLATE STR [0] "select X from /purchased_product where F1 = V1 "
0 PIN_FLD_ARGS ARRAY [1] allocated 20, used 1
1 PIN_FLD_ACCOUNT_OBJ POID [0] ${account_poid}
0 PIN_FLD_RESULTS ARRAY [*]
1 PIN_FLD_POID POID [0] NULL
1 PIN_FLD_PRODUCT_OBJ POID [0] NULL
1 PIN_FLD_SERVICE_OBJ POID [0] NULL
1 PIN_FLD_QUANTITY DECIMAL [0] 0
1 PIN_FLD_STATUS ENUM [0] 0
1 PIN_FLD_STATUS_FLAGS INT [0] 0
};
Thursday, December 17, 2009
Sunday, November 22, 2009
Convert string to all caps in C
/*Sample code to convert to ALL CAPS a given string. */
#include<stdio.h>
#include <string.h>
main()
{
int len =0;
int i =0;
char *str="quick BroWn Fox juMP ovEr the HeAd";
char *up_str;
len=strlen(str);
/*strlen does not include '\0' in the count so we allocate space for it*/
up_str=malloc((len+1)*sizeof(char));
printf("\nThis is the sample string: %s\n", str);
printf("\nThe length: %d",len);
for(i=0;i<=len;i++){ *(up_str+i)= toupper(*(str+i)); /* In C, *(array+1) == array[1] */
if(i==len){
*(up_str+i)='\0';
}
}
printf("\nThe upper string: %s\n", up_str);
free(up_str);
system("PAUSE");
}
#include<stdio.h>
main()
{
int i =0;
char *up_str;
len=strlen(str);
/*strlen does not include '\0' in the count so we allocate space for it*/
up_str=malloc((len+1)*sizeof(char));
printf("\nThis is the sample string: %s\n", str);
printf("\nThe length: %d",len);
for(i=0;i<=len;i++){ *(up_str+i)= toupper(*(str+i));
if(i==len){
*(up_str+i)='\0';
}
}
printf("\nThe upper string: %s\n", up_str);
free(up_str);
system("PAUSE");
}
Search between two tables
With an account POID, search for the product name of its products.
The sql template to use here would be:
"select X from /product 1, /purchased_product 2 where ( 2.F1 = V1 and 1.F2 = 2.F3 ) "
where F1 = PIN_FLD_ACCOUNT_OBJ
F2 = PIN_FLD_POID
F3 = PIN_FLD_PRODUCT_OBJ
V1 = account POID
The search flist looks like this:
0 PIN_FLD_POID POID [0] 0.0.0.1 /search 0 0
0 PIN_FLD_TEMPLATE STR [0] "select X from /product 1, /purchased_product 2 where ( 2.F1 = V1 and 1.F2 = 2.F3 ) "
0 PIN_FLD_FLAGS INT [0] 256
0 PIN_FLD_ARGS ARRAY [1] allocated 20, used 1
1 PIN_FLD_ACCOUNT_OBJ POID [0] 0.0.0.1 /account 20454
0 PIN_FLD_ARGS ARRAY [2] allocated 20, used 1
1 PIN_FLD_POID POID [0] NULL poid pointer
0 PIN_FLD_ARGS ARRAY [3] allocated 20, used 1
1 PIN_FLD_PRODUCT_OBJ POID [0] NULL poid pointer
0 PIN_FLD_RESULTS ARRAY [0] allocated 20, used 1
1 PIN_FLD_NAME STR [0] ""
The sql template to use here would be:
"select X from /product 1, /purchased_product 2 where ( 2.F1 = V1 and 1.F2 = 2.F3 ) "
where F1 = PIN_FLD_ACCOUNT_OBJ
F2 = PIN_FLD_POID
F3 = PIN_FLD_PRODUCT_OBJ
V1 = account POID
The search flist looks like this:
0 PIN_FLD_POID POID [0] 0.0.0.1 /search 0 0
0 PIN_FLD_TEMPLATE STR [0] "select X from /product 1, /purchased_product 2 where ( 2.F1 = V1 and 1.F2 = 2.F3 ) "
0 PIN_FLD_FLAGS INT [0] 256
0 PIN_FLD_ARGS ARRAY [1] allocated 20, used 1
1 PIN_FLD_ACCOUNT_OBJ POID [0] 0.0.0.1 /account 20454
0 PIN_FLD_ARGS ARRAY [2] allocated 20, used 1
1 PIN_FLD_POID POID [0] NULL poid pointer
0 PIN_FLD_ARGS ARRAY [3] allocated 20, used 1
1 PIN_FLD_PRODUCT_OBJ POID [0] NULL poid pointer
0 PIN_FLD_RESULTS ARRAY [0] allocated 20, used 1
1 PIN_FLD_NAME STR [0] ""
Thursday, January 8, 2009
Check BRM patch version
To check the latest patch installed on Oracle BRM:
Infranet: Type 'pinrev' or check pinrev.dat
Pipeline: Check 'version.info.txt' in $IFW_HOME
To be sure that these files are current, the patches must be installed using the installer. These files might not get properly updated if, for example, instead of running the installer, you extract the new files from the tar file and then just plunk them in their respective directories.
Infranet: Type 'pinrev' or check pinrev.dat
Pipeline: Check 'version.info.txt' in $IFW_HOME
To be sure that these files are current, the patches must be installed using the installer. These files might not get properly updated if, for example, instead of running the installer, you extract the new files from the tar file and then just plunk them in their respective directories.
Migrating IPL files
The following are common causes of IPL files throwing errors when committing them in production after taking them from a test/integration environment:
- The resources and GL/IDs used by products and discount rules in the IPL file does not exist in production.
- The discounts mentioned in the deals are not included in the IPL file to be committed.
- The service used by the products in the IPL does not exist in production.
Failover CM hosts in Java apps
To make sure that your Java application only connects to one CM server, take out the failover entry in the Infranet.properties file.
This has caused a lot of grief with a colleague because he was canceling products thinking he was connected to a test environment but was actually connected to production. The test environment was down and he had a failover entry for the production environment in his properties file.
To avoid this situation, better comment this entry (Infranet.failover.nn) out.
This has caused a lot of grief with a colleague because he was canceling products thinking he was connected to a test environment but was actually connected to production. The test environment was down and he had a failover entry for the production environment in his properties file.
To avoid this situation, better comment this entry (Infranet.failover.nn) out.
Subscribe to:
Posts (Atom)