Friday, December 16, 2016

Associate Lead to Email Send in Dynamics CRM


The Associate Lead to Email Send custom workflow activity will accept a Lead and an Email Send and associate the two via a CRM many-to-many relationship named cdi_emailsend_lead

Inputs

Name
Type
Notes
Email Send
EntityReference (cdi_emailsend)
Lookup to the Email Send
Lead
EntityReference (lead)
Lookup to the Lead


Name
Type
Notes
Success
Boolean
Indicates Success or failure of the code

OutputsAssociate two records

using Microsoft.Xrm.Sdk;

using Microsoft.Xrm.Sdk.Messages;

using Microsoft.Xrm.Sdk.Workflow;

using System;

using System.Activities;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;


namespace CustomWorkflow

{

    public class AssociateContactToEmailSend : CodeActivity

    {

        #region Input Properties

        [RequiredArgument]

        [Input("Contact")]

        [ReferenceTarget("contact")]

        public InArgument<EntityReference> Guest { get; set; }


        [RequiredArgument]

        [Input("Email Send")]

        [ReferenceTarget("cdi_emailsend")]

        public InArgument<EntityReference> EmailSend { get; set; }

        #endregion

        protected override void Execute(CodeActivityContext context)

        {

            IWorkflowContext workflowContext = context.GetExtension<IWorkflowContext>();

            IOrganizationServiceFactory serviceFactory = context.GetExtension<IOrganizationServiceFactory>();

            IOrganizationService service = serviceFactory.CreateOrganizationService(workflowContext.UserId);

            //Create the tracing service

            ITracingService tracingService = context.GetExtension<ITracingService>();


            var guest = Guest.Get(context);

            var emailSend = EmailSend.Get(context);


            tracingService.Trace("Guest:" + guest.Id);

            tracingService.Trace("Email Send:" + emailSend.Id);


            Microsoft.Xrm.Sdk.EntityReference Moniker2 = new Microsoft.Xrm.Sdk.EntityReference();

            Moniker2.Id = guest.Id;

            Moniker2.LogicalName = "contact";//Entity Name


            // Code Create Moniker for second Entity: New_CustomEntity

            Microsoft.Xrm.Sdk.EntityReference Moniker1 = new Microsoft.Xrm.Sdk.EntityReference();

            Moniker1.Id = emailSend.Id;

            Moniker1.LogicalName = "cdi_emailsend";

            tracingService.Trace("Started Assosiating");

            AssociateManyToManyEntityRecords(service, Moniker1, Moniker2, "cdi_emailsend_contact");

            tracingService.Trace("Completed Assosiating");

        }


        private bool AssociateManyToManyEntityRecords(IOrganizationService service, Microsoft.Xrm.Sdk.EntityReference moniker1, Microsoft.Xrm.Sdk.EntityReference moniker2, string strEntityRelationshipName)

        {

            try

            {

                AssociateRequest request = new AssociateRequest();

                request.Target = moniker1;

                request.RelatedEntities = new EntityReferenceCollection { moniker2 };

                request.Relationship = new Relationship(strEntityRelationshipName);


                // Execute the request.

                service.Execute(request);



                return true;

            }

            catch (Exception exp)

            {

                return false;

            }

        }

    }

}








Thursday, December 15, 2016

Update the fetchXML that will be used by the Sub- grid in Dynamics CRM

///<reference path="XrmPage-vsdoc.js"/>
function UpdateSubGrid()
{
 window.scroll(0,0);
 var rereferralsGrid = document.getElementById("rereferrals");
 var lookupfield = new Array;
 lookupfield = Xrm.Page.getAttribute("ftd_familymember").getValue();
 intakeid = Xrm.Page.getAttribute("safy_intakeid").getValue();

 if (lookupfield != null)
 {
     var lookupid = lookupfield[0].id;
 }

else
 {
    return;
 }


if (rereferralsGrid ==null || rereferralsGrid.readyState != "complete")
{
    setTimeout('UpdateSubGrid()', 2000);
    return;
}   

 //Update the fetchXML that will be used by the grid.
 var fetchXml = "<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>" 
 fetchXml += "<entity name='ftd_intakeassessment'>";
 fetchXml += "<attribute name='safy_intakeassessment'/>";
 fetchXml += "<attribute name='ftd_intakeassessmentid' />";
 fetchXml += "<attribute name='safy_intakeid' />";
 fetchXml += "<attribute name='safy_ica_status_reason' />";
 fetchXml += "<attribute name='safy_ica_status' />";
 fetchXml += "<attribute name='safy_ica_provider_worker_name' />";
 fetchXml += "<attribute name='safy_ica_name' />";
 fetchXml += "<attribute name='safy_ica_intake_office' />";
 fetchXml += "<attribute name='safy_familymembername' />";
 fetchXml += "<attribute name='safy_ica_assess_supervisor' />";
 fetchXml += "<order attribute='safy_intakeid' descending='false' />";
 fetchXml += "<filter type='and'>";
 fetchXml += "<condition attribute='safy_initialassessment' operator='eq' value='1' />";
 fetchXml += "<condition attribute='safy_intakeid' operator='ne' value='"+ intakeid +"' />"
 fetchXml += "<condition attribute='ftd_familymember' operator='eq' uiname='Family Member' uitype='ftd_familymember' value='" + lookupid + "' />";
 fetchXml += "</filter>";
 fetchXml += "</entity>";
 fetchXml += "</fetch>";

 rereferralsGrid.control.SetParameter("fetchXml", fetchXml);
 rereferralsGrid.control.refresh();
}

Wednesday, December 14, 2016

Formats a postal code & Sets a lookup field in Javascript

function formatPostalcode(pcode) {
    var regexObj = /^\s*([a-ceghj-npr-tvxy]\d[a-ceghj-npr-tv-z])(\s)?(\d[a-ceghj-npr-tv-z]\d)\s*$/i
    if (regexObj.test(pcode)) {
        var parts = pcode.match(regexObj);
        var pc = parts[1] + " " + parts[3];
        return pc.toUpperCase();
    }
    else {
        return pcode;
    }
}



function SetLookup(fieldName, idValue, textValue, typeValue) {
    var value = new Array();
    value[0] = new Object();
    value[0].id = idValue;
    value[0].name = textValue;
    value[0].typename = typeValue;

    setDisabledField(fieldName, value);
}

Gets the current user and enters string into specified field

function loggedUser(field) {
    var user = Xrm.Page.context.getUserId();
    var userId = user.substring(1, 37);
    var serverUrl = document.location.protocol;
    serverUrl += "//" + document.location.host;
    serverUrl += "/" + Xrm.Page.context.getOrgUniqueName();
    var ODATA_ENDPOINT = "/XRMServices/2011/OrganizationData.svc";
    var ODATA_EntityCollection = "/SystemUserSet";
    var ODATA_Query = "(guid\'" + userId + "')";
    var ODATA_Final_url = serverUrl + ODATA_ENDPOINT + ODATA_EntityCollection + ODATA_Query;

    $.ajax({
        type: "GET",
        contentType: "application/json; charset=utf-8",
        datatype: "json",
        url: ODATA_Final_url,
        beforeSend: function (XMLHttpRequest) {
            XMLHttpRequest.setRequestHeader("Accept", "application/json");
        },
        success: function (data, textStatus, XmlHttpRequest) {
            var userName = data.d.FullName;
            Xrm.Page.getAttribute(field).setSubmitMode("always");
            Xrm.Page.getAttribute(field).setValue(userName);
        },
        error: function (XmlHttpRequest, textStatus, errorThrown) {
            alert('Error: ' + ODATA_Final_url);

        }
    });

}

Checks to see if the user has a particular role in Dynamics CRM

//  UserHasRole(roleName)           Checks to see if the user has a particular role
function UserHasRole(roleName) {
    var oXml = GetCurrentUserRoles();
    if (oXml != null)
    {
        var roles = oXml.selectNodes("//BusinessEntity/q1:name");
        if (roles != null)
        {
            for (i = 0; i < roles.length; i++)
            {
                if (roles[i].text == roleName)
                {
                    return true;
                }
            }
        }
    }
    return false;
}

//  GetCurrentUserRoles()           Gets user's security roles
function GetCurrentUserRoles() {
    var xml = "" +
     "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
     "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" +
     GenerateAuthenticationHeader() +
     " <soap:Body>" +
     " <RetrieveMultiple xmlns=\"http://schemas.microsoft.com/crm/2007/WebServices\">" +
     " <query xmlns:q1=\"http://schemas.microsoft.com/crm/2006/Query\" xsi:type=\"q1:QueryExpression\">" +
     " <q1:EntityName>role</q1:EntityName>" +
     " <q1:ColumnSet xsi:type=\"q1:ColumnSet\">" +
     " <q1:Attributes>" +
     " <q1:Attribute>name</q1:Attribute>" +
     " </q1:Attributes>" +
     " </q1:ColumnSet>" +
     " <q1:Distinct>false</q1:Distinct>" +
     " <q1:LinkEntities>" +
     " <q1:LinkEntity>" +
     " <q1:LinkFromAttributeName>roleid</q1:LinkFromAttributeName>" +
     " <q1:LinkFromEntityName>role</q1:LinkFromEntityName>" +
     " <q1:LinkToEntityName>systemuserroles</q1:LinkToEntityName>" +
     " <q1:LinkToAttributeName>roleid</q1:LinkToAttributeName>" +
     " <q1:JoinOperator>Inner</q1:JoinOperator>" +
     " <q1:LinkEntities>" +
     " <q1:LinkEntity>" +
     " <q1:LinkFromAttributeName>systemuserid</q1:LinkFromAttributeName>" +
     " <q1:LinkFromEntityName>systemuserroles</q1:LinkFromEntityName>" +
     " <q1:LinkToEntityName>systemuser</q1:LinkToEntityName>" +
     " <q1:LinkToAttributeName>systemuserid</q1:LinkToAttributeName>" +
     " <q1:JoinOperator>Inner</q1:JoinOperator>" +
     " <q1:LinkCriteria>" +
     " <q1:FilterOperator>And</q1:FilterOperator>" +
     " <q1:Conditions>" +
     " <q1:Condition>" +
     " <q1:AttributeName>systemuserid</q1:AttributeName>" +
     " <q1:Operator>EqualUserId</q1:Operator>" +
     " </q1:Condition>" +
     " </q1:Conditions>" +
     " </q1:LinkCriteria>" +
     " </q1:LinkEntity>" +
     " </q1:LinkEntities>" +
     " </q1:LinkEntity>" +
     " </q1:LinkEntities>" +
     " </query>" +
     " </RetrieveMultiple>" +
     " </soap:Body>" +
     "</soap:Envelope>" +
     "";

    var xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");

    xmlHttpRequest.Open("POST", "/mscrmservices/2007/CrmService.asmx", false);
    xmlHttpRequest.setRequestHeader("SOAPAction", " http://schemas.microsoft.com/crm/2007/WebServices/RetrieveMultiple");
    xmlHttpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
    xmlHttpRequest.setRequestHeader("Content-Length", xml.length);
    xmlHttpRequest.send(xml);

    var resultXml = xmlHttpRequest.responseXML;
    return (resultXml);
}

Show Hide Sections in MS Dynamics CRM

/************************************************
stateSectionsOnChange - function to handle which fields 
to show based on the state selected
************************************************/
function stateSectionsOnChange() {
    var closeTab = Xrm.Page.ui.tabs.get("Professional Info");
var showTXSection = false;
    var showOHSection = false;
    var showINSection = false;

    switch (Xrm.Page.getAttribute("col_addressstate").getText()) {
        case "Texas":
showTXSection = true;
            showOHSection = false;
showINSection = false;
            break;
        case "Ohio":
showTXSection = false;
            showOHSection = true;
showINSection = false;
            break;
        case "Indiana":
showTXSection = false;
            showOHSection = false;
showINSection = true;
            break;
    }

    closeTab.sections.get("Texas").setVisible(showTXSection);
    closeTab.sections.get("Ohio").setVisible(showOHSection);
    closeTab.sections.get("Indiana").setVisible(showINSection);
}
/***    end stateSectionsOnChange     ***/

Get files of last hour in Azure Data Factory

  Case I have a Data Factory pipeline that should run each hour and collect all new files added to the data lake since the last run. What is...