Sunday, August 20, 2017

array


Usage of Selectbykey property -

&Rec2 = CreateRecord(Record.FDC_TLO_HIR_STG);
&Rec1 = &Rs1(1).GetRecord(Record.FDC_TLO_HIR_STG);

SQLExec("%SelectByKey(:1)", &Rec1, &Rec2);
                     rem &Rec1 = &Rec2;
                     &Rec2.CopyFieldsTo(&Rec1);
                     If &LoadSuccess = True Then
                        &Rec1.FLAG1.Value = "Y";
                        &Rec1.Update();
                     End-If;

Strip Special Character -
method StripSpecialChar
   /+ &String1 as String +/
   /+ Returns String +/
   Local number &SpclCharLen, &i;
   Local array of string &SpclChars;

   &SpclCharLen = 6;
   &SpclChars = CreateArrayRept(" ", &SpclCharLen);

   &SpclChars [1] = " ";
   &SpclChars [2] = "-";
   &SpclChars [3] = ".";
   &SpclChars [4] = "/";
   &SpclChars [5] = "(";
   &SpclChars [6] = ")";

   For &i = 1 To &SpclCharLen
      &String1 = Substitute(&String1, &SpclChars [&i], "");
   End-For;
   Return &String1;
end-method;
Array concept to split address and load into 4 fields -

Local array &AddrArray;
&AddrArray = %This.SplitAddress(&NewHireRec);
            &oCollAddresses.PROP_ADDRESS1 = LTrim(RTrim(&AddrArray [1], " "), " ");
            &oCollAddresses.PROP_ADDRESS2 = LTrim(RTrim(&AddrArray [2], " "), " ");
            &oCollAddresses.PROP_ADDRESS3 = LTrim(RTrim(&AddrArray [3], " "), " ");
            &oCollAddresses.PROP_ADDRESS4 = LTrim(RTrim(&AddrArray [4], " "), " ");

method SplitAddress
   /+ &NewHireRec as Record +/
   /+ Returns Array of Any +/
   Local array &AddrArray;
   Local number &i, &j;
   Local array &TempStringArray;
   Local string &Temp1;
   Local FDC_TLO_LIB2:FDC_TLO_NEWHIRE:FDC_TLO_NEWHIRE &TLO_NewHire = create FDC_TLO_LIB2:FDC_TLO_NEWHIRE:FDC_TLO_NEWHIRE();

   &AddrArray = CreateArray();
   For &i = 1 To 4
      &AddrArray.Push("");
   End-For;

   If Len(&NewHireRec.ADDRESS100.Value) <= 55 And
         Len(&NewHireRec.ADDRESS100_OTHER.Value) <= 55 Then
      &AddrArray [1] = &NewHireRec.ADDRESS100.Value;
      &AddrArray [2] = &NewHireRec.ADDRESS100_OTHER.Value;
      &AddrArray [3] = "";
      &AddrArray [4] = "";
      Return &AddrArray;
   End-If;



   If Len(&NewHireRec.ADDRESS100.Value) <= 55 And
         Len(&NewHireRec.ADDRESS100_OTHER.Value) > 55 Then
      &AddrArray [1] = &NewHireRec.ADDRESS100.Value;
      /* &NewHireRec.ADDRESS100_OTHER.Value is split and assigned to 2 & 3 */
      &TempStringArray = &TLO_NewHire.ParseString(&NewHireRec.ADDRESS100_OTHER.Value, " ");
   
      &AddrArray [2] = "";
      For &i = 1 To &TempStringArray.Len
         &Temp1 = &AddrArray [2] | " " | &TempStringArray [&i];
         If Len(&Temp1) <= 55 Then
            &AddrArray [2] = &Temp1;
         Else
            Break;
         End-If;
      End-For;
   
      &AddrArray [3] = "";
      For &j = &i To &TempStringArray.Len
         &Temp1 = &AddrArray [3] | " " | &TempStringArray [&j];
         If Len(&Temp1) <= 55 Then
            &AddrArray [3] = &Temp1;
         Else
            Break;
         End-If;
      End-For;
   
      &AddrArray [4] = "";
   
      /* 07/28/2016 Syed(F72MURX) FDC_2003 Begin - Split based on length */
      If &TempStringArray.Len = 1 Then
         &TempStringArray = %This.SplitString(&NewHireRec, Field.ADDRESS100_OTHER, 55);
         If &TempStringArray.Len > 1 Then
            For &i = 1 To &TempStringArray.Len
               If &i = 1 Then
                  &AddrArray [2] = &TempStringArray [1];
               End-If;
               If &i = 1 Then
                  &AddrArray [3] = &TempStringArray [2];
               End-If;
            End-For;
         End-If;
      End-If;
      /* 07/28/2016 Syed(F72MURX) FDC_2003 End */
   
      Return &AddrArray;
   End-If;


   If Len(&NewHireRec.ADDRESS100.Value) > 55 And
         Len(&NewHireRec.ADDRESS100_OTHER.Value) <= 55 Then
   
      /* &NewHireRec.ADDRESS100.Value is split and assigned to 1 & 2 */
      &TempStringArray = &TLO_NewHire.ParseString(&NewHireRec.ADDRESS100.Value, " ");
   
      &AddrArray [1] = "";
      For &i = 1 To &TempStringArray.Len
         &Temp1 = &AddrArray [1] | " " | &TempStringArray [&i];
         If Len(&Temp1) <= 55 Then
            &AddrArray [1] = &Temp1;
         Else
            Break;
         End-If;
      End-For;
   
      &AddrArray [2] = "";
      For &j = &i To &TempStringArray.Len
         &Temp1 = &AddrArray [2] | " " | &TempStringArray [&j];
         If Len(&Temp1) <= 55 Then
            &AddrArray [2] = &Temp1;
         Else
            Break;
         End-If;
      End-For;
      &AddrArray [3] = &NewHireRec.ADDRESS100_OTHER.Value;
      &AddrArray [4] = "";
   
      /* 07/28/2016 Syed(F72MURX) FDC_2003 Begin - Split based on length */
      If &TempStringArray.Len = 1 Then
         &TempStringArray = %This.SplitString(&NewHireRec, Field.ADDRESS100, 55);
         If &TempStringArray.Len > 1 Then
            For &i = 1 To &TempStringArray.Len
               If &i = 1 Then
                  &AddrArray [1] = &TempStringArray [1];
               End-If;
               If &i = 1 Then
                  &AddrArray [2] = &TempStringArray [2];
               End-If;
            End-For;
         End-If;
      End-If;
      /* 07/28/2016 Syed(F72MURX) FDC_2003 End */
   
      Return &AddrArray;
   End-If;


   If Len(&NewHireRec.ADDRESS100.Value) > 55 And
         Len(&NewHireRec.ADDRESS100_OTHER.Value) > 55 Then
      /* &NewHireRec.ADDRESS100.Value is split and assigned to 1 & 2 */
      &TempStringArray = &TLO_NewHire.ParseString(&NewHireRec.ADDRESS100.Value, " ");
      &AddrArray [1] = "";
      For &i = 1 To &TempStringArray.Len
         &Temp1 = &AddrArray [1] | " " | &TempStringArray [&i];
         If Len(&Temp1) <= 55 Then
            &AddrArray [1] = &Temp1;
         Else
            Break;
         End-If;
      End-For;
      &AddrArray [2] = "";
      For &j = &i To &TempStringArray.Len
         &Temp1 = &AddrArray [2] | " " | &TempStringArray [&j];
         If Len(&Temp1) <= 55 Then
            &AddrArray [2] = &Temp1;
         Else
            Break;
         End-If;
      End-For;
   
      /* 07/28/2016 Syed(F72MURX) FDC_2003 Begin - Split based on length */
      If &TempStringArray.Len = 1 Then
         &TempStringArray = %This.SplitString(&NewHireRec, Field.ADDRESS100, 55);
         If &TempStringArray.Len > 1 Then
            For &i = 1 To &TempStringArray.Len
               If &i = 1 Then
                  &AddrArray [1] = &TempStringArray [1];
               End-If;
               If &i = 1 Then
                  &AddrArray [2] = &TempStringArray [2];
               End-If;
            End-For;
         End-If;
      End-If;
      /* 07/28/2016 Syed(F72MURX) FDC_2003 End */
   
      /* &NewHireRec.ADDRESS100_OTHER.Value is split and assigned to 3 & 4 */
      &TempStringArray = &TLO_NewHire.ParseString(&NewHireRec.ADDRESS100_OTHER.Value, " ");
      &AddrArray [3] = "";
      For &i = 1 To &TempStringArray.Len
         &Temp1 = &AddrArray [3] | " " | &TempStringArray [&i];
         If Len(&Temp1) <= 55 Then
            &AddrArray [3] = &Temp1;
         Else
            Break;
         End-If;
      End-For;
      &AddrArray [4] = "";
      For &j = &i To &TempStringArray.Len
         &Temp1 = &AddrArray [4] | " " | &TempStringArray [&j];
         If Len(&Temp1) <= 55 Then
            &AddrArray [4] = &Temp1;
         Else
            Break;
         End-If;
      End-For;
   
      /* 07/28/2016 Syed(F72MURX) FDC_2003 Begin - Split based on length */
      If &TempStringArray.Len = 1 Then
         &TempStringArray = %This.SplitString(&NewHireRec, Field.ADDRESS100_OTHER, 55);
         If &TempStringArray.Len > 1 Then
            For &i = 1 To &TempStringArray.Len
               If &i = 1 Then
                  &AddrArray [3] = &TempStringArray [1];
               End-If;
               If &i = 1 Then
                  &AddrArray [4] = &TempStringArray [2];
               End-If;
            End-For;
         End-If;
      End-If;
      /* 07/28/2016 Syed(F72MURX) FDC_2003 End */
   
      Return &AddrArray;
   End-If;

