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");
}

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] ""

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.

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.

Monday, September 29, 2008

Internet in OpenSolaris and VirtualBox combo

Installed VirtualBox 2.0.0 on my Windows Vista SP1 machine, then booted on a live CD image of OpenSolaris inside VirtualBox. In the live CD, OpenSolaris was able to connect to the internet. But after installing it on the virtual hard drive, it showed no internet connection.
After googling, I restarted the virtual machine and now I am making this entry inside OpenSolaris/VirtualBox. Cool!

Tuesday, September 16, 2008

Plans not displaying in Customer Center: Issue 2

Even though most of the accounts reported in Issue 1 were resolved, there were still some accounts that has the same problem. The reasons are varied. The following were some of the reasons that is causing the issue:
  • Missing plans - this is caused by somebody deleting deals/plans in the database a while back. Even though most of the plans were recreated in the database, a few plans were not. The error it logs in the DM is: NOTICE OP_ROBJ: do_sql_select() NOTHING FOUND ("/plan", XXXXXXX) where XXXXXXX is the plan poid.

  • Missing deals - same reason as above. For the missing plan/deal issue, the workaround was to create the mentioned plan/deal in by inserting a record in the database. This path was chosen because there was already a precedent to this issue i.e. somebody deleted the deals/plans in production and operations decided to just create them manually in the database since they are not offered to customers anymore.

  • DM logs say Portal is looking for a plan with POID 0 for a particular account. This one is different from the others. It was confusing considering the object /plan 0 shouldn't have existed in the first place. After checking the logs, it appears that BRM looks at the event_billing_product_action table for the deals/plans when you want to display the plans in CC. Apparently, if the service is still active, BRM will look for the plan object that is in the flist returned by the query to the product action event table. If not active, it will not look for the plan object. For unknown reasons, this account has '/plan 0' in the product action event table and has a valid deal. Since the service associated with the deal/product is still active, BRM attempts to look for this '/plan 0' in the plan table and throws the error when it cannot find it. The two options were either to insert a '/plan 0' in the database or update the event table to reflect the correct plan for the account. By looking at the deal object in the event table, one can deduce the plan to which it belongs. The second option was chosen to be implemented in production.