Knowledge base article approval flow not updating status field in D365 Sales

We’ve implemented an approval workflow in D365 Sales 9.0 for knowledge base articles using Power Automate. When an article is submitted for review, the flow sends an approval request to the designated reviewers. The approval/rejection works fine, but the article’s status field isn’t updating after the approval decision is made.

The flow structure: Trigger on article creation → Send approval request → Condition (if approved) → Update article status to “Published”. The approval notifications work perfectly and reviewers can approve/reject, but the final Update a row action that should change the article status field completes without errors yet the field value remains unchanged in D365.

We’re using this update configuration:


Entity: Knowledge Article
Row ID: triggerOutputs()?['body/knowledgearticleid']
Status Field: statuscode = 3 (Published)

The flow run history shows the Update action as successful with no error messages, but when we check the actual article record in D365, the status field is still set to “Draft” (value 1). We’ve verified the approval flow configuration multiple times and the field mapping looks correct. The Dataverse record update seems to execute but doesn’t persist the change. Has anyone encountered scenarios where Power Automate reports successful updates but the fields don’t actually change in the database?

This is a classic Knowledge Article approval flow issue that stems from misunderstanding how Dataverse handles state transitions for this entity. Here’s the complete solution:

Dataverse Record Update for Knowledge Articles: Knowledge Articles require special handling for status changes because they use a state machine model. You cannot simply update statuscode in isolation. The correct approach:

{
  "statecode": 3,
  "statuscode": 5
}

Note: statecode 3 = Published, statuscode 5 = Published (these values work together). Your current approach only updates statuscode which Dataverse silently ignores for Knowledge Articles.

Approval Flow Configuration: Your flow structure needs refinement. After the approval condition, don’t use “Update a row” - instead use “Perform an unbound action” with the SetState message:

  • Action: SetState
  • Entity: knowledgearticle
  • Target: Your article ID
  • State: 3
  • Status: 5

Alternatively, if you must use Update a row, include BOTH fields:

Update a row:
  Entity: Knowledge Article
  Row ID: triggerOutputs()?['body/knowledgearticleid']
  statecode: 3
  statuscode: 5

Field Mapping Validation: Your current field mapping has several issues:

  1. You’re only setting statuscode, which is insufficient for Knowledge Articles
  2. The value “3” for statuscode might be incorrect - verify your entity’s option set values
  3. Knowledge Articles require validation of the ‘isrootarticle’ field - ensure you’re updating the root article, not a version

Add validation before your update:


Get a row:
  Entity: Knowledge Article
  Row ID: [Your article ID]
  Select columns: isrootarticle,statecode,statuscode

Condition:
  If isrootarticle = true
    Then: Proceed with status update
  Else: Get root article and update that record

Additional Critical Points:

  • The connection account needs “Publish Knowledge Article” privilege, not just write access
  • If you have approval policies configured at the entity level in D365, they might conflict with your flow’s updates
  • Consider adding a delay of 5-10 seconds between the approval response and the status update to avoid race conditions

Implement the SetState action approach for the most reliable results. This is the officially supported method for state transitions in Dataverse and will properly handle all the backend validation and related record updates that Knowledge Articles require.


This draft is based on general Microsoft Dynamics 365 Sales knowledge. It has not been verified against your specific version and environment. Practitioners: verify the steps and share your experience below.

Knowledge Article status updates require special handling because statuscode and statecode work together. You can’t just update statuscode directly - you need to use the SetState message or update both fields simultaneously. Try adding statecode: 0 (Active) along with your statuscode: 3 update in the same action.

Check if there are any plugins or business rules on the Knowledge Article entity that might be reverting your status change. Sometimes custom logic fires after your flow’s update and changes the field back to the original value. Look in the audit history of the article record - if you see the status changing to Published and then immediately back to Draft, that confirms a plugin is interfering. You might need to coordinate with your dev team to adjust the plugin logic to accommodate flow-based updates.

Your Row ID expression might be pulling the wrong identifier. Knowledge Articles have both knowledgearticleid and articleid, and using the wrong one will cause silent failures where the flow thinks it updated a record but didn’t actually find the right one. Also, verify that the connection user has the necessary permissions to publish articles - the Knowledge Manager role is required for status transitions to Published. If permissions are insufficient, the Update action can succeed without actually changing protected fields.

Knowledge Article entities have version control, and updating the status on a draft version doesn’t automatically apply to the published version. You might be updating the wrong version record. When an article is in Draft status, there can be multiple version records, and your trigger might be capturing the version ID instead of the root article ID. Check if you need to query for the root article record first, then update that specific record’s status.

The statuscode values for Knowledge Articles are different from standard entities. Status 3 might not correspond to Published in your D365 configuration - these values can be customized. Export your Knowledge Article entity metadata and verify the actual statuscode option value for Published status. It might be 7 or another value depending on your customizations. Also ensure your Update action is using the correct field logical name - it should be ‘statuscode’ not ‘status’ or ‘statuscodename’.