end-method;


method SplitString
   /+ &StringRec as Record, +/
   /+ &FieldName as String, +/
   /+ &StringLen as Number +/
   /+ Returns Array of Any +/
   Local array &StringArray1;
   Local string &TempString, &TempString2;
   Local number &i, &index1, &index2;

   &StringArray1 = CreateArray();
   &TempString = &StringRec.GetField((@("Field." | &FieldName))).Value;
   If Len(&TempString) <= &StringLen Then
      &StringArray1.Push(&TempString);
   Else
      &i = 1;
      While (&i > 0)
         If Len(&TempString) <= &StringLen Then
            &StringArray1.Push(&TempString);
            &i = - 1;
         Else
            &TempString2 = Substring(&TempString, 1, &StringLen);
            &StringArray1.Push(&TempString2);
            &TempString = Substring(&TempString, Len(&TempString2) + 1, Len(&TempString) - Len(&TempString2));
            &i = 1;
         End-If;
      End-While;
   End-If;
   Return &StringArray1;
end-method;

method ParseString
   /+ &String1 as String, +/
   /+ &ParseBy as String +/
   /+ Returns Array of Any +/
   Local array &String2;
   Local string &TempString, &MoreStringsFound;
   Local number &i, &index1, &index2, &Len;
   &String2 = CreateArray();
   /* Get the count of separator in string */
   &index1 = 1;
   &index2 = Find(&ParseBy, &String1, &index1);
   While &index2 <> 0
      &MoreStringsFound = "Y";
      /* Find if another separator is found */
      &TempString = Substring(&String1, &index1, &index2 - &index1);
      If All(&TempString) Then
         &String2.Push(&TempString);
      End-If;
      &index1 = &index2 + 1;
      &index2 = Find(&ParseBy, &String1, &index1);
   End-While;
   /* When only one string is found */
   If &MoreStringsFound <> "Y" Then
      &String2.Push(&String1);
   Else
      &TempString = Substring(&String1, &index1, Len(&String1));
      If All(&TempString) Then
         &String2.Push(&TempString);
      End-If;
   End-If;
   Return &String2;
end-method;

No comments: