If IsUserInRole("CS - Student") Then
Local Rowset &rs2;
&rs2 = GetRowset(Scroll.L_MINOR_CRSES);
For &i = 1 To &rs2.ActiveRowCount
rem WinMessage("here");
&rs2(&i).L_MINOR_APP_WRK.CRSE_GRADE_OFF.Visible = False;
End-For;
End-If;
If IsUserInRole("CS - Student") Then
Local Rowset &rs2;
&rs2 = GetRowset(Scroll.L_MINOR_CRSES);
For &i = 1 To &rs2.ActiveRowCount
rem WinMessage("here");
&rs2(&i).L_MINOR_APP_WRK.CRSE_GRADE_OFF.Visible = False;
End-For;
End-If;
Initialize
variable to Y where Found is the name of the variable
<?xdoxslt:set_variable($_XDOCTX,
‘Found’, ‘Y’)?>
Print
the Variable value
<?xdoxslt:get_variable($_XDOCTX,’Found’)?>
Compare
two variables
<?if:xdoxslt:get_variable($_XDOCTX,’counter’)
= xdoxslt:get_variable($_XDOCTX,’tot_lines’)?>
Conditions
Matched, You may proceed
<?end
if?>
Conditional text using ‘if’ statement
Use “if” statements to customize text in your
report. As an example, for the sentence ‘The document is reviewed’, we can
add the word ‘not’ depending on the value of a field named STATUS.
Sample: The document is <?if@inlines:STATUS='Overdue'?>not<?end
if?> reviewed.
Result: If the STATUS is ‘Overdue’ the text will read ‘The document is not
reviewed’. Otherwise, it will read ‘The document is reviewed
We
can use the @inlines command to force the template to lay the text out
horizontally across the page rather than down the page.
<ROOT>
<ROW><name>Mike</name>
</ROW>
<ROW><name>Max</name></ROW>
<ROW><name>Nick</name></ROW>
</ROOT>
<?for-each@inlines:/ROOT/ROW?><?name?>
<?end for-each?>
Output
: Mike Max Nick
Adding
@inlines makes the elements to be displayed without line break.
?for-each:/ROOT/ROW?><?name?>
<?end for-each?>
Output
: Mike
Max
Nick
BI Publisher: Conditional Format
This example will set the row background to red and font
color to white for records where Status is equal to ‘Quote_Received’.
<?if@row:STATUS=’Quote_Received’?>
<?attribute@incontext:background-color;’Red’?>
<?attribute@incontext:color;’White’?>
<?end if?>
ifelse
<?xdoxslt:ifelse(condition,true,false)?>
<?xdoxslt:ifelse(A.DESCRSHORT = 'CNG', 'two', 'one')?>
If Then Else
The following statement tests the AMOUNT element value. If the value is greater than 1000, show the word "Higher"; if it is less
than 1000, show the word "Lower"; if it is equal to 1000, show "Equal":
<?xdofx:if AMOUNT > 1000 then 'Higher'
else
if AMOUNT < 1000 then 'Lower'
else
'Equal'
end if?>
<?xdofx:if CB_INV_TRNSTYP='D' then
<?xdoxslt:set_variable($_XDOCTX,'DB',CB_INV_AMOUNT)?>
else
<?xdoxslt:set_variable($_XDOCTX,'DB',0.00)?>endif?>
OR
<?if:CB_INV_TRNSTYP=’D’?><?xdoxslt:set_variable($_XDOCTX,’DB’,CB_INV_AMOUNT)?><?end
if?><?if:CB_INV_TRNSTYP!=’D’?><?xdoxslt:set_variable($_XDOCTX,’DB’,0.00)?><?end
if?>
Using DBMS_LOB.SUBSTR(field_name,250,1) to convert to varchar, field_name is the CLOB column .
Format Current Date
Date: <?xdoxslt:sysdate(‘DD-MON-YYYY HH24:MI’)?>
Format Date Variable
<?format-date:A.CLASS_ATTEND_DT;'DD-MON-YYYY'?>
I’ve got a custom AWE process, and when I try to add an Ad Hoc reviewer , I click the + button, pick a person, and everything looks fine. But when I click the standard Save button, the Ad Hoc approver disappears. On the other hand, if I click the Approve button, the process moves forward and saves the Ad Hoc reviewer.
I got this to work. If you look at the class EOAW_CORE:ENGINE:AppInst you can see this comment.
/** Has this approval process instance been saved? The process is automatically saved upon launch (and upon approve/deny, etc.–see SaveAdHocs(), below), but may also be saved by calling the Save() method explicitly. This can be necessary when users add ad-hoc approvers while previewing the process, for instance. */
At first I tried
import EOAW_CORE:LaunchManager;
import EOAW_CORE:ApprovalManager;
Declare Function createStatusMonitor PeopleCode EOAW_MON_WRK.EOAW_FC_HANDLER FieldFormula;
Component string &c_apprAction;
Component EOAW_CORE:LaunchManager &c_aweLaunchManager;
Component EOAW_CORE:ApprovalManager &c_aweApprManager;
If (L_MINOR_APP_FRM.L_MINOR_ACTV.Value = "Y") Then
Local Record &headerRec = GetRecord(Record.L_MINOR_APP_FRM);
Local boolean &isApprover;
Local number &resp;
Evaluate &c_apprAction
When "A"
&c_aweApprManager.AddComments(%OperatorId, &headerRec, L_MINOR_APP_WRK.COMMENTS.Value);
&c_aweApprManager.DoApprove(&headerRec);
L_MINOR_APP_WRK.COMMENTS.Visible = False;
L_MINOR_APP_FRM.L_MIN_CRDNTR_CNFRM.DisplayOnly = True;
Break;
When "D"
&c_aweApprManager.AddComments(%OperatorId, &headerRec, L_MINOR_APP_WRK.COMMENTS.Value);
&c_aweApprManager.DoDeny(&headerRec);
L_MINOR_APP_WRK.COMMENTS.Visible = False;
L_MINOR_APP_FRM.L_MIN_CRDNTR_CNFRM.DisplayOnly = True;
Break;
When "S"
&c_aweApprManager.AddComments(%OperatorId, &headerRec, L_MINOR_APP_WRK.COMMENTS.Value);
L_MINOR_APP_FRM.L_MIN_CRDNTR_CNFRM.DisplayOnly = True;
L_MINOR_APP_WRK.COMMENTS.Visible = False;
If &c_aweApprManager.hasAppInst Then
&c_aweApprManager.the_inst.Save();
End-If;
Break;
End-Evaluate;
If &c_aweApprManager.hasAppInst Then
&isApprover = &c_aweApprManager.hasPending;
createStatusMonitor(&c_aweApprManager.the_inst, "D", Null, False);
L_MINOR_APP_WRK.DENIAL_BTN.DisplayOnly = True;
L_MINOR_APP_WRK.APPROVE_BTN.DisplayOnly = True;
L_MINOR_APP_WRK.SAVEBTN.DisplayOnly = True;
End-If;
End-If;
Certain approver is absent or could not approve the step on time (there is a timeout). So a special user could have the ability to modify ("bend") the current approval workflow in this special case. This is called adhoc approver.
In my case, AWE will grant a user the ability to modify the workflow if that user has enough permissions to do that (an specific role called "L_MINOR_APP_CORDINATOR_APRVR").
created a custom application package to handle this feature. The package will re-implement some methods.
import EOAW_MONITOR:ADHOC_OBJECTS:adhocAccessLogicBase;
import EOAW_CORE:ENGINE:StepInst;
import EOAW_CORE:ENGINE:StageInst;
class L_AdHocClass extends EOAW_MONITOR:ADHOC_OBJECTS:adhocAccessLogicBase
method allowInsert(&oprid As string, &stepBefore As EOAW_CORE:ENGINE:StepInst, &stepAfter As EOAW_CORE:ENGINE:StepInst) Returns boolean;
method allowDelete(&oprid As string, ¤tStep As EOAW_CORE:ENGINE:StepInst) Returns boolean;
method allowNewPath(&oprid As string, &stage As EOAW_CORE:ENGINE:StageInst) Returns boolean;
method allowRequestInfo() Returns boolean;
private
method isWorkFlowAdmin(&oprid As string) Returns boolean;
end-class;
method allowInsert
/+ &oprid as String, +/
/+ &stepBefore as EOAW_CORE:ENGINE:StepInst, +/
/+ &stepAfter as EOAW_CORE:ENGINE:StepInst +/
/+ Returns Boolean +/
/+ Extends/implements EOAW_MONITOR:ADHOC_OBJECTS:adhocAccessLogicBase.allowInsert +/
Return %This.isWorkFlowAdmin(&oprid);
end-method;
method allowDelete
/+ &oprid as String, +/
/+ ¤tStep as EOAW_CORE:ENGINE:StepInst +/
/+ Returns Boolean +/
/+ Extends/implements EOAW_MONITOR:ADHOC_OBJECTS:adhocAccessLogicBase.allowDelete +/
If (%Super.allowDelete(&oprid, ¤tStep)) Then
Return True;
Else
Return %This.isWorkFlowAdmin(&oprid);
End-If;
end-method;
method allowNewPath
/+ &oprid as String, +/
/+ &stage as EOAW_CORE:ENGINE:StageInst +/
/+ Returns Boolean +/
/+ Extends/implements EOAW_MONITOR:ADHOC_OBJECTS:adhocAccessLogicBase.allowNewPath +/
Return False;
end-method;
method allowRequestInfo
/+ Returns Boolean +/
/+ Extends/implements EOAW_MONITOR:ADHOC_OBJECTS:adhocAccessLogicBase.allowRequestInfo +/
Return False;
end-method;
method isWorkFlowAdmin
/+ &oprid as String +/
/+ Returns Boolean +/
Local string &is_admin;
Local string &strRol = "L_MINOR_APP_CORDINATOR_APRVR";
If (%Component = "L_MINOR_APP_APRVL") Then
SQLExec("SELECT ROLENAME FROM PSROLEUSER WHERE ROLEUSER = :1 AND ROLENAME = :2", &oprid, &strRol, &is_admin);
Return (All(&is_admin));
Else
Return False;
End-If;
end-method;
&string = MsgGetExplainText(10001, 5, "Error Message", L_MINOR_CRSES.DESCR.Value);
&string1 = MsgGetExplainText(99999, 1, """");
Error (&string);