Introduction and Post References
Basically, in this post, I just want to show how to filter the N to N lookup in the subgrid in CRM Form, without even modifying the Global Subgrid Ribbon in CRM.
In my previous post: http://missdynamicscrm.blogspot.sg/2015/07/filter-nn-subgrid-in-crm-2013-using.html, I have explained about a way how to filter the N to N Subgrid Lookup, but that is needed to modify the ribbon action globally and you might need to set another condition to actually skip is you need to filter only on specific entity, but your grid will be appearing in many entities, such as:
You want to filter the Contact lookup in, if you modify the subgrid ribbon, in every contact subgrid, the filter will be applied and you might need extra code of criteria to actually limit the execution.
Good thing about that if your entity only used for single entity and you don’t need to specify is that only for subgrid or associated view, then modifying the ribbon is a better solution. however, if you want to filter only subgrid in specific entity or form, you can actually using another way.
Like you can refer to my posts:
So, in this post, basically I try to combine the ways to become one solution, to filter the N to N lookup that only applicable once the user load the form using single javascript. This is unsupported customization, but, remember, modifying the N to N view also needs unsupported customization, so yeah, to reach the requirement we have to go further for unsupported customization eventhough strongly I also not recommend.
The Code
So, I just try to combine the code becoming:
*For CRM 2013
function modifyRibbon(subgridName) { try { //to store the original function ones var originalFunctionAddNewStandard = Mscrm.GridRibbonActions.addNewFromSubGridStandard; var originalFunctionAddExistingStandard = Mscrm.GridRibbonActions.addExistingFromSubGridStandard; var originalFunctionAssociated = Mscrm.GridRibbonActions.addExistingFromSubGridAssociated; //add new standard subgrid Mscrm.GridRibbonActions.addNewFromSubGridStandard = function (gridTypeCode, parentEntityTypeCode, parentEntityId, primaryControl, gridControl) { if (gridControl != null) { if (gridControl.get_id() != subgridName) { originalFunctionAddNewStandard(gridTypeCode, parentEntityTypeCode, parentEntityId, primaryControl, gridControl); } else { originalFunctionAddNewStandard(gridTypeCode, gridControl); filterTrainerProfile(gridTypeCode, gridControl); } } } //add existing standard subgrid Mscrm.GridRibbonActions.addExistingFromSubGridStandard = function (gridTypeCode, gridControl) { if (gridControl != null) { if (gridControl.get_id() != subgridName) { originalFunctionAddExistingStandard(gridTypeCode, gridControl); } else { originalFunctionAddExistingStandard(gridTypeCode, gridControl); filterTrainerProfile(gridTypeCode, gridControl);
} } } //add associate subgrid (N:N) Mscrm.GridRibbonActions.addExistingFromSubGridAssociated = function (gridTypeCode, gridControl) { if (gridControl != null) { if (gridControl.get_id() != subgridName) { originalFunctionAssociated(gridTypeCode, gridControl); } else { originalFunctionAssociated(gridTypeCode, gridControl); filterTrainerProfile(gridTypeCode, gridControl); } } } } catch (ex) { alert(ex); } }
*For CRM 2015
function modifyRibbon(subgridName) { try { //to store the original function ones var originalFunctionAddNewStandard = Mscrm.GridCommandActions.addNewFromSubGridStandard; var originalFunctionAddExistingStandard = Mscrm.GridCommandActions.addExistingFromSubGridStandard; var originalFunctionAssociated = Mscrm.GridCommandActions.addExistingFromSubGridAssociated; //add new standard subgrid Mscrm.GridRibbonActions.addNewFromSubGridStandard = function (gridTypeCode, parentEntityTypeCode, parentEntityId, primaryControl, gridControl) { if (gridControl != null) { if (gridControl.get_id() != subgridName) { originalFunctionAddNewStandard(gridTypeCode, parentEntityTypeCode, parentEntityId, primaryControl, gridControl); } else { originalFunctionAddNewStandard(gridTypeCode, gridControl); filterTrainerProfile(gridTypeCode, gridControl); } } } //add existing standard subgrid Mscrm.GridRibbonActions.addExistingFromSubGridStandard = function (gridTypeCode, gridControl) { if (gridControl != null) { if (gridControl.get_id() != subgridName) { originalFunctionAddExistingStandard(gridTypeCode, gridControl); } else { originalFunctionAddExistingStandard(gridTypeCode, gridControl); filterTrainerProfile(gridTypeCode, gridControl);
} } } //add associate subgrid (N:N) Mscrm.GridRibbonActions.addExistingFromSubGridAssociated = function (gridTypeCode, gridControl) { if (gridControl != null) { if (gridControl.get_id() != subgridName) { originalFunctionAssociated(gridTypeCode, gridControl); } else { originalFunctionAssociated(gridTypeCode, gridControl); filterTrainerProfile(gridTypeCode, gridControl); } } } } catch (ex) { alert(ex); } }
* So the filterTrainerProfile(gridTypeCode, gridControl); is your custom function to filter the view, some as you filter and create new custom view that I also have example in my previous post:
http://missdynamicscrm.blogspot.sg/2015/07/filter-nn-subgrid-in-crm-2013-using.html.
Remember, to get the GUID of the list record to show, you can always using CRM Javascript or in CRM 2013 and above you can use smarter way that is to combine with Custom Action, since Custom Action can be called through Javascript.
http://missdynamicscrm.blogspot.sg/search?q=custom+action
Hope this helps! Jiayou!
It was really a nice article, thanks for Share this valuable information.
ReplyDeleteIf you are looking for best Oracle financials courses we provide low price of fee for online coaching
Oracle fusion Financials Training in hyderabad
Oracle Fusion Financials online Training in hyderabad
Train Hard Quotes
ReplyDeleteWorkout Inspiration Quotes
Sports And Life Quotes
Funny Workout Quotes
Motivation Gym Quotes
Training Quotes
Most Famous Quotes
The Future Quotes
Quotes about smile
Quotes Words
Xyore Social Network
شركة قمة الدقة للخدمات المنزلية
ReplyDeleteشركة كشف تسربات المياه بالرياض
شركة جلى بلاط رخام بالقطيف
شركة تسليك مجارى ببقيق
Thank you for sharing such a nice and interesting blog with us. But in your blog, I had a chance to get some useful and unique information. I would like to suggest your blog.
ReplyDeleteHyperpigmentation cream
Viral Fever Medicines
IT'S VERY USEFUL INFORMATION FOR Customize CRM Software Solution.
ReplyDeleteYou can achieve this without needing to touch the ribbon function at all if you combine the above with the method used by Kishore (which would not work on it's own for me in CRM 2013) shown here: https://kishored4.wordpress.com/2017/06/02/filter-nn-sub-grid-in-dynamics-365-without-custom-actions/
ReplyDeleteMy working filter:
function preparePreSearch() {
var myViewGuid = "{D4EDF1E1-85CD-E711-811C-005056B4252F}";
var myViewEntity = "my_entityname";
var myViewName = "My view name";
setTimeout(function() {
var subGrid_ImageButton = document.getElementById("SUBGRIDNAME_addImageButton");
subGrid_ImageButton.addEventListener("click",function() {
setTimeout(function() {
var inlineElement = document.getElementById("lookup_SUBGRIDNAME_i");
var inlineBehaviour = inlineElement.InlinePresenceLookupUIBehavior;
inlineBehaviour.AddCustomView(myViewGuid,myViewEntity,myViewName,getFetchXml(),getLayoutXml(), true);
}, 500);
});
}, 1000);
}
Very usefull information for me...
ReplyDeletePython Training
Thanks for sharing the content related to Microsoft Dynamic CRM Development Services. I want to appreciate this blog and share with my friend.
ReplyDeleteusefull information for me...
ReplyDeleteHadoop Training in Chennai
ReplyDeleteكل هذه الخدمات واكثر من خلال شركة نقل عفش من الرياض الى الاردن افضل الخدمات الاساسية المميزة التى تساعد فى الوصول الى افضل النتائج المثاليه بالاضافة الى ان اعمال النقل تتم منذ لحظة اتصال عملاءنا الكرام بالشركة والبدء فى اعمال النقل منذ لحظة اتفاق مع عملاءنا الكرام فاذا اراد ان تشعر بالتميز بينا وبين اى شركة اخرى تقوم باعمال النقل واراد ان تشعر بالتميز والحفاظ على الاثاث دون ان يتاثر بالتغيرات التى تطرا على المكان فاعلم ان
شركة نقل عفش من الرياض الى دبي هى الحل الامثل فى القيام بهذه الخدمة على الفور
https://khalejmovers.com/
Thanks GDQ. That worked, although I had to use jQuery to find the elements. E.g.
ReplyDelete$("#SUBGRIDNAME_addImageButton").get(0)
I'm using on-premise version 1612 (8.2.2.112)