Tuesday, 24 May 2016

PL/SQL: Tips for Oracle SQL Developer:

Query to see log files that have been created and which user they have been allocated to


select * from S_SRM_TASK_HIST;


ALTER SESSION to replicate Siebel when running SQL Queries

Did you know that when you run queries directly on SQL developer or TOAD, it runs it with different parameters than what Siebel does? To ensure a similar performance and SQL execution as Siebel, run the following ALTER SESSION commands before running your query:



ALTER SESSION SET OPTIMIZER_MODE = FIRST_ROWS_10;
ALTER SESSION SET "_OPTIMIZER_SORTMERGE_JOIN_ENABLED" = FALSE; 

ALTER SESSION SET "_OPTIMIZER_JOIN_SEL_SANITY_CHECK" = TRUE;
ALTER SESSION SET "_HASH_JOIN_ENABLED" = FALSE;



The following flushes the Data Cache for testing SQL performance again and again
You need the correct rights to run this!

      alter system flush buffer_cache




Setting SQL Developer to use Datetime

Tools > Preferences > Database -- NLS Parameters

Datetime Format: DD-MON-RRRR HH24:MI:SS


















Date Format: DD-MON-RR


Alternatively run the following command:

ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MM-YYYY HH24:MI:SS';

Then you can run the following query without the TO_DATE function:

                SELECT count(*) 
                FROM SIEBEL.S_EVT_FUL_REQ T1, SIEBEL.S_USER
                WHERE T1.CREATED_BY = SIEBEL.S_USER.ROW_ID (+)
                AND SIEBEL.S_USER.LOGIN IN ('REHMANA')
                AND T1.CREATED >= '20/07/2014 07:00:00';

Using Dates in Queries

select COUNT(*) FROM SIEBEL.S_ORG_EXT
WHERE ACCNT_TYPE_CD = 'Provider'
AND X_HC_RENEWAL_DT >= TO_DATE('01/06/2013','DD/MM/YYYY')
AND X_HC_RENEWAL_DT < TO_DATE('01/09/2013','DD/MM/YYYY')
ORDER BY X_HC_RENEWAL_DT ASC;

UPDATING A DATE
UPDATE  EVENT_FUND
SET CREATION_DATE = TO_DATE('01042016', 'DDMMYYYY')where EVENT_ID = '3003650'

Using sysdate in Queries
select attrib_03, attrib_04, count(ext.row_id) from siebel.s_srv_req base, siebel.s_srv_req_x ext
where base.row_id = ext.row_id
and base.created > sysdate-365
and sr_stat_dt is not null
group by attrib_03, attrib_04

order by count(ext.row_id) desc;

Updating Dates

UPDATE SIEBEL.S_CASE_XSET X_FAC_DUE_DT =  to_date('27-APR-13', 'dd-mon-yy') WHERE PAR_ROW_ID = '1-BH0GR5'




Concatenating Columns in a select statement

select a.OU_ID || a.PROD_ID
from siebel.S_ORG_PROD a, siebel.S_PROD_INT b
where b.TYPE = 'GST'
and A.PROD_ID = b.ROW_ID
group by a.OU_ID || a.PROD_ID
having count(0) > 1


select distinct PER_TITLE || ' ' || FST_NAMe || ' ' || LAST_NAME, count(0) 
from siebel.S_CONTACT
group by PER_TITLE || ' ' || FST_NAMe || ' ' || LAST_NAME
having count(0) > 1

order by count(0) desc


A Select query feeding into Select query

Example 1

select
T1.ROW_ID,
T1.CREATED,
T4.LOGIN AS CREATED_BY,
T1.LAST_UPD,
T3.LOGIN AS LAST_UPD_BY,
T1.DB_LAST_UPD,
T1.DB_LAST_UPD_SRC,
T1.MODIFICATION_NUM,
T1.PARTY_ID,
T1.REL_PARTY_ID,
T2.NAME
from   SIEBEL.S_PARTY_REL T1
LEFT OUTER JOIN SIEBEL.S_ORG_EXT T2
ON T1.PARTY_ID = T2.PAR_ROW_ID
LEFT OUTER JOIN SIEBEL.S_USER T3
ON T1.LAST_UPD_BY = T3.PAR_ROW_ID
LEFT OUTER JOIN SIEBEL.S_USER T4
ON T1.LAST_UPD_BY = T4.PAR_ROW_ID
WHERE PARTY_ID IN
(SELECT T1.PARTY_ID  from   SIEBEL.S_PARTY_REL T1
LEFT OUTER JOIN SIEBEL.S_ORG_EXT T2 ON  T1.PARTY_ID = T2.ROW_ID
LEFT OUTER JOIN SIEBEL.S_ORG_EXT T3 ON  T1.REL_PARTY_ID = T3.ROW_ID
WHERE   T1.REL_TYPE_CD = 'Provider'
AND     T2.ACCNT_TYPE_CD = 'Location'
AND     T3.ACCNT_TYPE_CD = 'Provider'
GROUP BY T1.PARTY_ID, T2.NAME
having count(*) > 1)
AND T1.REL_TYPE_CD = 'Provider'
ORDER BY T1.CREATED ASC 

Example 2


select ORG_ID, PROD_ID, LAST_UPD from 
(SELECT 
ORG_PROD.OU_ID ORG_ID, 
ORG_PROD.PROD_ID PROD_ID,
ORG_PROD.LAST_UPD LAST_UPD,
PROD.TYPE, COUNT(*)
FROM SIEBEL.S_ORG_PROD ORG_PROD INNER JOIN SIEBEL.S_PROD_INT PROD ON PROD.ROW_ID=ORG_PROD.PROD_ID AND TYPE='GST'
GROUP BY ORG_PROD.OU_ID, ORG_PROD.PROD_ID, PROD.TYPE
HAVING COUNT(*) > 1)

order by ORG_ID, PROD_ID desc


Group By and Count on Two or more Columns

Select 
Count(*),
B.NAME,
C.NAME
from SIEBEL.S_TMSHT_ITEM A
LEFT OUTER JOIN SIEBEL.S_PROJ B
ON A.PROJ_ID = B.ROW_ID
LEFT OUTER JOIN SIEBEL.S_PROJITEM C
ON A.PROJITEM_ID = C.ROW_ID
GROUP BY B.NAME, C.NAME


   select Count(*), A.PROC_NAME , A.STATUS_CD
   FROM SIEBEL.S_WFR_PROC A
   Left Outer Join SIEBEL.S_REPOSITORY B
   ON A.REPOSITORY_ID = B.ROW_ID
   WHERE B.NAME = 'Siebel Repository'
   AND A.STATUS_CD = 'COMPLETED'
   GROUP BY A.PROC_NAME, A.STATUS_CD
   HAVING Count(*) > 1


Using MINUS to subtract Select Query Result a from Select Query Result B

--------All Providers that have one Active Location------
--------SELECT QUERY A: NOTE Only outputs one Column-----
select
A.ROW_ID
from SIEBEL.S_ORG_EXT A
INNER JOIN SIEBEL.S_ORG_EXT B
ON A.PAR_ROW_ID = B.PAR_OU_ID
-------Provider-----------------
WHERE A.OU_TYPE_CD = 'Primary Dental Care'
AND A.ACCNT_TYPE_CD = 'Provider'
AND A.CUST_STAT_CD = 'Registered'
-------Location-----------------
AND B.OU_TYPE_CD = 'Primary Dental Care'
AND B.ACCNT_TYPE_CD = 'Location'
AND B.CUST_STAT_CD = 'Active'
GROUP BY A.ROW_ID
having count(*) = 1
MINUS
------- All Providers that have a location with Product DEN
--------SELECT QUERY B: NOTE Only outputs one Column--------
select
A.ROW_ID
from SIEBEL.S_ORG_EXT A
INNER JOIN SIEBEL.S_ORG_EXT B
ON A.PAR_ROW_ID = B.PAR_OU_ID
LEFT OUTER JOIN SIEBEL.S_ORG_PROD C
ON B.PAR_ROW_ID = C.OU_ID
LEFT OUTER JOIN SIEBEL.S_PROD_INT D
ON C.PROD_ID = D.ROW_ID
-------Provider-----------------
WHERE A.OU_TYPE_CD = 'Primary Dental Care'
AND A.ACCNT_TYPE_CD = 'Provider'
AND A.CUST_STAT_CD = 'Registered'
-------Location-----------------
AND B.OU_TYPE_CD = 'Primary Dental Care'
AND B.ACCNT_TYPE_CD = 'Location'
AND B.CUST_STAT_CD = 'Active'
-------Product-------------------
AND D.NAME =  'DEN'



select   A.INTEGRATION_ID  FROM SIEBEL.S_ORG_EXT A  LEFT OUTER JOIN SIEBEL.S_ORG_EXT C  ON A.ROW_ID = C.PAR_OU_ID  WHERE A.OU_TYPE_CD = 'Primary Medical Services'  AND C.ACCNT_TYPE_CD = 'Location'   AND C.CUST_STAT_CD = 'Active'  GROUP BY A.INTEGRATION_ID  HAVING Count(*) = 1 INTERSECT select   A.INTEGRATION_ID  FROM SIEBEL.S_ORG_EXT A  LEFT OUTER JOIN SIEBEL.S_ORG_EXT_XM B ON A.ROW_ID = B.PAR_ROW_ID  WHERE A.OU_TYPE_CD = 'Primary Medical Services' AND B.TYPE = 'Location' AND B.ATTRIB_04 = 'GP Practice'    GROUP BY A.INTEGRATION_ID  HAVING Count(*) = 1 





Bringing back the n number of rows

Just include the following AND statement in the WHERE clause

AND rownum <= 29001


Updating Two Columns on a Table and avoiding two updates

UPDATE Table1 T1 SET
T1.name = (SELECT T2.name FROM Table2 T2 WHERE T2.id = T1.id),
T1.desc = (SELECT T2.desc FROM Table2 T2 WHERE T2.id = T1.id)
WHERE T1.id IN (SELECT T2.id FROM Table2 T2 WHERE T2.id = T1.id);


update EIM_POSITION a SET
a.PARTY_UID = (select b.ROW_ID from siebel.S_USER b where b.LOGIN = a.ACC_COMMENTS)
where a.ACC_COMMENTS in
(select b.LOGIN from siebel.S_USER b where a.ACC_COMMENTS = b.LOGIN)

Setting bring back a value according to a condition

SELECT
A.ROW_ID AS ORG_ROW_ID,
'UPDATE' AS ACTION,
CASE WHEN a.OU_TYPE_CD = 'NHS Healthcare Organisation'  THEN '01/04/2010  00:00:00'
     WHEN a.OU_TYPE_CD = 'Social Care Org'              THEN '01/10/2010  00:00:00'
     WHEN a.OU_TYPE_CD = 'Independent Healthcare Org'   THEN '01/10/2010  00:00:00'     
     WHEN a.OU_TYPE_CD = 'Primary Dental Care'          THEN '01/04/2011  00:00:00'   
     WHEN a.OU_TYPE_CD = 'Independent Ambulance'        THEN '01/04/2011  00:00:00'  
     WHEN a.OU_TYPE_CD = 'Primary Medical Services'     THEN '01/10/2011  00:00:00'    
     ELSE 'IGNORE'
END AS "NEW_DATE"
------------------------------------
from SIEBEL.S_ORG_EXT A
LEFT OUTER JOIN SIEBEL.S_ORG_PROD B
ON A.PAR_ROW_ID = B.OU_ID
LEFT OUTER JOIN SIEBEL.S_PROD_INT C
ON B.PROD_ID = C.ROW_ID
LEFT OUTER JOIN SIEBEL.S_ORG_EXT_X D
ON A.PAR_ROW_ID = D.ROW_ID
where 
a.OU_TYPE_CD = 'NHS Healthcare Organisation' 
AND b.WARRANTY_START_DT < TO_DATE('01/04/2010','DD/MM/YYYY')
AND C.TYPE = 'Regulated Activity'; 


Useful SQL to see all the Active Columns on a List Applet

SELECT
  a.name,
  c.name,
  e.name as List_name,
  e.field_name as Field_Name,
  f.row_id,
  g.type,
  g.join_name,
  g.col_name,
  g.mvlink_name
FROM siebel.s_applet a
LEFT OUTER JOIN siebel.s_appl_web_tmpl c ON a.row_id = c.applet_id
LEFT OUTER JOIN siebel.s_list d on A.row_id = d.applet_id
LEFT OUTER JOIN siebel.s_list_column e on d.row_id = e.LIST_ID
LEFT OUTER JOIN siebel.s_buscomp f on A.buscomp_name = f.NAME
LEFT OUTER JOIN siebel.s_field g on f.row_id = g.buscomp_id
WHERE a.name IN('Service Request List Applet')
 AND a.repository_id = '1-36VK-1'
 AND c.repository_id = '1-36VK-1'
 AND d.repository_id = '1-36VK-1'
 AND d.repository_id = '1-36VK-1'
 AND f.repository_id = '1-36VK-1'
 AND c.name = 'Edit List'
 AND e.HTML_TYPE IN ('Field','TextArea','CheckBox')
 AND e.INACTIVE_FLG = 'N'
 AND g.name = e.field_name

Working out if a field appears on any screen 
Select distinct
A.NAME AS VIEW_NAME
--B.WEB_TEMPLATE AS WEB_TEMPLATE,
--C.NAME AS APPLET_NAME
FROM Siebel.S_VIEW A
LEFT OUTER JOIN Siebel.S_VIEW_WEB_TMPL B
ON B.VIEW_ID = A.ROW_ID
LEFT OUTER JOIN Siebel.S_VIEW_WTMPL_IT C
ON C.VIEW_WEB_TMPL_ID = B.ROW_ID
WHERE C.NAME IN 
(-- SQL listing all List Columns
select 
A.NAME AS APPLET_NAME
from SIEBEL.S_APPLET A
LEFT OUTER JOIN SIEBEL.S_APPL_WEB_TMPL B
ON B.APPLET_ID = A.ROW_ID
LEFT OUTER JOIN SIEBEL.S_APPL_WTMPL_IT C
ON C.APPL_WEB_TMPL_ID = B.ROW_ID
WHERE 
--Code to find all relevant List Applet Controls
--Specifing the fields that are being searched for
((B.NAME = 'Edit List' AND (C.CTRL_NAME = 'Assigned To' OR C.CTRL_NAME = 'Owner') AND C.REPOS_TYPE = 'List Item')
OR
--Code to find all relevant Form Applet Controls
--Specifing the fields that are being searched for
(B.NAME = 'Edit' AND (C.CTRL_NAME = 'Assigned To' OR C.CTRL_NAME = 'Owner') AND C.REPOS_TYPE = 'FormattedHtml'))
)
--And additional filter on the View and it's name
AND A.NAME LIKE 'CQC%Enq%' OR A.NAME LIKE 'HC%Enq%'
ORDER BY A.NAME ASC

MAPs from LIST APPLET To BC To TABLE To COLUMN
select
Applet.NAME                           AS APPLET_NAME,
--AppletWebTemplate.NAME                AS WEB_TEMPLATE_NAME,
--AppletWebTemplateItem.CTRL_NAME       AS WEB_TEMPLATE_ITEM_CTRL_NAME,
--AppletList.NAME                       AS LIST_NAME,
--AppletList.ROW_ID                     AS LIST_ID,
--AppletListColumn.ROW_ID               AS APPLET_LIST_COLUMN_ROW_ID,
--AppletListColumn.LIST_ID              AS APPLET_LIST_COLUMN_LIST_ID,
--AppletListColumn.NAME                 AS LIST_COLUMN_NAME,
--AppletListColumn.DISPLAY_NAME_REF     AS DISPLAY_NAME_REF,
--SymbolicString.ROW_ID,
--SymbolicString.NAME                   AS SymbolicStringNAME,
--SymbolicStringTrans.STRING_VALUE    AS LABEL
CASE
    WHEN SymbolicStringTrans.STRING_VALUE IS NOT NULL THEN SymbolicStringTrans.STRING_VALUE
    ELSE AppletListColumn.DISPLAY_NAME
END                                   AS APPLET_FIELD_LABEL,
BusComp.NAME                          AS BUSCOMP,
Field.NAME                            AS FIELD_NAME,
BusComp.TABLE_NAME,
Field.COL_NAME,
--Field.COL_NAME
DBView.ALIAS AS DATABASE_VIEW,
DBViewColumn.ALIAS AS DATABASE_VIEW_COLUMN,
CONCAT(CONCAT(DBView.ALIAS,'_'),DBViewColumn.ALIAS) AS KEY
FROM SIEBEL.S_APPLET Applet
INNER JOIN SIEBEL.S_APPL_WEB_TMPL AppletWebTemplate ON AppletWebTemplate.APPLET_ID = Applet.ROW_ID
INNER JOIN SIEBEL.S_APPL_WTMPL_IT AppletWebTemplateItem ON AppletWebTemplateItem.APPL_WEB_TMPL_ID = AppletWebTemplate.ROW_ID
INNER JOIN SIEBEL.S_LIST AppletList ON AppletList.APPLET_ID = Applet.ROW_ID
INNER JOIN SIEBEL.S_LIST_COLUMN AppletListColumn ON AppletListColumn.LIST_ID = AppletList.ROW_ID
LEFT OUTER JOIN SIEBEL.S_SYM_STR SymbolicString ON AppletListColumn.DISPLAY_NAME_REF = SymbolicString.NAME
INNER JOIN SIEBEL.S_REPOSITORY Repository ON SymbolicString.REPOSITORY_ID = Repository.ROW_ID
LEFT OUTER JOIN SIEBEL.S_SYM_STR_INTL SymbolicStringTrans ON SymbolicStringTrans.SYM_STR_ID = SymbolicString.ROW_ID
INNER JOIN SIEBEL.S_BUSCOMP BusComp ON Applet.BUSCOMP_NAME = BusComp.NAME
INNER JOIN SIEBEL.S_FIELD Field ON Field.NAME = AppletListColumn.FIELD_NAME
INNER JOIN SIEBEL.S_TABLE DBView ON BusComp.TABLE_NAME = DBView.NAME
INNER JOIN SIEBEL.S_COLUMN DBViewColumn ON DBViewColumn.NAME = Field.COL_NAME
WHERE applet.NAME LIKE 'WP OES%List Applet'
AND applet.INACTIVE_FLG = 'N'
AND AppletListColumn.INACTIVE_FLG = 'N'
AND AppletWebTemplate.NAME = 'Edit List'
AND AppletList.NAME = 'List'
AND AppletWebTemplateItem.ITEM_NUM > 500
AND AppletWebTemplateItem.CTRL_NAME = AppletListColumn.NAME
AND Repository.NAME = 'Siebel Repository'
AND Field.BUSCOMP_ID = BusComp.ROW_ID
AND DBViewColumn.TBL_ID = DBView.ROW_ID
ORDER BY DBView.ALIAS DESC, DBViewColumn.ALIAS DESC
WORKFLOWS
SQL to find out if the current version of the Workflow.
Is the latest version in the Repository.
  
  SELECT  
          wdd.RoW_ID,
          wdd.created, 
          usr_crt.login created_login, 
          wdd.last_upd,
          usr_upd.login updated_login, 
          wdd.NAME  DEPLOYED_NAME, 
          wdd.REPOSITORY_VERSION  DEPLOYED_VERSION,
          wdd.deploy_status_cd  DEPLOYED_STATUS,
          REP_WF.NAME AS REP_NAME,
          REP_WF.VERSION  REP_VERSION,
          REP_WF.STATUS_CD  REP_STATUS
    FROM siebel.s_wfa_dploy_def wdd,
         siebel.s_user usr_crt,
         siebel.s_user usr_upd,
         SIEBEL.S_WFR_PROC REP_WF,
         SIEBEL.S_REPOSITORY REPOS
   WHERE wdd.created_by = usr_crt.row_id 
   AND wdd.last_upd_by = usr_upd.row_id
   AND REP_WF.NAME = concat(concat(wdd.NAME , ': '), wdd.REPOSITORY_VERSION)
   AND REP_WF.REPOSITORY_ID = REPOS.ROW_ID
   AND wdd.deploy_status_cd = 'ACTIVE'
   AND wdd.NAME NOT LIKE '%Simulation%'
   AND REPOS.NAME = 'Siebel Repository'

   AND REP_WF.STATUS_CD <> 'COMPLETED'


Running SQL a SCRIPT to generate results in DBMS Output Tab

























































DECLARE

  V_RESULT VARCHAR2(7);
  
BEGIN

  SELECT COUNT(*) INTO V_RESULT FROM SIEBEL.S_ACTIVITY_ATT
    WHERE TRUNC(CREATED) = TRUNC(SYSDATE) - 1;
  DBMS_OUTPUT.PUT_LINE('Activities: ' || V_RESULT);
  
  SELECT COUNT(*) INTO V_RESULT FROM SIEBEL.S_CONTACT_ATT
    WHERE TRUNC(CREATED) = TRUNC(SYSDATE) - 1;
  DBMS_OUTPUT.PUT_LINE('Contacts: ' || V_RESULT);
  
  SELECT COUNT(*) INTO V_RESULT FROM SIEBEL.S_SR_ATT
    WHERE TRUNC(CREATED) = TRUNC(SYSDATE) - 1;
    DBMS_OUTPUT.PUT_LINE('Enquiries: ' || V_RESULT);
  
  SELECT COUNT(*) INTO V_RESULT FROM SIEBEL.S_ACCNT_ATT
    WHERE TRUNC(CREATED) = TRUNC(SYSDATE) - 1;
    DBMS_OUTPUT.PUT_LINE('Organisations: ' || V_RESULT);
  
  SELECT COUNT(*) INTO V_RESULT FROM SIEBEL.S_OPTY_ATT
    WHERE TRUNC(CREATED) = TRUNC(SYSDATE) - 1;
    DBMS_OUTPUT.PUT_LINE('Processes: ' || V_RESULT);
  
  SELECT COUNT(*) INTO V_RESULT FROM SIEBEL.S_PROJ_ATT
    WHERE TRUNC(CREATED) = TRUNC(SYSDATE) - 1;
    DBMS_OUTPUT.PUT_LINE('Safeguarding: ' || V_RESULT);
  
END;

/


