diff --git a/msdyncrmWorkflowTools/msdyncrmWorkflowTools/Class/GetRecordUrl.cs b/msdyncrmWorkflowTools/msdyncrmWorkflowTools/Class/GetRecordUrl.cs
new file mode 100644
index 0000000..6be07d1
--- /dev/null
+++ b/msdyncrmWorkflowTools/msdyncrmWorkflowTools/Class/GetRecordUrl.cs
@@ -0,0 +1,52 @@
+using Microsoft.Xrm.Sdk.Workflow;
+using System;
+using System.Activities;
+
+namespace msdyncrmWorkflowTools
+{
+ ///
+ /// Gets the URL for a record
+ ///
+ public class GetRecordUrl : CodeActivity
+ {
+ ///
+ /// A reference Record URL (use the URL for the record on which the flow is running)
+ ///
+ [RequiredArgument]
+ [Input("Reference Record URL")]
+ public InArgument ReferenceRecordUrl { get; set; }
+
+ ///
+ /// ID of the record
+ ///
+ [RequiredArgument]
+ [Input("Record ID")]
+ public InArgument RecordId { get; set; }
+
+ ///
+ /// Logical name of the entity
+ ///
+ [RequiredArgument]
+ [Input("Entity Logical Name")]
+ public InArgument EntityName { get; set; }
+
+ ///
+ /// URL of the record
+ ///
+ [Output("Record URL")]
+ public OutArgument RecordUrl { get; set; }
+
+ protected override void Execute(CodeActivityContext context)
+ {
+ Common objCommon = new Common(context);
+ msdyncrmWorkflowTools_Class commonClass = new msdyncrmWorkflowTools_Class(objCommon.service, objCommon.tracingService);
+ string entityName = this.EntityName.Get(context);
+ Guid recordId = Guid.Parse(this.RecordId.Get(context));
+ string referenceRecordUrl = this.ReferenceRecordUrl.Get(context);
+
+ var entityCode = objCommon.GetEntityCodeFromName(entityName, objCommon.service);
+ var recordUrl = commonClass.GetRecordUrl(referenceRecordUrl, entityCode, recordId);
+ this.RecordUrl.Set(context, recordUrl);
+ }
+ }
+}
diff --git a/msdyncrmWorkflowTools/msdyncrmWorkflowTools/Common.cs b/msdyncrmWorkflowTools/msdyncrmWorkflowTools/Common.cs
index 7e65d51..ad4048c 100644
--- a/msdyncrmWorkflowTools/msdyncrmWorkflowTools/Common.cs
+++ b/msdyncrmWorkflowTools/msdyncrmWorkflowTools/Common.cs
@@ -55,6 +55,23 @@ public string sGetEntityNameFromCode(string ObjectTypeCode, IOrganizationService
return entityMetadata.SchemaName.ToLower();
}
+ public string GetEntityCodeFromName(string entityName, IOrganizationService service)
+ {
+ MetadataFilterExpression entityFilter = new MetadataFilterExpression(LogicalOperator.And);
+ entityFilter.Conditions.Add(new MetadataConditionExpression("LogicalName", MetadataConditionOperator.Equals, entityName));
+ EntityQueryExpression entityQueryExpression = new EntityQueryExpression()
+ {
+ Criteria = entityFilter
+ };
+ RetrieveMetadataChangesRequest retrieveMetadataChangesRequest = new RetrieveMetadataChangesRequest()
+ {
+ Query = entityQueryExpression,
+ ClientVersionStamp = null
+ };
+ RetrieveMetadataChangesResponse response = (RetrieveMetadataChangesResponse)service.Execute(retrieveMetadataChangesRequest);
+ EntityMetadata entityMetadata = response.EntityMetadata.Count > 0 ? (EntityMetadata)response.EntityMetadata[0] : null;
+ return entityMetadata?.ObjectTypeCode.Value.ToString();
+ }
public EntityCollection getAssociations(string PrimaryEntityName, Guid PrimaryEntityId, string _relationshipName, string entityName, string ParentId)
{
diff --git a/msdyncrmWorkflowTools/msdyncrmWorkflowTools/msdyncrmWorkflowTools.csproj b/msdyncrmWorkflowTools/msdyncrmWorkflowTools/msdyncrmWorkflowTools.csproj
index 33625c9..ff612b4 100644
--- a/msdyncrmWorkflowTools/msdyncrmWorkflowTools/msdyncrmWorkflowTools.csproj
+++ b/msdyncrmWorkflowTools/msdyncrmWorkflowTools/msdyncrmWorkflowTools.csproj
@@ -99,6 +99,7 @@
+
diff --git a/msdyncrmWorkflowTools/msdyncrmWorkflowTools_Class/msdyncrmWorkflowTools_Class.cs b/msdyncrmWorkflowTools/msdyncrmWorkflowTools_Class/msdyncrmWorkflowTools_Class.cs
index 9106d45..3df17ba 100644
--- a/msdyncrmWorkflowTools/msdyncrmWorkflowTools_Class/msdyncrmWorkflowTools_Class.cs
+++ b/msdyncrmWorkflowTools/msdyncrmWorkflowTools_Class/msdyncrmWorkflowTools_Class.cs
@@ -319,6 +319,14 @@ public string GetRecordID(string recordURL)
return objectId;
}
+ public string GetRecordUrl(string referenceRecordUrl, string entityCode, Guid recordId)
+ {
+ string[] urlParts = referenceRecordUrl.Split("?".ToArray());
+ string dynamicsUrl = urlParts[0];
+ return $"{dynamicsUrl}?etc={entityCode}&id={recordId}";
+ }
+
+
public string GetAppModuleId(string appModuleUniqueName)
{
var query = new QueryExpression