Saturday, May 28, 2011

PEOPLECODE HELP BITS 4

Function Delay(&seconds As number, &BoId As number) Returns boolean;
        ;
   &jCls = GetJavaClass("java.lang.Thread");
        &WaitTill = AddToDateTime(%Datetime, 0, 0, 0, 0, 0, &seconds);
   While &WaitTill > %Datetime
         /*Check every one Second time*/
      SQLExec("Select count(*) from Table ABC where COL= :1", &id, &IdCheck);
      If &IdCheck> 0 Then
         Return True;
      Else
   GetJavaClass("java.lang.Thread").sleep(2000); /*Sleep takes Millis.2000 millis equals 2 seconds*/
    End-If;
   End-While;
   Return False;
End-Function;

Friday, March 25, 2011

PeopleCode Help Bits 3

If you need to Validate Email Address Fields for Strange inputs, here is the one that helps.

method ValidateEmailAddress
   /+ &email as String +/
   /+ Returns String +/
   Local number &nReason, &k;
   /*Check for Strange Chars.~ ! @ # $ % ^ & * ( )  + { } | <   > ? : " /  `  =    ;  ' ,  [   ]   \*/
   Local array of string &astrEmailChecker = %This.buildCheckArray();
   For &k = 1 To &astrEmailChecker.Len;
      If Find(&email, &astrEmailChecker [&k]) = 0 Then
         Return &astrEmailChecker [&k];
      End-If;
   End-For; 
   /*check for numbers in the predomain string e.g predomain@domain.com*/
   Local number &nATPos = Find("@", &email);
   Local string &sEmlPre@ = Substring(&email, 1, &nATPos - 1); 
   /*Check for all numbers*/
   If IsDigits(&sEmlPre@) Then
      /* do error processing */
      Return "Digits in email before @ sign."
   Else
      /* do processing */
   End-If;
   /*check for Dot*/
   Local string &sEmailDomain = Substring(&email, &nATPos + 1, Len(&email));
   Local number &nPeriodPos = Find(".", &sEmailDomain, 2);
   Local string &sEmlPost@ = Substring(&sEmailDomain, 1, &nPeriodPos - 1);
   If &nATPos = 0 Then
      Return "Email do not contain @ sign in the email.";
   End-If;
   If &nATPos = 0 Or
         &nPeriodPos = 0 Then
      Return "Email do not contain . after @ sign in the email.";
   End-If;
   If IsDigits(&sEmlPost@) Then
      /* do error processing */
      Return "Digits in email after @ sign and before dot.";
   Else
      /* do processing */
   End-If;
   Return "OK";
end-method;
method buildCheckArray
   /+ Returns Array of String +/
   Local array of string &astrEmail = CreateArrayRept("", 0);
   &astrEmail.Push("~");
   &astrEmail.Push("!");
   &astrEmail.Push("@");
   &astrEmail.Push("#");
   &astrEmail.Push("$");
   &astrEmail.Push("%");
   &astrEmail.Push("^");
   &astrEmail.Push("&");
   &astrEmail.Push("*");
   &astrEmail.Push("(");
   &astrEmail.Push(")");
   &astrEmail.Push("+");
   &astrEmail.Push("{");
   &astrEmail.Push("}");
   &astrEmail.Push("|");
   &astrEmail.Push("<");
   &astrEmail.Push(">");
   &astrEmail.Push("?");
   &astrEmail.Push(":");
   &astrEmail.Push("""");
   &astrEmail.Push("/");
   &astrEmail.Push("`");
   &astrEmail.Push("=");
   &astrEmail.Push(";");
   &astrEmail.Push("'");
   &astrEmail.Push(",");
   &astrEmail.Push("[");
   &astrEmail.Push("]");
   &astrEmail.Push("\");
   Return &astrEmail;
end-method;

Wednesday, March 23, 2011

PeopleCode Help Bits 2

How to delay the Service Operation?
  • Solution1): Routing Configuration has a "Delay Processing" in 8.51 Tools which takes rounded numbers whose minimum is one Min. In Real time one minute time is too much. But however this dealy Processing Configuration value can not used if the Service Operation Processing needs to be conditionally controlled.
  • Solution 2:  a) Make sure that Service configuration routing delay processing value is blank.  b)Function TimeCapsule (http://peoplesofttechworld.blogspot.com/2011/03/codebits1.html) can be used in Handler Code Just in case Service Operation Delay processing needs to be controlled.

Wednesday, March 9, 2011

PeopleCode Help Bits 1

/*--PeopleCode Function: To make the thread wait for given time---*/
A) Function TimeCapsule(&sec As number) Returns boolean;
   &nNum = 0;
   &nNum1 = 0;
   &WaitTill = AddToDateTime(%Datetime, 0, 0, 0, 0, 0, &seconds);
   While &WaitTill > %Datetime
      &nNum = &nNum + 1;
      If &Condition Then
         Return True;
      Else
         &nNum1 = &nNum1 + 1;
      End-If;
   End-While;
   Return False;
End-Function;

B) This is equal to &jCls = GetJavaClass("java.lang.Thread").sleep(10);

Q) What is the difference between A) and B) ?
Ans: A) can be used to control the thread for a given time and exit after required condition is met where as B) can not be managed to exit before given time based on the condition result.