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.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.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.ru.intertrust.cmj.wf.api.ProcessVariables);
importClass(Packages.ru.intertrust.cmj.wf.api.ProcessUserTask);
function process(paramsResource, returnResource) {
if (paramsResource == null) {
throw new IllegalArgumentException("paramsResource must no be null.");
}
var dialogNameList = new ArrayList();
dialogNameList.add("ClientContextRequest");
dialogNameList.add("ExampleDialogStandart");
dialogNameList.add("SystemDialogInfoExampleDialogInfo");
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_contextdialog(paramsResource, returnResource);
} else if (paramPackageId.equals("answer")) {
process_dialogcontext(paramsResource, returnResource);
} else if (paramPackageId.equals("exit_update")) {
process_refresh(paramsResource, returnResource);
}
}
/**
* Обработка первого пакета данных с else if (paramPackageId.equals("exit")) {
return process_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().getApplication(DPApplication.class);
var obj = appdp.getEntityByUNID(ids.get(0));
var res = RkkResource.valueOf(obj);
returnResource.setResource(res);
}
/**
* ДиалогЗавершение Информации
обработки *в @ids текущий идентификатор документаслучае ошибки
* @resultMessage@param сообщениеparamsResource
* @return ресурс первого диалога сценария
*/
function process_dlginfoexit(idsparamsResource, resultMessage,returnResource) {
var ids var appTNObject= TunableObjectHelper.getAFInstanceValue(paramsResource.tuning().getValues().get("selectIds"));
var appdp = AFSession.get().getApplication(TunableObjectApplicationDPApplication.class);
var messageobj = appTNObject.composeDialog("SystemDialogInfo", null, null, null);
TunableObjectHelper.putAFInstanceValue(message.tuning(), "message", resultMessage);
TunableObjectHelper.putAFInstanceValue(message, "counter", "exit");
returnResource.resource = TunableObjectREST.Resource.create(message);
return returnResource.resource;
}
/**
* Обработка первого пакета данных с клиента.
* @param paramsResource
* @return ресурс первого диалога сценарияappdp.getEntityByUNID(ids.get(0));
returnResource.setResource(null);
}
/**
* Диалог Информации c обновлением документа
* @ids текущий идентификатор документа
* @resultMessage сообщение
* @return ресурс
*/
function process_contextdlginfo_refresh(paramsResourceids, resultMessage,returnResource) {
var appTNObject = AFSession.get().getApplication(TunableObjectApplication.class);
var idmessage = appTNObject.composeDialog("ExampleDialogInfo", null, null, null);
TunableObjectHelper.getAFInstanceValueputAFInstanceValue(paramsResourcemessage.tuning().getValues().get("$id"));
var ids = Utils.newArrayList();
ids.add(id);
var appdp = AFSession.get().getApplication(DPApplication.class);
var obj = appdp.getEntityByUNID(id);
//Проверка на актуальность документа
var version = paramsResource.getVersion();
var versionParts = version.split('$$');
var versionContext = versionParts[0];
var versionCurrent = obj.getVersionStamp().toString();
if (versionContext != versionCurrent){
process_dlginfo(ids,"Данная версия объекта/документа была изменена. Требуется обновить!",returnResource);
return returnResource.resource;
}
var message = appTNObject.composeDialog("ExampleDialogStandart", null, null, null, "message", resultMessage);
TunableObjectHelper.putAFInstanceValue(message.tuning(), "selectIds", ids);
TunableObjectHelper.putAFInstanceValue(message, "counter", "exit_update");
returnResource.resource = TunableObjectREST.Resource.create(message);
return returnResource.resource;
}
/**
* Диалог Информации c обновлением документа
* @ids текущий идентификатор документа
* @resultMessage сообщение
* @return ресурс
*/
function process_dlginfo(ids, resultMessage,returnResource){
var appTNObject = AFSession.get().getApplication(TunableObjectApplication.class);
var message = appTNObject.composeDialog("ExampleDialogInfo", null, null, null);
TunableObjectHelper.putAFInstanceValue(message.tuning(), "message", resultMessage);
TunableObjectHelper.putAFInstanceValue(message.tuning(), "messageselectIds", "Комментарий:"ids);
TunableObjectHelper.putAFInstanceValue(message.tuning(), "selectIdscounter", ids"exit");
TunableObjectHelper.putAFInstanceValue(message.tuning(), "versionContext", versionContext);
TunableObjectHelper.putAFInstanceValue(message, "counter", "answer");
returnResource.setResource(resource = TunableObjectREST.Resource.create(message));
return returnResource.resource;
}
/**
* Обработка данных первого диалога сценарияконтекста
* @param paramsResource
* @return ресурс
* первого диалога сценария
*/
function process_dialog(paramsResource, returnResource) {
var idsappTNObject = TunableObjectHelperAFSession.getAFInstanceValueget(paramsResource.tuning().getValuesgetApplication().get("selectIds"))TunableObjectApplication.class);
var commentid = TunableObjectHelper.getAFInstanceValue(paramsResource.tuning().getValues().get("comment$id"));
var versionContextids = TunableObjectHelper.getAFInstanceValue(paramsResource.tuningUtils.newArrayList();
ids.getValuesadd().get("versionContext"))id);
var appdp = AFSession.get().getApplication(DPApplication.class);
var obj = appdp.getEntityByUNID(ids.get(0));
var versionCurrentversion = objparamsResource.getVersionStampgetVersion().toString();
ifvar (versionContextversionParts != versionCurrent){
process_dlginfo(ids,"Данная версия объекта/документа была изменена. Требуется обновить!",returnResource);
return returnResource.resourceversion.split('$$');
var versionContext = versionParts[0];
var versionCurrent = '';
try {
versionCurrent = obj.getVersionStamp().toString();
} catch (e) {
versionCurrent = versionContext;
}
if (obj.tuning().getValues().containsKey("wf") && obj.tuning().getValues().get("wf") if (versionContext != nullversionCurrent) {
var wf = obj.tuning().getValues().get("wf");
var task_name = wf.getValues().get("task").getValue();
var wf_status = "-";
if (wf.getValues().containsKey("status") && wf.getValues().get("status") != null ) {
wf_status = wf.getValues().get("status").getValue();
}
var wf_starttime = new AFDateTime(Calendar.getInstance());
if (wf.getValues().containsKey("actiontime") && wf.getValues().get("actiontime") != null ) {
wf_starttime = wf.getValues().get("actiontime").getValue();
} else if (wf.getValues().containsKey("starttime") && wf.getValues().get("starttime") != null ){
wf_starttime = wf process_dlginfo(ids,"Данная версия объекта/документа была изменена. Требуется обновить!",returnResource);
return returnResource.resource;
}
var message = appTNObject.composeDialog("ExampleDialogStandart", null, null, null);
TunableObjectHelper.putAFInstanceValue(message.tuning(), "message", "Комментарий:");
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("starttimeselectIds").getValue();
}
// Получаем задачу
var taskIdcomment = wfTunableObjectHelper.getAFInstanceValue(paramsResource.tuning().getValues().get("task_idcomment").getValue();
var workflowProcessServiceversionContext = BeansUtils.getBean("workflowProcessServiceImpl");
var task = workflowProcessService.getTaskById(taskIdTunableObjectHelper.getAFInstanceValue(paramsResource.tuning().getValues().get("versionContext"));
var appdp = AFSession.get().getApplication(DPApplication.class);
var obj = appdp.getEntityByUNID(ids.get(0));
// Должна быть только одна задача, завершаем ее, установив переменную
if (task != null){
var workflowProcessService = BeansUtils.getBean("workflowProcessServiceImpl");
workflowProcessService.sendProcessMessage("example_process", "END_PROCESS", ids.get(0), null);
obj = appdp.getEntityByUNID(ids.get(0));
//запись в Жизненный цикл
var currentUser = AFSession.get().currentUser().getBeard();
var executors = wf.getValues().get("assignee").getValues();
var executor = executors.get(0).getValue();
var startDate = wf_starttime;
var endDate = new AFDateTime(Calendar.getInstance());
var result = "Исполнено";
var information = comment;
setLifeCycle(obj, startDate, endDate, wf_status, executor, currentUser, result, information);
var versionCurrent = '';
try {
versionCurrent = obj.getVersionStamp().toString();
} catch (e) {
versionCurrent = versionContext;
}
if (versionContext != versionCurrent){
process_dlginfo(ids,"Данная версия объекта/документа была изменена. Требуется обновить!",returnResource);
return returnResource.resource;
}
// Необходимо выдать исключение, если объект удален или прекращен в 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() || var time = new AFDateTime(Calendar.getInstance());
TunableObjectHelper.putAFInstanceValue(obj.tuning(), "wf.actiontime",time);
try {
isTerminate) {
process_dlginfo(ids,"Документ был удален обратитесь к администратору",returnResource);
return returnResource.resource;
}
}
if (obj.save();
} catch (e) {
var resultMessage = "При сохранении произошел конфликт, сохранение изменений невозможно.\nБудет переоткрыт в актуальном состоянии."
process_dlginfo(ids,resultMessage,returnResource);
return returnResource.resource;
}
obj = appdp.getEntityByUNID(ids.get(0));
var res = RkkResource.valueOf(obj);
returnResource.setResource(res);
} else {
throw new RuntimeException("Не найдена задача. Обратитесь к администратору. Идентификатор: " + taskId);
}
} else {
throw new RuntimeException("Не запущен процесс согласования. Обратитесь к администратору. Идентификатор: " + ids.get(0));
}
}
/**
* Откатить статусное состояние 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 = wf.getValues().get("status").getValue();
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.getValues().get("task").getValue();
stage = wf.getValues().get("stage").getValue();
duration = wf.getValues().get("duration").getValue();
starttime = wf.getValues().get("starttime").getValue();
if (wf.getValues().get("finishtime") != null) {
finishtime = wf.getValues().get("finishtime").getValue();
}
}
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(tuning().getValues().containsKey("wf") && obj.tuning().getValues().get("wf") != null) {
var wf = obj.tuning().getValues().get("wf");
var task_name = wf.getValues().get("task").getValue();
// Получаем задачу
var taskId = wf.getValues().get("task_id").getValue();
var workflowProcessService = BeansUtils.getBean("workflowProcessServiceImpl");
var task = workflowProcessService.getTaskById(taskId);
// Должна быть только одна задача, завершаем ее, установив переменную
if (task != null){
var workflowProcessName = task.processName;
var workflowProcessService = BeansUtils.getBean("workflowProcessServiceImpl");
var params = new ProcessVariables();
params.put("result", "Прекращена");
params.put("information", comment);
workflowProcessService.sendProcessMessage(workflowProcessName, "END_PROCESS", ids.get(0),params);
obj = appdp.getEntityByUNID(ids.get(0));
var res = RkkResource.valueOf(obj);
returnResource.setResource(res);
} else {
throw new RuntimeException("Не найдена задача. Обратитесь к администратору. Идентификатор: " + taskId);
}
} else {
throw new RuntimeException("Не запущен процесс согласования. Обратитесь к администратору. Идентификатор: " + ids.get(0));
}
} |