RE: How to make Reason for Rejection dialog appear in custom Knowledge base form?
Hi HangryMapache,
I created a custom form as you did and it also not works for me. Then I find the code in the library(msdyncrm_/KnowledgeManagement/KnowledgeArticle/KnowledgeArticleMainSystemLibrary.js) which is used to open this dialog. So I created an onchange event on Review field and hide the Review field on the form. And it could work for me now.
Form Setting:
Onchange code:
function onchange(eventContext) {
alert(1);
var formContext = KnowledgeManagement.KnowledgeArticleUtility.getFormContext(eventContext),
reviewState = formContext.data.entity.attributes.get(KnowledgeManagement.Review),reviewOptionSetPreviousSelection=null;
if (reviewState.getValue() == KnowledgeManagement.KnowledgeArticleReviewState.Rejected) {
var primaryAuthorLookupAttribute = formContext.getAttribute(KnowledgeManagement.PrimaryAuthorId),
guidForPrimaryAuthorId = "";
if (primaryAuthorLookupAttribute) {
var primaryAuthorLookupAttributeValue = primaryAuthorLookupAttribute.getValue();
if (primaryAuthorLookupAttributeValue && primaryAuthorLookupAttributeValue.length > 0) guidForPrimaryAuthorId = primaryAuthorLookupAttributeValue[0].id
}
var options = {
height: 500,
width: 400,
position: 2
},
dialogParams = {};
dialogParams[KnowledgeManagement.ParamEntityId] = formContext.data.entity.getId();
dialogParams[KnowledgeManagement.ParamLastButtonClicked] = KnowledgeManagement.DialogOkId;
dialogParams[KnowledgeManagement.ParamPrimaryAuthorId] = guidForPrimaryAuthorId;
dialogParams[KnowledgeManagement.ParamReview] = reviewState.getValue();
Xrm.Navigation.openDialog(KnowledgeManagement.RejectKnowledgeArticleDialog, options, dialogParams).then(function(successParameter) {
var reviewState = formContext.getAttribute(KnowledgeManagement.Review);
if (reviewState)
if (successParameter.parameters[KnowledgeManagement.ParamLastButtonClicked] == KnowledgeManagement.DialogOkId) reviewOptionSetPreviousSelection = reviewState.getValue();
else reviewState.setValue(reviewOptionSetPreviousSelection)
}, null)
} else if (reviewState.getValue() == KnowledgeManagement.KnowledgeArticleReviewState.Approved) {
var onApproveDialogCancelCallback = function() {
var reviewOptionSet = reviewState;
reviewOptionSet.setValue(reviewOptionSetPreviousSelection)
},
onApproveDialogOkCallback = function(response) {
var reviewOptionSet = reviewState;
reviewOptionSetPreviousSelection = reviewOptionSet.getValue()
};
KnowledgeManagement.KnowledgeArticle.CommandActions.approveArticle(formContext, onApproveDialogOkCallback, onApproveDialogCancelCallback)
} else reviewOptionSetPreviousSelection = reviewState.getValue()
};
Result: