Доработать схему
Добавить в схему RkkResourceInternal новые свойства
Схема
<?xml version='1.0' encoding='UTF-8'?> <schemas xmlns="http://www.intertrust.ru/schema/palette/tn-schema"> <schema extends="RkkResource" name="RkkResourceInternal"> <!--...--> <actor name="initiator"/> <actor name="initOrganization"/> <actor name="initBranch"/> <actor name="initDepartment"/> <string name="initHierDepatment"/> <string name="initPost"/> <string name="initPhone"/> <string name="initTabNum"/> <!--...--> <schema> </schemas>
Доработать форму
Добавить раздел инициатор
Доработать обработчик событий
Добавить в обработчик событий QueryCreate
Обработчик событий
<?xml version='1.0' encoding='UTF-8'?> <schemas xmlns="http://www.intertrust.ru/schema/palette/tn-schema"> <schema extends="RkkResource" name="RkkResourceInternal"> <!--...--> <custom-event-handler lang="JavaScript"><![CDATA[...]]></custom-event-handler> <schema> </schemas>
Код
QueryCreate
importClass(Packages.ru.intertrust.cmj.rest.tuning.TuningHelper); importClass(Packages.ru.intertrust.cmj.af.so.SOBeard); importClass(Packages.ru.intertrust.cmj.af.so.SOAppointment); importClass(Packages.ru.intertrust.cmj.af.core.AFSession); importClass(Packages.ru.intertrust.cmj.af.core.AFCMDomino); importPackage(Packages.java.lang); importPackage(Packages.java.util); importPackage(Packages.ru.intertrust.cmj.af.so); importClass(Packages.ru.intertrust.cmj.af.utils.DominoUtils); importClass(Packages.ru.intertrust.cmj.af.tuning.impl.AFInstanceContentImpl); importClass(Packages.ru.intertrust.cmj.tunable.object.TunableObjectApplication); importClass(Packages.org.springframework.util.StringUtils); importClass(Packages.ru.intertrust.cmj.af.utils.BeansUtils); importClass(Packages.ru.intertrust.cmj.af.utils.Utils); importClass(Packages.ru.intertrust.cmj.dp.DPApplication); importClass(Packages.ru.intertrust.cmj.af.so.impl.AppointmentHead); importClass(Packages.ru.intertrust.cmj.af.so.SOApplication); function queryCreate(object) { var values = object.tuning().getValues(); var user = AFSession.get().currentUser().getBeard(); //текуший пользователь var org = user.getOrganization().getBeard(); //организация var filial = getParentSeparateUnit(user); //филиал, обособленное подразделение var parentDep = getParentIndependentUnit(user); //самостоятельное подразделение var parentHierarchy = getParentDepartmentHierarchyString(user); //иерархия var post = user.originalData().getPostName(); //должность var tabNum = user.getTabNum(); //табельный номер var phone = AFSession.get().currentUser().getPerson().contactsInfo().getPhoneInternal(); //телефон //запись в поля values.put("initOrganization", TuningHelper.createPropertyValue(org, object.tuning().getSchema().getProperty("initOrg"))); values.put("initBranch", TuningHelper.createPropertyValue(filial, object.tuning().getSchema().getProperty("initBranch"))); values.put("initDepartment", TuningHelper.createPropertyValue(parentDep, object.tuning().getSchema().getProperty("initDepartment"))); values.put("initHierDepatment", TuningHelper.createPropertyValue(parentHierarchy, object.tuning().getSchema().getProperty("initHierDepatment"))); values.put("initiator", TuningHelper.createPropertyValue(user, object.tuning().getSchema().getProperty("initiator"))); values.put("initPost", TuningHelper.createPropertyValue(post, object.tuning().getSchema().getProperty("initPost"))); values.put("initPhone", TuningHelper.createPropertyValue(phone, object.tuning().getSchema().getProperty("initPhone"))); values.put("initTabNum", TuningHelper.createPropertyValue(tabNum, object.tuning().getSchema().getProperty("initTabNum"))); } /** Вычисление вышестоящего Самостоятельного подразделения. Если самостоятельное подразделение не будет вычислено, берется обособленное */ function getParentIndependentUnit(beard) { var parent = getParent(beard); //SOBeard var party = parent.originalData().getParty(); //SOParty if (party instanceof SOUnitStructure) { if (party.isIndependent() || party.isSeparate()) { return parent; } } if (party instanceof SOUnitOrganization) { return parent; } return getParentIndependentUnit(parent); } /** Вычисление вышестоящего Филиала/ГО по признаку Обособленное подразделение. */ function getParentSeparateUnit(beard) { if (beard.originalData().getType().toString().equals("SYS_ROLE")) { var branchFR = beard.originalData().getParty().getHeadOrBranchOffice(); if (branchFR != null) { return branchFR.getBeard(); } } var parent = getParent(beard); //beard.getParent(); //SOBeard var party = parent.originalData().getParty(); //SOParty if (party instanceof SOUnitStructure) { if (party.isSeparate()) { return parent; } } if (party instanceof SOUnitOrganization) { return parent; } return getParentSeparateUnit(parent); } /** Вычисление иерархии подразделений в виде строки */ function getParentDepartmentHierarchyString(beard) { var namesList = new ArrayList(); namesList = getParentDepartmentHierarchy(beard, namesList); //преобразуем в строку var result = ""; for (var i = 0; i < namesList.size(); i++) { var name = namesList.get(i); var shortName = name.length() > 100 ? (org.apache.commons.lang3.StringUtils.left(name, 97) + "...") : name; if (result.equals("")) { result = shortName; } else { result = result + "\n\\" + shortName; } } return result; } /** Вычисление иерархии подразделений до самостоятельного подразделения */ function getParentDepartmentHierarchy(beard, namesList) { var parent = getParent(beard); var party = parent.originalData().getParty(); if (party instanceof SOUnitDepartment) { namesList.add(party.getFullName()); if (party.isSeparate()) { return namesList; } else { return getParentDepartmentHierarchy(parent, namesList); } } else if (party instanceof SOUnitOrganization) { namesList.add(party.getFullName()); return namesList; } else if (party instanceof AppointmentHead) { namesList.add(party.getBeard().originalData().getShortName()); return getParentDepartmentHierarchy(parent, namesList); } return namesList; } /** Получение вышестоящего подразделения/РВЗ */ function getParent(beard) { var parent = beard.getParent(); if (parent != null) { return parent; } var parentDocId = null; var unidArr = beard.getUNID().split(":"); var tnUnid = unidArr[0] + "-TN:" + unidArr[1]; var tunApp = AFSession.get().getApplication(TunableObjectApplication.class); var tnObj = tunApp.getEntityByUNID(tnUnid); if (tnObj != null) { var parentUnit = tnObj.tuning().getValues().get("parentUnit"); if (parentUnit != null && parentUnit.getValues().get("basedocid") != null) { parentDocId = parentUnit.getValues().get("basedocid").getValue(); } } if (parentDocId != null) { var soApp = AFSession.get().getApplication(SOApplication.class); var soObj = soApp.getEntityByUNID(unidArr[0] + ":" + parentDocId); if (soObj != null) { if (soObj instanceof SOParty) { return soObj.getBeard(); } else if (soObj instanceof SOUnitPost && soObj.appointments().getCurrent() != null) { return soObj.appointments().getCurrent().getBeard(); } else { throw ("Ошибка при поиске родительского элемента - soObj " + soObj.getClass().getName()); } } } return null; }