Custom Workflow not working

Hi,

I have done the custom changes as per Workflows.

Roles are: Reporting Officer, Sanctioning Authority

Workflow :

  1. CUPB Leave Application (Save) → Reporting Officer list view, status is Open
  2. Reporting Officer (Action Approve by RO) → should go to Sanctioning Authority list view but not showing, status changes to Approved by Reporting Officer
  3. Reporting Officer (Action Reject by RO) → status should change to Rejected by RO and should not show in Sanctioning Authority list view
  4. Sanctioning Authority (Action Approve) → status should change to Approved
  5. Sanctioning Authority (Action Reject) → status should change to Cancelled

Please suggest further.

Regards,
Amandeep

Hi Amandeep,

Workflows are a bit tricky. But we do know that it works. Most of us have been able to make it work. Please check and see if you have overlooked something when you are setting it up. Take a single approval level, make it work and then add additional approval levels is my advice to you.

Thanks

Jay

Hi JayRam,

I tried workflow for single step. It works like

  1. Employee saves document. After saving the Save button disappears for Employee.
  2. Reporting Officer Approves the Doc and the state of the Doc changes to submitted, with Employee getting Cancel button at top.

Issues

  1. No Email is sent for Doc Status Notification or Doc Approval notification

Error Log screenshot attached. Unable to find stack trace.

Regards,
Amandeep

Hi JayRam,

I am using bench start

The stack trace generated on screen is

14:29:17 web.1 | 127.0.0.1 - - [09/Jun/2020 14:29:17] “POST /api/method/frappe.core.page.background_jobs.background_jobs.get_info HTTP/1.1” 200 -

14:29:18 worker_short.1 | Traceback (most recent call last):

14:29:18 worker_short.1 | File “/Users/amandeep/Downloads/Development/frappe/frappe-bench/apps/frappe/frappe/utils/background_jobs.py”, line 98, in execute_job

14:29:18 worker_short.1 | method(**kwargs)

14:29:18 worker_short.1 | File “/Users/amandeep/Downloads/Development/frappe/frappe-bench/apps/frappe/frappe/workflow/doctype/workflow_action/workflow_action.py”, line 210, in send_workflow_action_email

14:29:18 worker_short.1 | enqueue(method=frappe.sendmail, queue=‘short’, **email_args)

14:29:18 worker_short.1 | File “/Users/amandeep/Downloads/Development/frappe/frappe-bench/apps/frappe/frappe/utils/background_jobs.py”, line 70, in enqueue

14:29:18 worker_short.1 | kwargs=queue_args)

14:29:18 worker_short.1 | File “/Users/amandeep/Downloads/Development/frappe/frappe-bench/env/lib/python3.7/site-packages/rq/queue.py”, line 331, in enqueue_call

14:29:18 worker_short.1 | job = self.enqueue_job(job, at_front=at_front)

14:29:18 worker_short.1 | File “/Users/amandeep/Downloads/Development/frappe/frappe-bench/env/lib/python3.7/site-packages/rq/queue.py”, line 417, in enqueue_job

14:29:18 worker_short.1 | job.save(pipeline=pipe)

14:29:18 worker_short.1 | File “/Users/amandeep/Downloads/Development/frappe/frappe-bench/env/lib/python3.7/site-packages/rq/job.py”, line 575, in save

14:29:18 worker_short.1 | connection.hmset(key, self.to_dict(include_meta=include_meta))

14:29:18 worker_short.1 | File “/Users/amandeep/Downloads/Development/frappe/frappe-bench/env/lib/python3.7/site-packages/rq/job.py”, line 526, in to_dict

14:29:18 worker_short.1 | obj[‘data’] = zlib.compress(self.data)

14:29:18 worker_short.1 | File “/Users/amandeep/Downloads/Development/frappe/frappe-bench/env/lib/python3.7/site-packages/rq/job.py”, line 236, in data

14:29:18 worker_short.1 | self._data = dumps(job_tuple)

14:29:18 worker_short.1 | TypeError: can’t pickle dict_values objects

14:29:18 worker_short.1 |

14:29:18 worker_short.1 | 14:29:18 TypeError: can’t pickle dict_values objects

14:29:18 worker_short.1 | Traceback (most recent call last):

14:29:18 worker_short.1 | File “/Users/amandeep/Downloads/Development/frappe/frappe-bench/env/lib/python3.7/site-packages/rq/worker.py”, line 884, in perform_job

14:29:18 worker_short.1 | rv = job.perform()

14:29:18 worker_short.1 | File “/Users/amandeep/Downloads/Development/frappe/frappe-bench/env/lib/python3.7/site-packages/rq/job.py”, line 664, in perform

14:29:18 worker_short.1 | self._result = self._execute()

14:29:18 worker_short.1 | File “/Users/amandeep/Downloads/Development/frappe/frappe-bench/env/lib/python3.7/site-packages/rq/job.py”, line 670, in _execute

14:29:18 worker_short.1 | return self.func(*self.args, **self.kwargs)

14:29:18 worker_short.1 | File “/Users/amandeep/Downloads/Development/frappe/frappe-bench/apps/frappe/frappe/utils/background_jobs.py”, line 98, in execute_job

14:29:18 worker_short.1 | method(**kwargs)

