protected override void Execute(CodeActivityContext context)
        {
            try
            {
                // Get the context service.
                IWorkflowContext            Icontext       = context.GetExtension <IWorkflowContext>();
                IOrganizationServiceFactory serviceFactory = context.GetExtension <IOrganizationServiceFactory>();

                // Use the context service to create an instance of IOrganizationService.
                IOrganizationService service = serviceFactory.CreateOrganizationService(Icontext.InitiatingUserId);

                //get input fields
                var birthDate = Birthdate.Get(context) == new DateTime(0001, 01, 01) ? new DateTime(1753, 01, 01) : Birthdate.Get(context);
                var firstName = Firstname.Get(context);
                var lastName  = Lastname.Get(context);
                var userName  = Username.Get(context) == null ? "" : Username.Get(context);

                // made in fetchXML builder
                // Instantiate QueryExpression QEcontact
                var QEcontact = new QueryExpression("contact");

                // Add columns to QEcontact.ColumnSet
                QEcontact.ColumnSet.AddColumns("fullname", "firstname", "lastname", "birthdate", "sdu_brugernavn", "sdu_domne", "emailaddress1", "address1_city", "jobtitle", "sdu_crmomkostningssted", "sdu_brugernavn", "address1_line1");

                // Define filter QEcontact.Criteria // all must match birthdate + sdu_crmudlb + opdateret fra fim
                var QEcontact_Criteria = new FilterExpression();
                QEcontact.Criteria.AddFilter(QEcontact_Criteria);

                // Define filter QEcontact_Criteria // either match on username, or firstname + lastname
                QEcontact_Criteria.FilterOperator = LogicalOperator.Or;
                QEcontact_Criteria.AddCondition("sdu_brugernavn", ConditionOperator.Equal, userName);

                var QEcontact_Criteria_name = new FilterExpression();
                QEcontact_Criteria.AddFilter(QEcontact_Criteria_name);

                // Define filter QEcontact_Criteria_name_birthdate
                QEcontact_Criteria_name.AddCondition("firstname", ConditionOperator.Like, "%" + firstName + "%");
                QEcontact_Criteria_name.AddCondition("lastname", ConditionOperator.Like, "%" + lastName + "%");
                QEcontact_Criteria_name.AddCondition("birthdate", ConditionOperator.On, birthDate);

                var QEcontact_Criteria_state = new FilterExpression();
                QEcontact.Criteria.AddFilter(QEcontact_Criteria_state);

                // define filter QEcontact_Criteria_dates
                QEcontact_Criteria_state.AddCondition("statecode", ConditionOperator.Equal, RecordStatus.Get(context) == false ? 1 : 0);                            // kontoen er inaktiv
                QEcontact_Criteria_state.AddCondition("sdu_crmudlb", ConditionOperator.OnOrAfter, DateTime.Today.AddMonths(ExpirationDateLimit.Get(context) * -1)); // CRM udløb er maksimalt 13 måneder gammelt
                QEcontact_Criteria_state.AddCondition("sdu_crmudlb", ConditionOperator.OnOrBefore, DateTime.Today.AddDays(-1));                                     // CRM er igår eller før
                QEcontact_Criteria_state.AddCondition("jobtitle", ConditionOperator.NotLike, "%Studentermedhjælp%");

                //find records
                var queryResult = service.RetrieveMultiple(QEcontact);

                if (queryResult.Entities.Count == 1)
                {
                    foreach (var record in queryResult.Entities)
                    {
                        // fullname
                        FullnameOutput.Set(context, record.GetAttributeValue <string>("fullname"));

                        // contactid
                        ContactID.Set(context, record.GetAttributeValue <Guid>("contactid").ToString());

                        // omkostningssted
                        var omkStedIdLocal = SearchForRecord(service, "sdu_brugeradmomksted",
                                                             new KeyValuePair <string, string>("sdu_omksted", record.GetAttributeValue <EntityReference>("sdu_crmomkostningssted").Id.ToString()),
                                                             new KeyValuePair <string, string>("", ""),
                                                             "sdu_brugeradmomkstedid");

                        OmkStedId.Set(context, omkStedIdLocal);

                        // domæne
                        String[] seperator_domaene = { "_" };

                        if (omkStedIdLocal != "")
                        {
                            Domaene.Set(context, SearchForRecord(service,
                                                                 "sdu_domner",
                                                                 new KeyValuePair <string, string>("sdu_brugeradmomksted", omkStedIdLocal.Split(seperator_domaene, StringSplitOptions.RemoveEmptyEntries).GetValue(0).ToString()),
                                                                 new KeyValuePair <string, string>("sdu_name", record.GetAttributeValue <string>("sdu_domne")),
                                                                 "sdu_domnerid"));

                            // email domæne
                            String[] seperator_emailDomaene = { "@" };
                            var      emailDomainFromContact = "@" + record.GetAttributeValue <string>("emailaddress1").Split(seperator_emailDomaene, StringSplitOptions.RemoveEmptyEntries).GetValue(1).ToString();

                            EmailDomaene.Set(context, SearchForRecord(service,
                                                                      "sdu_emaildomne",
                                                                      new KeyValuePair <string, string>("sdu_brugeradmomksted", omkStedIdLocal.Split(seperator_domaene, StringSplitOptions.RemoveEmptyEntries).GetValue(0).ToString()),
                                                                      new KeyValuePair <string, string>("sdu_name", emailDomainFromContact.Replace(" ", "")), // remove whitespaces
                                                                      "sdu_emaildomneid"));
                        }
                        else
                        {
                            // set output parameters to empty strings, if no omk sted
                            Domaene.Set(context, "");
                            EmailDomaene.Set(context, "");
                        }

                        // lokation + arbejdsadresse
                        var LokationOptionSetValue = "";

                        switch (record.GetAttributeValue <string>("address1_city"))
                        {
                        case "Odense":
                            LokationOptionSetValue = "100000000";
                            break;

                        case "Odense M":
                            LokationOptionSetValue = "100000000";
                            break;

                        case "Odense C":
                            LokationOptionSetValue = "100000000";
                            break;

                        case "Sønderborg":
                            LokationOptionSetValue = "100000001";
                            break;

                        case "Esbjerg":
                            LokationOptionSetValue = "100000002";
                            break;

                        case "Slagelse":
                            LokationOptionSetValue = "100000003";
                            break;

                        case "Kolding":
                            LokationOptionSetValue = "100000004";
                            break;

                        default:
                            break;
                        }

                        var workAddress = record.GetAttributeValue <string>("address1_line1") == null ? "" : record.GetAttributeValue <string>("address1_line1");

                        if (workAddress.Contains("Campusvej"))
                        {
                            LokationOptionSetValue = LokationOptionSetValue + "_" + "100000000";
                        }
                        else if (workAddress.Contains("J.B. Winsløws Vej"))
                        {
                            LokationOptionSetValue = LokationOptionSetValue + "_" + "100000001";
                        }

                        Lokation.Set(context, LokationOptionSetValue);


                        // stillingsbetegnelse
                        StillingsBetegnelse.Set(context, SearchForRecord(service,
                                                                         "sdu_stikogruppe",
                                                                         new KeyValuePair <string, string>("sdu_name", record.GetAttributeValue <string>("jobtitle") == null ? "" : record.GetAttributeValue <string>("jobtitle")),
                                                                         new KeyValuePair <string, string>("", ""),
                                                                         "sdu_stikogruppeid"));


                        // fødselsdato
                        BirthDateOutput.Set(context, record.GetAttributeValue <DateTime>("birthdate") < new DateTime(1900, 01, 01) ? DateTime.Now : record.GetAttributeValue <DateTime>("birthdate"));

                        // brugernavn
                        UsernameOutput.Set(context, record.GetAttributeValue <string>("sdu_brugernavn"));
                    }
                }
                else
                {
                    FullnameOutput.Set(context, "");
                    ContactID.Set(context, "");
                    OmkStedId.Set(context, "");
                    Domaene.Set(context, "");
                    EmailDomaene.Set(context, "");
                    Lokation.Set(context, "");
                    StillingsBetegnelse.Set(context, "");
                    BirthDateOutput.Set(context, DateTime.Now);
                    UsernameOutput.Set(context, "");
                }
            }
            catch (Exception ex)
            {
                throw (ex);
            }
        }