I have written custom workflow for unsharing the records. workflow triggers on change of some option set option. but I'm getting the abouv error.
below is my code:
Entity _entity = (Entity)context.InputParameters["Target"];
//Share Opportunity
if (_entity.LogicalName == "opportunity")
{
EntityReference createdBy = _entity.GetAttributeValue<EntityReference>("createdby");
int oppbusiness = ((OptionSetValue)(_entity.Attributes["jd_businessunit"])).Value;
//get the all the teams based on User
string fetchxml = "<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='true'>" +
"<entity name='team'>" +
"<attribute name='name' />" +
"<attribute name='businessunitid' />" +
"<attribute name='teamid' />" +
"<attribute name='teamtype' />" +
"<order attribute='name' descending='false' />" +
"<filter type='and'>" +
"<condition attribute='teamid' operator='not-null' />" +
"</filter>" +
"<link-entity name='teammembership' from='teamid' to='teamid' visible='false' intersect='true'>" +
"<link-entity name='systemuser' from='systemuserid' to='systemuserid' alias='ae'>" +
"<filter type='and'>" +
"<condition attribute='systemuserid' operator='eq' uiname='Beau Garrett' uitype='systemuser' value='" + createdBy.Id + "' />" +
"</filter>" +
"</link-entity>" +
"</link-entity>" +
"</entity>" +
"</fetch>";
EntityCollection teams = service.RetrieveMultiple(new FetchExpression(fetchxml));
if (teams.Entities.Count > 0)
{
foreach (Entity team in teams.Entities)
{
QueryExpression query = new QueryExpression("jd_securityconfig");
query.Criteria.AddCondition("jd_team", ConditionOperator.Equal, team.Id);
query.Criteria.AddCondition("jd_opportunity", ConditionOperator.Equal, true);
query.Criteria.AddCondition("jd_account", ConditionOperator.Null);
query.ColumnSet = new ColumnSet(true);
EntityCollection _secConfig = service.RetrieveMultiple(query);
foreach (Entity secConfig in _secConfig.Entities)
{
if (secConfig.Attributes.Contains("jd_teams"))
{
EntityReference shareWith = secConfig.GetAttributeValue<EntityReference>("jd_teams");
if (secConfig.Attributes.Contains("jd_businessunit"))
{
int Sec_business = ((OptionSetValue)(secConfig.Attributes["jd_businessunit"])).Value;
if (Sec_business != oppbusiness)
{
shareRecord(shareWith, _entity, service);
}
}
}
}
}
}
}
}
catch(Exception ex)
{
throw new InvalidPluginExecutionException(" " + ex.Message);
}
}
public void shareRecord(EntityReference shareWith, Entity entity, IOrganizationService service)
{
RevokeAccessRequest revokeRequest = new RevokeAccessRequest()
{
//ex: new EntityReference("salesorder", new Guid(orderId)),
Target = new EntityReference(entity.LogicalName, entity.Id),
//ex: new EntityReference("systemuser", new Guid(userId)),
Revokee = new EntityReference(shareWith.LogicalName, shareWith.Id),
};
RevokeAccessResponse revoked = (RevokeAccessResponse)service.Execute(revokeRequest);
}
}
*This post is locked for comments