====== 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;
}