...

Задача на согласование.

Тема в разделе "Разработчикам", создана пользователем dimich1978, 29 май 2020.

  1. dimich1978

    dimich1978 Member

    Есть задача, в сценарии перебираю задачи, и на отобранные мне нужно назначить задачу согласования на определенного человека. Прописываю значение в поле Harmonizator, задача не создается. Натолкните на правильный путь. Как создать задачу согласования из процесса? Спасибо
     
  2. dimich1978

    dimich1978 Member

    Пытаюсь таким образом добавить , для примера беру какую то существующую задачу с id=587296. В итоге ошибки

    1.
    System.NullReferenceException: Object reference not set to an instance of an object.
    2.
    System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.




    Код:
        var activeTasks = PublicAPI.Portal.TaskBase.Find("id=587296"); 
    
    
                    foreach(var element in activeTasks)
                    {
                       
                        element.Harmonizator = PublicAPI.Portal.Security.User.LoadOrNull(6770);
                       
                        var tsk = InterfaceActivator.Create<Task> ();
                        tsk.CreationAuthor = element.CreationAuthor;
                    tsk.Subject = element.Subject;
                    tsk.Executor = element.Executor;
                    tsk.StartDate = element.StartDate;
                    tsk.EndDate = element.EndDate;
                    tsk.Description = element.Description;
                    tsk.ParentTask.Id = element.Id;
                    tsk.Save();
                   
                    var tsk_approval = InterfaceActivator.Create<ApprovalTask> ();
                    tsk_approval.ParentStatus = tsk.Status;
                    tsk_approval.ApprovalStatus = 0;
                    tsk_approval.ApprovalComment = null;
                    tsk_approval.Id = tsk.Id;
                    tsk_approval.Save();
    
                    }
    
     
  3. pushkarev

    pushkarev Active Member

    А в тексте ошибки вам система не выводит номер строки с ошибкой?
     
  4. dimich1978

    dimich1978 Member

    Варианта, с показом номера строки где ошибка не выходит. Выдает ошибку и показывает ниже следующее

    1.System.NullReferenceException: Object reference not set to an instance of an object.

    at EleWise.ELMA.Workflow.Managers.WorkflowInstanceManager.qmsEAjsIPOm3xXBOZCuM(Object )
    at EleWise.ELMA.Workflow.Managers.WorkflowInstanceManager.CanChangeVersion(ChangeProcessVersionActionData changeData)
    at Castle.Proxies.Invocations.WorkflowInstanceManager_CanChangeVersion.InvokeMethodOnTarget()
    at Castle.DynamicProxy.AbstractInvocation.Proceed()
    at EleWise.ELMA.Runtime.NH.DiagnosticsInterceptor.I1HQEXpsOvjlTmEddK5Y(Object )
    at EleWise.ELMA.Runtime.NH.DiagnosticsInterceptor.Intercept(IInvocation invocation)
    at Castle.DynamicProxy.AbstractInvocation.Proceed()
    at EleWise.ELMA.Runtime.NH.Interceptors.AuditInterceptor.DTcE5gNZL5H5MXbiZBum(Object )
    at EleWise.ELMA.Runtime.NH.Interceptors.AuditInterceptor.Intercept(IInvocation invocation)
    at Castle.DynamicProxy.AbstractInvocation.Proceed()
    at EleWise.ELMA.Runtime.NH.ManagerActionsInterceptor.GoRwbsNYcIwB1nKrb22O(Object )
    at EleWise.ELMA.Runtime.NH.ManagerActionsInterceptor.Intercept(IInvocation invocation)
    at Castle.DynamicProxy.AbstractInvocation.Proceed()
    at EleWise.ELMA.Runtime.NH.TransactionInterceptor.Wdhcu3u0t5l560R9YY2Z(Object )
    at EleWise.ELMA.Runtime.NH.TransactionInterceptor.Intercept(IInvocation invocation)
    at Castle.DynamicProxy.AbstractInvocation.Proceed()
    at Castle.Proxies.WorkflowInstanceManagerProxy.CanChangeVersion(ChangeProcessVersionActionData changeData)

    2.System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.


    at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
    at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
    at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
    at EleWise.ELMA.Actions.Impl.ManagerActionInvokeProvider.<>c__DisplayClass15.<>c__DisplayClass19.XBs8vhuoAg2hsLcj4Goa(Object , Object , Object )
    at EleWise.ELMA.Actions.Impl.ManagerActionInvokeProvider.<>c__DisplayClass15.<>c__DisplayClass19.b__12(ActionInvokeEventArgs e)
    at EleWise.ELMA.Actions.ActionInvoker.CheckAction(ActionInvokeEventArgs e)
    at EleWise.ELMA.Actions.ActionDispatcherService.YCwAM5eauhdU4ro2xD(Object , Object )
    at EleWise.ELMA.Actions.ActionDispatcherService.CheckAction(IAuditObject actionObject, IAuditAction actionType, Object[] methodArgs)
    at EleWise.ELMA.Actions.ActionDispatcherServiceExtensions.CheckActionWithResult[TManager](ActionDispatcherService service, Expression`1 expression)
    at EleWise.ELMA.Actions.ActionDispatcherServiceExtensions.CheckAction[TManager](ActionDispatcherService service, Expression`1 expression)
    at EleWise.ELMA.Web.Mvc.Html.Toolbar.ToolbarButtonBuilder.VisibleIf[TManager](Expression`1 expression)
    at EleWise.ELMA.Web.Mvc.Html.Toolbar.ToolbarGroupBuilder.Button(Action`1 toolbarButtonBuilder)
    at ASP._Page_Views_WorkflowInstance_Info_cshtml.Execute()
    at System.Web.WebPages.WebPageBase.ExecutePageHierarchy()
    at System.Web.Mvc.WebViewPage.ExecutePageHierarchy()
    at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage)
    at EleWise.ELMA.Web.Orchard.Mvc.ViewEngines.Razor.CachedRazorView.RenderView(ViewContext viewContext, TextWriter writer)
    at Orchard.Mvc.ViewEngines.ThemeAwareness.LayoutAwareViewEngine.<>c__DisplayClass7.b__5(ViewContext viewContext, TextWriter writer, IViewDataContainer viewDataContainer)
    at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context)
    at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass1a.b__17()
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation)
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation)
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation)
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation)
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation)
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation)
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation)
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation)
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation)
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation)
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation)
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation)
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation)
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation)
    at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName)
    at System.Web.Mvc.Controller.ExecuteCore()
    at System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext)
    at System.Web.Mvc.MvcHandler.ProcessRequest(HttpContextBase httpContext)
    at Orchard.Mvc.Routes.ShellRoute.HttpHandler.ProcessRequest(HttpContext context)
    at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
    at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
     
  5. dimich1978

    dimich1978 Member

    Проблема возникает в след. ситуациях, когда прописываю tsk.ParentTask.Id = element.Id; то ошибка. Убираю эту строку задача создается.
    var tsk = InterfaceActivator.Create<Task> ();
    tsk.CreationAuthor = element.CreationAuthor;
    tsk.Subject = element.Subject;
    tsk.Executor = element.Executor;
    tsk.StartDate = element.StartDate;
    tsk.EndDate = element.EndDate;
    tsk.Description = element.Description;
    tsk.ParentTask.Id = element.Id;
    tsk.Save();

    То же самое и во второй част и
    var tsk_approval = InterfaceActivator.Create<ApprovalTask> ();
    tsk_approval.ParentStatus = tsk.Status;
    tsk_approval.ApprovalStatus = 0;
    tsk_approval.ApprovalComment = null;
    tsk_approval.Id = tsk.Id;
    tsk_approval.Save();

    во второй части и понятно, я пытаюсь указать ID для ключевого поля.
    Все как бы понятно, но как тогда построить связь? Чтобы появилась задача согласования.
     
  6. dimich1978

    dimich1978 Member

    Как понимаю, нужно на базе задачи, создать подзадачу и уже подзадачу цеплять к согласованию. Но как кодом описать , пока слабо представляю
     
  7. dimich1978

    dimich1978 Member

    И так, кто сможет помочь? Был бы очень признателен. Разберем 1 часть скрипта, это формирование подзадачи на основании задачи:

    var tsk = InterfaceActivator.Create<Task> ();
    tsk.CreationAuthor = element.CreationAuthor;
    tsk.Subject = element.Subject;
    tsk.Executor = element.Executor;
    tsk.StartDate = element.StartDate;
    tsk.EndDate = element.EndDate;
    tsk.Description = element.Description;
    tsk.ParentTask.Id = element.Id;
    tsk.Save();

    строка tsk.ParentTask.Id = element.Id; при проверке без ошибок, но она составлена не корректно.
    Как составить корректно пока не пойму.
    По идее мне в поле ParentTask нужно внести ID родительской задачи. На сервере , в менеджмент студии , если сделать update то все хорошо и подзадачу видно.
    В ситуации , через Элму. Выпадает скрипт в ошибку.
    Что не так со строкой
    tsk.ParentTask.Id = element.Id;
    если записать ,
    tsk.ParentTask = element.Id; То выпадает в ошибку.
    Почему запись вида tsk.ParentTask = element.Id; не работает ?
     
  8. dimich1978

    dimich1978 Member

    Может кто разработчикам сможет вопрос задать. Как можно на основе задачи сделать подзадачу с согласованием задачи. Уже весь мозг вынес. Не могу понять. Спасибо.
     
  9. dimich1978

    dimich1978 Member

    И так имеем, я сократил до минимума интерфейс и ParentTask. И как можно в такой ситуации запихать в поле ParentTask номер задачи родителя?
    public interface ITaskBase : IEntity<long>, IEntity, IIdentified, IInheritable
    {
    [DisplayName(typeof(__Resources_ITaskBase), "P_ParentTask_DisplayName")]
    [Property("72ed98ca-f260-4671-9bcd-ff1d80235f47", "0f338330-068c-4135-be4e-95797a209c4e")]
    [Description(typeof(__Resources_ITaskBase), "P_ParentTask_Description")]
    [View(/*Could not decode attribute arguments.*/)]
    [View(/*Could not decode attribute arguments.*/)]
    [View(/*Could not decode attribute arguments.*/)]
    [View(/*Could not decode attribute arguments.*/)]
    [View(/*Could not decode attribute arguments.*/)]
    [Filterable]
    [EntityProperty]
    [EntitySettings(/*Could not decode attribute arguments.*/)]
    [Uid("6a30b660-f526-4c1d-96aa-301ced3fc79d")]
    [Order(13)]
    ITaskBase ParentTask
    {
    get;
    set;
    }
    }
     

Поделиться: