Page last modified 09:46, 24 Jun 2019 by villes

Example Action rules Redirected from User Guides/myXML/OCL Rules/Example Action rules

    -- Create 50 transactions for pain.008.001.02.xsd --

     
    auto i : 0;
    foreach n in (PmtInf)
      foreach a in (Set{1 .. 49})
         auto newTx : copy(n.DrctDbtTxInf->asSequence()->at(0));
     
          auto iban : String.buildIBAN("DE");
          newTx.DbtrAcct.Id.IBAN : iban;
          newTx.PmtId.EndToEndId : 'EndToEndId_' + i.toString();
          i : i + 1;
      
          n.DrctDbtTxInf.add(newTx);
      endeach;
    endeach;
    GrpHdr.CtrlSum : PmtInf.DrctDbtTxInf.InstdAmt->sum();
    GrpHdr.NbOfTxs : PmtInf.DrctDbtTxInf->size().toString();
     

    -- Converting Julian dates (0yyddd) to ISO 

     
    auto var : date.today().toString();
     
    auto year : ("20" + var.substring(1,2)).toInteger();
    auto days : var.substring(3,4).toInteger();
    auto daysInMonths : Sequence{31,28,31,30,31,30,31,31,30,31,30,31};
        
    // Leap year?
    if (year % 4 = 0) then
        if (year % 100 = 0) then
            if (year % 400 = 0) then
                // LEAP
                daysInMonths->at(1) : 29;
            endif;
        else 
        // LEAP
        daysInMonths->at(1) : 29;
        endif;
    endif; 
        
    // Count the days
    auto month : 1;
    foreach d in (Set{1 .. 12})
        if (days > daysInMonth->at(d))
            days = days - daysInMonth->at(d);
            month = month + 1;
        endif;
    endeach;
     
     
    // Modify the month and day
    if (month < 10) 
        month = "0" + month.toString();
    else
        month = month.toString();
    endif
        
    if (days < 10) 
        days = "0" + days.toString();
    else
        days = days.toString();
    endif
     
    // Result it in the right format
    auto result : year + "-" + month + "-" + day;
     

    -- Converting ISO dates to Julian (0yyddd)

     
    auto var : date.today().toString();
     
    auto year : var.substring(0,4).toInteger();
    auto month : var.substring(5,7).toInteger();
    auto day : var.substring(8,10);
    auto daysInMonths : Sequence{31,28,31,30,31,30,31,31,30,31,30,31};
     
     
    // Leap year?
    if (year % 4 = 0) then 
        if (year % 100 = 0) then
            if (year % 400 = 0) then
                // LEAP
                daysInMonths->at(1) : 29;
            endif;
        else 
        // LEAP
        daysInMonths->at(1) : 29;
        endif;
    endif; 
     
    // Count the days
    auto totalDays : 0;
    foreach d in (Set{1 .. month})
        totalDays : totalDays + daysInMonths->at(d - 1);
    endeach;
    totalDays : totalDays + day.toInteger();
     
    // Modify the year
    auto yearstr : "0" + year.toString().substring(2,4);
     
    // Return it in the right format
    auto result : yearstr.concat(totalDays.toString());
     
    result : result.substring(0,6);
    return result;

     

    -- Save multiple outputs with different default namespace

     
        // Save all
        // pain.009
        save(doc,"pain009_testfile_" + filenumber.toString());
        
        // pain.010
        setNamespacePrefix("","urn:iso:std:iso:20022:tech:xsd:pain.010.001.03");  
        save(doc010,"pain010_testfile_" + filenumber.toString());

        // pain.011
        setNamespacePrefix("","urn:iso:std:iso:20022:tech:xsd:pain.011.001.03");  
        save(doc011,"pain011_testfile_" + filenumber.toString());
    Menu