USING A SELECT STATEMENT AS A TABLE IN ANOTHER SELECT STATEMENT
SELECT DISTINCT EF.EVENT_ID,
      BAL.event_id As BANKING_ENTRY_EVENT_ID
  FROM EVENT_FUND@oes  EF
  INNER JOIN financial_doc_be_line_map@oes  DLM
  ON ef.sett_level_granularity = dlm.sett_level_granularity
  INNEr JOIN (select T1.*, ROW_NUMBER() 
    Over (PARTITION BY T1.financial_document_id, T1.financial_document_line_id ORDER BY creation_date ASC) as rn
     From event_banking_assoc_lines@oes  T1) BAL
  ON BAL.financial_document_id = dlm.bill_id
    AND BAL.financial_document_line_id = dlm.line_id
  WHERE EF.merchant_ledger_acc_type_cd = 'FUND'
  AND EF.invoiceable_ind = 'Y'
  AND bal.rn = 1) BE










Useful Script to find out if an RCR has failed:

ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MM-YYYY HH24:MI:SS';

SELECT DISTINCT JOB.ROW_ID AS JOB_ROW_ID,
       --ACTION.NAME, ACTION.DISPLAY_NAME,
       --PARENT_ACTION.NAME, PARENT_ACTION.DISPLAY_NAME,
       --PARAM_NAME.NAME,
       to_char((from_tz(to_timestamp(to_char(JOB.SCHED_START_DT, 'YYYY-MM-DD HH:MI:SS PM'), 'YYYY-MM-DD HH:MI:SS PM') ,'UTC')
at time zone 'Europe/London'),'HH24:MI:SS') AS START_TIME,
  INST.STATUS AS LAST_RI_STATUS,
       to_char((from_tz(to_timestamp(to_char(INST.ACTL_END_DT, 'YYYY-MM-DD HH:MI:SS PM'), 'YYYY-MM-DD HH:MI:SS PM') ,'UTC')
at time zone 'Europe/London'),'DD/MM/YYYY HH24:MI:SS') as LAST_RI_DATE,
       PARAM.VALUE AS WORKFLOW_NAME
FROM SIEBEL.S_SRM_REQUEST JOB, SIEBEL.S_SRM_REQ_PARAM PARAM, SIEBEL.S_SRM_ACT_PARAM PARAM_NAME,
     SIEBEL.S_SRM_ACTION ACTION, SIEBEL.S_SRM_ACTION PARENT_ACTION, SIEBEL.S_SRM_REQUEST INST
WHERE JOB.ROW_ID = PARAM.REQ_ID (+)
AND PARAM.ACTPARAM_ID = PARAM_NAME.ROW_ID (+)
AND PARAM_NAME.NAME = 'Workflow Process Name'
AND JOB.ACTION_ID = ACTION.ROW_ID (+)
AND ACTION.PAR_ACTION_ID = PARENT_ACTION.ROW_ID (+)
AND (PARENT_ACTION.NAME IN ('WfProcBatchMgr', 'WfProcMgr')
    OR ACTION.NAME IN ('WfProcBatchMgr', 'WfProcMgr'))
AND JOB.REQ_TYPE_CD = 'RPT_PARENT'
AND JOB.STATUS = 'ACTIVE'
AND JOB.ROW_ID = INST.PAR_REQ_ID (+)
AND INST.STATUS IN ('SUCCESS', 'ERROR')
AND INST.ACTL_END_DT = (
    SELECT MAX(ACTL_END_DT)
    FROM SIEBEL.S_SRM_REQUEST
    WHERE INST.PAR_REQ_ID = PAR_REQ_ID
    AND STATUS IN ('SUCCESS', 'ERROR'))
AND PARAM.VALUE <> 'CQC Doc Server Blocked'
ORDER BY to_char((from_tz(to_timestamp(to_char(JOB.SCHED_START_DT, 'YYYY-MM-DD HH:MI:SS PM'), 'YYYY-MM-DD HH:MI:SS PM') ,'UTC')
at time zone 'Europe/London'),'HH24:MI:SS');

--ORDER BY PARAM.VALUE ASC;



Response Groups

ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MM-YYYY HH24:MI:SS';

select 
        (CASE 
          WHEN  (A.SR_CAT_TYPE_CD = 'Notifications' AND C.ATTRIB_03 =  'To be Classified' AND C.ATTRIB_04 =  'To be Classified' AND A.SR_SUBTYPE_CD = 'Email')  THEN 'HSCA_Notifications/CQC CPI Enquiry Response Group'
          WHEN  (A.SR_CAT_TYPE_CD = 'Registration' AND C.ATTRIB_03 =  'Application' AND C.ATTRIB_04 =  'To be Classified' AND A.SR_SUBTYPE_CD = 'Email')  THEN 'HSCA_Applications/CQC Fees Response Group'
          WHEN  (A.SR_CAT_TYPE_CD = 'Registration' AND C.ATTRIB_03 =  'Guidance/Information' AND C.ATTRIB_04 =  'To be Classified' AND A.SR_SUBTYPE_CD = 'Email')  THEN 'HSCA_Registrations/CQC HSCA Reg Response Group'
          WHEN  (A.SR_CAT_TYPE_CD = 'Compliance' AND C.ATTRIB_03 =  'Provision of Evidence' AND C.ATTRIB_04 =  'To be Classified' AND A.SR_SUBTYPE_CD = 'Email')  THEN 'HSCA_Compliance/CQC HSCA Comp Response Group'
          WHEN  (A.SR_CAT_TYPE_CD = 'Corporate CQC' AND C.ATTRIB_03 =  'To be Classified' AND C.ATTRIB_04 =  'To be Classified' AND A.SR_SUBTYPE_CD = 'Email')  THEN 'Enquiries/CQC Enquiry Response Group'
          WHEN  (A.SR_CAT_TYPE_CD = 'Compliance' AND C.ATTRIB_03 =  'To be Classified' AND C.ATTRIB_04 =  'To be Classified' AND A.SR_SUBTYPE_CD = 'Email')  THEN 'Safeguarding/CQC Safeguarding Response'
        ELSE 'Unidentified'
        END) AS Mail_Box_Response_Group,
        Count(*)
FROM SIEBEL.S_SRV_REQ A,  
SIEBEL.S_SRV_REQ_X C
WHERE C.PAR_ROW_ID = A.ROW_ID
        AND  A.SR_CAT_TYPE_CD IN ('Notifications','Registration','Compliance','Corporate CQC')
        AND C.ATTRIB_03 IN ('To be Classified','Application','Guidance/Information','Provision of Evidence')
        AND C.ATTRIB_04 = 'To be Classified'
        AND A.SR_SUBTYPE_CD = 'Email'  
        AND A.SR_STAT_ID = 'Open'
        --Change the Date and Time to the appropriate value
        AND A.CREATED >= '01/01/2015 15:00:00'
        GROUP BY  
        (CASE 
          WHEN  (A.SR_CAT_TYPE_CD = 'Notifications' AND C.ATTRIB_03 =  'To be Classified' AND C.ATTRIB_04 =  'To be Classified' AND A.SR_SUBTYPE_CD = 'Email')  THEN 'HSCA_Notifications/CQC CPI Enquiry Response Group'
          WHEN  (A.SR_CAT_TYPE_CD = 'Registration' AND C.ATTRIB_03 =  'Application' AND C.ATTRIB_04 =  'To be Classified' AND A.SR_SUBTYPE_CD = 'Email')  THEN 'HSCA_Applications/CQC Fees Response Group'
          WHEN  (A.SR_CAT_TYPE_CD = 'Registration' AND C.ATTRIB_03 =  'Guidance/Information' AND C.ATTRIB_04 =  'To be Classified' AND A.SR_SUBTYPE_CD = 'Email')  THEN 'HSCA_Registrations/CQC HSCA Reg Response Group'
          WHEN  (A.SR_CAT_TYPE_CD = 'Compliance' AND C.ATTRIB_03 =  'Provision of Evidence' AND C.ATTRIB_04 =  'To be Classified' AND A.SR_SUBTYPE_CD = 'Email')  THEN 'HSCA_Compliance/CQC HSCA Comp Response Group'
          WHEN  (A.SR_CAT_TYPE_CD = 'Corporate CQC' AND C.ATTRIB_03 =  'To be Classified' AND C.ATTRIB_04 =  'To be Classified' AND A.SR_SUBTYPE_CD = 'Email')  THEN 'Enquiries/CQC Enquiry Response Group'
          WHEN  (A.SR_CAT_TYPE_CD = 'Compliance' AND C.ATTRIB_03 =  'To be Classified' AND C.ATTRIB_04 =  'To be Classified' AND A.SR_SUBTYPE_CD = 'Email')  THEN 'Safeguarding/CQC Safeguarding Response'
        ELSE 'Unidentified'

        END)

Referencing Database Links in SQL Statement to compare data sets between two separate Databases




SELECT
T2.ATTRIB_08      AS ACQUIRER_ATM_TERMINALS ,
T1.NAME           AS ACQUIRER_BIN ,
T2.ATTRIB_16      AS ACQUIRER_BI_ALLOCATION ,

T2.ATTRIB_18      AS ACQUIRER_DELIVERY_ROUTE ,
T1.DESC_TEXT      AS ACQUIRER_DESC ,
T2.ATTRIB_10      AS ACQUIRER_POS_TERMINALS ,
T2.ATTRIB_17      AS ACQUIRER_SCHEME_BUSINESS_ID ,
T2.ATTRIB_09      AS ACQUIRER_UAF_INDICATOR ,
T2.ATTRIB_35      AS COUNTRY_CD ,
T2.ATTRIB_26      AS VALID_FROM ,
T2.ATTRIB_27      AS VALID_TO,
T3.PARTY_UID     AS LCP_PARTY_ID,
T5.PARTY_UID     AS SCHEME_PARTY_ID,
T2.ATTRIB_11      AS ACQUIRER_NNSS_INDICATOR,
T2.ATTRIB_34      AS SCHEME_LIFE_CYCLE_CD
FROM
SIEBEL.S_USER@BA2.WORLDPAYTD.LOCAL T6, -- Created by User
SIEBEL.S_USER@BA2.WORLDPAYTD.LOCAL T7  -- Last upd by User
WHERE T1.ROW_ID=T2.PAR_ROW_ID
AND   T1.OU_TYPE_CD = 'ACQUIRER_BIN'
AND T1.PAR_OU_ID = T3.ROW_ID
AND T5.ROW_ID = T4.REL_PARTY_ID
AND T4.PARTY_ID = T1.ROW_ID
AND T1.CREATED_BY = T6.ROW_ID
AND T1.LAST_UPD_BY = T7.ROW_ID
AND T4.REL_TYPE_CD = 'ACQ_SCH'
MINUS
SELECT
T2.ATTRIB_08      AS ACQUIRER_ATM_TERMINALS ,
T1.NAME           AS ACQUIRER_BIN ,
T2.ATTRIB_16      AS ACQUIRER_BI_ALLOCATION ,
T2.ATTRIB_18      AS ACQUIRER_DELIVERY_ROUTE ,
T1.DESC_TEXT      AS ACQUIRER_DESC ,
T2.ATTRIB_10      AS ACQUIRER_POS_TERMINALS ,
T2.ATTRIB_17      AS ACQUIRER_SCHEME_BUSINESS_ID ,
T2.ATTRIB_09      AS ACQUIRER_UAF_INDICATOR ,
T2.ATTRIB_35      AS COUNTRY_CD ,
T2.ATTRIB_26      AS VALID_FROM ,
T2.ATTRIB_27      AS VALID_TO,
T3.PARTY_UID     AS LCP_PARTY_ID,
T5.PARTY_UID     AS SCHEME_PARTY_ID,
T2.ATTRIB_11      AS ACQUIRER_NNSS_INDICATOR,
T2.ATTRIB_34      AS SCHEME_LIFE_CYCLE_CD
FROM
SIEBEL.S_USER@BA1.WORLDPAYTD.LOCAL T6, -- Created by User
SIEBEL.S_USER@BA1.WORLDPAYTD.LOCAL T7  -- Last upd by User
WHERE T1.ROW_ID=T2.PAR_ROW_ID
AND   T1.OU_TYPE_CD = 'ACQUIRER_BIN'
AND T1.PAR_OU_ID = T3.ROW_ID
AND T5.ROW_ID = T4.REL_PARTY_ID
AND T4.PARTY_ID = T1.ROW_ID
AND T1.CREATED_BY = T6.ROW_I
AND T1.LAST_UPD_BY = T7.ROW_ID

AND T4.REL_TYPE_CD = 'ACQ_SCH'





Grabbing values from within XML - Part 1 = The SQL:


  SELECT AD.EVENT_ID,
        AD.EVENT_ADDENDUM_ID,
        NodePath,
        NodeValue
  FROM ADDENDUM_DATA AD,
     xmltable('
          for $i in $tmp/descendant::*
                 return <Element>
                                    <Path>{string-join($i/ancestor-or-self::*/name(), "/")}</Path>
                                    <Value>{$i/text()}</Value>
                              </Element>'
        passing AD.SC_ADDITIONAL_DATA AS "tmp" columns
        NodePath varchar2(255) path '//Path',
        NodeValue varchar2(100) path '//Value'
     )
  WHERE NodeValue is not null



Grabbing values from within XML - Part 2 - the XML



