Obsah

Groovy makra v Openu

2. První příklady

Groovy makra od začátku:

2.1. Plnění sloupce v browsu

Vložím si do browsu „pomocný atribut“ který budu plnit makrem.

Nejlépe z „Dotahovaných“ – aby se mi tam nenabízela možnost filtrovat.

Poznámka - v Dotahovaných je k tomuto účelu připraven atribut „zzmakro“.

Je jedno jaký – zde nazevRidic

A tomu atributu přiřadím makro

Makro má metodu getCellValue, která vrací Object – Object je obecný, jedno jaký výsledek (skoro jedno jaký – budeme uvažovat primitivní typy – string, boolean, integer, bigdecimal, … , tedy ne array, list, …)

A v té metodě getCellValue dotahuji jméno a přijmení podle osobního čísla, které je v atributu pracC2, který je v primární entitě – zde entita nq10. Nq10 jsou objednávky – nad nimi stavím tento browse.

Někde dole je tedy pracC2

Metoda getCellValu má vždycky 2 parametry – entitu a dotahované Object getCellValue(Object entity, Object dotahovane) {

Zde přetypuji entitu pro lepší orientaci na Nq10 Object getCellValue(Nq10 nq10, Object dotahovane) {

A pak otestuji jestli entita není null a mohu použít atribut pracC2 – tedy jeho getter - nq10.getPracC2()

    if (nq10 != null) {
     Osoby osoby = null;
    osoby = (Osoby) OEntityUtil.getRecordByParam(Osoby.class.getCanonicalName(), "oscis", nq10.getPracC2());
     if (osoby != null) {

Toť celé kouzlo – pro zobrazení jsem si posunul číslo osoby a jméno „dopředu v browsu“

import cz.ortex.model.Nq10;
import cz.ortex.util.o0.OEntityUtil;
import cz.ortex.util.o0.O0StringUtil;
import cz.ortex.model.Osoby;
 
Object getCellValue(Nq10 nq10, Object dotahovane) {
    if (nq10 != null) {
      Osoby osoby = null;
      osoby = (Osoby) OEntityUtil.getRecordByParam(Osoby.class.getCanonicalName(),
                                                   "oscis", nq10.getPracC2());
      if (osoby != null) {
        return osoby.getJmPrijm().trim() + " " + osoby.getJmJmeno().trim();
      } else {
        return " ";
      }
    } else {
      return " ";
    }
}

Příklad pro Aktivity v CRM Open:

import cz.ortex.model.Ohakt;
import cz.ortex.util.o0.OEntityUtil;
import cz.ortex.util.o0.O0StringUtil;
import cz.ortex.model.Osoby;
 
Object getCellValue(Ohakt entity, Object dotahovane) {
    if (entity != null) {
      // Naplneni složeného prijmJmeno zodpovědné osoby
      pr = "";
      jm = "";
      if (entity.getOsobyByIdpkOsoby() != null && entity.getOsobyByIdpkOsoby().getJmPrijm() != null) {
         pr = entity.getOsobyByIdpkOsoby().getJmPrijm();
      }
      if (entity.getOsobyByIdpkOsoby() != null && entity.getOsobyByIdpkOsoby().getJmJmeno() != null) {
         jm = entity.getOsobyByIdpkOsoby().getJmJmeno();
      }
      return O0StringUtil.slozit(pr, jm, " ");
    } else {
      return " ";
    }
}

2.2. Vrácení textového stavu podle hodnoty atributu

import cz.ortex.util.o0.O0Session;
import cz.ortex.util.o0.OEntityUtil;
import cz.ortex.util.o0.O0StringUtil;
import cz.ortex.model.Nq10;
 
Object getCellValue(Nq10 entity, Object dotahovane) {
    String vysl = " ";
    if (entity != null) {
      if (entity.getPexpU() != null) {
        if (entity.getPexpU() == 1) {
          vysl = "Spuštěno";
        }
      }
      if (entity.getPschvaleni() != null) {
        Character schvaleno = '1';
        Character zamitnuto = '2';
        if (entity.getPschvaleni().equals(schvaleno)) {
          vysl = "Schváleno";
        }
        if (entity.getPschvaleni().equals(zamitnuto)) {
          vysl = "Zamítnuto";
        }
      }
    }
    return vysl;
}

2.3. Dotažení poznámky WF do browsu

import cz.ortex.util.o0.O0Session;
import cz.ortex.util.o0.OEntityUtil;
import cz.ortex.util.o0.O0StringUtil;
import cz.ortex.apidao.o0.workflow.OfwoDao;
import cz.ortex.model.Ofwo;
 
Object getCellValue(Object entity, Object dotahovane) {
    String vysl = " ";
    if (entity != null) {
      OfwoDao ofwoDao = (OfwoDao) OEntityUtil.getServiceByName(OEntityUtil.OServiceType.dao, OfwoDao.NAME);
      if (ofwoDao != null) {
        List<Ofwo> ofwos = ofwoDao.getOfwosByTargetRecord(entity);
        if (ofwos != null && !ofwos.isEmpty()) {
          Ofwo ofwo = ofwos[0];
          vysl = ofwoDao.pozHistorieTisk(ofwo, true, true, true);
        }
      }
    }
    return vysl;
}

2.4. Dotažení více hodnot do jednoho sloupce

Zde čísla všech faktur k dané objednávce, oddělené „,“ A do pokračování našeho seriálu dávám příklad, jak dotáhnout něco odněkud pomocí SQL Viz – první sloupec v browsu – „Číslo FD“ – dotažení čísla došlé faktury podle čísla objednávky k objednávce – taky makrem. Tady si s OEntityUtil nevystačím – mohu mít více faktur k objednávce.

Jestliže budu mít připojené faktury i přes vazební tabulku O0ZAZNVAZ – tedy vazbu M:N – upravím akorát select:

import cz.ortex.util.o0.O0Session;
import cz.ortex.util.o0.OEntityUtil;
import java.rmi.RemoteException;
import cz.ortex.model.PpfHl;
import cz.ortex.model.Nq10;
import cz.ortex.util.o0.O0StringUtil;
import java.math.BigDecimal;
import java.math.RoundingMode;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.query.NativeQuery;
import cz.ortex.implutil.o0.HibernateUtil;
import java.util.List;
import org.hibernate.type.StandardBasicTypes;
 
Object getCellValue(Nq10 entity, Object dotahovane) {
    String vysl = "FD:";
    vysl = "";
    if ((entity != null) && (entity.getObje() != null)) {
      Session session = HibernateUtil.getCurrentSession();
      Transaction transaction = session.getTransaction();
      boolean byloTransactionActive = transaction.isActive();
      if (!byloTransactionActive) {
        transaction.begin();
      }
      if (transaction.isActive()) {
       //String testDotaz = "select cis_dokl from PPF_HL where (objednavka
                             like '%" + entity.getObje().trim() + "%')";
       String testDotaz = "select cis_dokl from PPF_HL ppf left outer join O0ZAZNVAZ o0zaznvaz on (o0zaznvaz.trida = 'PpfHl') and (o0zaznvaz.name_obj = 'Nq10') and (o0zaznvaz.idpk_obj = " + entity.getIdpk() + " ) where (ppf.objednavka like '%" + entity.getObje().trim() + "%') or (ppf.idpk = o0zaznvaz.id_zaznamu)";
       NativeQuery<String> sqlQuery = session.createNativeQuery(testDotaz);
       sqlQuery.addScalar("cis_dokl", StandardBasicTypes.STRING);
       List<String> list = sqlQuery.getResultList();
       if (list != null) {
        for (Object l : list) {
         if (l != null) {
          if (String.class.isInstance(l)) {
            String cObj = (String) l;
            if (O0StringUtil.notBlank(vysl)) {
             vysl = vysl.trim() + ",  ";
            }
            vysl = vysl.trim() + " " + cObj.trim();
          }
         }
        }
       }
      }
      if (!byloTransactionActive) {
        transaction.rollback();
      }
    }
    return vysl;
}

2.5. Dotažení více hodnot do jednoho sloupce - 2

Obdobně dotažení čísla smlouvy k ebchodní evidenci, oddělené „,“
import java.awt.Color;
import cz.ortex.util.o0.O0Session;
import cz.ortex.util.o0.OEntityUtil;
import java.rmi.RemoteException;
import cz.ortex.model.PpfHl;
import cz.ortex.model.Nq10;
import cz.ortex.util.o0.O0StringUtil;
import java.math.BigDecimal;
import java.math.RoundingMode;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.query.NativeQuery;
import cz.ortex.implutil.o0.HibernateUtil;
import java.util.List;
import org.hibernate.type.StandardBasicTypes;
import java.util.logging.Level;
import java.util.logging.Logger;
 
Color getBackgroundColor(Object entity, Object dotahovane) {
  //zde vypiste kod
}
 
Color getForegroundColor(Object entity, Object dotahovane) {
  //zde vypiste kod
 
}
 
Object getCellValue(Object entity, Object dotahovane) {
  //zde vypiste kod
  String vysl = " ";
  if (entity != null) {
//    if (0 == 1) {
      Session session = HibernateUtil.getCurrentSession();
      Transaction transaction = session.getTransaction();
      boolean byloTransactionActive = transaction.isActive();
      if (!byloTransactionActive) {
        transaction.begin();
      }
      if (transaction.isActive()) {
       try {
       String testDotaz = "select LQO0.cisdo as cis_dokl from LCICEN left join LQO1 on LQO1.idpk_lcicen = LCICEN.idpk left join LQO0 on LQO0.zavod=LQO1.zavod and LQO0.sklad=LQO1.sklad and LQO1.typ_fa = LQO0.typ_fa and LQO1.cisdo = LQO0.cisdo where LQO0.o1firma = " + entity.getOhoeHl().getO6a().getDkaNr() + " and trim(LCICEN.jkpov) = trim('" + entity.getOhfm().getLicKod() + "')";
       NativeQuery<String> sqlQuery = session.createNativeQuery(testDotaz);
       sqlQuery.addScalar("cis_dokl", StandardBasicTypes.STRING);
       List<String> list = sqlQuery.getResultList();
       if (list != null) {
        for (Object l : list) {
         if (l != null) {
          if (String.class.isInstance(l)) {
            String cObj = (String) l;
            if (O0StringUtil.notBlank(vysl)) {
             vysl = vysl.trim() + ",  ";
            }
            vysl = vysl.trim() + " " + cObj.trim();
          }
         }
        }
       }
       if (!byloTransactionActive) {
         transaction.rollback();
       }
      } catch (Exception ex) {
       if (!byloTransactionActive) {
        transaction.rollback();
       }
        Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex);
      }
      }
//    }
  }
  return vysl;
}