14:29:18 worker_short.1 | File “/Users/amandeep/Downloads/Development/frappe/frappe-bench/apps/frappe/frappe/workflow/doctype/workflow_action/workflow_action.py”, line 210, in send_workflow_action_email

14:29:18 worker_short.1 | enqueue(method=frappe.sendmail, queue=‘short’, **email_args)

14:29:18 worker_short.1 | File “/Users/amandeep/Downloads/Development/frappe/frappe-bench/apps/frappe/frappe/utils/background_jobs.py”, line 70, in enqueue

14:29:18 worker_short.1 | kwargs=queue_args)

14:29:18 worker_short.1 | File “/Users/amandeep/Downloads/Development/frappe/frappe-bench/env/lib/python3.7/site-packages/rq/queue.py”, line 331, in enqueue_call

14:29:18 worker_short.1 | job = self.enqueue_job(job, at_front=at_front)

14:29:18 worker_short.1 | File “/Users/amandeep/Downloads/Development/frappe/frappe-bench/env/lib/python3.7/site-packages/rq/queue.py”, line 417, in enqueue_job

14:29:18 worker_short.1 | job.save(pipeline=pipe)

14:29:18 worker_short.1 | File “/Users/amandeep/Downloads/Development/frappe/frappe-bench/env/lib/python3.7/site-packages/rq/job.py”, line 575, in save

14:29:18 worker_short.1 | connection.hmset(key, self.to_dict(include_meta=include_meta))

14:29:18 worker_short.1 | File “/Users/amandeep/Downloads/Development/frappe/frappe-bench/env/lib/python3.7/site-packages/rq/job.py”, line 526, in to_dict

14:29:18 worker_short.1 | obj[‘data’] = zlib.compress(self.data)

14:29:18 worker_short.1 | File “/Users/amandeep/Downloads/Development/frappe/frappe-bench/env/lib/python3.7/site-packages/rq/job.py”, line 236, in data

14:29:18 worker_short.1 | self._data = dumps(job_tuple)

14:29:18 worker_short.1 | TypeError: can’t pickle dict_values objects

14:29:18 worker_short.1 | Traceback (most recent call last):

14:29:18 worker_short.1 | File “/Users/amandeep/Downloads/Development/frappe/frappe-bench/env/lib/python3.7/site-packages/rq/worker.py”, line 884, in perform_job

14:29:18 worker_short.1 | rv = job.perform()

14:29:18 worker_short.1 | File “/Users/amandeep/Downloads/Development/frappe/frappe-bench/env/lib/python3.7/site-packages/rq/job.py”, line 664, in perform

14:29:18 worker_short.1 | self._result = self._execute()

14:29:18 worker_short.1 | File “/Users/amandeep/Downloads/Development/frappe/frappe-bench/env/lib/python3.7/site-packages/rq/job.py”, line 670, in _execute

14:29:18 worker_short.1 | return self.func(*self.args, **self.kwargs)

14:29:18 worker_short.1 | File “/Users/amandeep/Downloads/Development/frappe/frappe-bench/apps/frappe/frappe/utils/background_jobs.py”, line 98, in execute_job

14:29:18 worker_short.1 | method(**kwargs)

14:29:18 worker_short.1 | File “/Users/amandeep/Downloads/Development/frappe/frappe-bench/apps/frappe/frappe/workflow/doctype/workflow_action/workflow_action.py”, line 210, in send_workflow_action_email

14:29:18 worker_short.1 | enqueue(method=frappe.sendmail, queue=‘short’, **email_args)

14:29:18 worker_short.1 | File “/Users/amandeep/Downloads/Development/frappe/frappe-bench/apps/frappe/frappe/utils/background_jobs.py”, line 70, in enqueue

14:29:18 worker_short.1 | kwargs=queue_args)

14:29:18 worker_short.1 | File “/Users/amandeep/Downloads/Development/frappe/frappe-bench/env/lib/python3.7/site-packages/rq/queue.py”, line 331, in enqueue_call

14:29:18 worker_short.1 | job = self.enqueue_job(job, at_front=at_front)

14:29:18 worker_short.1 | File “/Users/amandeep/Downloads/Development/frappe/frappe-bench/env/lib/python3.7/site-packages/rq/queue.py”, line 417, in enqueue_job

14:29:18 worker_short.1 | job.save(pipeline=pipe)

14:29:18 worker_short.1 | File “/Users/amandeep/Downloads/Development/frappe/frappe-bench/env/lib/python3.7/site-packages/rq/job.py”, line 575, in save

14:29:18 worker_short.1 | connection.hmset(key, self.to_dict(include_meta=include_meta))

14:29:18 worker_short.1 | File “/Users/amandeep/Downloads/Development/frappe/frappe-bench/env/lib/python3.7/site-packages/rq/job.py”, line 526, in to_dict

14:29:18 worker_short.1 | obj[‘data’] = zlib.compress(self.data)

14:29:18 worker_short.1 | File “/Users/amandeep/Downloads/Development/frappe/frappe-bench/env/lib/python3.7/site-packages/rq/job.py”, line 236, in data

14:29:18 worker_short.1 | self._data = dumps(job_tuple)

14:29:18 worker_short.1 | TypeError: can’t pickle dict_values objects

Regards,
Amandeep