יום שני, 16 בדצמבר 2013

Query Issue in Siebel Open UI 8.1.1.11

There is an issue with Siebel open UI 8.1.1.1 . When you query a record, OpenUI displays records. But you cannot drill-down or edit that record, even though you have all privileges.

steps to reproduce.
got to any list applet, Click on query, Press "Enter" try to drill-down. This drill-down works only if that record is current record.
or
Try to navigate by clicking next record, you cannot, you have to use next/previous button

Temporary Solution:
Instead of pressing enter click on "Go" Button.




יום חמישי, 12 בדצמבר 2013

Custom File Upload Applet Based On Class CSSSWEFRImpExp / CSSSWEFRImpExp Fails

We have an Import Button in an Applet, on clicking that button, a small popup applets comes and we can upload CSV which is to be imported in to parent applet. This functionality works well in HI mode. But this functionality fails in OpenUI.
Oracle support says this issues addressed in 8.1.1.11, but still I am getting error.

We can Implement this feature with some tricks.

lets create a button on applet and give method name as "FilePopup". And make sure that CanInvoke is true for this method.



function WebApplet_PreCanInvokeMethod (MethodName, &CanInvoke)
{
    if(MethodName == "FilePopup")
    {
            CanInvoke="TRUE";
            return (CancelOperation);
    }
    return (ContinueOperation);

Now open Applet Browser script. 


function Applet_PreInvokeMethod (name, inputPropSet)
{
    switch(name)
    {
        case "FilePopup":
        var ShowModalOptions= "dialogHeight:150px;dialogLeft:100px;dialogWidth:350px;scrollbars:no";
        var intRet = theApplication().ShowModalDialog ("FileImport.htm", "", ShowModalOptions);
       
        var Bc = this.BusComp();
        var csvval=intRet.split("|");
       
        for(var j=0;j<csvval.length-1;j++){
            this.InvokeMethod("NewRecord");
            var csvvalue=csvval[j].split(",");
            Bc.SetFieldValue("First Name",csvvalue[0]);
            Bc.SetFieldValue("Last Name",csvvalue[1]);
            Bc.SetFieldValue("Age",csvvalue[2]);
            Bc.SetFieldValue("Sex",csvvalue[3]);
        }

        return ("CancelOperation");
        break;

        default:
        return ("ContinueOperation");
        break;
    }
    return ("ContinueOperation");
}


Next step is creating an HTML file. Copy the below code and save it as  "FileImport.htm"
in Webserver as well as siebel server. ( \Client\PUBLIC\ and \siebsrvr\WEBMASTER\ )

<html>
</head>
<script language="javascript" src="23030/scripts/3rdParty/jquery.js"></script>
<script>
$(document).ready(function(){

$("#filename").change(function(e) {
var ext = $("#filename").val().split(".").pop().toLowerCase();

if($.inArray(ext, ["csv"]) == -1) {
alert('Upload CSV');
return false;
}

if (e.target.files != undefined) {
var reader = new FileReader();
reader.onload = function(e) {
var csvval=e.target.result.split("\n");
var inputrad="";
for(var j=1;j<csvval.length-1;j++){
    var csvvalue=csvval[j].split(",");
    for(var i=0;i<csvvalue.length;i++)
    {
    var temp=csvvalue[i];
    if(inputrad==""){
         inputrad=temp+"";
    }else if(i!==0){
         inputrad=inputrad+","+temp+"";
    }else{
        inputrad=inputrad+""+temp;
    }
   
   
    }
    inputrad =inputrad+"|";
}

window.returnValue = inputrad;
return inputrad;
};
reader.readAsText(e.target.files.item(0));

}


});
$("#import").click(function(){
    self.close();
});
})
</script>
</head>
<body>
<input type="file" name="filename" id="filename">
    <div id="csvimporthint_1">
        <table border="1" id="csvimporthint">
        </table>
    </div>
<input type="button" id="import" value="import">

</body>
</html>

compile applet and run GenB script.
Click on Import button and test this functionality.

How to add custom JavaScript files in Siebel OpenUI 8.1.1.11

Siebel OpenUI 8.1.1.11 comes more more systematic way to manifest the custom JavaScript.
In the Administration level, we have options to add files as well as map those files with applets/views/Applications.

First we need to add our custom files in Manifest files

Now we can map those files with our Application /Applet


Authentication Business Service

Most people want security in this world. So whatever piece you design, Authentication becomes the key aspect. There are times when you want to authenticate whether the user-in-context is valid siebel user or not without actually logging into the system. This type of requirement is typical in Mobile Solutions using HTML5 and siebel webservices.

Here I unearth one more hidden gem of siebel, "Authentication Business Service". This magical service authenticates user against siebel irrespective of your security authentication mechanism. Be it database or LDAP it will return you valid siebel user name else invalid user/password error.The method is "Authenticate".  It accepts three input parameters:

1 - User Name - User Name to be authenticated in siebel
2 - Password - Password of the user
3 - GetPrivateCredentials - Y OR N based on the requirement.  If set to Y it will result user name in "Siebel User Name" output parameter.

One can see its usage in "LS Medical User Verification" workflow to get better feel of it. You can create web service based on this BS and can rest assured of your authentication approach. Hope it helps.

Happy Authentication!!