====== Groovy makra v Openu ======
===== 4. Další příklady =====
==== 4.1. Tlačítka v detailu ====
=== 4.1.1. Zobrazení adresáře ===
import cz.ortex.model.O6r;
import cz.ortex.gui.o0.adresar.O6rWrapper;
import cz.ortex.gui.o0.browse.BrowseDialogWindow;
import java.util.logging.Level;
import java.util.logging.Logger;
public void main() {
try {
O6rWrapper o6rWrapper = new O6rWrapper();
BrowseDialogWindow nabidkaO6r = null;
nabidkaO6r = o6rWrapper.getVyberWindow(null);
O6r o6r = new O6r();
o6r.setDksSp("CS");
nabidkaO6r.getBrowseParams().setEntity(o6r); // aby se nastavilo na řeč již vyplněnou
nabidkaO6r.setVisible(true);
} catch (Exception ex) {
Logger.getLogger(MakroO6r.class.getName()).log(Level.SEVERE, null, ex);
}
}
{{:orsoftopen:spravais:workshop:groovymakra:image45.png?700}}
=== 4.1.2. Tlačítko v liště wrapperu – zobrazení dokumentu ===
Je zde řešeno: - Zjištění počtu dokumentů - Když je jeden – zobrazení - Když je více – zobrazení okna se seznamem - Když není – tak nic
=== 4.1.3. Tlačítko pro tisk „sestavy“ ===
{{:orsoftopen:spravais:workshop:groovymakra:image46.png?700}}
import java.util.logging.Level;
import java.util.logging.Logger;
import cz.ortex.util.o0.OEntityUtil;
import cz.ortex.util.o0.O0StringUtil;
import cz.ortex.util.o0.AppContext;
import cz.ortex.gui.o0.Tiskac;
import cz.ortex.util.o0.O0JasperParam;
public void tisk(Object currentRecord, Object dotahovane) {
Tiskac tiskac = new Tiskac("Tisk likvid.litku", true, null);
O0JasperParam o0JasperParam = new O0JasperParam();
o0JasperParam.setSestava("/cz/ortex/jasper/reports/PpfHllik.jrxml");
// o0JasperParam.setPouzUzivSestIfExist(true);
o0JasperParam.setBrowseCurrentRecord(currentRecord);
tiskac.view(o0JasperParam);
}
=== 4.1.4. Tlačítko pro odeslání mailu ===
{{:orsoftopen:spravais:workshop:groovymakra:image47.png?700}}
import java.util.logging.Level;
import java.util.logging.Logger;
import cz.ortex.util.o0.OEntityUtil;
import cz.ortex.util.o0.O0StringUtil;
import cz.ortex.components.OptionPane;
import cz.ortex.util.o0.AppContext;
import cz.ortex.apidao.o0.eldoc.OeldokDao;
import cz.ortex.apidao.o0.workflow.OemailParams;
public void sendMail(Object currentRecord, Object dotahovane) {
String sablona = "oJRViewerINF";
String prijemce = "tomas.myslivec@ortex.cz";
OemailParams oemailParams = new OemailParams();
oemailParams.setSablonaMailu(sablona);
oemailParams.setEmailAdresa(prijemce);
OeldokDao oeldokDao = (OeldokDao) AppContext.getDaoService(OeldokDao.NAME);
if (oeldokDao != null) {
oemailParams = oeldokDao.posliDokumentMailem(oemailParams, currentRecord);
}
if (oemailParams.isOk()) {
OptionPane.createInfoDialog("", "Probehlo odeslami mailu.");
} else {
OptionPane.createErrorDialog("", "Mail nebyl odeslan!");
}
}
{{:orsoftopen:spravais:workshop:groovymakra:image48.png?700}}
{{:orsoftopen:spravais:workshop:groovymakra:image49.png?700}}
{{:orsoftopen:spravais:workshop:groovymakra:image50.png?700}}
{{:orsoftopen:spravais:workshop:groovymakra:image51.png?700}}
==== 4.2. Ikony v browsu a makra Práce se záznamem ====
=== 4.2.1. Vložení ikony do browsu ===
{{:orsoftopen:spravais:workshop:groovymakra:image52.png?700}}
A makro:
{{:orsoftopen:spravais:workshop:groovymakra:image53.png?700}}
import cz.ortex.model.Ofwk;
import cz.ortex.model.Ofwp;
import cz.ortex.util.o0.OEntityUtil;
import cz.ortex.util.o0.O0StringUtil;
Object getCellValue(Ofwk entity, Object dotahovane) {
//zde vypiste kod
if (entity != null){
if (O0StringUtil.notBlank(entity.getOfwp().getIko())) {
return "oeldok16.png:Dokument je připojen";
} else {
return "";
}
} else {
return "";
}
}
Kliknutí na ikonu Groovy makra + Práce se záznamem:
{{:orsoftopen:spravais:workshop:groovymakra:image54.png?700}}
import cz.ortex.groovy.GroovyBrowsePar;
import cz.ortex.util.o0.O0Data;
import cz.ortex.util.o0.O0Session;
import java.util.logging.Logger;
import cz.ortex.model.Ofwk;
import cz.ortex.model.Ofwp;
import cz.ortex.gui.o0.browse.BrowseWindow;
import cz.ortex.gui.o0.eldoc.OeldokWrapper;
import cz.ortex.util.o0.O0StringUtil;
GroovyBrowsePar editUvod(Object entity, O0Data dotahovane, GroovyBrowsePar groovyBrowsePar, O0Session o0session, Object browsePanel) {
//zde vypiste kod
}
GroovyBrowsePar validate(Object entity, O0Data dotahovane, String fieldName, Object fieldValue, GroovyBrowsePar groovyBrowsePar, O0Session o0session, Object browsePanel) {
//zde vypiste kod
}
GroovyBrowsePar noEditDetail(Object entity, O0Data dotahovane, GroovyBrowsePar groovyBrowsePar, O0Session o0session, Object browsePanel) {
//zde vypiste kod
}
GroovyBrowsePar kontrolaVeta(Object entity, O0Data dotahovane, GroovyBrowsePar groovyBrowsePar, O0Session o0session, Object browsePanel) {
//zde vypiste kod
}
String getPgmVars(Object entity, Object dotahovane) {
//zde vypiste kod
}
GroovyBrowsePar akceIkonaBrowse(Ofwk entity, O0Data dotahovane, String fieldName, GroovyBrowsePar groovyBrowsePar, O0Session o0session, Object browsePanel) {
//zde vypiste kod
if ("oeldok16.png".equals(fieldName)) {
if ((entity != null) && (entity.getOfwp() != null) &&
(O0StringUtil.notBlank(entity.getOfwp().getIko()))) {
try {
BrowseWindow window1 = new OeldokWrapper(entity.getOfwp().getIko(), Ofwp.class,
entity.getOfwp().getIdpk());
window1.setVisible(true);
} catch (Exception ex) {
Logger.getLogger(OfwkPanel.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
S ošetřením počtu dokumentů
{{:orsoftopen:spravais:workshop:groovymakra:image55.png?700}}
GroovyBrowsePar akceIkonaBrowse(Ofwk entity, O0Data dotahovane, String fieldName, GroovyBrowsePar groovyBrowsePar, O0Session o0session, Object browsePanel) {
//zde vypiste kod
Integer pocet = 0;
if ("oeldok16.png".equals(fieldName)) {
if ((entity != null) && (entity.getOfwp() != null) &&
(O0StringUtil.notBlank(entity.getOfwp().getIko()))) {
try {
pocet = OeldokWrapper.podejPocetDokumentu(null,entity.getOfwp().getIko());
if (pocet > 0) {
if (pocet == 1) {
OeldokWrapper oeldokWrapper = new OeldokWrapper();
Oeldok oeldok = oeldokWrapper.podejOeldokIko(null,entity.getOfwp().getIko());
// if (oeldok != null) {
oeldokWrapper.zobrazitDokument(oeldok);
// }
} else {
BrowseWindow window1 = new OeldokWrapper(entity.getOfwp().getIko(), Ofwp.class,
entity.getOfwp().getIdpk()).getDialogWindow();
window1.setVisible(true);
}
}
} catch (Exception ex) {
Logger.getLogger(OeldokWrapper.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
=== 4.2.2. Volání jiného wrapperu na ikonu v browsu – např. Poznámky ===
import cz.ortex.groovy.GroovyBrowsePar;
import cz.ortex.util.o0.O0Data;
import cz.ortex.util.o0.O0Session;
import java.util.logging.Logger;
import cz.orcz.orfmodel.CPolozka;
import cz.ortex.gui.o0.browse.BrowseWindow;
import cz.ortex.gui.o0.eldoc.OeldokWrapper;
import cz.ortex.util.o0.O0StringUtil;
import cz.ortex.gui.o0.poznamky.O0pozWrapper;
GroovyBrowsePar akceIkonaBrowse(CPolozka entity, O0Data dotahovane, String fieldName, GroovyBrowsePar groovyBrowsePar, O0Session o0session, Object browsePanel) {
//zde vypiste kod
if ("oeldok16.png".equals(fieldName)) {
if ((entity != null) && (O0StringUtil.notBlank(entity.getIko()))) {
try {
BrowseWindow windowl = new OeldokWrapper(entity.getIko(), CPolozka.class, entity.getIdpk()).getDialogWindow();
windowl.setVisible(true);
} catch (Exception ex) {
Logger.getLogger(OeldokWrapper.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
if ("o0poz16.png".equals(fieldName)) {
if ((entity != null) && (O0StringUtil.notBlank(entity.getIdpk()))) {
try {
O0pozWrapper o0pozWrapper = new O0pozWrapper();
o0pozWrapper.getBrowseParams().setEntity(o0poz);
o0pozWrapper.setUloha(O0pozWrapper.OBJEKT);
BrowseWindow poznamky;
poznamky = o0pozWrapper.getWindow(null);
GlobalGui.getDesktop().add(poznamky);
poznamky.setVisible(true);
} catch (Exception ex) {
Logger.getLogger(O0pozWrapper.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
=== 4.2.3. Ikony v browsu jako tlačítka v Katalogu položek ===
Konkrétní příklad použití v Katalogu položek. Do browsu je třeba vložit nejprve ikony, které obsahují příslušné png:
{{:orsoftopen:spravais:workshop:groovymakra:image56.png?700}}
import cz.ortex.groovy.GroovyBrowsePar;
import cz.ortex.util.o0.O0Data;
import cz.ortex.util.o0.O0Session;
import java.util.logging.Logger;
import java.util.logging.Level;
import cz.orcz.orfmodel.CPolozka;
import cz.ortex.model.Oeldok;
import cz.ortex.model.O0poz;
import cz.orcz.orfmodel.CDoprovodneTexty;
import cz.ortex.gui.o0.browse.BrowseWindow;
import cz.ortex.gui.o0.eldoc.OeldokWrapper;
import cz.ortex.util.o0.O0StringUtil;
import cz.orcz.gui.lc.CDoprovodneTextyWrapper;
import cz.ortex.gui.o0.poznamky.O0pozWrapper;
import cz.ortex.util.o0.StringParams;
import cz.ortex.gui.o0.OPocitadlo;
import cz.ortex.gui.o0.OExec;
import cz.ortex.components.OptionPane;
GroovyBrowsePar editUvod(Object entity, O0Data dotahovane, GroovyBrowsePar groovyBrowsePar, O0Session o0session, Object browsePanel) {
//zde vypiste kod
}
GroovyBrowsePar validate(Object entity, O0Data dotahovane, String fieldName, Object fieldValue, GroovyBrowsePar groovyBrowsePar, O0Session o0session, Object browsePanel) {
//zde vypiste kod
}
GroovyBrowsePar noEditDetail(Object entity, O0Data dotahovane, GroovyBrowsePar groovyBrowsePar, O0Session o0session, Object browsePanel) {
//zde vypiste kod
}
GroovyBrowsePar kontrolaVeta(Object entity, O0Data dotahovane, GroovyBrowsePar groovyBrowsePar, O0Session o0session, Object browsePanel) {
//zde vypiste kod
}
String getPgmVars(Object entity, Object dotahovane) {
//zde vypiste kod
}
//GroovyBrowsePar akceIkonaBrowse(Object entity, O0Data dotahovane, String fieldName, GroovyBrowsePar groovyBrowsePar, O0Session o0session, Object browsePanel) {
//zde vypiste kod
GroovyBrowsePar akceIkonaBrowse(CPolozka entity, O0Data dotahovane, String fieldName, GroovyBrowsePar groovyBrowsePar, O0Session o0session, Object browsePanel) {
//zde vypiste kod
//klik na ikonu el. dokumentů v browse
if ("oeldok16.png".equals(fieldName)) {
Integer pocet = 0;
if ((entity != null) && (O0StringUtil.notBlank(entity.getIko()))) {
try {
OPocitadlo.createPocitadlo("Čekejte prosím", "Zjišťuji počet připojených dokumentů…", OPocitadlo.POCITADLO_VRTITKO, OPocitadlo.BUTTON_NENI, new OExec() {@Override public Object execute() throws Exception {
//tohle (níže) trochu trvá, proto zobrazíme vrtítko (výše)
pocet = OeldokWrapper.podejPocetDokumentu(null,entity.getIko());
}}); //konec OPocitadla
if (pocet > 0) {
if (pocet == 1) {
OPocitadlo.createPocitadlo("Čekejte prosím", "Připravuji zobrazení připojeného dokumentu…", OPocitadlo.POCITADLO_VRTITKO, OPocitadlo.BUTTON_NENI, new OExec() {@Override public Object execute() throws Exception {
//tohle (níže) trochu trvá, proto zobrazíme vrtítko (výše)
OeldokWrapper oeldokWrapper = new OeldokWrapper();
Oeldok oeldok = oeldokWrapper.podejOeldokIko(null,entity.getIko());
oeldokWrapper.zobrazitDokument(oeldok);
}}); //konec OPocitadla
} else {
BrowseWindow window1 = new OeldokWrapper(entity.getIko(), CPolozka.class, entity.getIdpk()).getDialogWindow();
window1.setVisible(true);
}
}
} catch (Exception ex) {
Logger.getLogger(OeldokWrapper.class.getName()).log(Level.SEVERE, null, ex);
}
}
return groovyBrowsePar;
}
//klik na ikonu poznámek v browse
if ("o0poz16.png".equals(fieldName)) {
if ((entity != null) ) {
try {
Character typ = 'K';
O0poz o0poz = new O0poz();
BrowseWindow poznamky;
OPocitadlo.createPocitadlo("Čekejte prosím", "Připravuji zobrazení poznámek k položce…", OPocitadlo.POCITADLO_VRTITKO, OPocitadlo.BUTTON_NENI, new OExec() {@Override public Object execute() throws Exception {
//tohle (níže) trochu trvá, proto zobrazíme vrtítko (výše)
o0poz.setPrizTyp(typ);
o0poz.setObjName("CPolozka");
//o0poz.setCisIdpk(null);
o0poz.setCisKlic(entity.getIna());
o0poz.setPoradi(0);
O0pozWrapper o0pozWrapper = new O0pozWrapper();
o0pozWrapper.getBrowseParams().setEntity(o0poz);
String wrapperParams = "";
wrapperParams = StringParams.addParamValue(wrapperParams, "predanyTitulek", "Poznámka k položce "+entity.getIna());
o0pozWrapper.setWrapperParams(wrapperParams);
o0pozWrapper.setUloha(O0pozWrapper.KLIC);
poznamky = o0pozWrapper.getWindow(null);
}}); //konec OPocitadla
poznamky.setVisible(true);
} catch (Exception ex) {
Logger.getLogger(O0pozWrapper.class.getName()).log(Level.SEVERE, null, ex);
}
}
return groovyBrowsePar;
}
//klik na ikonu doprovodného textu v browse
if ("oretezp16.png".equals(fieldName)) {
if ((entity != null) ) {
try {
CDoprovodneTexty cDoprovodneTexty = new CDoprovodneTexty();
BrowseWindow texty;
OPocitadlo.createPocitadlo("Čekejte prosím", "Připravuji zobrazení doprovodných textů k položce…", OPocitadlo.POCITADLO_VRTITKO, OPocitadlo.BUTTON_NENI, new OExec() {@Override public Object execute() throws Exception {
//tohle (níže) trochu trvá, proto zobrazíme vrtítko (výše)
CDoprovodneTextyWrapper cDoprovodneTextyWrapper = new CDoprovodneTextyWrapper();
cDoprovodneTextyWrapper.getBrowseParams().setEntity(cDoprovodneTexty);
String wrapperParamsCDT = "";
wrapperParamsCDT = StringParams.addParamValue(wrapperParamsCDT, "title", "Doprovodný text k položce "+entity.getIna());
wrapperParamsCDT = StringParams.addParamValue(wrapperParamsCDT, "filter", "cisIdpk.eq("+entity.getIdpk().toString().trim()+") and nazevNt.eq('TS')");
cDoprovodneTextyWrapper.setWrapperParams(wrapperParamsCDT);
texty = cDoprovodneTextyWrapper.getWindow(null);
}}); //konec OPocitadla
texty.setVisible(true);
} catch (Exception ex) {
Logger.getLogger(CDoprovodneTextyWrapper.class.getName()).log(Level.SEVERE, null, ex);
}
}
return groovyBrowsePar;
}
}
==== 4.3. Makra Práce se záznamem – další příklady ====
=== 4.3.1. Makro Práce se záznamem a volání makro na serveru ===
import cz.ortex.model.O6a;
import cz.ortex.groovy.GroovyBrowsePar;
import cz.ortex.util.o0.O0Session;
import cz.ortex.gui.o0.browse.BrowsePanel;
import javax.swing.JOptionPane;
import cz.ortex.components.OptionPane;
GroovyBrowsePar editUvod(O6a entity, Object dotahovane, GroovyBrowsePar groovyBrowsePar, O0Session o0session, BrowsePanel browsePanel) {
//zde vypiste kod pisu:)
System.out.println(entity.getDkaNr());
entity.setDkaName1("xxx");
//groovyBrowsePar = browsePanel.callServerGroovy("grooO6a", "editUvod", groovyBrowsePar);
entity.setDkaName1("yyy");
return groovyBrowsePar;
}
GroovyBrowsePar noEditDetail(O6a entity, Object dotahovane, GroovyBrowsePar groovyBrowsePar, O0Session o0session, BrowsePanel browsePanel) {
groovyBrowsePar = browsePanel.callServerGroovy("grooO6a", "noEditDetail", groovyBrowsePar);
return groovyBrowsePar;
}
GroovyBrowsePar kontrolaVeta(O6a entity, Object dotahovane, GroovyBrowsePar groovyBrowsePar, O0Session o0session, BrowsePanel browsePanel) {
String fieldName = "dkaEMail";
Object fieldValue = entity.getDkaEMail();
groovyBrowsePar = validate(entity, dotahovane, fieldName, fieldValue, groovyBrowsePar, o0session, browsePanel);
return groovyBrowsePar;
}
GroovyBrowsePar validate(O6a entity, Object dotahovane, String fieldName, Object fieldValue, GroovyBrowsePar groovyBrowsePar, O0Session o0session, BrowsePanel browsePanel) {
if ("dkaEMail".equals(fieldName)) {
groovyBrowsePar = browsePanel.callServerGroovy("grooO6a", "kontrolaEmail", groovyBrowsePar);
System.out.println("result = " + groovyBrowsePar.getResult());
if (groovyBrowsePar.getResult() == false) {
if (OptionPane.createYesNoDialog(null, "Špatný formát mailu, povolit ?", JOptionPane.WARNING_MESSAGE) == 1) {
groovyBrowsePar.setFocusName(fieldName);
} else {
entity.setDkaHomePage(fieldValue.toString());
}
}
}
return groovyBrowsePar;
}
Kontrolní makro na serveru:
import cz.ortex.groovy.GroovyBrowsePar;
import cz.ortex.model.O6a;
import cz.ortex.apilogic.o0.adresar.O6aData;
import cz.ortex.util.o0.O0Session;
import cz.ortex.util.o0.O0StringUtil;
import cz.ortex.util.o0.BrowseEditState;
import java.util.HashMap;
GroovyBrowsePar kontrolaEmail(O6a entity, O6aData dotahovane, O0Session o0Session, GroovyBrowsePar groovyBrowsePar) {
if (entity.getDkaEMail().contains("@")) {
groovyBrowsePar.setResult(true);
if (O0StringUtil.isBlank(entity.getDkaHomePage())) {
entity.setDkaHomePage("www." + entity.getDkaEMail().substring(entity.getDkaEMail().indexOf("@") + 1));
}
} else {
groovyBrowsePar.setResult(false);
}
return groovyBrowsePar;
}
GroovyBrowsePar noEditDetail(O6a entity, O6aData dotahovane, O0Session o0Session, GroovyBrowsePar groovyBrowsePar) {
if (BrowseEditState.isProhlizeni(groovyBrowsePar.getEditState())) {
groovyBrowsePar.setVar(1, 'P' as char);
} else {
groovyBrowsePar.setVar(1, ' ' as char);
}
HashMap componentValues = new HashMap();
componentValues.put("poznamka", "text poznamky z groovy makra");
groovyBrowsePar.setComponentValues(componentValues);
return groovyBrowsePar;
}
GroovyBrowsePar editUvod(O6a entity, O6aData dotahovane, O0Session o0Session, GroovyBrowsePar groovyBrowsePar) {
groovyBrowsePar.setVar(1, ' ' as char);
if (BrowseEditState.isZalozeni(groovyBrowsePar.getEditState())) {
entity.setDkaName2("nova");
}
return groovyBrowsePar;
}
=== 4.3.2. Makro Práce se záznamem a volání makro na serveru - podruhé ===
Řešení pomocí browsePanelu a voláním metody callServerGroovy. Tato metoda vrací object GroovyBrowsePar – v něm lze předat např. text zprávy.
Do pohledu – Práce se záznamem - vložíme následující kód
{{:orsoftopen:spravais:workshop:groovymakra:image57.png?700}}
import cz.ortex.groovy.GroovyBrowsePar;
import cz.ortex.model.O6a;
import cz.ortex.util.o0.O0Session;
import cz.ortex.gui.o0.browse.BrowsePanel;
import cz.ortex.components.OptionPane;
import javax.swing.JOptionPane;
// Toto je vzor makra pro pohled - práce se záznamem - metoda validate
// Nelze volat samostatně.
// V makru je volána metoda callServerGroovy v aktuálním browsePanel
GroovyBrowsePar validate(O6a entity, Object dotahovane, String fieldName, Object fieldValue, GroovyBrowsePar groovyBrowsePar, O0Session o0session, BrowsePanel browsePanel) {
if ("dkaEMail".equals(fieldName) {
groovyBrowsePar = browsePanel.callServerGroovy("vzorEmailO6aTestSrv",
"kontrolaEmail", groovyBrowsePar);
if (groovyBrowsePar.getResult() == true) {
if (OptionPane.createYesNoDialog(null, "Špatný formát mailu, povolit ?",
JOptionPane.WARNING_MESSAGE) == 1) {
groovyBrowsePar.setFocusName(fieldName);
} else {
entity.setDkaHomePage(fieldValue.toString());
}
}
}
}
Na straně serveru si připravíme volané makro
{{:orsoftopen:spravais:workshop:groovymakra:image58.png?700}}
import cz.ortex.groovy.GroovyBrowsePar;
import cz.ortex.model.O6a;
import cz.ortex.apilogic.o0.adresar.O6aData;
import cz.ortex.util.o0.O0Session;
import cz.ortex.util.o0.O0StringUtil;
// Toto je vzor serverového makra volané z makra pro pohled - práce se záznamem - metoda validate
// Makro vrací objekt GroovyBrowsePar
//Makru se předává parametr groovyBrowsePar, ostatní parametry v této metodě jsou povinné - doplní je "browsePanel" - entitu, dotahované a o0Session
// groovyBrowsePar = browsePanel.callServerGroovy("vzorEmailO6aTestSrv", "kontrolaEmail", groovyBrowsePar);
GroovyBrowsePar kontrolaEmail(O6a entity, O6aData dotahovane, O0Session o0Session, GroovyBrowsePar groovyBrowsePar) {
if (entity.getDkaEMail().contains("@")) {
groovyBrowsePar.setResult(true);
if (O0StringUtil.isBlank(entity.getDkaHomePage())) {
//nastavení webové stránky dle domény z e-mailu
entity.setDkaHomePage("www." +
entity.getDkaEMail().substring(entity.getDkaEMail().indexOf("@") + 1));
}
} else {
groovyBrowsePar.setResult(false);
}
return groovyBrowsePar;
}
=== 4.3.3. Makro Práce se záznamem a volání makro na serveru - potřetí ===
Řešení pomocí Dao a voláním metody callGroovy. Tato metoda vrací obecně jakýkoli objekt, který je dále zpracován. Zde v příkladu je použito O6aDao a vracený objekt je osoba třídy Osoby.
Do pohledu – Práce se záznamem - vložíme následující kód
{{:orsoftopen:spravais:workshop:groovymakra:image59.png?700}}
import cz.ortex.groovy.GroovyBrowsePar;
import cz.ortex.util.o0.O0Data;
import cz.ortex.util.o0.O0Session;
import cz.ortex.model.O6a;
import cz.ortex.model.Osoby;
import cz.ortex.gui.o0.browse.BrowsePanel;
import cz.ortex.apidao.o0.adresar.O6aDao;
import cz.ortex.util.o0.AppContext;
// Toto je vzor makra pro pohled - práce se záznamem - metoda validate
// Nelze volat samostatně.
// V makru je volána metoda callGroovy v Dao - je zde použito O6aDao
//Makru se předávají parametry v poli Objects[] - jejich počet a typy musí být stejné jako je ve volané metodě "kontrolaEmail" v makru na serveru "vzorEmailO6aOsobySrv"
// Osoby kontrolaEmail(O6a entity, Object dotahovane, String fieldName, Object fieldValue, GroovyBrowsePar groovyBrowsePar, O0Session o0Session) {
GroovyBrowsePar validate(O6a entity, Object dotahovane, String fieldName,
Object fieldValue, GroovyBrowsePar groovyBrowsePar,
O0Session o0session, BrowsePanel browsePanel) {
if ("dkaEMail".equals(fieldName)) {
O6aDao o6aDao = (O6aDao) AppContext.getDaoService("o6aDao");
if (o6aDao != null) {
Object[] grooObject = new Object[6];
grooObject[0] = entity;
grooObject[1] = dotahovane;
grooObject[2] = fieldName;
grooObject[3] = fieldValue;
grooObject[4] = groovyBrowsePar;
grooObject[5] = o0session;
Osoby osoba = o6aDao.callGroovy("vzorEmailO6aOsobySrv", "kontrolaEmail", grooObject);
if (osoba != null) {
if (osoba.getJmPrijm() != null) {
entity.setDkaHomePage(osoba.getJmPrijm());
}
}
}
}
return groovyBrowsePar;
}
Na straně serveru si připravíme volané makro
{{:orsoftopen:spravais:workshop:groovymakra:image60.png?700}}
import cz.ortex.groovy.GroovyBrowsePar;
import cz.ortex.model.O6a;
import cz.ortex.model.Osoby;
import cz.ortex.apilogic.o0.adresar.O6aData;
import cz.ortex.util.o0.O0Session;
import cz.ortex.util.o0.O0StringUtil;
import cz.ortex.util.o0.OEntityUtil;
// Toto je vzor serverového makra volané z makra pro pohled - práce se záznamem - metoda validate
// Makro vrací objekt Osoba
//Makru se předávají parametry v poli Objects[] - jejich počet a typy musí být stejné jako je ve této metodě
// Object[] grooObject = new Object[6];
// grooObject[0] = entity;
// grooObject[1] = dotahovane;
// grooObject[2] = fieldName;
// grooObject[3] = fieldValue;
// grooObject[4] = groovyBrowsePar;
// grooObject[5] = o0session;
// Osoby osoba = o6aDao.callGroovy("vzorEmailO6aOsobySrv",
"kontrolaEmail", grooObject);
Osoby kontrolaEmail(O6a entity, Object dotahovane, String fieldName,
Object fieldValue, GroovyBrowsePar groovyBrowsePar,
O0Session o0Session) {
if (entity.getDkaEMail().contains("@")) {
Integer oscis = o0Session.getUserNumber();
Osoby osoba = (Osoby) OEntityUtil.getRecordByParam(Osoby.class.getCanonicalName(),
"oscis", oscis);
return osoba;
} else {
return null;
}
}
=== 4.3.4. Makro Práce se záznamem a dotažení údajů k adrese z Dkx ===
import cz.ortex.groovy.GroovyBrowsePar;
import cz.ortex.util.o0.O0Data;
import cz.ortex.util.o0.O0Session;
import cz.ortex.util.o0.OEntityUtil;
import cz.ortex.util.o0.AppContext;
import cz.ortex.util.o0.O0StringUtil;
import cz.ortex.model.Nq10;
import cz.ortex.model.O6a;
import cz.ortex.model.Osoby;
import cz.ortex.model.Ohkon;
import cz.orcz.orfmodel.Dkx;
import cz.ortex.apidao.o0.adresar.O6aDao;
GroovyBrowsePar editUvod(Object entity, O0Data dotahovane, GroovyBrowsePar groovyBrowsePar, O0Session o0session, Object browsePanel) {
//zde vypiste kod
}
GroovyBrowsePar validate(Object entity, O0Data dotahovane, String fieldName, Object fieldValue, GroovyBrowsePar groovyBrowsePar, O0Session o0session, Object browsePanel) {
//zde vypiste kod
if (entity != null) {
if (entity.getO6aByO1firma() != null) {
if (entity.getO6aByO1firma().getDkaNr() != null) {
if ("o1ico0".equals(fieldName)) {
if (O0StringUtil.isBlank(entity.getKontakt())) {
if (O0StringUtil.isBlank(entity.getTelefon())) {
if (O0StringUtil.isBlank(entity.getEmail())) {
O6aDao o6aDao = (O6aDao) AppContext.getDaoService("o6aDao");
if (o6aDao != null) {
Dkx dodavatelDkx = o6aDao.podejDkxDodavatel(entity.getO6aByO1firma().getDkaNr());
if (dodavatelDkx != null) {
if (O0StringUtil.notBlank(dodavatelDkx.getDkxTel())) {
entity.setTelefon(dodavatelDkx.getDkxTel());
}
if (O0StringUtil.notBlank(dodavatelDkx.getDkxEMail2())) {
entity.setEmail(dodavatelDkx.getDkxEMail2());
}
if (dodavatelDkx.getDkxIdpkOhkon() != null) {
Ohkon osoby = (Ohkon) OEntityUtil.getRecordByParam(Ohkon.class.getCanonicalName(), "idpk", dodavatelDkx.getDkxIdpkOhkon());
if (osoby != null) {
String pr = "";
String jm = "";
if (osoby.getJmPrijm() != null) {
pr = osoby.getJmPrijm();
}
if (osoby.getJmJmeno() != null) {
jm = osoby.getJmJmeno();
}
entity.setKontakt(O0StringUtil.slozit(pr, jm, " "));
}
}
HashMap componentValues = new HashMap();
componentValues.put("kontakt", entity.getKontakt());
componentValues.put("telefon", entity.getTelefon());
componentValues.put("email", entity.getEmail());
groovyBrowsePar.setComponentValues(componentValues);
groovyBrowsePar.setFocusName("kontakt");
}
}
}
}
}
}
if ("o1firma0".equals(fieldName)) {
if (O0StringUtil.isBlank(entity.getKontakt())) {
if (O0StringUtil.isBlank(entity.getTelefon())) {
if (O0StringUtil.isBlank(entity.getEmail())) {
O6aDao o6aDao = (O6aDao) AppContext.getDaoService("o6aDao");
if (o6aDao != null) {
Dkx dodavatelDkx = o6aDao.podejDkxDodavatel(entity.getO6aByO1firma().getDkaNr());
if (dodavatelDkx != null) {
if (O0StringUtil.notBlank(dodavatelDkx.getDkxTel())) {
entity.setTelefon(dodavatelDkx.getDkxTel());
}
if (O0StringUtil.notBlank(dodavatelDkx.getDkxEMail2())) {
entity.setEmail(dodavatelDkx.getDkxEMail2());
}
if (dodavatelDkx.getDkxIdpkOhkon() != null) {
Ohkon osoby = (Ohkon) OEntityUtil.getRecordByParam(Ohkon.class.getCanonicalName(), "idpk", dodavatelDkx.getDkxIdpkOhkon());
if (osoby != null) {
String pr = "";
String jm = "";
if (osoby.getJmPrijm() != null) {
pr = osoby.getJmPrijm();
}
if (osoby.getJmJmeno() != null) {
jm = osoby.getJmJmeno();
}
entity.setKontakt(O0StringUtil.slozit(pr, jm, " "));
}
}
// entity.setKontakt("myslivec");
HashMap componentValues = new HashMap();
componentValues.put("kontakt", entity.getKontakt());
componentValues.put("telefon", entity.getTelefon());
componentValues.put("email", entity.getEmail());
groovyBrowsePar.setComponentValues(componentValues);
groovyBrowsePar.setFocusName("kontakt");
}
}
}
}
}
}
if ("o1nazev0".equals(fieldName)) {
if (O0StringUtil.isBlank(entity.getKontakt())) {
if (O0StringUtil.isBlank(entity.getTelefon())) {
if (O0StringUtil.isBlank(entity.getEmail())) {
O6aDao o6aDao = (O6aDao) AppContext.getDaoService("o6aDao");
if (o6aDao != null) {
Dkx dodavatelDkx = o6aDao.podejDkxDodavatel(entity.getO6aByO1firma().getDkaNr());
if (dodavatelDkx != null) {
if (O0StringUtil.notBlank(dodavatelDkx.getDkxTel())) {
entity.setTelefon(dodavatelDkx.getDkxTel());
}
if (O0StringUtil.notBlank(dodavatelDkx.getDkxEMail2())) {
entity.setEmail(dodavatelDkx.getDkxEMail2());
}
if (dodavatelDkx.getDkxIdpkOhkon() != null) {
Ohkon osoby = (Ohkon) OEntityUtil.getRecordByParam(Ohkon.class.getCanonicalName(), "idpk", dodavatelDkx.getDkxIdpkOhkon());
if (osoby != null) {
String pr = "";
String jm = "";
if (osoby.getJmPrijm() != null) {
pr = osoby.getJmPrijm();
}
if (osoby.getJmJmeno() != null) {
jm = osoby.getJmJmeno();
}
entity.setKontakt(O0StringUtil.slozit(pr, jm, " "));
}
}
HashMap componentValues = new HashMap();
componentValues.put("kontakt", entity.getKontakt());
componentValues.put("telefon", entity.getTelefon());
componentValues.put("email", entity.getEmail());
groovyBrowsePar.setComponentValues(componentValues);
groovyBrowsePar.setFocusName("kontakt");
}
}
}
}
}
}
}
}
}
return groovyBrowsePar;
}
=== 4.3.5. Makro Práce se záznamem a dotažení všech poznámek z WF ===
Do pohledu si vložíme víceřádkové pole a nazveme ho „wfPozn“. V makru bude následující plnění poznámkou:
import cz.ortex.groovy.GroovyBrowsePar;
import cz.ortex.util.o0.O0Data;
import cz.ortex.util.o0.O0Session;
import cz.ortex.apidao.o0.workflow.OfwoDao;
import cz.ortex.model.Ofwo;
import cz.ortex.util.o0.AppContext;
GroovyBrowsePar noEditDetail(Object entity, O0Data dotahovane, GroovyBrowsePar groovyBrowsePar, O0Session o0session, Object browsePanel) {
//zde vypiste kod
String wfPoznamka = "";
if (entity != null) {
OfwoDao ofwoDao = (OfwoDao) AppContext.getDaoService(OfwoDao.NAME);
if (ofwoDao != null) {
List ofwos = ofwoDao.getOfwosByTargetRecord(entity);
if (ofwos != null && !ofwos.isEmpty()) {
Ofwo ofwo = ofwos[0];
wfPoznamka = ofwoDao.pozHistorieTisk(ofwo, true, true, true);
}
}
}
HashMap componentValues = new HashMap();
componentValues.put("wfPozn", wfPoznamka);
groovyBrowsePar.setComponentValues(componentValues);
// System.out.println(wfPoznamka);
return groovyBrowsePar;
}
==== 4.4. Speciální makra ====
=== 4.4.1. Podání čísla žádanky ===
{{:orsoftopen:spravais:workshop:groovymakra:image61.png?700}}{{:orsoftopen:spravais:workshop:groovymakra:image62.png?700}}{{:orsoftopen:spravais:workshop:groovymakra:image63.png?700}}
import cz.ortex.model.Oelfrm;
import cz.ortex.util.o0.O0Session;
import cz.ortex.impldao.o0.admin.OsobyDaoImpl;
import cz.ortex.util.o0.O0DateUtil;
import cz.ortex.util.o0.O0StringUtil;
import cz.ortex.model.Osoby;
import java.util.logging.Level;
import java.util.logging.Logger;
String cisloZadanky(Object[] args, O0Session o0session) {
//char 20, číslo z Osob číslo referenta wf – skupina poslední 3 číslice, rok, 5, rostoucí číslo platí pro přihlášenou osobu
// zde se vrací pouze speciální maska kde samorostoucí číslo je oddělené za mezerou
String vysl = null;
Osoby osoby = OsobyDaoImpl.getEntity(o0session.getUserNumber());
String skupina = O0StringUtil.rtrim(osoby.getSkupina());
int len = skupina.length();
skupina = skupina.substring(len -3);
Integer rok = O0DateUtil.getRok(o0session.getDatumZpracovani());
vysl = skupina + rok.toString().substring(2,4) + "5 001";
return vysl;
}
=== 4.4.2. WF a vice maker v podmínce ===
{{:orsoftopen:spravais:workshop:groovymakra:image64.png?700}}
{{:orsoftopen:spravais:workshop:groovymakra:image65.png?700}}
import cz.ortex.util.o0.O0Session;
import cz.ortex.util.o0.OEntityUtil;
import java.rmi.RemoteException;
import java.math.BigDecimal;
import cz.ortex.model.Oelfrm;
import cz.ortex.model.Ofwos;
import cz.ortex.impldao.o0.workflow.OfwosDaoImpl;
String osobniLimit(Object[] objects, O0Session o0Session) {
String vysl = "0";
Oelfrm entity = (Oelfrm) objects[0];
if (entity != null) {
// Integer oscis = o0Session.getUserNumber();
Integer oscis = entity.getZodpovidaOscis();
Ofwos ofwos = OfwosDaoImpl.getEntityByUtvar(oscis, entity.getHodn06(), o0Session);
if (ofwos != null && ofwos.getOsobniLimit() != null) {
vysl = ofwos.getOsobniLimit().toString();
}
}
return vysl;
}
{{:orsoftopen:spravais:workshop:groovymakra:image66.png?700}}
import cz.ortex.util.o0.O0Session;
import cz.ortex.util.o0.OEntityUtil;
import cz.ortex.util.o0.O0StringUtil;
import java.rmi.RemoteException;
import cz.ortex.model.Oelfrm;
String pripravena(Object[] objects, O0Session o0Session) {
Oelfrm entity = (Oelfrm) objects[0];
if (entity != null) {
if (entity.getStav() == null) {
return true;
}
if (O0StringUtil.isBlank(entity.getStav().toString())) {
return true;
}
}
return false;
}
{{:orsoftopen:spravais:workshop:groovymakra:image67.png?700}}
import cz.ortex.util.o0.O0Session;
import cz.ortex.util.o0.OEntityUtil;
import java.rmi.RemoteException;
import java.math.BigDecimal;
import cz.ortex.model.Oelfrm;
import cz.ortex.model.Ofwos;
import cz.ortex.impldao.o0.workflow.OfwosDaoImpl;
String substring(Object[] objects, O0Session o0Session) {
String vysl = "' '";
Oelfrm entity = (Oelfrm) objects[0];
if (entity != null) {
if (entity.getCislo() != null) {
vysl = "'" + entity.getCislo().substring(0,3) + "'";
}
}
return vysl;
}
=== 4.4.1. WF a kontrola správnosti schválení makrem ===
Makro kontroluje vyplnění návrhu rozpočtu (tabulka OFWDT) na cenu faktury
{{:orsoftopen:spravais:workshop:groovymakra:image68.png?700}}
{{:orsoftopen:spravais:workshop:groovymakra:image69.png?700}}
{{:orsoftopen:spravais:workshop:groovymakra:image70.png?700}}
import cz.ortex.util.o0.O0Session;
import cz.ortex.util.o0.OEntityUtil;
import java.rmi.RemoteException;
import cz.ortex.apilogic.o0.workflow.OfwUtil;
import cz.ortex.model.Ofwdt;
import cz.ortex.model.Ofwk;
import cz.ortex.model.PpfHl;
import cz.ortex.implutil.o0.HibernateUtil;
import java.io.Serializable;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;
import cz.ortex.apilogic.o0.workflow.OfwRetObject;
import cz.ortex.apilogic.o0.workflow.OfwSplnenoChoices;
import org.apache.commons.beanutils.ConvertUtils;
import cz.ortex.util.o0.O0StringUtil;
OfwRetObject stepActionRun(PpfHl entity, Ofwk ofwk, OfwUtil.OfwActionRunParams runParams, O0Session o0Session) {
OfwRetObject retObject = new OfwRetObject();
retObject.setActionCorrectlyDone(true);
String chyba = "";
BigDecimal obnosFaktury = new BigDecimal(100.00);
// "vzdy do 1 Kc, u cizi meny prepocitat dle kurzu na fakture"
BigDecimal rozdilMax = new BigDecimal(1.00);
BigDecimal rozdilProc = new BigDecimal(5.00);
if (entity != null) {
if (entity.getObnosTuzem() != null) {
obnosFaktury = entity.getObnosFakt();
if (O0StringUtil.notBlank(ofwk.getTrideni2())) {
obnosFaktury = ConvertUtils.convert(ofwk.getTrideni2().trim().replaceAll(",","."), BigDecimal.class);
}
Session session = HibernateUtil.getCurrentSession();
Transaction tx = session.getTransaction();
boolean byloTransactionActive = tx.isActive();
try {
if (!byloTransactionActive) {
tx.begin();
}
String nazevTab = "PpfhlRozuct";
BigDecimal obnosNum02 = BigDecimal.ZERO;
Criteria c = session.CriteriaUtil.createCriteria(session, Ofwdt.class);
c.add(Restrictions.eq("nazevtab", nazevTab.trim()));
c.add(Restrictions.eq("casttab", " "));
c.add(Restrictions.eq("ofwkIdpk", ofwk.getIdpk()));
List ofwdtList = c.list();
for (int i = 0; i < ofwdtList.size(); i++) {
Ofwdt ofwdt = ofwdtList.get(i);
if (ofwdt != null) {
if (ofwdt.getNazevtab().trim().equals(nazevTab.trim())) {
if (ofwdt.getNum02() != null) {
obnosNum02 = obnosNum02.add(ofwdt.getNum02());
}
}
}
}
if (entity.getObnosTuzem().compareTo(obnosNum02) == 0) {
chyba = "OK";
} else {
// "Nelze schválit. Rozdílny obnos faktury a rozúčtování."
BigDecimal sto = new BigDecimal(100.00);
BigDecimal rozdil = obnosFaktury.subtract(obnosNum02);
rozdil = rozdil.abs();
BigDecimal procento = rozdil.divide(obnosFaktury, 2, RoundingMode.HALF_DOWN).multiply(sto);
procento = procento.abs();
if (rozdil.compareTo(rozdilMax) > 0) {
chyba = "- nelze schválit. Rozdílný obnos faktury a rozúčtování.";
retObject.setActionCorrectlyDone(false);
retObject.setChoiceToSetWf(OfwSplnenoChoices.OfwSplnenoChoice.NESPLNENO);
retObject.setRetString(chyba);
}
if (procento.compareTo(rozdilProc) > 0) {
chyba = "- nelze schválit. Rozdílný obnos faktury a rozúčtování.";
retObject.setActionCorrectlyDone(false);
retObject.setChoiceToSetWf(OfwSplnenoChoices.OfwSplnenoChoice.NESPLNENO);
retObject.setRetString(chyba);
}
}
} catch (Exception e) {
if (!byloTransactionActive) {
tx.rollback();
}
retObject.setActionCorrectlyDone(false);
retObject.setChoiceToSetWf(OfwSplnenoChoices.OfwSplnenoChoice.NESPLNENO);
retObject.setRetString("Bylo exception");
retObject.setException(e);
throw new RuntimeException(e);
}
}
}
return retObject;
}
=== 4.4.1. WF a kontrola správnosti schválení makrem 2 ===
Makro kontroluje zda je vyplněn alespoň jeden řádek návrhu čerpání rozpočtu (v tabulce OFWDT).
{{:orsoftopen:spravais:workshop:groovymakra:image71.png?700}}
{{:orsoftopen:spravais:workshop:groovymakra:image72.png?700}}
import cz.ortex.util.o0.O0Session;
import cz.ortex.util.o0.OEntityUtil;
import java.rmi.RemoteException;
import cz.ortex.apilogic.o0.workflow.OfwUtil;
import cz.ortex.model.Ofwdt;
import cz.ortex.model.Ofwk;
import cz.ortex.model.PpfHl;
import cz.ortex.implutil.o0.HibernateUtil;
import java.io.Serializable;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;
import cz.ortex.apilogic.o0.workflow.OfwRetObject;
import cz.ortex.apilogic.o0.workflow.OfwSplnenoChoices;
import org.apache.commons.beanutils.ConvertUtils;
import cz.ortex.util.o0.O0StringUtil;
public OfwRetObject stepActionRun(PpfHl entity, Ofwk ofwk, OfwUtil.OfwActionRunParams runParams, O0Session o0Session) {
OfwRetObject retObject = new OfwRetObject();
retObject.setActionCorrectlyDone(true);
String chyba = "";
if (entity != null) {
Session session = HibernateUtil.getCurrentSession();
Transaction tx = session.getTransaction();
boolean byloTransactionActive = tx.isActive();
try {
if (!byloTransactionActive) {
tx.begin();
}
String nazevTab = "PpfhlRozp";
Criteria c = session.CriteriaUtil.createCriteria(session, Ofwdt.class);
c.add(Restrictions.eq("nazevtab", nazevTab.trim()));
c.add(Restrictions.eq("casttab", " "));
c.add(Restrictions.eq("ofwkIdpk", ofwk.getIdpk()));
List ofwdtList = c.list();
for (int i = 0; i < ofwdtList.size(); i++) {
Ofwdt ofwdt = ofwdtList.get(i);
if (ofwdt != null) {
if (ofwdt.getNazevtab().trim().equals(nazevTab.trim())) {
if (ofwdt.getHodnota10() == null || ofwdt.getHodnota10().trim().length() == 0) {
chyba = " - prázdný oddíl v rozúčtování";
retObject.setActionCorrectlyDone(false);
retObject.setChoiceToSetWf(OfwSplnenoChoices.OfwSplnenoChoice.NESPLNENO);
retObject.setRetString(chyba);
break;
}
}
}
}
if (!byloTransactionActive) {
tx.commit();
}
} catch (Exception e) {
if (!byloTransactionActive) {
tx.rollback();
}
retObject.setActionCorrectlyDone(false);
retObject.setChoiceToSetWf(OfwSplnenoChoices.OfwSplnenoChoice.NESPLNENO);
retObject.setRetString("Bylo exception");
retObject.setException(e);
throw new RuntimeException(e);
}
}
return retObject;
}
=== 4.4.2. WF a dotažení obnosu do udaje WF včetně vodících null ===
1) Takto je plnění u většiny zákazníků – na Typu postupu se řekne, jaký údaj ze schvalovaného dokladu se má umístit do WF údajů.
{{:orsoftopen:spravais:workshop:groovymakra:image73.png?700}}
2) Takto lze plnit údaj pomocí makra, kde si změníte způsob naplnění
{{:orsoftopen:spravais:workshop:groovymakra:image74.png?700}}
3) Makro vypadá nějak takto
{{:orsoftopen:spravais:workshop:groovymakra:image75.png?700}}
A zde je změna uložení – u obnosu faktury se doplní zepředu nuly na nějaký „rozumný“ počet míst
{{:orsoftopen:spravais:workshop:groovymakra:image76.png?700}}
import cz.ortex.util.o0.O0Session;
import cz.ortex.util.o0.OEntityUtil;
import java.text.DecimalFormat;
// metoda vrací string, max. 50 znaků pro Doplňkovou hodnotu u Typu postupu
// pro každou Doplňkovou hodnotu je třeba mít jedno makro
String hodnota(Object[] objects, O0Session o0Session) {
//zde vypište kód
Object primRecord = objects[0];
String hodnota = "";
if (primRecord != null) {
if (primRecord.getObnosFakt() != null) {
BigDecimal bigDecimal = primRecord.getObnosFakt();
DecimalFormat df = new DecimalFormat("0000000000000000.00");
hodnota = df.format(bigDecimal);
}
}
return hodnota;
}
4) A v zobrazení je třeba ty úvodní zase odstranit. Jinak tam budou vidět
{{:orsoftopen:spravais:workshop:groovymakra:image77.png?700}}
5) A to se udělá zase makrem na sloupci
{{:orsoftopen:spravais:workshop:groovymakra:image78.png?700}}
import cz.ortex.model.Ofwk;
import cz.ortex.util.o0.OEntityUtil;
import cz.ortex.util.o0.O0StringUtil;
import cz.ortex.model.Osoby;
Object getCellValue(Ofwk entity, Object dotahovane) {
if (entity != null) {
Character znak = '0';
return O0StringUtil.lTrimByChar(entity.getTrideni1(), znak);
}
return " ";
}
6) Nebo zobrazení změnou textového pole na číselné
{{:orsoftopen:spravais:workshop:groovymakra:image79.png?700}}
=== 4.4.3. WF a dotažení datumu do udaje WF ve formátu RRRRMMDD ===
1) Takto je plnění u většiny zákazníků – na Typu postupu se řekne, jaký údaj ze schvalovaného dokladu se má umístit do WF údajů.
{{:orsoftopen:spravais:workshop:groovymakra:image80.png?700}}
Datum se doplní do WF ve formátu DD.MM.RRRR
2) Takto lze plnit údaj pomocí makra, kde si změníte způsob naplnění
{{:orsoftopen:spravais:workshop:groovymakra:image81.png?700}}
3) Makro vypadá nějak takto
{{:orsoftopen:spravais:workshop:groovymakra:image82.png?700}}
A zde je změna uložení – u datumu splatnosti faktury se změní uložení na RRRRMMDD
{{:orsoftopen:spravais:workshop:groovymakra:image83.png?700}}
import cz.ortex.util.o0.O0Session;
import cz.ortex.util.o0.OEntityUtil;
import cz.ortex.util.o0.O0StringUtil;
import cz.ortex.util.o0.O0DateUtil;
import org.apache.commons.beanutils.ConvertUtils;
// metoda vrací string, max. 50 znaků pro Doplňkovou hodnotu u Typu postupu
// pro každou Doplňkovou hodnotu je třeba mít jedno makro
String hodnota(Object[] objects, O0Session o0Session) {
//zde vypište kód
Object primRecord = objects[0];
String hodnota = "00000000";
if (primRecord != null) {
if (primRecord.getDatSplatnost() != null) {
Date datum = primRecord.getDatSplatnost();
String hodn = O0DateUtil.dateToString(datum);
if (O0StringUtil.notBlank(hodn)) {
hodnota = hodn.substring(6,10) + hodn.substring(3,5) + hodn.substring(0,2);;
}
}
}
return hodnota;
}
4) A v zobrazení je třeba zase změní zobrazení na DD.MM.RRRR
{{:orsoftopen:spravais:workshop:groovymakra:image84.png?700}}
5) A to se udělá zase makrem na sloupci
{{:orsoftopen:spravais:workshop:groovymakra:image85.png?700}}
import cz.ortex.model.Ofwk;
import cz.ortex.util.o0.OEntityUtil;
import cz.ortex.util.o0.O0StringUtil;
import cz.ortex.model.Osoby;
Object getCellValue(Ofwk entity, Object dotahovane) {
if (entity != null) {
if (O0StringUtil.notBlank(entity.getTrideni5())) {
return entity.getTrideni5().substring(6,8) + "." + entity.getTrideni5().substring(4,6) + "." + entity.getTrideni5().substring(0,4)
}
}
return " ";
}
=== 4.4.4. Pojmenování dokumentu ===
Makro vrací jméno dokumentu pro uložení. Lze kombinovat s pořadím.
{{:orsoftopen:spravais:workshop:groovymakra:image86.png?700}}{{:orsoftopen:spravais:workshop:groovymakra:image87.png?700}}{{:orsoftopen:spravais:workshop:groovymakra:image88.png?700}}{{:orsoftopen:spravais:workshop:groovymakra:image89.png?700}}
Zde je vzorové systémové makro:
{{:orsoftopen:spravais:workshop:groovymakra:image90.png?700}}
import cz.ortex.util.o0.O0Session;
import cz.ortex.util.o0.OEntityUtil;
import java.rmi.RemoteException;
import java.math.BigDecimal;
import cz.ortex.model.Oeldok;
// Vzorové makro pro podání jména dokumentu
// pro použití jako uživatelské přejmenovat na groo...
String jmenoDokumentu(Object[] objects, O0Session o0Session) {
String vysl = "";
Oeldok oeldok = null;
Object entity = objects[0];
if (objects.length > 1) {
oeldok = objects[1];
}
if (entity != null) {
vysl = "nove_jmeno";
}
return vysl;
}
==== 4.5. Práce s browsem ====
**Poznámka – pro doplnění sloupce browsu, který je plněn makrem, je v Dotahovaných k tomuto účelu připraven atribut „zzmakro“. **
=== 4.5.1. Obarvení browsu pomocí SQL ===
Makro vykonává na serveru, kontroluje se na klientu a tak je třeba místo
import cz.ortex.implutil.o0.HibernateUtil;
použít celou cestu až při volání
Session session = cz.ortex.implutil.o0.HibernateUtil.getCurrentSession();
{{:orsoftopen:spravais:workshop:groovymakra:image91.png?700}}
import java.awt.Color; import cz.ortex.util.o0.O0Session; import cz.ortex.util.o0.OEntityUtil; import cz.ortex.util.o0.O0StringUtil; import java.rmi.RemoteException; import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.query.NativeQuery; import cz.ortex.implutil.o0.HibernateUtil; import cz.ortex.model.PpfHl;
Color getBackgroundColor(Object entity, Object dotahovane) {
//zde vypiste kod
}
Color getForegroundColor(Object entity, Object dotahovane) {
//zde vypiste kod
BigDecimal sumaSkut = BigDecimal.ZERO;
if (entity != null) {
if (entity.getO6a() != null) {
Session session = HibernateUtil.getCurrentSession();
Transaction transaction = session.getTransaction();
boolean byloTransactionActive = transaction.isActive();
if (!byloTransactionActive) {
transaction.begin();
}
if (transaction.isActive()) {
String testDotaz = "select sum(obnos_tuzem) from PPF_HL where cf_o6a = " + entity.getO6a().getDkaNr() + " group by cf_o6a";
NativeQuery sqlQuery = session.createNativeQuery(testDotaz);
Object hodnota = (Object) sqlQuery.uniqueResult();
if (hodnota != null) {
if (hodnota.getClass().getSimpleName().equals("BigDecimal")) {
sumaSkut = (BigDecimal) hodnota;
}
}
}
if (!byloTransactionActive) {
transaction.rollback();
}
if (sumaSkut.compareTo(new BigDecimal("100000.00"))> 0) {
return new Color(255,0,0);
}
}
=== 4.5.2. Makro pro dotažení WF, které je Vráceno ===
Nad přijatými fakturami
{{:orsoftopen:spravais:workshop:groovymakra:image92.png?700}}
{{:orsoftopen:spravais:workshop:groovymakra:image93.png?700}}
import cz.ortex.util.o0.O0Session;
import cz.ortex.util.o0.OEntityUtil;
import cz.ortex.util.o0.O0StringUtil;
import java.rmi.RemoteException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.query.NativeQuery;
import cz.ortex.implutil.o0.HibernateUtil;
import java.util.List;
import cz.ortex.model.PpfHl;
import cz.ortex.model.Ofwk;
import cz.ortex.model.Osoby;
Object getCellValue(PpfHl entity, Object dotahovane) {
String vysl = " ";
if ((entity != null) && (entity.getDatOdsouhlaseni() == null) && (entity.getDatPredani() != null)) {
Session session = HibernateUtil.getCurrentSession();
Transaction transaction = session.getTransaction();
boolean byloTransactionActive = transaction.isActive();
if (!byloTransactionActive) {
transaction.begin();
}
if (transaction.isActive()) {
String testDotaz = "select ofwk.idpk from OFWO ofwo join OFWK ofwk on ofwk.ofwp_idpk = ofwo.ofwp_idpk join OFWA ofwa on ofwa.idpk = ofwk.ofwa_idpk where (ofwa.aktivita = 'ZNOVU') and (ofwk.splneno = 'n') and (ofwo.stav = '1') and (ofwo.obj_name = 'PpfHl') and (ofwo.obj_idpk = " + entity.getIdpk() + " )";
NativeQuery sqlQuery = session.createNativeQuery(testDotaz);
List list = sqlQuery.getResultList();
for (Object l : list) {
if (l != null) {
vysl = "Ano";
}
}
}
if (!byloTransactionActive) {
transaction.rollback();
}
}
return vysl;
}
=== 4.5.3. Makro pro dotažení jména aktuálního schvalovatele ve WF ===
import cz.ortex.util.o0.O0Session;
import cz.ortex.util.o0.OEntityUtil;
import cz.ortex.util.o0.O0StringUtil;
import cz.ortex.model.PpfHl;
import cz.ortex.model.Ofwk;
import cz.ortex.model.Osoby;
import cz.ortex.impldao.o0.workflow.OfwkDaoImpl;
Object getCellValue(PpfHl entity, Object dotahovane) {
String vysl = " ";
if ((entity != null) && (entity.getDatOdsouhlaseni() == null)) {
OfwkDaoImpl ofwkDaoImpl = new OfwkDaoImpl();
Ofwk ofwk = ofwkDaoImpl.aktualniKrok(entity, "PPFHL");
if (ofwk != null) {
Osoby osoby = null;
osoby = (Osoby) OEntityUtil.getRecordByParam(Osoby.class.getCanonicalName(), "idpk", ofwk.getUcastnikIdpk());
if (osoby != null) {
return osoby.getJmPrijm().trim() + " " + osoby.getJmJmeno().trim();
}
}
}
return vysl;
}
=== 4.5.4. Makro dotažení obnosu faktury z rozúčtování ===
{{:orsoftopen:spravais:workshop:groovymakra:image94.png?700}}
{{:orsoftopen:spravais:workshop:groovymakra:image95.png?700}}
import cz.ortex.util.o0.O0Session;
import cz.ortex.util.o0.OEntityUtil;
import java.rmi.RemoteException;
import cz.ortex.apilogic.o0.workflow.OfwUtil;
import java.io.Serializable;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.rmi.RemoteException;
import cz.ortex.apidao.p0.ucto.PucnDao;
import cz.ortex.model.PpfHl;
import cz.ortex.impldao.p0.ucto.PucnDaoImpl;
BigDecimal obnosPpfhl(Object[] objects, O0Session o0Session) {
//zde vypište kód
BigDecimal obnosFa = BigDecimal.ZERO;
PpfHl ppfhl = (PpfHl) objects[0];
if (ppfhl != null) {
try {
PucnDao dao = (PucnDao) OEntityUtil.getServiceByName(OEntityUtil.OServiceType.dao, "pucnDao");
if (dao != null) {
obnosFa = dao.getObnosFakturovanoVcetneZalohForPpfHlWorkflow(ppfhl);
}
} catch (RemoteException ex) {
Logger.getLogger(PpfHlPanel.class.getName()).log(Level.SEVERE, null, ex);
}
}
return obnosFa;
}
=== 4.5.5. Makro dotažení seznamu čísel faktury k objednávce ===
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;
}
=== 4.5.6. Dotažení do browsu s použitím entity z volajícího (nadřazeného) wrapperu ===
Makro pracuje s hodnotami v dotahovaných: - getPredavajiciClass() - Vrací entitní třídu z předávajícího wrapperu pro groovy makro cellValue - getPredavajiciId() - Vrací id entity z předávajícího wrapperu pro groovy makro cellValue
{{:orsoftopen:spravais:workshop:groovymakra:image96.png?700}}
import cz.ortex.util.o0.OEntityUtil;
import cz.ortex.util.o0.O0StringUtil;
import cz.ortex.model.PpfHl;
import cz.ortex.model.Givazobj;
import java.math.BigDecimal;
import cz.ortex.apidao.g0.GivazobjDao;
Object getCellValue(PpfHl entity, Object dotahovane) {
BigDecimal obnosFa = BigDecimal.ZERO;
if (entity != null) {
obnosFa = entity.getObnosTuzem();
if (dotahovane != null) {
if (dotahovane.getPredavajiciClass() != null) {
if (dotahovane.getPredavajiciId() != null) {
GivazobjDao givazobjDao = (GivazobjDao) OEntityUtil.getServiceByName(OEntityUtil.OServiceType.dao,
GivazobjDao.NAME);
if (givazobjDao != null) {
Givazobj givazobj = givazobjDao.getEntityByParam("Giia", dotahovane.getPredavajiciId(),
"PpfHl", entity.getIdpk());
if (givazobj != null) {
if (givazobj.getCastka() != null) {
obnosFa = givazobj.getCastka();
}
}
}
}
}
}
}
return obnosFa;
}
==== 4.6. Práce s detailem ====
=== 4.6.1. Zobrazení obrázku ===
Makro načte obrázek dle zadání a zobrazí ho v poli „gobrazek“
{{:orsoftopen:spravais:workshop:groovymakra:image97.png?700}}
{{:orsoftopen:spravais:workshop:groovymakra:image98.png?700}}
import cz.ortex.groovy.GroovyBrowsePar;
import cz.ortex.util.o0.O0Data;
import cz.ortex.util.o0.O0Session;
import cz.ortex.util.o0.O0StringUtil;
import cz.ortex.gui.o0.eldoc.OeldokWrapper;
import javax.swing.ImageIcon;
GroovyBrowsePar noEditDetail(Object entity, O0Data dotahovane, GroovyBrowsePar groovyBrowsePar, O0Session o0session, Object browsePanel) {
//zde vypiste kod
if (entity != null) {
HashMap componentValues = new HashMap();
// zobrazi prvni připojený obrázek druhu MAJ_BJ
String bI = "";
if (O0StringUtil.notBlank(entity.getIko())) {
bI = OeldokWrapper.podejNahledIko("MAJ_OBJ",entity.getIko(), 200);
}
componentValues.put("gobrazek", new ImageIcon(bI));
groovyBrowsePar.setComponentValues(componentValues);
return groovyBrowsePar;
}
}
=== 4.6.2. Zobrazení obrázku ===
Makro vytvoří čárový kód a zobrazí ho v poli „gobrck“
{{:orsoftopen:spravais:workshop:groovymakra:image99.png?700}}
{{:orsoftopen:spravais:workshop:groovymakra:image100.png?700}}
import cz.ortex.groovy.GroovyBrowsePar;
import cz.ortex.util.o0.O0Data;
import cz.ortex.util.o0.O0Session;
import cz.ortex.util.o0.O0StringUtil;
import javax.swing.ImageIcon;
import java.awt.image.BufferedImage;
import net.sourceforge.barbecue.Barcode;
import net.sourceforge.barbecue.BarcodeException;
import net.sourceforge.barbecue.BarcodeFactory;
import net.sourceforge.barbecue.BarcodeImageHandler;
import net.sourceforge.barbecue.output.OutputException;
GroovyBrowsePar noEditDetail(Object entity, O0Data dotahovane, GroovyBrowsePar groovyBrowsePar, O0Session o0session, Object browsePanel) {
//zde vypiste kod
if (entity != null) {
HashMap componentValues = new HashMap();
// zobrazi čárový kód - dle nastavení - zde Code128 z inventářního čísla
try {
Barcode barcode;
barcode = BarcodeFactory.createCode128B(String.valueOf(entity.getInv()));
barcode.setBarHeight(30);
barcode.setBarWidth(2);
//barcode.setResolution(300);
BufferedImage bCK = BarcodeImageHandler.getImage(barcode);
componentValues.put("gobrck", new ImageIcon(bCK));
} catch (BarcodeException ex) {
Logger.getLogger(G0zphValidator.class.getName()).log(Level.SEVERE, null, ex);
} catch (OutputException ex) {
Logger.getLogger(G0zphValidator.class.getName()).log(Level.SEVERE, null, ex);
}
groovyBrowsePar.setComponentValues(componentValues);
return groovyBrowsePar;
}
}
=== 4.6.3. Dotažení poznámky WF do detailu ===
Zde příklad pro Došlé faktury:
{{:orsoftopen:spravais:workshop:groovymakra:image101.png?700}}
{{:orsoftopen:spravais:workshop:groovymakra:image102.png?700}}
import cz.ortex.apidao.o0.workflow.OfwoDao;
import cz.ortex.model.Ofwo;
GroovyBrowsePar noEditDetail(Object entity, O0Data dotahovane, GroovyBrowsePar groovyBrowsePar, O0Session o0session, Object browsePanel) {
//zde vypiste kod
String wfPoznamka = "";
if (entity != null) {
OfwoDao ofwoDao = (OfwoDao) AppContext.getDaoService(OfwoDao.NAME);
if (ofwoDao != null) {
Ofwo ofwo = ofwoDao.getLastOfwoByTargetRecord(entity, "PPFHL", false);
if (ofwo != null ) {
wfPoznamka = ofwoDao.pozHistoriePozn(ofwo);
}
}
}
HashMap componentValues = new HashMap();
componentValues.put("wfPozn", wfPoznamka);
groovyBrowsePar.setComponentValues(componentValues);
return groovyBrowsePar;
}