#javascript #dynamics-crm #microsoft-dynamics
#javascript #dynamics-crm #microsoft-dynamics
Вопрос:
Я пытаюсь добавить пользовательский фильтр для поиска системных пользователей в BPF, поскольку критерии фильтрации включают фильтр связанных сущностей, поэтому нельзя использовать фильтр XML напрямую; поэтому я разделил его на функции.
Приведенный ниже код работает нормально и дает мне ожидаемый пользовательский фильтр, если я использую его в том же поле формы, но не работает в BPF.
Примечание: CT.Application.Constants.ATETeamUsersList
является глобальной переменной в файле сценария.
CT.Application.ATETeamAuthTrainingManagerCustomUserList = function (executionContext) {
/// Show Custom Filter (Users in ATE Team) on Authorised Training Manager field on ATE Application Process BPF.
try {
var formContext = executionContext.getFormContext();
var UsersList = CT.Application.GetATETeamUsersList();
if (UsersList !== null amp;amp; UsersList !== undefined) {
CT.Application.Constants.ATETeamUsersList = '<filter type="and"><filter type="or">';
for (var i = 0; i < UsersList.value.length; i ) {
CT.Application.Constants.ATETeamUsersList = '<condition attribute="systemuserid" operator="eq" value="{' UsersList.value[i].systemuserid.toUpperCase() '}" />';
}
CT.Application.Constants.ATETeamUsersList = '</filter><condition attribute="isdisabled" operator="eq" value="0" /></filter >';
var authTrainingManager = formContext.getControl("ct_authorisedtrainingmanagerate");
if (authTrainingManager !== null) {
authTrainingManager.addPreSearch(ATEAuthTrainingManagerPreSearchFilter);
}
}
}
catch (ex) {
CT.CommonUtility.ErrorHandler(ex);
}
}
function ATEAuthTrainingManagerPreSearchFilter(executionContext) {
/// Adding Custom Filter for ATE Team Users
try {
var formContext = executionContext.getFormContext();
var fetchQuery = CT.Application.Constants.ATETeamUsersList;
formContext.getControl("ct_authorisedtrainingmanagerate").addCustomFilter(fetchQuery, "systemuser");
}
catch (ex) {
CT.CommonUtility.ErrorHandler(ex);
}
}
CT.Application.GetATETeamUsersList = function (ATETeamGUID) {
/// Function to get the list of Users present in ATE Team.
try {
var UserList = null;
var fetchXml = `<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='true'>
<entity name='systemuser'>
<attribute name='fullname' />
<attribute name='systemuserid' />
<order attribute='fullname' descending='false' />
<filter type='and'>
<condition attribute='isdisabled' operator='eq' value='0' />
</filter>
<link-entity name='teammembership' from='systemuserid' to='systemuserid' visible='false' intersect='true'>
<link-entity name='team' from='teamid' to='teamid' alias='ab'>
<filter type='and'>
<condition attribute='teamid' operator='eq' uiname='ATE Team' uitype='team' value='{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}' />
</filter>
</link-entity>
</link-entity>
</entity>
</fetch>`;
var encodedFetchXml = encodeURI(fetchXml);
function SuccessCallBack(response) {
if (response !== undefined) {
if (response.value.length > 0) {
UserList = response;
}
}
}
function ErrorCallBack(response) { }
CT.WEBAPI.retrieveRecordThroughFetchXMLsync("systemusers", null, encodedFetchXml, SuccessCallBack, ErrorCallBack);
return UserList;
}
catch (ex) {
CT.CommonUtility.ErrorHandler(ex);
}
}
Заранее спасибо.