Saturday, 16 January 2016

PL/SQL document: Workflow Notification with Dynamic HTML Body using PLSQLCLOB.

How to Call PLSQLCLOB in oracle workflow to show notifications.

Declare

l_documnt_id VARCHAR2(150);
l_item_key Number ;

Begin

----set values as per requirement for l_document_id .

 apps.wf_engine.createprocess('XXINVWF',
                                     l_item_key,
                                     'PRC',
                                     null,
                                     null);
   apps.wf_engine.setitemattrtext(itemtype => 'XXINVWF',
                                                     itemkey  => l_item_key,
                                                     aname    => 'ATTRIBUTE_NAME',
                                                     avalue   => 'PLSQLCLOB:XX__PKG.Procudres_prc/XXINVWF:' ||
                                                     l_documnt_id);

apps.wf_engine.startprocess('XXINVWF', l_item_key);
End ;

Procedure inside package xx_pkg body 

procedure Procudres_prc(document_id   in varchar2,
                                     display_type  in varchar2,
                                     document      in out nocopy clob,
                                     document_type in out nocopy varchar2) is
  
    
  
    l_document varchar2(32000) := '';
    l_wh_mngr  varchar2(150);
    l_mt_mngr  varchar2(150);
    l_OU_ID    number;
    nl         varchar2(1) := fnd_global.newline;
    curr_len   number := 0;
    prior_len  number := 0;
  
    l_entity_id number;
    l_item_type wf_items.item_type%type;
    l_item_key  wf_items.item_key%type;
  
    cursor cur_nonitems (p_wh_mang varchar2, p_mt_mang varchar2, P_Operating_unit number)
    is
   
  select col1,col2,col3 from dual ;
  
  begin
  
    dbms_output.put_line('START');
  
    select substr(document_id, 1, instr(document_id, '-') - 1)
      INTO l_wh_mngr
      from dual;
    select substr(document_id,
                  instr(document_id, '-') + 1,
                  instr(document_id, '/') - instr(document_id, '-') - 1)
      INTO l_mt_mngr
      from dual;
  
    select to_number(substr(document_id, instr(document_id, '/') + 1))
      INTO l_OU_ID
      from dual;
     
     
  
    --Table structure Starts
    l_document := nl || nl || '<!-- NONMOV_ITEM_DET -->' || nl || nl ||
                  '<P><B>';
  
     
    l_document := l_document || nl ||
                  '<TABLE width=100% border=1 cellpadding=1 cellspacing=0 summary="' || '' ||
                  '"> ' || nl;
  
    l_document := l_document || '<TR>' || nl;
  
    l_document := l_document ||
                  '<TH  class="x1r x4j"  scope="col" width="1%" align="LEFT" valign="baseline" id="Col1">' ||
                  'رمز المستودع' || '</TH>' || nl;
  
    l_document := l_document ||
                  '<TH  class="x1r x4j"  scope="col" width="1%" align="LEFT" valign="baseline" id="col2">' ||
                  'اسم المستودع' || '</TH>' || nl;
  
    l_document := l_document ||
                  '<TH  class="x1r x4j" scope="col" width="10%" align="LEFT" valign="baseline"  id="col3">' ||
                  'رقم الصنف' || '</TH>' || nl;
  
    l_document := l_document || '</TR>' || nl;
  
    --Table structure Ends
  
    --Data starts
  
    for i in cur_nonitems (l_wh_mngr,l_mt_mngr,l_OU_ID)
     loop
    
      l_document := l_document || '</TR>' || nl;
    
      l_document := l_document || '<TD nowrap headers="col1">' ||
                    nvl(to_char(i.col1), '&nbsp') || '</TD>' || nl;
    
      l_document := l_document || '<TD nowrap headers="col2">' ||
                    nvl(to_char(i.col2), '&nbsp') || '</TD>' || nl;
    
      l_document := l_document ||
                    '<TD nowrap headers="col3">' ||
                    nvl(to_char(i.col3), '&nbsp') || '</TD>' || nl;
    
     
    
      wf_notification.writetoclob(document, l_document);
    
      l_document := null;
    
    end loop;
  
    l_document := l_document || '</TABLE></P>' || nl;
  
  end Procudres_prc;