Мы находимся на CRM 2013. Требуется полностью избавиться от кнопки «Закрыть» в форме задачи, а затем создать новую кнопку «Отмена», чтобы отменить задачу. Таким образом, при нажатии на эту кнопку задача будет «Сохранить как отмененную».
Итак, мы следили за блогом Гуру Прасада об изменении записи с помощью javascript: http://guruprasadcrm.blogspot.com/2013/02/change-record-status-using-javascript.html
Скрипт работает нормально. При нажатии кнопки «Отмена» статус изменится на «Отменено».
Я также включил эту строку кода перед запросом SOAP на случай, если страница будет изменена до отправки запроса на отмену.
Xrm.Page.data.entity.save("saveandclose");
Однако мы обнаружили очень странную ошибку: по какой-то причине скрипт не запускается при открытии записи из расширенного поиска. Это как если бы страница закрывалась сразу после нажатия этой новой настраиваемой кнопки «Отмена».
Знаете ли вы, есть ли какие-либо различия между запуском скриптов для записей, открытых с помощью расширенного поиска, и обычных?
Вот код javascript для изменения статуса записи:
function changeRecordStatus(RECORD_ID, stateCode, statusCode) {
//first of all save all data before sending the request, in case if there are some data that hasn't been saved
Xrm.Page.data.entity.save("saveandclose");
// create the SetState request
var request = "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">";
request += "<s:Body>";
request += "<Execute xmlns=\"http://schemas.microsoft.com/xrm/2011/Contracts/Services\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\">";
request += "<request i:type=\"b:SetStateRequest\" xmlns:a=\"http://schemas.microsoft.com/xrm/2011/Contracts\" xmlns:b=\"http://schemas.microsoft.com/crm/2011/Contracts\">";
request += "<a:Parameters xmlns:c=\"http://schemas.datacontract.org/2004/07/System.Collections.Generic\">";
request += "<a:KeyValuePairOfstringanyType>";
request += "<c:key>EntityMoniker</c:key>";
request += "<c:value i:type=\"a:EntityReference\">";
request += "<a:Id>" + RECORD_ID + "</a:Id>";
request += "<a:LogicalName>task</a:LogicalName>";
request += "<a:Name i:nil=\"true\" />";
request += "</c:value>";
request += "</a:KeyValuePairOfstringanyType>";
request += "<a:KeyValuePairOfstringanyType>";
request += "<c:key>State</c:key>";
request += "<c:value i:type=\"a:OptionSetValue\">";
request += "<a:Value>" + stateCode + "</a:Value>";
request += "</c:value>";
request += "</a:KeyValuePairOfstringanyType>";
request += "<a:KeyValuePairOfstringanyType>";
request += "<c:key>Status</c:key>";
request += "<c:value i:type=\"a:OptionSetValue\">";
request += "<a:Value>" + statusCode + "</a:Value>";
request += "</c:value>";
request += "</a:KeyValuePairOfstringanyType>";
request += "</a:Parameters>";
request += "<a:RequestId i:nil=\"true\" />";
request += "<a:RequestName>SetState</a:RequestName>";
request += "</request>";
request += "</Execute>";
request += "</s:Body>";
request += "</s:Envelope>";
//send set state request
$.ajax({
type: "POST",
contentType: "text/xml; charset=utf-8",
datatype: "xml",
url: Xrm.Page.context.getServerUrl() + "/XRMServices/2011/Organization.svc/web",
data: request,
beforeSend: function (XMLHttpRequest) {
XMLHttpRequest.setRequestHeader("Accept", "application/xml, text/xml, */*");
XMLHttpRequest.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/Execute");
},
success: function (data, textStatus, XmlHttpRequest) {
Xrm.Page.ui.close();
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(errorThrown);
}
});
}
Тогда вот определение команды новой настраиваемой кнопки ленты для отмены задачи. Я передал statuscode = 2 и statecode = 6 в функцию выше.
<CommandDefinitions>
<CommandDefinition Id="Mscrm.SaveAsCancelled">
<EnableRules>
<EnableRule Id="Mscrm.VisualizationPaneNotMaximized" />
<EnableRule Id="Mscrm.SaveAsCancelled.FormRule" />
</EnableRules>
<DisplayRules>
<DisplayRule Id="Mscrm.CanWriteSelected" />
<DisplayRule Id="Mscrm.SelectedEntityHasStatecode" />
</DisplayRules>
<Actions>
<JavaScriptFunction FunctionName="changeRecordStatus" Library="$webresource:new_DeactivateTask.js">
<CrmParameter Value="FirstPrimaryItemId" />
<IntParameter Value="2" />
<IntParameter Value="6" />
</JavaScriptFunction>
</Actions>
</CommandDefinition>
Спасибо, очень признателен за вашу помощь.