Page last modified 10:51, 5 Nov 2018 by villes

Example Action rules Redirected from User guide for OCL rules in XMLdation environment/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.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();
    if (future <> 0) then 
        var : date.today(future).toString();
    endif;
    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;
    Menu