Hide a Primary Navigation link using Web Page Access Control rule in Portals in Dynamics 365


Say for e.g. we want to hide Test Page navigation link from the Portal for anonymous users and make it visible only for authenticated users.

For this we can create a Web Page Access Control Rule,

Go to Portals à Web Page Access Control Rules and create a new rule as shown below

Select the Website and the web page to be hidden.

For Right, select Restrict Read and in Web Roles add Authenticated Users Web Role.

On refreshing the portal à

For logged in user

For anonymous user

Hope it helps..

Sample code to retrieve more than 5000 records using FetchXML in CRM


Hi,

Sharing a sample code to retrieve more than 5000 records using the Fetch XML.

Version 1 :

private List<Entity> GetTotalRecordsfromFetch(string fetchXML, IOrganizationService orgService)
{
List<Entity> lstEntity = new List<Entity>();

int fetchCount = 5000;
int pageNumber = 1;
string pagingCookie = null;

while (true)
{
// Build fetchXml string with the placeholders.
string xml = this.CreateXml(fetchXML, pagingCookie, pageNumber, fetchCount);
RetrieveMultipleRequest fetchRequest = new RetrieveMultipleRequest
{
Query = new FetchExpression(xml)
};

var returnCollections = ((RetrieveMultipleResponse)orgService.Execute(fetchRequest)).EntityCollection;

if (returnCollections.Entities.Count >= 1)
{
lstEntity.AddRange(returnCollections.Entities);
}

if (returnCollections.MoreRecords)
{
pageNumber++;

results.pagingCookie = returnCollections.PagingCookie;
}
else
{
// If no more records in the result nodes, exit the loop.
break;
}
}

return lstEntity;
}

public string CreateXml(string xml, string cookie, int page, int count)
{
StringReader stringReader = new StringReader(xml);
XmlTextReader reader = new XmlTextReader(stringReader);

XmlDocument doc = new XmlDocument();
doc.Load(reader);

XmlAttributeCollection attrs = doc.DocumentElement.Attributes;

if (cookie != null)
{
XmlAttribute pagingAttr = doc.CreateAttribute("paging-cookie");
pagingAttr.Value = cookie;
attrs.Append(pagingAttr);
}

XmlAttribute pageAttr = doc.CreateAttribute("page");
pageAttr.Value = System.Convert.ToString(page);
attrs.Append(pageAttr);

XmlAttribute countAttr = doc.CreateAttribute("count");
countAttr.Value = System.Convert.ToString(count);
attrs.Append(countAttr);

StringBuilder sb = new StringBuilder(1024);
StringWriter stringWriter = new StringWriter(sb);

XmlTextWriter writer = new XmlTextWriter(stringWriter);
doc.WriteTo(writer);
writer.Close();

return sb.ToString();
}

Version 2 –

private static List&lt;Entity&gt; GetTotalRecordsFetchXML(OrganizationServiceProxy orgProxy, string fetchXML)
{
XDocument xDocument = XDocument.Parse(fetchXML);
var fetchXmlEntity = xDocument.Root.Element("entity").ToString();

EntityCollection entityColl = new EntityCollection();
List&lt;Entity&gt; lstEntity = new List&lt;Entity&gt;();
int page = 1;
do
{

entityColl = orgProxy.RetrieveMultiple(new FetchExpression(
string.Format("&lt;fetch version='1.0' page='{1}' paging-cookie='{0}'&gt;" + fetchXmlEntity + "&lt;/fetch&gt;",
SecurityElement.Escape(entityColl.PagingCookie), page++)));

lstEntity.AddRange(entityColl.Entities);
}
while (entityColl.MoreRecords);

return lstEntity;
}




Hope it helps..

Advertisements

Missing RemoveListMembersListRequest in CRM.


In one of our recent implementations, we were working with Marketing List which could be in millions.

So we had the recent request wherein we split the marketing list into groups.

For adding members to a marketing list we have the following request

AddListMembersListRequest 

https://msdn.microsoft.com/en-us/library/microsoft.crm.sdk.messages.addlistmemberslistrequest.aspx

which is quite efficient as we can add multiple members in a single request.

However, when it comes to removing a member from marketing, we do not have a corresponding Remove request like RemoveListMembersListRequest.

https://msdn.microsoft.com/en-us/library/microsoft.crm.sdk.messages.removememberlistrequest.aspx

We only have RemoveMemberListRequest, which only removes 1 member at a time, which is highly inefficient when we are taking in consideration large number of records.

Kindly vote up for this idea !!

https://ideas.dynamics.com/ideas/dynamics-crm/ID0002529

More details

https://social.microsoft.com/Forums/en-US/5d700a43-0c57-4a47-9c8e-192c70d30a2d/removememberlistrequest-causes-sql-timeout-error?forum=crmdevelopment

App not accessible to certain users in Dynamics 365 (CRM)


Recently we created a new App for one our clients and gave permission to appropriate security roles to access those App.

But still some users were not able to access the App.

Eventually we realized the Security Roles (custom one) assigned was not having Read permission on App to access it.

This fixed the issue.

Hope it helps..

System.Security.SecurityException: That assembly does not allow partially trusted callers while using HttpUtility.UrlEncode in CRM


Hi,

We got the below error in one of our Sandboxed Plugins

“System.Security.SecurityException: That assembly does not allow partially trusted callers”.

We realised it was because of using System.Web.HttpUtility class


We replaced it with EscapeDataString method and this fixed the issue.

System.Uri.EscapeDataString()

Helpful thread

https://stackoverflow.com/questions/3840762/how-do-you-urlencode-without-using-system-web

Hope it helps..

Status not getting updated using SetStateRequest in Dynamics 365.


Hi,

We were recently facing issue while trying to update status for Campaign Entity using SetStateRequest in Dynamics 365. The value for were not getting updated.

Eventually we realized that it could be because of SetStateRequest being deprecated now in Dynamics 365 (online).

Updating the code to use UpdateRequest fixed the issue.

Hope it helps..