====== 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 {{:orsoftopen:spravais:workshop:groovymakra:image2.png?700}} 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, …) {{:orsoftopen:spravais:workshop:groovymakra:image3.png?700}} 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. {{:orsoftopen:spravais:workshop:groovymakra:image4.png?700}} Někde dole je tedy pracC2 [[:orsoftopen:spravais:workshop:groovymakra:image5.png?id=orsoftopen:spravais:workshop:groovymakra:groovymakra&media=orsoftopen:spravais:workshop:groovymakra:image5.png|{{:orsoftopen:spravais:workshop:groovymakra:image5.png?nolink&700}}]] 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“ {{:orsoftopen:spravais:workshop:groovymakra:image6.png?700}} 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 ==== {{:orsoftopen:spravais:workshop:groovymakra:image7.png?700}} 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 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. {{:orsoftopen:spravais:workshop:groovymakra:image8.png?700}} Jestliže budu mít připojené faktury i přes vazební tabulku O0ZAZNVAZ – tedy vazbu M:N – upravím akorát select: {{:orsoftopen:spravais:workshop:groovymakra:image9.png?700}} 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 sqlQuery = session.createNativeQuery(testDotaz); sqlQuery.addScalar("cis_dokl", StandardBasicTypes.STRING); List 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 sqlQuery = session.createNativeQuery(testDotaz); sqlQuery.addScalar("cis_dokl", StandardBasicTypes.STRING); List 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; }