Approvals Macro from Comala Document Approval add-on is not showing any data on the Confluence page.
Platform notice: Server and Data Center only. This article only applies to Atlassian products on the Server and Data Center platforms.
Support for Server* products ended on February 15th 2024. If you are running a Server product, you can visit the Atlassian Server end of support announcement to review your migration options.
*Except Fisheye and Crucible
Summary
Approvals Macro from Comala Document Approval add-on is not showing any data on the Confluence page.
Environment
Confluence 7.x.x
Comala Document Approval add-on
Diagnosis
Previewing a page with Comala Document Approval macro will show no data about approval of attachments.
2021-03-14 00:13:47,428 ERROR [Indexer: 2] [comalatech.confluence.workflow.DefaultValueStore] setPageAttributes Error getting page workflow information from page: page: Page Name v.1 (75571207)
com.comalatech.confluence.workflow.WorkflowUserException: Error in workflow markup:<br/><div class="error"><span class="error">Unknown macro: {workflow}</span>
<div class="error"><span class="error">Unknown macro: {description}</span>
<p> A Simple Approval Workflow, a page's state can be for 'Review', 'Approved' or 'Rejected'. Only 'Approved' pages are visible to Read-only users.</p>
</div>
<div class="error"><span class="error">Unknown macro: {state}</span>
<div class="error"><span class="error">Unknown macro: {approval}</span> </div>
</div>
<div class="error"><span class="error">Unknown macro: {state}</span>
<div class="error"><span class="error">Unknown macro: {approval}</span> </div>
</div>
<div class="error"><span class="error">Unknown macro: {state}</span>
</div>
<div class="error"><span class="error">Unknown macro: {read-ack}</span> </div></div>
at com.comalatech.confluence.workflow.parser.WorkflowWikiParser.parseWorkflow(WorkflowWikiParser.java:41)
at com.comalatech.confluence.workflow.parser.WorkflowWikiParser.parseWorkflow(WorkflowWikiParser.java:27)
at com.comalatech.confluence.workflowcontainer.DefaultWorkflowContainerManager.renderWorkflow(DefaultWorkflowContainerManager.java:176)
at com.comalatech.confluence.adhoc.DefaultAdhocWorkflowManager.getPageWorkflow(DefaultAdhocWorkflowManager.java:268)
at com.comalatech.confluence.adhoc.DefaultAdhocWorkflowManager.getPageWorkflow(DefaultAdhocWorkflowManager.java:260)
at com.comalatech.confluence.workflow.DefaultValueStore.setPageAttributes(DefaultValueStore.java:326)
at com.comalatech.confluence.workflow.DefaultValueStore.<init>(DefaultValueStore.java:88)
at com.comalatech.confluence.workflow.DefaultValueStoreManager.createValueStore(DefaultValueStoreManager.java:29)
at com.comalatech.confluence.workflow.DefaultWorkflowAccessor.getWorkflows(DefaultWorkflowAccessor.java:199)
at com.comalatech.confluence.workflow.DefaultWorkflowAccessor.getWorkflows(DefaultWorkflowAccessor.java:347)
at com.comalatech.confluence.workflow.DefaultWorkflowAccessor.getPageWorkflows(DefaultWorkflowAccessor.java:334)
at com.comalatech.confluence.workflow.extractors.ApprovalsExtractorImpl.extractFields(ApprovalsExtractorImpl.java:111)
at com.atlassian.confluence.search.lucene.extractor.Extractor2ToExtractorAdapter.addFields(Extractor2ToExtractorAdapter.java:33)
at com.atlassian.confluence.plugin.descriptor.ExtractorModuleDescriptor$BackwardsCompatibleExtractor.addFields(ExtractorModuleDescriptor.java:39)
at com.atlassian.confluence.internal.index.lucene.LuceneContentExtractor.lambda$extract$0(LuceneContentExtractor.java:68)
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
at java.base/java.util.stream.SortedOps$SizedRefSortingSink.end(Unknown Source)
at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
at com.atlassian.confluence.internal.index.lucene.LuceneContentExtractor.extract(LuceneContentExtractor.java:65)
at com.atlassian.confluence.internal.index.v2.AtlassianContentDocumentBuilder.lambda$build$0(AtlassianContentDocumentBuilder.java:69)
at java.base/java.util.ArrayList.forEach(Unknown Source)
at com.atlassian.confluence.internal.index.v2.AtlassianContentDocumentBuilder.build(AtlassianContentDocumentBuilder.java:68)
at com.atlassian.confluence.internal.index.v2.AtlassianContentDocumentBuilder.build(AtlassianContentDocumentBuilder.java:29)
at com.atlassian.confluence.internal.index.lucene.LuceneDocumentBuilder.getDocument(LuceneDocumentBuilder.java:31)
at com.atlassian.confluence.search.lucene.tasks.AddDocumentIndexTask.perform(AddDocumentIndexTask.java:47)
at com.atlassian.confluence.internal.index.lucene.LuceneBatchIndexer.doIndex(LuceneBatchIndexer.java:126)
at com.atlassian.confluence.internal.index.lucene.LuceneBatchIndexer.lambda$index$0(LuceneBatchIndexer.java:62)
at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140)
at com.atlassian.confluence.internal.index.lucene.LuceneBatchIndexer.index(LuceneBatchIndexer.java:61)
at com.atlassian.confluence.internal.index.ConcurrentBatchIndexer.lambda$null$1(ConcurrentBatchIndexer.java:119)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at com.atlassian.confluence.impl.tenant.ThreadLocalTenantGate.lambda$wrap$0(ThreadLocalTenantGate.java:25)
at com.atlassian.confluence.impl.vcache.VCacheRequestContextManager.doInRequestContextInternal(VCacheRequestContextManager.java:84)
at com.atlassian.confluence.impl.vcache.VCacheRequestContextManager.doInRequestContext(VCacheRequestContextManager.java:68)
at com.atlassian.confluence.vcache.VCacheRequestContextOperations.lambda$withRequestContext$1(VCacheRequestContextOperations.java:59)
at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)
...
Cause
Due to corrupt index data, the macro is unable to populate any data.
Solution
As per Comala documentation, the new Document Actions report uses Confluence JSON page properties to supply the data to display. These values will normally be updated after each change in the workflow.
To ensure that the report shows all pending approvals and tasks, a Global Administrator will need to manually execute a long-running task by accessing the following URL:
https://<HOSTNAME>/admin/plugins/approvalsworkflow/workflowsPopulateJsonProperties.action