<PaymentPayload>
  <BTID>3665ca0b1aa74406b00b3b9f50cafd48</BTID>
  <WP8583>
    <MTI>1240</MTI>
    <D2>
      <S2>36078700000056</S2>
      <S1>U</S1>
    </D2>
    <D3>
      <S1>00</S1>
    </D3>
    <D4>00000008664</D4>
    <D12>
      <S1>150623</S1>
      <S2>185301</S2>
    </D12>
    <D14>1701</D14>
    <D22>
      <S1>C</S1>
      <S2>1</S2>
      <S3>9</S3>
      <S4>1</S4>
      <S5>0</S5>
      <S6>1</S6>
      <S7>F</S7>
      <S8>1</S8>
      <S9>1</S9>
      <S10>3</S10>
      <S11>4</S11>
      <S12>1</S12>
    </D22>
    <D23>001</D23>
    <D24>200</D24>
    <D37>VISAEU STANDARD PURC2</D37>
    <D38>100018</D38>
    <D39>
      <S2>00</S2>
    </D39>
    <D40>000</D40>
    <D42>10056634</D42>
    <D43>
      <S5>LON</S5>
      <S1>1-69UI</S1>
      <S2>31</S2>
      <S3>London</S3>
      <S4>E1 0HJ</S4>
      <S6>GBR</S6>
    </D43>
    <D48>
      <P1016>230615</P1016>
      <P1017>160211</P1017>
      <P508>VISAEU STANDARD PURC2</P508>
      <P1008>1</P1008>
      <P280>
        <S1>002</S1>
        <S2>150623</S2>
        <S3>00000000001</S3>
        <S4>00001</S4>
        <S5>3601</S5>
      </P280>
      <P1007>003601</P1007>
      <P1009>000001</P1009>
      <P1092>10</P1092>
      <P1232>82345678901234567890123456</P1232>
      <P1233>009</P1233>
      <P596>
        <S1/>
      </P596>
      <P552>01257 232510</P552>
      <P170>
        <S1>01257 232510</S1>
      </P170>
      <P175>www.PO4000173760.co.uk</P175>
      <P688>PO4000173760@gmail.com</P688>
      <P173>1-69UI</P173>
      <P2>DCI</P2>
      <P3>DCI</P3>
      <P158>
        <S1>DCI</S1>
        <S5>160211</S5>
        <S2>4</S2>
        <S3>826001</S3>
      </P158>
      <P1004>Y</P1004>
      <P1005>84200025540</P1005>
      <P1015>PO1400000001</P1015>
      <P595>
        <S2>0</S2>
        <S3>0</S3>
        <S4>0</S4>
        <S5>Y</S5>
        <S6>N</S6>
        <S7>N</S7>
        <S8>N</S8>
      </P595>
      <P1003>DC000</P1003>
    </D48>
    <D49>826</D49>
    <D55>
      <T5F2A>826</T5F2A>
      <T82>5C00</T82>
      <T95>0080000000</T95>
      <T9A>150127</T9A>
      <T9B>9B3B</T9B>
      <T9C>00</T9C>
      <T9F02>00000008664</T9F02>
      <T9F06>A0000000031010</T9F06>
      <T9F07>8C2C</T9F07>
      <T9F09>0083</T9F09>
      <T9F0D>1050000000</T9F0D>
      <T9F0E>E02800D800</T9F0E>
      <T9F0F>E020000000</T9F0F>
      <T9F10>06050A0390000000000000000000000000000000000000000000000000000000</T9F10>
      <T9F1A>250</T9F1A>
      <T9F26>796C82E233BBEB1B</T9F26>
      <T9F27>40</T9F27>
      <T9F33>204010</T9F33>
      <T9F34>420002</T9F34>
      <T9F35>22</T9F35>
      <T9F36>0022</T9F36>
      <T9F37>A1AFCAAF</T9F37>
      <T9F39>31</T9F39>
    </D55>
    <D26>5311</D26>
    <D41>P19-TID1</D41>
    <D20>GBR</D20>
    <D32>303638</D32>
    <D31>
      <S2>303638</S2>
      <S1>1</S1>
      <S4>91710000001</S4>
      <S5/>
    </D31>
    <D50>826</D50>
    <D71>1</D71>
  </WP8583>
</PaymentPayload>

CONVERTING A SINGLE ROW into multiple Columns!!!
I.E A, B, C (in a single row) becomes:
A
B
C



SELECT
  'CARD_DISPUTE_REQUEST' AS TYPE,
  WPNAME                 AS WPNAME,
  WPVAL                  AS WPVAL
FROM
(
  SELECT
    CAST (oes_event.EVENT_ID AS VARCHAR(255))                                               AS NAME,
    NVL (CAST (event_type.VAL AS VARCHAR(255)), ' ')                                        AS TYPE, -- 'Cardholder Name Address Check Event'
    NVL (CAST (oes_event_name_address_check.ASSOC_PAYER_TOKEN AS VARCHAR(255)), ' ')        AS ASSOC_PAYER_TOKEN,
    NVL (CAST (oes_event_name_address_check.SUPPLIER_TOKEN_NAME AS VARCHAR(255)), ' ')      AS SUPPLIER_TOKEN_NAME,
    NVL (CAST (oes_event_name_address_check.ADDRESS_TYPE_ID AS VARCHAR(255)), ' ')          AS ADDRESS_TYPE_ID,
    NVL (CAST (oes_event_name_address_check.ADDRESS_LINE1 AS VARCHAR(255)), ' ')            AS ADDRESS_LINE1,
    NVL (CAST (oes_event_name_address_check.ADDRESS_LINE2 AS VARCHAR(255)), ' ')            AS ADDRESS_LINE2,
    NVL (CAST (oes_event_name_address_check.ADDRESS_LINE3 AS VARCHAR(255)), ' ')            AS ADDRESS_LINE3,
    NVL (CAST (oes_event_name_address_check.ADDRESS_CODE AS VARCHAR(255)), ' ')             AS ADDRESS_CODE,
    NVL (CAST (oes_event_name_address_check.ADDRESS_REGION AS VARCHAR(255)), ' ')           AS ADDRESS_REGION,
    NVL (CAST (oes_event_name_address_check.ADDRESS_COUNTRY_CD AS VARCHAR(255)), ' ')       AS ADDRESS_COUNTRY_CD,
    NVL (CAST (oes_event_name_address_check.INFO_DELIVEY_CHANNEL AS VARCHAR(255)), ' ')     AS INFO_DELIVEY_CHANNEL,
    NVL (CAST (oes_event_name_address_check.ISS_CONTACT_TOKEN AS VARCHAR(255)), ' ')        AS ISS_CONTACT_TOKEN,
    NVL (CAST (oes_event_name_address_check.PAYER_TOKEN_CHK_ISS_REF AS VARCHAR(255)), ' ')  AS PAYER_TOKEN_CHK_ISS_REF,
    NVL (CAST (oes_event_name_address_check.NAME_ADDRESS_CHK_OUTCOME AS VARCHAR(255)), ' ') AS NAME_ADDRESS_CHK_OUTCOME,
    NVL (CAST (oes_event_name_address_check.ASSOC_PAYER_TOKEN_ISS_NO AS VARCHAR(255)), ' ') AS ASSOC_PAYER_TOKEN_ISS_NO,
    NVL (CAST (oes_event_name_address_check.ASSOC_PAYER_TOKEN_EXPIRY AS VARCHAR(255)), ' ') AS ASSOC_PAYER_TOKEN_EXPIRY,
    NVL (CAST (oes_event_name_address_check.CREATION_DATE AS VARCHAR(255)), ' ')            AS CREATION_DATE,
    NVL (CAST (oes_event_name_address_check.CREATED_BY  AS VARCHAR(255)), ' ')              AS CREATED_BY
FROM
             S_LST_OF_VAL                 event_type
  INNER JOIN EVENT@oes                    oes_event                    ON event_type.NAME    = CAST(oes_event.EVENT_TYPE_ID AS VARCHAR2(50))
  LEFT OUTER  JOIN EVENT_NAME_ADDRESS_CHECK@oes oes_event_name_address_check ON oes_event.EVENT_ID = oes_event_name_address_check.EVENT_ID
WHERE
      event_type.TYPE = 'WP_EVENT_TYPE'
--  AND event_type.NAME = '30'
  AND oes_event.EVENT_ID = 1004864
) temp
UNPIVOT (
  WPVAL FOR WPNAME IN
  (
    NAME,
    TYPE,
    ASSOC_PAYER_TOKEN,
    SUPPLIER_TOKEN_NAME,
    ADDRESS_TYPE_ID,
    ADDRESS_LINE1,
    ADDRESS_LINE2,
    ADDRESS_LINE3,
    ADDRESS_CODE,
    ADDRESS_REGION,
    ADDRESS_COUNTRY_CD,
    INFO_DELIVEY_CHANNEL,
    ISS_CONTACT_TOKEN,
    PAYER_TOKEN_CHK_ISS_REF,
    NAME_ADDRESS_CHK_OUTCOME,
    ASSOC_PAYER_TOKEN_ISS_NO,
    ASSOC_PAYER_TOKEN_EXPIRY,
    CREATION_DATE,
    CREATED_BY
  )
)





Tuesday, 1 October 2013

Stocks Calendar 2013-14

Finance Calender

Stocks watched:

Oil/Gas
  • Petrofac              (13.75 /13.50 -14.10 )
  • BP                       Suspended until end of Court Case
  • Bowleven
Property

Mining
Electricity 
Communication


Weekly Economics Events Diary for Validation

https://www.halifaxmarketwatch.co.uk/help_centre

US Futures Live

October 2013

4  Friday - US Unemployment Figures
17 Thursday - US Debt Ceiling Announcement




29-30 - US Federal Reserve Meeting (Tapering)
29 Tuesday - BP - Third Quarter results and dividend announcement - RESULT - Share Price jumped 20p on the morning of Tuesday 29th October 2013, overall jump was as increase of 5%.


November 2013

November 15


6  - BP 3rd Quarter Ex-Dividend

December 2013

06 - US Unemployment Figures




17-18 - US Federal Reserve Meeting (Associated with Summary of Economics Projection)







Santa Rally - 2013 - FTSE


Santa Rally - 2013 - DOW JONES





31 (Tuesday) - Colt Full Years Results 

January 2014

14 - TW Year End Trading Statement
15th (Wednesday) - US Government Funding to run out (as per the end of last year)]
22nd (Wedesday) - SSE Ex-Dividend Date
29-30 - US Federal Reserve Meeting (Tapering)

February 2014





Friday 7th February (Friday) - US Employment Figures/US Debt Ceiling Deadline
26 February (Wednesday) - PFC Full Trading Figures
5 - BP - Fourth Quarter results and dividend announcement (Estimate)

March 2014

Friday 7th (Friday) - US Employment Figures
1 - TW - Full Year Results/Trading Figures (Estimate)
18-19 - US Federal Reserve Meeting (Associated with Summary of Economics Projection)

April 2014

To Check: Urban Art Auction @ Bonhams
To Check: Urban Contemporary Art Auction @ Drewatts

4th -  (Friday) - US Employment Figures
17 - TW - Ex-Dividend (Estimate)
19 - PFC Dividend Record Date/Ex-Divided (Estimate)
30 - BP - First Quarter results and dividend announcement (Estimate)
29-30 - US Federal Reserve Meeting (Tapering)

May 2014

2nd May (Friday) - US Employment Figures
17 - VED - Interim Results
29-30 - US Federal Reserve Meeting (Tapering)

June 2014



July 2014

31st July - Taylor Wimpey - Half Year Trading Figures (Estimate)
29-30 - US Federal Reserve Meeting (Tapering)
30 - BP - Second Quarter results and dividend announcement (Estimate)

August 2014

7 - BP - Second Quarter ex-dividend (Estimate)

September 2014

16-17 - US Federal Reserve Meeting (Associated with Summary of Economics Projection)
20 - PFC Dividend Record Date/Ex-Divided (Estimate)

October 2014

28-29 - US Federal Reserve Meeting (Tapering)
30 - BP - Third Quarter results and dividend announcement (Estimate)

November 2014

7 - BP - Third Quarter ex-dividend (Estimate)
15 - VED - Interim Results

December 2014

16-17 - US Federal Reserve Meeting (Associated with Summary of Economics Projection)

Friday, 2 August 2013

CMD: How to check the time on Multiple Machines simultaneously using CMD

Creating and Saving a file with all the machine details

01. Create a new text file and for each machines IP add the following lines:

net time \\10.201.2.60
net time \\10.201.2.70
net time \\10.201.2.100
net time \\10.201.2.101
net time \\10.201.2.120
net time \\10.201.2.130
net time \\10.201.2.140
net time \\10.201.7.200
net time \\10.201.7.206
net time \\10.201.2.102
net time \\10.201.2.103
net time \\10.201.2.80
net time \\10.201.2.90
net time \\10.201.2.91
net time \\10.201.7.207

02. Save the file on your C Drive and call it Checktime.txt.
03. Change the file to a .bat file by changing the extension.

Running the .bat file 

04. Run the following commands:


05. You will find that a a file called TimeResults.txt will be generated in you're C Drive and if you open it will show all the machines and their times:

Current time at \\10.201.2.60 is 25/07/2013 11:20
Current time at \\10.201.2.70 is 25/07/2013 11:20
Current time at \\10.201.2.100 is 25/07/2013 11:20
Current time at \\10.201.2.101 is 25/07/2013 11:20
Current time at \\10.201.2.120 is 25/07/2013 11:20
Current time at \\10.201.2.130 is 25/07/2013 11:20
Current time at \\10.201.2.140 is 25/07/2013 11:20
Current time at \\10.201.7.200 is 25/07/2013 11:20
Current time at \\10.201.7.206 is 25/07/2013 11:20
Current time at \\10.201.2.102 is 25/07/2013 11:20
Current time at \\10.201.2.103 is 25/07/2013 11:20 
Current time at \\10.201.2.80 is 25/07/2013 11:20
Current time at \\10.201.2.90 is 25/07/2013 11:20
Current time at \\10.201.2.91 is 25/07/2013 11:20
Current time at \\10.201.7.207 is 25/07/2013 11:20

Note: An assumption is made that the machine that this command is run on has access to the other machines in the network i.e firewall rules allow access to  the machines is they are on different domains.

Friday, 28 June 2013

ADM: Adding Users to a new Responsibility + Handy SQL for Users/Views/Responsibilities

Using Application Deployment Manager to Deploy Responsibilities across Environments

Siebel Version: 8.1.1.9

I had a requirement recently to add thousands of Users to a particular view, I didn't have time to created a client side business service nor a .COM data loader so decided to use ADM. It turned out that ADM was the quickest and simplest way of meeting this requirement. 

I have added the steps taken:

STEP A - Generating the ADM XML from the Source Environment.


01. Create an Deployment Project
- Navigate to Site Map > Application Deployment Manager > Deployment Project
- Create a Record and for the Data Type Child Record select the Data Type 'Responsibility'.




02 Create a Deployment Session
- Navigate to Site Map > Application Deployment Manager > Deployment Session
- Create a record, pick in the Project Name you created in Step 1, select the Export to File flag.
- In the lower applet either select the Deployment Mode (Either Synchronise or Upsert).
- Provide a Deployment Filter to bring back the record you wish to export (e.g [Responsibility.Name] = 'Our Responsibility'), press the 'Validate Filter' button to ensure there are no Syntax Errors.



03 Generate and Export the XML.
- Click on the 'Deploy' Button to generate the ADM XML (Note: This will be exported to a folder on the Server)
- Supply folder to export the ADM XML too, this will be in the form of a network path. IMPORTANT: Ensure that this folder is accessible by the Siebel Application (i.e that that the folder is Shared).




STEP B - Manipulating the Generated XML.

So now Siebel will have generated three separate XML files, it is the second XML that we are interested in (as this is what we will manipulate and load back into Siebel (Target Environment).


          1-XXXXXX.ini
          1-XXXXXX_Responsibility.xml
          1-XXXXXX_Responsibility_des.xml


Changing the EAI Method
If you open up the XML up using Notepad++ we can actually change the EAI Method used against the Integration Object. If this is a new Responsibility with new Views/Users you most probably want 'Synchronize', in my case I needed to add a few thousand Users to an existing Responsibility so I used 'Upsert'.



Manipulating the XML Definition of Users

Siebel out the box will spit out the XML Definition of the User IC containing many fields that we simply don't need, in my case I had a thousands of Users to add with just their LOGIN ID's to identify them. So I needed to adjust the User XML definition so that I just needed to supply the LOGIN details and Siebel would still process the record.

So this is what I did:

          (a) Rip out all the XML bwtween <ListOfUser> and </ListOfUser>, thus there are no Users in the XML.
          Note: Incidentally if you want to remove all the Users against a Responsibility, just run a 
          Synchronize with no Users and this is a very quick way of disassociating a significant number of 
          users from a Responsibility.



           (b) Re-Format the XML for Users and add it back in
            We can use the following XML to define each User where the User Login is SIEBELUSER1:

<User><_sblesc_und_undPROPERTIES_und_und><Login_spcName>
SIEBELUSER1</Login_spcName><Login_spcDomain></Login_spcDomain></_sblesc_und_undPROPERTIES_und_und></User>


   
        One can regenerate the XML for thousand if Users by using Excel to concatenate the Left Hand side of the
        XML, followed by the User Login (taking case that there are no spaces caught up in the XML) and then the
        Right hand side of the XML.

        This re-generated XML excel can be pasted back into the original Responsibility XML.







     The full XML for each User record should show (once re-indented using Notepad++): 

        


STEP C - Loading the updated XML into the Target Environment.

To load the XML back into Siebel navigate back Site Map > Application Deployment Manager > Deployment Sessions. On the Deployment Sessions List Applet click on Menu Button > Deploy from Local File, pick the file that you generated in Step B.





SQL to help withs Users/Views/Responsibilities

SQL to list all Views that are associated to a Responsibility:

 select A.NAME,
 S_APP_VIEW.NAME
 from  SIEBEL.S_RESP A
 left outer join SIEBEL.S_APP_VIEW_RESP C
                  on A.ROW_ID = C.RESP_ID
 left outer join SIEBEL.S_APP_VIEW
                  on C.VIEW_ID = S_APP_VIEW.ROW_ID
 where A.NAME in ('Any Old Resp 1', 'Any Old Resp 2')


SQL to list all Responsibilities associated to a View/s:

 select A.NAME,
 S_RESP.NAME
 from  SIEBEL.S_APP_VIEW A
 left outer join SIEBEL.S_APP_VIEW_RESP C
                  on A.ROW_ID = C.VIEW_ID
 left outer join SIEBEL.S_RESP
                  on C.RESP_ID = S_RESP.ROW_ID
 where A.NAME in ('Any Old View 1''Any Old View 2')


SQL to list all  Responsibilities used by specified Users
(Where the Users ID are Supplied)

 select A.NAME,
 count(*)
 from
 SIEBEL.S_RESP A
 left outer join  SIEBEL.S_PER_RESP C
                 on  A.ROW_ID = C.RESP_ID
 left outer join  SIEBEL.S_USER
                 on  C.PER_ID = S_USER.ROW_ID
where S_USER.LOGIN  in ('User1', 'User2', 'User2', 'User3')
Group By A.NAME


select A.NAME
 from  SIEBEL.S_RESP A
 left outer join  SIEBEL.S_PER_RESP C
                 on  A.ROW_ID = C.RESP_ID
 left outer join  SIEBEL.S_USER
                 on  C.PER_ID = S_USER.ROW_ID
where S_USER.LOGIN  in ('User1')
ORDER BY NAME ASC

SQL to list the number of Users using a Responsibility
(Where the Users ID are Supplied)

 select A.NAME,
 count(*)
 from
 SIEBEL.S_RESP A
 left outer join  SIEBEL.S_PER_RESP C
                 on  A.ROW_ID = C.RESP_ID
 left outer join  SIEBEL.S_USER
                 on  C.PER_ID = S_USER.ROW_ID
where A.NAME  in ('Siebel Responsibility')

Group By A.NAME


SQL to list all Users by Login using a Responsibility
(Where the Users ID are Supplied)

 select
   A.NAME,
 
 S_USER.LOGIN from  SIEBEL.S_RESP A
 left outer join  SIEBEL.S_PER_RESP C
                 on  A.ROW_ID = C.RESP_ID
 left outer join  SIEBEL.S_USER
                 on  C.PER_ID = S_USER.ROW_ID
where A.NAME  in ('Siebel Responsibility')




Does a User have a Particular View

   select
   A.NAME,
   D.FST_NAME,
   D.LAST_NAME,
   JOB_TITLE,
  F.LOGIN from  SIEBEL.S_RESP A
 left outer join  SIEBEL.S_PER_RESP C
                 on  A.ROW_ID = C.RESP_ID
 left outer join  SIEBEL.S_USER F
                 on  C.PER_ID = F.ROW_ID
left outer join SIEBEL.S_CONTACT D
 on F.PAR_ROW_ID = D.ROW_ID
where A.NAME LIKE '%xyz%'


Wednesday, 5 June 2013

Siebel F9 Integration with Siebel 8.1.1.4 Onwards via Outlook 2007 / 2010
This information is originally provided with Oracle Document ID 1409093.1

This document outlines the instructions needed to integration Siebel’s F9 Email functionality with Microsoft Outlook 2007 and 2010, please follow all instructions and also check other referenced knowledge items in the parent knowledge document.

Without this configuration if you instigate an outlook email via the F9 functionality in Siebel, pick an email template and subsequently update the email Title/Body and the

Note: There is an accompanying bit of VBA Code that can be found along with Oracle Document ID 1409093.1 that is not included in this blog, the solution will not work without the code. You can find the code if you look up the Document ID on Oracle Supportweb.

1. After opening Outlook, Choose Tools -> Options -> [Mail Format] tab
   a. Choose RICH TEXT under ‘Compose in this message format’




2. Click “International Options
     a. Uncheck “Auto select encoding for outgoing messages”
     b. In Preferred encoding for outgoing messages, choose “Unicode (UTF-8)” (Optional)




3. Go to Tools -> Forms > Design a Form…
    a. Look in “Standard Forms Library” and choose Message, click Open



The newly created Message Form should appear like the following -





4. In the Forms Designer within the Developer tab, in the Form group, choose “View Code




5. Refer back to the Knowledge Article, and open attachment Form-Script.txt
    a. Copy and Paste the entire contents of the VBScript “Form-Script.txt” into the script editor
    b. Choose File -> Close
    [Note: I have not exposed the script that needs to be added]




6. Returning back to the Form Designed, choose the ‘All Fields’ tab.




7. Click on the ‘New’ button in the lower-left corner
a. Enter “Activity ID” for the Name





8. Repeat the steps from step 7.a to create the following user-defined fields and enter temp into their values. Please note that you MUST enter some temporary value




9. Now from the “Select From” dropdown list, choose “User-defined fields in this item” and THEN REMOVE the values for all the user-defined fields you’ve entered in the last step
(Remove the temporary value, such as ‘temp’ so that the Value is blank) 
(Note: The SiebelEmailFormat field is only applicable to versions greater than 7.5.3)




10. Click on the Properties tab
     a. Enter a version number in “Version”, such as 1.0
     b. Verify that “Send form definition with item” is Unchecked
     c. Proceed to “File -> Save As…” to save it as an Outlook Template
Publish Outlook Form using the Outlook Template









Publish Outlook Form using the Outlook Template


11. Within the Developer Tab in the Forms Designer, click Publish then Publish Form As
     a. Click Publish





12. If you see the following popup, select YES to over-write existing form




13. Close the Outlook window. If you see the following popup, CLICK NO as you DO NOT want to save this email draft.





Additional Information can be found in: How to Configure and Setup F9 [File > Send Email] Microsoft Outlook Integration (Doc ID 1140543.1)