importClass(Packages.ru.intertrust.cmj.af.core.AFSession);
importClass(Packages.ru.intertrust.cmj.af.exceptions.AFDaoBadParameterException);
importClass(Packages.ru.intertrust.cmj.rest.tunable.object.TunableObjectREST);
importClass(Packages.ru.intertrust.cmj.rest.tunable.object.TunableObjectREST.Resource);
importClass(Packages.ru.intertrust.cmj.rest.tunable.object.action.TunableOperation);
importClass(Packages.ru.intertrust.cmj.tunable.object.AnyTunableObject);
importClass(Packages.ru.intertrust.cmj.tunable.object.TunableObjectApplication);
importClass(Packages.ru.intertrust.cmj.tunable.object.TunableObjectApplication.ClientContextKey);
importClass(Packages.ru.intertrust.cmj.tunable.object.common.TunableObjectHelper);
importClass(Packages.ru.intertrust.cmj.rest.tunable.object.action.OperationJScriptREST);
importClass(Packages.ru.intertrust.cmj.rest.tunable.object.action.OperationJScriptREST.ReturnParamsResource);
importClass(Packages.ru.intertrust.cmj.af.tuning.impl.PropertyImpl);
importClass(Packages.ru.intertrust.cmj.dp.DPApplication);
importClass(Packages.ru.intertrust.cmj.rest.rkk.RkkResource);
importClass(Packages.ru.intertrust.cmj.af.utils.BeansUtils);
importClass(Packages.ru.intertrust.cmj.wf.impl.WorkflowProcessServiceImpl);
importClass(Packages.ru.intertrust.cmj.wf.api.ProcessVariables);
importClass(Packages.ru.intertrust.cmj.wf.api.ProcessUserTask);
importClass(Packages.ru.intertrust.cmj.wf.api.TaskVariables);
importClass(Packages.ru.intertrust.cmj.af.misc.AFDateTime);
importPackage(Packages.ru.intertrust.cmj.af.utils);
importPackage(Packages.ru.intertrust.cmj.af.tuning.impl);
importPackage(Packages.ru.intertrust.cmj.af.tuning);
importPackage(Packages.ru.intertrust.cmj.rest.tuning);
importPackage(Packages.java.util);
importPackage(Packages.java.lang);
importClass(Packages.org.apache.commons.lang3.exception.ExceptionUtils);
importClass(Packages.org.slf4j.LoggerFactory);
importClass(Packages.ru.intertrust.cm.core.business.api.dto.Filter);
importClass(Packages.java.util.Collections);
importClass(Packages.ru.intertrust.cmj.af.so.SOBeard);
importClass(Packages.ru.intertrust.cmj.af.so.SOApplication);
importClass(Packages.ru.intertrust.cmj.af.core.AFCMDomino);
importPackage(Packages.ru.intertrust.cm.core.business.api.dto.ReferenceValue);
importClass(Packages.ru.intertrust.cm.core.business.api.dto.StringValue);
function process(paramsResource, returnResource) {
if (paramsResource == null) {
throw new IllegalArgumentException("paramsResource must no be null.");
}
var paramPackageIddialogNameList = TunableObjectHelper.getAFInstanceValue(paramsResource.tuning().getValues().get("counter"));
if (paramPackageId.equals("context")) { // обработка первого пакета данных
process_context(paramsResource, returnResource);
}
}
/**
* Обработка первого пакета данных с клиента.
* @param paramsResource
* @return ресурс первого диалога сценария
*/
function process_context(paramsResource, returnResource) {
var appTNObject = AFSession.get().getApplication(TunableObjectApplication.class);
var ids = appTNObject.getClientContextIds(paramsResource.tuning());
if (ids.isEmpty()) {
throw new AFDaoBadParameterException("Не выбраны документы!");
}
var appdp = AFSession.get().getApplication(DPApplication.class);
var obj = appdp.getEntityByUNID(ids.get(0));
// Необходимо выдать исключение, если заявка удалена или прекращена в WD
if ("Webdocs2.0".equals(AFSession.get().currentUser().extendedAttributes().get("ClientAlias"))) {
var isTerminate = obj.tuning().getValues().get("wf") == null ? false : obj.tuning().getValues().get("wf").getValues().get("stage") == null ? false : obj.tuning().getValues().get("wf").getValues().get("stage").getValue().equals("Прекращена") ? true : false;
if (obj.isDeleted() || isTerminatenew ArrayList();
dialogNameList.add("ClientContextRequest");
dialogNameList.add("dialogParamWF");
dialogNameList.add("WFDialogInfo");
paramPackageId = "";
paramSchemaName = paramsResource.tuning().getSchema().getName();
if (dialogNameList.contains(paramSchemaName)) {
paramPackageId = TunableObjectHelper.getAFInstanceValue(paramsResource.tuning().getValues().get("counter"));
} else {
paramPackageId = "contextWithResource";
}
if (paramPackageId.equals("context")) {
createContextResourceRequest(returnResource);
} else if (paramPackageId.equals("contextWithResource")) {
process_dialog(paramsResource, returnResource);
} else if (paramPackageId.equals("answer")) {
process_context(paramsResource, returnResource);
} else if (paramPackageId.equals("exit_update")) {
process_refresh(paramsResource, returnResource);
} else if (paramPackageId.equals("exit")) {
return throw new RuntimeException("Заявка была удалена. Обратитесь к администратору")
}
}
var workflowProcessService = BeansUtils.getBean("workflowProcessServiceImpl");
//запустить процесс
var StartProcessResult = workflowProcessService.startProcess("example_process", ids.get(0), null);
if (StartProcessResult.hasError()) {
rollbackWF(appdp, ids.get(0), obj);
throw new RuntimeException("Не удалось запустить процесс. Обратитесь к администратору");
}
//переоткрываем документ
obj = appdp.getEntityByUNID(ids.get(0));
//запись в Жизненный цикл
var currentUserprocess_exit(paramsResource, returnResource);
}
}
/**
* Обработка первого пакета данных с клиента.
* @return возвращение контекста открытого документа
*/
function createContextResourceRequest(returnResource) {
var appTNObject = AFSession.get().getApplication(TunableObjectApplication.class);
var afObjectContextRequest = appTNObject.createClientContextRequest(TunableObjectApplication.ClientContextKey.resourceid, TunableObjectApplication.ClientContextKey.resource);
TunableObjectHelper.putAFInstanceValue(afObjectContextRequest, "counter", "contextWithResource");
returnResource.setResource(TunableObjectREST.Resource.create(afObjectContextRequest));
}
/**
* Обновление объекта
* @param paramsResource
* @return ресурс первого диалога сценария
*/
function process_refresh(paramsResource, returnResource) {
var ids = TunableObjectHelper.getAFInstanceValue(paramsResource.tuning().getValues().get("selectIds"));
var appdp = AFSession.get().currentUsergetApplication()DPApplication.getBeard(class);
var executorobj = currentUserappdp.getEntityByUNID(ids.get(0));
var res var startDate = new AFDateTime(Calendar.getInstance());
var endDate = new AFDateTime(Calendar.getInstance());
var wf_status = "Отправка на исполнение";
var stage = "На исполнение";
var information = "-";
setLifeCycle(obj, startDate, endDate, wf_status, executor, currentUser, stage, information= RkkResource.valueOf(obj);
returnResource.setResource(res);
}
/**
* Завершение обработки в случае ошибки
* @param paramsResource
* @return ресурс первого диалога сценария
*/
function process_exit(paramsResource, returnResource) {
var ids = TunableObjectHelper.getAFInstanceValue(paramsResource.tuning().getValues().get("selectIds"));
var timeappdp = new AFDateTime(Calendar.getInstance());
TunableObjectHelper.putAFInstanceValue(obj.tuning(), "wf.actiontime", timeAFSession.get().getApplication(DPApplication.class);
var obj = appdp.getEntityByUNID(ids.get(0));
try {
obj.save(returnResource.setResource(null);
} catch (e) {
var appTNObject =
/**
* Диалог Информации c обновлением документа
* @ids текущий идентификатор документа
* @resultMessage сообщение
* @return ресурс
*/
function process_dlginfo_refresh(ids, resultMessage,returnResource){
var appTNObject = AFSession.get().getApplication(TunableObjectApplication.class);
var resultMessagemessage = "При сохранении произошел конфликт, сохранение изменений невозможно.\nОбъект будет переоткрыт в актуальном состоянии."
var message = appTNObject.composeDialog("RSHBRequestDialogInfo", null, null, null);
appTNObject.composeDialog("WFDialogInfo", null, null, null);
TunableObjectHelper.putAFInstanceValue(message.tuning(), "selectIdsmessage", idsresultMessage);
TunableObjectHelper.putAFInstanceValue(message.tuning(), "messageselectIds", resultMessageids);
TunableObjectHelper.putAFInstanceValue(message, "counter", "exit_update");
returnResource.resource = log.error("При сохранении произошел конфликт, сохранение изменений невозможно");
returnResource.resource = TunableObjectREST.Resource.TunableObjectREST.Resource.create(message);
return returnResource.resource;
}
obj = appdp.getEntityByUNID(ids.get(0));
var res = RkkResource.valueOf(obj);
returnResource.setResource(res);
}
/**
* Откатить статусное состояние WF
* @obj объект
* id идентификатор объекта
* @appdp приложение
*/
function rollbackWF(appdp, id, obj){
var document = appdp.getEntityByUNID(id);
var wf = obj.tuning().getValues().get("wf");
var assignee = null;
var task = "";
var status = "";
var stage = "Проект";
var duration = null;
var starttime = null;
var finishtime = null;
if (wf.getValues().get("assignee") != null) {
assignee = wf.getValues().get("assignee").getValues();
task = wf/**
* Диалог Информации c обновлением документа
* @ids текущий идентификатор документа
* @resultMessage сообщение
* @return ресурс
*/
function process_dlginfo(ids, resultMessage,returnResource){
var appTNObject = AFSession.get().getApplication(TunableObjectApplication.class);
var message = appTNObject.composeDialog("WFDialogInfo", null, null, null);
TunableObjectHelper.putAFInstanceValue(message.tuning(), "message", resultMessage);
TunableObjectHelper.putAFInstanceValue(message.tuning(), "selectIds", ids);
TunableObjectHelper.putAFInstanceValue(message, "counter", "exit");
returnResource.resource = TunableObjectREST.Resource.create(message);
return returnResource.resource;
}
/**
* Обработка первого пакета данных с клиента.
* @param paramsResource
* @return ресурс первого диалога сценария
*/
function process_dialog(paramsResource, returnResource) {
var appTNObject = AFSession.get().getApplication(TunableObjectApplication.class);
var id = TunableObjectHelper.getAFInstanceValue(paramsResource.tuning().getValues().get("task$id").getValue();
stage var ids = wfUtils.getValuesnewArrayList().get("stage").getValue();
duration = wfids.getValuesadd().get("duration").getValue();
starttimeid);
var appdp = wfAFSession.getValuesget().get("starttime").getValue(getApplication(DPApplication.class);
finishtime var obj = wfappdp.getValuesgetEntityByUNID().get("finishtime").getValue()id);
}
TunableObjectHelper.putAFInstanceValue(document.tuning(), "wf.assignee", assignee);
TunableObjectHelper.putAFInstanceValue(document.tuning(), "wf.task", task);
TunableObjectHelper.putAFInstanceValue(document.tuning(), "wf.status", status);
TunableObjectHelper.putAFInstanceValue(document.tuning(), "wf.stage", stage);
TunableObjectHelper.putAFInstanceValue(document.tuning(), "wf.duration", duration);
TunableObjectHelper.putAFInstanceValue(document.tuning(), "wf.starttime", starttime);
TunableObjectHelper.putAFInstanceValue(document.tuning(), "wf.finishtime", finishtime);
document.save();
}
/**
* Запись в Жизненный цикл
* @obj объект
* @startDate дата начала действия
* @endDate дата окончания действия
* @action действие
* @assignee исполнитель
* @currentUser пользователь, выполнивший действие
* @result Результат
* @information Доп. информация
*/
function setLifeCycle(obj, startDate, endDate, action, assignee, currentUser, result, information) {
var propertyLifecycle = obj.tuning().getSchema().getProperty("wfLifeCycle");
var lifecycle = null;
if (obj.tuning().getValues().containsKey("wfLifeCycle") && obj.tuning().getValues().get("wfLifeCycle") != null) {
lifecycle = obj.tuning().getValues().get("wf_lifecycle").getValues();
} else {
lifecycle = Utils.newArrayList();
}
var propertyStartDate = propertyLifecycle.getSchema().getProperty("lifecycle_start_date");
var propertyDate = propertyLifecycle.getSchema().getProperty("lifecycle_date");
var propertyAction = propertyLifecycle.getSchema().getProperty("lifecycle_action");
var propertyAssignee = propertyLifecycle.getSchema().getProperty("lifecycle_assignee");
var propertyCurrentUser = propertyLifecycle.getSchema().getProperty("lifecycle_current_user");
var propertyResult = propertyLifecycle.getSchema().getProperty("lifecycle_result");
var propertyInformation = propertyLifecycle.getSchema().getProperty("lifecycle_information");
var startDateValue = TuningHelper.createPropertyValue(startDate, propertyStartDate);
var endDateValue = TuningHelper.createPropertyValue(endDate, propertyDate);
var actionValue = TuningHelper.createPropertyValue(action, propertyAction);
var currentUserValue = TuningHelper.createPropertyValue(currentUser, propertyCurrentUser);
var assigneeValue = TuningHelper.createPropertyValue(assignee, propertyAssignee);
var resultValue = TuningHelper.createPropertyValue(result, propertyResult);
var informationValue = TuningHelper.createPropertyValue(information, propertyInformation);
var wf_lifecycle = new AFInstanceObjectImpl(propertyLifecycle.getSchema());
wf_lifecycle.getValues().put("lifecycle_start_date", startDateValue);
wf_lifecycle.getValues().put("lifecycle_date", endDateValue);
wf_lifecycle.getValues().put("lifecycle_action", actionValue);
wf_lifecycle.getValues().put("lifecycle_assignee", assigneeValue);
wf_lifecycle.getValues().put("lifecycle_current_user", currentUserValue);
wf_lifecycle.getValues().put("lifecycle_result", resultValue);
wf_lifecycle.getValues().put("lifecycle_information", informationValue);
lifecycle.add(wf_lifecycle);
var lifecycleValue = new AFInstanceArrayImpl(propertyLifecycle.getSchema(), lifecycle);
//Проверка на актуальность документа
var version = paramsResource.getVersion();
var versionParts = version.split('$$');
var versionContext = versionParts[0];
var versionCurrent = '';
try {
versionCurrent = obj.getVersionStamp().toString();
} catch (e) {
versionCurrent = versionContext;
}
if (versionContext != versionCurrent){
process_dlginfo(ids,"Данная версия объекта/документа была изменена. Требуется обновить!",returnResource);
return returnResource.resource;
}
var message = appTNObject.composeDialog("dialogParamWF", null, null, null);
TunableObjectHelper.putAFInstanceValue(message.tuning(), "message", "Запуск WF-процесса");
TunableObjectHelper.putAFInstanceValue(message.tuning(), "selectIds", ids);
TunableObjectHelper.putAFInstanceValue(message.tuning(), "versionContext", versionContext);
TunableObjectHelper.putAFInstanceValue(message, "counter", "answer");
returnResource.setResource(TunableObjectREST.Resource.create(message));
}
/**
* Обработка контекста
* @param paramsResource
* @return ресурс первого диалога сценария
*/
function process_context(paramsResource, returnResource) {
var ids = TunableObjectHelper.getAFInstanceValue(paramsResource.tuning().getValues().get("selectIds"));
var wfProcessName = TunableObjectHelper.getAFInstanceValue(paramsResource.tuning().getValues().get("wfProcessName"));
var wfAssignee1 = TunableObjectHelper.getAFInstanceValue(paramsResource.tuning().getValues().get("wfAssignee1"));
var wfAssignee2= TunableObjectHelper.getAFInstanceValue(paramsResource.tuning().getValues().get("wfAssignee2"));
var wfAssignee3 = TunableObjectHelper.getAFInstanceValue(paramsResource.tuning().getValues().get("wfAssignee3"));
var versionContext = TunableObjectHelper.getAFInstanceValue(paramsResource.tuning().getValues().get("versionContext"));
var workflowProcessName = wfProcessName;
var params = new ProcessVariables();
var currentUser = AFSession.get().currentUser().getBeard();
params.put("wfInitiator", currentUser.toString(SOBeard.ToStringFormat.CMDOMINO_STD));
params.put("wfAssignee1", wfAssignee1.toString(SOBeard.ToStringFormat.CMDOMINO_STD));
params.put("wfAssignee2", wfAssignee2.toString(SOBeard.ToStringFormat.CMDOMINO_STD));
params.put("wfAssignee3", wfAssignee3.toString(SOBeard.ToStringFormat.CMDOMINO_STD));
var appdp = AFSession.get().getApplication(DPApplication.class);
var obj = appdp.getEntityByUNID(ids.get(0));
var versionCurrent = '';
try {
versionCurrent = obj.getVersionStamp().toString();
} catch (e) {
versionCurrent = versionContext;
}
if (versionContext != versionCurrent){
process_dlginfo_refresh(ids,"Изменена версия объекта.\nОбъект будет переоткрыт в актуальном состоянии.",returnResource);
return returnResource.resource;
}
// Необходимо выдать исключение, если объект удален или прекращен в WD
if ("Webdocs2.0".equals(AFSession.get().currentUser().extendedAttributes().get("ClientAlias"))) {
var isTerminate = obj.tuning().getValues().putget("wfLifeCyclewf", lifecycleValue);
} |