The ExitCode of an instance is set to the number of successful deliveries. The count corresponds to the number of successful deliveries to devices, and there may be more than one device for each recipient of an iBot.
Thursday, December 10, 2009
iBot Job Scheduler Exit Code
Posted by tekmen at 12:02 PM 0 comments
Labels: OBIEE
Monday, July 20, 2009
Oracle Null
These are not necessarily unexplainable idiosyncrasies. Rather, this is a list
of Null usage cases that may surprise me personally. Note: Null value is
spelled "Null" in here.
(1) Null doesn't count in aggregate function.
create table testnull (a number);
insert into testnull values (1);
insert into testnull values (2);
insert into testnull values (null);
select count(*) from testnull; <-- returns 3
select count(a) from testnull; <-- returns 2
create table test (name varchar2(10), value number);
insert into test values ('xx', 12);
insert into test values ('xx', null);
insert into test values ('yy', 123);
select name, count(*) from test group by name;
select name, count(value) from test group by name;
NAME COUNT(VALUE)
---------- ------------
xx 1 <-- would be 2 if select name, count(*) ...
yy 1
(2) Inserted null string converted to Null.
create table testnull (a varchar2(10));
insert into testnull values (null);
insert into testnull values ('');
insert into testnull values ('' || 'Hello');
insert into testnull values (null || 'Hello');
select dump(a) from testnull;
DUMP(A)
---------------------------------------------
NULL
NULL
Typ=1 Len=5: 72,101,108,108,111
Typ=1 Len=5: 72,101,108,108,111
(3) Where can Null be compared?
select decode(null, null, 'Null equals Null in DECODE') from dual;
DECODE(NULL,NULL,'NULLEQUA
--------------------------
Null equals Null in DECODE
Oracle SQL Reference says "In a DECODE function, Oracle considers two nulls to
be equivalent. If expr is null, then Oracle returns the result of the first
search that is also null."
Another place where Null can be compared is in range partition definition,
where MAXVALUE is greater than Null (Ref. J. Lewis "Practical Oracle8i",
p.241).
(4) [Related to (3)] Unique constraints.
create table test (a number);
create unique index unq_test on test (a);
insert into test values (null);
insert into test values (null); <-- No error.
You *are* able to insert another Null without getting ORA-1 (unique constraint
violated).
create table test (a varchar2(1), b varchar2(1));
create unique index unq_test on test (a, b);
insert into test values ('A', null);
insert into test values ('A', null); <-- Get ORA-1
truncate table test;
insert into test values (null, null);
insert into test values (null, null); <-- No error
So if all columns are null, the unique constraint will not be violated. If one
or more columns have non-null values, the constraint takes effect.
(5) Unknown OR True returns True, Unknown AND False returns False.
create table test (a number, b number, c number);
insert into test values (3, 4, null);
select 'Got it' from test where b < c or a < b; <-- returns 'Got it'
select 'Got it' from test where not (b > c and a > b); <-- returns 'Got it'
Source : http://yong321.freeshell.org/computer/OracleNull.txt
Posted by tekmen at 10:58 AM 0 comments
Wednesday, June 17, 2009
Action Link for OBIEE
Prerequisite : The security setup to reach OBIEE from E-Business Suite must be completed before creating Action Link (Action link screens enable to drill back into the transactional application screen from an Oracle BI request or dashboard).
Source : Metalink Note - 552735.1
In order to generate an Action Link you will first have to do the following:
- Identify the Oracle E-Business Suite Application page/function that you want to link to. Obtain the function_id of that page and identify the querystring parameters required by that page. This will have to be done by going through Oracle E-Business Suite documentation.
- Identify the Oracle E-Business Suite table that will support the parameters needed for the Oracle E-Business Suite function (page) that you want to build an Action link to and create this physical table in the Oracle E-Business Suite OLTP schema as an opaque view.
Here the OE_ORDER_HEADERS_ALL table was chosen because it is at the grain of the Order Header and supplies the HEADER_ID that we can use to join to the warehouse tables that contain the Order Header information. The function_id of the Oracle E-Business Suite page for Order Details and the parameters supported by that page were also identified from Oracle E-Business Suite documentation.
The Action Link URL is generated by calling the FND_RUN_FUNCTION.GET_RUN_FUNCTION_URL() function in the Oracle E-Business Suite Database Schema. For example:
SELECT
HEADER_ID,
fnd_run_function.get_run_function_url(
CAST(fnd_function.get_function_id('ISC_ORDINF_DETAILS_PMV') AS NUMBER),
CAST( VALUEOF(NQ_SESSION.OLTP_EBS_RESP_APPL_ID) AS NUMBER),
CAST( VALUEOF(NQ_SESSION.OLTP_EBS_RESP_ID) AS NUMBER),
CAST( VALUEOF(NQ_SESSION.OLTP_EBS_SEC_GROUP_ID) AS NUMBER),
'HeaderId='||HEADER_ID||'&pFunctionName=ISC_ORDINF_DETAILS_PMV&pMode=NO&pageFunctionName=ISC_ORDINF_DETAILS_PMV',
NULL) as ORDER_HEADER_ACTION_LINK_URL
FROM OE_ORDER_HEADERS_ALL
The parameters to the function are:
p_function_id in number,
p_resp_appl_id in number,
p_resp_id in number,
p_security_group_id in number,
p_parameters in varchar2 default null,
p_override_agent in varchar2 default null
Here p_function_id is the function_id of the page that you want to navigate to, the next three parameters pass the security context to Oracle E-Business Suite. The value of these session variables will be set by the initialization block described in sub-section "Creating Init Block for setting Oracle E-Business Suite Context". The fourth parameter is optional and is used if the page you are navigating to accepts parameters. In many cases if you want to navigate to a particular record on the page you are navigating to (Action Links typically do this), you will need to supply those querystring parameters here. The function call returns a URL to the desired function with encrypted querystring parameters.
The next step is joining this opaque view to the base fact table in the Data Warehouse schema. This join represents a join of tables in different database schemas and will therefore happen in the Oracle BI Server.
Map into the logical and presentation layers
Map the URL column from the opaque view into the logical star where you want to create the Action Link. Then expose this logical column in the appropriate presentation catalog. Also ensure that the user who will be logging into Oracle E-Business Suite Applications is assigned access to the appropriate presentation catalogs. For example:
Oracle BI Answers Configuration
When including this Action Link column in a report, edit the column properties to indicate this is of type ‘Hyperlink’. That will automatically make this a clickable link in an Answers report. Further customization can be done to embed an image instead of the text.
Oracle BI Presentation Catalog Configuration
Posted by tekmen at 11:38 AM 0 comments
Labels: E-Business, OBIEE
Monday, May 18, 2009
Calling Bursting from XML Template
With the standalone BI Publisher, we have useful Bursting tool in order to split and send the reports to relevant people via email. However, when you are using standalone BI Publisher, you may need to connect E-Business Suite and need to initialize the session for multi-org, VPD, etc. to get the relevant data. In order to do that, you will need to use report triggeres to cal a PLSQL wrapper to initialize the session. With the help of data templates, we can easily call PLSQL functions.
There are 3 steps you need to follow up to be successfull on calling PLSQL function;
1. Add a defaultPackage declaration to the Data Template definition, like -
2. Create a package with above name and add a boolean function to it. For my work I gave the function name as beforeReport.
3. The parameters used in the Data Template should be declared (same name/datatype) in the package specification.<datatemplate name="DATA" defaultpackage="XX_OBIEE_UTIL" version="1.0">
<dataquery>
<sqlstatement name="ROW">
<!--[CDATA[SELECT * from XX_YOUR_TABLE a ORDER BY a.region, a.CUSTOMER_NUMBER ]]-->
</sqlstatement>
</dataquery>
<datastructure>
<group name="ROW" source="ROW">
<element name="RUNDATE" value="RUNDATE">
<element name="xxEMAIL" value="xxEMAIL">
<element name="CUSTOMER_NUMBER" value="CUSTOMER_NUMBER">
<element name="CUSTOMER_NAME" value="CUSTOMER_NAME">
<element name="PRODUCT" value="PRODUCT">
<element name="REVENUE_TYPE" value="REVENUE_TYPE">
<element name="REGION" value="REGION">
<element name="DM" value="DM">
<element name="CAE" value="CAE">
<element name="SECTOR" value="SECTOR">
<element name="CURRENT_NET_REVENUE" value="CURRENT_NET_REVENUE">
<element name="PREVIOUS_NET_REVENUE" value="PREVIOUS_NET_REVENUE">
<element name="VARIANCE" value="VARIANCE">
<datatrigger name="beforeReport" source="XX_OBIEE_UTIL.beforeReport()">
</datatrigger>
/datastructure></datatemplate>
Posted by tekmen at 11:00 AM 0 comments
Labels: BI Publisher, Developer
Thursday, March 19, 2009
XSL Formatting Objects
When you design BI Publisher Template for the reports, you will need XSL Formatting Objects to make nice reports, like making the cell red as you can see from the picture. The following link will give you many formatting properties that you can make use of for your design.
XSL Formatting Objects
Posted by tekmen at 11:26 AM 0 comments
Labels: BI Publisher, Developer
Friday, February 27, 2009
Math and XSLT
The following link is for understanding the Math and XSLT that you may need to focus on when you build your BI Publisher templates.Math and XSLT
Posted by tekmen at 11:36 AM 0 comments
Labels: BI Publisher, Tips
Saturday, January 17, 2009
DBMS_XMLGEN
DBMS XMLGEN is a PL/SQL package that allows programmers to extract XML data from Oracle database tables. It might be useful when you need a XML file to create XML publisher layouts. Here are 2 examples on how to use it;
SELECT DBMS_XMLGEN.getXML('SELECT * FROM emp') FROM dual;
orDECLARE
ctx DBMS_XMLGEN.ctxHandle;
xml CLOB;
BEGIN
ctx := dbms_xmlgen.newcontext('select * from emp');
dbms_xmlgen.setrowtag(ctx, 'MY-ROW-START-HERE');
xml := dbms_xmlgen.getxml(ctx);
dbms_output.put_line(substr(xml,1,255));
END;
/
Posted by tekmen at 10:56 AM 0 comments
Labels: BI Publisher, Developer, Tips